Merge "Remove .classpath and .project files" into gingerbread
diff --git a/build/sdk.atree b/build/sdk.atree
index cb15d5a..35d34dd 100644
--- a/build/sdk.atree
+++ b/build/sdk.atree
@@ -160,6 +160,7 @@
 development/samples/NotePad                  samples/${PLATFORM_NAME}/NotePad
 development/samples/SampleSyncAdapter        samples/${PLATFORM_NAME}/SampleSyncAdapter
 development/samples/SearchableDictionary     samples/${PLATFORM_NAME}/SearchableDictionary
+development/samples/SipDemo                  samples/${PLATFORM_NAME}/SipDemo
 development/samples/SkeletonApp              samples/${PLATFORM_NAME}/SkeletonApp
 development/samples/Snake                    samples/${PLATFORM_NAME}/Snake
 development/samples/SoftKeyboard             samples/${PLATFORM_NAME}/SoftKeyboard
diff --git a/ndk/platforms/android-3/include/grp.h b/ndk/platforms/android-3/include/grp.h
index 4442eb7..7ddb791 100644
--- a/ndk/platforms/android-3/include/grp.h
+++ b/ndk/platforms/android-3/include/grp.h
@@ -56,9 +56,9 @@
 
 __BEGIN_DECLS
 struct group	*getgrgid(gid_t);
+struct group	*getgrnam(const char *);
 
 #if 0 /* MISSING FROM BIONIC */
-struct group	*getgrnam(const char *);
 #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE
 struct group	*getgrent(void);
 void		 setgrent(void);
diff --git a/ndk/platforms/android-3/include/locale.h b/ndk/platforms/android-3/include/locale.h
index df42921..4259ddd 100644
--- a/ndk/platforms/android-3/include/locale.h
+++ b/ndk/platforms/android-3/include/locale.h
@@ -51,9 +51,8 @@
 
 extern char *setlocale(int category, const char *locale);
 
-/* Make libstdc++-v3 happy.  */
+#if 1 /* MISSING FROM BIONIC - DEFINED TO MAKE libstdc++-v3 happy */
 struct lconv { };
-#if 0 /* MISSING FROM BIONIC */
 struct lconv *localeconv(void);
 #endif /* MISSING */
 
diff --git a/ndk/platforms/android-4/include/GLES/glplatform.h b/ndk/platforms/android-4/include/GLES/glplatform.h
index 0924cae..a38ea4c 100644
--- a/ndk/platforms/android-4/include/GLES/glplatform.h
+++ b/ndk/platforms/android-4/include/GLES/glplatform.h
@@ -24,7 +24,7 @@
 #define GL_API      KHRONOS_APICALL
 #endif
 
-#if defined(ANDROID)
+#if defined(__ANDROID__)
 
 #define GL_APIENTRY KHRONOS_APIENTRY
 
diff --git a/ndk/platforms/android-4/include/KHR/khrplatform.h b/ndk/platforms/android-4/include/KHR/khrplatform.h
index 1660bd7..75bc551 100644
--- a/ndk/platforms/android-4/include/KHR/khrplatform.h
+++ b/ndk/platforms/android-4/include/KHR/khrplatform.h
@@ -26,7 +26,7 @@
 
 /* Platform-specific types and definitions.
  * $Revision: 7244 $ on $Date: 2009-01-20 17:06:59 -0800 (Tue, 20 Jan 2009) $
- * 
+ *
  * Adopters may modify this file to suit their platform. Adopters are
  * encouraged to submit platform specific modifications to the Khronos
  * group so that they can be included in future versions of this file.
@@ -37,13 +37,13 @@
  * A predefined template which fills in some of the bug fields can be
  * reached using http://tinyurl.com/khrplatform-h-bugreport, but you
  * must create a Bugzilla login first.
- * 
+ *
  *
  * See the Implementer's Guidelines for information about where this file
  * should be located on your system.
  *    http://www.khronos.org/registry/implementers_guide.pdf
  *
- * 
+ *
  * This file should be included as
  *        #include <KHR/khrplatform.h>
  * by the Khronos API header file that uses its types and defines.
@@ -70,7 +70,7 @@
  *
  * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
  * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
- * 
+ *
  *
  * Macros defined in this file:
  *    KHRONOS_APICALL
@@ -91,7 +91,7 @@
 #   define KHRONOS_APICALL __declspec(dllimport)
 #elif defined (__SYMBIAN32__)
 #   define KHRONOS_APICALL IMPORT_C
-#elif defined(ANDROID)
+#elif defined(__ANDROID__)
 #   define KHRONOS_APICALL __attribute__((visibility("default")))
 #else
 #   define KHRONOS_APICALL
@@ -228,11 +228,11 @@
 #if KHRONOS_SUPPORT_INT64
 /* Time types
  *
- * These types can be used to represent a time interval in nanoseconds or 
- * an absolute Unadjusted System Time.  Unadjusted System Time is the number 
- * of nanoseconds since some arbitrary system event (e.g. since the last 
- * time the system booted).  The Unadjusted System Time is an unsigned 
- * 64 bit value that wraps back to 0 every 584 years.  Time intervals 
+ * These types can be used to represent a time interval in nanoseconds or
+ * an absolute Unadjusted System Time.  Unadjusted System Time is the number
+ * of nanoseconds since some arbitrary system event (e.g. since the last
+ * time the system booted).  The Unadjusted System Time is an unsigned
+ * 64 bit value that wraps back to 0 every 584 years.  Time intervals
  * may be either signed or unsigned.
  */
 typedef khronos_uint64_t       khronos_utime_nanoseconds_t;
diff --git a/ndk/platforms/android-8/include/err.h b/ndk/platforms/android-8/include/err.h
new file mode 100644
index 0000000..1636efe
--- /dev/null
+++ b/ndk/platforms/android-8/include/err.h
@@ -0,0 +1,90 @@
+/*	$OpenBSD: err.h,v 1.10 2006/01/06 18:53:04 millert Exp $	*/
+/*	$NetBSD: err.h,v 1.11 1994/10/26 00:55:52 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)err.h	8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _ERR_H_
+#define	_ERR_H_
+
+/*
+ * Don't use va_list in the err/warn prototypes.   Va_list is typedef'd in two
+ * places (<machine/varargs.h> and <machine/stdarg.h>), so if we include one
+ * of them here we may collide with the utility's includes.  It's unreasonable
+ * for utilities to have to include one of them to include err.h, so we get
+ * __va_list from <machine/_types.h> and use it.
+ */
+#include <sys/cdefs.h>
+#include <machine/_types.h>
+
+__BEGIN_DECLS
+
+__noreturn void	err(int, const char *, ...)
+			__attribute__((__format__ (printf, 2, 3)));
+__noreturn void	verr(int, const char *, __va_list)
+			__attribute__((__format__ (printf, 2, 0)));
+__noreturn void	errx(int, const char *, ...)
+			__attribute__((__format__ (printf, 2, 3)));
+__noreturn void	verrx(int, const char *, __va_list)
+			__attribute__((__format__ (printf, 2, 0)));
+void		warn(const char *, ...)
+			__attribute__((__format__ (printf, 1, 2)));
+void		vwarn(const char *, __va_list)
+			__attribute__((__format__ (printf, 1, 0)));
+void		warnx(const char *, ...)
+			__attribute__((__format__ (printf, 1, 2)));
+void		vwarnx(const char *, __va_list)
+			__attribute__((__format__ (printf, 1, 0)));
+
+/*
+ * The _* versions are for use in library functions so user-defined
+ * versions of err*,warn* do not get used.
+ */
+__noreturn void	_err(int, const char *, ...)
+			__attribute__((__format__ (printf, 2, 3)));
+__noreturn void	_verr(int, const char *, __va_list)
+			__attribute__((__format__ (printf, 2, 0)));
+__noreturn void	_errx(int, const char *, ...)
+			__attribute__((__format__ (printf, 2, 3)));
+__noreturn void	_verrx(int, const char *, __va_list)
+			__attribute__((__format__ (printf, 2, 0)));
+void		_warn(const char *, ...)
+			__attribute__((__format__ (printf, 1, 2)));
+void		_vwarn(const char *, __va_list)
+			__attribute__((__format__ (printf, 1, 0)));
+void		_warnx(const char *, ...)
+			__attribute__((__format__ (printf, 1, 2)));
+void		_vwarnx(const char *, __va_list)
+			__attribute__((__format__ (printf, 1, 0)));
+
+__END_DECLS
+
+#endif /* !_ERR_H_ */
diff --git a/ndk/platforms/android-8/include/stdio.h b/ndk/platforms/android-8/include/stdio.h
index ac475db..c38ed5a 100644
--- a/ndk/platforms/android-8/include/stdio.h
+++ b/ndk/platforms/android-8/include/stdio.h
@@ -307,7 +307,7 @@
 FILE	*fdopen(int, const char *);
 int	 fileno(FILE *);
 
-#if (__POSIX_VISIBLE >= 199209) || 1 /* ANDROID: Bionic does include this */
+#if (__POSIX_VISIBLE >= 199209)
 int	 pclose(FILE *);
 FILE	*popen(const char *, const char *);
 #endif
diff --git a/ndk/platforms/android-9/include/EGL/eglplatform.h b/ndk/platforms/android-9/include/EGL/eglplatform.h
index 25d7697..e6c250d 100644
--- a/ndk/platforms/android-9/include/EGL/eglplatform.h
+++ b/ndk/platforms/android-9/include/EGL/eglplatform.h
@@ -78,7 +78,7 @@
 typedef void *EGLNativeWindowType;
 typedef void *EGLNativePixmapType;
 
-#elif defined(__unix__) && !defined(ANDROID)
+#elif defined(__unix__) && !defined(__ANDROID__)
 
 /* X11 (tentative)  */
 #include <X11/Xlib.h>
@@ -89,7 +89,7 @@
 typedef Window   EGLNativeWindowType;
 
 
-#elif defined(ANDROID)
+#elif defined(__ANDROID__)
 
 #include <android/native_window.h>
 
diff --git a/ndk/platforms/android-9/include/android/asset_manager.h b/ndk/platforms/android-9/include/android/asset_manager.h
index 4fa0ef3..3ad0f99 100644
--- a/ndk/platforms/android-9/include/android/asset_manager.h
+++ b/ndk/platforms/android-9/include/android/asset_manager.h
@@ -18,9 +18,9 @@
 #ifndef ANDROID_ASSET_MANAGER_H
 #define ANDROID_ASSET_MANAGER_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
 
 struct AAssetManager;
 typedef struct AAssetManager AAssetManager;
@@ -130,9 +130,6 @@
 int AAsset_isAllocated(AAsset* asset);
 
 
+__END_DECLS
 
-#ifdef __cplusplus
-};
-#endif
-
-#endif      // ANDROID_ASSET_MANAGER_H
+#endif      /* ANDROID_ASSET_MANAGER_H */
diff --git a/ndk/platforms/android-9/include/android/asset_manager_jni.h b/ndk/platforms/android-9/include/android/asset_manager_jni.h
index aec2d3c..073434b 100644
--- a/ndk/platforms/android-9/include/android/asset_manager_jni.h
+++ b/ndk/platforms/android-9/include/android/asset_manager_jni.h
@@ -21,9 +21,7 @@
 #include <android/asset_manager.h>
 #include <jni.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 /**
  * Given a Dalvik AssetManager object, obtain the corresponding native AAssetManager
@@ -33,8 +31,6 @@
  */
 AAssetManager* AAssetManager_fromJava(JNIEnv* env, jobject assetManager);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif      // ANDROID_ASSET_MANAGER_JNI_H
+#endif      /* ANDROID_ASSET_MANAGER_JNI_H */
diff --git a/ndk/platforms/android-9/include/android/bitmap.h b/ndk/platforms/android-9/include/android/bitmap.h
index 5078277..160e34a 100644
--- a/ndk/platforms/android-9/include/android/bitmap.h
+++ b/ndk/platforms/android-9/include/android/bitmap.h
@@ -17,12 +17,11 @@
 #ifndef ANDROID_BITMAP_H
 #define ANDROID_BITMAP_H
 
+#include <sys/cdefs.h>
 #include <stdint.h>
 #include <jni.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 #define ANDROID_BITMAP_RESUT_SUCCESS            0
 #define ANDROID_BITMAP_RESULT_BAD_PARAMETER     -1
@@ -72,8 +71,6 @@
  */
 int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap);
 
-#ifdef __cplusplus
-}
-#endif
+__END_DECLS
 
-#endif
+#endif /* ANDROID_BITMAP_H */
diff --git a/ndk/platforms/android-9/include/android/configuration.h b/ndk/platforms/android-9/include/android/configuration.h
index 99e8f97..4c85b12 100644
--- a/ndk/platforms/android-9/include/android/configuration.h
+++ b/ndk/platforms/android-9/include/android/configuration.h
@@ -19,9 +19,7 @@
 
 #include <android/asset_manager.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 struct AConfiguration;
 typedef struct AConfiguration AConfiguration;
@@ -312,8 +310,6 @@
 int32_t AConfiguration_isBetterThan(AConfiguration* base, AConfiguration* test,
         AConfiguration* requested);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_CONFIGURATION_H
+#endif /* ANDROID_CONFIGURATION_H */
diff --git a/ndk/platforms/android-9/include/android/input.h b/ndk/platforms/android-9/include/android/input.h
index 5580700..ae96c50 100644
--- a/ndk/platforms/android-9/include/android/input.h
+++ b/ndk/platforms/android-9/include/android/input.h
@@ -45,9 +45,7 @@
 #include <android/keycodes.h>
 #include <android/looper.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 /*
  * Key states (may be returned by queries about the current state of a
@@ -677,8 +675,6 @@
  */
 void AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, int handled);
 
-#ifdef __cplusplus
-}
-#endif
+__END_DECLS
 
-#endif // _ANDROID_INPUT_H
+#endif /* _ANDROID_INPUT_H */
diff --git a/ndk/platforms/android-9/include/android/keycodes.h b/ndk/platforms/android-9/include/android/keycodes.h
index 496eccc..be0550a 100644
--- a/ndk/platforms/android-9/include/android/keycodes.h
+++ b/ndk/platforms/android-9/include/android/keycodes.h
@@ -33,11 +33,10 @@
  *   - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES
  */
 
+#include <sys/cdefs.h>
 #include <sys/types.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 /*
  * Key codes.
@@ -159,8 +158,6 @@
     //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
 };
 
-#ifdef __cplusplus
-}
-#endif
+__END_DECLS
 
-#endif // _ANDROID_KEYCODES_H
+#endif /* _ANDROID_KEYCODES_H */
diff --git a/ndk/platforms/android-9/include/android/looper.h b/ndk/platforms/android-9/include/android/looper.h
index a9d8426..9b7438b 100644
--- a/ndk/platforms/android-9/include/android/looper.h
+++ b/ndk/platforms/android-9/include/android/looper.h
@@ -18,9 +18,9 @@
 #ifndef ANDROID_LOOPER_H
 #define ANDROID_LOOPER_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
 
 /**
  * ALooper
@@ -248,8 +248,6 @@
  */
 int ALooper_removeFd(ALooper* looper, int fd);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_NATIVE_WINDOW_H
+#endif /* ANDROID_NATIVE_WINDOW_H */
diff --git a/ndk/platforms/android-9/include/android/native_activity.h b/ndk/platforms/android-9/include/android/native_activity.h
index d89bc8b..0bff86d 100644
--- a/ndk/platforms/android-9/include/android/native_activity.h
+++ b/ndk/platforms/android-9/include/android/native_activity.h
@@ -19,6 +19,7 @@
 #define ANDROID_NATIVE_ACTIVITY_H
 
 #include <stdint.h>
+#include <sys/cdefs.h>
 #include <sys/types.h>
 
 #include <jni.h>
@@ -27,9 +28,7 @@
 #include <android/input.h>
 #include <android/native_window.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 struct ANativeActivityCallbacks;
 
@@ -68,17 +67,17 @@
      * Path to this application's internal data directory.
      */
     const char* internalDataPath;
-    
+
     /**
      * Path to this application's external (removable/mountable) data directory.
      */
     const char* externalDataPath;
-    
+
     /**
      * The platform's SDK version code.
      */
     int32_t sdkVersion;
-    
+
     /**
      * This is the native instance of the application.  It is not used by
      * the framework, but can be set by the application to its own instance
@@ -105,13 +104,13 @@
      * for more information.
      */
     void (*onStart)(ANativeActivity* activity);
-    
+
     /**
      * NativeActivity has resumed.  See Java documentation for Activity.onResume()
      * for more information.
      */
     void (*onResume)(ANativeActivity* activity);
-    
+
     /**
      * Framework is asking NativeActivity to save its current instance state.
      * See Java documentation for Activity.onSaveInstanceState() for more
@@ -122,19 +121,19 @@
      * entities (pointers to memory, file descriptors, etc).
      */
     void* (*onSaveInstanceState)(ANativeActivity* activity, size_t* outSize);
-    
+
     /**
      * NativeActivity has paused.  See Java documentation for Activity.onPause()
      * for more information.
      */
     void (*onPause)(ANativeActivity* activity);
-    
+
     /**
      * NativeActivity has stopped.  See Java documentation for Activity.onStop()
      * for more information.
      */
     void (*onStop)(ANativeActivity* activity);
-    
+
     /**
      * NativeActivity is being destroyed.  See Java documentation for Activity.onDestroy()
      * for more information.
@@ -146,7 +145,7 @@
      * for example, to pause a game when it loses input focus.
      */
     void (*onWindowFocusChanged)(ANativeActivity* activity, int hasFocus);
-    
+
     /**
      * The drawing window for this native activity has been created.  You
      * can use the given native window object to start drawing.
@@ -177,13 +176,13 @@
      * returning from here.
      */
     void (*onNativeWindowDestroyed)(ANativeActivity* activity, ANativeWindow* window);
-    
+
     /**
      * The input queue for this native activity's window has been created.
      * You can use the given input queue to start retrieving input events.
      */
     void (*onInputQueueCreated)(ANativeActivity* activity, AInputQueue* queue);
-    
+
     /**
      * The input queue for this native activity's window is being destroyed.
      * You should no longer try to reference this object upon returning from this
@@ -288,9 +287,6 @@
  */
 void ANativeActivity_hideSoftInput(ANativeActivity* activity, uint32_t flags);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_NATIVE_ACTIVITY_H
-
+#endif /* ANDROID_NATIVE_ACTIVITY_H */
diff --git a/ndk/platforms/android-9/include/android/native_window.h b/ndk/platforms/android-9/include/android/native_window.h
index ad03d0e..75e68c1 100644
--- a/ndk/platforms/android-9/include/android/native_window.h
+++ b/ndk/platforms/android-9/include/android/native_window.h
@@ -17,11 +17,10 @@
 #ifndef ANDROID_NATIVE_WINDOW_H
 #define ANDROID_NATIVE_WINDOW_H
 
+#include <sys/cdefs.h>
 #include <android/rect.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 /*
  * Pixel formats that a window can use.
@@ -51,7 +50,7 @@
 
     // The actual bits.
     void* bits;
-    
+
     // Do not touch.
     uint32_t reserved[6];
 } ANativeWindow_Buffer;
@@ -96,7 +95,7 @@
  * For all of these parameters, if 0 is supplied then the window's base
  * value will come back in force.
  */
-int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height);
+int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format);
 
 /**
  * Lock the window's next drawing surface for writing.
@@ -110,8 +109,6 @@
  */
 int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_NATIVE_WINDOW_H
+#endif /* ANDROID_NATIVE_WINDOW_H */
diff --git a/ndk/platforms/android-9/include/android/native_window_jni.h b/ndk/platforms/android-9/include/android/native_window_jni.h
index b9e72ef..a44a5b1 100644
--- a/ndk/platforms/android-9/include/android/native_window_jni.h
+++ b/ndk/platforms/android-9/include/android/native_window_jni.h
@@ -21,9 +21,7 @@
 
 #include <jni.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 /**
  * Return the ANativeWindow associated with a Java Surface object,
@@ -33,8 +31,6 @@
  */
 ANativeWindow* ANativeWindow_fromSurface(JNIEnv* env, jobject surface);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_NATIVE_WINDOW_H
+#endif /* ANDROID_NATIVE_WINDOW_H */
diff --git a/ndk/platforms/android-9/include/android/obb.h b/ndk/platforms/android-9/include/android/obb.h
index 65e9b2a..5670b1c 100644
--- a/ndk/platforms/android-9/include/android/obb.h
+++ b/ndk/platforms/android-9/include/android/obb.h
@@ -18,11 +18,10 @@
 #ifndef ANDROID_OBB_H
 #define ANDROID_OBB_H
 
+#include <sys/cdefs.h>
 #include <sys/types.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 struct AObbInfo;
 typedef struct AObbInfo AObbInfo;
@@ -56,8 +55,6 @@
  */
 int32_t AObbInfo_getFlags(AObbInfo* obbInfo);
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif      // ANDROID_OBB_H
+#endif      /* ANDROID_OBB_H */
diff --git a/ndk/platforms/android-9/include/android/rect.h b/ndk/platforms/android-9/include/android/rect.h
index 3e81f53..161c2a7 100644
--- a/ndk/platforms/android-9/include/android/rect.h
+++ b/ndk/platforms/android-9/include/android/rect.h
@@ -18,9 +18,9 @@
 #ifndef ANDROID_RECT_H
 #define ANDROID_RECT_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
 
 typedef struct ARect {
     int32_t left;
@@ -29,8 +29,6 @@
     int32_t bottom;
 } ARect;
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_RECT_H
+#endif /* ANDROID_RECT_H */
diff --git a/ndk/platforms/android-9/include/android/sensor.h b/ndk/platforms/android-9/include/android/sensor.h
index f163f18..eb46ef0 100644
--- a/ndk/platforms/android-9/include/android/sensor.h
+++ b/ndk/platforms/android-9/include/android/sensor.h
@@ -39,14 +39,12 @@
  * native code.
  *
  */
-
+#include <sys/cdefs.h>
 #include <sys/types.h>
 
 #include <android/looper.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 
 /*
@@ -249,8 +247,6 @@
 int ASensor_getMinDelay(ASensor const* sensor);
 
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_SENSOR_H
+#endif /* ANDROID_SENSOR_H */
diff --git a/ndk/platforms/android-9/include/android/storage_manager.h b/ndk/platforms/android-9/include/android/storage_manager.h
index bad2491..f3b08dc 100644
--- a/ndk/platforms/android-9/include/android/storage_manager.h
+++ b/ndk/platforms/android-9/include/android/storage_manager.h
@@ -18,11 +18,10 @@
 #ifndef ANDROID_STORAGE_MANAGER_H
 #define ANDROID_STORAGE_MANAGER_H
 
+#include <sys/cdefs.h>
 #include <stdint.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
 struct AStorageManager;
 typedef struct AStorageManager AStorageManager;
@@ -120,8 +119,6 @@
 const char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char* filename);
 
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif      // ANDROID_STORAGE_MANAGER_H
+#endif      /* ANDROID_STORAGE_MANAGER_H */
diff --git a/ndk/platforms/android-9/include/android/window.h b/ndk/platforms/android-9/include/android/window.h
index 2ab192b..0633f89 100644
--- a/ndk/platforms/android-9/include/android/window.h
+++ b/ndk/platforms/android-9/include/android/window.h
@@ -18,9 +18,9 @@
 #ifndef ANDROID_WINDOW_H
 #define ANDROID_WINDOW_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
 
 /**
  * Window flags, as per the Java API at android.view.WindowManager.LayoutParams.
@@ -51,8 +51,6 @@
     AWINDOW_FLAG_DISMISS_KEYGUARD           = 0x00400000,
 };
 
-#ifdef __cplusplus
-};
-#endif
+__END_DECLS
 
-#endif // ANDROID_WINDOW_H
+#endif /* ANDROID_WINDOW_H */
diff --git a/ndk/platforms/android-9/include/arpa/telnet.h b/ndk/platforms/android-9/include/arpa/telnet.h
new file mode 100644
index 0000000..d318e08
--- /dev/null
+++ b/ndk/platforms/android-9/include/arpa/telnet.h
@@ -0,0 +1,316 @@
+/*
+ * Copyright (c) 1983, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)telnet.h	8.2 (Berkeley) 12/15/93
+ */
+
+#ifndef _ARPA_TELNET_H
+#define	_ARPA_TELNET_H 1
+
+/*
+ * Definitions for the TELNET protocol.
+ */
+#define	IAC	255		/* interpret as command: */
+#define	DONT	254		/* you are not to use option */
+#define	DO	253		/* please, you use option */
+#define	WONT	252		/* I won't use option */
+#define	WILL	251		/* I will use option */
+#define	SB	250		/* interpret as subnegotiation */
+#define	GA	249		/* you may reverse the line */
+#define	EL	248		/* erase the current line */
+#define	EC	247		/* erase the current character */
+#define	AYT	246		/* are you there */
+#define	AO	245		/* abort output--but let prog finish */
+#define	IP	244		/* interrupt process--permanently */
+#define	BREAK	243		/* break */
+#define	DM	242		/* data mark--for connect. cleaning */
+#define	NOP	241		/* nop */
+#define	SE	240		/* end sub negotiation */
+#define EOR     239             /* end of record (transparent mode) */
+#define	ABORT	238		/* Abort process */
+#define	SUSP	237		/* Suspend process */
+#define	xEOF	236		/* End of file: EOF is already used... */
+
+#define SYNCH	242		/* for telfunc calls */
+
+#ifdef TELCMDS
+char *telcmds[] = {
+	"EOF", "SUSP", "ABORT", "EOR",
+	"SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
+	"EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
+};
+#else
+extern char *telcmds[];
+#endif
+
+#define	TELCMD_FIRST	xEOF
+#define	TELCMD_LAST	IAC
+#define	TELCMD_OK(x)	((unsigned int)(x) <= TELCMD_LAST && \
+			 (unsigned int)(x) >= TELCMD_FIRST)
+#define	TELCMD(x)	telcmds[(x)-TELCMD_FIRST]
+
+/* telnet options */
+#define TELOPT_BINARY	0	/* 8-bit data path */
+#define TELOPT_ECHO	1	/* echo */
+#define	TELOPT_RCP	2	/* prepare to reconnect */
+#define	TELOPT_SGA	3	/* suppress go ahead */
+#define	TELOPT_NAMS	4	/* approximate message size */
+#define	TELOPT_STATUS	5	/* give status */
+#define	TELOPT_TM	6	/* timing mark */
+#define	TELOPT_RCTE	7	/* remote controlled transmission and echo */
+#define TELOPT_NAOL 	8	/* negotiate about output line width */
+#define TELOPT_NAOP 	9	/* negotiate about output page size */
+#define TELOPT_NAOCRD	10	/* negotiate about CR disposition */
+#define TELOPT_NAOHTS	11	/* negotiate about horizontal tabstops */
+#define TELOPT_NAOHTD	12	/* negotiate about horizontal tab disposition */
+#define TELOPT_NAOFFD	13	/* negotiate about formfeed disposition */
+#define TELOPT_NAOVTS	14	/* negotiate about vertical tab stops */
+#define TELOPT_NAOVTD	15	/* negotiate about vertical tab disposition */
+#define TELOPT_NAOLFD	16	/* negotiate about output LF disposition */
+#define TELOPT_XASCII	17	/* extended ascii character set */
+#define	TELOPT_LOGOUT	18	/* force logout */
+#define	TELOPT_BM	19	/* byte macro */
+#define	TELOPT_DET	20	/* data entry terminal */
+#define	TELOPT_SUPDUP	21	/* supdup protocol */
+#define	TELOPT_SUPDUPOUTPUT 22	/* supdup output */
+#define	TELOPT_SNDLOC	23	/* send location */
+#define	TELOPT_TTYPE	24	/* terminal type */
+#define	TELOPT_EOR	25	/* end or record */
+#define	TELOPT_TUID	26	/* TACACS user identification */
+#define	TELOPT_OUTMRK	27	/* output marking */
+#define	TELOPT_TTYLOC	28	/* terminal location number */
+#define	TELOPT_3270REGIME 29	/* 3270 regime */
+#define	TELOPT_X3PAD	30	/* X.3 PAD */
+#define	TELOPT_NAWS	31	/* window size */
+#define	TELOPT_TSPEED	32	/* terminal speed */
+#define	TELOPT_LFLOW	33	/* remote flow control */
+#define TELOPT_LINEMODE	34	/* Linemode option */
+#define TELOPT_XDISPLOC	35	/* X Display Location */
+#define TELOPT_OLD_ENVIRON 36	/* Old - Environment variables */
+#define	TELOPT_AUTHENTICATION 37/* Authenticate */
+#define	TELOPT_ENCRYPT	38	/* Encryption option */
+#define TELOPT_NEW_ENVIRON 39	/* New - Environment variables */
+#define	TELOPT_EXOPL	255	/* extended-options-list */
+
+
+#define	NTELOPTS	(1+TELOPT_NEW_ENVIRON)
+#ifdef TELOPTS
+const char *telopts[NTELOPTS+1] = {
+	"BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
+	"STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
+	"NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
+	"NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
+	"DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
+	"SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
+	"TACACS UID", "OUTPUT MARKING", "TTYLOC",
+	"3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
+	"LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
+	"ENCRYPT", "NEW-ENVIRON",
+	0,
+};
+#define	TELOPT_FIRST	TELOPT_BINARY
+#define	TELOPT_LAST	TELOPT_NEW_ENVIRON
+#define	TELOPT_OK(x)	((unsigned int)(x) <= TELOPT_LAST)
+#define	TELOPT(x)	telopts[(x)-TELOPT_FIRST]
+#endif
+
+/* sub-option qualifiers */
+#define	TELQUAL_IS	0	/* option is... */
+#define	TELQUAL_SEND	1	/* send option */
+#define	TELQUAL_INFO	2	/* ENVIRON: informational version of IS */
+#define	TELQUAL_REPLY	2	/* AUTHENTICATION: client version of IS */
+#define	TELQUAL_NAME	3	/* AUTHENTICATION: client version of IS */
+
+#define	LFLOW_OFF		0	/* Disable remote flow control */
+#define	LFLOW_ON		1	/* Enable remote flow control */
+#define	LFLOW_RESTART_ANY	2	/* Restart output on any char */
+#define	LFLOW_RESTART_XON	3	/* Restart output only on XON */
+
+/*
+ * LINEMODE suboptions
+ */
+
+#define	LM_MODE		1
+#define	LM_FORWARDMASK	2
+#define	LM_SLC		3
+
+#define	MODE_EDIT	0x01
+#define	MODE_TRAPSIG	0x02
+#define	MODE_ACK	0x04
+#define MODE_SOFT_TAB	0x08
+#define MODE_LIT_ECHO	0x10
+
+#define	MODE_MASK	0x1f
+
+/* Not part of protocol, but needed to simplify things... */
+#define MODE_FLOW		0x0100
+#define MODE_ECHO		0x0200
+#define MODE_INBIN		0x0400
+#define MODE_OUTBIN		0x0800
+#define MODE_FORCE		0x1000
+
+#define	SLC_SYNCH	1
+#define	SLC_BRK		2
+#define	SLC_IP		3
+#define	SLC_AO		4
+#define	SLC_AYT		5
+#define	SLC_EOR		6
+#define	SLC_ABORT	7
+#define	SLC_EOF		8
+#define	SLC_SUSP	9
+#define	SLC_EC		10
+#define	SLC_EL		11
+#define	SLC_EW		12
+#define	SLC_RP		13
+#define	SLC_LNEXT	14
+#define	SLC_XON		15
+#define	SLC_XOFF	16
+#define	SLC_FORW1	17
+#define	SLC_FORW2	18
+
+#define	NSLC		18
+
+/*
+ * For backwards compatibility, we define SLC_NAMES to be the
+ * list of names if SLC_NAMES is not defined.
+ */
+#define	SLC_NAMELIST	"0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
+			"ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
+			"LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
+#ifdef	SLC_NAMES
+const char *slc_names[] = {
+	SLC_NAMELIST
+};
+#else
+extern char *slc_names[];
+#define	SLC_NAMES SLC_NAMELIST
+#endif
+
+#define	SLC_NAME_OK(x)	((unsigned int)(x) <= NSLC)
+#define SLC_NAME(x)	slc_names[x]
+
+#define	SLC_NOSUPPORT	0
+#define	SLC_CANTCHANGE	1
+#define	SLC_VARIABLE	2
+#define	SLC_DEFAULT	3
+#define	SLC_LEVELBITS	0x03
+
+#define	SLC_FUNC	0
+#define	SLC_FLAGS	1
+#define	SLC_VALUE	2
+
+#define	SLC_ACK		0x80
+#define	SLC_FLUSHIN	0x40
+#define	SLC_FLUSHOUT	0x20
+
+#define	OLD_ENV_VAR	1
+#define	OLD_ENV_VALUE	0
+#define	NEW_ENV_VAR	0
+#define	NEW_ENV_VALUE	1
+#define	ENV_ESC		2
+#define ENV_USERVAR	3
+
+/*
+ * AUTHENTICATION suboptions
+ */
+
+/*
+ * Who is authenticating who ...
+ */
+#define	AUTH_WHO_CLIENT		0	/* Client authenticating server */
+#define	AUTH_WHO_SERVER		1	/* Server authenticating client */
+#define	AUTH_WHO_MASK		1
+
+/*
+ * amount of authentication done
+ */
+#define	AUTH_HOW_ONE_WAY	0
+#define	AUTH_HOW_MUTUAL		2
+#define	AUTH_HOW_MASK		2
+
+#define	AUTHTYPE_NULL		0
+#define	AUTHTYPE_KERBEROS_V4	1
+#define	AUTHTYPE_KERBEROS_V5	2
+#define	AUTHTYPE_SPX		3
+#define	AUTHTYPE_MINK		4
+#define	AUTHTYPE_CNT		5
+
+#define	AUTHTYPE_TEST		99
+
+#ifdef	AUTH_NAMES
+const char *authtype_names[] = {
+	"NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
+};
+#else
+extern char *authtype_names[];
+#endif
+
+#define	AUTHTYPE_NAME_OK(x)	((unsigned int)(x) < AUTHTYPE_CNT)
+#define	AUTHTYPE_NAME(x)	authtype_names[x]
+
+/*
+ * ENCRYPTion suboptions
+ */
+#define	ENCRYPT_IS		0	/* I pick encryption type ... */
+#define	ENCRYPT_SUPPORT		1	/* I support encryption types ... */
+#define	ENCRYPT_REPLY		2	/* Initial setup response */
+#define	ENCRYPT_START		3	/* Am starting to send encrypted */
+#define	ENCRYPT_END		4	/* Am ending encrypted */
+#define	ENCRYPT_REQSTART	5	/* Request you start encrypting */
+#define	ENCRYPT_REQEND		6	/* Request you send encrypting */
+#define	ENCRYPT_ENC_KEYID	7
+#define	ENCRYPT_DEC_KEYID	8
+#define	ENCRYPT_CNT		9
+
+#define	ENCTYPE_ANY		0
+#define	ENCTYPE_DES_CFB64	1
+#define	ENCTYPE_DES_OFB64	2
+#define	ENCTYPE_CNT		3
+
+#ifdef	ENCRYPT_NAMES
+const char *encrypt_names[] = {
+	"IS", "SUPPORT", "REPLY", "START", "END",
+	"REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+	0,
+};
+const char *enctype_names[] = {
+	"ANY", "DES_CFB64",  "DES_OFB64",  0,
+};
+#else
+extern const char *encrypt_names[];
+extern const char *enctype_names[];
+#endif
+
+
+#define	ENCRYPT_NAME_OK(x)	((unsigned int)(x) < ENCRYPT_CNT)
+#define	ENCRYPT_NAME(x)		encrypt_names[x]
+
+#define	ENCTYPE_NAME_OK(x)	((unsigned int)(x) < ENCTYPE_CNT)
+#define	ENCTYPE_NAME(x)		enctype_names[x]
+
+#endif /* arpa/telnet.h */
diff --git a/ndk/platforms/android-9/include/pthread.h b/ndk/platforms/android-9/include/pthread.h
index 9773dcb..1e80b12 100644
--- a/ndk/platforms/android-9/include/pthread.h
+++ b/ndk/platforms/android-9/include/pthread.h
@@ -163,7 +163,9 @@
 int pthread_mutex_lock(pthread_mutex_t *mutex);
 int pthread_mutex_unlock(pthread_mutex_t *mutex);
 int pthread_mutex_trylock(pthread_mutex_t *mutex);
+#if 0 /* MISSING FROM BIONIC */
 int pthread_mutex_timedlock(pthread_mutex_t *mutex, struct timespec*  ts);
+#endif /* MISSING */
 
 int pthread_condattr_init(pthread_condattr_t *attr);
 int pthread_condattr_getpshared(pthread_condattr_t *attr, int *pshared);
diff --git a/ndk/platforms/android-9/include/sched.h b/ndk/platforms/android-9/include/sched.h
new file mode 100644
index 0000000..e702470
--- /dev/null
+++ b/ndk/platforms/android-9/include/sched.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _SCHED_H_
+#define _SCHED_H_
+
+#include <sys/cdefs.h>
+#include <sys/time.h>
+
+__BEGIN_DECLS
+
+#define SCHED_NORMAL            0
+#define SCHED_OTHER             0
+#define SCHED_FIFO              1
+#define SCHED_RR                2
+
+struct sched_param {
+    int sched_priority;
+};
+
+extern int sched_setscheduler(pid_t, int, const struct sched_param *);
+extern int sched_getscheduler(pid_t);
+extern int sched_yield(void);
+extern int sched_get_priority_max(int policy);
+extern int sched_get_priority_min(int policy);
+extern int sched_setparam(pid_t, const struct sched_param *);
+extern int sched_getparam(pid_t, struct sched_param *);
+extern int sched_rr_get_interval(pid_t pid, struct timespec *tp);
+
+#define CLONE_VM             0x00000100
+#define CLONE_FS             0x00000200
+#define CLONE_FILES          0x00000400
+#define CLONE_SIGHAND        0x00000800
+#define CLONE_PTRACE         0x00002000
+#define CLONE_VFORK          0x00004000
+#define CLONE_PARENT         0x00008000
+#define CLONE_THREAD         0x00010000
+#define CLONE_NEWNS          0x00020000
+#define CLONE_SYSVSEM        0x00040000
+#define CLONE_SETTLS         0x00080000
+#define CLONE_PARENT_SETTID  0x00100000
+#define CLONE_CHILD_CLEARTID 0x00200000
+#define CLONE_DETACHED       0x00400000
+#define CLONE_UNTRACED       0x00800000
+#define CLONE_CHILD_SETTID   0x01000000
+#define CLONE_STOPPED        0x02000000
+
+#ifdef _GNU_SOURCE
+extern int clone(int (*fn)(void *), void *child_stack, int flags, void*  arg, ...);
+#endif
+
+__END_DECLS
+
+#endif /* _SCHED_H_ */
diff --git a/ndk/platforms/android-9/include/stdlib.h b/ndk/platforms/android-9/include/stdlib.h
index 41e8d26..97d8e46 100644
--- a/ndk/platforms/android-9/include/stdlib.h
+++ b/ndk/platforms/android-9/include/stdlib.h
@@ -50,7 +50,6 @@
 extern __noreturn void exit(int);
 extern __noreturn void abort(void);
 extern int atexit(void (*)(void));
-extern int on_exit(void (*)(int, void *), void *);
 
 extern char *getenv(const char *);
 extern int putenv(const char *);
@@ -107,6 +106,8 @@
 extern long nrand48(unsigned short *);
 extern long lrand48(void);
 extern unsigned short *seed48(unsigned short*);
+extern double erand48(unsigned short xsubi[3]);
+extern double drand48(void);
 extern void srand48(long);
 extern unsigned int arc4random(void);
 extern void arc4random_stir(void);
@@ -135,7 +136,7 @@
 extern int    ptsname_r(int, char*, size_t);
 extern int    getpt(void);
 
-static __inline__ int grantpt(int __fd)
+static __inline__ int grantpt(int __fd __attribute((unused)))
 {
   (void)__fd;
   return 0;     /* devpts does this all for us! */
@@ -162,6 +163,7 @@
 
 extern lldiv_t   lldiv(long long, long long);
 
+#if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */
 /* make STLPort happy */
 extern int      mblen(const char *, size_t);
 extern size_t   mbstowcs(wchar_t *, const char *, size_t);
@@ -170,8 +172,14 @@
 /* Likewise, make libstdc++-v3 happy.  */
 extern int	wctomb(char *, wchar_t);
 extern size_t	wcstombs(char *, const wchar_t *, size_t);
+#endif /* MISSING */
+
 #define MB_CUR_MAX 1
 
+#if 0 /* MISSING FROM BIONIC */
+extern int on_exit(void (*)(int, void *), void *);
+#endif /* MISSING */
+
 __END_DECLS
 
 #endif /* _STDLIB_H_ */
diff --git a/ndk/platforms/android-9/include/strings.h b/ndk/platforms/android-9/include/strings.h
new file mode 100644
index 0000000..fee7dc4
--- /dev/null
+++ b/ndk/platforms/android-9/include/strings.h
@@ -0,0 +1,56 @@
+/*	$NetBSD: strings.h,v 1.10 2005/02/03 04:39:32 perry Exp $	*/
+
+/*-
+ * Copyright (c) 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Klaus Klein.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _STRINGS_H_
+#define _STRINGS_H_
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int	 bcmp(const void *, const void *, size_t);
+void	 bcopy(const void *, void *, size_t);
+void	 bzero(void *, size_t);
+int	 ffs(int);
+char	*index(const char *, int);
+char	*rindex(const char *, int);
+int	 strcasecmp(const char *, const char *);
+int	 strncasecmp(const char *, const char *, size_t);
+__END_DECLS
+
+#endif /* !defined(_STRINGS_H_) */
diff --git a/ndk/platforms/android-9/include/sys/_sigdefs.h b/ndk/platforms/android-9/include/sys/_sigdefs.h
new file mode 100644
index 0000000..6822c25
--- /dev/null
+++ b/ndk/platforms/android-9/include/sys/_sigdefs.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * this header is used to define signal constants and names;
+ * it might be included several times
+ */
+
+#ifndef __BIONIC_SIGDEF
+#error __BIONIC_SIGDEF not defined
+#endif
+
+__BIONIC_SIGDEF(HUP,1,"Hangup")
+__BIONIC_SIGDEF(INT,2,"Interrupt")
+__BIONIC_SIGDEF(QUIT,3,"Quit")
+__BIONIC_SIGDEF(ILL,4,"Illegal instruction")
+__BIONIC_SIGDEF(TRAP,5,"Trap")
+__BIONIC_SIGDEF(ABRT,6,"Aborted")
+__BIONIC_SIGDEF(BUS,7,"Bus error")
+__BIONIC_SIGDEF(FPE,8,"Floating point exception")
+__BIONIC_SIGDEF(KILL,9,"Killed")
+__BIONIC_SIGDEF(USR1,10,"User signal 1")
+__BIONIC_SIGDEF(SEGV,11,"Segmentation fault")
+__BIONIC_SIGDEF(USR2,12,"User signal 2")
+__BIONIC_SIGDEF(PIPE,13,"Broken pipe")
+__BIONIC_SIGDEF(ALRM,14,"Alarm clock")
+__BIONIC_SIGDEF(TERM,15,"Terminated")
+__BIONIC_SIGDEF(STKFLT,16,"Stack fault")
+__BIONIC_SIGDEF(CHLD,17,"Child exited")
+__BIONIC_SIGDEF(CONT,18,"Continue")
+__BIONIC_SIGDEF(STOP,19,"Stopped (signal)")
+__BIONIC_SIGDEF(TSTP,20,"Stopped")
+__BIONIC_SIGDEF(TTIN,21,"Stopped (tty input)")
+__BIONIC_SIGDEF(TTOU,22,"Stopper (tty output)")
+__BIONIC_SIGDEF(URG,23,"Urgent I/O condition")
+__BIONIC_SIGDEF(XCPU,24,"CPU time limit exceeded")
+__BIONIC_SIGDEF(XFSZ,25,"File size limit exceeded")
+__BIONIC_SIGDEF(VTALRM,26,"Virtual timer expired")
+__BIONIC_SIGDEF(PROF,27,"Profiling timer expired")
+__BIONIC_SIGDEF(WINCH,28,"Window size changed")
+__BIONIC_SIGDEF(IO,29,"I/O possible")
+__BIONIC_SIGDEF(PWR,30,"Power failure")
+__BIONIC_SIGDEF(SYS,31,"Bad system call")
+
+#undef __BIONIC_SIGDEF
diff --git a/ndk/platforms/android-9/include/sys/cdefs.h b/ndk/platforms/android-9/include/sys/cdefs.h
new file mode 100644
index 0000000..849e2b8
--- /dev/null
+++ b/ndk/platforms/android-9/include/sys/cdefs.h
@@ -0,0 +1,501 @@
+/*	$NetBSD: cdefs.h,v 1.58 2004/12/11 05:59:00 christos Exp $	*/
+
+/*
+ * Copyright (c) 1991, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Berkeley Software Design, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)cdefs.h	8.8 (Berkeley) 1/9/95
+ */
+
+#ifndef	_SYS_CDEFS_H_
+#define	_SYS_CDEFS_H_
+
+/*
+ * Macro to test if we're using a GNU C compiler of a specific vintage
+ * or later, for e.g. features that appeared in a particular version
+ * of GNU C.  Usage:
+ *
+ *	#if __GNUC_PREREQ__(major, minor)
+ *	...cool feature...
+ *	#else
+ *	...delete feature...
+ *	#endif
+ */
+#ifdef __GNUC__
+#define	__GNUC_PREREQ__(x, y)						\
+	((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) ||			\
+	 (__GNUC__ > (x)))
+#else
+#define	__GNUC_PREREQ__(x, y)	0
+#endif
+
+#include <sys/cdefs_elf.h>
+
+#if defined(__cplusplus)
+#define	__BEGIN_DECLS		extern "C" {
+#define	__END_DECLS		}
+#define	__static_cast(x,y)	static_cast<x>(y)
+#else
+#define	__BEGIN_DECLS
+#define	__END_DECLS
+#define	__static_cast(x,y)	(x)y
+#endif
+
+/*
+ * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
+ * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
+ * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
+ * in between its arguments.  __CONCAT can also concatenate double-quoted
+ * strings produced by the __STRING macro, but this only works with ANSI C.
+ */
+
+#define	___STRING(x)	__STRING(x)
+#define	___CONCAT(x,y)	__CONCAT(x,y)
+
+#if __STDC__ || defined(__cplusplus)
+#define	__P(protos)	protos		/* full-blown ANSI C */
+#define	__CONCAT(x,y)	x ## y
+#define	__STRING(x)	#x
+
+#define	__const		const		/* define reserved names to standard */
+#define	__signed	signed
+#define	__volatile	volatile
+#if defined(__cplusplus)
+#define	__inline	inline		/* convert to C++ keyword */
+#else
+#if !defined(__GNUC__) && !defined(__lint__)
+#define	__inline			/* delete GCC keyword */
+#endif /* !__GNUC__  && !__lint__ */
+#endif /* !__cplusplus */
+
+#else	/* !(__STDC__ || __cplusplus) */
+#define	__P(protos)	()		/* traditional C preprocessor */
+#define	__CONCAT(x,y)	x/**/y
+#define	__STRING(x)	"x"
+
+#ifndef __GNUC__
+#define	__const				/* delete pseudo-ANSI C keywords */
+#define	__inline
+#define	__signed
+#define	__volatile
+#endif	/* !__GNUC__ */
+
+/*
+ * In non-ANSI C environments, new programs will want ANSI-only C keywords
+ * deleted from the program and old programs will want them left alone.
+ * Programs using the ANSI C keywords const, inline etc. as normal
+ * identifiers should define -DNO_ANSI_KEYWORDS.
+ */
+#ifndef	NO_ANSI_KEYWORDS
+#define	const		__const		/* convert ANSI C keywords */
+#define	inline		__inline
+#define	signed		__signed
+#define	volatile	__volatile
+#endif /* !NO_ANSI_KEYWORDS */
+#endif	/* !(__STDC__ || __cplusplus) */
+
+/*
+ * Used for internal auditing of the NetBSD source tree.
+ */
+#ifdef __AUDIT__
+#define	__aconst	__const
+#else
+#define	__aconst
+#endif
+
+/*
+ * The following macro is used to remove const cast-away warnings
+ * from gcc -Wcast-qual; it should be used with caution because it
+ * can hide valid errors; in particular most valid uses are in
+ * situations where the API requires it, not to cast away string
+ * constants. We don't use *intptr_t on purpose here and we are
+ * explicit about unsigned long so that we don't have additional
+ * dependencies.
+ */
+#define __UNCONST(a)	((void *)(unsigned long)(const void *)(a))
+
+/*
+ * GCC2 provides __extension__ to suppress warnings for various GNU C
+ * language extensions under "-ansi -pedantic".
+ */
+#if !__GNUC_PREREQ__(2, 0)
+#define	__extension__		/* delete __extension__ if non-gcc or gcc1 */
+#endif
+
+/*
+ * GCC1 and some versions of GCC2 declare dead (non-returning) and
+ * pure (no side effects) functions using "volatile" and "const";
+ * unfortunately, these then cause warnings under "-ansi -pedantic".
+ * GCC2 uses a new, peculiar __attribute__((attrs)) style.  All of
+ * these work for GNU C++ (modulo a slight glitch in the C++ grammar
+ * in the distribution version of 2.5.5).
+ */
+#if !__GNUC_PREREQ__(2, 5)
+#define	__attribute__(x)	/* delete __attribute__ if non-gcc or gcc1 */
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#define	__dead		__volatile
+#define	__pure		__const
+#endif
+#endif
+
+/* Delete pseudo-keywords wherever they are not available or needed. */
+#ifndef __dead
+#define	__dead
+#define	__pure
+#endif
+
+#if __GNUC_PREREQ__(2, 7)
+#define	__unused	__attribute__((__unused__))
+#else
+#define	__unused	/* delete */
+#endif
+
+#if __GNUC_PREREQ__(3, 1)
+#define	__used		__attribute__((__used__))
+#else
+#define	__used		/* delete */
+#endif
+
+#if __GNUC_PREREQ__(2, 7)
+#define	__packed	__attribute__((__packed__))
+#define	__aligned(x)	__attribute__((__aligned__(x)))
+#define	__section(x)	__attribute__((__section__(x)))
+#elif defined(__lint__)
+#define	__packed	/* delete */
+#define	__aligned(x)	/* delete */
+#define	__section(x)	/* delete */
+#else
+#define	__packed	error: no __packed for this compiler
+#define	__aligned(x)	error: no __aligned for this compiler
+#define	__section(x)	error: no __section for this compiler
+#endif
+
+#if !__GNUC_PREREQ__(2, 8)
+#define	__extension__
+#endif
+
+#if __GNUC_PREREQ__(2, 8)
+#define __statement(x)	__extension__(x)
+#elif defined(lint)
+#define __statement(x)	(0)
+#else
+#define __statement(x)	(x)
+#endif
+
+/*
+ * C99 defines the restrict type qualifier keyword, which was made available
+ * in GCC 2.92.
+ */
+#if __STDC_VERSION__ >= 199901L
+#define	__restrict	restrict
+#else
+#if !__GNUC_PREREQ__(2, 92)
+#define	__restrict	/* delete __restrict when not supported */
+#endif
+#endif
+
+/*
+ * C99 defines __func__ predefined identifier, which was made available
+ * in GCC 2.95.
+ */
+#if !(__STDC_VERSION__ >= 199901L)
+#if __GNUC_PREREQ__(2, 6)
+#define	__func__	__PRETTY_FUNCTION__
+#elif __GNUC_PREREQ__(2, 4)
+#define	__func__	__FUNCTION__
+#else
+#define	__func__	""
+#endif
+#endif /* !(__STDC_VERSION__ >= 199901L) */
+
+#if defined(_KERNEL)
+#if defined(NO_KERNEL_RCSIDS)
+#undef __KERNEL_RCSID
+#define	__KERNEL_RCSID(_n, _s)		/* nothing */
+#endif /* NO_KERNEL_RCSIDS */
+#endif /* _KERNEL */
+
+#if !defined(_STANDALONE) && !defined(_KERNEL)
+#ifdef __GNUC__
+#define	__RENAME(x)	___RENAME(x)
+#else
+#ifdef __lint__
+#define	__RENAME(x)	__symbolrename(x)
+#else
+#error "No function renaming possible"
+#endif /* __lint__ */
+#endif /* __GNUC__ */
+#else /* _STANDALONE || _KERNEL */
+#define	__RENAME(x)	no renaming in kernel or standalone environment
+#endif
+
+/*
+ * A barrier to stop the optimizer from moving code or assume live
+ * register values. This is gcc specific, the version is more or less
+ * arbitrary, might work with older compilers.
+ */
+#if __GNUC_PREREQ__(2, 95)
+#define	__insn_barrier()	__asm __volatile("":::"memory")
+#else
+#define	__insn_barrier()	/* */
+#endif
+
+/*
+ * GNU C version 2.96 adds explicit branch prediction so that
+ * the CPU back-end can hint the processor and also so that
+ * code blocks can be reordered such that the predicted path
+ * sees a more linear flow, thus improving cache behavior, etc.
+ *
+ * The following two macros provide us with a way to use this
+ * compiler feature.  Use __predict_true() if you expect the expression
+ * to evaluate to true, and __predict_false() if you expect the
+ * expression to evaluate to false.
+ *
+ * A few notes about usage:
+ *
+ *	* Generally, __predict_false() error condition checks (unless
+ *	  you have some _strong_ reason to do otherwise, in which case
+ *	  document it), and/or __predict_true() `no-error' condition
+ *	  checks, assuming you want to optimize for the no-error case.
+ *
+ *	* Other than that, if you don't know the likelihood of a test
+ *	  succeeding from empirical or other `hard' evidence, don't
+ *	  make predictions.
+ *
+ *	* These are meant to be used in places that are run `a lot'.
+ *	  It is wasteful to make predictions in code that is run
+ *	  seldomly (e.g. at subsystem initialization time) as the
+ *	  basic block reordering that this affects can often generate
+ *	  larger code.
+ */
+#if __GNUC_PREREQ__(2, 96)
+#define	__predict_true(exp)	__builtin_expect((exp) != 0, 1)
+#define	__predict_false(exp)	__builtin_expect((exp) != 0, 0)
+#else
+#define	__predict_true(exp)	(exp)
+#define	__predict_false(exp)	(exp)
+#endif
+
+#if __GNUC_PREREQ__(2, 96)
+#define __noreturn    __attribute__((__noreturn__))
+#define __mallocfunc  __attribute__((malloc))
+#else
+#define __noreturn
+#define __mallocfunc
+#endif
+
+/*
+ * Macros for manipulating "link sets".  Link sets are arrays of pointers
+ * to objects, which are gathered up by the linker.
+ *
+ * Object format-specific code has provided us with the following macros:
+ *
+ *	__link_set_add_text(set, sym)
+ *		Add a reference to the .text symbol `sym' to `set'.
+ *
+ *	__link_set_add_rodata(set, sym)
+ *		Add a reference to the .rodata symbol `sym' to `set'.
+ *
+ *	__link_set_add_data(set, sym)
+ *		Add a reference to the .data symbol `sym' to `set'.
+ *
+ *	__link_set_add_bss(set, sym)
+ *		Add a reference to the .bss symbol `sym' to `set'.
+ *
+ *	__link_set_decl(set, ptype)
+ *		Provide an extern declaration of the set `set', which
+ *		contains an array of the pointer type `ptype'.  This
+ *		macro must be used by any code which wishes to reference
+ *		the elements of a link set.
+ *
+ *	__link_set_start(set)
+ *		This points to the first slot in the link set.
+ *
+ *	__link_set_end(set)
+ *		This points to the (non-existent) slot after the last
+ *		entry in the link set.
+ *
+ *	__link_set_count(set)
+ *		Count the number of entries in link set `set'.
+ *
+ * In addition, we provide the following macros for accessing link sets:
+ *
+ *	__link_set_foreach(pvar, set)
+ *		Iterate over the link set `set'.  Because a link set is
+ *		an array of pointers, pvar must be declared as "type **pvar",
+ *		and the actual entry accessed as "*pvar".
+ *
+ *	__link_set_entry(set, idx)
+ *		Access the link set entry at index `idx' from set `set'.
+ */
+#define	__link_set_foreach(pvar, set)					\
+	for (pvar = __link_set_start(set); pvar < __link_set_end(set); pvar++)
+
+#define	__link_set_entry(set, idx)	(__link_set_begin(set)[idx])
+
+/*
+ * Some of the recend FreeBSD sources used in Bionic need this.
+ * Originally, this is used to embed the rcs versions of each source file
+ * in the generated binary. We certainly don't want this in Bionic.
+ */
+#define	__FBSDID(s)	struct __hack
+
+/*-
+ * The following definitions are an extension of the behavior originally
+ * implemented in <sys/_posix.h>, but with a different level of granularity.
+ * POSIX.1 requires that the macros we test be defined before any standard
+ * header file is included.
+ *
+ * Here's a quick run-down of the versions:
+ *  defined(_POSIX_SOURCE)		1003.1-1988
+ *  _POSIX_C_SOURCE == 1		1003.1-1990
+ *  _POSIX_C_SOURCE == 2		1003.2-1992 C Language Binding Option
+ *  _POSIX_C_SOURCE == 199309		1003.1b-1993
+ *  _POSIX_C_SOURCE == 199506		1003.1c-1995, 1003.1i-1995,
+ *					and the omnibus ISO/IEC 9945-1: 1996
+ *  _POSIX_C_SOURCE == 200112		1003.1-2001
+ *  _POSIX_C_SOURCE == 200809		1003.1-2008
+ *
+ * In addition, the X/Open Portability Guide, which is now the Single UNIX
+ * Specification, defines a feature-test macro which indicates the version of
+ * that specification, and which subsumes _POSIX_C_SOURCE.
+ *
+ * Our macros begin with two underscores to avoid namespace screwage.
+ */
+
+/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1
+#undef _POSIX_C_SOURCE		/* Probably illegal, but beyond caring now. */
+#define	_POSIX_C_SOURCE		199009
+#endif
+
+/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2
+#undef _POSIX_C_SOURCE
+#define	_POSIX_C_SOURCE		199209
+#endif
+
+/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
+#ifdef _XOPEN_SOURCE
+#if _XOPEN_SOURCE - 0 >= 700
+#define	__XSI_VISIBLE		700
+#undef _POSIX_C_SOURCE
+#define	_POSIX_C_SOURCE		200809
+#elif _XOPEN_SOURCE - 0 >= 600
+#define	__XSI_VISIBLE		600
+#undef _POSIX_C_SOURCE
+#define	_POSIX_C_SOURCE		200112
+#elif _XOPEN_SOURCE - 0 >= 500
+#define	__XSI_VISIBLE		500
+#undef _POSIX_C_SOURCE
+#define	_POSIX_C_SOURCE		199506
+#endif
+#endif
+
+/*
+ * Deal with all versions of POSIX.  The ordering relative to the tests above is
+ * important.
+ */
+#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
+#define	_POSIX_C_SOURCE		198808
+#endif
+#ifdef _POSIX_C_SOURCE
+#if _POSIX_C_SOURCE >= 200809
+#define	__POSIX_VISIBLE		200809
+#define	__ISO_C_VISIBLE		1999
+#elif _POSIX_C_SOURCE >= 200112
+#define	__POSIX_VISIBLE		200112
+#define	__ISO_C_VISIBLE		1999
+#elif _POSIX_C_SOURCE >= 199506
+#define	__POSIX_VISIBLE		199506
+#define	__ISO_C_VISIBLE		1990
+#elif _POSIX_C_SOURCE >= 199309
+#define	__POSIX_VISIBLE		199309
+#define	__ISO_C_VISIBLE		1990
+#elif _POSIX_C_SOURCE >= 199209
+#define	__POSIX_VISIBLE		199209
+#define	__ISO_C_VISIBLE		1990
+#elif _POSIX_C_SOURCE >= 199009
+#define	__POSIX_VISIBLE		199009
+#define	__ISO_C_VISIBLE		1990
+#else
+#define	__POSIX_VISIBLE		198808
+#define	__ISO_C_VISIBLE		0
+#endif /* _POSIX_C_SOURCE */
+#else
+/*-
+ * Deal with _ANSI_SOURCE:
+ * If it is defined, and no other compilation environment is explicitly
+ * requested, then define our internal feature-test macros to zero.  This
+ * makes no difference to the preprocessor (undefined symbols in preprocessing
+ * expressions are defined to have value zero), but makes it more convenient for
+ * a test program to print out the values.
+ *
+ * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
+ * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
+ * environment (and in fact we will never get here).
+ */
+#if defined(_ANSI_SOURCE)	/* Hide almost everything. */
+#define	__POSIX_VISIBLE		0
+#define	__XSI_VISIBLE		0
+#define	__BSD_VISIBLE		0
+#define	__ISO_C_VISIBLE		1990
+#elif defined(_C99_SOURCE)	/* Localism to specify strict C99 env. */
+#define	__POSIX_VISIBLE		0
+#define	__XSI_VISIBLE		0
+#define	__BSD_VISIBLE		0
+#define	__ISO_C_VISIBLE		1999
+#else				/* Default environment: show everything. */
+#define	__POSIX_VISIBLE		200809
+#define	__XSI_VISIBLE		700
+#define	__BSD_VISIBLE		1
+#define	__ISO_C_VISIBLE		1999
+#endif
+#endif
+
+/*
+ * Default values.
+ */
+#ifndef __XPG_VISIBLE
+# define __XPG_VISIBLE          700
+#endif
+#ifndef __POSIX_VISIBLE
+# define __POSIX_VISIBLE        200809
+#endif
+#ifndef __ISO_C_VISIBLE
+# define __ISO_C_VISIBLE        1999
+#endif
+#ifndef __BSD_VISIBLE
+# define __BSD_VISIBLE          1
+#endif
+
+#define  __BIONIC__   1
+
+#endif /* !_SYS_CDEFS_H_ */
diff --git a/ndk/platforms/android-9/include/sys/linux-syscalls.h b/ndk/platforms/android-9/include/sys/linux-syscalls.h
new file mode 100644
index 0000000..9702a7a
--- /dev/null
+++ b/ndk/platforms/android-9/include/sys/linux-syscalls.h
@@ -0,0 +1,292 @@
+/* auto-generated by gensyscalls.py, do not touch */
+#ifndef _BIONIC_LINUX_SYSCALLS_H_
+
+#if !defined __ASM_ARM_UNISTD_H && !defined __ASM_I386_UNISTD_H
+#if defined __arm__ && !defined __ARM_EABI__ && !defined __thumb__
+  #  define __NR_SYSCALL_BASE  0x900000
+  #else
+  #  define  __NR_SYSCALL_BASE  0
+  #endif
+
+#define __NR_exit                         (__NR_SYSCALL_BASE + 1)
+#define __NR_fork                         (__NR_SYSCALL_BASE + 2)
+#define __NR_clone                        (__NR_SYSCALL_BASE + 120)
+#define __NR_execve                       (__NR_SYSCALL_BASE + 11)
+#define __NR_setuid32                     (__NR_SYSCALL_BASE + 213)
+#define __NR_getuid32                     (__NR_SYSCALL_BASE + 199)
+#define __NR_getgid32                     (__NR_SYSCALL_BASE + 200)
+#define __NR_geteuid32                    (__NR_SYSCALL_BASE + 201)
+#define __NR_getegid32                    (__NR_SYSCALL_BASE + 202)
+#define __NR_getresuid32                  (__NR_SYSCALL_BASE + 209)
+#define __NR_getresgid32                  (__NR_SYSCALL_BASE + 211)
+#define __NR_gettid                       (__NR_SYSCALL_BASE + 224)
+#define __NR_getgroups32                  (__NR_SYSCALL_BASE + 205)
+#define __NR_getpgid                      (__NR_SYSCALL_BASE + 132)
+#define __NR_getppid                      (__NR_SYSCALL_BASE + 64)
+#define __NR_setsid                       (__NR_SYSCALL_BASE + 66)
+#define __NR_setgid32                     (__NR_SYSCALL_BASE + 214)
+#define __NR_setreuid32                   (__NR_SYSCALL_BASE + 203)
+#define __NR_setresuid32                  (__NR_SYSCALL_BASE + 208)
+#define __NR_setresgid32                  (__NR_SYSCALL_BASE + 210)
+#define __NR_brk                          (__NR_SYSCALL_BASE + 45)
+#define __NR_ptrace                       (__NR_SYSCALL_BASE + 26)
+#define __NR_getpriority                  (__NR_SYSCALL_BASE + 96)
+#define __NR_setpriority                  (__NR_SYSCALL_BASE + 97)
+#define __NR_setrlimit                    (__NR_SYSCALL_BASE + 75)
+#define __NR_ugetrlimit                   (__NR_SYSCALL_BASE + 191)
+#define __NR_getrusage                    (__NR_SYSCALL_BASE + 77)
+#define __NR_setgroups32                  (__NR_SYSCALL_BASE + 206)
+#define __NR_setpgid                      (__NR_SYSCALL_BASE + 57)
+#define __NR_setregid32                   (__NR_SYSCALL_BASE + 204)
+#define __NR_chroot                       (__NR_SYSCALL_BASE + 61)
+#define __NR_prctl                        (__NR_SYSCALL_BASE + 172)
+#define __NR_capget                       (__NR_SYSCALL_BASE + 184)
+#define __NR_capset                       (__NR_SYSCALL_BASE + 185)
+#define __NR_sigaltstack                  (__NR_SYSCALL_BASE + 186)
+#define __NR_acct                         (__NR_SYSCALL_BASE + 51)
+#define __NR_read                         (__NR_SYSCALL_BASE + 3)
+#define __NR_write                        (__NR_SYSCALL_BASE + 4)
+#define __NR_pread64                      (__NR_SYSCALL_BASE + 180)
+#define __NR_pwrite64                     (__NR_SYSCALL_BASE + 181)
+#define __NR_open                         (__NR_SYSCALL_BASE + 5)
+#define __NR_close                        (__NR_SYSCALL_BASE + 6)
+#define __NR_lseek                        (__NR_SYSCALL_BASE + 19)
+#define __NR__llseek                      (__NR_SYSCALL_BASE + 140)
+#define __NR_getpid                       (__NR_SYSCALL_BASE + 20)
+#define __NR_mmap2                        (__NR_SYSCALL_BASE + 192)
+#define __NR_munmap                       (__NR_SYSCALL_BASE + 91)
+#define __NR_mremap                       (__NR_SYSCALL_BASE + 163)
+#define __NR_msync                        (__NR_SYSCALL_BASE + 144)
+#define __NR_mprotect                     (__NR_SYSCALL_BASE + 125)
+#define __NR_mlock                        (__NR_SYSCALL_BASE + 150)
+#define __NR_munlock                      (__NR_SYSCALL_BASE + 151)
+#define __NR_ioctl                        (__NR_SYSCALL_BASE + 54)
+#define __NR_readv                        (__NR_SYSCALL_BASE + 145)
+#define __NR_writev                       (__NR_SYSCALL_BASE + 146)
+#define __NR_fcntl                        (__NR_SYSCALL_BASE + 55)
+#define __NR_flock                        (__NR_SYSCALL_BASE + 143)
+#define __NR_fchmod                       (__NR_SYSCALL_BASE + 94)
+#define __NR_dup                          (__NR_SYSCALL_BASE + 41)
+#define __NR_pipe                         (__NR_SYSCALL_BASE + 42)
+#define __NR_dup2                         (__NR_SYSCALL_BASE + 63)
+#define __NR__newselect                   (__NR_SYSCALL_BASE + 142)
+#define __NR_ftruncate                    (__NR_SYSCALL_BASE + 93)
+#define __NR_fsync                        (__NR_SYSCALL_BASE + 118)
+#define __NR_fdatasync                    (__NR_SYSCALL_BASE + 148)
+#define __NR_fchown32                     (__NR_SYSCALL_BASE + 207)
+#define __NR_sync                         (__NR_SYSCALL_BASE + 36)
+#define __NR_fcntl64                      (__NR_SYSCALL_BASE + 221)
+#define __NR_sendfile                     (__NR_SYSCALL_BASE + 187)
+#define __NR_link                         (__NR_SYSCALL_BASE + 9)
+#define __NR_unlink                       (__NR_SYSCALL_BASE + 10)
+#define __NR_chdir                        (__NR_SYSCALL_BASE + 12)
+#define __NR_mknod                        (__NR_SYSCALL_BASE + 14)
+#define __NR_chmod                        (__NR_SYSCALL_BASE + 15)
+#define __NR_chown32                      (__NR_SYSCALL_BASE + 212)
+#define __NR_lchown32                     (__NR_SYSCALL_BASE + 198)
+#define __NR_mount                        (__NR_SYSCALL_BASE + 21)
+#define __NR_umount2                      (__NR_SYSCALL_BASE + 52)
+#define __NR_fstat64                      (__NR_SYSCALL_BASE + 197)
+#define __NR_stat64                       (__NR_SYSCALL_BASE + 195)
+#define __NR_lstat64                      (__NR_SYSCALL_BASE + 196)
+#define __NR_mkdir                        (__NR_SYSCALL_BASE + 39)
+#define __NR_readlink                     (__NR_SYSCALL_BASE + 85)
+#define __NR_rmdir                        (__NR_SYSCALL_BASE + 40)
+#define __NR_rename                       (__NR_SYSCALL_BASE + 38)
+#define __NR_getcwd                       (__NR_SYSCALL_BASE + 183)
+#define __NR_access                       (__NR_SYSCALL_BASE + 33)
+#define __NR_symlink                      (__NR_SYSCALL_BASE + 83)
+#define __NR_fchdir                       (__NR_SYSCALL_BASE + 133)
+#define __NR_truncate                     (__NR_SYSCALL_BASE + 92)
+#define __NR_pause                        (__NR_SYSCALL_BASE + 29)
+#define __NR_gettimeofday                 (__NR_SYSCALL_BASE + 78)
+#define __NR_settimeofday                 (__NR_SYSCALL_BASE + 79)
+#define __NR_times                        (__NR_SYSCALL_BASE + 43)
+#define __NR_nanosleep                    (__NR_SYSCALL_BASE + 162)
+#define __NR_getitimer                    (__NR_SYSCALL_BASE + 105)
+#define __NR_setitimer                    (__NR_SYSCALL_BASE + 104)
+#define __NR_sigaction                    (__NR_SYSCALL_BASE + 67)
+#define __NR_sigprocmask                  (__NR_SYSCALL_BASE + 126)
+#define __NR_sigsuspend                   (__NR_SYSCALL_BASE + 72)
+#define __NR_rt_sigaction                 (__NR_SYSCALL_BASE + 174)
+#define __NR_rt_sigprocmask               (__NR_SYSCALL_BASE + 175)
+#define __NR_rt_sigtimedwait              (__NR_SYSCALL_BASE + 177)
+#define __NR_sigpending                   (__NR_SYSCALL_BASE + 73)
+#define __NR_sched_setscheduler           (__NR_SYSCALL_BASE + 156)
+#define __NR_sched_getscheduler           (__NR_SYSCALL_BASE + 157)
+#define __NR_sched_yield                  (__NR_SYSCALL_BASE + 158)
+#define __NR_sched_setparam               (__NR_SYSCALL_BASE + 154)
+#define __NR_sched_getparam               (__NR_SYSCALL_BASE + 155)
+#define __NR_sched_get_priority_max       (__NR_SYSCALL_BASE + 159)
+#define __NR_sched_get_priority_min       (__NR_SYSCALL_BASE + 160)
+#define __NR_sched_rr_get_interval        (__NR_SYSCALL_BASE + 161)
+#define __NR_uname                        (__NR_SYSCALL_BASE + 122)
+#define __NR_wait4                        (__NR_SYSCALL_BASE + 114)
+#define __NR_umask                        (__NR_SYSCALL_BASE + 60)
+#define __NR_reboot                       (__NR_SYSCALL_BASE + 88)
+#define __NR_syslog                       (__NR_SYSCALL_BASE + 103)
+#define __NR_init_module                  (__NR_SYSCALL_BASE + 128)
+#define __NR_delete_module                (__NR_SYSCALL_BASE + 129)
+#define __NR_syslog                       (__NR_SYSCALL_BASE + 103)
+#define __NR_sysinfo                      (__NR_SYSCALL_BASE + 116)
+#define __NR_futex                        (__NR_SYSCALL_BASE + 240)
+#define __NR_poll                         (__NR_SYSCALL_BASE + 168)
+
+#ifdef __arm__
+#define __NR_exit_group                   (__NR_SYSCALL_BASE + 248)
+#define __NR_waitid                       (__NR_SYSCALL_BASE + 280)
+#define __NR_vfork                        (__NR_SYSCALL_BASE + 190)
+#define __NR_openat                       (__NR_SYSCALL_BASE + 322)
+#define __NR_madvise                      (__NR_SYSCALL_BASE + 220)
+#define __NR_mincore                      (__NR_SYSCALL_BASE + 219)
+#define __NR_pipe2                        (__NR_SYSCALL_BASE + 359)
+#define __NR_getdents64                   (__NR_SYSCALL_BASE + 217)
+#define __NR_fstatfs64                    (__NR_SYSCALL_BASE + 267)
+#define __NR_fstatat64                    (__NR_SYSCALL_BASE + 327)
+#define __NR_mkdirat                      (__NR_SYSCALL_BASE + 323)
+#define __NR_fchownat                     (__NR_SYSCALL_BASE + 325)
+#define __NR_fchmodat                     (__NR_SYSCALL_BASE + 333)
+#define __NR_renameat                     (__NR_SYSCALL_BASE + 329)
+#define __NR_unlinkat                     (__NR_SYSCALL_BASE + 328)
+#define __NR_statfs64                     (__NR_SYSCALL_BASE + 266)
+#define __NR_clock_gettime                (__NR_SYSCALL_BASE + 263)
+#define __NR_clock_settime                (__NR_SYSCALL_BASE + 262)
+#define __NR_clock_getres                 (__NR_SYSCALL_BASE + 264)
+#define __NR_clock_nanosleep              (__NR_SYSCALL_BASE + 265)
+#define __NR_timer_create                 (__NR_SYSCALL_BASE + 257)
+#define __NR_timer_settime                (__NR_SYSCALL_BASE + 258)
+#define __NR_timer_gettime                (__NR_SYSCALL_BASE + 259)
+#define __NR_timer_getoverrun             (__NR_SYSCALL_BASE + 260)
+#define __NR_timer_delete                 (__NR_SYSCALL_BASE + 261)
+#define __NR_utimes                       (__NR_SYSCALL_BASE + 269)
+#define __NR_socket                       (__NR_SYSCALL_BASE + 281)
+#define __NR_socketpair                   (__NR_SYSCALL_BASE + 288)
+#define __NR_bind                         (__NR_SYSCALL_BASE + 282)
+#define __NR_connect                      (__NR_SYSCALL_BASE + 283)
+#define __NR_listen                       (__NR_SYSCALL_BASE + 284)
+#define __NR_accept                       (__NR_SYSCALL_BASE + 285)
+#define __NR_getsockname                  (__NR_SYSCALL_BASE + 286)
+#define __NR_getpeername                  (__NR_SYSCALL_BASE + 287)
+#define __NR_sendto                       (__NR_SYSCALL_BASE + 290)
+#define __NR_recvfrom                     (__NR_SYSCALL_BASE + 292)
+#define __NR_shutdown                     (__NR_SYSCALL_BASE + 293)
+#define __NR_setsockopt                   (__NR_SYSCALL_BASE + 294)
+#define __NR_getsockopt                   (__NR_SYSCALL_BASE + 295)
+#define __NR_sendmsg                      (__NR_SYSCALL_BASE + 296)
+#define __NR_recvmsg                      (__NR_SYSCALL_BASE + 297)
+#define __NR_ioprio_set                   (__NR_SYSCALL_BASE + 314)
+#define __NR_ioprio_get                   (__NR_SYSCALL_BASE + 315)
+#define __NR_epoll_create                 (__NR_SYSCALL_BASE + 250)
+#define __NR_epoll_ctl                    (__NR_SYSCALL_BASE + 251)
+#define __NR_epoll_wait                   (__NR_SYSCALL_BASE + 252)
+#define __NR_inotify_init                 (__NR_SYSCALL_BASE + 316)
+#define __NR_inotify_add_watch            (__NR_SYSCALL_BASE + 317)
+#define __NR_inotify_rm_watch             (__NR_SYSCALL_BASE + 318)
+#define __NR_eventfd2                     (__NR_SYSCALL_BASE + 356)
+#define __NR_ARM_set_tls                  (__NR_SYSCALL_BASE + 983045)
+#define __NR_ARM_cacheflush               (__NR_SYSCALL_BASE + 983042)
+#endif
+
+#ifdef __i386__
+#define __NR_exit_group                   (__NR_SYSCALL_BASE + 252)
+#define __NR_waitpid                      (__NR_SYSCALL_BASE + 7)
+#define __NR_waitid                       (__NR_SYSCALL_BASE + 284)
+#define __NR_kill                         (__NR_SYSCALL_BASE + 37)
+#define __NR_tkill                        (__NR_SYSCALL_BASE + 238)
+#define __NR_set_thread_area              (__NR_SYSCALL_BASE + 243)
+#define __NR_openat                       (__NR_SYSCALL_BASE + 295)
+#define __NR_madvise                      (__NR_SYSCALL_BASE + 219)
+#define __NR_mincore                      (__NR_SYSCALL_BASE + 218)
+#define __NR_pipe2                        (__NR_SYSCALL_BASE + 331)
+#define __NR_getdents64                   (__NR_SYSCALL_BASE + 220)
+#define __NR_fstatfs64                    (__NR_SYSCALL_BASE + 269)
+#define __NR_fstatat64                    (__NR_SYSCALL_BASE + 300)
+#define __NR_mkdirat                      (__NR_SYSCALL_BASE + 296)
+#define __NR_fchownat                     (__NR_SYSCALL_BASE + 298)
+#define __NR_fchmodat                     (__NR_SYSCALL_BASE + 306)
+#define __NR_renameat                     (__NR_SYSCALL_BASE + 302)
+#define __NR_unlinkat                     (__NR_SYSCALL_BASE + 301)
+#define __NR_statfs64                     (__NR_SYSCALL_BASE + 268)
+#define __NR_clock_gettime                (__NR_SYSCALL_BASE + 265)
+#define __NR_clock_settime                (__NR_SYSCALL_BASE + 264)
+#define __NR_clock_getres                 (__NR_SYSCALL_BASE + 266)
+#define __NR_clock_nanosleep              (__NR_SYSCALL_BASE + 267)
+#define __NR_timer_create                 (__NR_SYSCALL_BASE + 259)
+#define __NR_timer_settime                (__NR_SYSCALL_BASE + 260)
+#define __NR_timer_gettime                (__NR_SYSCALL_BASE + 261)
+#define __NR_timer_getoverrun             (__NR_SYSCALL_BASE + 262)
+#define __NR_timer_delete                 (__NR_SYSCALL_BASE + 263)
+#define __NR_utimes                       (__NR_SYSCALL_BASE + 271)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_ioprio_set                   (__NR_SYSCALL_BASE + 289)
+#define __NR_ioprio_get                   (__NR_SYSCALL_BASE + 290)
+#define __NR_epoll_create                 (__NR_SYSCALL_BASE + 254)
+#define __NR_epoll_ctl                    (__NR_SYSCALL_BASE + 255)
+#define __NR_epoll_wait                   (__NR_SYSCALL_BASE + 256)
+#define __NR_inotify_init                 (__NR_SYSCALL_BASE + 291)
+#define __NR_inotify_add_watch            (__NR_SYSCALL_BASE + 292)
+#define __NR_inotify_rm_watch             (__NR_SYSCALL_BASE + 293)
+#define __NR_eventfd2                     (__NR_SYSCALL_BASE + 328)
+#endif
+
+#if defined(__SH3__) || defined(__SH4__) 
+#define __NR_exit_group                   (__NR_SYSCALL_BASE + 252)
+#define __NR_waitpid                      (__NR_SYSCALL_BASE + 7)
+#define __NR_waitid                       (__NR_SYSCALL_BASE + 284)
+#define __NR_kill                         (__NR_SYSCALL_BASE + 37)
+#define __NR_tkill                        (__NR_SYSCALL_BASE + 238)
+#define __NR_set_thread_area              (__NR_SYSCALL_BASE + 243)
+#define __NR_vfork                        (__NR_SYSCALL_BASE + 190)
+#define __NR_openat                       (__NR_SYSCALL_BASE + 295)
+#define __NR_madvise                      (__NR_SYSCALL_BASE + 219)
+#define __NR_mincore                      (__NR_SYSCALL_BASE + 218)
+#define __NR_pipe2                        (__NR_SYSCALL_BASE + 331)
+#define __NR_getdents64                   (__NR_SYSCALL_BASE + 220)
+#define __NR_fstatfs64                    (__NR_SYSCALL_BASE + 269)
+#define __NR_fstatat64                    (__NR_SYSCALL_BASE + 300)
+#define __NR_mkdirat                      (__NR_SYSCALL_BASE + 296)
+#define __NR_fchownat                     (__NR_SYSCALL_BASE + 298)
+#define __NR_fchmodat                     (__NR_SYSCALL_BASE + 306)
+#define __NR_renameat                     (__NR_SYSCALL_BASE + 302)
+#define __NR_unlinkat                     (__NR_SYSCALL_BASE + 301)
+#define __NR_statfs64                     (__NR_SYSCALL_BASE + 268)
+#define __NR_clock_gettime                (__NR_SYSCALL_BASE + 265)
+#define __NR_clock_settime                (__NR_SYSCALL_BASE + 264)
+#define __NR_clock_getres                 (__NR_SYSCALL_BASE + 266)
+#define __NR_clock_nanosleep              (__NR_SYSCALL_BASE + 267)
+#define __NR_timer_create                 (__NR_SYSCALL_BASE + 259)
+#define __NR_timer_settime                (__NR_SYSCALL_BASE + 260)
+#define __NR_timer_gettime                (__NR_SYSCALL_BASE + 261)
+#define __NR_timer_getoverrun             (__NR_SYSCALL_BASE + 262)
+#define __NR_timer_delete                 (__NR_SYSCALL_BASE + 263)
+#define __NR_utimes                       (__NR_SYSCALL_BASE + 271)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR_socketcall                   (__NR_SYSCALL_BASE + 102)
+#define __NR___socketcall                 (__NR_SYSCALL_BASE + 102)
+#define __NR_ioprio_set                   (__NR_SYSCALL_BASE + 288)
+#define __NR_ioprio_get                   (__NR_SYSCALL_BASE + 289)
+#define __NR_epoll_create                 (__NR_SYSCALL_BASE + 254)
+#define __NR_epoll_ctl                    (__NR_SYSCALL_BASE + 255)
+#define __NR_epoll_wait                   (__NR_SYSCALL_BASE + 256)
+#define __NR_inotify_init                 (__NR_SYSCALL_BASE + 290)
+#define __NR_inotify_add_watch            (__NR_SYSCALL_BASE + 291)
+#define __NR_inotify_rm_watch             (__NR_SYSCALL_BASE + 292)
+#define __NR_eventfd2                     (__NR_SYSCALL_BASE + 328)
+#endif
+
+#endif
+
+#endif /* _BIONIC_LINUX_SYSCALLS_H_ */
diff --git a/ndk/platforms/android-9/include/sys/linux-unistd.h b/ndk/platforms/android-9/include/sys/linux-unistd.h
new file mode 100644
index 0000000..23853da
--- /dev/null
+++ b/ndk/platforms/android-9/include/sys/linux-unistd.h
@@ -0,0 +1,212 @@
+/* auto-generated by gensyscalls.py, do not touch */
+#ifndef _BIONIC_LINUX_UNISTD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void             _exit (int);
+void             _exit_thread (int);
+pid_t            __fork (void);
+pid_t            _waitpid (pid_t, int*, int, struct rusage*);
+int              __waitid (int, pid_t, struct siginfo_t*, int,void*);
+pid_t            __sys_clone (int, void*, int*, void*, int*);
+int              execve (const char*, char* const*, char* const*);
+int              __setuid (uid_t);
+uid_t            getuid (void);
+gid_t            getgid (void);
+uid_t            geteuid (void);
+gid_t            getegid (void);
+uid_t            getresuid (void);
+gid_t            getresgid (void);
+pid_t            gettid (void);
+int              getgroups (int, gid_t *);
+pid_t            getpgid (pid_t);
+pid_t            getppid (void);
+pid_t            setsid (void);
+int              setgid (gid_t);
+int              seteuid (uid_t);
+int              __setreuid (uid_t, uid_t);
+int              __setresuid (uid_t, uid_t, uid_t);
+int              setresgid (gid_t, gid_t, gid_t);
+void*            __brk (void*);
+int              kill (pid_t, int);
+int              tkill (pid_t tid, int sig);
+int              __ptrace (int request, int pid, void* addr, void* data);
+int              __set_thread_area (void*  user_desc);
+int              __getpriority (int, int);
+int              setpriority (int, int, int);
+int              setrlimit (int resource, const struct rlimit *rlp);
+int              getrlimit (int resource, struct rlimit *rlp);
+int              getrusage (int who, struct rusage*  r_usage);
+int              setgroups (int, const gid_t *);
+pid_t            getpgrp (void);
+int              setpgid (pid_t, pid_t);
+pid_t            vfork (void);
+int              setregid (gid_t, gid_t);
+int              chroot (const char *);
+int              prctl (int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5);
+int              capget (cap_user_header_t header, cap_user_data_t data);
+int              capset (cap_user_header_t header, const cap_user_data_t data);
+int              sigaltstack (const stack_t*, stack_t*);
+int              acct (const char*  filepath);
+ssize_t          read (int, void*, size_t);
+ssize_t          write (int, const void*, size_t);
+ssize_t          __pread64 (int, void *, size_t, off_t, off_t);
+ssize_t          __pwrite64 (int, void *, size_t, off_t, off_t);
+int              __open (const char*, int, mode_t);
+int              __openat (int, const char*, int, mode_t);
+int              close (int);
+int              creat (const char*, mode_t);
+off_t            lseek (int, off_t, int);
+int              __llseek (int, unsigned long, unsigned long, loff_t*, int);
+pid_t            getpid (void);
+void *           mmap (void *, size_t, int, int, int, long);
+void *           __mmap2 (void*, size_t, int, int, int, long);
+int              munmap (void *, size_t);
+void *           mremap (void *, size_t, size_t, unsigned long);
+int              msync (const void *, size_t, int);
+int              mprotect (const void *, size_t, int);
+int              madvise (const void *, size_t, int);
+int              mlock (const void *addr, size_t len);
+int              munlock (const void *addr, size_t len);
+int              mincore (void*  start, size_t  length, unsigned char*  vec);
+int              __ioctl (int, int, void *);
+int              readv (int, const struct iovec *, int);
+int              writev (int, const struct iovec *, int);
+int              __fcntl (int, int, void*);
+int              flock (int, int);
+int              fchmod (int, mode_t);
+int              dup (int);
+int              pipe (int *);
+int              pipe2 (int *, int);
+int              dup2 (int, int);
+int              select (int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *);
+int              ftruncate (int, off_t);
+int              getdents (unsigned int, struct dirent *, unsigned int);
+int              fsync (int);
+int              fdatasync (int);
+int              fchown (int, uid_t, gid_t);
+void             sync (void);
+int              __fcntl64 (int, int, void *);
+int              __fstatfs64 (int, size_t, struct statfs *);
+ssize_t          sendfile (int out_fd, int in_fd, off_t *offset, size_t count);
+int              fstatat (int dirfd, const char *path, struct stat *buf, int flags);
+int              mkdirat (int dirfd, const char *pathname, mode_t mode);
+int              fchownat (int dirfd, const char *path, uid_t owner, gid_t group, int flags);
+int              fchmodat (int dirfd, const char *path, mode_t mode, int flags);
+int              renameat (int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
+int              link (const char*, const char*);
+int              unlink (const char*);
+int              unlinkat (int, const char *, int);
+int              chdir (const char*);
+int              mknod (const char*, mode_t, dev_t);
+int              chmod (const char*,mode_t);
+int              chown (const char *, uid_t, gid_t);
+int              lchown (const char*, uid_t, gid_t);
+int              mount (const char*, const char*, const char*, unsigned long, const void*);
+int              umount (const char*);
+int              umount2 (const char*, int);
+int              fstat (int, struct stat*);
+int              stat (const char *, struct stat *);
+int              lstat (const char *, struct stat *);
+int              mkdir (const char *, mode_t);
+int              readlink (const char *, char *, size_t);
+int              rmdir (const char *);
+int              rename (const char *, const char *);
+int              __getcwd (char * buf, size_t size);
+int              access (const char *, int);
+int              symlink (const char *, const char *);
+int              fchdir (int);
+int              truncate (const char*, off_t);
+int              __statfs64 (const char *, size_t, struct statfs *);
+int              pause (void);
+int              gettimeofday (struct timeval*, struct timezone*);
+int              settimeofday (const struct timeval*, const struct timezone*);
+clock_t          times (struct tms *);
+int              nanosleep (const struct timespec *, struct timespec *);
+int              clock_gettime (clockid_t clk_id, struct timespec *tp);
+int              clock_settime (clockid_t clk_id, const struct timespec *tp);
+int              clock_getres (clockid_t clk_id, struct timespec *res);
+int              clock_nanosleep (const struct timespec *req, struct timespec *rem);
+int              getitimer (int, const struct itimerval *);
+int              setitimer (int, const struct itimerval *, struct itimerval *);
+int              __timer_create (clockid_t clockid, struct sigevent *evp, timer_t *timerid);
+int              __timer_settime (timer_t, int, const struct itimerspec*, struct itimerspec*);
+int              __timer_gettime (timer_t, struct itimerspec*);
+int              __timer_getoverrun (timer_t);
+int              __timer_delete (timer_t);
+int              utimes (const char*, const struct timeval tvp[2]);
+int              sigaction (int, const struct sigaction *, struct sigaction *);
+int              sigprocmask (int, const sigset_t *, sigset_t *);
+int              __sigsuspend (int unused1, int unused2, unsigned mask);
+int              __rt_sigaction (int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize);
+int              __rt_sigprocmask (int  how, const sigset_t *set, sigset_t *oset, size_t sigsetsize);
+int              __rt_sigtimedwait (const sigset_t *set, struct siginfo_t  *info, struct timespec_t  *timeout, size_t  sigset_size);
+int              sigpending (sigset_t *);
+int              socket (int, int, int);
+int              socketpair (int, int, int, int*);
+int              bind (int, struct sockaddr *, int);
+int              connect (int, struct sockaddr *, socklen_t);
+int              listen (int, int);
+int              accept (int, struct sockaddr *, socklen_t *);
+int              getsockname (int, struct sockaddr *, socklen_t *);
+int              getpeername (int, struct sockaddr *, socklen_t *);
+int              sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t);
+int              recvfrom (int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *);
+int              shutdown (int, int);
+int              setsockopt (int, int, int, const void *, socklen_t);
+int              getsockopt (int, int, int, void *, socklen_t *);
+int              sendmsg (int, const struct msghdr *, unsigned int);
+int              recvmsg (int, struct msghdr *, unsigned int);
+int              socket (int, int, int);
+int              bind (int, struct sockaddr *, int);
+int              connect (int, struct sockaddr *, socklen_t);
+int              listen (int, int);
+int              accept (int, struct sockaddr *, socklen_t *);
+int              getsockname (int, struct sockaddr *, socklen_t *);
+int              getpeername (int, struct sockaddr *, socklen_t *);
+int              socketpair (int, int, int, int*);
+int              sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t);
+int              recvfrom (int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *);
+int              shutdown (int, int);
+int              setsockopt (int, int, int, const void *, socklen_t);
+int              getsockopt (int, int, int, void *, socklen_t *);
+int              sendmsg (int, const struct msghdr *, unsigned int);
+int              recvmsg (int, struct msghdr *, unsigned int);
+int              __socketcall (int, unsigned long*);
+int              sched_setscheduler (pid_t pid, int policy, const struct sched_param *param);
+int              sched_getscheduler (pid_t pid);
+int              sched_yield (void);
+int              sched_setparam (pid_t pid, const struct sched_param *param);
+int              sched_getparam (pid_t pid, struct sched_param *param);
+int              sched_get_priority_max (int policy);
+int              sched_get_priority_min (int policy);
+int              sched_rr_get_interval (pid_t pid, struct timespec *interval);
+int              ioprio_set (int which, int who, int ioprio);
+int              ioprio_get (int which, int who);
+int              uname (struct utsname *);
+pid_t            __wait4 (pid_t pid, int *status, int options, struct rusage *rusage);
+mode_t           umask (mode_t);
+int              __reboot (int, int, int, void *);
+int              __syslog (int, char *, int);
+int              init_module (void *, unsigned long, const char *);
+int              delete_module (const char*, unsigned int);
+int              klogctl (int, char *, int);
+int              sysinfo (struct sysinfo *);
+int              futex (void *, int, int, void *, void *, int);
+int              epoll_create (int size);
+int              epoll_ctl (int epfd, int op, int fd, struct epoll_event *event);
+int              epoll_wait (int epfd, struct epoll_event *events, int max, int timeout);
+int              inotify_init (void);
+int              inotify_add_watch (int, const char *, unsigned int);
+int              inotify_rm_watch (int, unsigned int);
+int              poll (struct pollfd *, unsigned int, long);
+int              eventfd (unsigned int, int);
+int              __set_tls (void*);
+int              cacheflush (long start, long end, long flags);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BIONIC_LINUX_UNISTD_H_ */
diff --git a/ndk/platforms/android-9/include/sys/sysinfo.h b/ndk/platforms/android-9/include/sys/sysinfo.h
new file mode 100644
index 0000000..c7e46e6
--- /dev/null
+++ b/ndk/platforms/android-9/include/sys/sysinfo.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _SYS_SYSINFO_H_
+#define _SYS_SYSINFO_H_
+
+#include <sys/cdefs.h>
+#include <linux/kernel.h>
+
+__BEGIN_DECLS
+
+extern int sysinfo (struct sysinfo *info);
+
+__END_DECLS
+
+#endif /* _SYS_SYSINFO_H_ */
diff --git a/ndk/platforms/android-9/include/sys/wait.h b/ndk/platforms/android-9/include/sys/wait.h
new file mode 100644
index 0000000..b30b7ec
--- /dev/null
+++ b/ndk/platforms/android-9/include/sys/wait.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _SYS_WAIT_H_
+#define _SYS_WAIT_H_
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <linux/wait.h>
+#include <signal.h>
+
+__BEGIN_DECLS
+
+#define WEXITSTATUS(s)  (((s) & 0xff00) >> 8)
+#define WCOREDUMP(s)    ((s) & 0x80)
+#define WTERMSIG(s)     ((s) & 0x7f)
+#define WSTOPSIG(s)     WEXITSTATUS(s)
+
+#define WIFEXITED(s)    (WTERMSIG(s) == 0)
+#define WIFSTOPPED(s)   (WTERMSIG(s) == 0x7f)
+#define WIFSIGNALED(s)  (WTERMSIG((s)+1) >= 2)
+
+extern pid_t  wait(int *);
+extern pid_t  waitpid(pid_t, int *, int);
+extern pid_t  wait3(int *, int, struct rusage *);
+extern pid_t  wait4(pid_t, int *, int, struct rusage *);
+
+/* Posix states that idtype_t should be an enumeration type, but
+ * the kernel headers define P_ALL, P_PID and P_PGID as constant macros
+ * instead.
+ */
+typedef int idtype_t;
+
+extern int  waitid(idtype_t which, id_t id, siginfo_t *info, int options);
+
+__END_DECLS
+
+#endif /* _SYS_WAIT_H_ */
diff --git a/ndk/platforms/android-9/include/unistd.h b/ndk/platforms/android-9/include/unistd.h
new file mode 100644
index 0000000..29154a2
--- /dev/null
+++ b/ndk/platforms/android-9/include/unistd.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _UNISTD_H_
+#define _UNISTD_H_
+
+#include <stddef.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <sys/select.h>
+#include <sys/sysconf.h>
+#include <linux/capability.h>
+#include <pathconf.h>
+
+__BEGIN_DECLS
+
+/* Standard file descriptor numbers. */
+#define STDIN_FILENO	0
+#define STDOUT_FILENO	1
+#define STDERR_FILENO	2
+
+/* Values for whence in fseek and lseek */
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+
+extern char **environ;
+extern __noreturn void _exit(int);
+
+extern pid_t  fork(void);
+extern pid_t  vfork(void);
+extern pid_t  getpid(void);
+extern pid_t  gettid(void);
+extern pid_t  getpgid(pid_t);
+extern int    setpgid(pid_t, pid_t);
+extern pid_t  getppid(void);
+extern pid_t  getpgrp(void);
+extern int    setpgrp(void);
+extern pid_t  setsid(void);
+
+extern int execv(const char *, char * const *);
+extern int execvp(const char *, char * const *);
+extern int execve(const char *, char * const *, char * const *);
+extern int execl(const char *, const char *, ...);
+extern int execlp(const char *, const char *, ...);
+extern int execle(const char *, const char *, ...);
+extern int capget(cap_user_header_t hdrp, cap_user_data_t datap);
+extern int capset(cap_user_header_t hdrp, const cap_user_data_t datap);
+extern int prctl(int  option,  unsigned long arg2, unsigned long arg3,
+                 unsigned long arg4, unsigned long arg5);
+
+extern int nice(int);
+
+extern int setuid(uid_t);
+extern uid_t getuid(void);
+extern int seteuid(uid_t);
+extern uid_t geteuid(void);
+extern int setgid(gid_t);
+extern gid_t getgid(void);
+extern int setegid(gid_t);
+extern gid_t getegid(void);
+extern int getgroups(int, gid_t *);
+extern int setgroups(size_t, const gid_t *);
+extern int setreuid(uid_t, uid_t);
+extern int setregid(gid_t, gid_t);
+extern int setresuid(uid_t, uid_t, uid_t);
+extern int setresgid(gid_t, gid_t, gid_t);
+extern int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
+extern int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
+extern int issetugid(void);
+extern char* getlogin(void);
+extern char* getusershell(void);
+extern void setusershell(void);
+extern void endusershell(void);
+
+
+
+/* Macros for access() */
+#define R_OK  4  /* Read */
+#define W_OK  2  /* Write */
+#define X_OK  1  /* Execute */
+#define F_OK  0  /* Existence */
+
+extern int access(const char *, int);
+extern int link(const char *, const char *);
+extern int unlink(const char *);
+extern int chdir(const char *);
+extern int fchdir(int);
+extern int rmdir(const char *);
+extern int pipe(int *);
+#ifdef _GNU_SOURCE  /* GLibc compatibility */
+extern int pipe2(int *, int);
+#endif
+extern int chroot(const char *);
+extern int symlink(const char *, const char *);
+extern int readlink(const char *, char *, size_t);
+extern int chown(const char *, uid_t, gid_t);
+extern int fchown(int, uid_t, gid_t);
+extern int lchown(const char *, uid_t, gid_t);
+extern int truncate(const char *, off_t);
+extern char *getcwd(char *, size_t);
+
+extern int sync(void);
+
+extern int close(int);
+extern off_t lseek(int, off_t, int);
+extern loff_t lseek64(int, loff_t, int);
+
+extern ssize_t read(int, void *, size_t);
+extern ssize_t write(int, const void *, size_t);
+extern ssize_t pread(int, void *, size_t, off_t);
+extern ssize_t pwrite(int, void *, size_t, off_t);
+
+extern int dup(int);
+extern int dup2(int, int);
+extern int fcntl(int, int, ...);
+extern int ioctl(int, int, ...);
+extern int flock(int, int);
+extern int fsync(int);
+extern int fdatasync(int);
+extern int ftruncate(int, off_t);
+
+extern int pause(void);
+extern unsigned int alarm(unsigned int);
+extern unsigned int sleep(unsigned int);
+extern int usleep(unsigned long);
+
+extern int gethostname(char *, size_t);
+
+extern int getdtablesize(void);
+
+extern void *__brk(void *);
+extern int brk(void *);
+extern void *sbrk(ptrdiff_t);
+
+extern int getopt(int, char * const *, const char *);
+extern char *optarg;
+extern int optind, opterr, optopt;
+
+extern int isatty(int);
+extern char* ttyname(int);
+extern int ttyname_r(int, char*, size_t);
+
+extern int  acct(const char*  filepath);
+
+static __inline__ int getpagesize(void) {
+  extern unsigned int __page_size;
+  return __page_size;
+}
+static __inline__ int __getpageshift(void) {
+  extern unsigned int __page_shift;
+  return __page_shift;
+}
+
+extern int sysconf(int  name);
+
+extern int daemon(int, int);
+
+/* A special syscall that is only available on the ARM, not x86 function. */
+extern int cacheflush(long start, long end, long flags);
+
+extern pid_t tcgetpgrp(int fd);
+extern int   tcsetpgrp(int fd, pid_t _pid);
+
+#if 0 /* MISSING FROM BIONIC */
+extern pid_t  getsid(pid_t);
+extern int execvpe(const char *, char * const *, char * const *);
+extern int execlpe(const char *, const char *, ...);
+extern int getfsuid(uid_t);
+extern int setfsuid(uid_t);
+extern int getlogin_r(char* name, size_t namesize);
+extern int sethostname(const char *, size_t);
+extern int getdomainname(char *, size_t);
+extern int setdomainname(const char *, size_t);
+#endif /* MISSING */
+
+/* Used to retry syscalls that can return EINTR. */
+#define TEMP_FAILURE_RETRY(exp) ({         \
+    typeof (exp) _rc;                      \
+    do {                                   \
+        _rc = (exp);                       \
+    } while (_rc == -1 && errno == EINTR); \
+    _rc; })
+
+__END_DECLS
+
+#endif /* _UNISTD_H_ */
diff --git a/ndk/platforms/android-9/include/wchar.h b/ndk/platforms/android-9/include/wchar.h
new file mode 100644
index 0000000..9b744a5
--- /dev/null
+++ b/ndk/platforms/android-9/include/wchar.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _WCHAR_H_
+#define _WCHAR_H_
+
+#include <sys/cdefs.h>
+#include <stdio.h>
+
+/* wchar_t is required in stdlib.h according to POSIX */
+#define __need___wchar_t
+#include <stddef.h>
+
+#include <stdarg.h>
+#include <time.h>
+#include <malloc.h>
+
+#include <stddef.h>
+
+/* IMPORTANT: Any code that relies on wide character support is essentially
+ *            non-portable and/or broken. the only reason this header exist
+ *            is because I'm really a nice guy. However, I'm not nice enough
+ *            to provide you with a real implementation. instead wchar_t == char
+ *            and all wc functions are stubs to their "normal" equivalent...
+ */
+
+__BEGIN_DECLS
+
+typedef int                     wint_t;
+typedef struct { int  dummy; }  mbstate_t;
+
+typedef enum {
+    WC_TYPE_INVALID = 0,
+    WC_TYPE_ALNUM,
+    WC_TYPE_ALPHA,
+    WC_TYPE_BLANK,
+    WC_TYPE_CNTRL,
+    WC_TYPE_DIGIT,
+    WC_TYPE_GRAPH,
+    WC_TYPE_LOWER,
+    WC_TYPE_PRINT,
+    WC_TYPE_PUNCT,
+    WC_TYPE_SPACE,
+    WC_TYPE_UPPER,
+    WC_TYPE_XDIGIT,
+    WC_TYPE_MAX
+} wctype_t;
+
+#define  WCHAR_MAX   INT_MAX
+#define  WCHAR_MIN   INT_MIN
+#define  WEOF        ((wint_t)(-1))
+
+extern wint_t            btowc(int);
+extern int               fwprintf(FILE *, const wchar_t *, ...);
+extern int               fwscanf(FILE *, const wchar_t *, ...);
+extern int               iswalnum(wint_t);
+extern int               iswalpha(wint_t);
+extern int               iswcntrl(wint_t);
+extern int               iswdigit(wint_t);
+extern int               iswgraph(wint_t);
+extern int               iswlower(wint_t);
+extern int               iswprint(wint_t);
+extern int               iswpunct(wint_t);
+extern int               iswspace(wint_t);
+extern int               iswupper(wint_t);
+extern int               iswxdigit(wint_t);
+extern int               iswctype(wint_t, wctype_t);
+extern wint_t            fgetwc(FILE *);
+extern wchar_t          *fgetws(wchar_t *, int, FILE *);
+extern wint_t            fputwc(wchar_t, FILE *);
+extern int               fputws(const wchar_t *, FILE *);
+extern int               fwide(FILE *, int);
+extern wint_t            getwc(FILE *);
+extern wint_t            getwchar(void);
+extern int               mbsinit(const mbstate_t *);
+extern size_t            mbrlen(const char *, size_t, mbstate_t *);
+extern size_t            mbrtowc(wchar_t *, const char *, size_t, mbstate_t *);
+extern size_t            mbsrtowcs(wchar_t *, const char **, size_t, mbstate_t *);
+extern size_t            mbstowcs(wchar_t *, const char *, size_t);
+extern wint_t            putwc(wchar_t, FILE *);
+extern wint_t            putwchar(wchar_t);
+extern int               swprintf(wchar_t *, size_t, const wchar_t *, ...);
+extern int               swscanf(const wchar_t *, const wchar_t *, ...);
+extern wint_t            towlower(wint_t);
+extern wint_t            towupper(wint_t);
+extern wint_t            ungetwc(wint_t, FILE *);
+extern int               vfwprintf(FILE *, const wchar_t *, va_list);
+extern int               vwprintf(const wchar_t *, va_list);
+extern int               vswprintf(wchar_t *, size_t, const wchar_t *, va_list);
+extern size_t            wcrtomb(char *, wchar_t, mbstate_t *);
+extern wchar_t          *wcscat(wchar_t *, const wchar_t *);
+extern wchar_t          *wcschr(const wchar_t *, wchar_t);
+extern int               wcscmp(const wchar_t *, const wchar_t *);
+extern int               wcscoll(const wchar_t *, const wchar_t *);
+extern wchar_t          *wcscpy(wchar_t *, const wchar_t *);
+extern size_t            wcscspn(const wchar_t *, const wchar_t *);
+extern size_t            wcsftime(wchar_t *, size_t, const wchar_t *, const struct tm *);
+extern size_t            wcslen(const wchar_t *);
+extern wchar_t          *wcsncat(wchar_t *, const wchar_t *, size_t);
+extern int               wcsncmp(const wchar_t *, const wchar_t *, size_t);
+extern wchar_t          *wcsncpy(wchar_t *, const wchar_t *, size_t);
+extern wchar_t          *wcspbrk(const wchar_t *, const wchar_t *);
+extern wchar_t          *wcsrchr(const wchar_t *, wchar_t);
+extern size_t            wcsrtombs(char *, const wchar_t **, size_t, mbstate_t *);
+extern size_t            wcsspn(const wchar_t *, const wchar_t *);
+extern wchar_t          *wcsstr(const wchar_t *, const wchar_t *);
+extern double            wcstod(const wchar_t *, wchar_t **);
+extern wchar_t          *wcstok(wchar_t *, const wchar_t *, wchar_t **);
+extern long int          wcstol(const wchar_t *, wchar_t **, int);
+extern size_t            wcstombs(char *, const wchar_t *, size_t);
+extern unsigned long int wcstoul(const wchar_t *, wchar_t **, int);
+extern wchar_t          *wcswcs(const wchar_t *, const wchar_t *);
+extern int               wcswidth(const wchar_t *, size_t);
+extern size_t            wcsxfrm(wchar_t *, const wchar_t *, size_t);
+extern int               wctob(wint_t);
+extern wctype_t          wctype(const char *);
+extern int               wcwidth(wchar_t);
+extern wchar_t          *wmemchr(const wchar_t *, wchar_t, size_t);
+extern int               wmemcmp(const wchar_t *, const wchar_t *, size_t);
+extern wchar_t          *wmemcpy(wchar_t *, const wchar_t *, size_t);
+extern wchar_t          *wmemmove(wchar_t *, const wchar_t *, size_t);
+extern wchar_t          *wmemset(wchar_t *, wchar_t, size_t);
+extern int               wprintf(const wchar_t *, ...);
+extern int               wscanf(const wchar_t *, ...);
+
+/* No really supported.  These are just for making libstdc++-v3 happy.  */
+typedef void *wctrans_t;
+extern wint_t		 towctrans(wint_t, wctrans_t);
+extern wctrans_t	 wctrans (const char *);
+
+__END_DECLS
+
+#endif /* _WCHAR_H_ */
diff --git a/ndk/platforms/android-9/samples/native-audio/AndroidManifest.xml b/ndk/platforms/android-9/samples/native-audio/AndroidManifest.xml
new file mode 100644
index 0000000..5eebb52
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.nativeaudio"
+      android:versionCode="1"
+      android:versionName="1.0">
+
+    <application android:icon="@drawable/icon" android:label="@string/app_name">
+        <activity android:name=".NativeAudio"
+                  android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+    <uses-sdk android:minSdkVersion="9" />
+
+    <!-- RECORD_AUDIO is needed to create an audio recorder -->
+    <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
+
+    <!-- MODIFY_AUDIO_SETTINGS is needed to use audio effects such as environmental reverb -->
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
+
+    <!-- INTERNET is needed to use a URI-based audio player, depending on the URI -->
+    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
+
+</manifest>
diff --git a/ndk/platforms/android-9/samples/native-audio/assets/README.txt b/ndk/platforms/android-9/samples/native-audio/assets/README.txt
new file mode 100644
index 0000000..3ce4076
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/assets/README.txt
@@ -0,0 +1,4 @@
+File background.mp3 ("Background for talking but don't") is
+copyright 2008 by Glenn Kasten and is licensed under a
+Creative Commons Attribution 3.0 Unported License:
+  http://creativecommons.org/licenses/by/3.0/
diff --git a/ndk/platforms/android-9/samples/native-audio/assets/background.mp3 b/ndk/platforms/android-9/samples/native-audio/assets/background.mp3
new file mode 100644
index 0000000..88e447d
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/assets/background.mp3
Binary files differ
diff --git a/ndk/platforms/android-9/samples/native-audio/default.properties b/ndk/platforms/android-9/samples/native-audio/default.properties
new file mode 100644
index 0000000..eada70a
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/default.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+# 
+# This file must be checked in Version Control Systems.
+# 
+# To customize properties used by the Ant build system use,
+# "build.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-9
+# Indicates whether an apk should be generated for each density.
+split.density=false
diff --git a/ndk/platforms/android-9/samples/native-audio/jni/Android.mk b/ndk/platforms/android-9/samples/native-audio/jni/Android.mk
new file mode 100644
index 0000000..63c8210
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/jni/Android.mk
@@ -0,0 +1,28 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE    := native-audio-jni
+LOCAL_SRC_FILES := native-audio-jni.c
+# for native audio
+LOCAL_LDLIBS    += -lOpenSLES
+# for logging
+LOCAL_LDLIBS    += -llog
+# for native asset manager
+LOCAL_LDLIBS    += -landroid
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/ndk/platforms/android-9/samples/native-audio/jni/android_clip.h b/ndk/platforms/android-9/samples/native-audio/jni/android_clip.h
new file mode 100644
index 0000000..8d168ac
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/jni/android_clip.h
@@ -0,0 +1,811 @@
+	"\xfe\xff\xfc\xff\xfb\xff\xfc\xff\xfb\xff\xff\xff\xff\xff\xfe\xff"
+	"\x00\x00\xfe\xff\xfe\xff\x01\x00\x02\x00\x02\x00\x05\x00\x04\x00"
+	"\x02\x00\x04\x00\x05\x00\xff\xff\x01\x00\xff\xff\xfc\xff\xfe\xff"
+	"\xff\xff\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00"
+	"\xff\xff\xfc\xff\xf9\xff\xfa\xff\xf8\xff\xfc\xff\xfe\xff\xfe\xff"
+	"\xfd\xff\xfc\xff\x01\x00\xff\xff\xff\xff\x02\x00\x04\x00\x04\x00"
+	"\x07\x00\x06\x00\x04\x00\x05\x00\x04\x00\x05\x00\x03\x00\x03\x00"
+	"\x02\x00\x04\x00\x04\x00\x03\x00\x05\x00\x04\x00\x04\x00\x05\x00"
+	"\x03\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\xfc\xff\xfe\xff"
+	"\xfe\xff\xfc\xff\xfb\xff\xfc\xff\xf8\xff\xf8\xff\xfa\xff\xf8\xff"
+	"\xf8\xff\xf7\xff\xf7\xff\xf5\xff\xf8\xff\xfb\xff\xfc\xff\x00\x00"
+	"\xfd\xff\x00\x00\x05\x00\x03\x00\x02\x00\x05\x00\x08\x00\x04\x00"
+	"\x03\x00\x04\x00\x03\x00\x02\x00\x00\x00\xff\xff\x02\x00\x03\x00"
+	"\x03\x00\x02\x00\x02\x00\x04\x00\x04\x00\x03\x00\x02\x00\x02\x00"
+	"\x04\x00\x03\x00\xfe\xff\xfd\xff\xfd\xff\xfc\xff\xfa\xff\xfc\xff"
+	"\xff\xff\xfe\xff\xfd\xff\xfd\xff\xfd\xff\xfe\xff\xfb\xff\xfd\xff"
+	"\xfd\xff\xfd\xff\x01\x00\x01\x00\x00\x00\xfd\xff\x00\x00\x00\x00"
+	"\xfe\xff\x00\x00\x01\x00\x03\x00\x04\x00\x04\x00\x03\x00\x00\x00"
+	"\x02\x00\x05\x00\x01\x00\x00\x00\x04\x00\x04\x00\x00\x00\xff\xff"
+	"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x01\x00\xff\xff"
+	"\xfe\xff\x01\x00\x01\x00\x01\x00\x02\x00\x05\x00\x04\x00\x05\x00"
+	"\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\xfc\xff\x01\x00\x00\x00"
+	"\xfe\xff\x00\x00\x01\x00\xfe\xff\xfe\xff\xff\xff\xff\xff\x02\x00"
+	"\x02\x00\xff\xff\x00\x00\x04\x00\x02\x00\x02\x00\x02\x00\x03\x00"
+	"\x02\x00\x02\x00\x00\x00\xfc\xff\x00\x00\x02\x00\x02\x00\x00\x00"
+	"\x00\x00\x02\x00\x00\x00\xfe\xff\xff\xff\xfc\xff\xfd\xff\xfb\xff"
+	"\xfa\xff\xfa\xff\xf9\xff\xf9\xff\xfa\xff\xf9\xff\xf9\xff\xfd\xff"
+	"\xff\xff\xfd\xff\xfc\xff\x00\x00\xfe\xff\xff\xff\x02\x00\x03\x00"
+	"\x06\x00\x06\x00\x07\x00\x04\x00\x05\x00\x05\x00\x05\x00\x07\x00"
+	"\x07\x00\x06\x00\x06\x00\x07\x00\x05\x00\x03\x00\x01\x00\x02\x00"
+	"\xfe\xff\xfd\xff\xff\xff\xfe\xff\xff\xff\xfd\xff\xfc\xff\xfc\xff"
+	"\xfb\xff\xfa\xff\xfa\xff\xfa\xff\xf9\xff\xfc\xff\xfa\xff\xfb\xff"
+	"\xfc\xff\xfc\xff\xfc\xff\xfc\xff\xfd\xff\xff\xff\x00\x00\x00\x00"
+	"\x03\x00\x03\x00\x04\x00\x04\x00\x06\x00\x04\x00\x02\x00\x03\x00"
+	"\xff\xff\x00\x00\x02\x00\xff\xff\x02\x00\x00\x00\xfe\xff\x00\x00"
+	"\x00\x00\x01\x00\xff\xff\x00\x00\x02\x00\x02\x00\x02\x00\x01\x00"
+	"\x01\x00\x01\x00\xfe\xff\xfe\xff\xfe\xff\xfe\xff\xff\xff\xff\xff"
+	"\xfe\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
+	"\x02\x00\x04\x00\x03\x00\x04\x00\x06\x00\x02\x00\x00\x00\x02\x00"
+	"\x04\x00\x02\x00\x00\x00\x03\x00\x04\x00\x05\x00\x03\x00\x03\x00"
+	"\x03\x00\x00\x00\x00\x00\x01\x00\xff\xff\xfe\xff\xff\xff\xfe\xff"
+	"\xfd\xff\xfb\xff\xfc\xff\xfa\xff\xfb\xff\xfb\xff\xfd\xff\xfd\xff"
+	"\xfc\xff\xfc\xff\xfb\xff\xfb\xff\xfd\xff\xfe\xff\xff\xff\x00\x00"
+	"\xff\xff\x01\x00\x03\x00\x02\x00\x03\x00\x07\x00\x07\x00\x06\x00"
+	"\x05\x00\x09\x00\x07\x00\x04\x00\x06\x00\x05\x00\x01\x00\x03\x00"
+	"\x01\x00\x02\x00\x02\x00\x00\x00\xfe\xff\xfd\xff\xf9\xff\xf8\xff"
+	"\xf8\xff\xf6\xff\xf9\xff\xf7\xff\xf8\xff\xf7\xff\xfc\xff\xfc\xff"
+	"\xfc\xff\xff\xff\x02\x00\x01\x00\x02\x00\x04\x00\x06\x00\x06\x00"
+	"\x04\x00\x04\x00\x04\x00\x05\x00\x02\x00\x02\x00\x02\x00\x02\x00"
+	"\x00\x00\xff\xff\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\xfd\xff"
+	"\xfc\xff\xfe\xff\xfe\xff\xfc\xff\xfc\xff\xff\xff\xfd\xff\xfc\xff"
+	"\xfe\xff\x02\x00\x01\x00\x05\x00\x03\x00\x07\x00\x03\x00\x05\x00"
+	"\x04\x00\xfb\xff\xf8\xff\xfb\xff\xfe\xff\xee\xff\xee\xff\xfd\xff"
+	"\xf1\xff\x02\x00\xfb\xff\xcd\xff\xed\xff\x17\x00\xa6\xff\xfc\xfe"
+	"\x39\x00\xd7\xff\xa9\xfe\x92\xff\x87\x00\xf3\xff\x55\xff\xe3\x00"
+	"\x44\x01\x66\x00\x81\x00\x4b\x01\x24\x01\x60\x00\x8f\x00\xca\x00"
+	"\x9b\x00\x6d\x00\x47\x00\x86\x00\x99\x00\x6b\x00\xbb\xff\x8a\x00"
+	"\x32\x00\x5a\x00\xe0\xff\x27\x00\x61\x01\x6c\x00\xcc\xff\xb2\xff"
+	"\xe9\xff\x58\xff\xab\xfb\x69\xfb\x7e\xff\x52\xfa\xbf\xf9\x7a\xfd"
+	"\x79\xff\x99\xfd\xc1\xfd\xcf\x02\x75\x02\xd6\x00\xf8\x00\x02\x03"
+	"\x75\x01\x11\x00\x0f\x00\xbb\x00\xe8\x00\xb5\x00\x44\x01\x58\x02"
+	"\x3e\x04\x70\x03\x05\x03\x8c\x04\xe7\x03\x06\x02\xa9\x00\xce\x00"
+	"\x57\xff\x4f\xfd\x29\xfd\x19\xfd\x4f\xfd\x21\xfd\x03\xfe\x17\xff"
+	"\xf4\xff\x59\x00\x77\x00\xfa\x00\xd6\x00\x1b\x00\x62\xff\x0d\xff"
+	"\xd5\xfe\xf5\xfd\xd3\xfd\x74\xfe\x35\xfe\xac\xfe\x51\xff\xe4\xff"
+	"\x2a\x00\x82\x00\x45\x01\x11\x01\xee\x00\x10\x01\xe8\x00\x74\x00"
+	"\x05\x00\xe9\xff\x32\x00\xcb\xff\xda\xff\x99\x00\xee\x00\x13\x01"
+	"\x59\x01\x08\x02\x1a\x02\xa2\x01\xaf\x01\x9c\x01\x9d\x00\x3f\x00"
+	"\xea\xff\x3d\xff\xd4\xfe\xd1\xfe\xe4\xfe\xa0\xfe\x10\xff\x7f\xff"
+	"\x70\xff\x87\xff\xa0\xff\xcc\xfe\x18\xff\xd7\xfd\x8f\xfc\x7b\xfd"
+	"\x76\xfc\xf8\xfb\x7c\xfc\xdd\xfd\x71\xfe\xa2\xfe\x46\x00\x88\x01"
+	"\xca\x01\xb3\x01\x6a\x02\xb3\x02\x32\x02\xf1\x01\x0b\x02\x7d\x02"
+	"\x33\x02\x61\x02\x87\x02\x44\x03\xfd\x02\x6a\x02\xba\x02\x35\x02"
+	"\x8e\x01\x5e\x00\x2a\x00\x7f\xff\x8a\xfe\x5a\xfe\x27\xfe\x63\xfe"
+	"\x70\xfe\xd0\xfe\x5f\xff\xab\xff\xed\xff\xa9\xff\x10\x00\x00\xff"
+	"\x99\xff\xc8\xfe\xad\xfe\x2f\xff\x3e\xff\xde\xfe\xc4\x01\xab\xfe"
+	"\x47\xfc\xa8\x02\x0f\xfe\x5b\xf9\x02\xfb\xd3\x00\xb4\xfa\x1c\xf8"
+	"\xd3\xff\x39\x02\x61\xfe\x6f\xfe\x9b\x05\x61\x04\x34\x01\x63\x02"
+	"\xb2\x04\xba\x02\x66\x01\xb8\x01\xca\x01\x46\x03\x3e\x02\x3c\x01"
+	"\x71\x03\xa2\x04\xb5\x02\xfe\x00\x43\x03\x4c\x02\x22\xff\x2b\xfe"
+	"\xa4\xfe\xb4\xfd\x6f\xfb\xb4\xfb\xca\xfc\x3e\xfd\x2c\xfd\x01\xfe"
+	"\xe4\xff\x16\x00\x58\x00\xd0\xff\x03\x00\x8f\x00\x4e\xfe\x54\xfe"
+	"\x30\xfe\xc0\xfe\x09\xfe\x3d\xfe\x33\x00\x6d\x00\x86\x00\x9e\x01"
+	"\xbb\x02\x26\x02\x4e\x02\x9e\x02\xbd\x02\xc2\x01\x55\x01\x35\x02"
+	"\x7c\x01\xec\x00\x18\x01\xee\x01\x06\x01\x93\x00\x62\x01\x02\x01"
+	"\x2e\x00\xb5\xff\x63\x00\x17\xff\x82\xfe\xd4\xfd\xbb\xfd\xd9\xfc"
+	"\x2c\xfc\xd0\xf9\x87\xfa\xab\xfc\x00\xf9\xf6\xf9\xb8\xfc\xbd\xfe"
+	"\x1e\xfd\xb0\xfe\x8b\x02\x22\x02\x7b\x01\x1c\x02\x86\x03\x52\x02"
+	"\xc1\x01\x23\x02\xa5\x02\x89\x02\xb2\x02\x5c\x03\xcd\x03\x9b\x04"
+	"\x37\x04\xce\x03\x4e\x04\xdd\x02\x13\x02\xb5\x00\x39\x00\xc7\xfd"
+	"\xbf\xfc\x79\xfe\x5f\xfb\xe6\xfb\x07\xfe\x97\xfe\x5e\xfe\x70\xff"
+	"\xbb\x01\xfb\x00\x28\x00\xdd\x00\x94\x00\xa1\xff\xc0\xfe\x9e\xff"
+	"\x46\xff\xc1\xff\x82\xff\xdf\x00\x2b\x00\x4d\x01\x9a\x00\xd3\x00"
+	"\x45\x01\x9b\xff\xcd\xff\x8c\x03\xbe\xff\x7e\xf6\x07\x05\xa4\xff"
+	"\xbe\xf4\xd8\xf6\xdc\x01\x19\xfd\xd5\xf1\xa7\xfe\xc7\x05\x55\x00"
+	"\x9f\xfb\x04\x07\x81\x08\x75\x01\xfe\x00\x65\x04\x7c\x03\xaa\xff"
+	"\xcc\xff\x89\xff\x27\x02\x0a\x03\x90\xff\x62\x02\xa3\x05\xa0\x05"
+	"\xc3\x00\xd0\x01\x38\x05\x63\x00\xad\xfc\x84\xfc\xa0\xfe\x59\xfb"
+	"\xa4\xf8\x60\xfb\x11\xfe\xaf\xfd\x52\xfd\xc9\x00\xc8\x02\x7e\x02"
+	"\x53\x02\xd1\x01\xb4\x02\xc0\x01\x69\xff\xcf\xfe\x72\xfe\xf4\xfd"
+	"\xf3\xfe\x19\xfe\xa3\xfe\x7b\x00\xf8\x01\xee\x01\x3d\x01\x8a\x03"
+	"\x00\x03\x97\x01\x8a\x00\x58\x00\x0c\x00\x63\xfe\xe4\xfd\x99\xfe"
+	"\x98\xff\x50\xff\x6e\xff\x3c\x01\x61\x02\x85\x01\x9b\x00\x62\x02"
+	"\x39\x01\xb6\xff\xde\xfe\x73\xff\xdf\xfd\x1a\xfd\xcc\xfe\x51\xfc"
+	"\xcd\xfd\xbb\xfd\xc5\x00\xcd\xf9\x73\xfb\x3f\x03\xa6\xfb\x36\xf9"
+	"\x9a\xfc\x79\x03\x8a\xfc\x3a\xfa\x93\x03\x11\x04\x90\xff\xb7\xff"
+	"\xe9\x05\xf1\x03\x36\x01\xaa\x02\x8a\x03\x4e\x03\x1f\x02\x5a\x03"
+	"\xd5\x01\x7d\x04\xc3\x04\x19\x02\x03\x02\x75\x04\xde\x01\x2d\xfe"
+	"\x09\x00\x98\xfe\xad\xfd\x59\xfb\x47\xfd\x16\xfe\x7c\xfd\x7d\xfe"
+	"\xe0\xff\x00\x01\xfd\x00\x1c\x01\xa0\x00\xa1\x00\x08\x00\x19\xff"
+	"\x0b\xfe\x28\xfe\xb3\xff\x87\xfe\x9b\xfe\x78\x00\x75\x01\xdd\x00"
+	"\xec\xff\x9a\x01\xf1\xff\x8f\xff\x99\xfe\x23\xfe\xfa\xfd\xac\xfd"
+	"\xed\xfd\xc3\xfd\xd4\xfd\xc7\xff\x56\x00\x9e\xfe\x47\x00\x81\x02"
+	"\x39\x01\x9d\xfc\x4b\x00\xe6\x02\x9a\xfc\xcd\xf9\x24\x01\x7c\x01"
+	"\xb0\xfb\xc5\xfd\x7f\x03\xf8\x03\x3b\xff\xfc\x01\x1b\x05\x26\x03"
+	"\xc1\x00\xbc\x01\x8d\x02\xf1\x01\xb6\x01\x62\x01\x9f\x02\x96\x03"
+	"\x66\x02\x48\x01\x44\x02\x2e\x01\x9b\xff\x51\xfc\xf9\xfc\x9f\xfe"
+	"\x46\xfb\xef\xfa\x16\xfd\x38\x00\x33\xfe\xac\xfd\x05\x01\xa8\x01"
+	"\x6c\xff\xed\xfd\xcb\x00\xe9\xff\xb4\xfe\x3e\xff\x9a\x00\x24\x02"
+	"\x6f\x01\x05\x02\x1d\x03\x3b\x04\x6f\x02\xe0\x00\xd0\x01\x1a\x01"
+	"\x3a\xff\x12\xfe\xf7\xfe\xbd\xff\x94\xfe\xa5\xfe\xa2\xff\xf0\xff"
+	"\x6d\xff\x14\x00\x7b\xff\x8f\xff\xd2\x00\xc6\xfe\xbf\xff\x57\x03"
+	"\x99\x04\xfd\xf6\x96\xf7\xc3\x07\xef\xfc\xc3\xec\xe8\xf5\x10\x07"
+	"\x3a\xfd\xac\xf1\xf3\x00\xea\x0d\x17\x05\xfd\xfb\xd9\x04\xbe\x0a"
+	"\x1e\x02\xba\xfc\xd3\xfe\xc7\x01\xa0\x00\xdf\xfe\x23\xff\x8a\x03"
+	"\x23\x0a\xcd\x06\x16\x02\xc0\x06\xdf\x0b\x0e\x04\x18\xfb\x3b\xff"
+	"\x6b\x03\x92\xfa\x39\xf4\x57\xfa\x25\x00\x91\xfb\xa8\xfa\x3e\xff"
+	"\x0c\x03\x34\x04\x1a\xff\xdd\xfe\xec\x00\x3a\x01\x0f\xfb\x6e\xf9"
+	"\x03\xfe\x3e\xff\xf5\xfc\x25\xfc\x5b\x02\xaa\x04\xf5\x01\x96\x00"
+	"\xbe\x02\x29\x05\x7f\x01\x16\xff\x67\x01\x03\x03\x69\x01\x4f\xfe"
+	"\x84\xff\x56\x02\x84\x00\x08\xfd\x8e\xfd\x16\x01\x83\xff\x96\xfc"
+	"\x22\xfe\xf5\x01\xb7\x01\x04\xfe\xb9\xff\x9f\x03\x48\x02\x53\xfa"
+	"\x4f\xfd\x61\xfa\x1b\xf9\x7f\xfb\x05\xf7\xc0\xf9\xd3\xfc\xaf\x03"
+	"\x6e\x01\xa0\x01\x0e\x08\x1e\x08\x67\x04\x8c\xff\x0a\x02\x42\x02"
+	"\x25\xfd\x5e\xfc\x14\xff\xe6\x02\xdf\x01\x98\x03\x62\x08\xdc\x08"
+	"\x03\x08\xca\x05\xb2\x05\x76\x03\xf0\xff\xec\xfc\x1b\xfc\x0b\xfd"
+	"\x2f\xfb\x24\xfb\xc4\xfd\x0f\x00\x25\x00\x09\x00\x2e\x01\x14\x02"
+	"\x61\x00\xbf\xfd\x01\xfe\xf4\xfc\x89\xfb\x69\xfb\xef\xfb\x07\xfd"
+	"\xaf\xfc\xd4\xfd\xd6\xfe\x07\xff\x61\xfe\x9f\xfe\x70\xff\x55\xfe"
+	"\x9d\xfe\x87\xff\x18\x00\x12\x01\x09\x01\x0d\x01\xf7\x01\x15\x02"
+	"\xd6\x01\xf4\x00\xcc\x01\xad\x02\xa4\x02\xd1\x02\xee\x02\xa0\x04"
+	"\xe8\x05\x02\x04\x87\x04\x93\x05\xe1\x03\x16\x01\x27\xfd\x5f\xfc"
+	"\xbd\xfb\xa2\xf7\x6d\xf6\x88\xf5\x80\xf8\x48\xfd\x1e\xfc\xa2\xfe"
+	"\x88\x01\x65\x05\x43\x03\x80\xff\x68\x00\xc5\xff\xde\xfe\xdb\xfa"
+	"\xbf\xfb\xc5\xff\x40\x01\xbc\x02\x4d\x05\x45\x08\x46\x09\xa2\x08"
+	"\x72\x07\xec\x04\xa5\x02\x0d\x00\xc2\xfd\x0e\xfb\xf0\xf9\xd2\xfb"
+	"\x89\xf5\x48\xfc\xe2\x03\xbf\xfd\xa3\xfe\xe9\x02\xb4\x09\xc8\x03"
+	"\x7b\xfe\xe8\x01\xbb\x01\xee\xff\x11\xfa\x8a\xfb\x0b\x00\xa4\x00"
+	"\xef\xff\x97\xff\x03\x03\x0a\x05\x83\x03\x2d\x00\xea\xfe\x26\x01"
+	"\xc9\xfe\xbe\xf9\x25\xfa\xe1\xfd\x63\xfd\x40\xfa\xaa\xfd\xd0\xff"
+	"\xff\x04\x08\x00\xa2\xf7\x6e\xfe\xd5\xff\x8b\xf9\x26\xf5\x83\xf9"
+	"\x1e\x00\xd8\xff\x8d\xff\xf5\x04\xb2\x09\x55\x09\x94\x05\x19\x05"
+	"\xb4\x03\x28\x01\x19\x00\xd1\xff\x7a\xfe\x0e\x00\x32\x04\xd0\x05"
+	"\xd9\x05\x5b\x07\x3b\x09\x0d\x06\x5f\x02\x06\x00\xd5\xfc\x7e\xfa"
+	"\xbd\xf9\x97\xf8\x09\xf8\x3d\xfa\xc2\xfd\xd2\xfd\xb1\xfe\x15\x01"
+	"\x6e\x02\x53\x01\x81\xff\xd2\xfc\x81\xfb\xd4\xfc\xd0\xfa\xb8\xf8"
+	"\x8d\xfb\xa6\x01\x0c\x03\x22\x02\x84\x04\x96\x07\x3e\x08\x2e\x04"
+	"\xd7\x00\x7a\x01\xac\x01\x9a\xff\x95\xff\xf8\x00\xe2\x02\x46\x04"
+	"\xb4\x03\x27\x02\x3b\x02\x56\x02\xab\xfe\x02\xfd\x18\xfd\x61\xfd"
+	"\x47\xfd\x35\xfe\x25\x02\x91\x02\xcb\xf5\x92\xf2\xc1\xfb\x6c\xff"
+	"\xc9\xf3\x1a\xeb\x96\xf9\x5d\x06\x45\x06\x47\xfe\x59\x02\xaa\x0c"
+	"\x21\x0b\x5d\x00\x4f\xfa\x3d\xff\x9b\x02\xb3\xff\xbf\xfc\x9e\xfc"
+	"\xea\x03\x27\x0c\x4c\x0c\xe9\x07\xbc\x06\x31\x0a\x12\x09\xb5\x01"
+	"\x1c\xfa\xb6\xf9\x30\xfd\x5d\xfc\x6d\xf8\xaf\xf8\x02\xfe\xc2\x03"
+	"\xc4\x03\x25\x01\x14\x01\xf2\x03\x60\x03\x1f\xfd\xb0\xf7\x59\xf9"
+	"\x14\xfb\xc3\xf9\xff\xf7\x56\xfa\xc9\x00\x46\x03\x2e\x03\xa0\x02"
+	"\x4d\x04\xd4\x05\x3f\x03\x1b\xff\xd6\xfd\x0f\x00\xa1\x01\x68\xff"
+	"\x9c\xff\xb7\x01\xc2\x04\x74\x03\x7c\x02\x59\x01\xfa\x01\x57\x02"
+	"\x3b\x02\x1c\xff\x08\x02\x1f\xff\xb4\x04\xeb\xfe\xe8\xe8\x6a\xf6"
+	"\xc6\xfe\x1b\x00\x65\xeb\x41\xef\x82\x07\x70\x0d\x3b\x07\xa7\xfa"
+	"\x65\x04\x59\x0b\x98\x04\x84\xf8\x23\xf5\x68\xfd\x62\x02\x6b\x00"
+	"\x97\xfc\xea\xfc\x53\x09\xe8\x10\x0d\x0c\xef\x01\x3f\x03\x07\x08"
+	"\x2f\x05\xc2\xfc\xe1\xf6\x87\xf9\xfe\xfe\x77\x00\xb8\xfc\xe5\xfb"
+	"\xb3\x01\xf1\x07\x4d\x08\x10\x02\xa1\xfe\xc4\x01\x06\x04\x05\xfd"
+	"\x13\xf5\x0e\xf8\x07\xfc\xf9\xfd\xa0\xfa\xd1\xfb\xd6\x00\xae\x04"
+	"\x1c\x05\x08\x01\x1b\x01\x20\x03\x3b\x01\xc6\xfe\x5c\xfc\x88\xfe"
+	"\xb4\x00\x95\x00\xf1\xff\xba\x01\x13\x03\xae\x03\x9c\x02\xd0\x02"
+	"\xaa\x00\x33\x02\x07\x03\x50\x00\x9b\xff\x10\x01\x53\xfe\xc5\xe6"
+	"\x50\xf5\x0b\x01\xe6\xfd\xc6\xee\x58\xef\x43\x0a\xcb\x0e\x34\x09"
+	"\x74\xfb\x45\x03\x6c\x08\xdd\x02\x98\xfa\x63\xf7\x75\xfb\x4b\x01"
+	"\x3c\x05\x7f\x01\xfc\xfd\xf8\x06\x0a\x12\xf9\x0f\x74\x03\x59\xfe"
+	"\x22\x03\xee\x04\x6b\xfe\x29\xf5\x7d\xf5\xff\xfb\x90\x01\xe2\xfe"
+	"\x30\xfc\x3b\xfe\x91\x04\xaf\x08\x96\x04\x4e\xfd\x23\xfd\x33\x02"
+	"\xca\x00\x95\xf8\x25\xf7\x96\xfa\xae\xfe\x28\xff\x37\xfd\x32\x00"
+	"\x54\x02\xc1\x06\xab\x04\x60\x03\xad\x01\xbe\x00\xea\x01\x8a\x00"
+	"\x7f\xfd\x41\xfd\xf4\xff\x52\x02\x96\x01\xd5\xff\x10\x02\x15\x04"
+	"\xdf\x04\xf9\x00\x1e\x02\x59\x02\xc1\x03\x0d\xfe\xf3\xfe\xf5\xe8"
+	"\xfb\xeb\x44\xfe\xd6\xfd\x8b\xf3\x2d\xe9\x44\x04\x99\x0e\x24\x0f"
+	"\xbb\xff\xf4\xff\x74\x06\x46\x03\xcc\xfc\x42\xf7\x22\xfa\x0c\xfd"
+	"\x92\x04\x38\x07\x1a\x03\x0c\x04\xfb\x0d\xec\x13\x30\x0c\x85\x00"
+	"\x92\xfe\x16\x01\xbb\x02\xa7\xfa\xc3\xf5\x0d\xf7\xbf\xfe\x23\x02"
+	"\x4e\x00\xe4\xfd\x21\xff\xb0\x04\x52\x07\x77\x02\xc1\xfb\xb8\xfb"
+	"\x62\xff\x97\xfd\xdf\xf9\x89\xf7\xbe\xf9\xb8\xfe\xe8\xff\x01\x01"
+	"\x19\xff\x15\x02\x75\x04\xe5\x05\x97\x03\xd6\xfe\x3e\xfe\xcf\x01"
+	"\x18\x02\xd0\xfe\x38\xfc\xa8\xff\x1e\x04\x88\x04\x5d\x00\xce\x00"
+	"\xa5\x04\x8a\x06\xb8\x04\x61\x02\xde\x01\xc8\x03\x09\xfe\x92\xe8"
+	"\xf9\xed\x20\xfa\x5a\xff\x5b\xef\x13\xee\xb0\x00\x56\x0e\x36\x0f"
+	"\xfe\x01\x3c\x01\x01\x02\xf8\x02\xf5\xfb\x68\xf8\xb2\xf6\x00\xfb"
+	"\x1e\x03\x17\x07\x2d\x04\x2d\x05\x2e\x0d\x98\x12\x4d\x0d\x55\x03"
+	"\xa6\xfd\x7a\xff\xe1\x00\xbb\xfb\x9d\xf6\xff\xf6\x79\xfd\xa6\x01"
+	"\xe9\x01\x59\x00\x6b\x01\xe6\x03\x87\x06\x8d\x04\x73\xff\xa0\xfc"
+	"\x36\xfc\xef\xfb\xc8\xfc\xf5\xf8\x04\xf8\xdf\xfb\x2e\x02\x37\x03"
+	"\x02\x01\xbe\x01\x89\x03\xb4\x05\x71\x04\xfa\xfe\xfc\xfb\xdb\xfd"
+	"\x94\x01\x49\x00\xe0\xfc\x64\xfd\xbf\x01\xe1\x04\x5e\x02\x41\x01"
+	"\xe0\x00\x70\x06\xce\x04\xe2\x02\x68\xfe\x67\xff\xa6\xf4\xf7\xef"
+	"\xb6\xf5\x88\xf9\xf4\xf8\x90\xf2\xd4\xfc\xad\x04\x0d\x0d\x4a\x08"
+	"\xcc\x04\x50\x02\x21\x02\xd2\xff\xde\xfb\xa1\xf9\x7a\xf9\xba\xfd"
+	"\xbb\x02\x24\x06\x64\x05\x5a\x08\x27\x0c\x75\x0d\x08\x09\x13\x02"
+	"\x92\xfd\xfd\xfe\x27\xfe\x45\xfa\x1e\xf7\x66\xf9\x3d\xfd\x37\x00"
+	"\xb6\x01\xce\x01\x9a\x02\x0f\x04\xe5\x05\xba\x04\x2a\x00\x55\xfc"
+	"\x7f\xf9\x92\xfb\x31\xfb\x5c\xf9\x62\xf9\x11\xfd\x18\x03\xd3\x04"
+	"\x2c\x05\xcf\x03\x7b\x04\x4b\x04\x62\x02\x16\xff\xdf\xfc\xbf\xfd"
+	"\x48\xff\x44\x00\xe4\xfe\xf0\xfe\x3d\x00\x1a\x03\x26\x04\x7e\x03"
+	"\xae\x00\x51\x00\xa7\x02\x35\x01\x8f\xfc\x93\xf1\x15\xf2\x10\xf7"
+	"\xf0\xf9\x6f\xf7\xa0\xf5\x1b\xfd\x71\x04\xf9\x09\xb6\x08\x07\x06"
+	"\x20\x03\x20\x02\x57\x01\x6e\xff\x7f\xfc\x64\xfa\x3f\xfd\xf2\x01"
+	"\x7c\x05\x8e\x06\x3d\x07\x7f\x09\x9b\x0a\xe3\x08\x09\x04\x98\xff"
+	"\xe4\xfd\x56\xfd\x59\xfb\x3d\xf9\x5a\xf9\x27\xfa\xab\xfc\xb0\xff"
+	"\x58\x02\x01\x03\x2d\x03\x89\x04\xb8\x05\xc0\x03\x3a\xfe\x65\xfb"
+	"\x42\xfa\xa1\xfb\x73\xfb\x0f\xfa\x46\xfb\xe8\x00\x67\x06\x35\x06"
+	"\x79\x04\xab\x03\x8a\x04\x58\x03\x8b\x00\xe6\xfd\x25\xfd\x20\xfe"
+	"\xd5\xff\x77\xff\x44\xfe\x6a\xfd\x23\x01\x55\x03\x21\x02\x29\xfe"
+	"\x2d\x00\xc5\x00\x70\x01\xf6\xf8\x57\xf1\x17\xf8\x04\xfa\x28\xfb"
+	"\x1b\xf4\x9f\xf8\x35\xff\x40\x06\xd8\x07\x84\x05\x8b\x04\x34\x04"
+	"\xb2\x04\xbd\x03\x80\x01\xe8\xfd\xdc\xfd\xb5\xff\x3e\x03\xb4\x02"
+	"\x3a\x04\x0d\x05\x0e\x07\x7d\x06\xbe\x05\x68\x03\x10\x01\xe7\xfe"
+	"\x55\xfe\x9e\xfd\x13\xfc\x9c\xfa\x44\xfa\xff\xfb\xc8\xfd\x4a\xff"
+	"\x34\x00\xd7\x01\x74\x03\x9b\x03\xe8\x01\xcd\x00\xd2\x00\x6d\x00"
+	"\x5f\xfe\xa2\xfd\x56\xfd\xf6\xfe\x8c\xff\x2d\x00\x37\x00\xf0\xff"
+	"\x48\x00\xb8\x00\x63\x00\x4b\x00\x68\x00\xe9\xff\x57\x00\x30\x00"
+	"\x92\xff\xc8\xfe\xfe\xfd\x1a\xfe\x15\xff\xbf\xff\x37\x00\xe9\x00"
+	"\xff\x01\x78\x02\xab\x02\xe8\x00\x69\xff\xf4\xfd\xe6\xfd\x64\xfc"
+	"\x84\xfa\x95\xfa\xc3\xfa\x23\xfc\xfb\xfc\x60\xfe\x9c\xfd\x44\xfd"
+	"\xea\xfe\xaf\x01\x0c\x02\xa0\x00\xfb\x00\x09\x03\x5e\x03\x5d\x02"
+	"\xc3\x02\x4b\x03\x57\x03\x40\x03\x01\x04\x51\x04\x38\x03\xa1\x02"
+	"\x93\x03\xc6\x03\x0e\x02\x81\x00\x95\x00\xe4\x00\x4b\x00\x1d\xff"
+	"\x7f\xff\x5b\x00\xf6\xff\x67\xfe\x03\xfe\x50\xfe\xf0\xfd\x3b\xfd"
+	"\x91\xfd\xc0\xfd\x20\xfd\x69\xfd\x2f\xff\x89\x00\xdb\xff\x1c\xff"
+	"\xb0\xff\xc1\x00\x0e\x01\xcb\x00\x96\x00\xa4\x00\x07\x01\x5d\x01"
+	"\x6a\x00\x59\xff\x38\xff\xd6\xff\xfb\xff\xd6\xff\xf7\xff\x47\x00"
+	"\x2b\x01\xc4\x00\x29\xff\x80\xfe\x97\xfd\xab\xfb\x85\xfa\xa1\xfb"
+	"\xb0\xfb\x28\xfa\x9b\xfa\x89\xfd\x48\xff\x7c\xfe\xc9\xfe\x10\x01"
+	"\x8e\x02\x88\x02\x19\x03\xce\x03\xd0\x03\xe0\x03\xc2\x04\x05\x05"
+	"\xc1\x03\xff\x02\x2e\x04\xbc\x04\x8e\x03\x3a\x02\xc4\x01\xdf\x01"
+	"\x58\x02\xc1\x01\xd3\xff\x97\xfe\xdc\xfe\xa3\xff\xf6\xfe\x99\xfd"
+	"\x19\xfd\x04\xfe\x89\xfe\x62\xfe\x92\xfd\x33\xfd\x98\xfd\xb2\xfe"
+	"\x86\xff\x1f\xff\xe5\xfe\xa1\xff\x25\x01\x74\x01\xb1\x00\xd9\xff"
+	"\x4f\x00\xf7\x00\x3b\x01\xbb\x00\x88\x00\x82\x00\x7c\x00\x44\x00"
+	"\x8f\xff\x24\xff\x18\xff\x1a\xff\x5b\xff\xb6\xff\x8b\xff\xf6\xfe"
+	"\x75\xfe\xea\xfe\xdd\xfd\x28\xfc\xdc\xfa\xc9\xfb\x38\xfc\xc2\xfb"
+	"\xd9\xfb\x0a\xfd\x76\xfe\x13\xff\x77\x00\xbb\x01\x11\x02\x65\x02"
+	"\xbc\x03\x7e\x04\x94\x04\x1b\x04\x4d\x04\x72\x04\x3f\x04\xbd\x03"
+	"\x80\x03\x54\x03\xc6\x02\x72\x02\x19\x02\x72\x01\xb7\x00\x62\x00"
+	"\x3d\x00\x49\xff\x3e\xfe\xc2\xfd\xcf\xfd\xdc\xfd\x97\xfd\xab\xfd"
+	"\xf1\xfd\x7e\xfe\x0c\xff\x2c\xff\x7e\xfe\x2f\xfe\x12\xff\xa0\xff"
+	"\xf3\xfe\x9b\xfe\x39\xff\x44\x00\x92\x00\x72\x00\x9e\x00\xd1\x00"
+	"\x07\x01\x8c\x01\xd0\x01\xa1\x01\x55\x01\x5d\x01\x45\x01\xae\x00"
+	"\x15\x00\xf6\xff\xbf\xff\x5a\xff\x59\xff\xb5\xff\xdd\xff\xae\xff"
+	"\x20\x00\xd4\xff\x90\xfe\xd1\xfd\xa0\xfd\xaf\xfc\x4f\xfb\xf0\xfa"
+	"\x28\xfb\xfc\xfa\x2b\xfb\x30\xfc\xf8\xfc\x37\xfd\x2e\xfe\xfc\xff"
+	"\x2b\x01\xb7\x01\x93\x02\x87\x03\x27\x04\x9a\x04\x08\x05\x47\x05"
+	"\x2b\x05\x1a\x05\xd2\x04\x6d\x04\xec\x03\x99\x03\x26\x03\x52\x02"
+	"\xe1\x01\x82\x01\xfc\x00\x16\x00\xa6\xff\x72\xff\x35\xff\x89\xfe"
+	"\x29\xfe\xf8\xfd\xf3\xfd\xd8\xfd\x8a\xfd\x98\xfd\x70\xfd\x87\xfd"
+	"\xbe\xfd\x7d\xfe\xeb\xfe\x2c\xff\x66\xff\xc5\xff\x09\x00\x2d\x00"
+	"\x42\x00\x73\x00\xb2\x00\xd0\x00\x89\x00\x41\x00\x54\x00\x3a\x00"
+	"\xc8\xff\x9c\xff\x78\xff\x75\xff\x9b\xff\xdd\xff\x68\x00\x1a\x00"
+	"\xaf\xff\x90\xfe\xb2\xfe\x6d\xfe\x0c\xfd\xc9\xfb\xf0\xfb\x98\xfc"
+	"\x1e\xfc\x34\xfc\xe8\xfc\xc9\xfd\x54\xfe\x67\xff\x84\x00\x66\x01"
+	"\x48\x02\x79\x03\xf5\x03\x28\x04\x80\x04\xfb\x04\xf4\x04\x9e\x04"
+	"\x55\x04\xf7\x03\x9d\x03\x65\x03\xfc\x02\x2f\x02\xa4\x01\x4a\x01"
+	"\xc8\x00\xf7\xff\x2f\xff\x99\xfe\x15\xfe\x9d\xfd\x3d\xfd\xe3\xfc"
+	"\xb2\xfc\x82\xfc\xdf\xfc\x5b\xfd\xd3\xfd\xef\xfd\x31\xfe\x02\xff"
+	"\x0f\x00\xb2\x00\x1c\x01\x5d\x01\x96\x01\xc7\x01\x25\x02\x3f\x02"
+	"\xbd\x01\x7e\x01\x78\x01\x81\x01\x0b\x01\x9b\x00\xf9\xff\x99\xff"
+	"\x4f\xff\x1a\xff\x5a\xfe\x0a\xfe\x71\xfe\xa1\xfe\xb4\xfe\x90\xfe"
+	"\x72\xfe\x7a\xfd\x80\xfd\xcf\xfd\x00\xfd\xcd\xfb\xdc\xfb\xbd\xfc"
+	"\x6b\xfc\x33\xfc\x0a\xfd\x11\xfe\x7a\xfe\x52\xff\xb6\x00\x9e\x01"
+	"\x6b\x02\x97\x03\x77\x04\xa6\x04\x11\x05\xa7\x05\x8d\x05\x48\x05"
+	"\x44\x05\x52\x05\xad\x04\x19\x04\xac\x03\xcf\x02\xdf\x01\x5b\x01"
+	"\xc1\x00\x6f\xff\x83\xfe\x34\xfe\x97\xfd\xec\xfc\x82\xfc\x30\xfc"
+	"\xfe\xfb\xf7\xfb\x52\xfc\x75\xfc\xe1\xfc\x70\xfd\x27\xfe\xda\xfe"
+	"\xa1\xff\x5a\x00\xc6\x00\x39\x01\x89\x01\xaf\x01\xca\x01\xfb\x01"
+	"\xf7\x01\x9c\x01\x51\x01\x4f\x01\x1c\x01\xad\x00\x19\x00\xae\xff"
+	"\x7a\xff\x66\xff\x08\xff\xc8\xfe\xa5\xfe\x36\xff\x1a\xff\x2e\xff"
+	"\x60\xff\x6c\xff\x30\xff\x83\xfe\xf3\xfe\x7e\xfe\x91\xfd\xcb\xfc"
+	"\x0c\xfd\xcd\xfc\x61\xfc\xb6\xfc\x2e\xfd\x62\xfd\xeb\xfd\x3f\xff"
+	"\x01\x00\x67\x00\x7f\x01\x08\x03\x80\x03\x94\x03\x38\x04\xfb\x04"
+	"\x0e\x05\xf8\x04\xfa\x04\xbf\x04\x6b\x04\x56\x04\xd3\x03\x0f\x03"
+	"\x80\x02\xfb\x01\x25\x01\x34\x00\x6c\xff\xb7\xfe\x19\xfe\x86\xfd"
+	"\xf1\xfc\x63\xfc\x3a\xfc\x45\xfc\x4b\xfc\x6b\xfc\xef\xfc\x7b\xfd"
+	"\xe8\xfd\x76\xfe\x0e\xff\xaa\xff\x31\x00\x90\x00\xb1\x00\xe7\x00"
+	"\x3c\x01\x5a\x01\x2d\x01\xfb\x00\x0e\x01\xff\x00\xb6\x00\x4d\x00"
+	"\xff\xff\xd3\xff\xab\xff\x92\xff\x7a\xff\x52\xff\x60\xff\x7b\xff"
+	"\xbb\xff\xca\xff\xe3\xff\x27\x00\x6f\x00\xb5\x00\xaa\x00\xd3\x00"
+	"\x79\x00\xf8\xff\x45\xff\x96\xfe\xfc\xfd\x48\xfd\xae\xfc\x39\xfc"
+	"\x52\xfc\x78\xfc\xc4\xfc\x32\xfd\xeb\xfd\xa6\xfe\x75\xff\x73\x00"
+	"\x7c\x01\x46\x02\xd8\x02\x7f\x03\x33\x04\xc0\x04\x03\x05\x23\x05"
+	"\x23\x05\x21\x05\x0a\x05\xc8\x04\x2f\x04\x6a\x03\xa2\x02\x05\x02"
+	"\x40\x01\x3e\x00\x22\xff\x54\xfe\xaa\xfd\xf3\xfc\x52\xfc\xd5\xfb"
+	"\x7e\xfb\x6e\xfb\xb3\xfb\xf2\xfb\x33\xfc\xad\xfc\x68\xfd\xf6\xfd"
+	"\x7e\xfe\x29\xff\xcf\xff\x50\x00\xb6\x00\x14\x01\x6b\x01\x97\x01"
+	"\xad\x01\xab\x01\xaf\x01\x92\x01\x62\x01\x29\x01\xe4\x00\x97\x00"
+	"\x4b\x00\x2a\x00\xea\xff\xd6\xff\xc7\xff\xd0\xff\xe8\xff\xff\xff"
+	"\x0c\x00\x00\x00\x1d\x00\x20\x00\x14\x00\xf2\xff\xc5\xff\x8e\xff"
+	"\x47\xff\x12\xff\xb7\xfe\x63\xfe\x11\xfe\xbc\xfd\x69\xfd\x39\xfd"
+	"\x4c\xfd\x5a\xfd\x78\xfd\xd8\xfd\x80\xfe\x1b\xff\xb2\xff\x7d\x00"
+	"\x6d\x01\x3f\x02\xe7\x02\x8c\x03\x26\x04\x85\x04\xd6\x04\x04\x05"
+	"\xf8\x04\xc3\x04\x78\x04\x23\x04\x90\x03\xec\x02\x4f\x02\x95\x01"
+	"\xb6\x00\xe5\xff\x1c\xff\x25\xfe\x33\xfd\x77\xfc\xe6\xfb\x68\xfb"
+	"\x0d\xfb\x01\xfb\x1e\xfb\x61\xfb\xd4\xfb\x6e\xfc\xfe\xfc\xad\xfd"
+	"\x85\xfe\x55\xff\x09\x00\xab\x00\x30\x01\x90\x01\xe8\x01\x19\x02"
+	"\x20\x02\x0c\x02\x0a\x02\xff\x01\xe8\x01\xd2\x01\x9c\x01\x5f\x01"
+	"\x26\x01\xe6\x00\x86\x00\x1c\x00\xdc\xff\xb1\xff\x78\xff\x4b\xff"
+	"\x37\xff\x44\xff\x5d\xff\x7a\xff\x96\xff\xac\xff\xca\xff\xe1\xff"
+	"\xe7\xff\xdb\xff\xcf\xff\xb0\xff\x8a\xff\x67\xff\x34\xff\x00\xff"
+	"\xd5\xfe\xb9\xfe\xa0\xfe\x7e\xfe\x7f\xfe\xaa\xfe\xe6\xfe\x31\xff"
+	"\x90\xff\xfe\xff\x68\x00\xd4\x00\x4e\x01\xbe\x01\x01\x02\x41\x02"
+	"\x68\x02\x87\x02\x86\x02\x7f\x02\x61\x02\x1b\x02\xe7\x01\xbd\x01"
+	"\x85\x01\x26\x01\xcf\x00\x74\x00\x0f\x00\xb6\xff\x5e\xff\xf1\xfe"
+	"\x99\xfe\x5a\xfe\x27\xfe\xf8\xfd\xd2\xfd\xc4\xfd\xc8\xfd\xe7\xfd"
+	"\x22\xfe\x5c\xfe\x93\xfe\xdd\xfe\x43\xff\x94\xff\xcd\xff\x07\x00"
+	"\x47\x00\x7c\x00\x8b\x00\xa5\x00\xbe\x00\xd3\x00\xdc\x00\xdc\x00"
+	"\xd7\x00\xc6\x00\xba\x00\xa8\x00\x85\x00\x4c\x00\x1c\x00\xf8\xff"
+	"\xd5\xff\xb8\xff\x9c\xff\x8a\xff\x8c\xff\xa9\xff\xc9\xff\xe5\xff"
+	"\x0b\x00\x2a\x00\x50\x00\x78\x00\x95\x00\x98\x00\x9c\x00\x9e\x00"
+	"\x8f\x00\x82\x00\x74\x00\x52\x00\x13\x00\xf8\xff\xdd\xff\xa8\xff"
+	"\x55\xff\xff\xfe\xc4\xfe\x8b\xfe\x61\xfe\x31\xfe\x10\xfe\x0f\xfe"
+	"\x40\xfe\x7e\xfe\xb8\xfe\xfe\xfe\x62\xff\xe5\xff\x62\x00\xc6\x00"
+	"\x22\x01\x93\x01\xfa\x01\x44\x02\x64\x02\x84\x02\xa3\x02\xaa\x02"
+	"\x97\x02\x77\x02\x49\x02\x0f\x02\xd3\x01\x90\x01\x26\x01\xa8\x00"
+	"\x3d\x00\xd2\xff\x5a\xff\xd1\xfe\x5c\xfe\xf9\xfd\xb7\xfd\x92\xfd"
+	"\x6c\xfd\x59\xfd\x6e\xfd\xa2\xfd\xd5\xfd\x05\xfe\x4d\xfe\xa0\xfe"
+	"\xf0\xfe\x3a\xff\x84\xff\xd6\xff\x1c\x00\x63\x00\xa8\x00\xdc\x00"
+	"\x01\x01\x20\x01\x40\x01\x56\x01\x4d\x01\x3b\x01\x2d\x01\x1c\x01"
+	"\xff\x00\xe4\x00\xcb\x00\xa2\x00\x86\x00\x6d\x00\x65\x00\x5b\x00"
+	"\x47\x00\x2b\x00\x00\x00\xd3\xff\xb8\xff\xc2\xff\xb6\xff\x69\xff"
+	"\xfc\xfe\x40\xff\x1c\x00\x8a\x00\x23\x00\xbc\xff\xbe\xff\xec\xff"
+	"\xfa\xff\x81\xff\xe6\xfe\x68\xfe\x23\xfe\x38\xfe\x9c\xfe\xe5\xfe"
+	"\xd0\xfe\x7c\xfe\x79\xfe\x17\xff\xcd\xff\x12\x00\xfe\xff\xed\xff"
+	"\x33\x00\xb2\x00\x3b\x01\x76\x01\x89\x01\xb6\x01\x97\x01\xfe\x01"
+	"\xb2\x02\xe2\x02\xa6\x02\x81\x02\xb0\x02\x80\x02\xf5\x01\x07\x01"
+	"\xa3\x00\xf0\x00\x34\x00\x14\xff\x63\xfe\x8e\xfe\x85\xfe\x0a\xfe"
+	"\x26\xfd\xab\xfc\xda\xfc\xde\xfc\x4c\xfd\xc1\xfd\x59\xfe\x69\xfe"
+	"\xb1\xfe\xe2\xfe\x1c\xff\xf2\xff\xae\x00\x90\x00\x96\x00\x9c\x00"
+	"\x41\x01\x3a\x02\xae\x02\x87\x02\x69\x02\xd9\x01\x3d\x01\x5b\x02"
+	"\x48\x02\x08\x01\x7b\x00\x88\x00\xbf\xff\xe9\xff\x9f\xff\xca\xfe"
+	"\xca\xfe\xfb\xfe\xa9\xfe\x80\xfe\x16\xfe\x7c\xfe\xc3\xfe\xd1\xfe"
+	"\xc5\xfe\x8f\xfe\x4c\xff\xc2\xfe\x47\xff\x1f\x00\xe9\xff\x1c\x00"
+	"\xaf\x00\x4c\x00\x84\x00\xed\x00\xdf\x00\xbc\x00\xba\x00\x89\x00"
+	"\x7a\x00\xca\x00\x1b\x01\x6e\x00\x69\x00\x20\x00\xe0\xff\xbf\x00"
+	"\x75\x00\x9a\xff\x54\xff\xbe\xff\xdf\xff\x8f\x00\x22\xff\xa2\xfe"
+	"\x09\x00\x40\x00\x5d\xff\x48\xff\xd9\xff\x38\x00\xb4\xff\xdb\xff"
+	"\xba\x00\x8c\x00\xea\xff\x63\xff\x23\x01\x38\x01\x4a\x01\x8e\x00"
+	"\x63\x00\x5c\x00\x4c\x01\x8f\x01\x1c\x00\x98\xfe\xf3\xfe\x13\x01"
+	"\xea\xff\x84\xfe\xc8\xfd\x3f\x00\x19\x00\xe9\xfe\x4d\xff\xcd\xfe"
+	"\x99\xff\x57\x00\x92\xff\xf2\xff\x4a\xff\x83\x00\x0f\x00\xe3\x00"
+	"\x94\x00\xdc\xff\x07\x01\xd8\x00\x28\x01\xfa\xff\xdd\x00\x7c\x00"
+	"\x57\x01\x72\x00\x85\xff\xde\xff\xfe\x00\x48\x00\xf4\xfe\x81\xfe"
+	"\x16\x00\xc1\xff\x76\xff\x13\xfe\x7d\xfe\x66\x00\x02\xff\x57\xfe"
+	"\x41\xfe\xcf\x00\x81\xff\xf8\xfe\xa1\xff\xe8\xff\x90\x00\x47\x00"
+	"\xf5\xff\x48\x00\x0e\x01\x09\x01\xad\xff\x8f\x00\x25\x01\xaf\x01"
+	"\xa0\x00\xe0\xff\x9d\x00\x49\x00\xd0\x01\x9f\x00\x16\xff\x5e\x00"
+	"\x51\x00\xf0\xff\xe1\xfe\x66\xff\x9e\xff\x1d\xff\x06\xff\xef\xfd"
+	"\x75\xff\xeb\xff\xdb\xff\xcd\xfe\x5f\xff\xfc\xff\x28\x00\xcc\x00"
+	"\x42\x00\x27\x00\xfb\x00\x43\x01\xb5\x00\x25\x01\x0c\x01\x82\x01"
+	"\x1d\x01\x76\x00\x8c\x00\x8a\x00\xe5\x00\x8f\xff\xfe\xff\x2a\x00"
+	"\x3d\xff\xbe\xfe\x16\xff\x4b\xff\xaa\xff\x2b\xff\x31\xfe\x50\xff"
+	"\x80\xff\x42\x00\xc4\xff\x66\x00\xa6\xff\x92\xff\xc8\x00\x93\x00"
+	"\x7b\x01\xb3\x00\x6d\xff\xbc\x00\x54\x01\xc8\x00\x80\x00\x4f\xff"
+	"\xc8\xff\x3c\x00\x96\xff\x85\x00\x62\xfe\xc6\xfe\x6b\xff\x6d\xff"
+	"\xfb\xff\x3b\xfe\xe9\xfe\x67\xfe\xcc\xff\xa0\xff\xad\xff\x12\x00"
+	"\x13\xff\xad\xff\x9a\x01\x5e\x00\x6e\x00\x0b\x01\xba\x00\x5d\x00"
+	"\xbd\x00\x70\x01\x45\x01\x5b\x01\xe8\xfe\x7f\x01\x5a\x00\x2b\x00"
+	"\x5c\x00\x57\xff\x22\x00\xcf\xfe\xf0\xfe\x7a\xff\xc7\xff\x8d\xfe"
+	"\x7d\xfe\x91\xfe\x6a\xff\xc1\xff\xc1\xfe\x13\xff\x15\xff\xa8\x00"
+	"\x7d\x00\x9f\xff\x60\x00\x86\x00\x28\x02\xd6\x00\x19\x01\x08\x01"
+	"\x53\x01\x54\x02\x46\x01\xb7\x00\xa3\x00\xfc\x01\x0e\x00\xda\x00"
+	"\x63\x00\x04\xff\x07\x00\x9e\x00\xe4\xff\x3a\xfe\x22\xff\x57\xff"
+	"\x88\x00\x98\xff\x13\xfe\x0d\xff\x35\x00\x4d\xff\xb5\xff\xfa\xfe"
+	"\x53\xff\x36\x00\x55\xff\xc7\xff\x36\x00\xeb\x00\xbd\xfe\x19\x01"
+	"\xc4\xff\x71\x00\x23\x01\xe4\xff\x93\x00\xc1\xfe\xd5\x00\xe7\x00"
+	"\x66\xff\x7c\xff\xa6\xff\x96\xff\xb6\x00\x5b\xff\xfd\xfe\x71\xff"
+	"\x43\x00\xd1\x00\x1e\xff\x5e\xfe\xb5\xff\x2a\x01\xb0\xff\x6b\xff"
+	"\xed\x00\x03\xff\xa6\xff\x02\x01\xbd\x00\x7b\x01\xc0\xff\x56\xff"
+	"\x46\x00\x06\x00\x5d\xff\x84\x00\x13\xff\xb8\xfd\xba\xfe\x5a\xff"
+	"\x3a\xff\x02\xff\x5f\xff\x19\xff\xb3\xff\x58\x00\xa0\x00\x8d\x00"
+	"\x07\x01\xb3\x01\xcd\x01\x37\x02\x38\x01\xcb\x01\xca\x02\xe9\x01"
+	"\x04\x02\x36\x01\xc0\x00\xab\x00\xda\x00\x08\x01\xfe\xfe\xe9\xfe"
+	"\xfc\xfe\x2a\xff\x5f\xff\xa9\xfd\xab\xfe\x95\xff\xa8\xfe\x16\xfe"
+	"\xb7\xff\x37\xff\x74\xff\xbb\xff\xc1\xff\x90\xff\xc3\xff\xda\xff"
+	"\x40\x00\xfc\x01\x49\xff\x72\xff\x4f\x00\xa9\x00\x5e\x01\x8f\x00"
+	"\xda\xfe\xf3\xfe\x5b\x00\xa1\x01\x41\xff\xed\xfe\xa1\xff\xaf\xff"
+	"\xc0\x00\xeb\xfe\x06\x00\xdf\x00\x8e\xff\xab\xff\x1e\x00\x27\x00"
+	"\xc7\x00\x92\x00\xec\xff\x88\xfe\x3d\x00\x4c\x01\x9c\xff\x15\xff"
+	"\x5f\xff\xcd\xff\x72\xff\x38\xff\x18\xff\x72\xfe\x38\xfe\xb7\xfe"
+	"\xda\xfe\xdc\xfd\xa1\xfd\x40\xff\xb7\xff\xe8\xff\x57\x00\xa0\x00"
+	"\xb2\x01\x3e\x02\xbd\x02\x05\x03\xe9\x02\x09\x03\x2b\x03\x1b\x03"
+	"\x5b\x01\x1a\x02\xad\x03\xf2\x00\x2a\x00\xaf\x00\x02\x00\x29\xff"
+	"\xb5\xff\xdf\xff\x71\xfd\x5d\xfd\xd5\xfd\x5a\xfe\xdf\xfe\x5d\xfe"
+	"\xc6\xfd\x46\xfe\x1a\xff\xe4\xff\x11\x00\x0b\x00\x12\x00\x8d\xff"
+	"\xb3\x00\xc4\x00\xca\xff\x94\x00\xe9\x00\xea\xff\xa7\xff\xa9\xff"
+	"\x10\x00\xf3\x00\x42\x00\x4f\xff\x1a\xff\xe0\xff\xed\xff\x6b\xff"
+	"\xbd\xff\xd5\xfe\x97\xff\xea\xff\x1e\xff\x5e\xff\x13\x00\xd8\x00"
+	"\x2f\x00\x8d\xff\xb9\xff\x9b\x00\xf8\x00\xb6\x00\x88\x00\x87\x00"
+	"\x83\x00\x13\x00\x2a\x00\xf6\xff\xc8\xff\xd1\xfe\x2a\xfe\xdb\xfd"
+	"\x93\xfd\xfa\xfd\x27\xfe\x72\xfe\xad\xfe\xd1\xfe\x6c\xff\xed\x00"
+	"\x96\x01\x11\x02\x17\x02\x3b\x02\x6e\x02\xf2\x02\xbc\x03\x4b\x03"
+	"\x82\x02\x0e\x02\xf0\x01\x6d\x01\x98\x01\x4b\x01\x36\x00\x51\xff"
+	"\x1d\xff\x22\xff\x97\xfe\x5c\xfe\x63\xfe\x6e\xfe\xaa\xfd\xba\xfd"
+	"\x74\xfe\x5f\xff\x43\xff\x0f\xff\x72\xff\xf6\xff\x2f\x00\xb0\xff"
+	"\xae\x00\x86\x01\x39\x00\x6e\xff\x58\x00\x8c\x00\x0c\x01\xd3\x00"
+	"\x47\x00\xc3\xff\xfb\xff\xf5\xff\x0c\x00\x64\x00\xcb\xff\xbc\xfe"
+	"\x3c\xff\xe4\xff\xc6\xfe\xab\xff\x50\x00\xa3\xff\x11\xff\x93\xff"
+	"\x96\xff\x56\x00\x6d\x00\xc1\xff\xf8\xff\x27\x00\xed\x00\x39\x00"
+	"\xc8\xff\xeb\xff\x70\xff\xd3\xfe\xb3\xfd\x17\xfd\xee\xfc\x15\xfd"
+	"\xa5\xfd\xbb\xfd\x6d\xfe\x51\xff\x6a\x00\x96\x01\x97\x02\x51\x03"
+	"\x88\x03\xa5\x03\xc0\x03\xdb\x03\xa8\x03\x4f\x03\x92\x02\x47\x02"
+	"\x68\x01\xbd\x00\xcf\x00\x4c\x00\x5b\xff\xc2\xfe\x81\xfe\x59\xfe"
+	"\x62\xfe\x44\xfe\x80\xfe\x6a\xfe\x48\xfe\x33\xfe\xaa\xfe\x40\xff"
+	"\x54\xff\x11\xff\x9c\xfe\xd5\xfe\x2f\xff\xbd\xff\xb2\xff\xdc\xff"
+	"\x3d\x00\x32\x00\x16\x01\x6c\x01\xe5\x00\x26\x01\x33\x01\xcf\x00"
+	"\x5e\x00\xb7\x00\xe8\x00\x23\x00\x82\x00\x61\x00\x93\x00\x5a\x00"
+	"\x13\x00\x7c\x00\xb7\xff\xfe\xfe\x45\xff\x38\xff\x3f\xff\x37\xff"
+	"\x81\xff\x95\xff\x43\xff\x53\x00\xdf\x00\x23\x01\x27\x00\xee\xff"
+	"\x82\x00\x9d\x00\x73\x00\xcc\xff\xbd\xfd\x38\xfb\xb6\xf9\xb2\xf9"
+	"\x30\xfb\x5d\xfc\x3d\xfd\x5b\xfd\xcc\xfe\x90\x01\xf0\x03\x8a\x05"
+	"\x88\x05\x0b\x05\x0e\x05\x6a\x05\x70\x05\x95\x04\x40\x03\xbb\x01"
+	"\xff\x00\x92\x00\xcb\xff\x37\xff\xf4\xfe\xbc\xfe\xd2\xfe\xb9\xfe"
+	"\x91\xfe\xe7\xfe\x6a\xff\x9a\xff\x62\xff\x0c\xff\xb5\xfe\x89\xfe"
+	"\xa2\xfe\xd3\xfe\x30\xff\x7a\xff\xa7\xff\x7b\xff\x5c\xff\x36\xff"
+	"\xcd\xfe\x93\xfe\x49\xfe\xc1\xfe\x6a\xff\xf1\xff\x63\x00\xd1\x00"
+	"\x64\x01\x08\x02\x42\x02\x3b\x02\x7b\x01\xc2\x00\x9c\x00\x68\x00"
+	"\xd9\x00\xba\x00\xa2\x00\xb0\x00\x71\x00\xa4\x00\x5e\x00\xcd\x00"
+	"\xf9\x00\x02\x00\x0f\xff\x92\xfe\x45\xff\xc3\xff\xc9\xff\x93\xff"
+	"\x7b\xff\xf2\xff\x0e\x00\x18\x00\xff\xff\xce\xff\x8a\xfe\x55\xfb"
+	"\x70\xf8\x94\xf6\x06\xf7\xdd\xf8\xa0\xfa\x77\xfc\xab\xfe\xef\x01"
+	"\x9e\x05\x2f\x08\xc4\x08\xeb\x07\xfb\x06\xcc\x06\x76\x06\xbf\x05"
+	"\xea\x03\x07\x01\x9d\xfe\xb7\xfd\x42\xfe\xe0\xfe\xf6\xfe\xb5\xfe"
+	"\x5e\xfe\xe7\xfe\xae\xff\x38\x00\x95\x00\xaf\x00\xf5\x00\xdc\x00"
+	"\x38\x00\x4c\xff\x69\xfe\x3b\xfe\xb4\xfe\x51\xff\x80\xff\x11\xff"
+	"\x86\xfe\x3f\xfe\x45\xfe\x24\xfe\xe7\xfd\xde\xfd\x4c\xfe\x59\xff"
+	"\x43\x00\xc6\x00\xee\x00\x1d\x01\x7a\x01\xd8\x01\xee\x01\x51\x01"
+	"\xa4\x00\x64\x00\xa2\x00\x05\x01\x46\x01\x4a\x01\x19\x01\xd0\x00"
+	"\xa6\x00\x6f\x00\x9d\x00\xf8\x00\xca\x00\x40\x00\xa9\xff\x80\xff"
+	"\xbc\xff\x12\x00\x3f\x00\x7c\x00\x72\x00\x5f\x00\xdf\xff\xb2\xfe"
+	"\x15\xfc\x66\xf8\x88\xf5\x37\xf4\xaa\xf5\x82\xf8\x3f\xfb\xf5\xfd"
+	"\x0d\x01\x56\x05\x30\x09\xef\x0a\x5f\x0a\x0a\x08\x54\x06\xa6\x05"
+	"\x46\x05\x26\x04\x5c\x01\x7e\xfe\xca\xfc\x8b\xfc\x60\xfd\x90\xfe"
+	"\x9b\xff\x43\x00\xea\x00\x8c\x01\xc6\x01\xb3\x01\x86\x01\x5b\x01"
+	"\x37\x01\x92\x00\x36\xff\x96\xfd\x69\xfc\x4f\xfc\x11\xfd\x38\xfe"
+	"\x27\xff\x69\xff\x34\xff\xf5\xfe\xe0\xfe\xb5\xfe\x6a\xfe\x68\xfe"
+	"\xc2\xfe\x5b\xff\xe1\xff\xfa\xff\xf4\xff\x3d\x00\xd6\x00\x55\x01"
+	"\x7f\x01\x6f\x01\x36\x01\x43\x01\x66\x01\x8d\x01\xcc\x01\xda\x01"
+	"\x9d\x01\x3f\x01\x15\x01\xda\x00\xa3\x00\x70\x00\x3d\x00\x09\x00"
+	"\xdd\xff\xe3\xff\xf4\xff\xef\xff\xe5\xff\x02\x00\x9f\x00\x50\x01"
+	"\x9a\x00\x88\xfd\x5f\xf8\xd3\xf3\x57\xf2\x27\xf4\x85\xf7\x5b\xfa"
+	"\xd2\xfc\x46\x00\x4b\x05\x3c\x0a\x8f\x0c\x76\x0b\x61\x08\xd0\x05"
+	"\xec\x04\x62\x04\xe8\x02\xea\xff\x9f\xfc\xd3\xfa\x16\xfb\xd9\xfc"
+	"\xee\xfe\xd9\x00\xa5\x02\x4f\x04\x5e\x05\x3d\x05\x10\x04\xae\x02"
+	"\x8a\x01\xaa\x00\x79\xff\xa9\xfd\xbb\xfb\xa8\xfa\x04\xfb\x56\xfc"
+	"\xe8\xfd\x3a\xff\x30\x00\xd3\x00\xe7\x00\x35\x00\xb8\xfe\x22\xfd"
+	"\x94\xfc\x2c\xfd\x5d\xfe\x20\xff\x0e\xff\xde\xfe\x50\xff\x9a\x00"
+	"\xd8\x01\x45\x02\x0c\x02\xec\x01\x2d\x02\x99\x02\xc8\x02\x91\x02"
+	"\x10\x02\xa3\x01\x3a\x01\xaf\x00\x22\x00\xc0\xff\xb1\xff\xd8\xff"
+	"\x1a\x00\x0b\x00\xe9\xff\xda\xff\x0b\x00\x85\x00\xf5\x00\x19\x01"
+	"\x31\x00\x75\xfd\x4d\xf9\x44\xf5\x69\xf3\x7b\xf4\x70\xf7\xcd\xfa"
+	"\x00\xfe\xbf\x01\x32\x06\x53\x0a\x48\x0c\x48\x0b\x4d\x08\x0f\x05"
+	"\x9c\x02\xc0\x00\xe9\xfe\xce\xfc\x0f\xfb\x98\xfa\x94\xfb\xa5\xfd"
+	"\x34\x00\xe7\x02\x7a\x05\x64\x07\xdf\x07\x81\x06\xc7\x03\xe4\x00"
+	"\xb8\xfe\x39\xfd\xf0\xfb\x98\xfa\xa9\xf9\xc4\xf9\x07\xfb\x26\xfd"
+	"\x99\xff\x13\x02\x70\x04\x2b\x06\x88\x06\xff\x04\x6b\x01\x39\xfd"
+	"\x25\xfa\x07\xf9\xa8\xf9\xcb\xfa\xfc\xfb\x75\xfd\xc8\xff\x9f\x02"
+	"\xc3\x04\x68\x05\xc1\x04\x96\x03\x60\x02\x08\x01\x89\xff\x5a\xfe"
+	"\xef\xfd\x5a\xfe\x1b\xff\xde\xff\x8f\x00\x1f\x01\x8e\x01\x5a\x01"
+	"\xc4\x00\x5f\x00\xa7\x00\x7b\x01\x2d\x02\x3b\x02\xe3\x01\x30\x01"
+	"\x0d\x00\x31\xfd\xd9\xf7\x0a\xf3\xe9\xf0\x54\xf3\x44\xf8\xd6\xfc"
+	"\xd3\x00\x95\x04\x39\x09\x0d\x0d\xb2\x0d\x0e\x0b\x98\x06\xb0\x02"
+	"\x0c\x00\x9a\xfd\x12\xfb\xda\xf8\x52\xf8\xcf\xf9\x91\xfc\xd7\xff"
+	"\x48\x03\xfa\x06\x08\x0a\x1e\x0b\xbe\x09\x46\x06\x2b\x02\x77\xfe"
+	"\x4f\xfb\xe2\xf8\x2a\xf7\xc1\xf6\xb9\xf7\xd0\xf9\xbd\xfc\x03\x00"
+	"\x78\x03\x82\x06\x6c\x08\xac\x08\xfe\x06\xd0\x03\xc3\xff\x96\xfb"
+	"\x8c\xf8\x66\xf7\x6d\xf8\xbe\xfa\x4e\xfd\xac\xff\xe4\x01\xf7\x03"
+	"\x4e\x05\x6d\x05\x50\x04\xaf\x02\x57\x01\x4a\x00\x3a\xff\x40\xfe"
+	"\x9c\xfd\xde\xfd\x89\xfe\x34\xff\x86\xff\xd1\xff\x68\x00\x1f\x01"
+	"\x59\x01\x38\x01\x53\x01\x00\x02\xd3\x02\x65\x02\xe3\xff\xf0\xfa"
+	"\xec\xf5\x8d\xf2\x34\xf2\x9c\xf4\xb1\xf8\x4e\xfe\x9d\x04\xad\x0a"
+	"\x9e\x0e\x37\x0f\x13\x0d\x50\x09\x12\x05\xd8\x00\xb9\xfc\xb3\xf9"
+	"\x42\xf8\x3a\xf8\xef\xf8\x46\xfa\x03\xfd\x6b\x01\x72\x06\x2a\x0a"
+	"\x3d\x0b\x0a\x0a\x5b\x07\xc8\x03\x70\xff\xa4\xfa\xbb\xf6\xcc\xf4"
+	"\x00\xf5\xb8\xf6\x38\xf9\x7c\xfc\x94\x00\xf6\x04\x8a\x08\x6e\x0a"
+	"\x84\x0a\x03\x09\x18\x06\xee\x01\x4d\xfd\x6b\xf9\x0a\xf7\xe6\xf5"
+	"\xb2\xf5\xf3\xf6\x34\xfa\x08\xff\xc0\x03\x2a\x07\x21\x09\xc1\x09"
+	"\xe5\x08\xe2\x05\x1d\x01\x36\xfc\x0f\xf9\x5b\xf8\x85\xf9\xd5\xfb"
+	"\x10\xff\xb2\x02\xa4\x05\xae\x06\x8c\x05\x98\x03\x10\x02\x32\x01"
+	"\x5e\x00\x83\xff\x40\xff\xa7\xff\xce\xff\xc4\xfe\xe2\xfc\x77\xfb"
+	"\x81\xfa\xa4\xf8\x72\xf5\x02\xf3\xed\xf3\x43\xf8\xcd\xfd\x8b\x02"
+	"\xba\x06\x00\x0b\x5c\x0e\xd6\x0e\xd8\x0b\x10\x07\x86\x02\xc0\xfe"
+	"\x6d\xfb\xd6\xf8\x0f\xf8\x52\xf9\x80\xfb\xb9\xfd\x64\x00\x7e\x04"
+	"\x63\x09\xef\x0c\x62\x0d\xd4\x0a\x96\x06\x5c\x01\x49\xfb\x33\xf5"
+	"\x05\xf1\x77\xf0\x56\xf3\xb5\xf7\x20\xfc\x48\x00\x85\x04\x56\x08"
+	"\x9a\x0a\xd1\x0a\x92\x09\x86\x07\x76\x04\x07\x00\xc9\xfa\xa4\xf6"
+	"\xe8\xf4\x1f\xf5\xd5\xf5\x30\xf7\xe0\xfa\xd4\x00\xe8\x06\x70\x0a"
+	"\x2e\x0b\x8e\x0a\xf2\x08\x97\x05\x31\x00\xab\xfa\x80\xf7\x38\xf7"
+	"\xb5\xf8\x10\xfb\x6e\xfe\xb8\x02\x1f\x06\x0b\x07\xb7\x05\x1b\x04"
+	"\x3d\x03\x4e\x02\x85\x00\xd3\xfe\x8f\xfe\x96\xff\xd6\xff\xd8\xfe"
+	"\x4e\xfd\xd6\xfc\xc8\xfb\x72\xf8\x82\xf4\xd2\xf1\xa7\xf3\xed\xf7"
+	"\xc4\xfc\xec\x01\x3e\x07\xca\x0c\x99\x0f\x7c\x0e\xe3\x0a\x62\x06"
+	"\x80\x02\x57\xfe\x49\xfa\x04\xf8\xdc\xf7\x4c\xf9\xb1\xfa\xa2\xfc"
+	"\x8b\x00\x19\x06\x87\x0b\x22\x0e\x89\x0d\xce\x0a\x4b\x06\x7c\x00"
+	"\xb8\xf9\x3e\xf4\xd8\xf1\x71\xf2\xe9\xf4\x06\xf8\xf8\xfb\xa7\x00"
+	"\x02\x05\x1d\x08\xb3\x09\x57\x0a\xe3\x09\xaf\x07\x97\x03\x8d\xfe"
+	"\x25\xfa\x0c\xf7\x78\xf5\xa2\xf5\x9e\xf7\xb3\xfa\x5b\xfd\x9f\xff"
+	"\xe7\x01\x8d\x04\xbf\x06\x56\x07\xa5\x06\x1e\x05\x07\x03\x25\x00"
+	"\x9b\xfc\xdc\xf9\x17\xf9\x5d\xfa\xfc\xfc\x40\x00\xff\x03\x05\x07"
+	"\x6a\x08\x96\x07\xdd\x05\x22\x04\xb9\x02\x31\x01\x60\xff\xf2\xfd"
+	"\x69\xfd\x44\xfd\x1b\xfd\x68\xfc\x93\xfc\xdf\xfd\x87\xff\x0c\xff"
+	"\x68\xf9\x35\xf4\xe6\xf1\xe2\xf3\x85\xf7\x5d\xfa\x3d\xff\xb4\x05"
+	"\x70\x0b\xcb\x0d\x50\x0c\x9c\x0a\xa8\x08\xef\x04\xbe\xff\xfb\xfa"
+	"\xdb\xf9\x47\xfa\xff\xf9\xa8\xf9\xf2\xfb\x0a\x02\x71\x08\xfe\x0b"
+	"\xdd\x0c\x2c\x0c\x64\x0a\xa9\x05\xb0\xfe\xaa\xf8\xb3\xf5\x2d\xf5"
+	"\xb8\xf4\x7d\xf4\x85\xf6\x16\xfb\x58\x00\x49\x04\x6b\x07\xd4\x0a"
+	"\x44\x0d\x52\x0c\x55\x07\xdf\x00\x41\xfb\x01\xf7\xbf\xf3\x3c\xf2"
+	"\xfc\xf3\x5a\xf8\x22\xfd\xa3\x00\xdd\x02\xd1\x04\x77\x06\xe7\x06"
+	"\xee\x05\x02\x04\xe5\x01\xb9\xff\x8f\xfd\x3d\xfc\xe7\xfb\x9e\xfc"
+	"\xb7\xfd\xfb\xfe\x96\x00\xb8\x02\xe0\x04\x72\x06\x24\x07\x50\x07"
+	"\xda\x06\x91\x05\x72\x03\xeb\x00\x83\xfe\x7a\xfc\xba\xfa\x6a\xf9"
+	"\x69\xf9\xde\xfa\x5a\xfd\x5b\xff\xe4\x00\xc4\x01\x0c\x02\x84\xfe"
+	"\x6b\xf8\xf6\xf3\xff\xf2\xfe\xf4\xff\xf6\xe9\xf9\x7a\xff\x36\x06"
+	"\x04\x0b\x7a\x0c\x53\x0c\x18\x0c\xc1\x09\x09\x05\x6e\xff\xed\xfb"
+	"\xaa\xfa\xad\xf9\xd9\xf8\x1c\xfa\xd2\xfe\xe2\x04\x41\x09\x4a\x0b"
+	"\xe5\x0b\x47\x0b\x68\x08\x37\x03\xe7\xfd\x26\xfa\xd0\xf7\xa5\xf5"
+	"\xe7\xf3\x52\xf4\x71\xf7\xea\xfb\x78\x00\xea\x04\x27\x09\xb6\x0b"
+	"\x08\x0b\x23\x07\xf0\x01\x01\xfd\x95\xf8\x20\xf5\x73\xf3\x88\xf4"
+	"\x97\xf7\x0f\xfb\x64\xfe\xd9\x01\xbf\x05\xc9\x08\xa2\x09\x52\x08"
+	"\x8f\x05\x06\x02\x22\xfe\x9b\xfa\xcf\xf8\x51\xf9\x92\xfb\x98\xfe"
+	"\xb5\x01\xae\x04\xdb\x06\x89\x07\xbd\x06\x29\x05\xc6\x03\xd3\x02"
+	"\x17\x02\x63\x01\xd8\x00\x50\x00\x8d\xff\x40\xfe\x9e\xfc\x57\xfb"
+	"\xc3\xfa\x0b\xfb\x06\xfc\xb1\xfd\xcd\xff\xb5\x01\xa1\x02\x58\x02"
+	"\xe6\x00\x8a\xfe\x9a\xfa\x6f\xf6\x13\xf4\x19\xf4\x0b\xf6\x64\xf8"
+	"\xc8\xfb\xf1\x00\xb2\x06\x1b\x0b\xd1\x0c\xb6\x0c\x5d\x0b\x6e\x08"
+	"\x62\x04\x7b\x00\x3b\xfe\x2b\xfd\x4e\xfc\xfb\xfb\x2c\xfd\xf9\xff"
+	"\x16\x03\x66\x05\xfe\x06\xed\x07\xad\x07\x99\x05\x22\x02\x77\xfe"
+	"\x2a\xfb\x64\xf8\x89\xf6\x32\xf6\x96\xf7\x17\xfa\xfe\xfc\xfc\xff"
+	"\x9f\x02\x43\x04\x5c\x04\x25\x03\x6d\x01\x6f\xff\x80\xfd\xf1\xfb"
+	"\x6c\xfb\x35\xfc\xb7\xfd\x2f\xff\x7d\x00\xd6\x01\x2e\x03\x2a\x04"
+	"\x86\x04\xaa\x04\xc3\x04\x37\x04\xb6\x02\x0c\x01\xe4\xff\xa0\xff"
+	"\x5e\xff\xdc\xfe\xbd\xfe\xa5\xff\x26\x00\xd6\x00\x11\x01\xf9\x01"
+	"\x2b\x00\xdf\xf8\x3f\xf3\x0c\xf2\xed\xf5\xc8\xf9\x7b\xfb\xa1\xff"
+	"\x5a\x05\x9d\x09\xae\x0a\xa1\x09\x98\x09\xb0\x07\x29\x02\xf0\xfb"
+	"\xa3\xf8\x10\xf9\x7f\xf9\xc3\xf8\x13\xfa\x01\xff\x0c\x05\xd1\x08"
+	"\x5e\x0a\x6b\x0b\xfd\x0a\x84\x07\xa4\x01\xc8\xfc\x52\xfa\x84\xf8"
+	"\x61\xf6\x2f\xf5\x9e\xf6\x1b\xfa\xd9\xfd\xe1\x01\x89\x06\x07\x0b"
+	"\x04\x0d\x69\x0b\x7c\x07\xa4\x02\xd5\xfd\x63\xf9\x8a\xf6\xf5\xf5"
+	"\x1f\xf7\x17\xf9\x2b\xfb\xcd\xfd\xc9\x00\xc1\x03\x2f\x06\x62\x07"
+	"\x3b\x07\x46\x05\xd2\x01\x42\xfe\x95\xfb\x68\xfa\x3e\xfa\x4c\xfa"
+	"\xe5\xfa\x47\xfc\x8f\xfe\xa6\x01\x04\x05\xbb\x07\x87\x08\x3d\x07"
+	"\x10\x05\x47\x03\xff\x01\xcb\x00\xe3\xff\x77\xff\x0a\xff\xb9\xfd"
+	"\xdb\xfb\x27\xfb\x54\xfb\x34\xfb\xb8\xfa\x56\xfa\x54\xfb\xb5\xfc"
+	"\x96\xfd\x9e\xfe\xb4\x00\xb4\x03\x44\x05\x9a\x04\xd7\x02\x05\x01"
+	"\x5a\xff\x97\xfd\xe2\xfc\xcc\xfd\xf4\xfe\x2b\xff\xee\xfe\xfe\xff"
+	"\xb5\x02\xad\x05\xb7\x07\x7e\x08\xde\x07\xcf\x05\xc0\x02\x1f\x00"
+	"\x90\xfe\xa1\xfd\x6e\xfc\xf8\xfa\x3d\xfa\xb8\xfa\x65\xfc\xe9\xfe"
+	"\xef\x01\xb1\x04\xf1\x05\x52\x05\x85\x03\x77\x01\xd3\xff\x55\xfe"
+	"\xb2\xfc\x46\xfb\x1f\xfa\xa3\xf9\x8d\xf9\x8b\xf9\xfb\xfa\xed\xfd"
+	"\x7f\x01\x27\x04\x23\x05\x94\x05\xb6\x05\x68\x05\x54\x04\x49\x02"
+	"\xb4\xff\x7f\xfc\xda\xf9\xab\xf9\x84\xfc\xcf\x00\xbb\x03\xbf\x04"
+	"\x11\x05\x55\x05\x07\x05\xde\x03\x6b\x02\xc3\x00\x4f\xfe\xd3\xfb"
+	"\xf2\xfa\xc4\xfb\x9a\xfc\x2b\xfc\x78\xfb\x20\xfc\xea\xfc\xd9\xfb"
+	"\xdc\xfa\x15\xfc\x17\xff\x17\x01\xa1\x00\x1c\x01\x45\x03\xf1\x04"
+	"\xcc\x04\x8c\x03\x8f\x03\x66\x03\x78\x01\x44\xff\x97\xfe\x95\xff"
+	"\xad\xff\x58\xfe\x0f\xfe\x95\xff\xdb\x01\x33\x03\xc2\x03\x9d\x04"
+	"\xb9\x04\x6e\x03\x87\x01\x16\x00\xfe\xfe\x03\xfd\xbe\xfa\xff\xf9"
+	"\x19\xfb\x0f\xfd\xf9\xfe\xec\x00\xae\x02\x47\x03\xcf\x02\x3e\x02"
+	"\x1a\x02\x80\x01\xf9\xff\x0a\xfe\x90\xfc\xa9\xfb\x6f\xfb\x73\xfc"
+	"\x8e\xfe\x92\x00\x68\x01\x8a\x01\x05\x02\xbf\x02\xf9\x02\x87\x02"
+	"\x9b\x01\xb5\x00\x56\xff\x57\xfe\x6a\xfe\x36\xff\xbd\xff\xc7\xff"
+	"\x72\xff\xd2\xff\xa7\x00\x20\x01\x52\x01\x6a\x01\x63\x01\x86\x00"
+	"\x4a\xfe\xd8\xfb\x0a\xfb\xce\xf9\x29\xf9\x16\xf9\xc4\xfa\xfc\xfd"
+	"\x69\x00\x66\x03\x52\x06\x7e\x08\x11\x09\x6b\x07\x8e\x05\x85\x03"
+	"\xbe\x00\xc3\xfd\x13\xfb\x31\xfa\x97\xfa\xd1\xfb\x4f\xfe\x6b\x01"
+	"\x1b\x04\x41\x05\x29\x05\x13\x05\x83\x04\x2b\x03\xdd\x00\x4a\xfe"
+	"\xed\xfb\xe4\xf9\xd5\xf8\x5d\xf9\x3c\xfb\x8a\xfd\xa9\xff\xe3\x01"
+	"\x41\x04\x4a\x06\x3d\x07\xc6\x06\x41\x05\x95\x02\x71\xff\x8f\xfc"
+	"\xd3\xfa\x17\xfa\x06\xfa\x31\xfa\x7a\xfa\x75\xfb\xa5\xfd\xbf\x00"
+	"\x39\x03\x15\x04\xf9\x03\x17\x04\x4e\x04\xc9\x03\x21\x02\xd9\xff"
+	"\xb3\xfd\x2a\xfc\xbe\xfb\x1b\xfd\x7b\xff\x89\x01\xc5\x02\xa5\x03"
+	"\xf5\x04\x20\x06\xc9\x05\xfc\x03\xa0\x01\x8b\xff\x14\xfe\x37\xfd"
+	"\x43\xfd\x3c\xfd\x50\xfb\xcf\xf8\x6b\xf8\x3a\xfa\xc1\xfb\xd9\xfa"
+	"\xdb\xf9\xf0\xfa\x1d\xfe\x0c\x02\xee\x04\xa2\x06\x41\x06\x29\x04"
+	"\x0b\x03\xe4\x03\xdd\x04\x4b\x03\x46\xff\x16\xfc\xad\xfb\x8e\xfd"
+	"\xe0\xff\x73\x01\x0e\x02\x01\x02\x85\x02\xa2\x04\xc9\x06\xad\x06"
+	"\x17\x04\x8b\x00\x7f\xfe\xb9\xfd\x97\xfc\x63\xfa\x58\xf8\xf7\xf7"
+	"\xde\xf9\x74\xfd\x08\x01\xe3\x02\xe5\x02\x73\x02\x04\x03\x8a\x04"
+	"\x56\x04\xac\x01\x6f\xfe\xd4\xfc\x13\xfd\xb0\xfd\x03\xfe\x2b\xfe"
+	"\x83\xfe\xe3\xff\x1c\x02\x63\x04\x42\x05\xa7\x04\xc6\x03\x6e\x03"
+	"\xa5\x02\x82\x00\x9d\xfd\xa4\xfb\x24\xfb\x27\xfb\xc4\xfb\x50\xfc"
+	"\x0d\xfd\xe8\xfd\xd8\xfe\xcf\x00\xed\x01\x30\x01\x1f\xff\x53\xfa"
+	"\x3d\xf9\xe1\xfb\x63\xfd\xba\xfb\x2a\xf9\x79\xfd\x91\x04\xe2\x08"
+	"\x54\x09\xe9\x07\xfd\x07\x02\x08\x57\x07\xd4\x06\x16\x04\xab\xfe"
+	"\xa0\xf9\x00\xf9\xfd\xfb\xfd\xfd\x9e\xfd\xea\xfc\xaf\xfe\x1c\x02"
+	"\x8a\x04\x73\x05\x98\x04\xff\x01\x57\xff\x2c\xfe\xd3\xfd\xf8\xfb"
+	"\xd0\xf8\x97\xf7\x0d\xfa\xe5\xfd\x0e\x00\xf1\x00\x1d\x02\x18\x04"
+	"\x45\x06\x16\x07\x96\x06\x45\x04\x02\x01\xd7\xfe\x1d\xfe\xbf\xfd"
+	"\x0e\xfc\x43\xfa\x71\xfa\x97\xfc\x35\xff\x92\x00\x2a\x01\xea\x01"
+	"\x98\x02\x20\x03\xd5\x02\xc5\x01\x67\xff\x4f\xfc\x3a\xfb\x19\xfc"
+	"\xd6\xfc\xe0\xfb\x7f\xfb\xbc\xfd\x39\x01\x05\x04\x40\x05\xda\x05"
+	"\x01\x06\xa8\x05\x2c\x05\xda\x03\x72\x01\xc7\xfe\x36\xfd\x38\xfd"
+	"\x72\xfd\xb6\xfd\x96\xfe\xee\xff\x3d\x01\x59\x02\xf8\x02\xa4\x02"
+	"\x5f\x01\x03\x00\x0c\xff\x5c\xfe\xe7\xfd\xe7\xfc\x62\xfb\x78\xfa"
+	"\x91\xfa\xc1\xfa\x38\xfa\xc3\xf9\x7c\xfa\xed\xfb\xa6\xfd\xc2\xff"
+	"\x50\x02\x9a\x04\xf3\x05\x12\x07\x1d\x08\x57\x08\x2a\x07\x16\x05"
+	"\x11\x03\x49\x01\xaf\xff\x49\xfe\x6a\xfd\xf4\xfc\xf4\xfc\xae\xfd"
+	"\xf5\xfe\x9d\x00\x11\x02\xf5\x02\x56\x03\x34\x03\x6a\x02\x18\x01"
+	"\x73\xff\xa6\xfd\x1f\xfc\x5b\xfb\x87\xfb\x71\xfc\xaf\xfd\x31\xff"
+	"\x32\x01\x60\x03\xc1\x04\xdb\x04\x74\x04\xa5\x03\xa2\x02\x08\x01"
+	"\x39\xff\xad\xfd\x6d\xfc\x72\xfb\x7b\xfa\x1d\xfa\x1f\xfa\x80\xfa"
+	"\xc3\xfa\x62\xfb\x95\xfc\xed\xfd\x44\xff\x68\x00\x6a\x01\x4a\x02"
+	"\x0a\x03\xaf\x03\xe3\x03\x77\x03\xc0\x02\x6b\x02\xaf\x02\xbb\x02"
+	"\x79\x02\x4b\x02\xbf\x02\x53\x03\x45\x03\xde\x02\x92\x02\x47\x02"
+	"\x94\x01\x65\x00\x2c\xff\x4e\xfe\xd4\xfd\x55\xfd\xc9\xfc\x98\xfc"
+	"\xd9\xfc\x32\xfd\x8a\xfd\xd4\xfd\x3f\xfe\xb8\xfe\x25\xff\x9b\xff"
+	"\x2c\x00\x7f\x00\x63\x00\xe5\x00\x81\x01\x90\x01\x4a\xff\x68\xfd"
+	"\x43\xfe\x31\xff\xbd\xfd\xd7\xfb\x29\xfd\x0e\x00\xe8\x01\x95\x02"
+	"\xa2\x03\xfb\x04\x5b\x05\x45\x05\xfc\x04\x99\x03\x9c\x01\x46\x00"
+	"\x50\xff\xb2\xfd\x98\xfc\xbc\xfc\x9a\xfd\xe3\xfd\x8c\xfe\x75\xff"
+	"\x4f\x00\x64\x00\x76\x00\x76\x00\xa6\xff\xab\xfe\x7b\xfe\x08\xfe"
+	"\xb1\xfd\x79\xfd\x54\xfe\x11\x00\xd9\x00\xd1\x01\x91\x01\x44\xff"
+	"\x19\xfc\x1a\xff\xbf\x00\x9f\xfc\x2d\xf8\x04\xfb\x94\x01\xc1\x03"
+	"\xb5\x02\x2c\x02\x0f\x05\x14\x07\x92\x07\x6d\x06\xd9\x03\xc2\x00"
+	"\xfa\xff\x4d\x00\x88\xfe\x84\xfb\x04\xfb\x11\xfd\xab\xfe\x78\xfe"
+	"\x67\xfe\xf5\xff\xa2\x02\x0c\x04\x82\x03\x72\x02\xea\x01\xbf\x01"
+	"\xb1\x00\xed\xfe\x01\xfd\x28\xfc\x54\xfc\xa2\xfc\x71\xfc\x92\xfc"
+	"\xa6\xfd\x76\xff\xcd\x00\x75\x01\x77\x01\x92\x01\x53\x02\x2a\x03"
+	"\x75\x02\xaa\xff\xf7\xfd\x64\xfe\xc1\xfe\x26\xfd\xc1\xfb\xca\xfc"
+	"\x3f\xff\x4a\x01\xe6\x01\x53\x02\x36\x03\x23\x04\x52\x04\x73\x03"
+	"\xe7\x01\x93\x00\x74\x00\x9d\x00\xf3\xff\x2a\xff\xa1\xff\xfa\x00"
+	"\xa9\x01\x0c\x01\x87\x00\xbf\x00\x1a\x01\x46\x00\xa6\xfe\x9e\xfd"
+	"\x48\xfd\x67\xfd\xfb\xfb\x09\xfa\x00\xf9\x7b\xf9\xed\xf9\xaf\xf9"
+	"\x0a\xfa\x57\xfb\x50\xfd\x47\xff\xbd\x01\xaf\x03\x17\x05\x8e\x06"
+	"\x32\x08\xd0\x08\xf4\x07\x93\x06\x9c\x05\xe4\x04\x96\x03\xc3\x01"
+	"\x35\x00\x84\xff\x50\xff\xfb\xfe\xd1\xfe\x13\xff\x39\xff\x06\xff"
+	"\xda\xfe\xdd\xfe\x8c\xfe\x1b\xfe\xcd\xfd\xcd\xfd\xd7\xfd\x17\xfe"
+	"\x93\xfe\x39\xff\x68\xff\xa6\xff\x71\x00\x5c\x01\x89\x01\xfd\x00"
+	"\x30\x01\x6d\x01\x9b\x01\x9a\x00\x24\xff\x6d\xfe\xaa\xfd\x61\xfc"
+	"\x52\xfb\xa7\xfa\x3e\xfa\xbb\xfa\xb2\xfb\xc8\xfc\xf9\xfd\xaa\xff"
+	"\xa3\x01\x41\x03\x47\x04\x0b\x05\x7d\x05\xaa\x05\x51\x05\xc9\x04"
+	"\xfe\x03\x15\x03\x92\x02\x2c\x02\x77\x01\xd0\x00\xab\x00\x8b\x00"
+	"\x28\x00\x80\xff\x0b\xff\xb0\xfe\x4a\xfe\xf5\xfd\xa8\xfd\x58\xfd"
+	"\x2f\xfd\x71\xfd\xe5\xfd\x6c\xfe\x02\xff\x6d\xff\xa2\xff\x16\x00"
+	"\x9a\x00\xf7\x00\xcd\x00\xae\x00\xa3\x00\xa1\x00\xa1\x00\xa2\x00"
+	"\x6f\x00\x4d\xff\x20\xfe\x29\xfc\xb2\xfb\x70\xfc\xcb\xfb\x42\xfa"
+	"\x1e\xfb\x2c\xfe\x8d\x00\xff\x01\x13\x03\xb0\x04\x55\x06\x5f\x07"
+	"\xc7\x06\xad\x05\xd0\x04\x11\x04\x01\x03\x73\x01\x31\x00\xf6\xff"
+	"\xeb\xff\x74\xff\x8a\xfe\x2a\xfe\x9a\xfe\xd4\xfe\x10\xfe\x92\xfc"
+	"\x00\xfc\xb5\xfc\xce\xfc\xaf\xfb\x43\xfb\x21\xfc\x73\xfd\x33\xfe"
+	"\x95\xfe\x32\xff\x3b\x00\x7d\x01\x37\x02\xfe\x01\x0a\x02\x83\x02"
+	"\xbb\x02\x8b\x02\x13\x02\xf4\x01\x1f\x02\x15\x02\xb4\x01\x0f\x01"
+	"\xc3\x00\xfa\x00\xef\x00\xf9\xff\x2a\xff\x10\xff\x69\xff\xf7\xfe"
+	"\x34\xfe\xa6\xfd\x10\xfe\xd4\xfe\x51\xff\x61\xff\xbb\xff\x7e\x00"
+	"\x4f\x01\xde\x01\xcc\x01\xae\x01\x8f\x01\x92\x01\x33\x01\x98\x00"
+	"\x8d\xff\x6d\xff\xd5\xfe\xaf\xfe\x0b\xfe\x6f\xfe\x2d\xfe\x67\xfe"
+	"\x82\xfe\x83\xff\x86\xff\x0e\x00\x73\xff\x01\x00\xeb\xfe\x29\xfb"
+	"\x60\xfe\x3d\xff\xfd\xfc\x4c\xfa\x08\xfd\xb8\xff\xdb\x00\x6e\x00"
+	"\xa2\x01\x1f\x02\x63\x04\xef\x05\xac\x05\x0b\x05\x2d\x04\xfe\x05"
+	"\xeb\x05\xf1\x03\xf4\x01\x35\x02\xbc\x01\x93\x00\x72\xfe\xcc\xfd"
+	"\x04\xfc\x9c\xfc\xaf\xfc\x71\xfb\x40\xfa\x20\xfb\x84\xfc\x88\xfc"
+	"\x6f\xfc\x7b\xfd\xb2\xfe\xa1\xff\xd1\x00\x2a\x01\xc8\x01\x3a\x02"
+	"\x30\x03\x21\x03\xcc\x02\x0d\x02\xf5\x01\xc2\x01\x65\x01\x71\x00"
+	"\xb9\xff\x75\xff\x6c\xff\x40\xff\x1c\xff\xd0\xfe\x37\xff\xda\xff"
+	"\xdf\xff\x0d\x00\x1c\x00\x85\x00\x82\x00\x29\x00\xcb\xff\xbd\xff"
+	"\xad\xff\xb6\xff\xa1\xff\x7a\xff\x94\xff\x01\x00\x87\x00\x60\x00"
+	"\x1b\x00\x56\x00\x79\x00\x5a\x00\xd2\xff\x86\xff\x6f\xff\x60\xff"
+	"\x4f\xff\xf6\xfe\xb3\xfe\xc4\xfe\x57\xff\x73\xff\x60\xff\x75\xff"
+	"\xfe\xff\x3b\x00\x19\x00\x4a\x00\x4d\x00\xf3\xff\xd8\xff\xdd\xff"
+	"\xae\xff\xcd\xff\xd5\xff\x09\x00\x30\x00\x68\x00\x80\x00\x9d\x00"
+	"\xae\x00\xcd\x00\xba\x00\xa5\x00\xa6\x00\xb0\x00\xa1\x00\x9d\x00"
+	"\xcb\x00\x06\x01\x20\x01\x12\x01\x4b\x01\x45\x01\x3b\x01\x18\x01"
+	"\xd2\x00\x77\x00\x35\x00\xb5\xff\x7c\xff\x2c\xff\xe7\xfe\xb1\xfe"
+	"\x92\xfe\x7c\xfe\x74\xfe\x7a\xfe\x9e\xfe\xc4\xfe\xc8\xfe\xfa\xfe"
+	"\x56\xff\xc2\xff\xd8\xff\x2f\x00\x71\x00\xba\x00\xdc\x00\x13\x01"
+	"\x2e\x01\x45\x01\x1c\x01\x04\x01\xf4\x00\xc0\x00\x86\x00\x16\x00"
+	"\xb6\xff\x51\xff\x1b\xff\xc3\xfe\x69\xfe\x16\xfe\x2b\xfe\x46\xfe"
+	"\x31\xfe\x3c\xfe\x7f\xfe\xc1\xfe\xe9\xfe\x28\xff\x7a\xff\xab\xff"
+	"\xea\xff\x3d\x00\x63\x00\xa2\x00\xe3\x00\x1c\x01\x57\x01\x8b\x01"
+	"\xbc\x01\x02\x02\x50\x02\x60\x02\x59\x02\x55\x02\x4f\x02\x3f\x02"
+	"\xe7\x01\x82\x01\x26\x01\xc0\x00\x67\x00\x16\x00\xa6\xff\x35\xff"
+	"\xeb\xfe\xdb\xfe\x9c\xfe\x67\xfe\x59\xfe\x59\xfe\x5d\xfe\x63\xfe"
+	"\x72\xfe\x7e\xfe\x87\xfe\xc3\xfe\x20\xff\x37\xff\x3f\xff\x52\xff"
+	"\xb6\xff\xd9\xff\xd6\xff\xd0\xff\xe0\xff\xee\xff\x12\x00\x10\x00"
+	"\x15\x00\x31\x00\x61\x00\x7d\x00\x7c\x00\xa7\x00\xbc\x00\xc4\x00"
+	"\xcf\x00\xe7\x00\xcc\x00\xd8\x00\xdd\x00\x03\x01\xe8\x00\xd4\x00"
+	"\xf3\x00\x03\x01\xe9\x00\xf0\x00\xfb\x00\xc3\x00\x96\x00\x84\x00"
+	"\x6a\x00\x07\x00\xa4\xff\x61\xff\x24\xff\xe5\xfe\xa5\xfe\x60\xfe"
+	"\x2c\xfe\x11\xfe\x0e\xfe\xe8\xfd\xc1\xfd\xbc\xfd\xbe\xfd\xc0\xfd"
+	"\xec\xfd\x1f\xfe\x52\xfe\xa2\xfe\x39\xff\xd3\xff\x2d\x00\xa7\x00"
+	"\x3e\x01\xce\x01\x36\x02\x79\x02\xb0\x02\xc4\x02\xe0\x02\xea\x02"
+	"\xc0\x02\x7b\x02\x3c\x02\x10\x02\xca\x01\x77\x01\x31\x01\xf5\x00"
+	"\xb7\x00\x81\x00\x44\x00\xf6\xff\xb8\xff\x9d\xff\x69\xff\x0c\xff"
+	"\xc0\xfe\x92\xfe\x60\xfe\x27\xfe\xf3\xfd\xcb\xfd\xc4\xfd\xe8\xfd"
+	"\x04\xfe\x1a\xfe\x39\xfe\x71\xfe\xcb\xfe\x11\xff\x45\xff\x6f\xff"
+	"\xbb\xff\x18\x00\x5c\x00\x71\x00\x81\x00\x9d\x00\xb1\x00\xb4\x00"
+	"\xa5\x00\xa4\x00\x8d\x00\x8c\x00\xae\x00\xc6\x00\xc3\x00\xd2\x00"
+	"\x00\x01\x38\x01\x49\x01\x54\x01\x6d\x01\x76\x01\x89\x01\x83\x01"
+	"\x64\x01\x2a\x01\xfb\x00\xd1\x00\x82\x00\x19\x00\xd0\xff\x82\xff"
+	"\x41\xff\xf4\xfe\xad\xfe\x72\xfe\x3f\xfe\x2e\xfe\x20\xfe\x18\xfe"
+	"\x0b\xfe\x24\xfe\x57\xfe\x96\xfe\xb3\xfe\xef\xfe\x40\xff\x85\xff"
+	"\xc2\xff\xf6\xff\x1b\x00\x4a\x00\x6c\x00\x82\x00\x94\x00\x89\x00"
+	"\x73\x00\x72\x00\x7b\x00\x7e\x00\x7f\x00\x7f\x00\x93\x00\xb0\x00"
+	"\xe2\x00\x03\x01\x0f\x01\x2c\x01\x50\x01\x55\x01\x4d\x01\x42\x01"
+	"\x29\x01\xfc\x00\xcc\x00\x9a\x00\x62\x00\x1c\x00\xdc\xff\xb8\xff"
+	"\x88\xff\x5b\xff\x36\xff\x19\xff\x09\xff\xe3\xfe\xdc\xfe\xe1\xfe"
+	"\xf1\xfe\xd4\xfe\xda\xfe\xe7\xfe\x0b\xff\x19\xff\x45\xff\x77\xff"
+	"\xa7\xff\xdc\xff\x2d\x00\x77\x00\xae\x00\xcc\x00\xf3\x00\x19\x01"
+	"\xf8\x00\x0b\x01\xa4\x00\x13\x01\xa7\x00\x4b\x00\x80\x00\xf9\xff"
+	"\x0b\x00\x9f\xff\xdc\xff\x4a\xff\x4c\xfd\x29\x00\x8e\xff\x45\xff"
+	"\xee\xff\x91\x00\x21\x01\xb2\xff\x6d\x02\x77\x00\x59\x00\x44\x00"
+	"\xdb\xff\x60\xfe\xd7\xfe\x44\x00\xd0\xfe\x5f\xff\x4a\xff\x2f\x00"
+	"\x5d\x00\xbb\x00\xfe\x00\x52\x00\xd4\xff\x11\x00\xd0\xff\xb6\xff"
+	"\xfe\xfe\xcc\xff\x9a\xff\x09\xff\x85\xff\xc8\xff\xed\xff\xa2\xff"
+	"\x8f\x00\x14\x00\x80\xff\x0b\x00\x2e\x00\x93\xff\xaa\xff\x67\x00"
+	"\xe6\xff\xf9\xff\xb1\x00\xd4\x00\xc4\x00\xed\x00\xd2\x01\x04\x01"
+	"\x0a\x01\x59\x01\xbb\x00\x94\x00\x99\x00\x94\x00\xd0\xff\x9d\xff"
+	"\x08\x00\x4a\xff\x2d\xff\xbe\xff\x34\xff\x51\xff\x4a\xff\xbb\xff"
+	"\x48\xff\xad\xff\x97\xff\xcc\xfe\xca\xff\x44\xff\xc7\xff\xbd\xff"
+	"\xfc\xff\x81\x00\xd3\x00\x34\x01\xaf\x00\x67\x01\xc9\x00\x6c\x00"
+	"\x10\x00\x95\xff\x13\xff\x0a\xff\x18\xff\x55\xfe\x68\xfe\xad\xfe"
+	"\xbf\xfe\xb6\xfe\xa0\xfe\xa9\xfe\x5c\xff\xc5\xfe\x33\xfe\x07\xff"
+	"\x14\x00\xd6\xff\x8e\xff\xa3\x00\xb1\x01\x26\x02\x73\x02\x90\x02"
+	"\xc9\x02\x72\x03\x9a\x03\xbf\x02\xd6\x01\x09\x02\xea\x01\xe6\x00"
+	"\x01\x00\xb0\xff\x8d\xff\x2d\xff\xbe\xfe\x4f\xfe\x23\xfe\x9b\xfe"
+	"\xd4\xfe\xa2\xfe\x5e\xfe\x0a\xff\xa5\xff\x9b\xff\x75\xff\x82\xff"
+	"\x0d\x00\x25\x00\x00\x00\xb6\xff\xe5\xff\x14\x00\x23\x00\xdb\xff"
+	"\x9d\xff\xe4\xff\x1f\x00\x0e\x00\xb5\xff\xbb\xff\xe2\xff\xd9\xff"
+	"\xd1\xff\xc1\xff\x94\xff\xcd\xff\x02\x00\xfc\xff\xfc\xff\x11\x00"
+	"\x4e\x00\x4b\x00\x5e\x00\x45\x00\x1c\x00\x3a\x00\x3b\x00\xcd\xff"
+	"\xa7\xff\xb8\xff\x95\xff\x60\xff\x50\xff\x5a\xff\x38\xff\x85\xff"
+	"\x9c\xff\xa7\xff\xbe\xff\x2a\x00\x61\x00\x6b\x00\xab\x00\xdb\x00"
+	"\x16\x01\x17\x01\x21\x01\x0d\x01\xf5\x00\xe8\x00\xd6\x00\x96\x00"
+	"\x48\x00\x45\x00\x5f\x00\x27\x00\xf0\xff\x01\x00\x04\x00\xdf\xff"
+	"\xde\xff\xdc\xff\xbd\xff\xdb\xff\xc9\xff\xad\xff\xc9\xff\xee\xff"
+	"\xf0\xff\xcd\xff\x09\x00\x36\x00\x28\x00\x00\x00\xe2\xff\xec\xff"
+	"\xe9\xff\xa7\xff\x6c\xff\x49\xff\x43\xff\x4a\xff\x33\xff\x23\xff"
+	"\x42\xff\x61\xff\x68\xff\x5f\xff\x68\xff\x73\xff\xb5\xff\xc1\xff"
+	"\x4d\xff\x48\xff\x94\xff\x98\xff\x3d\xff\x6c\xff\x81\xff\x8e\xff"
+	"\x51\x00\xbe\x00\x92\x00\xe7\x00\xb6\x01\x2f\x02\xcb\x01\xb3\x01"
+	"\xe0\x01\xbc\x01\xb2\x01\x11\x01\xa0\x00\x85\x00\x81\x00\x20\x00"
+	"\x67\xff\x56\xff\x89\xff\x78\xff\x14\xff\x00\xff\x3f\xff\x65\xff"
+	"\xc1\xff\xca\xff\xaa\xff\xe2\xff\x66\x00\x76\x00\x13\x00\x23\x00"
+	"\x47\x00\x34\x00\x32\x00\x22\x00\xe5\xff\xee\xff\x35\x00\x2c\x00"
+	"\xe1\xff\xf5\xff\x49\x00\x32\x00\x1a\x00\x23\x00\xe9\xff\xd0\xff"
+	"\xd9\xff\xcb\xff\x4f\xff\x14\xff\x31\xff\x20\xff\x2e\xff\x13\xff"
+	"\xef\xfe\x2d\xff\xc1\xff\xde\xff\x65\xff\x9a\xff\x44\x00\x35\x00"
+	"\xc6\xff\xb0\xff\xfc\xff\x1e\x00\xf1\xff\xad\xff\xaf\xff\xd4\xff"
+	"\xb0\xff\xa4\xff\xa1\xff\x93\xff\xd3\xff\x1b\x00\x2c\x00\x6e\x00"
+	"\xc2\x00\xd6\x00\x02\x01\x48\x01\x2a\x01\x0d\x01\x2a\x01\x29\x01"
+	"\xf5\x00\xc6\x00\x9d\x00\xa8\x00\xb9\x00\x5c\x00\x2d\x00\x5f\x00"
+	"\x45\x00\xed\xff\x18\x00\x26\x00\xc6\xff\xd3\xff\x0d\x00\xda\xff"
+	"\x9c\xff\xc6\xff\xd6\xff\x83\xff\x7f\xff\x62\xff\x3a\xff\x3e\xff"
+	"\x52\xff\x5b\xff\x42\xff\x67\xff\xac\xff\xc7\xff\xa5\xff\xbd\xff"
+	"\xf3\xff\xef\xff\xf3\xff\x0a\x00\x0d\x00\x0f\x00\x24\x00\x3f\x00"
+	"\x15\x00\x1e\x00\x35\x00\x20\x00\x1e\x00\x0f\x00\xf3\xff\x01\x00"
+	"\x18\x00\xde\xff\xc2\xff\xdb\xff\xdd\xff\xb2\xff\xc9\xff\xd8\xff"
+	"\xbb\xff\xd0\xff\xf5\xff\x02\x00\xe5\xff\x0a\x00\x2b\x00\x01\x00"
+	"\xf3\xff\x06\x00\x0f\x00\xf4\xff\xee\xff\xf0\xff\xdf\xff\x01\x00"
+	"\x0d\x00\xd4\xff\xc4\xff\xfa\xff\x0c\x00\xdd\xff\xe4\xff\x16\x00"
+	"\x14\x00\x37\x00\x6a\x00\x7b\x00\x7b\x00\x91\x00\xe7\x00\xf7\x00"
+	"\xc4\x00\xbc\x00\xea\x00\xe6\x00\x86\x00\x69\x00\x67\x00\x31\x00"
+	"\x06\x00\xed\xff\xaa\xff\x57\xff\xa3\xff\xe3\xff\x6f\xff\x1d\xff"
+	"\x73\xff\xe3\xff\x8e\xff\x35\xff\x5f\xff\x98\xff\xa4\xff\x7e\xff"
+	"\x60\xff\x69\xff\xcb\xff\x17\x00\xd4\xff\x8e\xff\xf3\xff\x6c\x00"
+	"\x45\x00\xe9\xff\x13\x00\x7a\x00\x86\x00\x61\x00\x4a\x00\x5e\x00"
+	"\x89\x00\x8b\x00\x42\x00\xf2\xff\x0c\x00\x4a\x00\x24\x00\xc9\xff"
+	"\xbf\xff\x1b\x00\x33\x00\xf1\xff\xaf\xff\xdc\xff\x31\x00\x2a\x00"
+	"\xe6\xff\xbb\xff\xf3\xff\x3c\x00\x2b\x00\xc2\xff\x9c\xff\xd1\xff"
+	"\x02\x00\xc7\xff\x6c\xff\x7b\xff\xc0\xff\xe5\xff\xb6\xff\x8e\xff"
+	"\xa8\xff\xe3\xff\xfb\xff\xca\xff\xab\xff\xe9\xff\x28\x00\x1a\x00"
+	"\xf1\xff\xfc\xff\x2c\x00\x39\x00\x22\x00\xed\xff\xfd\xff\x1b\x00"
+	"\x11\x00\x02\x00\x02\x00\x0c\x00\x21\x00\x34\x00\x37\x00\x1b\x00"
+	"\x1c\x00\x34\x00\x30\x00\x2a\x00\x1a\x00\x2d\x00\x3e\x00\x44\x00"
+	"\x27\x00\x2b\x00\x4e\x00\x39\x00\x17\x00\x19\x00\x1b\x00\x12\x00"
+	"\x10\x00\x04\x00\xfe\xff\xf7\xff\xeb\xff\xf3\xff\xf4\xff\xf1\xff"
+	"\xe8\xff\xf8\xff\x0f\x00\x13\x00\x23\x00\x22\x00\x31\x00\x3a\x00"
+	"\x42\x00\x33\x00\x23\x00\x2c\x00\x1d\x00\x09\x00\x03\x00\xff\xff"
+	"\xfe\xff\xee\xff\xe9\xff\xdc\xff\xdc\xff\xe7\xff\xd0\xff\xc4\xff"
+	"\xaf\xff\xaa\xff\xb8\xff\xaf\xff\xa2\xff\x9e\xff\xb5\xff\xc5\xff"
+	"\xb1\xff\xb7\xff\xc5\xff\xd3\xff\xd4\xff\xc4\xff\xc9\xff\xe2\xff"
+	"\xff\xff\x00\x00\xf8\xff\x12\x00\x2b\x00\x29\x00\x2f\x00\x30\x00"
+	"\x3a\x00\x3e\x00\x43\x00\x40\x00\x3b\x00\x3d\x00\x42\x00\x35\x00"
+	"\x26\x00\x39\x00\x43\x00\x35\x00\x1b\x00\x21\x00\x30\x00\x31\x00"
+	"\x15\x00\x00\x00\xef\xff\xfb\xff\xf0\xff\xc9\xff\xbf\xff\xc2\xff"
+	"\xdc\xff\xc7\xff\xc0\xff\xcd\xff\xe0\xff\xf7\xff\xe3\xff\xe2\xff"
+	"\xf1\xff\x00\x00\x0f\x00\x01\x00\xfd\xff\x08\x00\x1b\x00\x0e\x00"
+	"\xf6\xff\xf6\xff\xfa\xff\x04\x00\xf9\xff\xef\xff\xf0\xff\xfc\xff"
+	"\x0a\x00\xf9\xff\xf6\xff\x02\x00\x07\x00\x0a\x00\x01\x00\xfa\xff"
+	"\x0b\x00\x22\x00\x1c\x00\x07\x00\x0f\x00\x20\x00\x21\x00\x17\x00"
+	"\x06\x00\x01\x00\x06\x00\x02\x00\xef\xff\xe6\xff\xf2\xff\x00\x00"
+	"\xf9\xff\xec\xff\xec\xff\xfe\xff\xfe\xff\xef\xff\xe5\xff\xf4\xff"
+	"\xff\xff\x01\x00\x04\x00\xff\xff\x04\x00\x10\x00\x17\x00\x0f\x00"
+	"\x0b\x00\x17\x00\x24\x00\x23\x00\x19\x00\x1a\x00\x2d\x00\x1f\x00"
+	"\x18\x00\x10\x00\x06\x00\x02\x00\xff\xff\xf7\xff\xef\xff\xe8\xff"
+	"\xf6\xff\xf9\xff\xe6\xff\xdb\xff\xdc\xff\xe8\xff\xdb\xff\xdb\xff"
+	"\xe2\xff\xf1\xff\xf0\xff\xf8\xff\xf7\xff\xee\xff\xf8\xff\xfb\xff"
+	"\xf7\xff\xf1\xff\xf9\xff\x02\x00\xfe\xff\x09\x00\x15\x00\x0f\x00"
+	"\x10\x00\x0d\x00\x08\x00\x05\x00\x0c\x00\x0f\x00\x08\x00\x0b\x00"
+	"\x04\x00\x08\x00\x18\x00\x10\x00\x04\x00\x0a\x00\x17\x00\x15\x00"
+	"\x11\x00\x0f\x00\x13\x00\x14\x00\x0e\x00\x0c\x00\x01\x00\xf7\xff"
+	"\xfa\xff\xf5\xff\xef\xff\xef\xff\xec\xff\xee\xff\xe9\xff\xe1\xff"
+	"\xe4\xff\xf0\xff\xed\xff\xed\xff\xf4\xff\xf6\xff\xf4\xff\xfe\xff"
+	"\x06\x00\x03\x00\x0a\x00\x12\x00\x14\x00\x13\x00\x19\x00\x15\x00"
+	"\x0a\x00\x03\x00\x00\x00\xf9\xff\xed\xff\xe3\xff\xe9\xff\xe5\xff"
diff --git a/ndk/platforms/android-9/samples/native-audio/jni/hello_clip.h b/ndk/platforms/android-9/samples/native-audio/jni/hello_clip.h
new file mode 100644
index 0000000..5f0232b
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/jni/hello_clip.h
@@ -0,0 +1,685 @@
+	"\x00\x00\xfd\xff\x01\x00\x01\x00\xf9\xff\xfb\xff\x02\x00\x05\x00"
+	"\x01\x00\x03\x00\x06\x00\x0a\x00\x0a\x00\x09\x00\x04\x00\x04\x00"
+	"\x06\x00\x06\x00\x00\x00\xff\xff\x05\x00\x08\x00\x01\x00\xfe\xff"
+	"\xff\xff\x03\x00\x04\x00\xfe\xff\xf9\xff\xfd\xff\x04\x00\xfe\xff"
+	"\x03\x00\x04\x00\x01\x00\xfb\xff\xfb\xff\xfc\xff\xfb\xff\x03\x00"
+	"\xfc\xff\xf9\xff\xfc\xff\x01\x00\x06\x00\x00\x00\xf9\xff\xfa\xff"
+	"\x04\x00\x06\x00\xfe\xff\xfa\xff\xfd\xff\x01\x00\xfe\xff\xfe\xff"
+	"\xfe\xff\xfd\xff\xfd\xff\xfd\xff\xfe\xff\xff\xff\xfd\xff\xfa\xff"
+	"\xfe\xff\x00\x00\x03\x00\xfe\xff\xfc\xff\xfb\xff\xfe\xff\x01\x00"
+	"\x02\x00\x01\x00\xff\xff\x09\x00\x0c\x00\x10\x00\x07\x00\x07\x00"
+	"\x04\x00\x00\x00\x02\x00\xf5\xff\xf7\xff\x02\x00\x08\x00\xfe\xff"
+	"\xfe\xff\x05\x00\x06\x00\x05\x00\x00\x00\xfb\xff\xf9\xff\xf6\xff"
+	"\xf7\xff\xfd\xff\x02\x00\xff\xff\xff\xff\x08\x00\x07\x00\x08\x00"
+	"\x04\x00\xfe\xff\x02\x00\x0b\x00\x0c\x00\x05\x00\x04\x00\x03\x00"
+	"\xfe\xff\xfe\xff\xfb\xff\xf3\xff\xe8\xff\xee\xff\xfd\xff\x04\x00"
+	"\xfc\xff\x00\x00\x01\x00\xff\xff\xfe\xff\xf2\xff\xf3\xff\xfa\xff"
+	"\x04\x00\xf7\xff\xfe\xff\x09\x00\x0d\x00\x0b\x00\x08\x00\x01\x00"
+	"\xff\xff\x0c\x00\x0b\x00\x07\x00\x01\x00\x05\x00\x08\x00\x0b\x00"
+	"\x05\x00\xfe\xff\xf6\xff\xf9\xff\xfb\xff\xfa\xff\xf8\xff\x02\x00"
+	"\x05\x00\x06\x00\x01\x00\x00\x00\x0c\x00\x0b\x00\x02\x00\xf8\xff"
+	"\x01\x00\xfb\xff\xfa\xff\x06\x00\x07\x00\xfb\xff\x02\x00\x06\x00"
+	"\x00\x00\x01\x00\x04\x00\xf4\xff\xfa\xff\x00\x00\xf8\xff\xf6\xff"
+	"\x02\x00\xfd\xff\xf0\xff\xfe\xff\x00\x00\xff\xff\xfc\xff\x00\x00"
+	"\xf6\xff\x01\x00\x08\x00\x03\x00\xfc\xff\x06\x00\x0d\x00\x01\x00"
+	"\x04\x00\x05\x00\x01\x00\xf7\xff\xff\xff\xfc\xff\xff\xff\x03\x00"
+	"\x00\x00\xfc\xff\x06\x00\x07\x00\xff\xff\xfa\xff\xfa\xff\x02\x00"
+	"\x00\x00\x00\x00\xf5\xff\xfa\xff\xff\xff\x06\x00\xfc\xff\xf9\xff"
+	"\xff\xff\x04\x00\x08\x00\x06\x00\x01\x00\xf7\xff\xfe\xff\xfc\xff"
+	"\xfe\xff\x02\x00\x07\x00\xfb\xff\xfc\xff\x08\x00\x0b\x00\x05\x00"
+	"\x0a\x00\x08\x00\x00\x00\x08\x00\x11\x00\x0e\x00\xfd\xff\xf1\xff"
+	"\xef\xff\xfe\xff\x02\x00\xf8\xff\xf2\xff\xfb\xff\xfe\xff\x0a\x00"
+	"\xfd\xff\xfa\xff\xf9\xff\xee\xff\xf7\xff\xff\xff\x05\x00\xfc\xff"
+	"\xf6\xff\xfd\xff\x0f\x00\x0a\x00\x05\x00\xf7\xff\xf5\xff\xf8\xff"
+	"\x09\x00\x10\x00\xff\xff\xfd\xff\xf4\xff\xff\xff\xfe\xff\xff\xff"
+	"\xfe\xff\xef\xff\xfa\xff\x06\x00\x17\x00\x11\x00\x13\x00\x11\x00"
+	"\xfe\xff\x05\x00\x0b\x00\xfe\xff\xee\xff\x07\x00\x0b\x00\xff\xff"
+	"\x01\x00\x0b\x00\x0a\x00\x08\x00\x0b\x00\x02\x00\xf4\xff\xfa\xff"
+	"\x0c\x00\x00\x00\x03\x00\x09\x00\xf5\xff\xf6\xff\x06\x00\xfc\xff"
+	"\xf0\xff\xff\xff\x05\x00\xf0\xff\x0a\x00\x23\x00\x08\x00\xfd\xff"
+	"\x03\x00\xf7\xff\xee\xff\x03\x00\xfc\xff\xe2\xff\xf4\xff\xfe\xff"
+	"\xff\xff\x10\x00\x19\x00\xf6\xff\xe7\xff\xf6\xff\xf3\xff\xe5\xff"
+	"\xee\xff\xea\xff\xdc\xff\xf3\xff\xf9\xff\x02\x00\x02\x00\x00\x00"
+	"\xe6\xff\xef\xff\x02\x00\x09\x00\x09\x00\x0b\x00\x09\x00\x00\x00"
+	"\x08\x00\x07\x00\x11\x00\x12\x00\x1a\x00\x17\x00\x2f\x00\x35\x00"
+	"\x2c\x00\x2d\x00\x20\x00\x03\x00\x02\x00\x12\x00\x0e\x00\x11\x00"
+	"\x21\x00\x1d\x00\x13\x00\x25\x00\x1c\x00\x05\x00\xf9\xff\xf4\xff"
+	"\xdd\xff\xf1\xff\x0c\x00\x15\x00\x1d\x00\x32\x00\x2a\x00\x1a\x00"
+	"\x1f\x00\xfe\xff\xcf\xff\xcf\xff\xeb\xff\xde\xff\xf4\xff\x03\x00"
+	"\x00\x00\x10\x00\x17\x00\xf0\xff\xcc\xff\xc7\xff\x8c\xff\x58\xff"
+	"\x5c\xff\x4e\xff\x0f\xff\xf6\xfe\xd6\xfe\xb5\xfe\xc5\xfe\xd6\xfe"
+	"\xe1\xfe\x08\xff\x5e\xff\x9a\xff\xe2\xff\x43\x00\x92\x00\xca\x00"
+	"\x10\x01\x32\x01\x42\x01\x6c\x01\x7e\x01\x72\x01\x6e\x01\x71\x01"
+	"\x56\x01\x53\x01\x53\x01\x30\x01\x05\x01\xfb\x00\xca\x00\x8c\x00"
+	"\x62\x00\x1b\x00\xbe\xff\x8e\xff\x67\xff\x40\xff\x44\xff\x61\xff"
+	"\x6a\xff\x80\xff\xab\xff\xb4\xff\xc6\xff\xca\xff\xb2\xff\x80\xff"
+	"\x79\xff\x6f\xff\x7d\xff\xa1\xff\xb5\xff\xb4\xff\xe1\xff\xfb\xff"
+	"\x0c\x00\x1e\x00\x30\x00\x16\x00\xfe\xff\xf4\xff\xe8\xff\xef\xff"
+	"\xbf\xff\x85\xff\xf1\xfe\x8a\xfe\x08\xfe\xca\xfd\x68\xfd\x26\xfd"
+	"\xd2\xfc\xe2\xfc\x88\xfd\xb4\xfe\x28\x00\x6c\x01\xa8\x02\x51\x03"
+	"\xb6\x03\x8a\x03\x0f\x03\x00\x02\x11\x01\x34\x00\xed\xff\x2d\x00"
+	"\x01\x01\xdc\x01\xb0\x02\x38\x03\x22\x03\xbb\x02\xf8\x01\x1e\x01"
+	"\xfb\xff\x1f\xff\x2d\xfe\xb0\xfd\x80\xfd\xbb\xfd\x0e\xfe\xac\xfe"
+	"\x3b\xff\xb0\xff\x13\x00\x58\x00\x82\x00\x81\x00\x73\x00\x01\x00"
+	"\xa3\xff\x2f\xff\xf6\xfe\xc5\xfe\x12\xff\x5d\xff\xee\xff\x7a\x00"
+	"\xff\x00\x56\x01\xa1\x01\x90\x01\x17\x01\x8f\x00\xc5\xff\xf5\xfe"
+	"\x20\xfe\xa3\xfd\x1a\xfd\xe4\xfc\xe0\xfc\xfe\xfc\x3c\xfd\xca\xfd"
+	"\x1b\xfe\xa0\xfe\x0b\xff\xbf\xff\xfc\xff\xbb\x00\x01\x01\x7d\x01"
+	"\xed\x01\x5c\x02\xa0\x02\xac\x02\xd3\x02\x5c\x02\x42\x02\xc1\x01"
+	"\xb7\x01\x4b\x01\x9e\x01\x4c\x01\x60\x01\xf1\x00\xbc\x00\xff\xff"
+	"\x89\xff\xf7\xfe\x72\xfe\x21\xfe\xe5\xfd\xf6\xfd\xfe\xfd\xcb\xfe"
+	"\x3f\xff\x10\x00\x65\x00\xec\x00\xc1\x00\xe9\x00\xa9\x00\xa0\x00"
+	"\x86\x00\xb3\x00\xc7\x00\xf4\x00\x27\x01\x42\x01\x41\x01\x22\x01"
+	"\xfb\x00\xac\x00\x7a\x00\x49\x00\x19\x00\xf6\xff\xd6\xff\x82\xff"
+	"\x20\xff\xdc\xfe\x7d\xfe\xec\xfd\x8f\xfd\x31\xfd\x05\xfd\x8c\xfc"
+	"\x7a\xfc\xcb\xfb\x94\xfb\x71\xfb\xe9\xfb\xb7\xfc\x67\xfe\x20\x00"
+	"\xd7\x01\x78\x03\x76\x04\xb6\x04\x40\x04\x97\x03\x32\x02\x2c\x01"
+	"\x57\x00\x49\x00\x87\x00\xb4\x01\xa1\x02\x84\x03\xea\x03\xe3\x03"
+	"\x11\x03\x15\x02\xc9\x00\x49\xff\xfd\xfd\xde\xfc\x50\xfc\x49\xfc"
+	"\x22\xfd\x0a\xfe\x55\xff\x29\x00\xb0\x00\x9b\x00\xa6\x00\x5a\x00"
+	"\x51\x00\x30\x00\x18\x00\xe5\xff\xdc\xff\xe5\xff\x29\x00\xa3\x00"
+	"\x27\x01\xaa\x01\xfa\x01\xec\x01\xa2\x01\x39\x01\xb5\x00\x3a\x00"
+	"\xc2\xff\x35\xff\x9f\xfe\x6e\xfe\x27\xfe\x54\xfe\x7b\xfe\x0e\xff"
+	"\x29\xff\x62\xff\x4d\xff\xc7\xff\x29\xff\xe1\xff\xb6\xff\x6d\x00"
+	"\xe0\xff\xd8\x00\x1a\x00\x92\x00\xce\xfe\x16\xfe\x8c\xfb\x76\xf5"
+	"\x4e\xf5\xf5\xf3\x3a\xf8\x59\xfc\x7e\x04\xd5\x07\x35\x0d\x3e\x0e"
+	"\x34\x0d\xcf\x09\xe1\x04\xe2\xfe\x5e\xf9\xb5\xf6\x01\xf5\x0f\xf8"
+	"\x37\xfb\x42\x01\x82\x05\x2a\x0b\x35\x0d\xcb\x0e\x1b\x0c\x3c\x08"
+	"\x47\x01\x1c\xfb\x82\xf5\x95\xf2\xab\xf2\x76\xf5\x3c\xfa\x42\xff"
+	"\x72\x04\xd0\x07\x77\x0a\xb7\x0a\x00\x0a\x88\x06\x30\x02\x0d\xfc"
+	"\x7a\xf6\xef\xf1\x1d\xf1\xad\xf2\xb5\xf7\x05\xfe\x5c\x04\xed\x08"
+	"\x41\x0b\xe1\x0a\x16\x08\x89\x04\x10\x00\x2b\xfc\x78\xf9\x94\xf8"
+	"\x18\xf9\xa9\xfb\x51\xfe\x6d\x01\x74\x03\x95\x04\x83\x04\xd8\x03"
+	"\x70\x02\x75\x01\x98\x00\xe5\xff\x52\xff\xee\xfe\x27\xfe\x2e\xfe"
+	"\x21\xfe\x80\xfe\xef\xff\xbf\x00\xea\x00\x2b\x01\xf6\xff\x99\xfd"
+	"\xd9\xfc\x1c\xfb\xc9\xf9\xb5\xf8\xb9\xf9\x1b\xf8\xf1\xfa\x93\xfd"
+	"\xf1\x00\xdf\x04\xc5\x07\xaf\x08\x27\x08\xb0\x07\xbf\x04\x9c\x03"
+	"\x48\x01\xfa\xff\x48\xfe\x8c\xfe\x4d\xfe\x46\x00\x2a\x02\x76\x04"
+	"\xf0\x05\x0b\x07\x82\x06\x3f\x05\x56\x03\x85\x00\xb2\xfd\xb0\xfa"
+	"\x90\xf8\x06\xf7\x71\xf7\xc5\xf8\xda\xfb\xea\xfe\x36\x02\x40\x04"
+	"\xbd\x04\x9c\x03\x88\x01\xb2\xfe\x03\xfc\x27\xfa\x8c\xf9\xaf\xf9"
+	"\xaf\xfb\xde\xfd\x7a\x00\x01\x03\xcf\x04\xa4\x05\xcd\x05\xfd\x04"
+	"\x7f\x03\x2b\x02\xb3\x00\x8f\xff\x29\xff\xdd\xfe\x91\xfe\xd1\xfe"
+	"\xc4\xfe\x0e\xff\xcd\xff\x94\x00\xdd\x00\x9e\x01\xb5\x01\xbc\x01"
+	"\x82\x01\x62\x01\x5a\x00\x44\x00\x39\x00\x00\x00\x95\x00\x74\xff"
+	"\x9f\xfd\x1c\xfb\x77\xf7\xc7\xf4\x18\xf3\xf3\xf3\x37\xf7\x8f\xfc"
+	"\x4c\x03\x54\x09\x4a\x0e\x10\x10\x74\x0f\x65\x0b\x13\x06\xe6\xff"
+	"\x85\xfa\x9e\xf6\x44\xf5\xea\xf5\xcd\xf8\x5d\xfd\x67\x02\xd1\x07"
+	"\xe7\x0b\x63\x0e\x35\x0e\xb0\x0b\x99\x06\xa4\x00\x6c\xfa\x6c\xf5"
+	"\x39\xf2\x78\xf1\xcb\xf2\x2c\xf6\xc8\xfa\x10\x00\x4d\x05\x44\x09"
+	"\xcb\x0b\x89\x0b\xf6\x08\x34\x04\xa3\xfe\x95\xf8\x44\xf4\x03\xf2"
+	"\xc6\xf2\x3e\xf6\xcf\xfb\xe2\x01\x9b\x07\x56\x0b\xc5\x0c\xd9\x0b"
+	"\xb3\x08\xd2\x04\x9d\x00\xc2\xfd\x75\xfb\x53\xfb\x26\xfb\xa8\xfc"
+	"\x60\xfd\x7e\xff\x0a\x00\x15\x02\x18\x02\x2c\x04\xae\x03\xa3\x04"
+	"\xdd\x03\x79\x03\xe7\x02\x16\x02\xe4\x00\x5b\xfa\x81\xf6\xee\xed"
+	"\x55\xec\x7b\xe9\xb9\xee\x75\xf3\x4b\xfe\x09\x07\x51\x10\xee\x15"
+	"\x6b\x17\xf3\x14\x31\x0e\xdb\x06\x06\xfe\x1b\xf9\xeb\xf3\x15\xf3"
+	"\xad\xf1\xcf\xf4\x85\xf7\x8d\xfe\x4e\x04\xd2\x0b\xc8\x0f\xb9\x12"
+	"\xe9\x10\x08\x0d\x2c\x06\xbe\xfe\xa1\xf7\x30\xf2\x3e\xef\xc7\xee"
+	"\x5f\xf1\x5f\xf5\x6a\xfb\x14\x01\x4e\x07\x53\x0b\xbf\x0e\x91\x0e"
+	"\x65\x0d\x91\x08\x8a\x03\xb1\xfc\x6b\xf7\xcb\xf2\xe7\xf0\x70\xf1"
+	"\x42\xf4\x05\xf9\x74\xfe\x43\x04\x93\x08\xdf\x0b\xb1\x0c\x47\x0c"
+	"\x3c\x09\xac\x05\x88\x00\x2f\xfc\x7e\xf8\xdf\xf6\xb7\xf6\x1b\xf9"
+	"\x3b\xfc\x81\x00\xd5\x03\x88\x06\x2c\x07\x31\x07\xe3\x05\x08\x04"
+	"\x9c\x02\x3c\x01\x38\x01\x63\xff\x95\xff\x88\xf8\x92\xf5\x15\xf0"
+	"\xac\xed\xd6\xed\x0c\xf1\x8e\xf5\x16\xfc\x34\x04\x7c\x09\xd3\x0f"
+	"\x26\x11\xf4\x10\x3a\x0d\x97\x09\xa7\x03\xda\x00\x90\xfd\xed\xfb"
+	"\xbb\xfa\x8b\xfa\x0a\xfa\xab\xfb\x4e\xfd\xdd\xff\x10\x03\xca\x05"
+	"\xd7\x07\x8c\x08\xf2\x07\x94\x05\x18\x03\x85\xff\x95\xfc\x1d\xfa"
+	"\xec\xf8\xa6\xf8\x37\xfa\xd7\xfb\x3c\xfe\x40\x00\x0a\x02\xa0\x02"
+	"\x18\x03\xdc\x01\x04\x01\xc1\xff\xb4\xfe\x5b\xfe\x5e\xfe\x53\xfe"
+	"\xc1\xfe\xc8\xfe\xd2\xfe\xf2\xfe\x63\xff\xd8\xff\xe5\x00\x07\x02"
+	"\xd3\x02\xa8\x03\xe4\x03\x43\x03\x40\x02\xac\x00\xea\xfe\xc1\xfd"
+	"\x24\xfd\x50\xfd\xc2\xfd\xe4\xfe\x48\xff\x5c\x00\x61\x00\x1c\x01"
+	"\xf9\x00\x41\x02\x5d\x02\xcf\x03\x4a\x03\x22\x04\xd5\xff\x6f\xfc"
+	"\xef\xf8\xbd\xf3\x17\xf3\xb0\xf1\x4e\xf3\x59\xf5\xbb\xfb\x9b\xff"
+	"\x34\x06\xf1\x09\x15\x0c\x50\x0c\xbe\x0b\x33\x09\x98\x07\x1e\x06"
+	"\xa0\x03\x45\x02\x4a\x00\x3d\xfe\xb8\xfc\x5b\xfc\x73\xfb\xb3\xfc"
+	"\x76\xfd\x05\xff\x30\x00\xc0\x01\xc4\x01\x85\x02\xee\x01\x6f\x01"
+	"\xd6\x00\x27\x00\x67\xff\x83\xff\x59\xff\x59\xff\x7d\xff\xb6\xfe"
+	"\xaa\xfd\xed\xfc\x0f\xfc\x8e\xfb\x75\xfc\x3c\xfd\x51\xff\x5b\x01"
+	"\x23\x03\xf9\x03\x4e\x04\x61\x03\x36\x02\xd5\x00\x85\xff\xb6\xfe"
+	"\xfb\xfe\x36\xff\x2d\x00\x2f\x01\x70\x01\x38\x01\xc1\x00\x3b\xff"
+	"\xc2\xfe\x44\xfe\x26\xfe\xb0\xfe\xb2\xff\x10\x00\x01\x01\x54\x01"
+	"\xae\x01\xfd\x01\x52\x02\x92\x02\x12\x00\x75\xff\xa0\xfb\xcf\xf9"
+	"\x69\xf7\x49\xf6\x3a\xf5\xae\xf6\x12\xf9\x4b\xfc\x10\x01\x2f\x04"
+	"\x17\x07\x55\x08\x3b\x09\x7e\x08\xab\x08\x54\x07\x68\x06\x0a\x05"
+	"\xf6\x03\x81\x02\xa3\x01\x4c\x00\x0a\xff\xbc\xfd\x95\xfc\xd4\xfb"
+	"\x7a\xfb\xb0\xfb\x12\xfc\xef\xfc\xcd\xfd\xdc\xfe\xce\xff\xbd\x00"
+	"\x80\x01\x5d\x02\xec\x02\x20\x03\x02\x03\x30\x02\xee\x00\xb3\xff"
+	"\xdf\xfd\x78\xfc\x6c\xfb\x25\xfb\xd8\xfb\x6d\xfd\x78\xff\x7e\x01"
+	"\x4f\x03\x5e\x04\x6d\x04\xd5\x03\x70\x02\x45\x01\x24\x00\x2e\x00"
+	"\xc4\xff\xe5\xff\x04\x00\x72\xff\x3f\xff\x69\xfe\xe4\xfd\x66\xfd"
+	"\xe2\xfd\x36\xfe\xf0\xff\xe1\x00\x3e\x02\xe6\x02\x82\x00\xd0\xfe"
+	"\xc0\xfb\x30\xf9\xf5\xf7\x84\xf7\x4c\xf7\x19\xf9\xaf\xfb\x27\xfe"
+	"\xeb\x01\x57\x04\xc9\x05\x11\x07\x5f\x07\x1c\x07\x9e\x07\x4c\x07"
+	"\xc0\x06\x27\x06\xae\x04\xff\x02\x9f\x01\xdd\xff\x8f\xfe\xbd\xfd"
+	"\xfa\xfc\xce\xfc\xed\xfc\xf9\xfc\x47\xfd\x90\xfd\x94\xfd\x9d\xfd"
+	"\xa6\xfd\x93\xfd\x02\xfe\xae\xfe\xa1\xff\x18\x01\x75\x02\x67\x03"
+	"\xf5\x03\x88\x03\x4f\x02\x01\x01\x64\xff\x2b\xfe\xac\xfd\x85\xfd"
+	"\x0a\xfe\xde\xfe\x7b\xff\x2f\x00\xa1\x00\xe8\x00\x0a\x01\x58\x01"
+	"\x5f\x01\xb8\x01\x85\x01\x78\x01\x85\x00\x3e\x00\x50\xff\x95\xfe"
+	"\xcc\xfe\x90\xfe\x0b\x00\x64\x00\x52\x01\x5b\x01\x09\x01\xd4\x00"
+	"\x1f\x00\xd0\x00\x5b\x00\x96\x01\x3e\x00\x47\xfe\x69\xfc\xff\xf8"
+	"\x48\xf7\x7a\xf5\x2e\xf5\x7d\xf5\x8b\xf8\x28\xfb\x39\xff\xc4\x02"
+	"\x08\x05\xb3\x06\x95\x07\x9f\x07\xa2\x07\x3d\x08\xee\x07\x26\x08"
+	"\xd8\x07\xb6\x06\x67\x05\x00\x04\xad\x01\x07\x00\x54\xfe\x05\xfd"
+	"\x1a\xfc\xe5\xfb\x40\xfb\x90\xfb\xe5\xfb\x18\xfc\xc1\xfc\x58\xfd"
+	"\xb5\xfd\x98\xfe\x54\xff\x1f\x00\x35\x01\xeb\x01\x2c\x02\x2a\x02"
+	"\xcd\x01\x95\x00\xce\xff\x96\xfe\xaa\xfd\x98\xfd\xf6\xfd\xa4\xfe"
+	"\xd8\xff\xb3\x00\x37\x01\xad\x01\xce\x01\xc1\x01\x0f\x02\x34\x02"
+	"\x39\x02\x6f\x02\x48\x02\xf3\x01\x48\x01\x53\x00\x90\xff\xb5\xfe"
+	"\xdc\xfe\xb1\xfe\x8a\xff\xbc\xff\x6d\x00\x48\x00\x79\x00\xf5\xff"
+	"\x7e\xff\x4d\xfe\x9b\xfb\xd4\xfa\xf5\xf7\x2d\xf7\x38\xf6\x68\xf6"
+	"\x12\xf7\xa9\xf9\xfd\xfb\x26\xff\x77\x02\x9a\x04\xb5\x06\xf5\x07"
+	"\x95\x08\xc9\x08\x62\x09\xd3\x08\xbc\x08\xe1\x07\xa3\x06\x16\x05"
+	"\xbe\x03\xcf\x01\x81\x00\x0f\xff\xbb\xfd\x9f\xfc\xe8\xfb\x0e\xfb"
+	"\xd4\xfa\xe1\xfa\x07\xfb\x9d\xfb\x5c\xfc\x16\xfd\x19\xfe\x53\xff"
+	"\x52\x00\x62\x01\x1f\x02\x36\x02\x06\x02\xe2\x01\x05\x01\xbf\x00"
+	"\x05\x00\x8b\xff\x45\xff\x48\xff\x3d\xff\x98\xff\xe1\xff\x07\x00"
+	"\x6b\x00\xd4\x00\x2a\x01\xbe\x01\x1a\x02\x2a\x02\x3d\x02\xf2\x01"
+	"\x62\x01\xe4\x00\x6a\x00\xb6\xff\x06\x00\x65\xff\xb6\xff\x81\xff"
+	"\x56\xff\x40\xff\x42\xff\x16\xff\xc4\xfe\xdc\xfd\x06\xfc\xf8\xfa"
+	"\xdd\xf8\xe0\xf7\x59\xf7\x79\xf7\x53\xf8\x79\xfa\xb0\xfc\x62\xff"
+	"\x27\x02\xf9\x03\x88\x05\xbe\x06\x3f\x07\xe9\x07\xa1\x08\x92\x08"
+	"\x74\x08\xde\x07\x9f\x06\x6b\x05\x3d\x04\x85\x02\x49\x01\xc0\xff"
+	"\x16\xfe\xc9\xfc\xbc\xfb\xb9\xfa\x8b\xfa\xb9\xfa\xd1\xfa\xb0\xfb"
+	"\x7d\xfc\x1c\xfd\x5d\xfe\x6b\xff\x2e\x00\x33\x01\xb7\x01\x86\x01"
+	"\x8c\x01\x2e\x01\x6f\x00\x61\x00\x01\x00\xd1\xff\x53\x00\xb8\x00"
+	"\x29\x01\xb8\x01\xd2\x01\x80\x01\x73\x01\xf4\x00\xc3\x00\xcb\x00"
+	"\xde\x00\xbe\x00\xbc\x00\x36\x00\xba\xff\x6d\xff\xce\xfe\xc6\xfe"
+	"\xde\xfe\x59\xff\x08\x00\x46\x00\x7e\x00\x29\xff\x76\xfd\xbc\xfb"
+	"\x37\xf9\x54\xf8\xa1\xf7\xe5\xf7\x62\xf8\x07\xfa\x66\xfb\x8e\xfd"
+	"\xe8\xff\xaa\x01\xd6\x03\xac\x05\xeb\x06\x1f\x08\x2f\x09\x1d\x09"
+	"\x21\x09\x5f\x08\x17\x07\xc3\x05\x99\x04\x01\x03\xfb\x01\xb9\x00"
+	"\x40\xff\xed\xfd\xc4\xfc\x6a\xfb\xbd\xfa\x4c\xfa\x14\xfa\x66\xfa"
+	"\x08\xfb\xba\xfb\xe7\xfc\x55\xfe\x7b\xff\x08\x01\x39\x02\xe5\x02"
+	"\x7a\x03\xa8\x03\xa1\x02\x09\x02\x37\x01\x26\x00\xdb\xff\x9e\xff"
+	"\x5b\xff\x50\xff\x73\xff\x04\xff\x59\xff\x84\xff\x7d\xff\x18\x00"
+	"\x8f\x00\x9f\x00\x2b\x01\x3a\x01\xb0\x00\xea\x00\x82\x00\x76\x00"
+	"\x75\x00\x62\x01\xce\x00\x41\x02\x6f\x01\xbc\x01\x45\x01\x18\x01"
+	"\xbd\x00\x99\x00\x3b\x00\xac\xfc\xb1\xfc\x1a\xf8\xa1\xf6\x15\xf4"
+	"\x11\xf4\xbd\xf3\x32\xf6\x76\xf8\x0a\xfb\x35\xff\x1d\x01\xe3\x03"
+	"\xcf\x05\xc2\x07\x5a\x08\x70\x0a\x91\x0a\x47\x0b\x22\x0b\x86\x0a"
+	"\xb1\x08\xae\x07\x39\x05\x6c\x03\xb3\x01\xfd\xff\x24\xfe\x02\xfd"
+	"\x7d\xfb\x2e\xfa\xbe\xf9\xfa\xf8\x15\xf9\xa6\xf9\x85\xfa\x82\xfb"
+	"\x5d\xfd\x7e\xfe\x20\x00\x95\x01\x79\x02\xf8\x02\x81\x03\x94\x02"
+	"\x92\x01\x81\x00\x17\xff\x34\xfe\xf8\xfd\xc3\xfd\x3e\xfe\x0d\xff"
+	"\x19\xff\x76\xff\x4a\x00\xcf\x00\x7a\x01\x13\x02\x91\x02\xe4\x02"
+	"\x2d\x03\x76\x02\x36\x02\x67\x01\x1a\x01\xa7\x00\x58\x01\x26\x01"
+	"\x91\x01\xd6\x01\x8c\x01\xf8\x00\x1c\x00\xd1\xff\x99\xff\xd3\xff"
+	"\xed\xfb\x4d\xfa\x9e\xf7\x94\xf5\x8b\xf3\x58\xf3\x42\xf3\x35\xf6"
+	"\x86\xf9\x37\xfc\x40\x00\x35\x03\x22\x05\x9e\x06\x5a\x08\x82\x08"
+	"\x7c\x0a\xd8\x0a\xc4\x0a\x43\x0a\xad\x09\xa2\x07\x8e\x06\xa4\x04"
+	"\xc8\x02\x57\x01\xf3\xff\x2c\xfe\x2f\xfd\xeb\xfb\x75\xfa\x09\xfa"
+	"\xa6\xf9\x8d\xf9\x55\xfa\x56\xfb\x44\xfc\xea\xfd\x00\xff\x1a\x00"
+	"\x86\x01\x45\x02\x7e\x02\xca\x02\x18\x01\xef\xff\x86\xfe\x57\xfd"
+	"\xde\xfc\x6a\xfd\xf7\xfd\x8a\xff\x25\x01\x74\x01\x1a\x02\x0b\x03"
+	"\x10\x03\x3d\x03\x18\x03\xb5\x02\x8d\x02\x6d\x02\x44\x01\xcc\x00"
+	"\xb8\x00\x9c\xff\xf9\xff\xee\xff\x82\x00\xd6\x00\x37\x01\x6a\x00"
+	"\x05\x00\xa7\xff\x41\xfe\x56\xfb\x33\xf8\xfa\xf5\x71\xf4\xfe\xf3"
+	"\x7b\xf3\xe9\xf4\xdf\xf7\x43\xfc\x13\x00\xd9\x03\xe7\x06\xa0\x08"
+	"\xce\x09\x62\x0a\xa1\x0a\x98\x0a\x24\x0a\xca\x08\x2a\x07\x3c\x05"
+	"\x52\x03\xb6\x01\x95\x00\x23\xff\x09\xfe\x27\xfd\x55\xfc\x82\xfb"
+	"\x4b\xfb\x16\xfb\x62\xfb\x1c\xfc\x8b\xfc\x43\xfd\x2b\xfe\x0b\xff"
+	"\xdc\xff\x10\x01\xa3\x01\x74\x02\x90\x02\x47\x02\xfb\x00\x71\xff"
+	"\x5c\xfd\x91\xfc\xdc\xfb\x34\xfd\xba\xfc\x4e\xff\x7c\x03\x04\x04"
+	"\x96\x06\x97\x04\x4c\x05\xb0\x04\xb6\x03\x5d\x01\xc3\x00\x1b\xff"
+	"\xde\xfe\x59\xfe\x16\xfe\xc2\xfe\x6b\xff\x92\xff\x55\x00\xd0\x01"
+	"\xd6\x01\x22\x03\x2c\x01\xc5\x00\x7a\xf9\x7c\xf7\x3c\xf1\x2e\xf0"
+	"\xb3\xef\x2b\xf1\x74\xf4\x8c\xf9\xc3\xff\xd8\x04\x7b\x0b\x63\x0d"
+	"\x80\x0f\x11\x0e\xa8\x0c\x01\x09\xed\x07\xe9\x03\x9f\x01\x8a\xfe"
+	"\x9a\xfc\x67\xfb\x21\xfd\x32\xfe\x22\x01\x39\x03\x27\x04\x59\x04"
+	"\xc4\x03\x6a\x02\xc1\x00\xa8\xff\xc2\xfd\x99\xfc\xfb\xfa\x63\xf9"
+	"\x55\xf8\xcd\xf8\x4a\xf9\xe1\xfb\x76\xfe\x23\x01\x01\x03\xbc\x03"
+	"\x65\x02\xf2\x01\xb6\x00\x2b\x00\xcc\x00\x1f\x01\x59\x01\x7c\x02"
+	"\x2e\x02\x97\x02\x49\x02\xe5\x01\x0c\x01\x83\x01\xff\x00\xcd\x01"
+	"\x80\x01\xfd\x01\x65\x01\xa1\x01\xd4\x00\x17\x01\x68\x00\x8e\x00"
+	"\x12\x00\x42\x00\x70\x00\xf2\xff\xe8\xfe\x27\xf5\x29\xf3\x24\xeb"
+	"\x8c\xeb\xb9\xec\xb8\xf2\x25\xf8\x0d\x01\x64\x07\xfe\x0c\xf4\x12"
+	"\xa9\x12\xde\x11\xf8\x0c\x7b\x07\x10\x00\x5e\xfd\xc7\xf7\xe0\xf6"
+	"\xda\xf5\xa6\xf7\x5b\xfb\xb1\x02\x3c\x08\xbb\x0e\xbe\x11\xa8\x11"
+	"\xef\x0e\xc4\x09\xb5\x02\x38\xfc\x87\xf6\x21\xf1\xc0\xee\x68\xed"
+	"\xcf\xee\x28\xf3\xef\xf9\x56\x01\x89\x09\xe6\x0e\xd9\x11\x03\x11"
+	"\xfb\x0c\x84\x05\xa5\xfd\x53\xf5\x98\xef\xf5\xec\xc3\xed\xe9\xf1"
+	"\x78\xf8\x03\x00\x86\x07\xa3\x0d\x3b\x11\xce\x11\x28\x0f\x57\x0a"
+	"\x61\x04\xf8\xfe\xe2\xfa\x80\xf8\xc8\xf7\xfd\xf7\x2a\xfa\x9e\xfd"
+	"\x03\x01\xc3\x04\xf7\x07\xbf\x08\xb8\x08\x49\x08\xf2\x06\x2c\xff"
+	"\x4b\xf4\x35\xec\x81\xe5\x5d\xe4\xdf\xe7\x3c\xee\xbd\xf6\xd2\x00"
+	"\xa6\x09\xcc\x11\x11\x17\x51\x17\xdc\x13\x20\x0d\x29\x04\xcc\xfc"
+	"\x69\xf7\x3f\xf3\xce\xf1\x2a\xf3\x8c\xf7\x19\xff\x40\x08\x84\x10"
+	"\x1f\x16\x4b\x17\x67\x14\x0c\x0e\xba\x05\x70\xfd\x9d\xf6\xb2\xf1"
+	"\x84\xee\x59\xed\xcd\xee\x7d\xf2\xd6\xf8\x29\x00\xe7\x07\xb3\x0d"
+	"\x74\x10\xa1\x0e\xc9\x09\x74\x02\xfa\xfa\x69\xf5\x11\xf2\xe9\xf1"
+	"\x4e\xf4\x29\xf8\xdb\xfc\x28\x02\x3e\x06\x32\x0a\xa5\x0b\x05\x0c"
+	"\xce\x09\x7b\x07\x02\x03\xb4\xff\x96\xfb\x57\xfa\x26\xf9\x7c\xfa"
+	"\x39\xfb\x27\xfd\x27\xff\xce\x02\xf4\x04\xdc\x08\x60\x07\x58\xfc"
+	"\x16\xf9\xaa\xed\xcb\xec\xcc\xec\x29\xf3\xf5\xf7\x1a\x01\x6d\x05"
+	"\x1b\x0b\xb5\x0e\xbf\x0e\x3b\x0e\xd8\x09\xe4\x06\x39\xfe\x91\xfc"
+	"\x9b\xf5\x24\xf6\x05\xf5\xad\xf9\xba\xfd\x50\x05\x7d\x0a\xa0\x0f"
+	"\xc6\x10\x92\x0f\xfc\x0b\xbc\x05\x82\xff\x9c\xf8\x5e\xf4\xe4\xef"
+	"\x12\xf0\x49\xf0\xae\xf5\xf4\xfa\xd5\x03\xa7\x0a\x36\x11\x62\x12"
+	"\xf3\x11\x4f\x0b\xb7\x04\xe3\xf9\x88\xf1\x85\xeb\x7f\xe9\x88\xed"
+	"\x90\xf3\x3f\xfd\x6e\x04\x82\x0c\xe9\x0f\x27\x12\x4d\x0f\xba\x0b"
+	"\x11\x03\x89\xfd\x65\xf6\x6e\xf5\xa7\xf4\x36\xf9\x9c\xfb\x1e\x01"
+	"\x5e\x02\x8b\x05\x82\x06\xca\x09\x61\x0b\x50\x0c\xfb\x09\x08\x08"
+	"\x32\x07\x2e\xee\x76\xeb\x66\xdc\xef\xdc\x5e\xdd\x84\xea\x21\xf3"
+	"\x2c\x02\xb2\x0f\xfa\x19\xf8\x21\x2c\x20\x77\x1d\x5a\x0f\xd9\x03"
+	"\xb5\xf4\xe1\xef\x25\xe7\xe6\xea\x7e\xeb\x51\xf5\x3f\xfe\x63\x0c"
+	"\xd6\x15\x88\x1f\x22\x1f\x1a\x1c\x36\x12\x05\x06\xdb\xf9\x2d\xef"
+	"\xa6\xe8\x0f\xe4\x33\xe5\x22\xe8\x03\xf2\xa7\xfb\xb9\x09\x2b\x14"
+	"\xb4\x1c\xa6\x1d\xc8\x1a\xec\x0e\x1e\x03\xe3\xf3\x11\xe8\xb6\xe0"
+	"\x87\xdf\x38\xe4\xe6\xed\x7a\xfa\xfd\x05\x97\x10\x1c\x18\x58\x1a"
+	"\x1e\x18\xc7\x11\xef\x06\x48\xfc\xad\xf2\x69\xee\xf7\xee\x31\xf3"
+	"\x77\xf9\x5b\x00\xab\x04\x0b\x09\xb0\x0b\x3b\x0f\xf0\x0f\xe6\x0f"
+	"\x16\x0b\xef\x04\x0e\xfe\xe4\xf9\x99\xf2\xbb\xe3\x6d\xe2\x11\xde"
+	"\xa6\xe1\xeb\xe8\x53\xf6\x51\x01\xbc\x0e\x47\x19\xcd\x1e\xb8\x1f"
+	"\xe0\x19\x59\x11\xc6\x02\x8e\xf7\x26\xed\xbc\xe9\x8d\xe7\x26\xed"
+	"\x7a\xf3\x70\xff\x57\x0b\xd4\x18\xf3\x1f\xf5\x22\x82\x1d\x0f\x14"
+	"\x28\x06\x7a\xf9\x41\xee\x69\xe7\xb0\xe4\xc4\xe4\x1c\xea\xe5\xf1"
+	"\x29\xfd\x7c\x08\x9d\x14\x59\x1a\xcf\x1c\xd6\x16\x8c\x0e\x43\xfd"
+	"\x59\xf1\xd8\xe4\x54\xe0\xc1\xe1\x4c\xea\x8a\xf5\x6d\x02\x82\x0d"
+	"\x6d\x15\x48\x18\xbf\x16\x82\x10\xcd\x07\x01\xff\xaa\xf7\x28\xf4"
+	"\xba\xf2\x56\xf6\x02\xf9\x63\xfe\xe2\xff\x10\x05\xb4\x05\x7e\x0c"
+	"\x1f\x0c\x8d\x10\x6e\x09\x6b\x0d\x84\xf8\xe4\xe9\x78\xe1\xb8\xd9"
+	"\xd1\xde\xa9\xe5\x4b\xf8\xfa\xfd\xbe\x0f\xdd\x14\xad\x1e\xc2\x1a"
+	"\xaa\x1d\xf9\x10\xa8\x06\xdd\xf8\x75\xf0\xb0\xe8\xaf\xe8\x37\xed"
+	"\xd9\xf3\xe5\x00\x24\x0b\xa9\x16\x4b\x1a\x16\x1d\x27\x16\xee\x10"
+	"\xf7\x03\x67\xfc\xc9\xef\x34\xeb\x3b\xe5\x90\xe6\x42\xe9\xdb\xf2"
+	"\x96\xfc\x6e\x09\x94\x14\x54\x1b\x2d\x1d\xca\x18\x2d\x0f\x86\x01"
+	"\xf9\xf5\xd5\xe8\xd6\xe3\xac\xe0\xa5\xe5\x0b\xef\xdf\xfb\xad\x08"
+	"\x1a\x12\x94\x18\x79\x19\x90\x15\xe1\x0e\xb8\x04\x94\xfa\x9f\xf2"
+	"\x22\xef\x8b\xee\x4a\xf3\x1d\xf8\x32\xff\x7d\x02\x3c\x08\x1a\x0a"
+	"\x6b\x0e\xe3\x0e\x74\x0f\x94\x0b\xdf\x06\xba\xfe\x76\xfc\x3f\xf1"
+	"\x16\xe2\x54\xe2\x9a\xdd\x25\xe4\xe6\xe9\x12\xfc\xc8\x03\x4d\x13"
+	"\x27\x1c\x40\x21\xac\x1d\x4f\x19\x0e\x0e\x72\xfe\xbb\xf4\x9e\xeb"
+	"\x25\xe9\xc3\xe7\xe9\xee\x3c\xf4\xe8\x01\x57\x0c\x0d\x1a\x03\x1f"
+	"\xcb\x21\xe5\x1a\x83\x11\x62\x02\x9f\xf6\x45\xeb\x72\xe5\x25\xe4"
+	"\xa0\xe5\xb6\xeb\x07\xf4\x15\x00\x06\x0b\x2e\x17\xd3\x1c\xbd\x1e"
+	"\x1e\x19\xad\x0c\xae\xfa\x02\xed\x8a\xe1\x2e\xdf\xa5\xe2\x9b\xee"
+	"\x7e\xf9\xdf\x06\x5c\x0f\x35\x15\x87\x15\x8a\x14\xcd\x0d\x19\x07"
+	"\x8a\xfe\x1b\xf8\x6f\xf3\x7e\xf2\x13\xf5\x88\xf8\x20\xfe\x2c\x01"
+	"\x81\x05\x69\x06\x6a\x0b\x10\x0b\x59\x0f\xa8\x0a\xba\x0e\x8f\xf4"
+	"\xa9\xeb\x26\xde\xe4\xdb\x95\xde\x47\xeb\x10\xfd\x3a\x02\xe3\x11"
+	"\xcc\x13\x8a\x1b\x81\x15\x0a\x1b\xc2\x0b\x57\x05\x7d\xf6\xc8\xf1"
+	"\x15\xe8\x09\xeb\x40\xef\x2c\xf8\x8b\x03\x47\x0d\x89\x16\x94\x17"
+	"\xd7\x19\xbb\x12\x1d\x0f\x6c\x03\x48\xfe\xbc\xf1\x9e\xed\x72\xe5"
+	"\xb0\xe7\xfe\xe8\x3e\xf4\x7d\xfe\x76\x0b\x03\x15\xd6\x19\xbb\x19"
+	"\x8c\x14\x50\x0c\x73\x00\x7c\xf5\xde\xe9\x0c\xe4\x3e\xe1\x0c\xe9"
+	"\x00\xf2\x88\x00\x17\x0b\x40\x14\x66\x17\xd4\x16\x5f\x11\xa1\x0a"
+	"\x51\x00\x65\xf8\xfe\xf2\x99\xf1\xd5\xf2\xd7\xf7\xff\xfb\x54\x00"
+	"\x52\x03\xbc\x07\xfa\x09\xb7\x0d\xd0\x0d\xd5\x0b\xf9\x06\xf8\x05"
+	"\x96\xf8\xcd\xe6\x18\xe5\xa6\xdd\x61\xe3\x01\xe8\x87\xfa\x9c\xff"
+	"\x18\x0d\xdc\x15\x02\x1c\x67\x1a\x57\x18\x7d\x10\x9b\x00\x0c\xf8"
+	"\x7b\xee\xa5\xed\xce\xea\x12\xf4\x3c\xf7\xe2\x01\x5c\x08\xb7\x13"
+	"\xa4\x16\x20\x1a\xa2\x16\xba\x0f\x25\x05\x41\xfb\xe8\xf1\x8f\xea"
+	"\x97\xe9\xeb\xe8\xb2\xee\x1a\xf3\x0a\xfe\x13\x05\x73\x10\x5e\x15"
+	"\x5a\x1a\x5a\x16\xc8\x10\x53\x01\xf8\xf2\x49\xe7\x7e\xe1\xb1\xe4"
+	"\xe0\xec\xd6\xfb\x3b\x05\x77\x10\x20\x13\x5d\x16\x3d\x11\xce\x0d"
+	"\x63\x05\x75\xff\x92\xf7\xf9\xf4\x97\xf2\x3e\xf5\x1a\xf8\x39\xfc"
+	"\xe5\xff\x3e\x03\x2f\x06\x52\x08\x67\x0b\x19\x0d\xfe\x0a\x4e\xf8"
+	"\xcf\xf3\x37\xe4\x02\xe4\x6e\xe0\x29\xef\x9e\xf6\x8c\x04\x66\x11"
+	"\xf7\x17\x3e\x1c\x79\x18\x3d\x17\x9b\x07\x7a\x01\xe8\xf3\xf2\xf0"
+	"\x72\xe7\x65\xec\xfc\xee\x16\xfa\xdd\x03\x72\x10\x6f\x17\xc1\x18"
+	"\x3f\x17\xf2\x0e\xa3\x07\xe9\xfd\x6b\xf9\xf1\xf0\x6c\xef\x5b\xeb"
+	"\xf8\xec\x86\xee\x76\xf7\x9c\x00\xf9\x0a\xea\x13\xc7\x18\xdd\x18"
+	"\x44\x12\x00\x0a\x56\xfd\x98\xf2\x5f\xe8\xd2\xe4\x9f\xe6\x56\xee"
+	"\x40\xf9\x10\x05\x8c\x0e\xfa\x13\x76\x16\x3c\x13\x41\x0e\x6a\x05"
+	"\x91\xfe\xc4\xf6\x12\xf4\xe7\xf2\xed\xf5\x3c\xf8\x35\xfb\x8b\xfe"
+	"\x4f\x00\xfb\x03\x8f\x06\x7f\x0c\x4c\x0a\x03\x11\x6b\x02\x1a\xf7"
+	"\x16\xeb\xea\xe5\x41\xe3\x2c\xe6\xd5\xf4\x58\xf9\x5e\x06\xde\x0c"
+	"\xad\x18\xfb\x17\x48\x1d\x0e\x16\xec\x0c\x61\xff\x3f\xf5\xef\xec"
+	"\x8b\xe7\x98\xeb\xd4\xef\x5a\xfb\xbe\x03\x1f\x10\xba\x13\x72\x17"
+	"\x22\x14\xd4\x10\xed\x08\x30\x02\xfa\xf9\x08\xf2\x16\xec\x4b\xe8"
+	"\xb7\xe9\x33\xee\x8b\xf8\x6b\x02\x34\x0e\x50\x15\x06\x1a\x03\x18"
+	"\x0a\x13\x28\x08\x8b\xfc\x8d\xf0\x3c\xe8\xbe\xe5\x79\xe8\x2f\xf2"
+	"\xc0\xfb\x43\x08\x97\x0e\x2f\x15\xce\x12\x39\x10\x7f\x08\x4e\x03"
+	"\xab\xfc\x68\xf9\x6d\xf7\x64\xf6\x1c\xf7\x39\xf6\xb4\xf9\x70\xfb"
+	"\x62\x01\xec\x03\x3e\x0a\xfd\x0a\x38\x0f\x79\xfd\x67\xf8\xad\xed"
+	"\x57\xea\x5b\xe8\xa7\xed\x27\xf8\xad\xf9\x14\x08\x6b\x0b\x8c\x16"
+	"\x3c\x14\x19\x1b\xde\x10\x4a\x0a\xb2\xfe\x0a\xf7\x36\xef\xaa\xea"
+	"\x37\xef\x81\xf1\x13\xfd\x02\x04\xed\x0f\x35\x11\x6a\x15\x8c\x10"
+	"\xfe\x0c\xb7\x05\x11\x00\xaa\xf9\x14\xf4\x1a\xf0\x1f\xec\x2b\xed"
+	"\x63\xef\xa3\xf8\x70\x00\x56\x0c\x4f\x13\xcb\x18\x78\x17\x8b\x12"
+	"\x73\x07\xba\xfc\xec\xf0\x29\xea\x04\xe8\x0b\xec\xa1\xf4\x02\xfe"
+	"\xd7\x08\x15\x0e\x0d\x13\x11\x10\x86\x0d\x16\x06\xd9\x01\x73\xfb"
+	"\x53\xfa\x21\xf8\x63\xf9\x05\xf8\xb5\xf9\x50\xf9\x7a\xfb\x22\xfe"
+	"\x80\x03\x36\x06\x58\x0b\x5b\x09\x91\xf9\xea\xf6\x4f\xeb\x62\xed"
+	"\x1f\xe9\x0a\xf7\x02\xfa\xc8\x01\x65\x09\x42\x0f\x5d\x14\x87\x13"
+	"\x8b\x17\x5e\x0c\x07\x08\x97\xfb\xc1\xf7\x33\xee\xf5\xee\x24\xf1"
+	"\xf1\xf6\xb3\xff\x58\x07\x8d\x0f\xb3\x0f\xf9\x11\xf2\x0c\x9b\x09"
+	"\x78\x02\xff\xfd\xe6\xf7\x68\xf3\x0b\xf0\x71\xed\x21\xef\x81\xf2"
+	"\x71\xfa\x95\x01\xef\x0b\xd2\x11\xf5\x16\xa0\x15\x0b\x10\x85\x06"
+	"\xf3\xfb\x63\xf2\xfc\xec\x4c\xec\xde\xf0\xe0\xf7\xb5\x00\x7d\x07"
+	"\x12\x0d\xe6\x0e\x65\x0d\xf8\x09\x81\x05\x29\x01\x03\xfd\x78\xfb"
+	"\x9f\xf9\xe0\xf9\xb2\xf8\x10\xf9\x53\xf8\xef\xfb\xc3\xfc\x5f\x02"
+	"\x92\x04\x6f\x0d\xd7\xfd\x92\xf9\x22\xf3\xb1\xed\x5d\xed\x12\xf0"
+	"\x2d\xfe\xd3\xfb\x57\x0a\x50\x0b\xa7\x13\x79\x0f\x11\x14\x5a\x0e"
+	"\xf5\x05\xdd\x00\x9f\xf8\xa6\xf5\x56\xed\x5a\xf3\x33\xf4\xac\xfd"
+	"\x86\x04\x32\x0e\x19\x11\xf3\x0f\x09\x0f\x6f\x08\xb6\x04\xe1\xfd"
+	"\x53\xfb\x63\xf5\xd7\xf2\xb7\xef\x2c\xef\xcb\xf1\x53\xf7\xee\xff"
+	"\x71\x07\xc0\x0f\x8e\x13\x04\x15\x6a\x0f\x09\x09\xd3\xff\x89\xf7"
+	"\x68\xf1\x2b\xef\x99\xf0\xc5\xf4\xec\xfb\xaf\x02\x7e\x08\x44\x0d"
+	"\x07\x0e\x43\x0c\x45\x08\xf1\x03\xec\xfe\xaa\xfb\xdd\xf9\x34\xfa"
+	"\x37\xf9\xc5\xf8\x0d\xf9\xe6\xf9\x69\xfb\x86\xff\x6b\x04\xa6\x09"
+	"\x0a\x0a\xf9\xfd\xe7\xf9\x3b\xf0\x96\xed\x67\xeb\xe7\xf2\x9c\xf9"
+	"\x8a\xfe\x63\x08\x42\x0c\x00\x12\xe8\x11\x28\x15\x5d\x0e\xce\x08"
+	"\x88\x01\x3c\xfa\x6d\xf3\xdd\xee\xb3\xf1\xe7\xf3\x1a\xfc\xd5\x03"
+	"\xf5\x0b\xbb\x0e\xb6\x0f\x1f\x0f\xc0\x0a\xa4\x07\xe2\x01\x03\xfe"
+	"\x74\xf7\x6e\xf3\xb7\xee\x5b\xed\x6d\xef\xbc\xf4\x49\xfc\xaf\x04"
+	"\x65\x0d\x96\x12\x86\x13\x35\x10\xe3\x0a\x75\x02\x42\xfb\x05\xf5"
+	"\xd0\xf2\xda\xf1\xb0\xf5\x11\xfa\x0b\x00\x8b\x04\x76\x09\xe6\x09"
+	"\x20\x0a\xb7\x07\xac\x05\xd8\x01\x3b\xff\x89\xfc\xe8\xfa\xc7\xf9"
+	"\xbe\xf8\xf7\xf8\x11\xf9\x2c\xfb\x7a\xfd\xa6\x02\x75\x05\x13\x0f"
+	"\xdf\xfc\xca\xfd\x6d\xf3\xfe\xef\x26\xec\x8b\xef\xf6\xfb\x8f\xf7"
+	"\xda\x07\xf4\x07\x76\x12\xac\x0e\x0c\x15\x6e\x0f\x21\x08\xaa\x04"
+	"\x65\xfc\xde\xf9\xbe\xf0\x84\xf4\xb2\xf2\x98\xf8\xda\xfe\x2f\x06"
+	"\x94\x0c\xa6\x0c\x86\x10\xdd\x0b\x50\x0a\x3e\x04\xcb\x00\x4f\xfc"
+	"\x01\xf6\xd4\xf3\xb8\xee\xd4\xf0\x9e\xf0\x57\xf8\x13\xff\x1a\x07"
+	"\x18\x0d\x07\x10\xc3\x10\x30\x0c\x48\x08\xd4\x00\xac\xfc\x5b\xf7"
+	"\x58\xf7\x03\xf7\x50\xf9\xbf\xfb\x6c\xfe\x5c\x02\x64\x03\x38\x06"
+	"\xb3\x06\x87\x06\x6a\x05\x2b\x03\x3f\x01\x71\xfe\xec\xfc\xe0\xf9"
+	"\x3d\xf9\xe2\xf8\xa6\xf9\x8c\xfb\x3e\xff\x8b\x07\x61\xf8\xfa\xfb"
+	"\x27\xf5\xce\xf3\x74\xf0\x16\xf5\x63\xff\xf1\xfb\x6e\x0b\x2b\x0b"
+	"\x79\x12\xfe\x0c\x79\x10\x79\x0a\xe8\x02\x98\x01\x03\xfc\x8f\xfa"
+	"\xfe\xf2\x4b\xf6\x0c\xf6\xb5\xf9\x88\x01\xf5\x07\x20\x0e\xce\x0c"
+	"\x22\x10\x82\x0a\x5e\x07\xa9\x02\x73\xfe\x22\xfb\x84\xf5\x9d\xf4"
+	"\x71\xef\x37\xf1\xe6\xf1\x06\xf9\x4a\xfe\x4f\x05\xcd\x0b\x08\x0f"
+	"\x24\x0f\x34\x0d\x50\x09\x7a\x03\xab\xfe\x4f\xfb\x1e\xf9\xd2\xf7"
+	"\x1a\xf8\x9e\xf9\x45\xfb\x4d\x00\xd8\x02\xc8\x06\x01\x08\x21\x08"
+	"\xb5\x06\x6a\x03\xfd\x01\x69\xfe\xbd\xfd\xf3\xf8\x84\xf9\xa5\xf6"
+	"\xfb\xf8\x02\xf8\xae\x03\x83\xf7\x95\xf6\x9c\xf7\x7d\xf2\xa5\xf5"
+	"\x86\xf3\x2e\x04\x76\xfd\x7c\x0a\xbd\x0d\xfd\x10\xeb\x0e\x1c\x0d"
+	"\x54\x0d\xba\x01\xb9\x01\xa7\xfc\x7b\xfb\x5f\xf5\x97\xf4\x25\xf7"
+	"\x85\xf6\xe7\xfe\x92\x04\x88\x0c\x91\x0c\x8c\x0e\x59\x0d\xe3\x06"
+	"\x59\x05\x6c\xff\x83\xfe\x24\xf7\x76\xf6\xee\xf1\x7a\xf0\x9d\xf1"
+	"\xc3\xf5\x33\xfc\x8f\x00\xd2\x08\xd8\x0c\xfa\x0e\x67\x0d\x6d\x0c"
+	"\xac\x07\xa3\x02\x4b\xff\xfa\xfb\x11\xfa\x43\xf7\x03\xf9\x1e\xf8"
+	"\x9a\xfc\xef\xfe\xee\x03\xb2\x06\x98\x07\x40\x08\xdc\x05\x0e\x04"
+	"\xf6\x00\x38\xff\x8f\xfc\x7e\xfa\x58\xf9\x92\xf8\x71\xfa\x4d\xfb"
+	"\x2a\xef\xa8\xf2\x50\xed\x53\xf0\x88\xf0\x13\xfa\x5c\x03\x6e\x05"
+	"\xe2\x12\xf3\x13\x14\x18\xcd\x11\x02\x11\xc2\x08\x6a\x01\xb7\xfe"
+	"\xfc\xf9\xb1\xf7\x60\xf2\x63\xf3\x9b\xf3\xfc\xf6\x82\xff\x7a\x06"
+	"\x03\x0e\xe2\x0e\x79\x11\xaf\x0c\x7a\x07\x62\x03\xc5\xfe\xb2\xfb"
+	"\xf7\xf5\x9d\xf4\xd3\xef\x87\xef\x1f\xf1\xcd\xf5\xde\xfb\xd3\x02"
+	"\x00\x0b\x30\x0f\xa1\x10\x9e\x0f\xe2\x0c\x83\x07\xc9\x03\x21\x00"
+	"\xdf\xfc\x17\xf9\xa5\xf7\x8c\xf6\x7e\xf7\x2f\xfb\x19\xff\x9b\x03"
+	"\x0f\x07\x8b\x08\x72\x08\x51\x06\x3a\x04\x7f\x01\x84\xfe\x66\xfc"
+	"\xb7\xfa\x76\xf9\x99\xf9\x36\xfa\x48\xed\x03\xef\x59\xea\x05\xeb"
+	"\x87\xed\xab\xf5\xb4\x01\x91\x04\x0a\x13\xb3\x16\x09\x1b\x15\x17"
+	"\xf5\x14\x79\x0d\x4c\x04\x4e\x00\xe4\xfa\x51\xf7\xa3\xf2\xc0\xf1"
+	"\x16\xf2\x48\xf3\x26\xfb\x30\x02\xbf\x09\x78\x0d\xe1\x10\xd7\x0f"
+	"\xd9\x0a\xff\x06\x21\x01\x66\xfd\x1d\xf7\x2d\xf5\x5b\xf1\x8c\xef"
+	"\x2f\xf0\xa3\xf3\x54\xf8\xac\xfe\x54\x07\x66\x0d\xeb\x10\x2e\x12"
+	"\xf1\x0f\x89\x0b\x53\x06\x7b\x02\xbf\xfe\xa6\xfa\xac\xf8\x44\xf6"
+	"\x4d\xf6\xc4\xf7\x03\xfc\x19\x00\xfc\x04\x01\x08\x63\x09\x32\x08"
+	"\xd5\x05\x4c\x03\xbd\xff\x0d\xfd\xc0\xfb\x4a\xf9\xeb\xf9\x02\xf8"
+	"\x02\xed\x97\xed\x3d\xe9\xd9\xea\x2b\xed\x5a\xf6\xb4\x00\x74\x05"
+	"\x16\x12\x0e\x16\x8d\x19\xee\x16\xd3\x14\x8d\x0e\x5e\x06\xd8\x02"
+	"\x44\xfd\x9b\xf8\x34\xf4\x64\xf2\xa1\xf2\x05\xf3\x2b\xfa\x87\xff"
+	"\x4c\x06\xc1\x09\x78\x0d\x81\x0d\x02\x0a\x6a\x08\xe8\x03\x3b\x00"
+	"\x27\xfa\x47\xf7\x5d\xf3\x9d\xf0\xaa\xf1\xc6\xf3\x1f\xf7\x8f\xfc"
+	"\xbc\x03\xb0\x09\x55\x0d\x27\x11\xb1\x10\x84\x0e\x81\x0a\xc3\x06"
+	"\xb6\x01\x78\xfc\x1e\xf9\x23\xf6\x1b\xf5\xcf\xf6\x86\xf9\x46\xfe"
+	"\xe2\x01\x6b\x06\x02\x08\x30\x08\xf2\x05\x6a\x04\x73\x01\x48\xfe"
+	"\x77\xfc\x26\xfc\xc2\xfa\x90\xec\x57\xee\x2c\xe7\x65\xe7\xd0\xe8"
+	"\x96\xf1\xfd\xfb\x40\x00\x14\x10\x38\x14\x61\x19\x90\x18\x10\x18"
+	"\xd9\x11\xb1\x09\xab\x06\x80\x01\xa0\xfb\x60\xf7\x6a\xf4\xec\xf2"
+	"\xe9\xf0\xf1\xf6\x76\xfb\x01\x01\x8f\x05\x2e\x0a\x35\x0b\x56\x09"
+	"\x68\x09\xa0\x05\x08\x03\x7d\xfe\xe6\xfb\xd6\xf6\x95\xf3\xf2\xf1"
+	"\x20\xf3\x8e\xf4\xf3\xf8\xc6\xff\x67\x05\xb6\x09\xe3\x0d\xa2\x0f"
+	"\xb3\x0e\x46\x0d\x51\x0b\xab\x07\xdd\x02\xa0\xfe\x03\xfa\x04\xf6"
+	"\x98\xf5\xe1\xf5\x95\xf9\x7b\xfd\xdc\x01\x4d\x05\x66\x06\x0f\x07"
+	"\xc7\x04\xd9\x02\xf8\xfe\x0e\xfe\xf7\xfb\x88\xfd\x40\xf2\x44\xef"
+	"\x60\xeb\x4a\xe6\x76\xe9\xb1\xec\x57\xf9\x8d\xfd\xce\x0a\xe7\x12"
+	"\x4a\x16\x71\x18\x2b\x16\x59\x13\xac\x0b\x47\x08\x3e\x05\x37\xff"
+	"\xc5\xfb\x0d\xf7\x43\xf5\x61\xf2\x89\xf5\x10\xfa\x73\xfd\x69\x02"
+	"\x0a\x05\xd0\x07\x3a\x06\x18\x07\x6f\x05\xd7\x03\x5f\x01\x70\xfe"
+	"\xee\xfa\x5f\xf7\x1e\xf5\x7c\xf5\xd2\xf4\x31\xf8\x0a\xfd\xdb\x01"
+	"\xc0\x06\xa1\x0a\xe8\x0d\x23\x0d\xc1\x0d\x36\x0c\xbc\x09\x2a\x06"
+	"\x08\x02\xd9\xfd\x17\xf9\x27\xf8\xad\xf6\x4d\xf8\xa2\xfa\xaa\xfd"
+	"\xbe\x00\x26\x02\xa6\x04\xd6\x03\x75\x03\xa7\x00\x92\xff\x56\xfe"
+	"\xbf\xfe\xe2\xf3\x9a\xf2\xf5\xed\xb2\xe8\x01\xea\xcd\xeb\xf3\xf5"
+	"\xdf\xf8\x38\x07\x48\x0f\xaa\x14\xd3\x17\x4f\x17\x9a\x13\xb4\x0c"
+	"\xab\x09\x6e\x06\x75\x01\x37\xfe\x7a\xfa\x22\xf7\x5e\xf3\x95\xf4"
+	"\x93\xf7\x8b\xfa\xb1\xff\x63\x03\x35\x06\x8b\x05\x90\x06\xf3\x04"
+	"\xc2\x03\xf1\x01\x37\x00\x14\xfd\xfb\xf9\xb1\xf7\x58\xf6\x85\xf4"
+	"\x8d\xf7\xca\xfb\x50\x00\xee\x05\x6a\x0a\x81\x0d\xf2\x0c\xc1\x0d"
+	"\xd4\x0b\x7a\x09\x9c\x06\x5d\x03\x5b\xff\xd2\xfa\x0f\xfa\x84\xf7"
+	"\x1c\xf8\xaf\xf9\x60\xfc\xee\xfe\x4c\x00\xe0\x02\x93\x02\xf6\x01"
+	"\x8c\x00\x4f\xff\x65\xff\xfb\xfd\xa4\xf4\x98\xf4\xcb\xee\xef\xea"
+	"\xd1\xeb\x71\xee\x47\xf5\x2e\xf9\x47\x06\x65\x0d\xd4\x12\xed\x16"
+	"\xf5\x16\x0c\x13\xd2\x0d\xb0\x0a\xd1\x06\xb7\x01\xd7\xfe\x6e\xfb"
+	"\xef\xf7\x25\xf5\x12\xf6\x46\xf7\x20\xf9\x3b\xfd\x97\x00\x3e\x03"
+	"\x0b\x04\xf8\x05\xdc\x04\x06\x04\x5c\x02\x87\x00\x77\xfd\x38\xfb"
+	"\x05\xf9\x9d\xf6\x72\xf6\x23\xf8\xc7\xfb\x8f\xff\xc6\x05\xab\x0a"
+	"\x71\x0d\x7d\x0e\xc1\x0e\x2e\x0c\x11\x09\xac\x05\x6a\x02\xc8\xfe"
+	"\xf3\xfb\x6f\xfb\x4f\xf9\x82\xf9\xf5\xf9\x2a\xfb\x6e\xfc\x2f\xfe"
+	"\xbc\x00\x45\x01\x3e\x01\xb0\x00\xc9\xff\xfc\xff\x1d\xf7\xa2\xf4"
+	"\x31\xf2\xe3\xec\xfc\xec\x58\xee\x6b\xf4\x7c\xf6\xff\xff\xcf\x08"
+	"\x2e\x0e\x4f\x13\x74\x16\xda\x14\x35\x10\xf1\x0c\xa0\x09\x93\x04"
+	"\xdc\x00\x3a\xfe\xd3\xfa\xc8\xf7\x3f\xf7\x62\xf8\x1d\xf8\xb6\xfa"
+	"\xc7\xfd\x1e\x00\xfa\x00\x3b\x03\xb5\x03\x37\x03\xaa\x02\xe2\x01"
+	"\xd2\xff\x82\xfd\x31\xfb\x6a\xf8\x45\xf7\x99\xf7\xb8\xfa\x64\xfe"
+	"\xde\x02\x33\x08\x8a\x0b\x1f\x0d\x59\x0d\x86\x0c\x6b\x0a\x37\x07"
+	"\x83\x04\xa9\x01\xcd\xfe\xea\xfc\xe2\xfb\xba\xfa\x92\xfa\x53\xfa"
+	"\x5e\xfb\xea\xfb\x9a\xfd\xc7\xfe\xed\xff\xf3\xff\x8e\x02\x8d\xfd"
+	"\x86\xf6\xe0\xf5\x8a\xef\x12\xee\x3a\xed\x17\xf2\x7d\xf5\x1e\xfa"
+	"\x96\x03\xbc\x08\x13\x0d\x89\x11\x43\x13\x73\x11\x1d\x0f\xac\x0d"
+	"\x26\x0a\xd8\x04\x5a\x01\xa5\xfd\x15\xfa\x95\xf7\xde\xf8\x3a\xf9"
+	"\xc9\xfa\x48\xfc\x80\xfe\xf3\xfe\x91\xff\xd5\x00\x3a\x01\x63\x01"
+	"\x3e\x01\x19\x01\x21\xff\x9c\xfd\x3a\xfb\x03\xfa\x17\xf9\x59\xfa"
+	"\x23\xfd\x77\x00\xb5\x03\x7a\x07\xe8\x09\x40\x0b\x25\x0b\x2d\x0b"
+	"\x8b\x09\x65\x07\x7d\x05\x76\x02\x9f\x00\x54\xfe\x1f\xfd\x8d\xfc"
+	"\xbd\xfb\x5d\xfb\x6a\xfb\x44\xfb\xae\xfb\xee\xfb\xd6\xfc\xc7\xfd"
+	"\x44\xff\x8f\xf8\xe3\xf7\x36\xf5\x1d\xf1\x74\xf1\xac\xf1\x48\xf6"
+	"\x42\xf7\x0b\xff\xfc\x04\xfd\x08\x4f\x0d\x43\x10\xb2\x0f\x73\x0d"
+	"\x2d\x0c\xa5\x0a\x25\x07\xc0\x04\x43\x02\x50\xff\x59\xfc\x06\xfb"
+	"\xf3\xfa\xf2\xf9\x8e\xfb\xab\xfc\xe4\xfd\xe2\xfd\x51\xff\x71\xff"
+	"\xef\xfe\x1f\xff\x48\xff\xc0\xfe\xbe\xfd\x6a\xfd\xcf\xfc\xa2\xfb"
+	"\x32\xfc\x86\xfd\x9c\xff\x09\x02\x63\x05\xee\x07\x07\x09\xed\x09"
+	"\x5d\x09\x3a\x08\xa8\x06\x9f\x05\x4d\x04\x97\x02\xc8\x01\xfe\xff"
+	"\xa3\xfe\xab\xfd\xb6\xfc\x5a\xfc\xba\xfb\x13\xfc\xee\xfb\xd2\xfb"
+	"\x2f\xfc\x03\xfd\xa1\xf6\x04\xf6\xeb\xf3\xf4\xf0\xbf\xf1\x29\xf3"
+	"\xc2\xf7\x83\xf9\x3f\x00\xb6\x05\x72\x09\xa6\x0c\x47\x0f\xb8\x0e"
+	"\xa7\x0c\xbd\x0a\x37\x09\xc5\x05\x66\x03\x1d\x01\xcd\xfe\x7e\xfc"
+	"\x9d\xfb\xe3\xfb\x82\xfb\xd6\xfc\xcc\xfd\x08\xff\xae\xfe\x71\xff"
+	"\x3d\xff\x19\xff\x8d\xfe\xcd\xfe\xe6\xfd\xdf\xfc\xa0\xfc\x00\xfc"
+	"\x32\xfc\xdf\xfc\x0a\xff\x46\x01\x88\x03\xd2\x05\x3d\x07\xb8\x07"
+	"\xdf\x07\x78\x07\x2a\x07\x4d\x06\x85\x05\xa1\x04\x2e\x03\x4a\x02"
+	"\x83\x00\x6e\xff\x65\xfe\x83\xfd\x36\xfd\xe7\xfc\x80\xfc\xad\xfc"
+	"\x10\xfc\x03\xfd\x10\xf9\x00\xf5\x7c\xf4\xc9\xef\x5d\xf0\xbe\xf0"
+	"\xdf\xf4\x34\xf8\x25\xfd\x57\x04\xda\x07\xf7\x0b\xc9\x0e\x88\x0f"
+	"\x30\x0e\xde\x0c\xdc\x0a\x2a\x08\x80\x04\x3a\x02\x8a\xfe\x22\xfc"
+	"\x81\xfa\x30\xfa\x09\xfa\x1c\xfb\x1c\xfd\x10\xfe\x54\xff\x35\x00"
+	"\x8a\x00\x0b\x00\xe4\xff\x46\xff\x62\xfe\x70\xfd\xdf\xfc\xc9\xfb"
+	"\xcc\xfb\x2d\xfc\xca\xfd\xde\xff\x66\x02\xb6\x04\x3b\x06\x28\x07"
+	"\x49\x07\x02\x07\x6d\x06\x1a\x06\xaf\x05\x4b\x05\x34\x04\x7b\x03"
+	"\xca\x01\x70\x00\x55\xff\x3a\xfe\xae\xfd\xa3\xfd\x53\xfd\x99\xfd"
+	"\x91\xfd\xe3\xfd\xd4\xf8\xc7\xf5\x76\xf3\x61\xee\xce\xee\x27\xef"
+	"\x7d\xf3\x27\xf7\xb6\xfd\x50\x04\x36\x08\x4f\x0c\x8c\x0e\xbf\x0e"
+	"\x1c\x0e\x62\x0d\xdc\x0b\x5b\x09\x6d\x06\x75\x03\x88\xff\x45\xfc"
+	"\xf0\xf9\xed\xf8\xfb\xf7\x72\xf9\xa8\xfa\x5c\xfc\xed\xfd\x81\xff"
+	"\x64\x00\xa6\x00\xba\x00\x1f\x00\xa0\xff\x1f\xff\xaa\xfe\x11\xfe"
+	"\xfe\xfd\xf0\xfd\x9e\xfe\xd3\xff\x58\x01\xb4\x02\x05\x04\xd8\x04"
+	"\x93\x05\x71\x05\xa0\x05\xac\x05\xa9\x05\x94\x05\x3b\x05\xb8\x04"
+	"\x3d\x03\x7c\x01\x2f\x00\x30\xfe\x70\xfd\xd4\xfc\x94\xfc\xcd\xfc"
+	"\x71\xfd\x5b\xfc\xba\xf7\xb4\xf6\x88\xf2\x0b\xf0\xe9\xef\x64\xf1"
+	"\x1b\xf5\x16\xf9\x29\x00\x1a\x05\x44\x09\x86\x0c\xad\x0d\x39\x0d"
+	"\xa0\x0c\xca\x0b\x80\x0a\x54\x08\x55\x06\x71\x03\x0e\x00\xdd\xfc"
+	"\xc3\xfa\x26\xf9\x67\xf8\x1c\xf9\x2e\xfa\x8d\xfb\xbb\xfc\x2f\xfe"
+	"\xb8\xfe\x28\xff\x4b\xff\x85\xff\x68\xff\x9f\xff\xb8\xff\xe3\xff"
+	"\x0d\x00\x45\x00\xaa\x00\x05\x01\xc0\x01\x7e\x02\xf4\x02\xad\x03"
+	"\x45\x04\x59\x04\x94\x04\x97\x04\x8c\x04\x95\x04\xbf\x04\x67\x04"
+	"\x71\x03\x8e\x02\x4d\x01\xab\xff\x50\xfe\x55\xfd\x6c\xfc\x27\xfc"
+	"\x79\xfb\x85\xf7\x5f\xf6\xaf\xf3\x48\xf1\x7b\xf1\x4b\xf2\x66\xf5"
+	"\xa1\xf8\xa7\xfe\xa8\x03\xba\x07\x70\x0b\x1f\x0d\xcd\x0c\x54\x0c"
+	"\x5a\x0b\xe1\x09\x01\x08\x19\x06\xe7\x03\x33\x01\x81\xfe\x5a\xfc"
+	"\x97\xfa\x50\xf9\x5c\xf9\xf3\xf9\x1d\xfb\x36\xfc\x9f\xfd\x28\xfe"
+	"\x35\xfe\x7a\xfe\x67\xfe\x64\xfe\xfb\xfe\xb2\xff\x49\x00\xd8\x00"
+	"\x4a\x01\x7f\x01\x98\x01\xa4\x01\x16\x02\x3c\x02\xa0\x02\x8f\x03"
+	"\xe3\x03\x70\x04\x85\x04\x88\x04\x0e\x04\xac\x03\xac\x03\xdd\x02"
+	"\xa7\x02\xe3\x01\x34\x01\x09\x00\xf1\xfe\xc3\xfd\x11\xfd\x1d\xfa"
+	"\x20\xf7\xc0\xf5\x2c\xf2\x69\xf1\x8e\xf1\x88\xf3\x51\xf6\x91\xfa"
+	"\x11\x00\x0e\x04\xc2\x07\xe5\x0a\x21\x0c\x07\x0c\xfa\x0b\x29\x0b"
+	"\xb8\x09\xd4\x07\x17\x06\x64\x03\xb6\x00\x3e\xfe\x33\xfc\x10\xfa"
+	"\x18\xf9\x40\xf9\xa5\xf9\xa4\xfa\x14\xfc\x39\xfd\xd2\xfd\x6a\xfe"
+	"\xc1\xfe\xfb\xfe\x22\xff\xf1\xff\x72\x00\x30\x01\xb0\x01\x2f\x02"
+	"\xea\x01\x95\x01\x32\x01\xc5\x00\xd2\x00\x1a\x01\x13\x02\xfb\x02"
+	"\xea\x03\x96\x04\x1a\x05\xc9\x04\x87\x04\xd6\x03\x26\x03\x6c\x02"
+	"\xd3\x01\x10\x01\x1d\x00\xef\xfe\xa4\xfd\x41\xfa\x94\xf7\x40\xf5"
+	"\x5c\xf2\xea\xf1\xfb\xf1\x61\xf4\x22\xf7\x4a\xfb\xef\xff\x9d\x03"
+	"\x1d\x07\x71\x09\x62\x0a\xfa\x0a\xc5\x0a\x75\x0a\x85\x09\x1d\x08"
+	"\xb6\x06\x40\x04\x00\x02\x6f\xff\x21\xfd\x2e\xfb\xdc\xf9\x6d\xf9"
+	"\x8d\xf9\x23\xfa\x19\xfb\xf0\xfb\xb6\xfc\x42\xfd\xd9\xfd\x45\xfe"
+	"\x08\xff\xed\xff\x0c\x01\xfc\x01\xd2\x02\x61\x03\x22\x03\x9c\x02"
+	"\xab\x01\xcf\x00\x19\x00\xd4\xff\x13\x00\xc6\x00\xb5\x01\xba\x02"
+	"\x65\x03\xf6\x03\x06\x04\xc4\x03\x4b\x03\x16\x03\x8e\x02\x3d\x02"
+	"\xb2\x01\x0b\x01\x0d\xff\x92\xfb\x4f\xf9\x9a\xf5\x13\xf3\x12\xf2"
+	"\x8b\xf2\x78\xf4\x6a\xf7\x04\xfc\x02\x00\x75\x03\x8a\x06\x58\x08"
+	"\xd2\x08\x5b\x09\x87\x09\x44\x09\xb7\x08\xfe\x07\x98\x06\x79\x04"
+	"\x36\x02\xf7\xff\x88\xfd\xc5\xfb\xe2\xfa\x3d\xfa\x81\xfa\x05\xfb"
+	"\xcb\xfb\x58\xfc\xda\xfc\x63\xfd\x8c\xfd\xfe\xfd\xa4\xfe\x82\xff"
+	"\x7c\x00\x7b\x01\x5e\x02\xe7\x02\xea\x02\x99\x02\xfb\x01\x31\x01"
+	"\x91\x00\x17\x00\x44\x00\xb2\x00\x64\x01\x39\x02\xad\x02\xf9\x02"
+	"\xd1\x02\x4d\x02\xef\x01\xae\x01\x80\x01\xad\x01\xc0\x01\x91\x01"
+	"\x65\xff\x5c\xfd\xa2\xfa\xf6\xf6\x2a\xf5\xcf\xf3\x53\xf4\xff\xf5"
+	"\x37\xf9\x08\xfd\x2f\x00\x71\x03\x99\x05\xa0\x06\x79\x07\x14\x08"
+	"\x8a\x08\xd6\x08\xd8\x08\x52\x08\xe9\x06\xee\x04\x74\x02\x9b\xff"
+	"\xff\xfc\x2e\xfb\xfa\xf9\xc6\xf9\x3f\xfa\x20\xfb\xef\xfb\xa0\xfc"
+	"\x12\xfd\x63\xfd\xb5\xfd\x41\xfe\x08\xff\x09\x00\x32\x01\x16\x02"
+	"\xaf\x02\xd1\x02\x75\x02\xb8\x01\xf9\x00\x60\x00\x24\x00\x52\x00"
+	"\xe0\x00\x98\x01\x3b\x02\xa1\x02\xdc\x02\xad\x02\x3f\x02\xfb\x01"
+	"\xba\x01\x88\x01\x8e\x01\x92\x01\xe5\x00\xb0\xfe\xae\xfc\xf2\xf9"
+	"\xae\xf6\xd0\xf4\xca\xf3\x57\xf4\x1b\xf6\xad\xf9\xcd\xfd\x67\x01"
+	"\xc5\x04\xe2\x06\x98\x07\xd0\x07\xcb\x07\xbe\x07\xc7\x07\xe2\x07"
+	"\xf3\x07\x44\x07\xfd\x05\x28\x04\x7d\x01\x9e\xfe\x2c\xfc\x47\xfa"
+	"\x71\xf9\x68\xf9\x33\xfa\x1e\xfb\xee\xfb\x91\xfc\xc0\xfc\xff\xfc"
+	"\x58\xfd\x39\xfe\x90\xff\x2b\x01\xb8\x02\xe0\x03\x28\x04\x93\x03"
+	"\x72\x02\xe5\x00\x91\xff\xd2\xfe\xbe\xfe\x51\xff\x33\x00\x50\x01"
+	"\x3e\x02\x8f\x02\x92\x02\x29\x02\x8e\x01\x1b\x01\xcd\x00\xe7\x00"
+	"\x15\x01\x28\x01\xf0\x00\x0f\xff\x50\xfd\x2b\xfb\x83\xf8\x24\xf7"
+	"\x66\xf6\x17\xf7\x8f\xf8\x2b\xfb\x47\xfe\xcd\x00\x2e\x03\xf6\x04"
+	"\xb5\x05\x2e\x06\x9a\x06\xd7\x06\xf2\x06\xe5\x06\xa0\x06\xa7\x05"
+	"\x38\x04\x8f\x02\x9e\x00\x9c\xfe\x28\xfd\x3b\xfc\xbf\xfb\xce\xfb"
+	"\x24\xfc\x71\xfc\xa9\xfc\xd9\xfc\x15\xfd\x5c\xfd\x09\xfe\x20\xff"
+	"\x54\x00\x8c\x01\x81\x02\xed\x02\xa2\x02\xfa\x01\x1d\x01\x1e\x00"
+	"\x69\xff\x3c\xff\x9c\xff\x1b\x00\xd6\x00\xa1\x01\xd4\x01\xdd\x01"
+	"\x02\x02\xa8\x01\x89\x01\x56\x01\x8f\x01\x71\x00\xc9\xfe\xc3\xfd"
+	"\xeb\xfa\xf4\xf8\x60\xf7\xbc\xf6\x0a\xf7\x7e\xf8\x9b\xfb\x6f\xfe"
+	"\x63\x01\x20\x04\x8f\x05\x16\x06\x54\x06\x46\x06\x2f\x06\x42\x06"
+	"\xa2\x06\xa7\x06\x3a\x06\x5f\x05\xc4\x03\x68\x01\x13\xff\xde\xfc"
+	"\x2f\xfb\x56\xfa\x6a\xfa\x28\xfb\x24\xfc\x39\xfd\x02\xfe\x55\xfe"
+	"\x63\xfe\x71\xfe\xa3\xfe\x3c\xff\x38\x00\x65\x01\x7e\x02\x11\x03"
+	"\x19\x03\x64\x02\x1b\x01\xdc\xff\xb4\xfe\x2b\xfe\x4d\xfe\xf2\xfe"
+	"\x15\x00\xf9\x00\xb4\x01\x07\x02\xda\x01\x8f\x01\x3b\x01\x1d\x01"
+	"\x1d\x01\x4e\x01\xa6\x01\x20\x01\x21\xff\xb6\xfd\x31\xfb\x84\xf8"
+	"\x37\xf7\xa3\xf6\x80\xf7\x2d\xf9\x5f\xfc\x8b\xff\x0e\x02\x75\x04"
+	"\xb8\x05\xcf\x05\xe0\x05\xdc\x05\xc0\x05\xb8\x05\xed\x05\xda\x05"
+	"\x1d\x05\x0a\x04\x77\x02\x4c\x00\x38\xfe\xa2\xfc\x71\xfb\x07\xfb"
+	"\x55\xfb\x10\xfc\xc6\xfc\x8e\xfd\x29\xfe\x74\xfe\xb6\xfe\x3f\xff"
+	"\xdb\xff\x9f\x00\xa3\x01\x78\x02\xdb\x02\xb2\x02\x1b\x02\x07\x01"
+	"\xcb\xff\xb2\xfe\x15\xfe\xfa\xfd\x77\xfe\x73\xff\x66\x00\x38\x01"
+	"\xc0\x01\xf3\x01\xc8\x01\xc5\x01\xc1\x01\xcb\x01\x04\x02\x4a\x02"
+	"\xbc\x01\x0d\x00\x6e\xfe\xdc\xfb\x38\xf9\x79\xf7\xa9\xf6\x15\xf7"
+	"\xa2\xf8\x6f\xfb\x58\xfe\xf1\x00\x23\x03\x52\x04\xa1\x04\xda\x04"
+	"\x0f\x05\x62\x05\xe5\x05\x71\x06\xa5\x06\x1b\x06\xfa\x04\x3a\x03"
+	"\xdf\x00\xa3\xfe\xf3\xfc\xbf\xfb\x73\xfb\xd9\xfb\x8d\xfc\x41\xfd"
+	"\xca\xfd\x1f\xfe\x21\xfe\x26\xfe\x7b\xfe\x1b\xff\x13\x00\x4e\x01"
+	"\x62\x02\x1e\x03\x48\x03\xc5\x02\xbd\x01\x5e\x00\x26\xff\x4f\xfe"
+	"\xf4\xfd\x49\xfe\xfb\xfe\xbc\xff\x75\x00\x03\x01\x23\x01\xed\x00"
+	"\xee\x00\xd8\x00\xf5\x00\x56\x01\xda\x01\xa2\x01\xa5\x00\x9e\xff"
+	"\x77\xfd\x53\xfb\xb2\xf9\xc6\xf8\xe7\xf8\x0e\xfa\x49\xfc\x8e\xfe"
+	"\x9c\x00\x4a\x02\x0d\x03\x1e\x03\x32\x03\x41\x03\x9f\x03\x23\x04"
+	"\xd2\x04\x39\x05\xf4\x04\x44\x04\xd8\x02\x0e\x01\x61\xff\x20\xfe"
+	"\x61\xfd\x35\xfd\xa0\xfd\x2b\xfe\x73\xfe\x9d\xfe\x77\xfe\x28\xfe"
+	"\x07\xfe\x36\xfe\xc6\xfe\xa4\xff\xa8\x00\x9a\x01\x23\x02\x28\x02"
+	"\xa6\x01\xcc\x00\xd6\xff\x14\xff\xac\xfe\xab\xfe\x11\xff\xa0\xff"
+	"\x3f\x00\xad\x00\x02\x01\x16\x01\x14\x01\x2b\x01\x50\x01\xa3\x01"
+	"\x15\x02\x44\x02\xe6\x01\xb3\x00\x26\xff\x0a\xfd\xde\xfa\x6d\xf9"
+	"\x9d\xf8\xeb\xf8\x3f\xfa\x5e\xfc\x9e\xfe\x92\x00\x15\x02\xc6\x02"
+	"\xe7\x02\xfc\x02\x0b\x03\x6c\x03\x00\x04\x9d\x04\xf1\x04\xbf\x04"
+	"\x10\x04\xbc\x02\x17\x01\x81\xff\x3e\xfe\x8d\xfd\x7e\xfd\xdc\xfd"
+	"\x59\xfe\xbd\xfe\xe8\xfe\xc2\xfe\x78\xfe\x3a\xfe\x40\xfe\xa7\xfe"
+	"\x66\xff\x54\x00\x40\x01\xf5\x01\x21\x02\xc5\x01\x20\x01\x44\x00"
+	"\x80\xff\xfc\xfe\xe1\xfe\x16\xff\x7c\xff\x04\x00\x64\x00\x87\x00"
+	"\x81\x00\x61\x00\x45\x00\x65\x00\xb4\x00\x43\x01\xb3\x01\xaf\x01"
+	"\x01\x01\xd9\xff\x4a\xfe\x7c\xfc\x25\xfb\x66\xfa\x7d\xfa\x78\xfb"
+	"\x0b\xfd\xd2\xfe\x58\x00\x75\x01\x02\x02\x23\x02\x34\x02\x67\x02"
+	"\xcb\x02\x41\x03\xbd\x03\xf0\x03\xbb\x03\x28\x03\x3e\x02\x24\x01"
+	"\x1b\x00\x50\xff\xc7\xfe\x85\xfe\x7c\xfe\x80\xfe\x72\xfe\x60\xfe"
+	"\x3d\xfe\x2c\xfe\x35\xfe\x74\xfe\xf2\xfe\x8f\xff\x3f\x00\xd8\x00"
+	"\x3f\x01\x49\x01\x1c\x01\xc7\x00\x51\x00\xf4\xff\xb6\xff\xae\xff"
+	"\xeb\xff\x3b\x00\x83\x00\xc0\x00\xc5\x00\xb5\x00\x77\x00\x22\x00"
+	"\x11\x00\x19\x00\x50\x00\x94\x00\x77\x00\xf6\xff\x1f\xff\x02\xfe"
+	"\xd3\xfc\xf6\xfb\xb7\xfb\x1c\xfc\x19\xfd\x7a\xfe\xdd\xff\xf1\x00"
+	"\x95\x01\xbc\x01\x9a\x01\x73\x01\x7f\x01\xc0\x01\x33\x02\xad\x02"
+	"\xf4\x02\xf2\x02\x9c\x02\xf2\x01\x20\x01\x61\x00\xc8\xff\x63\xff"
+	"\x36\xff\x2f\xff\x21\xff\x0c\xff\xe1\xfe\xa6\xfe\x78\xfe\x6c\xfe"
+	"\x8b\xfe\xe3\xfe\x6a\xff\xf6\xff\x72\x00\xca\x00\xeb\x00\xca\x00"
+	"\x7c\x00\x2d\x00\xd8\xff\xaf\xff\xba\xff\xf0\xff\x40\x00\x88\x00"
+	"\xcd\x00\xd5\x00\xc7\x00\xa8\x00\x79\x00\x63\x00\x65\x00\x3b\x00"
+	"\xf0\xff\x7b\xff\xb2\xfe\xd8\xfd\xfe\xfc\x77\xfc\x55\xfc\xc1\xfc"
+	"\xa5\xfd\xb9\xfe\xe6\xff\xe3\x00\x8b\x01\xdd\x01\xea\x01\xe2\x01"
+	"\xe2\x01\xf5\x01\x37\x02\x68\x02\x90\x02\x80\x02\x30\x02\xa7\x01"
+	"\x02\x01\x60\x00\xca\xff\x5f\xff\x15\xff\xe4\xfe\xcb\xfe\xcc\xfe"
+	"\xc5\xfe\xcf\xfe\xd0\xfe\xdb\xfe\xee\xfe\x1e\xff\x53\xff\xa6\xff"
+	"\x03\x00\x55\x00\x8f\x00\x9b\x00\x80\x00\x35\x00\xf1\xff\xa8\xff"
+	"\x81\xff\x89\xff\xb4\xff\xf2\xff\x3b\x00\x5c\x00\x60\x00\x44\x00"
+	"\x2a\x00\x19\x00\x28\x00\x56\x00\x53\x00\x37\x00\xed\xff\x70\xff"
+	"\xe3\xfe\x65\xfe\x18\xfe\x19\xfe\x66\xfe\xf0\xfe\x8b\xff\x20\x00"
+	"\x92\x00\xd2\x00\xf0\x00\xfe\x00\x12\x01\x37\x01\x69\x01\xa3\x01"
+	"\xc8\x01\xce\x01\xb6\x01\x78\x01\x1a\x01\xb7\x00\x50\x00\xe4\xff"
+	"\x93\xff\x51\xff\x25\xff\x0d\xff\x0d\xff\x00\xff\xfa\xfe\x07\xff"
+	"\x09\xff\x1d\xff\x3f\xff\x6c\xff\xbf\xff\x0a\x00\x3f\x00\x74\x00"
+	"\x9c\x00\x90\x00\x4c\x00\x09\x00\xd9\xff\xc7\xff\xc4\xff\xd7\xff"
+	"\xf7\xff\x1f\x00\x25\x00\x16\x00\xfd\xff\xeb\xff\xea\xff\xc9\xff"
+	"\xb6\xff\xa0\xff\x86\xff\x6c\xff\x44\xff\x28\xff\x1b\xff\x39\xff"
+	"\x81\xff\xc8\xff\x1f\x00\x6b\x00\x90\x00\xa8\x00\xb2\x00\xbc\x00"
+	"\xd5\x00\xf4\x00\x09\x01\x1b\x01\x22\x01\x1f\x01\x06\x01\xdd\x00"
+	"\xb0\x00\x74\x00\x3b\x00\xfc\xff\xb6\xff\x86\xff\x69\xff\x58\xff"
+	"\x56\xff\x52\xff\x5a\xff\x57\xff\x4e\xff\x52\xff\x4f\xff\x64\xff"
+	"\x82\xff\xb2\xff\xfa\xff\x2b\x00\x53\x00\x5f\x00\x4a\x00\x3d\x00"
+	"\x2a\x00\x10\x00\x08\x00\x00\x00\x06\x00\xff\xff\xea\xff\xdc\xff"
+	"\xce\xff\xc3\xff\xbd\xff\xaf\xff\x95\xff\x81\xff\x6c\xff\x64\xff"
+	"\x5b\xff\x6f\xff\x93\xff\xc5\xff\x10\x00\x5a\x00\x8a\x00\xb0\x00"
+	"\xbf\x00\xc1\x00\xc3\x00\xc2\x00\xc9\x00\xcf\x00\xd1\x00\xbb\x00"
+	"\xaa\x00\x9b\x00\x86\x00\x6e\x00\x5a\x00\x38\x00\x0d\x00\xdd\xff"
+	"\xaf\xff\x84\xff\x6b\xff\x62\xff\x61\xff\x6a\xff\x75\xff\x86\xff"
+	"\x8a\xff\x93\xff\xa2\xff\xa8\xff\xba\xff\xd4\xff\xee\xff\x06\x00"
+	"\x13\x00\x1a\x00\x18\x00\x0f\x00\x0a\x00\x01\x00\xfc\xff\xfa\xff"
+	"\xeb\xff\xe0\xff\xc2\xff\xb4\xff\xbd\xff\xbd\xff\xc6\xff\xde\xff"
+	"\xf8\xff\x05\x00\x09\x00\x11\x00\x15\x00\x14\x00\x1a\x00\x1f\x00"
+	"\x27\x00\x29\x00\x31\x00\x2e\x00\x27\x00\x1f\x00\x1c\x00\x25\x00"
+	"\x30\x00\x44\x00\x4b\x00\x43\x00\x35\x00\x25\x00\x28\x00\x2e\x00"
+	"\x39\x00\x47\x00\x4a\x00\x47\x00\x33\x00\x1c\x00\xf9\xff\xdd\xff"
+	"\xc8\xff\xc4\xff\xc3\xff\xc3\xff\xca\xff\xc5\xff\xc3\xff\xbd\xff"
+	"\xc2\xff\xce\xff\xd2\xff\xdf\xff\xf2\xff\x08\x00\x1d\x00\x29\x00"
+	"\x2c\x00\x26\x00\x19\x00\x07\x00\xf6\xff\xe3\xff\xd9\xff\xc7\xff"
+	"\xc8\xff\xcd\xff\xd3\xff\xe0\xff\xdc\xff\xd0\xff\xd3\xff\xd4\xff"
+	"\xd2\xff\xdb\xff\xe0\xff\xfa\xff\x11\x00\x27\x00\x2f\x00\x32\x00"
+	"\x35\x00\x2f\x00\x2e\x00\x37\x00\x37\x00\x3f\x00\x44\x00\x41\x00"
+	"\x42\x00\x40\x00\x36\x00\x31\x00\x34\x00\x2e\x00\x35\x00\x37\x00"
+	"\x2e\x00\x2b\x00\x18\x00\x08\x00\xf8\xff\xe2\xff\xd4\xff\xc0\xff"
+	"\xb5\xff\xa6\xff\xa9\xff\xb1\xff\xbe\xff\xcf\xff\xe2\xff\xee\xff"
+	"\xf4\xff\xec\xff\xdb\xff\xe9\xff\xe7\xff\xf1\xff\xfb\xff\xfd\xff"
+	"\x01\x00\x01\x00\xff\xff\xf3\xff\xe9\xff\xe6\xff\xed\xff\xf4\xff"
+	"\xf9\xff\x05\x00\x06\x00\x05\x00\xfa\xff\xea\xff\xe9\xff\xe6\xff"
+	"\xed\xff\xe9\xff\xec\xff\xf7\xff\xfe\xff\x05\x00\x0c\x00\x13\x00"
+	"\x19\x00\x1a\x00\x25\x00\x2d\x00\x2f\x00\x31\x00\x26\x00\x2a\x00"
+	"\x29\x00\x1f\x00\x1a\x00\x15\x00\x0f\x00\x06\x00\x06\x00\xfe\xff"
+	"\xef\xff\xe5\xff\xde\xff\xe1\xff\xe4\xff\xeb\xff\xf3\xff\x03\x00"
+	"\x16\x00\x23\x00\x35\x00\x3f\x00\x44\x00\x42\x00\x3f\x00\x34\x00"
+	"\x22\x00\x11\x00\x05\x00\xfc\xff\xea\xff\xda\xff\xd3\xff\xca\xff"
+	"\xc9\xff\xc8\xff\xc0\xff\xc8\xff\xd2\xff\xde\xff\xf2\xff\xf4\xff"
+	"\xff\xff\x0a\x00\x0e\x00\x17\x00\x12\x00\x1f\x00\x1b\x00\x14\x00"
+	"\x13\x00\x0b\x00\x05\x00\xfa\xff\xf0\xff\xe4\xff\xde\xff\xd8\xff"
+	"\xdb\xff\xea\xff\xf8\xff\xf8\xff\xff\xff\x01\x00\xfa\xff\xfd\xff"
+	"\x02\x00\x01\x00\xff\xff\x04\x00\x05\x00\x02\x00\xf1\xff\xe6\xff"
+	"\xdc\xff\xcc\xff\xd4\xff\xde\xff\xec\xff\x06\x00\x15\x00\x28\x00"
+	"\x38\x00\x40\x00\x43\x00\x44\x00\x46\x00\x41\x00\x3d\x00\x32\x00"
+	"\x30\x00\x21\x00\x0f\x00\x05\x00\xf3\xff\xe2\xff\xd4\xff\xcf\xff"
+	"\xca\xff\xcd\xff\xd7\xff\xdf\xff\xdf\xff\xe5\xff\xeb\xff\xec\xff"
+	"\xf3\xff\xfc\xff\x0d\x00\x18\x00\x13\x00\x1d\x00\x21\x00\x1f\x00"
+	"\x1f\x00\x17\x00\x0e\x00\x07\x00\xfe\xff\xf5\xff\xf1\xff\xf2\xff"
+	"\xf0\xff\xec\xff\xe9\xff\xe1\xff\xe3\xff\xe1\xff\xda\xff\xd9\xff"
diff --git a/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c b/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c
new file mode 100644
index 0000000..bc1ad85
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c
@@ -0,0 +1,605 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 is a JNI example where we use native methods to play sounds
+ * using OpenSL ES. See the corresponding Java source file located at:
+ *
+ *   src/com/example/nativeaudio/NativeAudio/NativeAudio.java
+ */
+
+#include <assert.h>
+#include <jni.h>
+#include <string.h>
+
+// for __android_log_print(ANDROID_LOG_INFO, "YourApp", "formatted message");
+// #include <android/log.h>
+
+// for native audio
+#include <SLES/OpenSLES.h>
+#include "SLES/OpenSLES_Android.h"
+
+// for native asset manager
+#include <sys/types.h>
+#include <android/asset_manager.h>
+#include <android/asset_manager_jni.h>
+
+// pre-recorded sound clips, both are 8 kHz mono 16-bit signed little endian
+
+static const char hello[] =
+#include "hello_clip.h"
+;
+
+static const char android[] =
+#include "android_clip.h"
+;
+
+// engine interfaces
+static SLObjectItf engineObject = NULL;
+static SLEngineItf engineEngine;
+
+// output mix interfaces
+static SLObjectItf outputMixObject = NULL;
+static SLEnvironmentalReverbItf outputMixEnvironmentalReverb = NULL;
+
+// buffer queue player interfaces
+static SLObjectItf bqPlayerObject = NULL;
+static SLPlayItf bqPlayerPlay;
+static SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue;
+static SLEffectSendItf bqPlayerEffectSend;
+
+// aux effect on the output mix, used by the buffer queue player
+static const SLEnvironmentalReverbSettings reverbSettings =
+    SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR;
+
+// URI player interfaces
+static SLObjectItf uriPlayerObject = NULL;
+static SLPlayItf uriPlayerPlay;
+static SLSeekItf uriPlayerSeek;
+
+// file descriptor player interfaces
+static SLObjectItf fdPlayerObject = NULL;
+static SLPlayItf fdPlayerPlay;
+static SLSeekItf fdPlayerSeek;
+
+// recorder interfaces
+static SLObjectItf recorderObject = NULL;
+static SLRecordItf recorderRecord;
+static SLAndroidSimpleBufferQueueItf recorderBufferQueue;
+
+// synthesized sawtooth clip
+#define SAWTOOTH_FRAMES 8000
+static short sawtoothBuffer[SAWTOOTH_FRAMES];
+
+// 5 seconds of recorded audio at 16 kHz mono, 16-bit signed little endian
+#define RECORDER_FRAMES (16000 * 5)
+static short recorderBuffer[RECORDER_FRAMES];
+static unsigned recorderSize = 0;
+static SLmilliHertz recorderSR;
+
+// pointer and size of the next player buffer to enqueue, and number of remaining buffers
+static short *nextBuffer;
+static unsigned nextSize;
+static int nextCount;
+
+
+// synthesize a mono sawtooth wave and place it into a buffer (called automatically on load)
+__attribute__((constructor)) static void onDlOpen(void)
+{
+    unsigned i;
+    for (i = 0; i < SAWTOOTH_FRAMES; ++i) {
+        sawtoothBuffer[i] = 32768 - ((i % 100) * 660);
+    }
+}
+
+
+// this callback handler is called every time a buffer finishes playing
+void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+{
+    assert(bq == bqPlayerBufferQueue);
+    assert(NULL == context);
+    // for streaming playback, replace this test by logic to find and fill the next buffer
+    if (--nextCount > 0 && NULL != nextBuffer && 0 != nextSize) {
+        SLresult result;
+        // enqueue another buffer
+        result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, nextBuffer, nextSize);
+        // the most likely other result is SL_RESULT_BUFFER_INSUFFICIENT,
+        // which for this code example would indicate a programming error
+        assert(SL_RESULT_SUCCESS == result);
+    }
+}
+
+
+// this callback handler is called every time a buffer finishes recording
+void bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+{
+    assert(bq == bqRecorderBufferQueue);
+    assert(NULL == context);
+    // for streaming recording, here we would call Enqueue to give recorder the next buffer to fill
+    // but instead, this is a one-time buffer so we stop recording
+    SLresult result;
+    result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_STOPPED);
+    if (SL_RESULT_SUCCESS == result) {
+        recorderSize = RECORDER_FRAMES * sizeof(short);
+        recorderSR = SL_SAMPLINGRATE_16;
+    }
+}
+
+
+// create the engine and output mix objects
+void Java_com_example_nativeaudio_NativeAudio_createEngine(JNIEnv* env, jclass clazz)
+{
+    SLresult result;
+
+    // create engine
+    result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // realize the engine
+    result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the engine interface, which is needed in order to create other objects
+    result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // create output mix, with environmental reverb specified as a non-required interface
+    const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB};
+    const SLboolean req[1] = {SL_BOOLEAN_FALSE};
+    result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // realize the output mix
+    result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the environmental reverb interface
+    // this could fail if the environmental reverb effect is not available,
+    // either because the feature is not present, excessive CPU load, or
+    // the required MODIFY_AUDIO_SETTINGS permission was not requested and granted
+    result = (*outputMixObject)->GetInterface(outputMixObject, SL_IID_ENVIRONMENTALREVERB,
+            &outputMixEnvironmentalReverb);
+    if (SL_RESULT_SUCCESS == result) {
+        result = (*outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties(
+                outputMixEnvironmentalReverb, &reverbSettings);
+    }
+    // ignore unsuccessful result codes for environmental reverb, as it is optional for this example
+
+}
+
+
+// create buffer queue audio player
+void Java_com_example_nativeaudio_NativeAudio_createBufferQueueAudioPlayer(JNIEnv* env,
+        jclass clazz)
+{
+    SLresult result;
+
+    // configure audio source
+    SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
+    SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_8,
+        SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
+        SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};
+    SLDataSource audioSrc = {&loc_bufq, &format_pcm};
+
+    // configure audio sink
+    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
+    SLDataSink audioSnk = {&loc_outmix, NULL};
+
+    // create audio player
+    const SLInterfaceID ids[2] = {SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND};
+    const SLboolean req[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};
+    result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk,
+            2, ids, req);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // realize the player
+    result = (*bqPlayerObject)->Realize(bqPlayerObject, SL_BOOLEAN_FALSE);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the play interface
+    result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_PLAY, &bqPlayerPlay);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the buffer queue interface
+    result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_BUFFERQUEUE,
+            &bqPlayerBufferQueue);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // register callback on the buffer queue
+    result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallback, NULL);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the effect send interface
+    result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_EFFECTSEND,
+            &bqPlayerEffectSend);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // set the player's state to playing
+    result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_PLAYING);
+    assert(SL_RESULT_SUCCESS == result);
+
+}
+
+
+// create URI audio player
+jboolean Java_com_example_nativeaudio_NativeAudio_createUriAudioPlayer(JNIEnv* env, jclass clazz,
+        jstring uri)
+{
+    SLresult result;
+
+    // convert Java string to UTF-8
+    const jbyte *utf8 = (*env)->GetStringUTFChars(env, uri, NULL);
+    assert(NULL != utf8);
+
+    // configure audio source
+    // (requires the INTERNET permission depending on the uri parameter)
+    SLDataLocator_URI loc_uri = {SL_DATALOCATOR_URI, (SLchar *) utf8};
+    SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED};
+    SLDataSource audioSrc = {&loc_uri, &format_mime};
+
+    // configure audio sink
+    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
+    SLDataSink audioSnk = {&loc_outmix, NULL};
+
+    // create audio player
+    const SLInterfaceID ids[1] = {SL_IID_SEEK};
+    const SLboolean req[1] = {SL_BOOLEAN_TRUE};
+    result = (*engineEngine)->CreateAudioPlayer(engineEngine, &uriPlayerObject, &audioSrc,
+            &audioSnk, 1, ids, req);
+    // note that an invalid URI is not detected here, but during prepare/prefetch on Android,
+    // or possibly during Realize on other platforms
+    assert(SL_RESULT_SUCCESS == result);
+
+    // release the Java string and UTF-8
+    (*env)->ReleaseStringUTFChars(env, uri, utf8);
+
+    // realize the player
+    result = (*uriPlayerObject)->Realize(uriPlayerObject, SL_BOOLEAN_FALSE);
+    // this will always succeed on Android, but we check result for portability to other platforms
+    if (SL_RESULT_SUCCESS != result) {
+        (*uriPlayerObject)->Destroy(uriPlayerObject);
+        uriPlayerObject = NULL;
+        return JNI_FALSE;
+    }
+
+    // get the play interface
+    result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_PLAY, &uriPlayerPlay);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the seek interface
+    result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_SEEK, &uriPlayerSeek);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // enable whole file looping
+    result = (*uriPlayerSeek)->SetLoop(uriPlayerSeek, SL_BOOLEAN_TRUE, 0, SL_TIME_UNKNOWN);
+    assert(SL_RESULT_SUCCESS == result);
+
+    return JNI_TRUE;
+}
+
+
+// set the playing state for the URI audio player
+void Java_com_example_nativeaudio_NativeAudio_setPlayingUriAudioPlayer(JNIEnv* env,
+        jclass clazz, jboolean isPlaying)
+{
+    SLresult result;
+
+    // make sure the URI audio player was created
+    if (NULL != uriPlayerPlay) {
+
+        // set the player's state
+        result = (*uriPlayerPlay)->SetPlayState(uriPlayerPlay, isPlaying ?
+            SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_PAUSED);
+        assert(SL_RESULT_SUCCESS == result);
+
+    }
+
+}
+
+
+// enable reverb on the buffer queue player
+jboolean Java_com_example_nativeaudio_NativeAudio_enableReverb(JNIEnv* env, jclass clazz,
+        jboolean enabled)
+{
+    SLresult result;
+
+    // we might not have been able to add environmental reverb to the output mix
+    if (NULL == outputMixEnvironmentalReverb) {
+        return JNI_FALSE;
+    }
+
+    result = (*bqPlayerEffectSend)->EnableEffectSend(bqPlayerEffectSend,
+            outputMixEnvironmentalReverb, (SLboolean) enabled, (SLmillibel) 0);
+    // and even if environmental reverb was present, it might no longer be available
+    if (SL_RESULT_SUCCESS != result) {
+        return JNI_FALSE;
+    }
+
+    return JNI_TRUE;
+}
+
+
+// select the desired clip and play count, and enqueue the first buffer if idle
+jboolean Java_com_example_nativeaudio_NativeAudio_selectClip(JNIEnv* env, jclass clazz, jint which,
+        jint count)
+{
+    short *oldBuffer = nextBuffer;
+    switch (which) {
+    case 0:     // CLIP_NONE
+        nextBuffer = (short *) NULL;
+        nextSize = 0;
+        break;
+    case 1:     // CLIP_HELLO
+        nextBuffer = (short *) hello;
+        nextSize = sizeof(hello);
+        break;
+    case 2:     // CLIP_ANDROID
+        nextBuffer = (short *) android;
+        nextSize = sizeof(android);
+        break;
+    case 3:     // CLIP_SAWTOOTH
+        nextBuffer = sawtoothBuffer;
+        nextSize = sizeof(sawtoothBuffer);
+        break;
+    case 4:     // CLIP_PLAYBACK
+        // we recorded at 16 kHz, but are playing buffers at 8 Khz, so do a primitive down-sample
+        if (recorderSR == SL_SAMPLINGRATE_16) {
+            unsigned i;
+            for (i = 0; i < recorderSize; i += 2 * sizeof(short)) {
+                recorderBuffer[i >> 2] = recorderBuffer[i >> 1];
+            }
+            recorderSR = SL_SAMPLINGRATE_8;
+            recorderSize >>= 1;
+        }
+        nextBuffer = recorderBuffer;
+        nextSize = recorderSize;
+        break;
+    default:
+        nextBuffer = NULL;
+        nextSize = 0;
+        break;
+    }
+    nextCount = count;
+    if (nextSize > 0) {
+        // here we only enqueue one buffer because it is a long clip,
+        // but for streaming playback we would typically enqueue at least 2 buffers to start
+        SLresult result;
+        result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, nextBuffer, nextSize);
+        if (SL_RESULT_SUCCESS != result) {
+            return JNI_FALSE;
+        }
+    }
+
+    return JNI_TRUE;
+}
+
+
+// create asset audio player
+jboolean Java_com_example_nativeaudio_NativeAudio_createAssetAudioPlayer(JNIEnv* env, jclass clazz,
+        jobject assetManager, jstring filename)
+{
+    SLresult result;
+
+    // convert Java string to UTF-8
+    const jbyte *utf8 = (*env)->GetStringUTFChars(env, filename, NULL);
+    assert(NULL != utf8);
+
+    // use asset manager to open asset by filename
+    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
+    assert(NULL != mgr);
+    AAsset* asset = AAssetManager_open(mgr, (const char *) utf8, AASSET_MODE_UNKNOWN);
+
+    // release the Java string and UTF-8
+    (*env)->ReleaseStringUTFChars(env, filename, utf8);
+
+    // the asset might not be found
+    if (NULL == asset) {
+        return JNI_FALSE;
+    }
+
+    // open asset as file descriptor
+    off_t start, length;
+    int fd = AAsset_openFileDescriptor(asset, &start, &length);
+    assert(0 <= fd);
+    AAsset_close(asset);
+
+    // configure audio source
+    SLDataLocator_AndroidFD loc_fd = {SL_DATALOCATOR_ANDROIDFD, fd, start, length};
+    SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED};
+    SLDataSource audioSrc = {&loc_fd, &format_mime};
+
+    // configure audio sink
+    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
+    SLDataSink audioSnk = {&loc_outmix, NULL};
+
+    // create audio player
+    const SLInterfaceID ids[1] = {SL_IID_SEEK};
+    const SLboolean req[1] = {SL_BOOLEAN_TRUE};
+    result = (*engineEngine)->CreateAudioPlayer(engineEngine, &fdPlayerObject, &audioSrc, &audioSnk,
+            1, ids, req);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // realize the player
+    result = (*fdPlayerObject)->Realize(fdPlayerObject, SL_BOOLEAN_FALSE);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the play interface
+    result = (*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_PLAY, &fdPlayerPlay);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the seek interface
+    result = (*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_SEEK, &fdPlayerSeek);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // enable whole file looping
+    result = (*fdPlayerSeek)->SetLoop(fdPlayerSeek, SL_BOOLEAN_TRUE, 0, SL_TIME_UNKNOWN);
+    assert(SL_RESULT_SUCCESS == result);
+
+    return JNI_TRUE;
+}
+
+
+// set the playing state for the asset audio player
+void Java_com_example_nativeaudio_NativeAudio_setPlayingAssetAudioPlayer(JNIEnv* env,
+        jclass clazz, jboolean isPlaying)
+{
+    SLresult result;
+
+    // make sure the asset audio player was created
+    if (NULL != fdPlayerPlay) {
+
+        // set the player's state
+        result = (*fdPlayerPlay)->SetPlayState(fdPlayerPlay, isPlaying ?
+            SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_PAUSED);
+        assert(SL_RESULT_SUCCESS == result);
+
+    }
+
+}
+
+
+// create audio recorder
+jboolean Java_com_example_nativeaudio_NativeAudio_createAudioRecorder(JNIEnv* env, jclass clazz)
+{
+    SLresult result;
+
+    // configure audio source
+    SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT,
+            SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};
+    SLDataSource audioSrc = {&loc_dev, NULL};
+
+    // configure audio sink
+    SLDataLocator_AndroidSimpleBufferQueue loc_bq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
+    SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_16,
+        SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
+        SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};
+    SLDataSink audioSnk = {&loc_bq, &format_pcm};
+
+    // create audio recorder
+    // (requires the RECORD_AUDIO permission)
+    const SLInterfaceID id[1] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
+    const SLboolean req[1] = {SL_BOOLEAN_TRUE};
+    result = (*engineEngine)->CreateAudioRecorder(engineEngine, &recorderObject, &audioSrc,
+            &audioSnk, 1, id, req);
+    if (SL_RESULT_SUCCESS != result) {
+        return JNI_FALSE;
+    }
+
+    // realize the audio recorder
+    result = (*recorderObject)->Realize(recorderObject, SL_BOOLEAN_FALSE);
+    if (SL_RESULT_SUCCESS != result) {
+        return JNI_FALSE;
+    }
+
+    // get the record interface
+    result = (*recorderObject)->GetInterface(recorderObject, SL_IID_RECORD, &recorderRecord);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // get the buffer queue interface
+    result = (*recorderObject)->GetInterface(recorderObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
+            &recorderBufferQueue);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // register callback on the buffer queue
+    result = (*recorderBufferQueue)->RegisterCallback(recorderBufferQueue, bqRecorderCallback,
+            NULL);
+    assert(SL_RESULT_SUCCESS == result);
+
+    return JNI_TRUE;
+}
+
+
+// set the recording state for the audio recorder
+void Java_com_example_nativeaudio_NativeAudio_startRecording(JNIEnv* env, jclass clazz)
+{
+    SLresult result;
+
+    // in case already recording, stop recording and clear buffer queue
+    result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_STOPPED);
+    assert(SL_RESULT_SUCCESS == result);
+    result = (*recorderBufferQueue)->Clear(recorderBufferQueue);
+    assert(SL_RESULT_SUCCESS == result);
+
+    // the buffer is not valid for playback yet
+    recorderSize = 0;
+
+    // enqueue an empty buffer to be filled by the recorder
+    // (for streaming recording, we would enqueue at least 2 empty buffers to start things off)
+    result = (*recorderBufferQueue)->Enqueue(recorderBufferQueue, recorderBuffer,
+            RECORDER_FRAMES * sizeof(short));
+    // the most likely other result is SL_RESULT_BUFFER_INSUFFICIENT,
+    // which for this code example would indicate a programming error
+    assert(SL_RESULT_SUCCESS == result);
+
+    // start recording
+    result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_RECORDING);
+    assert(SL_RESULT_SUCCESS == result);
+
+}
+
+
+// shut down the native audio system
+void Java_com_example_nativeaudio_NativeAudio_shutdown(JNIEnv* env, jclass clazz)
+{
+
+    // destroy buffer queue audio player object, and invalidate all associated interfaces
+    if (bqPlayerObject != NULL) {
+        (*bqPlayerObject)->Destroy(bqPlayerObject);
+        bqPlayerObject = NULL;
+        bqPlayerPlay = NULL;
+        bqPlayerBufferQueue = NULL;
+        bqPlayerEffectSend = NULL;
+    }
+
+    // destroy file descriptor audio player object, and invalidate all associated interfaces
+    if (fdPlayerObject != NULL) {
+        (*fdPlayerObject)->Destroy(fdPlayerObject);
+        fdPlayerObject = NULL;
+        fdPlayerPlay = NULL;
+        fdPlayerSeek = NULL;
+    }
+
+    // destroy URI audio player object, and invalidate all associated interfaces
+    if (uriPlayerObject != NULL) {
+        (*uriPlayerObject)->Destroy(uriPlayerObject);
+        uriPlayerObject = NULL;
+        uriPlayerPlay = NULL;
+        uriPlayerSeek = NULL;
+    }
+
+    // destroy audio recorder object, and invalidate all associated interfaces
+    if (recorderObject != NULL) {
+        (*recorderObject)->Destroy(recorderObject);
+        recorderObject = NULL;
+        recorderRecord = NULL;
+        recorderBufferQueue = NULL;
+    }
+
+    // destroy output mix object, and invalidate all associated interfaces
+    if (outputMixObject != NULL) {
+        (*outputMixObject)->Destroy(outputMixObject);
+        outputMixObject = NULL;
+        outputMixEnvironmentalReverb = NULL;
+    }
+
+    // destroy engine object, and invalidate all associated interfaces
+    if (engineObject != NULL) {
+        (*engineObject)->Destroy(engineObject);
+        engineObject = NULL;
+        engineEngine = NULL;
+    }
+
+}
diff --git a/ndk/platforms/android-9/samples/native-audio/res/drawable/icon.png b/ndk/platforms/android-9/samples/native-audio/res/drawable/icon.png
new file mode 100644
index 0000000..a07c69f
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/res/drawable/icon.png
Binary files differ
diff --git a/ndk/platforms/android-9/samples/native-audio/res/layout/main.xml b/ndk/platforms/android-9/samples/native-audio/res/layout/main.xml
new file mode 100644
index 0000000..b9fb95a
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/res/layout/main.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    >
+<TextView
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:text="@string/hello"
+    />
+<Button
+    android:id="@+id/hello"
+    android:text="Hello"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/android"
+    android:text="Android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/sawtooth"
+    android:text="Sawtooth"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/reverb"
+    android:text="Reverb"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/embedded_soundtrack"
+    android:text="Embedded soundtrack"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/uri_soundtrack"
+    android:text="URI soundtrack"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/record"
+    android:text="Record"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+<Button
+    android:id="@+id/playback"
+    android:text="Playback"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    />
+</LinearLayout>
diff --git a/ndk/platforms/android-9/samples/native-audio/res/values/strings.xml b/ndk/platforms/android-9/samples/native-audio/res/values/strings.xml
new file mode 100644
index 0000000..280c103
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+    <string name="hello">Hello, Android using native audio!</string>
+    <string name="app_name">NativeAudio</string>
+</resources>
diff --git a/ndk/platforms/android-9/samples/native-audio/src/com/example/nativeaudio/NativeAudio.java b/ndk/platforms/android-9/samples/native-audio/src/com/example/nativeaudio/NativeAudio.java
new file mode 100644
index 0000000..5a7b3ef
--- /dev/null
+++ b/ndk/platforms/android-9/samples/native-audio/src/com/example/nativeaudio/NativeAudio.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.nativeaudio;
+
+import android.app.Activity;
+import android.content.res.AssetManager;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+
+public class NativeAudio extends Activity {
+
+    static final int CLIP_NONE = 0;
+    static final int CLIP_HELLO = 1;
+    static final int CLIP_ANDROID = 2;
+    static final int CLIP_SAWTOOTH = 3;
+    static final int CLIP_PLAYBACK = 4;
+
+    static final String URI = "http://upload.wikimedia.org/wikipedia/commons/6/6d/Banana.ogg";
+    static AssetManager assetManager;
+
+    static boolean isPlayingAsset = false;
+    static boolean isPlayingUri = false;
+
+    /** Called when the activity is first created. */
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        setContentView(R.layout.main);
+
+        assetManager = getAssets();
+
+        // initialize native audio system
+
+        createEngine();
+        createBufferQueueAudioPlayer();
+
+        // initialize button click handlers
+
+        ((Button) findViewById(R.id.hello)).setOnClickListener(new OnClickListener() {
+            public void onClick(View view) {
+                // ignore the return value
+                selectClip(CLIP_HELLO, 5);
+            }
+        });
+
+        ((Button) findViewById(R.id.android)).setOnClickListener(new OnClickListener() {
+            public void onClick(View view) {
+                // ignore the return value
+                selectClip(CLIP_ANDROID, 7);
+            }
+        });
+
+        ((Button) findViewById(R.id.sawtooth)).setOnClickListener(new OnClickListener() {
+            public void onClick(View view) {
+                // ignore the return value
+                selectClip(CLIP_SAWTOOTH, 1);
+            }
+        });
+
+        ((Button) findViewById(R.id.reverb)).setOnClickListener(new OnClickListener() {
+            boolean enabled = false;
+            public void onClick(View view) {
+                enabled = !enabled;
+                if (!enableReverb(enabled)) {
+                    enabled = !enabled;
+                }
+            }
+        });
+
+        ((Button) findViewById(R.id.embedded_soundtrack)).setOnClickListener(new OnClickListener() {
+            boolean created = false;
+            public void onClick(View view) {
+                if (!created) {
+                    created = createAssetAudioPlayer(assetManager, "background.mp3");
+                }
+                if (created) {
+                    isPlayingAsset = !isPlayingAsset;
+                    setPlayingAssetAudioPlayer(isPlayingAsset);
+                }
+            }
+        });
+
+        ((Button) findViewById(R.id.uri_soundtrack)).setOnClickListener(new OnClickListener() {
+            boolean created = false;
+            public void onClick(View view) {
+                if (!created) {
+                    created = createUriAudioPlayer(URI);
+                }
+                if (created) {
+                    isPlayingUri = !isPlayingUri;
+                    setPlayingUriAudioPlayer(isPlayingUri);
+                }
+             }
+        });
+
+        ((Button) findViewById(R.id.record)).setOnClickListener(new OnClickListener() {
+            boolean created = false;
+            public void onClick(View view) {
+                if (!created) {
+                    created = createAudioRecorder();
+                }
+                if (created) {
+                    startRecording();
+                }
+            }
+        });
+
+        ((Button) findViewById(R.id.playback)).setOnClickListener(new OnClickListener() {
+            public void onClick(View view) {
+                // ignore the return value
+                selectClip(CLIP_PLAYBACK, 3);
+            }
+        });
+
+    }
+
+    /** Called when the activity is about to be destroyed. */
+    @Override
+    protected void onPause()
+    {
+        // turn off all audio
+        selectClip(CLIP_NONE, 0);
+        isPlayingAsset = false;
+        setPlayingAssetAudioPlayer(false);
+        isPlayingUri = false;
+        setPlayingUriAudioPlayer(false);
+        super.onPause();
+    }
+
+    /** Called when the activity is about to be destroyed. */
+    @Override
+    protected void onDestroy()
+    {
+        shutdown();
+        super.onDestroy();
+    }
+
+    /** Native methods, implemented in jni folder */
+    public static native void createEngine();
+    public static native void createBufferQueueAudioPlayer();
+    public static native boolean createAssetAudioPlayer(AssetManager assetManager, String filename);
+    public static native void setPlayingAssetAudioPlayer(boolean isPlaying);
+    public static native boolean createUriAudioPlayer(String uri);
+    public static native void setPlayingUriAudioPlayer(boolean isPlaying);
+    public static native boolean selectClip(int which, int count);
+    public static native boolean enableReverb(boolean enabled);
+    public static native boolean createAudioRecorder();
+    public static native void startRecording();
+    public static native void shutdown();
+
+    /** Load jni .so on initialization */
+    static {
+         System.loadLibrary("native-audio-jni");
+    }
+
+}
diff --git a/ndk/sources/android/native_app_glue/android_native_app_glue.h b/ndk/sources/android/native_app_glue/android_native_app_glue.h
index 321299c..1b8c1f1 100644
--- a/ndk/sources/android/native_app_glue/android_native_app_glue.h
+++ b/ndk/sources/android/native_app_glue/android_native_app_glue.h
@@ -27,7 +27,7 @@
 #include <android/native_activity.h>
 
 #ifdef __cplusplus
-extern "C"
+extern "C" {
 #endif
 
 /**
diff --git a/samples/Alarm/AndroidManifest.xml b/samples/Alarm/AndroidManifest.xml
new file mode 100644
index 0000000..6a7a831
--- /dev/null
+++ b/samples/Alarm/AndroidManifest.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!--
+    Declares the contents of this Android application. The xmlns:android
+    attribute brings in the Android platform namespace, and the
+    "package" attribute provides a unique name for the application.
+    If you use this file as a template in your own application, you must change
+    the package name from "com.example.android" to one that you own or have
+    control over.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.newalarm"
+    android:versionCode="2"
+    android:versionName="2.0">
+    <!--
+        Declares the application, its icon, and its visible label
+     -->
+    <application
+        android:icon="@drawable/icon"
+        android:label="@string/app_name">
+        <!--
+            Declares the activity's class name and visible label. The leading "." indicates
+            that the name should be preceded by the application's Android package name.
+         -->
+        <activity
+            android:name=".AlarmActivity"
+            android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <service
+            android:name=".AlarmService"
+            android:label="@string/alarm_service"
+            android:process="com.example.android.newalarm">
+        </service>
+    </application>
+    <uses-sdk android:targetSdkVersion="4" android:minSdkVersion="3"/>
+</manifest>
diff --git a/samples/Alarm/_index.html b/samples/Alarm/_index.html
new file mode 100644
index 0000000..dff51ce
--- /dev/null
+++ b/samples/Alarm/_index.html
@@ -0,0 +1,29 @@
+<p>
+    This sample is a revised version of the AlarmService functionality included in the
+    ApiDemos sample application. It is used as the application under test
+    for the <a href="../AlarmServiceTest/index.html">Alarm Service Test</a>
+    sample test application.
+</p>
+<p>
+    This application demonstrates a simple Android service that is started when needed by
+    <code>Context.startService(Intent)</code> and stops itself when its work is done. You can
+    use this type of service to move long-running or periodic tasks into the background. For
+    example, you could use this type of service to perform data synchronization.
+</p>
+<p>
+    In the sample, the service simply runs for 15 seconds and then stops itself. The wait is
+    implemented in a separate thread that uses a thread-safe object. This illustrates how to
+    set up a service that runs multiple threads that depend on one or more objects that must be
+    made thread-safe.
+</p>
+<p>
+    The application also contains the <code>AlarmActivity</code> activity that is a client of the
+    service. You use the activity to control when the service starts and stops. By default, the
+    activity fires off the service every thirty seconds. In effect, the service starts after
+    thirty seconds, runs for 15 seconds, stops, and then runs again automatically in another
+    15 seconds. You also use the client to stop this cycle.
+</p>
+<p>
+    The test application <a href="tests/index.html">AlarmServiceTest</a>
+    shows you how to set up a test of this service.
+</p>
diff --git a/samples/Alarm/res/drawable/icon.png b/samples/Alarm/res/drawable/icon.png
new file mode 100644
index 0000000..5ae7701
--- /dev/null
+++ b/samples/Alarm/res/drawable/icon.png
Binary files differ
diff --git a/samples/Alarm/res/drawable/stat_sample.png b/samples/Alarm/res/drawable/stat_sample.png
new file mode 100755
index 0000000..6c9ba0a
--- /dev/null
+++ b/samples/Alarm/res/drawable/stat_sample.png
Binary files differ
diff --git a/samples/Alarm/res/layout/main.xml b/samples/Alarm/res/layout/main.xml
new file mode 100644
index 0000000..3d79e2b
--- /dev/null
+++ b/samples/Alarm/res/layout/main.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Demonstrates starting and stopping a local service.
+     See corresponding Java code com.android.sdk.app.LocalSerice.java. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:padding="4dip"
+    android:gravity="center_horizontal"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    <TextView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0"
+        android:paddingBottom="4dip"
+        android:text="@string/alarm_service"/>
+    <Button android:id="@+id/start_alarm"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/start_alarm_service">
+        <requestFocus />
+    </Button>
+
+    <Button android:id="@+id/stop_alarm"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/stop_alarm_service" />
+</LinearLayout>
+
diff --git a/samples/Alarm/res/values/strings.xml b/samples/Alarm/res/values/strings.xml
new file mode 100644
index 0000000..18a34cc
--- /dev/null
+++ b/samples/Alarm/res/values/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+    <string name="app_name">Alarm</string>
+    <string name="alarm_service">
+        This shows how to schedule a repeating alarm that starts a service.</string>
+    <string name="start_alarm_service">Start Alarm Service</string>
+    <string name="stop_alarm_service">Stop Alarm Service</string>
+    <string name="repeating_started">
+        Repeating timer started. Starts AlarmService every 30 seconds.</string>
+    <string name="alarm_service_started">The sample service is running.</string>
+    <string name="alarm_service_label">Sample Alarm Service</string>
+    <string name="alarm_service_finished">The sample service is no longer running.</string>
+    <string name="repeating_stopped">
+        Repeating timer stopped. AlarmService will no longer be started.</string>
+</resources>
diff --git a/samples/Alarm/src/com/example/android/newalarm/AlarmActivity.java b/samples/Alarm/src/com/example/android/newalarm/AlarmActivity.java
new file mode 100644
index 0000000..d26507d
--- /dev/null
+++ b/samples/Alarm/src/com/example/android/newalarm/AlarmActivity.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.newalarm;
+
+import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.os.SystemClock;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.Toast;
+
+/**
+ * This is the activity that controls AlarmService.
+ * <p>
+ * When the user clicks the "Start Alarm Service" button, it triggers a repeating countdown
+ * timer. Every thirty seconds, the timer starts AlarmService, which then runs for 15 seconds
+ * and shuts itself down.
+ * </p>
+ * <p>
+ * When the user clicks the "Stop Alarm Service" button, it stops the countdown timer.
+ * </p>
+ */
+
+public class AlarmActivity extends Activity {
+    // 30 seconds in milliseconds
+    private static final long THIRTY_SECONDS_MILLIS = 30 * 1000;
+
+    // An intent for AlarmService, to trigger it as if the Activity called startService().
+    private PendingIntent mAlarmSender;
+
+    // Contains a handle to the system alarm service
+    private AlarmManager mAlarmManager;
+
+    /**
+     * This method is called when Android starts the activity. It initializes the UI.
+     * <p>
+     * This method is automatically called when Android starts the Activity
+     * </p>
+     */
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Create a PendingIntent to trigger a startService() for AlarmService
+        mAlarmSender = PendingIntent.getService(  // set up an intent for a call to a service
+            AlarmActivity.this,  // the current context
+            0,  // request code (not used)
+            new Intent(AlarmActivity.this, AlarmService.class),  // A new Service intent
+            0   // flags (none are required for a service)
+        );
+
+        // Creates the main view
+        setContentView(R.layout.main);
+
+        // Finds the button that starts the repeating countdown timer
+        Button button = (Button)findViewById(R.id.start_alarm);
+
+        // Sets the listener for the start button
+        button.setOnClickListener(mStartAlarmListener);
+
+        // Finds the button that stops countdown timer
+        button = (Button)findViewById(R.id.stop_alarm);
+
+        // Sets the listener for the stop button
+        button.setOnClickListener(mStopAlarmListener);
+
+        // Gets the handle to the system alarm service
+        mAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
+    }
+
+    // Creates a new anonymous click listener for the start button. It starts the repeating
+    //  countdown timer.
+    private OnClickListener mStartAlarmListener = new OnClickListener() {
+        // Sets the callback for when the button is clicked
+        public void onClick(View v) {
+
+            // Sets the time when the alarm will first go off
+            // The Android AlarmManager uses this form of the current time.
+            long firstAlarmTime = SystemClock.elapsedRealtime();
+
+            // Sets a repeating countdown timer that triggers AlarmService
+            mAlarmManager.setRepeating(
+                AlarmManager.ELAPSED_REALTIME_WAKEUP, // based on time since last wake up
+                firstAlarmTime,  // sends the first alarm immediately
+                THIRTY_SECONDS_MILLIS,  // repeats every thirty seconds
+                mAlarmSender  // when the alarm goes off, sends this Intent
+            );
+
+            // Notifies the user that the repeating countdown timer has been started
+            Toast.makeText(
+                AlarmActivity.this,  //  the current context
+                R.string.repeating_started,  // the message to display
+                Toast.LENGTH_LONG  // how long to display the message
+            ).show();  // show the message on the screen
+        }
+    };
+
+    // Creates a new anonymous click listener for the stop button. It shuts off the repeating
+    // countdown timer.
+    private OnClickListener mStopAlarmListener = new OnClickListener() {
+        // Sets the callback for when the button is clicked
+        public void onClick(View v) {
+
+            // Cancels the repeating countdown timer
+            mAlarmManager.cancel(mAlarmSender);
+
+            // Notifies the user that the repeating countdown timer has been stopped
+            Toast.makeText(
+                AlarmActivity.this,  //  the current context
+                R.string.repeating_stopped,  // the message to display
+                Toast.LENGTH_LONG  // how long to display the message
+            ).show(); // display the message
+        }
+    };
+}
diff --git a/samples/Alarm/src/com/example/android/newalarm/AlarmService.java b/samples/Alarm/src/com/example/android/newalarm/AlarmService.java
new file mode 100644
index 0000000..1f88206
--- /dev/null
+++ b/samples/Alarm/src/com/example/android/newalarm/AlarmService.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.newalarm;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.widget.Toast;
+
+/**
+ * <p>
+ * This class implements a service. The service is started by AlarmActivity, which contains a
+ * repeating countdown timer that sends a PendingIntent. The user starts and stops the timer with
+ * buttons in the UI.
+ * </p>
+ * <p>
+ * When this service is started, it creates a Runnable and starts it in a new Thread. The
+ * Runnable does a synchronized lock on the service's Binder object for 15 seconds, then issues
+ * a stopSelf(). The net effect is a new worker thread that takes 15 seconds to run and then
+ * shuts down the entire service. The activity restarts the service after 15 more seconds, when the
+ * countdown timer triggers again.
+ * </p>
+ * <p>
+ * This service is provided as the service under test for the sample test application
+ * AlarmServiceTest.
+ * </p>
+ * <p>
+ * Note: Since this sample is based on the Android 1.5 platform, it does not implement
+ * onStartCommand. See the Javadoc for android.app.Service for more details.
+ * </p>
+ */
+public class AlarmService extends Service {
+    // Defines a label for the thread that this service starts
+    private static final String ALARM_SERVICE_THREAD = "AlarmService";
+
+    // Defines 15 seconds
+    public static final long WAIT_TIME_SECONDS = 15;
+
+    // Define the number of milliseconds in one second
+    public static final long MILLISECS_PER_SEC = 1000;
+
+    /*
+     * For testing purposes, the following variables are defined as fields and set to
+     * package visibility.
+     */
+
+    // The NotificationManager used to send notifications to the status bar.
+    NotificationManager mNotificationManager;
+
+    // An Intent that displays the client if the user clicks the notification.
+    PendingIntent mContentIntent;
+
+    // A Notification to send to the Notification Manager when the service is started.
+    Notification mNotification;
+
+    // A Binder, used as the lock object for the worker thread.
+    IBinder mBinder = new AlarmBinder();
+
+    // A Thread object that will run the background task
+    Thread mWorkThread;
+
+    // The Runnable that is the service's "task". This illustrates how a service is used to
+    // offload work from a client.
+    Runnable mWorkTask = new Runnable() {
+        public void run() {
+            // Sets the wait time to 15 seconds, simulating a 15-second background task.
+            long waitTime = System.currentTimeMillis() + WAIT_TIME_SECONDS * MILLISECS_PER_SEC;
+
+            // Puts the wait in a while loop to ensure that it actually waited 15 seconds.
+            // This covers the situation where an interrupt might have overridden the wait.
+            while (System.currentTimeMillis() < waitTime) {
+                // Waits for 15 seconds or interruption
+                synchronized (mBinder) {
+                    try {
+                        // Waits for 15 seconds or until an interrupt triggers an exception.
+                        // If an interrupt occurs, the wait is recalculated to ensure a net
+                        // wait of 15 seconds.
+                        mBinder.wait(waitTime - System.currentTimeMillis());
+                    } catch (InterruptedException e) {
+                    }
+                }
+            }
+            // Stops the current service. In response, Android calls onDestroy().
+            stopSelf();
+        }
+    };
+
+    /**
+     *  Makes a full concrete subclass of Binder, rather than doing it in line, for readability.
+     */
+    public class AlarmBinder extends Binder {
+        // Constructor. Calls the super constructor to set up the instance.
+        public AlarmBinder() {
+            super();
+        }
+
+        @Override
+        protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
+            throws RemoteException {
+
+            // Call the parent method with the arguments passed in
+            return super.onTransact(code, data, reply, flags);
+        }
+    }
+
+    /**
+     * Initializes the service when it is first started by a call to startService() or
+     * bindService().
+     */
+    @Override
+    public void onCreate() {
+        // Gets a handle to the system mNotification service.
+        mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
+
+        // Updates the status bar to indicate that this service is running.
+        showNotification();
+
+        // Creates a new thread. A new thread is used so that the service's work doesn't block
+        // anything on the calling client's thread. By default, a service runs in the same
+        // process and thread as the client that starts it.
+        mWorkThread = new Thread(
+            null,  // threadgroup (in this case, null)
+            mWorkTask, // the Runnable that will run in this thread
+            ALARM_SERVICE_THREAD
+        );
+        // Starts the thread
+        mWorkThread.start();
+    }
+
+    /**
+     * Stops the service in response to the stopSelf() issued when the wait is over. Other
+     * clients that use this service could stop it by issuing a stopService() or a stopSelf() on
+     * the service object.
+     */
+    @Override
+    public void onDestroy() {
+        // Cancels the status bar mNotification based on its ID, which is set in showNotification().
+        mNotificationManager.cancel(R.string.alarm_service_started);
+
+        // Sends a notification to the screen.
+        Toast.makeText(
+            this,  // the current context
+            R.string.alarm_service_finished,  // the message to show
+            Toast.LENGTH_LONG   // how long to keep the message on the screen
+        ).show();  // show the text
+    }
+
+    // Returns the service's binder object to clients that issue onBind().
+    @Override
+    public IBinder onBind(Intent intent) {
+        return mBinder;
+    }
+
+    /**
+     * Displays a notification in the status bar that this service is running. This method
+     * also creates an Intent for the AlarmActivity client and attaches it to the notification
+     * line. If the user clicks the line in the expanded status window, the Intent triggers
+     * AlarmActivity.
+     */
+    private void showNotification() {
+        // Sets the text to use for the status bar and status list views.
+        CharSequence notificationText = getText(R.string.alarm_service_started);
+
+        // Sets the icon, status bar text, and display time for the mNotification.
+        mNotification = new Notification(
+            R.drawable.stat_sample,  // the status icon
+            notificationText, // the status text
+            System.currentTimeMillis()  // the time stamp
+        );
+
+        // Sets up the Intent that starts AlarmActivity
+        mContentIntent = PendingIntent.getActivity(
+            this,  // Start the Activity in the current context
+            0,   // not used
+            new Intent(this, AlarmActivity.class),  // A new Intent for AlarmActivity
+            0  // Use an existing activity instance if available
+        );
+
+        // Creates a new content view for the mNotification. The view appears when the user
+        // shows the expanded status window.
+        mNotification.setLatestEventInfo(
+            this,  //  Put the content view in the current context
+            getText(R.string.alarm_service_label),  // The text to use as the label of the entry
+            notificationText,  // The text to use as the contents of the entry
+            mContentIntent  // The intent to send when the entry is clicked
+        );
+
+        // Sets a unique ID for the notification and sends it to NotificationManager to be
+        // displayed. The ID is the integer marker for the notification string, which is
+        // guaranteed to be unique within the entire application.
+        mNotificationManager.notify(
+            R.string.alarm_service_started,  // unique id for the mNotification
+            mNotification   // the mNotification object
+        );
+    }
+}
diff --git a/samples/Alarm/tests/AndroidManifest.xml b/samples/Alarm/tests/AndroidManifest.xml
new file mode 100644
index 0000000..8688920
--- /dev/null
+++ b/samples/Alarm/tests/AndroidManifest.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!--
+    Declare the contents of this Android test package. The xmlns:android
+    attribute brings in the Android platform namespace, and the
+    "package" attribute provides a unique name for the package.
+    If you use this file as a template in your own test package, you must change
+    the package name from "com.example.android" to one that you own or have
+    control over.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.newalarm.test"
+    android:versionCode="1"
+    android:versionName="1.0">
+    <!--
+        Must use the application element to include the uses-library element.
+     -->
+    <application>
+        <!--
+            Tells Android to include this library in the test package's class loader.
+            The test runner is not included by default in a manifest file.
+        -->
+        <uses-library android:name="android.test.runner" />
+    </application>
+    <!--
+        Specifies that the test package requires API platform level 3 (Android 1.5) or above.
+        The installer will not install this package onto a device or emulator that is running an
+        older platform version.
+     -->
+    <uses-sdk android:minSdkVersion="3" />
+    <!--
+        Declares the instrumentation for this application. The instrumentation class is
+        specified by the "name" attribute, and must name a subclass of
+        android.app.Instrumentation. The application that is run by the instrumentation object is
+        specified by the "targetPackage" attribute.
+     -->
+    <instrumentation
+        android:targetPackage="com.example.android.newalarm"
+        android:name="android.test.InstrumentationTestRunner" />
+</manifest>
diff --git a/samples/Alarm/tests/_index.html b/samples/Alarm/tests/_index.html
new file mode 100644
index 0000000..614125d
--- /dev/null
+++ b/samples/Alarm/tests/_index.html
@@ -0,0 +1,50 @@
+<p>
+    This sample is the test application for the <a href="../Alarm/index.html">Alarm</a>
+    sample application. It tests the application's <code>AlarmService</code> service.
+</p>
+<p>
+    The test application uses the
+    <a href="../../../reference/android/test/ServiceTestCase.html">
+    <code>ServiceTestCase</code></a>  test case class,
+    which extends the JUnit <a href="../../../reference/junit/framework/TestCase.html">
+    <code>TestCase</code></a> class. The test runner is
+    <a href="../../../reference/android/test/InstrumentationTestRunner.html">
+    <code>InstrumentationTestRunner</code></a>.
+</p>
+<p>
+    The application shows how to set up a test application project,
+    how to create the <a href="AndroidManifest.html"><code>AndroidManifest.xml</code></a>
+    file for a test application, and how to set up a test case class for a service. The
+    test case class, <a href="src/com/android/example/newalarm/ServiceAlarmTest.html">
+    <code>AlarmServiceTest</code></a>, contains tests that demonstrate the following
+    Android test patterns:
+</p>
+    <ul>
+        <li>
+            Test setup: The <code>setUp()</code> method re-initializes the state of the
+            service under test before each test is run.
+        </li>
+        <li>
+            Service start: The <code>Service.testServiceCreate()</code> test confirms that the
+            service starts correctly and initializes the variables it needs to provide its
+            services.
+        </li>
+    </ul>
+<p>
+    The <a href="AndroidManifest.html">manifest</a> declares an <code>&lt;instrumentation&gt;</code>
+    element that links the test application with the application under test. Specifically, the
+    element's <code>android:name</code> attribute specifies <code>InstrumentationTestRunner</code>
+    as the instrumentation to use. The <code>android:targetPackage</code> attribute specifies
+    <code>com.android.example.newalarm</code> as the name of the Android package that contains the
+    service under test.
+</p>
+<p class="note">
+    <strong>Note:</strong> <code>AlarmServiceTest.java</code> uses the Java package name
+    <code>com.example.android.newalarm</code>, which is the same package used by service under
+    test, <code>AlarmService.java</code>. This allows the test class to access members in the
+    service under test that are defined with package visibility. To prevent conflicts, though,
+    the generated java file <code>R.java</code> for <code>AlarmServiceTest</code> uses the
+    Java package name <code>com.example.android.newalarm.test</code>. For the same reason, the
+    Android package name for the test application (specified in the manifest file), is
+    <code>com.example.android.newalarm.test</code>.
+</p>
diff --git a/samples/Alarm/tests/src/com/example/android/newalarm/AlarmServiceTest.java b/samples/Alarm/tests/src/com/example/android/newalarm/AlarmServiceTest.java
new file mode 100644
index 0000000..4d6c7ad
--- /dev/null
+++ b/samples/Alarm/tests/src/com/example/android/newalarm/AlarmServiceTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.newalarm;
+
+import android.content.Intent;
+import android.test.ServiceTestCase;
+import com.example.android.newalarm.AlarmService;
+
+/**
+ * Test class for the Alarm sample test package. This test class tests the AlarmService
+ * service component.
+ */
+public class AlarmServiceTest extends ServiceTestCase<AlarmService> {
+    // Contains an Intent used to start the service
+    Intent mStartServiceIntent;
+
+    // Contains a handle to the system alarm service
+    AlarmService mService;
+
+    /**
+     * Constructor for the test class. Test classes that are run by InstrumentationTestRunner
+     * must provide a constructor with no arguments that calls the base class constructor as its
+     * first statement.
+     */
+    public AlarmServiceTest() {
+        super(AlarmService.class);
+    }
+
+    /*
+     * Sets up the test fixture. This method is called before each test
+     */
+    @Override
+    protected void setUp() throws Exception {
+
+        super.setUp();
+
+        // Sets up an intent to start the service under test
+        mStartServiceIntent = new Intent(this.getSystemContext(),AlarmService.class);
+    }
+
+    /**
+     * Cleans up the test fixture
+     * Called after each test method. If you override the method, call super.tearDown() as the
+     * last statement in your override.
+     */
+    @Override
+    protected void tearDown() throws Exception {
+        // Always call the super constructor when overriding tearDown()
+        super.tearDown();
+    }
+
+    /**
+     * Tests the service's onCreate() method. Starts the service using startService(Intent)
+     */
+    public void testServiceCreate() {
+        // Starts the service under test
+        this.startService(mStartServiceIntent);
+
+        // Gets a handle to the service under test.
+        mService = this.getService();
+
+        // Asserts that the Notification Manager was created in the service under test.
+        assertNotNull(mService.mNotificationManager);
+
+        // Asserts that the PendingIntent for the expanded status window was created
+        assertNotNull(mService.mContentIntent);
+
+        // Asserts that the notification was created
+        assertNotNull(mService.mNotification);
+    }
+
+}
diff --git a/samples/ApiDemos/AndroidManifest.xml b/samples/ApiDemos/AndroidManifest.xml
index 8163265..6e39538 100644
--- a/samples/ApiDemos/AndroidManifest.xml
+++ b/samples/ApiDemos/AndroidManifest.xml
@@ -32,6 +32,9 @@
     <uses-permission android:name="android.permission.SEND_SMS" />
     <uses-permission android:name="android.permission.RECEIVE_SMS" />
 
+    <!-- For android.media.audiofx.Visualizer -->
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+
     <!-- We will request access to the camera, saying we require a camera
          of some sort but not one with autofocus capability. -->
     <uses-permission android:name="android.permission.CAMERA" />
@@ -1884,6 +1887,13 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".media.AudioFxDemo" android:label="Media/AudioFx">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.SAMPLE_CODE" />
+            </intent-filter>
+        </activity>
+
         <!-- ************************************* -->
         <!--      APPWIDGET PACKAGE SAMPLES           -->
         <!-- ************************************* -->
diff --git a/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.java b/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.java
new file mode 100644
index 0000000..7b4db1f
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.apis.media;
+
+import com.example.android.apis.R;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.media.audiofx.Equalizer;
+import android.media.audiofx.Visualizer;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+import java.io.IOException;
+
+public class AudioFxDemo extends Activity {
+    private static final String TAG = "AudioFxDemo";
+
+    private static final float VISUALIZER_HEIGHT_DIP = 50f;
+
+    private MediaPlayer mMediaPlayer;
+    private Visualizer mVisualizer;
+    private Equalizer mEqualizer;
+
+    private LinearLayout mLinearLayout;
+    private VisualizerView mVisualizerView;
+    private TextView mStatusTextView;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setVolumeControlStream(AudioManager.STREAM_MUSIC);
+
+        mStatusTextView = new TextView(this);
+
+        mLinearLayout = new LinearLayout(this);
+        mLinearLayout.setOrientation(LinearLayout.VERTICAL);
+        mLinearLayout.addView(mStatusTextView);
+
+        setContentView(mLinearLayout);
+
+        // Create the MediaPlayer
+        mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);
+        Log.d(TAG, "MediaPlayer audio session ID: " + mMediaPlayer.getAudioSessionId());
+
+        setupVisualizerFxAndUI();
+        setupEqualizerFxAndUI();
+
+        // Make sure the visualizer is enabled only when you actually want to receive data, and
+        // when it makes sense to receive data.
+        mVisualizer.setEnabled(true);
+
+        // When the stream ends, we don't need to collect any more data. We don't do this in
+        // setupVisualizerFxAndUI because we likely want to have more, non-Visualizer related code
+        // in this callback.
+        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+            public void onCompletion(MediaPlayer mediaPlayer) {
+                mVisualizer.setEnabled(false);
+            }
+        });
+
+        mMediaPlayer.start();
+        mStatusTextView.setText("Playing audio...");
+    }
+
+    private void setupEqualizerFxAndUI() {
+        // Create the Equalizer object (an AudioEffect subclass) and attach it to our media player,
+        // with a default priority (0).
+        mEqualizer = new Equalizer(0, mMediaPlayer.getAudioSessionId());
+        mEqualizer.setEnabled(true);
+
+        TextView eqTextView = new TextView(this);
+        eqTextView.setText("Equalizer:");
+        mLinearLayout.addView(eqTextView);
+
+        short bands = mEqualizer.getNumberOfBands();
+
+        final short minEQLevel = mEqualizer.getBandLevelRange()[0];
+        final short maxEQLevel = mEqualizer.getBandLevelRange()[1];
+
+        for (short i = 0; i < bands; i++) {
+            final short band = i;
+
+            TextView freqTextView = new TextView(this);
+            freqTextView.setLayoutParams(new ViewGroup.LayoutParams(
+                    ViewGroup.LayoutParams.FILL_PARENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT));
+            freqTextView.setGravity(Gravity.CENTER_HORIZONTAL);
+            freqTextView.setText((mEqualizer.getCenterFreq(band) / 1000) + " Hz");
+            mLinearLayout.addView(freqTextView);
+
+            LinearLayout row = new LinearLayout(this);
+            row.setOrientation(LinearLayout.HORIZONTAL);
+
+            TextView minDbTextView = new TextView(this);
+            minDbTextView.setLayoutParams(new ViewGroup.LayoutParams(
+                    ViewGroup.LayoutParams.WRAP_CONTENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT));
+            minDbTextView.setText((minEQLevel / 100) + " dB");
+
+            TextView maxDbTextView = new TextView(this);
+            maxDbTextView.setLayoutParams(new ViewGroup.LayoutParams(
+                    ViewGroup.LayoutParams.WRAP_CONTENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT));
+            maxDbTextView.setText((maxEQLevel / 100) + " dB");
+
+            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
+                    ViewGroup.LayoutParams.FILL_PARENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT);
+            layoutParams.weight = 1;
+            SeekBar bar = new SeekBar(this);
+            bar.setLayoutParams(layoutParams);
+            bar.setMax(maxEQLevel - minEQLevel);
+            bar.setProgress(mEqualizer.getBandLevel(band));
+
+            bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                public void onProgressChanged(SeekBar seekBar, int progress,
+                        boolean fromUser) {
+                    mEqualizer.setBandLevel(band, (short) (progress + minEQLevel));
+                }
+
+                public void onStartTrackingTouch(SeekBar seekBar) {}
+                public void onStopTrackingTouch(SeekBar seekBar) {}
+            });
+
+            row.addView(minDbTextView);
+            row.addView(bar);
+            row.addView(maxDbTextView);
+
+            mLinearLayout.addView(row);
+        }
+    }
+
+    private void setupVisualizerFxAndUI() {
+        // Create a VisualizerView (defined below), which will render the simplified audio
+        // wave form to a Canvas.
+        mVisualizerView = new VisualizerView(this);
+        mVisualizerView.setLayoutParams(new ViewGroup.LayoutParams(
+                ViewGroup.LayoutParams.FILL_PARENT,
+                (int)(VISUALIZER_HEIGHT_DIP * getResources().getDisplayMetrics().density)));
+        mLinearLayout.addView(mVisualizerView);
+
+        // Create the Visualizer object and attach it to our media player.
+        mVisualizer = new Visualizer(mMediaPlayer.getAudioSessionId());
+        mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
+        mVisualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {
+            public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
+                    int samplingRate) {
+                mVisualizerView.updateVisualizer(bytes);
+            }
+
+            public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) {}
+        }, Visualizer.getMaxCaptureRate() / 2, true, false);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        if (isFinishing() && mMediaPlayer != null) {
+            mVisualizer.release();
+            mEqualizer.release();
+            mMediaPlayer.release();
+            mMediaPlayer = null;
+        }
+    }
+}
+
+/**
+ * A simple class that draws waveform data received from a
+ * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture }
+ */
+class VisualizerView extends View {
+    private byte[] mBytes;
+    private float[] mPoints;
+    private Rect mRect = new Rect();
+
+    private Paint mForePaint = new Paint();
+
+    public VisualizerView(Context context) {
+        super(context);
+        init();
+    }
+
+    private void init() {
+        mBytes = null;
+
+        mForePaint.setStrokeWidth(1f);
+        mForePaint.setAntiAlias(true);
+        mForePaint.setColor(Color.rgb(0, 128, 255));
+    }
+
+    public void updateVisualizer(byte[] bytes) {
+        mBytes = bytes;
+        invalidate();
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+
+        if (mBytes == null) {
+            return;
+        }
+
+        if (mPoints == null || mPoints.length < mBytes.length * 4) {
+            mPoints = new float[mBytes.length * 4];
+        }
+
+        mRect.set(0, 0, getWidth(), getHeight());
+
+        for (int i = 0; i < mBytes.length - 1; i++) {
+            mPoints[i * 4] = mRect.width() * i / (mBytes.length - 1);
+            mPoints[i * 4 + 1] = mRect.height() / 2
+                    + ((byte) (mBytes[i] + 128)) * (mRect.height() / 2) / 128;
+            mPoints[i * 4 + 2] = mRect.width() * (i + 1) / (mBytes.length - 1);
+            mPoints[i * 4 + 3] = mRect.height() / 2
+                    + ((byte) (mBytes[i + 1] + 128)) * (mRect.height() / 2) / 128;
+        }
+
+        canvas.drawLines(mPoints, mForePaint);
+    }
+}
diff --git a/samples/NFCDemo/Android.mk b/samples/NFCDemo/Android.mk
new file mode 100644
index 0000000..60815a2
--- /dev/null
+++ b/samples/NFCDemo/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := samples tests
+
+LOCAL_STATIC_JAVA_LIBRARIES := guava
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := NFCDemo
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/NFCDemo/AndroidManifest.xml b/samples/NFCDemo/AndroidManifest.xml
new file mode 100644
index 0000000..044690b
--- /dev/null
+++ b/samples/NFCDemo/AndroidManifest.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Declare the contents of this Android application.  The namespace
+     attribute brings in the Android platform namespace, and the package
+     supplies a unique name for the application.  When writing your
+     own application, the package name must be changed from "com.example.*"
+     to come from a domain that you own or have control over. -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.nfc"
+>
+    <uses-permission android:name="android.permission.NFC" />
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <application
+        android:icon="@drawable/icon"
+        android:label="@string/app_name"
+    >
+    <activity android:name=".simulator.FakeTagsActivity"
+        android:theme="@android:style/Theme.NoTitleBar">
+        <intent-filter>
+            <action android:name="android.intent.action.MAIN" />
+            <category android:name="android.intent.category.LAUNCHER" />
+        </intent-filter>
+    </activity>
+        <activity android:name="TagViewer"
+            android:theme="@android:style/Theme.NoTitleBar"
+        >
+            <intent-filter>
+                <action android:name="android.nfc.action.TAG_DISCOVERED"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+    </application>
+    <uses-sdk android:minSdkVersion="9" />
+    <uses-feature android:name="android.hardware.nfc" android:required="true" />
+</manifest>
diff --git a/samples/NFCDemo/_index.html b/samples/NFCDemo/_index.html
new file mode 100644
index 0000000..d1c53f1
--- /dev/null
+++ b/samples/NFCDemo/_index.html
@@ -0,0 +1,129 @@
+<p>
+  Near-field Communication or NFC is a standard defined by the
+  <a href=http://www.nfc-forum.org/home>NFC Forum
+  </a>.
+  NFC Data Exchange Format (NDEF) defines a common data format between NFC-compliant devices and tags.
+  This demo application shows how to read a NDEF Tags using using Android 2.3 SDK APIs.
+  The NFC Tags consist of data encoded in NDEF Message format specified by NFC Forum Type 2 Specification.
+  Each NDEF message consists of one or more NDEF Records.
+
+  You need a NFC compliant device and a NFC compliant Tag to use this sample app. Or else, you could use
+  the FakeTagsActivity displayed at launch of this sample app, to generate fake Tag broadcasts from the emulator.
+</p>
+
+<p>The application includes:
+</p>
+  <ul>
+    <li>
+      <a href="src/com/example/android/nfc/TagViewer.html">
+        <code>TagViewer
+        </code>
+      </a>
+      &mdash; an
+      <code>Activity
+      </code> that handles a broadcast of a new tag that the device
+      just discovered, parses it, and displays its record contents in a
+      <code>ListActivity
+      </code>
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/NdefMessageParser.html">
+        <code> NdefMessageParser
+        </code>
+      </a>
+      &mdash; parses the record type of records within the NDEF message.
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/record/ParsedNdefRecord.html">
+        <code>ParsedNdefRecord
+        </code>
+      </a>
+      &mdash; an interface implemented by all parsed NdefRecord types.
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/record/SmartPoster.html">
+        <code>SmartPoster
+        </code>
+      </a>
+      &mdash; a representation of an NFC Forum Smart Poster Record Type.
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/record/TextRecord.html">
+        <code>TextRecord
+        </code>
+      </a>
+      &mdash; a representation of an NFC Forum Text Record Type.
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/record/UriRecord.html">
+        <code>UriRecord
+        </code>
+      </a>
+      &mdash; a representation of an NFC Forum Uri Record Type.
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/simulator/FakeTagsActivity.html">
+        <code>FakeTagsActivity
+        </code>
+      </a>
+      &mdash; A activity that launches tags as if they had been scanned.
+      This is useful if you don't have access to NFC enabled device or tag.
+    </li>
+    <li>
+      <a href="src/com/example/android/nfc/simulator/MockNdefMessages.html">
+        <code>MockNdefMessages
+        </code>
+      </a>
+      &mdash; this class provides a list of fake NFC Ndef format Tags.
+    </li>
+
+  </ul>
+<p>If you are developing an application that uses the NFC API, remember that the feature
+  is supported only on Android 2.3 (API level 9) and higher versions of the platform. Also,
+  among devices running Android 2.3 (API level 9) or higher, not all devices will offer NFC
+  support. To ensure that your application can only be installed on devices that are capable
+  of supporting NFC, remember to add the following to the application's manifest before
+  publishing to Android Market:
+</p>
+<ul>
+  <li>
+    <code>&lt;uses-sdk android:minSdkVersion="9" /&gt;
+    </code>,
+    which indicates to Android Market and the platform that your application requires
+    Android 2.3 or higher. For more information, see
+    <a href="../../../guide/appendix/api-levels.html">API Levels
+    </a>
+    and the documentation for the
+    <a href="../../../guide/topics/manifest/uses-sdk-element.html">
+      <code>&lt;uses-sdk&gt;
+      </code>
+    </a> element.
+  </li>
+</ul>
+<p>To control how Android Market filters your application
+  from devices that do not support NFC, remember to add the following to the application's manifest
+  <ul>
+    <li>
+      <code>&lt;uses-feature android:name="android.hardware.nfc" /&gt;
+      </code>,
+      which tells Android Market that your application uses the NFC API. The declaration
+      should include an
+      <code>android:required
+      </code> attribute that indicates whether you want
+      Android Market to filter the application from devices that do not offer NFC support. Other
+      <code>&lt;uses-feature&gt;
+      </code> declarations may also be needed, depending on your
+      implementation. For more information, see the documentation for the
+      <a href="../../../guide/topics/manifest/uses-feature-element.html">
+        <code>&lt;uses-feature&gt;
+        </code>
+      </a> element.
+    </li>
+  </ul>
+<p>For more information about using the NFC API, see the
+  <a href="../../../reference/android/nfc/package-summary.html">
+    <code>android.nfc</code>
+    </a>
+   documentation.
+</p>
+<img alt="" src="../images/NfcDemo.png"/>
diff --git a/samples/NFCDemo/res/drawable/icon.png b/samples/NFCDemo/res/drawable/icon.png
new file mode 100644
index 0000000..a07c69f
--- /dev/null
+++ b/samples/NFCDemo/res/drawable/icon.png
Binary files differ
diff --git a/samples/NFCDemo/res/layout/tag_divider.xml b/samples/NFCDemo/res/layout/tag_divider.xml
new file mode 100644
index 0000000..b6b1b7c
--- /dev/null
+++ b/samples/NFCDemo/res/layout/tag_divider.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<View xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?android:attr/listDivider"
+/>
\ No newline at end of file
diff --git a/samples/NFCDemo/res/layout/tag_text.xml b/samples/NFCDemo/res/layout/tag_text.xml
new file mode 100644
index 0000000..59cbbfb
--- /dev/null
+++ b/samples/NFCDemo/res/layout/tag_text.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/text"
+    android:layout_width="match_parent"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:layout_height="wrap_content"
+    android:padding="4dip"
+    android:textAppearance="?android:attr/textAppearanceMedium"
+    android:maxLines="5"
+    android:ellipsize="end"
+    android:gravity="center_vertical"
+/>
\ No newline at end of file
diff --git a/samples/NFCDemo/res/layout/tag_viewer.xml b/samples/NFCDemo/res/layout/tag_viewer.xml
new file mode 100644
index 0000000..a429ef9
--- /dev/null
+++ b/samples/NFCDemo/res/layout/tag_viewer.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent" android:layout_height="match_parent"
+    android:orientation="vertical">
+    <!-- Title -->
+    <TextView android:id="@+id/title" android:layout_width="wrap_content"
+        android:layout_height="wrap_content" android:singleLine="true"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textStyle="bold" android:shadowColor="#BB000000"
+        android:shadowRadius="2.75" android:gravity="center_vertical" />
+    <!-- Content -->
+    <ScrollView android:layout_width="match_parent"
+        android:layout_height="0dip" android:layout_weight="1">
+        <LinearLayout android:id="@+id/list" android:layout_width="match_parent"
+            android:layout_height="wrap_content" android:orientation="vertical" />
+    </ScrollView>
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/NFCDemo/res/raw/discovered_tag_notification.ogg b/samples/NFCDemo/res/raw/discovered_tag_notification.ogg
new file mode 100755
index 0000000..7bf5df7
--- /dev/null
+++ b/samples/NFCDemo/res/raw/discovered_tag_notification.ogg
Binary files differ
diff --git a/samples/NFCDemo/res/values/strings.xml b/samples/NFCDemo/res/values/strings.xml
new file mode 100644
index 0000000..251d2f6
--- /dev/null
+++ b/samples/NFCDemo/res/values/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- The title of the NFC tag application -->
+    <string name="app_name">NFCDemo</string>
+
+    <!-- The title for the activity that shows a tag that was just scanned -->
+    <string name="title_scanned_tag">New tag collected</string>
+
+    <!-- Heading for the text of the content in the "my tag" feature. -->
+    <string name="tag_text">Text</string>
+
+</resources>
diff --git a/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.java b/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.java
new file mode 100644
index 0000000..7372810
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.example.android.nfc;
+
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+
+import com.example.android.nfc.record.ParsedNdefRecord;
+import com.example.android.nfc.record.SmartPoster;
+import com.example.android.nfc.record.TextRecord;
+import com.example.android.nfc.record.UriRecord;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Utility class for creating {@link ParsedNdefMessage}s.
+ */
+public class NdefMessageParser {
+
+    // Utility class
+    private NdefMessageParser() {
+
+    }
+
+    /** Parse an NdefMessage */
+    public static List<ParsedNdefRecord> parse(NdefMessage message) {
+        return getRecords(message.getRecords());
+    }
+
+    public static List<ParsedNdefRecord> getRecords(NdefRecord[] records) {
+        List<ParsedNdefRecord> elements = new ArrayList<ParsedNdefRecord>();
+        for (NdefRecord record : records) {
+            if (UriRecord.isUri(record)) {
+                elements.add(UriRecord.parse(record));
+            } else if (TextRecord.isText(record)) {
+                elements.add(TextRecord.parse(record));
+            } else if (SmartPoster.isPoster(record)) {
+                elements.add(SmartPoster.parse(record));
+            }
+        }
+        return elements;
+    }
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/TagViewer.java b/samples/NFCDemo/src/com/example/android/nfc/TagViewer.java
new file mode 100644
index 0000000..01dc0bd
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/TagViewer.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.nfc;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.example.android.nfc.record.ParsedNdefRecord;
+
+import java.util.List;
+
+/**
+ * An {@link Activity} which handles a broadcast of a new tag that the device
+ * just discovered.
+ */
+public class TagViewer extends Activity {
+
+    static final String TAG = "ViewTag";
+
+    /**
+     * This activity will finish itself in this amount of time if the user
+     * doesn't do anything.
+     */
+    static final int ACTIVITY_TIMEOUT_MS = 1 * 1000;
+
+    TextView mTitle;
+
+    LinearLayout mTagContent;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.tag_viewer);
+        mTagContent = (LinearLayout) findViewById(R.id.list);
+        mTitle = (TextView) findViewById(R.id.title);
+        resolveIntent(getIntent());
+    }
+
+    void resolveIntent(Intent intent) {
+        // Parse the intent
+        String action = intent.getAction();
+        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
+            // When a tag is discovered we send it to the service to be save. We
+            // include a PendingIntent for the service to call back onto. This
+            // will cause this activity to be restarted with onNewIntent(). At
+            // that time we read it from the database and view it.
+            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
+            NdefMessage[] msgs;
+            if (rawMsgs != null) {
+                msgs = new NdefMessage[rawMsgs.length];
+                for (int i = 0; i < rawMsgs.length; i++) {
+                    msgs[i] = (NdefMessage) rawMsgs[i];
+                }
+            } else {
+                // Unknown tag type
+                byte[] empty = new byte[] {};
+                NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
+                NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
+                msgs = new NdefMessage[] {msg};
+            }
+            // Setup the views
+            setTitle(R.string.title_scanned_tag);
+            buildTagViews(msgs);
+        } else {
+            Log.e(TAG, "Unknown intent " + intent);
+            finish();
+            return;
+        }
+    }
+
+    void buildTagViews(NdefMessage[] msgs) {
+        if (msgs == null || msgs.length == 0) {
+            return;
+        }
+        LayoutInflater inflater = LayoutInflater.from(this);
+        LinearLayout content = mTagContent;
+        // Clear out any old views in the content area, for example if you scan
+        // two tags in a row.
+        content.removeAllViews();
+        // Parse the first message in the list
+        // Build views for all of the sub records
+        List<ParsedNdefRecord> records = NdefMessageParser.parse(msgs[0]);
+        final int size = records.size();
+        for (int i = 0; i < size; i++) {
+            ParsedNdefRecord record = records.get(i);
+            content.addView(record.getView(this, inflater, content, i));
+            inflater.inflate(R.layout.tag_divider, content, true);
+        }
+    }
+
+    @Override
+    public void onNewIntent(Intent intent) {
+        setIntent(intent);
+        resolveIntent(intent);
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        mTitle.setText(title);
+    }
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.java b/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.java
new file mode 100644
index 0000000..b706ae8
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.nfc.record;
+
+import android.app.Activity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+public interface ParsedNdefRecord {
+
+    /**
+     * Returns a view to display this record.
+     */
+    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent,
+            int offset);
+
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.java b/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.java
new file mode 100644
index 0000000..f86d3ef
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.nfc.record;
+
+import android.app.Activity;
+import android.nfc.FormatException;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.LinearLayout;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+import com.example.android.nfc.NdefMessageParser;
+import com.example.android.nfc.R;
+
+import java.util.Arrays;
+import java.util.NoSuchElementException;
+
+/**
+ * A representation of an NFC Forum "Smart Poster".
+ */
+public class SmartPoster implements ParsedNdefRecord {
+
+    /**
+     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
+     *
+     * "The Title record for the service (there can be many of these in
+     * different languages, but a language MUST NOT be repeated). This record is
+     * optional."
+     */
+    private final TextRecord mTitleRecord;
+
+    /**
+     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
+     *
+     * "The URI record. This is the core of the Smart Poster, and all other
+     * records are just metadata about this record. There MUST be one URI record
+     * and there MUST NOT be more than one."
+     */
+    private final UriRecord mUriRecord;
+
+    /**
+     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
+     *
+     * "The Action record. This record describes how the service should be
+     * treated. For example, the action may indicate that the device should save
+     * the URI as a bookmark or open a browser. The Action record is optional.
+     * If it does not exist, the device may decide what to do with the service.
+     * If the action record exists, it should be treated as a strong suggestion;
+     * the UI designer may ignore it, but doing so will induce a different user
+     * experience from device to device."
+     */
+    private final RecommendedAction mAction;
+
+    /**
+     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
+     *
+     * "The Type record. If the URI references an external entity (e.g., via a
+     * URL), the Type record may be used to declare the MIME type of the entity.
+     * This can be used to tell the mobile device what kind of an object it can
+     * expect before it opens the connection. The Type record is optional."
+     */
+    private final String mType;
+
+    private SmartPoster(UriRecord uri, TextRecord title, RecommendedAction action, String type) {
+        mUriRecord = Preconditions.checkNotNull(uri);
+        mTitleRecord = title;
+        mAction = Preconditions.checkNotNull(action);
+        mType = type;
+    }
+
+    public UriRecord getUriRecord() {
+        return mUriRecord;
+    }
+
+    /**
+     * Returns the title of the smart poster. This may be {@code null}.
+     */
+    public TextRecord getTitle() {
+        return mTitleRecord;
+    }
+
+    public static SmartPoster parse(NdefRecord record) {
+        Preconditions.checkArgument(record.getTnf() == NdefRecord.TNF_WELL_KNOWN);
+        Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_SMART_POSTER));
+        try {
+            NdefMessage subRecords = new NdefMessage(record.getPayload());
+            return parse(subRecords.getRecords());
+        } catch (FormatException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    public static SmartPoster parse(NdefRecord[] recordsRaw) {
+        try {
+            Iterable<ParsedNdefRecord> records = NdefMessageParser.getRecords(recordsRaw);
+            UriRecord uri = Iterables.getOnlyElement(Iterables.filter(records, UriRecord.class));
+            TextRecord title = getFirstIfExists(records, TextRecord.class);
+            RecommendedAction action = parseRecommendedAction(recordsRaw);
+            String type = parseType(recordsRaw);
+            return new SmartPoster(uri, title, action, type);
+        } catch (NoSuchElementException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    public static boolean isPoster(NdefRecord record) {
+        try {
+            parse(record);
+            return true;
+        } catch (IllegalArgumentException e) {
+            return false;
+        }
+    }
+
+    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
+        if (mTitleRecord != null) {
+            // Build a container to hold the title and the URI
+            LinearLayout container = new LinearLayout(activity);
+            container.setOrientation(LinearLayout.VERTICAL);
+            container.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
+                LayoutParams.WRAP_CONTENT));
+            container.addView(mTitleRecord.getView(activity, inflater, container, offset));
+            inflater.inflate(R.layout.tag_divider, container);
+            container.addView(mUriRecord.getView(activity, inflater, container, offset));
+            return container;
+        } else {
+            // Just a URI, return a view for it directly
+            return mUriRecord.getView(activity, inflater, parent, offset);
+        }
+    }
+
+    /**
+     * Returns the first element of {@code elements} which is an instance of
+     * {@code type}, or {@code null} if no such element exists.
+     */
+    private static <T> T getFirstIfExists(Iterable<?> elements, Class<T> type) {
+        Iterable<T> filtered = Iterables.filter(elements, type);
+        T instance = null;
+        if (!Iterables.isEmpty(filtered)) {
+            instance = Iterables.get(filtered, 0);
+        }
+        return instance;
+    }
+
+    private enum RecommendedAction {
+        UNKNOWN((byte) -1), DO_ACTION((byte) 0), SAVE_FOR_LATER((byte) 1), OPEN_FOR_EDITING(
+            (byte) 2);
+
+        private static final ImmutableMap<Byte, RecommendedAction> LOOKUP;
+        static {
+            ImmutableMap.Builder<Byte, RecommendedAction> builder = ImmutableMap.builder();
+            for (RecommendedAction action : RecommendedAction.values()) {
+                builder.put(action.getByte(), action);
+            }
+            LOOKUP = builder.build();
+        }
+
+        private final byte mAction;
+
+        private RecommendedAction(byte val) {
+            this.mAction = val;
+        }
+
+        private byte getByte() {
+            return mAction;
+        }
+    }
+
+    private static NdefRecord getByType(byte[] type, NdefRecord[] records) {
+        for (NdefRecord record : records) {
+            if (Arrays.equals(type, record.getType())) {
+                return record;
+            }
+        }
+        return null;
+    }
+
+    private static final byte[] ACTION_RECORD_TYPE = new byte[] {'a', 'c', 't'};
+
+    private static RecommendedAction parseRecommendedAction(NdefRecord[] records) {
+        NdefRecord record = getByType(ACTION_RECORD_TYPE, records);
+        if (record == null) {
+            return RecommendedAction.UNKNOWN;
+        }
+        byte action = record.getPayload()[0];
+        if (RecommendedAction.LOOKUP.containsKey(action)) {
+            return RecommendedAction.LOOKUP.get(action);
+        }
+        return RecommendedAction.UNKNOWN;
+    }
+
+    private static final byte[] TYPE_TYPE = new byte[] {'t'};
+
+    private static String parseType(NdefRecord[] records) {
+        NdefRecord type = getByType(TYPE_TYPE, records);
+        if (type == null) {
+            return null;
+        }
+        return new String(type.getPayload(), Charsets.UTF_8);
+    }
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.java b/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.java
new file mode 100644
index 0000000..8041cca
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.example.android.nfc.record;
+
+import android.app.Activity;
+import android.nfc.NdefRecord;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.google.common.base.Preconditions;
+
+import com.example.android.nfc.R;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * An NFC Text Record
+ */
+public class TextRecord implements ParsedNdefRecord {
+
+    /** ISO/IANA language code */
+    private final String mLanguageCode;
+
+    private final String mText;
+
+    private TextRecord(String languageCode, String text) {
+        mLanguageCode = Preconditions.checkNotNull(languageCode);
+        mText = Preconditions.checkNotNull(text);
+    }
+
+    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
+        TextView text = (TextView) inflater.inflate(R.layout.tag_text, parent, false);
+        text.setText(mText);
+        return text;
+    }
+
+    public String getText() {
+        return mText;
+    }
+
+    /**
+     * Returns the ISO/IANA language code associated with this text element.
+     */
+    public String getLanguageCode() {
+        return mLanguageCode;
+    }
+
+    // TODO: deal with text fields which span multiple NdefRecords
+    public static TextRecord parse(NdefRecord record) {
+        Preconditions.checkArgument(record.getTnf() == NdefRecord.TNF_WELL_KNOWN);
+        Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_TEXT));
+        try {
+            byte[] payload = record.getPayload();
+            /*
+             * payload[0] contains the "Status Byte Encodings" field, per the
+             * NFC Forum "Text Record Type Definition" section 3.2.1.
+             *
+             * bit7 is the Text Encoding Field.
+             *
+             * if (Bit_7 == 0): The text is encoded in UTF-8 if (Bit_7 == 1):
+             * The text is encoded in UTF16
+             *
+             * Bit_6 is reserved for future use and must be set to zero.
+             *
+             * Bits 5 to 0 are the length of the IANA language code.
+             */
+            String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
+            int languageCodeLength = payload[0] & 0077;
+            String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
+            String text =
+                new String(payload, languageCodeLength + 1,
+                    payload.length - languageCodeLength - 1, textEncoding);
+            return new TextRecord(languageCode, text);
+        } catch (UnsupportedEncodingException e) {
+            // should never happen unless we get a malformed tag.
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    public static boolean isText(NdefRecord record) {
+        try {
+            parse(record);
+            return true;
+        } catch (IllegalArgumentException e) {
+            return false;
+        }
+    }
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.java b/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.java
new file mode 100644
index 0000000..452ebb2
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.nfc.record;
+
+import android.app.Activity;
+import android.net.Uri;
+import android.nfc.NdefRecord;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.ImmutableBiMap;
+import com.google.common.primitives.Bytes;
+
+import com.example.android.nfc.R;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+/**
+ * A parsed record containing a Uri.
+ */
+public class UriRecord implements ParsedNdefRecord {
+
+    private static final String TAG = "UriRecord";
+
+    public static final String RECORD_TYPE = "UriRecord";
+
+    /**
+     * NFC Forum "URI Record Type Definition"
+     *
+     * This is a mapping of "URI Identifier Codes" to URI string prefixes,
+     * per section 3.2.2 of the NFC Forum URI Record Type Definition document.
+     */
+    private static final BiMap<Byte, String> URI_PREFIX_MAP = ImmutableBiMap.<Byte, String>builder()
+            .put((byte) 0x00, "")
+            .put((byte) 0x01, "http://www.")
+            .put((byte) 0x02, "https://www.")
+            .put((byte) 0x03, "http://")
+            .put((byte) 0x04, "https://")
+            .put((byte) 0x05, "tel:")
+            .put((byte) 0x06, "mailto:")
+            .put((byte) 0x07, "ftp://anonymous:anonymous@")
+            .put((byte) 0x08, "ftp://ftp.")
+            .put((byte) 0x09, "ftps://")
+            .put((byte) 0x0A, "sftp://")
+            .put((byte) 0x0B, "smb://")
+            .put((byte) 0x0C, "nfs://")
+            .put((byte) 0x0D, "ftp://")
+            .put((byte) 0x0E, "dav://")
+            .put((byte) 0x0F, "news:")
+            .put((byte) 0x10, "telnet://")
+            .put((byte) 0x11, "imap:")
+            .put((byte) 0x12, "rtsp://")
+            .put((byte) 0x13, "urn:")
+            .put((byte) 0x14, "pop:")
+            .put((byte) 0x15, "sip:")
+            .put((byte) 0x16, "sips:")
+            .put((byte) 0x17, "tftp:")
+            .put((byte) 0x18, "btspp://")
+            .put((byte) 0x19, "btl2cap://")
+            .put((byte) 0x1A, "btgoep://")
+            .put((byte) 0x1B, "tcpobex://")
+            .put((byte) 0x1C, "irdaobex://")
+            .put((byte) 0x1D, "file://")
+            .put((byte) 0x1E, "urn:epc:id:")
+            .put((byte) 0x1F, "urn:epc:tag:")
+            .put((byte) 0x20, "urn:epc:pat:")
+            .put((byte) 0x21, "urn:epc:raw:")
+            .put((byte) 0x22, "urn:epc:")
+            .put((byte) 0x23, "urn:nfc:")
+            .build();
+
+    private final Uri mUri;
+
+    private UriRecord(Uri uri) {
+        this.mUri = Preconditions.checkNotNull(uri);
+    }
+
+    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
+        TextView text = (TextView) inflater.inflate(R.layout.tag_text, parent, false);
+        text.setText(mUri.toString());
+        return text;
+    }
+
+    public Uri getUri() {
+        return mUri;
+    }
+
+    /**
+     * Convert {@link android.nfc.NdefRecord} into a {@link android.net.Uri}.
+     * This will handle both TNF_WELL_KNOWN / RTD_URI and TNF_ABSOLUTE_URI.
+     *
+     * @throws IllegalArgumentException if the NdefRecord is not a record
+     *         containing a URI.
+     */
+    public static UriRecord parse(NdefRecord record) {
+        short tnf = record.getTnf();
+        if (tnf == NdefRecord.TNF_WELL_KNOWN) {
+            return parseWellKnown(record);
+        } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) {
+            return parseAbsolute(record);
+        }
+        throw new IllegalArgumentException("Unknown TNF " + tnf);
+    }
+
+    /** Parse and absolute URI record */
+    private static UriRecord parseAbsolute(NdefRecord record) {
+        byte[] payload = record.getPayload();
+        Uri uri = Uri.parse(new String(payload, Charset.forName("UTF-8")));
+        return new UriRecord(uri);
+    }
+
+    /** Parse an well known URI record */
+    private static UriRecord parseWellKnown(NdefRecord record) {
+        Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_URI));
+        byte[] payload = record.getPayload();
+        /*
+         * payload[0] contains the URI Identifier Code, per the
+         * NFC Forum "URI Record Type Definition" section 3.2.2.
+         *
+         * payload[1]...payload[payload.length - 1] contains the rest of
+         * the URI.
+         */
+        String prefix = URI_PREFIX_MAP.get(payload[0]);
+        byte[] fullUri =
+            Bytes.concat(prefix.getBytes(Charset.forName("UTF-8")), Arrays.copyOfRange(payload, 1,
+                payload.length));
+        Uri uri = Uri.parse(new String(fullUri, Charset.forName("UTF-8")));
+        return new UriRecord(uri);
+    }
+
+    public static boolean isUri(NdefRecord record) {
+        try {
+            parse(record);
+            return true;
+        } catch (IllegalArgumentException e) {
+            return false;
+        }
+    }
+
+    private static final byte[] EMPTY = new byte[0];
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.java b/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.java
new file mode 100644
index 0000000..313bab4
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.example.android.nfc.simulator;
+
+import android.app.ListActivity;
+import android.content.Intent;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Bytes;
+
+import java.nio.charset.Charset;
+import java.util.Locale;
+
+/**
+ * A activity that launches tags as if they had been scanned.
+ */
+public class FakeTagsActivity extends ListActivity {
+
+    static final String TAG = "FakeTagsActivity";
+
+    static final byte[] UID = new byte[] {0x05, 0x00, 0x03, 0x08};
+
+    ArrayAdapter<TagDescription> mAdapter;
+
+    public static NdefRecord newTextRecord(String text, Locale locale, boolean encodeInUtf8) {
+        Preconditions.checkNotNull(text);
+        Preconditions.checkNotNull(locale);
+        final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
+        final Charset utfEncoding = encodeInUtf8 ? Charsets.UTF_8 : Charset.forName("UTF-16");
+        final byte[] textBytes = text.getBytes(utfEncoding);
+        final int utfBit = encodeInUtf8 ? 0 : (1 << 7);
+        final char status = (char) (utfBit + langBytes.length);
+        final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
+        return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
+    }
+
+    public static NdefRecord newMimeRecord(String type, byte[] data) {
+        Preconditions.checkNotNull(type);
+        Preconditions.checkNotNull(data);
+        final byte[] typeBytes = type.getBytes(Charsets.US_ASCII);
+        return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, typeBytes, new byte[0], data);
+    }
+
+    static final class TagDescription {
+
+        public String title;
+
+        public NdefMessage[] msgs;
+
+        public TagDescription(String title, byte[] bytes) {
+            this.title = title;
+            try {
+                msgs = new NdefMessage[] {new NdefMessage(bytes)};
+            } catch (final Exception e) {
+                throw new RuntimeException("Failed to create tag description", e);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return title;
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+        final ArrayAdapter<TagDescription> adapter = new ArrayAdapter<TagDescription>(
+            this, android.R.layout.simple_list_item_1, android.R.id.text1);
+        adapter.add(
+            new TagDescription("Broadcast NFC Text Tag", MockNdefMessages.ENGLISH_PLAIN_TEXT));
+        adapter.add(new TagDescription(
+            "Broadcast NFC SmartPoster URL & text", MockNdefMessages.SMART_POSTER_URL_AND_TEXT));
+        adapter.add(new TagDescription(
+            "Broadcast NFC SmartPoster URL", MockNdefMessages.SMART_POSTER_URL_NO_TEXT));
+        setListAdapter(adapter);
+        mAdapter = adapter;
+    }
+
+    @Override
+    public void onListItemClick(ListView l, View v, int position, long id) {
+        final TagDescription description = mAdapter.getItem(position);
+        final Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED);
+        intent.putExtra(NfcAdapter.EXTRA_NDEF_MESSAGES, description.msgs);
+        startActivity(intent);
+    }
+}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.java b/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.java
new file mode 100644
index 0000000..52a122f
--- /dev/null
+++ b/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.nfc.simulator;
+
+/**
+ * This class provides a list of fake NFC Ndef format Tags.
+ */
+public class MockNdefMessages {
+
+    /**
+     * A Smart Poster containing a URL and no text.
+     */
+    public static final byte[] SMART_POSTER_URL_NO_TEXT =
+        new byte[] {(byte) 0xd1, (byte) 0x02, (byte) 0x0f, (byte) 0x53, (byte) 0x70, (byte) 0xd1,
+            (byte) 0x01, (byte) 0x0b, (byte) 0x55, (byte) 0x01, (byte) 0x67, (byte) 0x6f,
+            (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, (byte) 0x2e, (byte) 0x63,
+            (byte) 0x6f, (byte) 0x6d};
+
+    /**
+     * A plain text tag in english.
+     */
+    public static final byte[] ENGLISH_PLAIN_TEXT =
+        new byte[] {(byte) 0xd1, (byte) 0x01, (byte) 0x1c, (byte) 0x54, (byte) 0x02, (byte) 0x65,
+            (byte) 0x6e, (byte) 0x53, (byte) 0x6f, (byte) 0x6d, (byte) 0x65, (byte) 0x20,
+            (byte) 0x72, (byte) 0x61, (byte) 0x6e, (byte) 0x64, (byte) 0x6f, (byte) 0x6d,
+            (byte) 0x20, (byte) 0x65, (byte) 0x6e, (byte) 0x67, (byte) 0x6c, (byte) 0x69,
+            (byte) 0x73, (byte) 0x68, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x78,
+            (byte) 0x74, (byte) 0x2e};
+
+    /**
+     * Smart Poster containing a URL and Text.
+     */
+    public static final byte[] SMART_POSTER_URL_AND_TEXT =
+        new byte[] {(byte) 0xd1, (byte) 0x02, (byte) 0x1c, (byte) 0x53, (byte) 0x70, (byte) 0x91,
+            (byte) 0x01, (byte) 0x09, (byte) 0x54, (byte) 0x02, (byte) 0x65, (byte) 0x6e,
+            (byte) 0x47, (byte) 0x6f, (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65,
+            (byte) 0x51, (byte) 0x01, (byte) 0x0b, (byte) 0x55, (byte) 0x01, (byte) 0x67,
+            (byte) 0x6f, (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, (byte) 0x2e,
+            (byte) 0x63, (byte) 0x6f, (byte) 0x6d};
+
+    /**
+     * All the mock Ndef tags.
+     */
+    public static final byte[][] ALL_MOCK_MESSAGES =
+        new byte[][] {SMART_POSTER_URL_NO_TEXT, ENGLISH_PLAIN_TEXT, SMART_POSTER_URL_AND_TEXT};
+}
diff --git a/samples/SipDemo/Android.mk b/samples/SipDemo/Android.mk
new file mode 100644
index 0000000..6363727
--- /dev/null
+++ b/samples/SipDemo/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := samples
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := SipDemo
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/SipDemo/AndroidManifest.xml b/samples/SipDemo/AndroidManifest.xml
new file mode 100644
index 0000000..8fb7675
--- /dev/null
+++ b/samples/SipDemo/AndroidManifest.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2010 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.example.android.sip">
+    <application android:icon="@drawable/icon" android:label="SipDemo">
+      <activity android:name=".WalkieTalkieActivity"
+          android:configChanges="orientation|keyboardHidden">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+        <activity android:name=".SipSettings" android:label="set_preferences"/>
+
+
+        <receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"/>
+    </application>
+    <uses-sdk android:minSdkVersion="9" />
+    <uses-permission android:name="android.permission.USE_SIP" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+
+    <uses-feature android:name="android.hardware.sip.voip" android:required="true" />
+    <uses-feature android:name="android.hardware.wifi" android:required="true" />
+    <uses-feature android:name="android.hardware.microphone" android:required="true" />
+</manifest>
diff --git a/samples/SipDemo/_index.html b/samples/SipDemo/_index.html
new file mode 100644
index 0000000..dbc9037
--- /dev/null
+++ b/samples/SipDemo/_index.html
@@ -0,0 +1,52 @@
+<p>This is a demo application highlighting how to make internet-based calls with
+the SIP API.  The application uses a walkie-talkie style interface, allowing you
+to only be heard when the button is pushed down.</p>
+
+<p>The source code for this demo app shows how to accomplish three key things
+with SIP:  Make a call, receive a call, and signal to the Android platform that
+your app wants to receive incoming SIP calls, so that they can be handled from
+within the application.</p>
+
+
+<p>The application includes:<p>
+<ul> <li><a
+    href="src/com/example/android/sip/SipSettings.html"><code>SipSettings</code></a>
+  &mdash; a <code>PreferenceActivity</code> that supplies basic settings for SIP
+  authentication.</li> <li><a
+    href="src/com/example/android/sip/cube1/IncomingCallReceiver.html"><code>
+      IncomingCallReceiver</code></a> &mdash; a <code>BroadcastReceiver</code>
+  that listens for incoming SIP calls and passes them to
+  <code>WalkieTalkieActivity</code> for handling.</li> <li><a
+    href="src/com/example/android/sip/WalkieTalkieActivity.html"><code>WalkieTalkieActivity</code></a>
+  &mdash; a activity that login to SIP provider and registers the device to
+  receive incoming SIP, handles incoming calls and makes outgoing calls, managing
+  UI during the call.</li> </ul>
+<p>If you are developing an application that uses the SIP API, remember that the
+feature is supported only on Android 2.3 (API level 9) and higher versions of
+the platform. Also, among devices running Android 2.3 (API level 9) or higher,
+not all devices will offer SIP support. To ensure that your application can only
+be installed on devices that are capable of supporting SIP, remember to add the
+following to the application's manifest before publishing to Android Market:</p>
+<ul> <li><code>&lt;uses-sdk android:minSdkVersion="9" /&gt;</code>, which
+  indicates to Android Market and the platform that your application requires
+  Android 2.3 or higher. For more information, see <a
+    href="../../../guide/appendix/api-levels.html">API Levels</a> and the
+  documentation for the <a
+    href="../../../guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+  element.</li> </ul> <p>To control how Android Market filters your application
+from devices that do not support SIP, remember to add the following to the
+application's manifest <ul> <li><code>&lt;uses-feature
+    android:name="android.hardware.sip.voip" /&gt;</code>, which tells Android
+  Market that your application uses the SIP API. The declaration should include
+  an <code>android:required</code> attribute that indicates whether you want
+  Android Market to filter the application from devices that do not offer SIP
+  support. Other <code>&lt;uses-feature&gt;</code> declarations may also be
+  needed, depending on your implementation. For more information, see the
+  documentation for the <a
+    href="../../../guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+  element.</li> </ul>
+<p>For more information about using the SIP API, see the <a
+  href="../../../reference/android/net/sip/package-summary.html"><code>android.net.sip</a></code>
+documentation. </p>
+
+<img alt="" src="../images/SipDemo.png" />
diff --git a/samples/SipDemo/res/drawable/btn_record.xml b/samples/SipDemo/res/drawable/btn_record.xml
new file mode 100644
index 0000000..a803da1
--- /dev/null
+++ b/samples/SipDemo/res/drawable/btn_record.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+  Copyright (C) 2010 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:drawable="@drawable/btn_speak_pressed" />
+    <item android:state_selected="true" android:drawable="@drawable/btn_speak_pressed" />
+    <item android:drawable="@drawable/btn_speak_normal" />
+</selector>
+
diff --git a/samples/SipDemo/res/drawable/btn_speak_normal.png b/samples/SipDemo/res/drawable/btn_speak_normal.png
new file mode 100644
index 0000000..fb86ceb
--- /dev/null
+++ b/samples/SipDemo/res/drawable/btn_speak_normal.png
Binary files differ
diff --git a/samples/SipDemo/res/drawable/btn_speak_pressed.png b/samples/SipDemo/res/drawable/btn_speak_pressed.png
new file mode 100644
index 0000000..cffdf91
--- /dev/null
+++ b/samples/SipDemo/res/drawable/btn_speak_pressed.png
Binary files differ
diff --git a/samples/SipDemo/res/drawable/btn_speak_selected.png b/samples/SipDemo/res/drawable/btn_speak_selected.png
new file mode 100644
index 0000000..99a1a6f
--- /dev/null
+++ b/samples/SipDemo/res/drawable/btn_speak_selected.png
Binary files differ
diff --git a/samples/SipDemo/res/drawable/icon.png b/samples/SipDemo/res/drawable/icon.png
new file mode 100644
index 0000000..64e3601
--- /dev/null
+++ b/samples/SipDemo/res/drawable/icon.png
Binary files differ
diff --git a/samples/SipDemo/res/layout/call_address_dialog.xml b/samples/SipDemo/res/layout/call_address_dialog.xml
new file mode 100644
index 0000000..2bd7556
--- /dev/null
+++ b/samples/SipDemo/res/layout/call_address_dialog.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2010 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/calladdress_view"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginLeft="20dip"
+        android:layout_marginRight="20dip"
+        android:text="@+string/contactAddress"
+        android:gravity="left"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <EditText
+        android:id="@+id/calladdress_edit"
+        android:layout_height="wrap_content"
+        android:layout_width="fill_parent"
+        android:layout_marginLeft="20dip"
+        android:layout_marginRight="20dip"
+        android:scrollHorizontally="true"
+        android:autoText="false"
+        android:capitalize="none"
+        android:gravity="fill_horizontal"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+</LinearLayout>
diff --git a/samples/SipDemo/res/layout/walkietalkie.xml b/samples/SipDemo/res/layout/walkietalkie.xml
new file mode 100644
index 0000000..bdf634c
--- /dev/null
+++ b/samples/SipDemo/res/layout/walkietalkie.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2010 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+   android:layout_width="fill_parent"
+   android:layout_height="fill_parent">
+    <RelativeLayout android:padding="12dp"
+        android:id="@+id/mainlayout"
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent">
+
+        <TextView
+            android:id="@+id/sipLabel"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:layout_centerHorizontal="true"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+        />
+
+        <ToggleButton
+            android:layout_height="400dp"
+            android:layout_width="400dp"
+            android:text="@+string/talk"
+            android:id="@+id/pushToTalk"
+
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:background="@drawable/btn_record"
+            android:textOff=""
+            android:textOn=""
+            android:layout_marginTop="-20dp" />
+
+    </RelativeLayout>
+</FrameLayout>
diff --git a/samples/SipDemo/res/values/strings.xml b/samples/SipDemo/res/values/strings.xml
new file mode 100644
index 0000000..a0d49bc
--- /dev/null
+++ b/samples/SipDemo/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2010 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+
+<resources>
+    <string name="app_name">SIP Demo</string>
+    <string name="contactAddress">SIP Address to contact</string>
+    <string name="talk">Talk</string>
+  </resources>
diff --git a/samples/SipDemo/res/xml/preferences.xml b/samples/SipDemo/res/xml/preferences.xml
new file mode 100644
index 0000000..590e092
--- /dev/null
+++ b/samples/SipDemo/res/xml/preferences.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2010 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+    <EditTextPreference
+        android:name="SIP Username"
+        android:summary="Username for your SIP Account"
+        android:defaultValue=""
+        android:title="Enter Username"
+        android:key="namePref" />
+    <EditTextPreference
+        android:name="SIP Domain"
+        android:summary="Domain for your SIP Account"
+        android:defaultValue=""
+        android:title="Enter Domain"
+        android:key="domainPref" />
+    <EditTextPreference
+        android:name="SIP Password"
+        android:summary="Password for your SIP Account"
+        android:defaultValue=""
+        android:title="Enter Password"
+        android:key="passPref"
+        android:password="true" />
+</PreferenceScreen>
diff --git a/samples/SipDemo/src/com/example/android/sip/IncomingCallReceiver.java b/samples/SipDemo/src/com/example/android/sip/IncomingCallReceiver.java
new file mode 100644
index 0000000..ea27a0a
--- /dev/null
+++ b/samples/SipDemo/src/com/example/android/sip/IncomingCallReceiver.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.sip;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.sip.*;
+import android.util.Log;
+
+/**
+ * Listens for incoming SIP calls, intercepts and hands them off to WalkieTalkieActivity.
+ */
+public class IncomingCallReceiver extends BroadcastReceiver {
+    /**
+     * Processes the incoming call, answers it, and hands it over to the
+     * WalkieTalkieActivity.
+     * @param context The context under which the receiver is running.
+     * @param intent The intent being received.
+     */
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        SipAudioCall incomingCall = null;
+        try {
+
+            SipAudioCall.Listener listener = new SipAudioCall.Listener() {
+                @Override
+                public void onRinging(SipAudioCall call, SipProfile caller) {
+                    try {
+                        call.answerCall(30);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            };
+
+            WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
+
+            incomingCall = wtActivity.manager.takeAudioCall(intent, listener);
+            incomingCall.answerCall(30);
+            incomingCall.startAudio();
+            incomingCall.setSpeakerMode(true);
+            if(incomingCall.isMuted()) {
+                incomingCall.toggleMute();
+            }
+
+            wtActivity.call = incomingCall;
+
+            wtActivity.updateStatus(incomingCall);
+
+        } catch (Exception e) {
+            if (incomingCall != null) {
+                incomingCall.close();
+            }
+        }
+    }
+
+}
diff --git a/samples/SipDemo/src/com/example/android/sip/SipSettings.java b/samples/SipDemo/src/com/example/android/sip/SipSettings.java
new file mode 100644
index 0000000..2f0624b
--- /dev/null
+++ b/samples/SipDemo/src/com/example/android/sip/SipSettings.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.sip;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+/**
+ * Handles SIP authentication settings for the Walkie Talkie app.
+ */
+public class SipSettings extends PreferenceActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        // Note that none of the preferences are actually defined here.
+        // They're all in the XML file res/xml/preferences.xml.
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.preferences);
+    }
+}
diff --git a/samples/SipDemo/src/com/example/android/sip/WalkieTalkieActivity.java b/samples/SipDemo/src/com/example/android/sip/WalkieTalkieActivity.java
new file mode 100644
index 0000000..4c187ed
--- /dev/null
+++ b/samples/SipDemo/src/com/example/android/sip/WalkieTalkieActivity.java
@@ -0,0 +1,358 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.sip;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.PendingIntent;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.*;
+import android.net.sip.*;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.ToggleButton;
+
+import java.text.ParseException;
+
+/**
+ * Handles all calling, receiving calls, and UI interaction in the WalkieTalkie app.
+ */
+public class WalkieTalkieActivity extends Activity implements View.OnTouchListener {
+
+    public String sipAddress = null;
+
+    public SipManager manager = null;
+    public SipProfile me = null;
+    public SipAudioCall call = null;
+    public IncomingCallReceiver callReceiver;
+
+    private static final int CALL_ADDRESS = 1;
+    private static final int SET_AUTH_INFO = 2;
+    private static final int UPDATE_SETTINGS_DIALOG = 3;
+    private static final int HANG_UP = 4;
+
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.walkietalkie);
+
+        ToggleButton pushToTalkButton = (ToggleButton) findViewById(R.id.pushToTalk);
+        pushToTalkButton.setOnTouchListener(this);
+
+        // Set up the intent filter.  This will be used to fire an
+        // IncomingCallReceiver when someone calls the SIP address used by this
+        // application.
+        IntentFilter filter = new IntentFilter();
+        filter.addAction("android.SipDemo.INCOMING_CALL");
+        callReceiver = new IncomingCallReceiver();
+        this.registerReceiver(callReceiver, filter);
+
+        // "Push to talk" can be a serious pain when the screen keeps turning off.
+        // Let's prevent that.
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+
+        initializeManager();
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        // When we get back from the preference setting Activity, assume
+        // settings have changed, and re-login with new auth info.
+        initializeManager();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (call != null) {
+            call.close();
+        }
+
+        closeLocalProfile();
+
+        if (callReceiver != null) {
+            this.unregisterReceiver(callReceiver);
+        }
+    }
+
+    public void initializeManager() {
+        if(manager == null) {
+          manager = SipManager.newInstance(this);
+        }
+
+        initializeLocalProfile();
+    }
+
+    /**
+     * Logs you into your SIP provider, registering this device as the location to
+     * send SIP calls to for your SIP address.
+     */
+    public void initializeLocalProfile() {
+        if (manager == null) {
+            return;
+        }
+
+        if (me != null) {
+            closeLocalProfile();
+        }
+
+        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
+        String username = prefs.getString("namePref", "");
+        String domain = prefs.getString("domainPref", "");
+        String password = prefs.getString("passPref", "");
+
+        if (username.length() == 0 || domain.length() == 0 || password.length() == 0) {
+            showDialog(UPDATE_SETTINGS_DIALOG);
+            return;
+        }
+
+        try {
+            SipProfile.Builder builder = new SipProfile.Builder(username, domain);
+            builder.setPassword(password);
+            me = builder.build();
+
+            Intent i = new Intent();
+            i.setAction("android.SipDemo.INCOMING_CALL");
+            PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
+            manager.open(me, pi, null);
+
+
+            // This listener must be added AFTER manager.open is called,
+            // Otherwise the methods aren't guaranteed to fire.
+
+            manager.setRegistrationListener(me.getUriString(), new SipRegistrationListener() {
+                    public void onRegistering(String localProfileUri) {
+                        updateStatus("Registering with SIP Server...");
+                    }
+
+                    public void onRegistrationDone(String localProfileUri, long expiryTime) {
+                        updateStatus("Ready");
+                    }
+
+                    public void onRegistrationFailed(String localProfileUri, int errorCode,
+                            String errorMessage) {
+                        updateStatus("Registration failed.  Please check settings.");
+                    }
+                });
+        } catch (ParseException pe) {
+            updateStatus("Connection Error.");
+        } catch (SipException se) {
+            updateStatus("Connection error.");
+        }
+    }
+
+    /**
+     * Closes out your local profile, freeing associated objects into memory
+     * and unregistering your device from the server.
+     */
+    public void closeLocalProfile() {
+        if (manager == null) {
+            return;
+        }
+        try {
+            if (me != null) {
+                manager.close(me.getUriString());
+            }
+        } catch (Exception ee) {
+            Log.d("WalkieTalkieActivity/onDestroy", "Failed to close local profile.", ee);
+        }
+    }
+
+    /**
+     * Make an outgoing call.
+     */
+    public void initiateCall() {
+
+        updateStatus(sipAddress);
+
+        try {
+            SipAudioCall.Listener listener = new SipAudioCall.Listener() {
+                // Much of the client's interaction with the SIP Stack will
+                // happen via listeners.  Even making an outgoing call, don't
+                // forget to set up a listener to set things up once the call is established.
+                @Override
+                public void onCallEstablished(SipAudioCall call) {
+                    call.startAudio();
+                    call.setSpeakerMode(true);
+                    call.toggleMute();
+                    updateStatus(call);
+                }
+
+                @Override
+                public void onCallEnded(SipAudioCall call) {
+                    updateStatus("Ready.");
+                }
+            };
+
+            call = manager.makeAudioCall(me.getUriString(), sipAddress, listener, 30);
+
+        }
+        catch (Exception e) {
+            Log.i("WalkieTalkieActivity/InitiateCall", "Error when trying to close manager.", e);
+            if (me != null) {
+                try {
+                    manager.close(me.getUriString());
+                } catch (Exception ee) {
+                    Log.i("WalkieTalkieActivity/InitiateCall",
+                            "Error when trying to close manager.", ee);
+                    ee.printStackTrace();
+                }
+            }
+            if (call != null) {
+                call.close();
+            }
+        }
+    }
+
+    /**
+     * Updates the status box at the top of the UI with a messege of your choice.
+     * @param status The String to display in the status box.
+     */
+    public void updateStatus(final String status) {
+        // Be a good citizen.  Make sure UI changes fire on the UI thread.
+        this.runOnUiThread(new Runnable() {
+            public void run() {
+                TextView labelView = (TextView) findViewById(R.id.sipLabel);
+                labelView.setText(status);
+            }
+        });
+    }
+
+    /**
+     * Updates the status box with the SIP address of the current call.
+     * @param call The current, active call.
+     */
+    public void updateStatus(SipAudioCall call) {
+        String useName = call.getPeerProfile().getDisplayName();
+        if(useName == null) {
+          useName = call.getPeerProfile().getUserName();
+        }
+        updateStatus(useName + "@" + call.getPeerProfile().getSipDomain());
+    }
+
+    /**
+     * Updates whether or not the user's voice is muted, depending on whether the button is pressed.
+     * @param v The View where the touch event is being fired.
+     * @param event The motion to act on.
+     * @return boolean Returns false to indicate that the parent view should handle the touch event
+     * as it normally would.
+     */
+    public boolean onTouch(View v, MotionEvent event) {
+        if (call == null) {
+            return false;
+        } else if (event.getAction() == MotionEvent.ACTION_DOWN && call != null && call.isMuted()) {
+            call.toggleMute();
+        } else if (event.getAction() == MotionEvent.ACTION_UP && !call.isMuted()) {
+            call.toggleMute();
+        }
+        return false;
+    }
+
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, CALL_ADDRESS, 0, "Call someone");
+        menu.add(0, SET_AUTH_INFO, 0, "Edit your SIP Info.");
+        menu.add(0, HANG_UP, 0, "End Current Call.");
+
+        return true;
+    }
+
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case CALL_ADDRESS:
+                showDialog(CALL_ADDRESS);
+                break;
+            case SET_AUTH_INFO:
+                updatePreferences();
+                break;
+            case HANG_UP:
+                if(call != null) {
+                    try {
+                      call.endCall();
+                    } catch (SipException se) {
+                        Log.d("WalkieTalkieActivity/onOptionsItemSelected",
+                                "Error ending call.", se);
+                    }
+                    call.close();
+                }
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        switch (id) {
+            case CALL_ADDRESS:
+
+                LayoutInflater factory = LayoutInflater.from(this);
+                final View textBoxView = factory.inflate(R.layout.call_address_dialog, null);
+                return new AlertDialog.Builder(this)
+                        .setTitle("Call Someone.")
+                        .setView(textBoxView)
+                        .setPositiveButton(
+                                android.R.string.ok, new DialogInterface.OnClickListener() {
+                                    public void onClick(DialogInterface dialog, int whichButton) {
+                                        EditText textField = (EditText)
+                                                (textBoxView.findViewById(R.id.calladdress_edit));
+                                        sipAddress = textField.getText().toString();
+                                        initiateCall();
+
+                                    }
+                        })
+                        .setNegativeButton(
+                                android.R.string.cancel, new DialogInterface.OnClickListener() {
+                                    public void onClick(DialogInterface dialog, int whichButton) {
+                                        // Noop.
+                                    }
+                        })
+                        .create();
+
+            case UPDATE_SETTINGS_DIALOG:
+                return new AlertDialog.Builder(this)
+                        .setMessage("Please update your SIP Account Settings.")
+                        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                            public void onClick(DialogInterface dialog, int whichButton) {
+                                updatePreferences();
+                            }
+                        })
+                        .setNegativeButton(
+                                android.R.string.cancel, new DialogInterface.OnClickListener() {
+                                    public void onClick(DialogInterface dialog, int whichButton) {
+                                        // Noop.
+                                    }
+                        })
+                        .create();
+        }
+        return null;
+    }
+
+    public void updatePreferences() {
+        Intent settingsActivity = new Intent(getBaseContext(),
+                SipSettings.class);
+        startActivity(settingsActivity);
+    }
+}