Merge "Use correct type for hardware call state"
diff --git a/api/15.txt b/api/15.txt
index ddf5baf..68fb4bc 100644
--- a/api/15.txt
+++ b/api/15.txt
@@ -6611,6 +6611,7 @@
     method public int getDimensionPixelSize(int) throws android.content.res.Resources.NotFoundException;
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException;
     method public float getFraction(int, int, int);
     method public int getIdentifier(java.lang.String, java.lang.String, java.lang.String);
     method public int[] getIntArray(int) throws android.content.res.Resources.NotFoundException;
@@ -6633,6 +6634,7 @@
     method public java.lang.CharSequence[] getTextArray(int) throws android.content.res.Resources.NotFoundException;
     method public void getValue(int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
     method public void getValue(java.lang.String, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method public void getValueForDensity(int, int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
     method public android.content.res.XmlResourceParser getXml(int) throws android.content.res.Resources.NotFoundException;
     method public final android.content.res.Resources.Theme newTheme();
     method public android.content.res.TypedArray obtainAttributes(android.util.AttributeSet, int[]);
diff --git a/api/16.txt b/api/16.txt
index 13fba29..8e07844 100644
--- a/api/16.txt
+++ b/api/16.txt
@@ -25259,7 +25259,7 @@
     field public static final java.lang.String SCHEME_TEL = "tel:";
   }
 
-  public class WebView.HitTestResult {
+  public static class WebView.HitTestResult {
     method public java.lang.String getExtra();
     method public int getType();
     field public static final deprecated int ANCHOR_TYPE = 1; // 0x1
diff --git a/api/current.txt b/api/current.txt
index db3b30d..9285a15 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -6613,6 +6613,7 @@
     method public int getDimensionPixelSize(int) throws android.content.res.Resources.NotFoundException;
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException;
     method public float getFraction(int, int, int);
     method public int getIdentifier(java.lang.String, java.lang.String, java.lang.String);
     method public int[] getIntArray(int) throws android.content.res.Resources.NotFoundException;
@@ -6635,6 +6636,7 @@
     method public java.lang.CharSequence[] getTextArray(int) throws android.content.res.Resources.NotFoundException;
     method public void getValue(int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
     method public void getValue(java.lang.String, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method public void getValueForDensity(int, int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
     method public android.content.res.XmlResourceParser getXml(int) throws android.content.res.Resources.NotFoundException;
     method public final android.content.res.Resources.Theme newTheme();
     method public android.content.res.TypedArray obtainAttributes(android.util.AttributeSet, int[]);
@@ -25433,7 +25435,7 @@
     field public static final java.lang.String SCHEME_TEL = "tel:";
   }
 
-  public class WebView.HitTestResult {
+  public static class WebView.HitTestResult {
     method public java.lang.String getExtra();
     method public int getType();
     field public static final deprecated int ANCHOR_TYPE = 1; // 0x1
diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp
index 12d1669..6fe358c 100644
--- a/cmds/app_process/app_main.cpp
+++ b/cmds/app_process/app_main.cpp
@@ -72,7 +72,7 @@
         char* slashClassName = toSlashClassName(mClassName);
         mClass = env->FindClass(slashClassName);
         if (mClass == NULL) {
-            LOGE("ERROR: could not find class '%s'\n", mClassName);
+            ALOGE("ERROR: could not find class '%s'\n", mClassName);
         }
         free(slashClassName);
 
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index f250367..0d5b4ca 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -69,7 +69,7 @@
 
 void BootAnimation::onFirstRef() {
     status_t err = mSession->linkToComposerDeath(this);
-    LOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err));
+    ALOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err));
     if (err == NO_ERROR) {
         run("BootAnimation", PRIORITY_DISPLAY);
     }
@@ -374,7 +374,7 @@
     size_t numEntries = zip.getNumEntries();
     ZipEntryRO desc = zip.findEntryByName("desc.txt");
     FileMap* descMap = zip.createEntryFileMap(desc);
-    LOGE_IF(!descMap, "descMap is null");
+    ALOGE_IF(!descMap, "descMap is null");
     if (!descMap) {
         return false;
     }
diff --git a/cmds/bootanimation/bootanimation_main.cpp b/cmds/bootanimation/bootanimation_main.cpp
index 5f8b744..ff809d3 100644
--- a/cmds/bootanimation/bootanimation_main.cpp
+++ b/cmds/bootanimation/bootanimation_main.cpp
@@ -47,7 +47,7 @@
     char value[PROPERTY_VALUE_MAX];
     property_get("debug.sf.nobootanimation", value, "0");
     int noBootAnimation = atoi(value);
-    LOGI_IF(noBootAnimation,  "boot animation disabled");
+    ALOGI_IF(noBootAnimation,  "boot animation disabled");
     if (!noBootAnimation) {
 
         sp<ProcessState> proc(ProcessState::self());
diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c
index 02e1f1c..83c881a 100644
--- a/cmds/dumpstate/dumpstate.c
+++ b/cmds/dumpstate/dumpstate.c
@@ -87,9 +87,9 @@
     dump_file("BUDDYINFO", "/proc/buddyinfo");
 
     if (screenshot_path[0]) {
-        LOGI("taking screenshot\n");
+        ALOGI("taking screenshot\n");
         run_command(NULL, 5, "su", "root", "screenshot", screenshot_path, NULL);
-        LOGI("wrote screenshot: %s\n", screenshot_path);
+        ALOGI("wrote screenshot: %s\n", screenshot_path);
     }
 
     run_command("SYSTEM SETTINGS", 20, "su", "root", "sqlite3",
@@ -285,7 +285,7 @@
     int use_socket = 0;
     int do_fb = 0;
 
-    LOGI("begin\n");
+    ALOGI("begin\n");
 
     /* set as high priority, and protect from OOM killer */
     setpriority(PRIO_PROCESS, 0, -20);
@@ -329,22 +329,22 @@
 
     if (getuid() == 0) {
         if (prctl(PR_SET_KEEPCAPS, 1) < 0) {
-            LOGE("prctl(PR_SET_KEEPCAPS) failed: %s\n", strerror(errno));
+            ALOGE("prctl(PR_SET_KEEPCAPS) failed: %s\n", strerror(errno));
             return -1;
         }
 
         /* switch to non-root user and group */
         gid_t groups[] = { AID_LOG, AID_SDCARD_RW, AID_MOUNT, AID_INET };
         if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) {
-            LOGE("Unable to setgroups, aborting: %s\n", strerror(errno));
+            ALOGE("Unable to setgroups, aborting: %s\n", strerror(errno));
             return -1;
         }
         if (setgid(AID_SHELL) != 0) {
-            LOGE("Unable to setgid, aborting: %s\n", strerror(errno));
+            ALOGE("Unable to setgid, aborting: %s\n", strerror(errno));
             return -1;
         }
         if (setuid(AID_SHELL) != 0) {
-            LOGE("Unable to setuid, aborting: %s\n", strerror(errno));
+            ALOGE("Unable to setuid, aborting: %s\n", strerror(errno));
             return -1;
         }
 
@@ -361,7 +361,7 @@
         capdata[1].inheritable = 0;
 
         if (capset(&capheader, &capdata[0]) < 0) {
-            LOGE("capset failed: %s\n", strerror(errno));
+            ALOGE("capset failed: %s\n", strerror(errno));
             return -1;
         }
     }
@@ -422,7 +422,7 @@
         fprintf(stderr, "rename(%s, %s): %s\n", tmp_path, path, strerror(errno));
     }
 
-    LOGI("done\n");
+    ALOGI("done\n");
 
     return 0;
 }
diff --git a/cmds/dumpsys/dumpsys.cpp b/cmds/dumpsys/dumpsys.cpp
index fdc5d5d..7dad6b6 100644
--- a/cmds/dumpsys/dumpsys.cpp
+++ b/cmds/dumpsys/dumpsys.cpp
@@ -31,7 +31,7 @@
     sp<IServiceManager> sm = defaultServiceManager();
     fflush(stdout);
     if (sm == NULL) {
-		LOGE("Unable to get default service manager!");
+		ALOGE("Unable to get default service manager!");
         aerr << "dumpsys: Unable to get default service manager!" << endl;
         return 20;
     }
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c
index db72585..dd92bbe 100644
--- a/cmds/installd/commands.c
+++ b/cmds/installd/commands.c
@@ -30,47 +30,47 @@
     char libdir[PKG_PATH_MAX];
 
     if ((uid < AID_SYSTEM) || (gid < AID_SYSTEM)) {
-        LOGE("invalid uid/gid: %d %d\n", uid, gid);
+        ALOGE("invalid uid/gid: %d %d\n", uid, gid);
         return -1;
     }
 
     if (create_pkg_path(pkgdir, pkgname, PKG_DIR_POSTFIX, 0)) {
-        LOGE("cannot create package path\n");
+        ALOGE("cannot create package path\n");
         return -1;
     }
 
     if (create_pkg_path(libdir, pkgname, PKG_LIB_POSTFIX, 0)) {
-        LOGE("cannot create package lib path\n");
+        ALOGE("cannot create package lib path\n");
         return -1;
     }
 
     if (mkdir(pkgdir, 0751) < 0) {
-        LOGE("cannot create dir '%s': %s\n", pkgdir, strerror(errno));
+        ALOGE("cannot create dir '%s': %s\n", pkgdir, strerror(errno));
         return -errno;
     }
     if (chmod(pkgdir, 0751) < 0) {
-        LOGE("cannot chmod dir '%s': %s\n", pkgdir, strerror(errno));
+        ALOGE("cannot chmod dir '%s': %s\n", pkgdir, strerror(errno));
         unlink(pkgdir);
         return -errno;
     }
     if (chown(pkgdir, uid, gid) < 0) {
-        LOGE("cannot chown dir '%s': %s\n", pkgdir, strerror(errno));
+        ALOGE("cannot chown dir '%s': %s\n", pkgdir, strerror(errno));
         unlink(pkgdir);
         return -errno;
     }
     if (mkdir(libdir, 0755) < 0) {
-        LOGE("cannot create dir '%s': %s\n", libdir, strerror(errno));
+        ALOGE("cannot create dir '%s': %s\n", libdir, strerror(errno));
         unlink(pkgdir);
         return -errno;
     }
     if (chmod(libdir, 0755) < 0) {
-        LOGE("cannot chmod dir '%s': %s\n", libdir, strerror(errno));
+        ALOGE("cannot chmod dir '%s': %s\n", libdir, strerror(errno));
         unlink(libdir);
         unlink(pkgdir);
         return -errno;
     }
     if (chown(libdir, AID_SYSTEM, AID_SYSTEM) < 0) {
-        LOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno));
+        ALOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno));
         unlink(libdir);
         unlink(pkgdir);
         return -errno;
@@ -100,7 +100,7 @@
         return -1;
 
     if (rename(oldpkgdir, newpkgdir) < 0) {
-        LOGE("cannot rename dir '%s' to '%s': %s\n", oldpkgdir, newpkgdir, strerror(errno));
+        ALOGE("cannot rename dir '%s' to '%s': %s\n", oldpkgdir, newpkgdir, strerror(errno));
         return -errno;
     }
     return 0;
@@ -127,11 +127,11 @@
         return -1;
     }
     if (mkdir(pkgdir, 0751) < 0) {
-        LOGE("cannot create dir '%s': %s\n", pkgdir, strerror(errno));
+        ALOGE("cannot create dir '%s': %s\n", pkgdir, strerror(errno));
         return -errno;
     }
     if (chown(pkgdir, uid, uid) < 0) {
-        LOGE("cannot chown dir '%s': %s\n", pkgdir, strerror(errno));
+        ALOGE("cannot chown dir '%s': %s\n", pkgdir, strerror(errno));
         unlink(pkgdir);
         return -errno;
     }
@@ -165,7 +165,7 @@
     if (statfs(android_data_dir.path, &sfs) == 0) {
         return sfs.f_bavail * sfs.f_bsize;
     } else {
-        LOGE("Couldn't statfs %s: %s\n", android_data_dir.path, strerror(errno));
+        ALOGE("Couldn't statfs %s: %s\n", android_data_dir.path, strerror(errno));
         return -1;
     }
 }
@@ -189,17 +189,17 @@
     avail = disk_free();
     if (avail < 0) return -1;
 
-    LOGI("free_cache(%" PRId64 ") avail %" PRId64 "\n", free_size, avail);
+    ALOGI("free_cache(%" PRId64 ") avail %" PRId64 "\n", free_size, avail);
     if (avail >= free_size) return 0;
 
     if (create_persona_path(datadir, 0)) {
-        LOGE("couldn't get directory for persona 0");
+        ALOGE("couldn't get directory for persona 0");
         return -1;
     }
 
     d = opendir(datadir);
     if (d == NULL) {
-        LOGE("cannot open %s: %s\n", datadir, strerror(errno));
+        ALOGE("cannot open %s: %s\n", datadir, strerror(errno));
         return -1;
     }
     dfd = dirfd(d);
@@ -245,7 +245,7 @@
 
     ALOGV("move %s -> %s\n", src_dex, dst_dex);
     if (rename(src_dex, dst_dex) < 0) {
-        LOGE("Couldn't move %s: %s\n", src_dex, strerror(errno));
+        ALOGE("Couldn't move %s: %s\n", src_dex, strerror(errno));
         return -1;
     } else {
         return 0;
@@ -261,7 +261,7 @@
 
     ALOGV("unlink %s\n", dex_path);
     if (unlink(dex_path) < 0) {
-        LOGE("Couldn't unlink %s: %s\n", dex_path, strerror(errno));
+        ALOGE("Couldn't unlink %s: %s\n", dex_path, strerror(errno));
         return -1;
     } else {
         return 0;
@@ -281,12 +281,12 @@
     if (stat(pkgpath, &s) < 0) return -1;
 
     if (chown(pkgpath, s.st_uid, gid) < 0) {
-        LOGE("failed to chgrp '%s': %s\n", pkgpath, strerror(errno));
+        ALOGE("failed to chgrp '%s': %s\n", pkgpath, strerror(errno));
         return -1;
     }
 
     if (chmod(pkgpath, S_IRUSR|S_IWUSR|S_IRGRP) < 0) {
-        LOGE("failed to chmod '%s': %s\n", pkgpath, strerror(errno));
+        ALOGE("failed to chmod '%s': %s\n", pkgpath, strerror(errno));
         return -1;
     }
 
@@ -443,7 +443,7 @@
 
     execl(DEX_OPT_BIN, DEX_OPT_BIN, "--zip", zip_num, odex_num, input_file_name,
         dexopt_flags, (char*) NULL);
-    LOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno));
+    ALOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno));
 }
 
 static int wait_dexopt(pid_t pid, const char* apk_path)
@@ -463,7 +463,7 @@
         }
     }
     if (got_pid != pid) {
-        LOGW("waitpid failed: wanted %d, got %d: %s\n",
+        ALOGW("waitpid failed: wanted %d, got %d: %s\n",
             (int) pid, (int) got_pid, strerror(errno));
         return 1;
     }
@@ -472,7 +472,7 @@
         ALOGV("DexInv: --- END '%s' (success) ---\n", apk_path);
         return 0;
     } else {
-        LOGW("DexInv: --- END '%s' --- status=0x%04x, process failed\n",
+        ALOGW("DexInv: --- END '%s' --- status=0x%04x, process failed\n",
             apk_path, status);
         return status;      /* always nonzero */
     }
@@ -515,24 +515,24 @@
 
     zip_fd = open(apk_path, O_RDONLY, 0);
     if (zip_fd < 0) {
-        LOGE("dexopt cannot open '%s' for input\n", apk_path);
+        ALOGE("dexopt cannot open '%s' for input\n", apk_path);
         return -1;
     }
 
     unlink(dex_path);
     odex_fd = open(dex_path, O_RDWR | O_CREAT | O_EXCL, 0644);
     if (odex_fd < 0) {
-        LOGE("dexopt cannot open '%s' for output\n", dex_path);
+        ALOGE("dexopt cannot open '%s' for output\n", dex_path);
         goto fail;
     }
     if (fchown(odex_fd, AID_SYSTEM, uid) < 0) {
-        LOGE("dexopt cannot chown '%s'\n", dex_path);
+        ALOGE("dexopt cannot chown '%s'\n", dex_path);
         goto fail;
     }
     if (fchmod(odex_fd,
                S_IRUSR|S_IWUSR|S_IRGRP |
                (is_public ? S_IROTH : 0)) < 0) {
-        LOGE("dexopt cannot chmod '%s'\n", dex_path);
+        ALOGE("dexopt cannot chmod '%s'\n", dex_path);
         goto fail;
     }
 
@@ -543,15 +543,15 @@
     if (pid == 0) {
         /* child -- drop privileges before continuing */
         if (setgid(uid) != 0) {
-            LOGE("setgid(%d) failed during dexopt\n", uid);
+            ALOGE("setgid(%d) failed during dexopt\n", uid);
             exit(64);
         }
         if (setuid(uid) != 0) {
-            LOGE("setuid(%d) during dexopt\n", uid);
+            ALOGE("setuid(%d) during dexopt\n", uid);
             exit(65);
         }
         if (flock(odex_fd, LOCK_EX | LOCK_NB) != 0) {
-            LOGE("flock(%s) failed: %s\n", dex_path, strerror(errno));
+            ALOGE("flock(%s) failed: %s\n", dex_path, strerror(errno));
             exit(66);
         }
 
@@ -560,7 +560,7 @@
     } else {
         res = wait_dexopt(pid, apk_path);
         if (res != 0) {
-            LOGE("dexopt failed on '%s' res = %d\n", dex_path, res);
+            ALOGE("dexopt failed on '%s' res = %d\n", dex_path, res);
             goto fail;
         }
     }
@@ -595,7 +595,7 @@
                 if (mkdir(path, mode) == 0) {
                     chown(path, uid, gid);
                 } else {
-                    LOGW("Unable to make directory %s: %s\n", path, strerror(errno));
+                    ALOGW("Unable to make directory %s: %s\n", path, strerror(errno));
                 }
             }
             path[basepos] = '/';
@@ -616,7 +616,7 @@
     int dstend = strlen(dstpath);
     
     if (lstat(srcpath, statbuf) < 0) {
-        LOGW("Unable to stat %s: %s\n", srcpath, strerror(errno));
+        ALOGW("Unable to stat %s: %s\n", srcpath, strerror(errno));
         return 1;
     }
     
@@ -626,12 +626,12 @@
         ALOGV("Renaming %s to %s (uid %d)\n", srcpath, dstpath, dstuid);
         if (rename(srcpath, dstpath) >= 0) {
             if (chown(dstpath, dstuid, dstgid) < 0) {
-                LOGE("cannot chown %s: %s\n", dstpath, strerror(errno));
+                ALOGE("cannot chown %s: %s\n", dstpath, strerror(errno));
                 unlink(dstpath);
                 return 1;
             }
         } else {
-            LOGW("Unable to rename %s to %s: %s\n",
+            ALOGW("Unable to rename %s to %s: %s\n",
                 srcpath, dstpath, strerror(errno));
             return 1;
         }
@@ -640,7 +640,7 @@
 
     d = opendir(srcpath);
     if (d == NULL) {
-        LOGW("Unable to opendir %s: %s\n", srcpath, strerror(errno));
+        ALOGW("Unable to opendir %s: %s\n", srcpath, strerror(errno));
         return 1;
     }
 
@@ -655,12 +655,12 @@
         }
         
         if ((srcend+strlen(name)) >= (PKG_PATH_MAX-2)) {
-            LOGW("Source path too long; skipping: %s/%s\n", srcpath, name);
+            ALOGW("Source path too long; skipping: %s/%s\n", srcpath, name);
             continue;
         }
         
         if ((dstend+strlen(name)) >= (PKG_PATH_MAX-2)) {
-            LOGW("Destination path too long; skipping: %s/%s\n", dstpath, name);
+            ALOGW("Destination path too long; skipping: %s/%s\n", dstpath, name);
             continue;
         }
         
@@ -716,7 +716,7 @@
         } else {
             subfd = openat(dfd, name, O_RDONLY);
             if (subfd < 0) {
-                LOGW("Unable to open update commands at %s%s\n",
+                ALOGW("Unable to open update commands at %s%s\n",
                         UPDATE_COMMANDS_DIR_PREFIX, name);
                 continue;
             }
@@ -742,7 +742,7 @@
                         // skip comments and empty lines.
                     } else if (hasspace) {
                         if (dstpkg[0] == 0) {
-                            LOGW("Path before package line in %s%s: %s\n",
+                            ALOGW("Path before package line in %s%s: %s\n",
                                     UPDATE_COMMANDS_DIR_PREFIX, name, buf+bufp);
                         } else if (srcpkg[0] == 0) {
                             // Skip -- source package no longer exists.
@@ -758,7 +758,7 @@
                     } else {
                         char* div = strchr(buf+bufp, ':');
                         if (div == NULL) {
-                            LOGW("Bad package spec in %s%s; no ':' sep: %s\n",
+                            ALOGW("Bad package spec in %s%s; no ':' sep: %s\n",
                                     UPDATE_COMMANDS_DIR_PREFIX, name, buf+bufp);
                         } else {
                             *div = 0;
@@ -767,14 +767,14 @@
                                 strcpy(dstpkg, buf+bufp);
                             } else {
                                 srcpkg[0] = dstpkg[0] = 0;
-                                LOGW("Package name too long in %s%s: %s\n",
+                                ALOGW("Package name too long in %s%s: %s\n",
                                         UPDATE_COMMANDS_DIR_PREFIX, name, buf+bufp);
                             }
                             if (strlen(div) < PKG_NAME_MAX) {
                                 strcpy(srcpkg, div);
                             } else {
                                 srcpkg[0] = dstpkg[0] = 0;
-                                LOGW("Package name too long in %s%s: %s\n",
+                                ALOGW("Package name too long in %s%s: %s\n",
                                         UPDATE_COMMANDS_DIR_PREFIX, name, div);
                             }
                             if (srcpkg[0] != 0) {
@@ -785,7 +785,7 @@
                                     }
                                 } else {
                                     srcpkg[0] = 0;
-                                    LOGW("Can't create path %s in %s%s\n",
+                                    ALOGW("Can't create path %s in %s%s\n",
                                             div, UPDATE_COMMANDS_DIR_PREFIX, name);
                                 }
                                 if (srcpkg[0] != 0) {
@@ -802,7 +802,7 @@
                                         }
                                     } else {
                                         srcpkg[0] = 0;
-                                        LOGW("Can't create path %s in %s%s\n",
+                                        ALOGW("Can't create path %s in %s%s\n",
                                                 div, UPDATE_COMMANDS_DIR_PREFIX, name);
                                     }
                                 }
@@ -815,7 +815,7 @@
                 } else {
                     if (bufp == 0) {
                         if (bufp < bufe) {
-                            LOGW("Line too long in %s%s, skipping: %s\n",
+                            ALOGW("Line too long in %s%s, skipping: %s\n",
                                     UPDATE_COMMANDS_DIR_PREFIX, name, buf);
                         }
                     } else if (bufp < bufe) {
@@ -825,7 +825,7 @@
                     }
                     readlen = read(subfd, buf+bufe, PKG_PATH_MAX-bufe);
                     if (readlen < 0) {
-                        LOGW("Failure reading update commands in %s%s: %s\n",
+                        ALOGW("Failure reading update commands in %s%s: %s\n",
                                 UPDATE_COMMANDS_DIR_PREFIX, name, strerror(errno));
                         break;
                     } else if (readlen == 0) {
@@ -852,30 +852,30 @@
 
     const size_t libdirLen = strlen(dataDir) + strlen(PKG_LIB_POSTFIX);
     if (libdirLen >= PKG_PATH_MAX) {
-        LOGE("library dir len too large");
+        ALOGE("library dir len too large");
         return -1;
     }
 
     if (snprintf(libdir, sizeof(libdir), "%s%s", dataDir, PKG_LIB_POSTFIX) != (ssize_t)libdirLen) {
-        LOGE("library dir not written successfully: %s\n", strerror(errno));
+        ALOGE("library dir not written successfully: %s\n", strerror(errno));
         return -1;
     }
 
     if (stat(dataDir, &s) < 0) return -1;
 
     if (chown(dataDir, 0, 0) < 0) {
-        LOGE("failed to chown '%s': %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chown '%s': %s\n", dataDir, strerror(errno));
         return -1;
     }
 
     if (chmod(dataDir, 0700) < 0) {
-        LOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
         rc = -1;
         goto out;
     }
 
     if (lstat(libdir, &libStat) < 0) {
-        LOGE("couldn't stat lib dir: %s\n", strerror(errno));
+        ALOGE("couldn't stat lib dir: %s\n", strerror(errno));
         rc = -1;
         goto out;
     }
@@ -893,13 +893,13 @@
     }
 
     if (symlink(asecLibDir, libdir) < 0) {
-        LOGE("couldn't symlink directory '%s' -> '%s': %s\n", libdir, asecLibDir, strerror(errno));
+        ALOGE("couldn't symlink directory '%s' -> '%s': %s\n", libdir, asecLibDir, strerror(errno));
         rc = -errno;
         goto out;
     }
 
     if (lchown(libdir, AID_SYSTEM, AID_SYSTEM) < 0) {
-        LOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno));
+        ALOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno));
         unlink(libdir);
         rc = -errno;
         goto out;
@@ -907,12 +907,12 @@
 
 out:
     if (chmod(dataDir, s.st_mode) < 0) {
-        LOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
         return -errno;
     }
 
     if (chown(dataDir, s.st_uid, s.st_gid) < 0) {
-        LOGE("failed to chown '%s' : %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chown '%s' : %s\n", dataDir, strerror(errno));
         return -errno;
     }
 
@@ -931,28 +931,28 @@
     }
 
     if (snprintf(libdir, sizeof(libdir), "%s%s", dataDir, PKG_LIB_POSTFIX) != (ssize_t)libdirLen) {
-        LOGE("library dir not written successfully: %s\n", strerror(errno));
+        ALOGE("library dir not written successfully: %s\n", strerror(errno));
         return -1;
     }
 
     if (stat(dataDir, &s) < 0) {
-        LOGE("couldn't state data dir");
+        ALOGE("couldn't state data dir");
         return -1;
     }
 
     if (chown(dataDir, 0, 0) < 0) {
-        LOGE("failed to chown '%s': %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chown '%s': %s\n", dataDir, strerror(errno));
         return -1;
     }
 
     if (chmod(dataDir, 0700) < 0) {
-        LOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
         rc = -1;
         goto out;
     }
 
     if (lstat(libdir, &libStat) < 0) {
-        LOGE("couldn't stat lib dir: %s\n", strerror(errno));
+        ALOGE("couldn't stat lib dir: %s\n", strerror(errno));
         rc = -1;
         goto out;
     }
@@ -970,13 +970,13 @@
     }
 
     if (mkdir(libdir, 0755) < 0) {
-        LOGE("cannot create dir '%s': %s\n", libdir, strerror(errno));
+        ALOGE("cannot create dir '%s': %s\n", libdir, strerror(errno));
         rc = -errno;
         goto out;
     }
 
     if (chown(libdir, AID_SYSTEM, AID_SYSTEM) < 0) {
-        LOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno));
+        ALOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno));
         unlink(libdir);
         rc = -errno;
         goto out;
@@ -984,12 +984,12 @@
 
 out:
     if (chmod(dataDir, s.st_mode) < 0) {
-        LOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chmod '%s': %s\n", dataDir, strerror(errno));
         return -1;
     }
 
     if (chown(dataDir, s.st_uid, s.st_gid) < 0) {
-        LOGE("failed to chown '%s' : %s\n", dataDir, strerror(errno));
+        ALOGE("failed to chown '%s' : %s\n", dataDir, strerror(errno));
         return -1;
     }
 
diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c
index feb6b92..569b491 100644
--- a/cmds/installd/installd.c
+++ b/cmds/installd/installd.c
@@ -157,11 +157,11 @@
         r = read(s, buf + n, count - n);
         if (r < 0) {
             if (errno == EINTR) continue;
-            LOGE("read error: %s\n", strerror(errno));
+            ALOGE("read error: %s\n", strerror(errno));
             return -1;
         }
         if (r == 0) {
-            LOGE("eof\n");
+            ALOGE("eof\n");
             return -1; /* EOF */
         }
         n += r;
@@ -178,7 +178,7 @@
         r = write(s, buf + n, count - n);
         if (r < 0) {
             if (errno == EINTR) continue;
-            LOGE("write error: %s\n", strerror(errno));
+            ALOGE("write error: %s\n", strerror(errno));
             return -1;
         }
         n += r;
@@ -200,7 +200,7 @@
     unsigned short count;
     int ret = -1;
 
-//    LOGI("execute('%s')\n", cmd);
+//    ALOGI("execute('%s')\n", cmd);
 
         /* default reply is "" */
     reply[0] = 0;
@@ -213,7 +213,7 @@
             n++;
             arg[n] = cmd;
             if (n == TOKEN_MAX) {
-                LOGE("too many arguments\n");
+                ALOGE("too many arguments\n");
                 goto done;
             }
         }
@@ -223,7 +223,7 @@
     for (i = 0; i < sizeof(cmds) / sizeof(cmds[0]); i++) {
         if (!strcmp(cmds[i].name,arg[0])) {
             if (n != cmds[i].numargs) {
-                LOGE("%s requires %d arguments (%d given)\n",
+                ALOGE("%s requires %d arguments (%d given)\n",
                      cmds[i].name, cmds[i].numargs, n);
             } else {
                 ret = cmds[i].func(arg + 1, reply);
@@ -231,7 +231,7 @@
             goto done;
         }
     }
-    LOGE("unsupported command '%s'\n", arg[0]);
+    ALOGE("unsupported command '%s'\n", arg[0]);
 
 done:
     if (reply[0]) {
@@ -242,7 +242,7 @@
     if (n > BUFFER_MAX) n = BUFFER_MAX;
     count = n;
 
-//    LOGI("reply: '%s'\n", cmd);
+//    ALOGI("reply: '%s'\n", cmd);
     if (writex(s, &count, sizeof(count))) return -1;
     if (writex(s, cmd, count)) return -1;
     return 0;
@@ -290,7 +290,7 @@
 
     android_system_dirs.dirs = calloc(android_system_dirs.count, sizeof(dir_rec_t));
     if (android_system_dirs.dirs == NULL) {
-        LOGE("Couldn't allocate array for dirs; aborting\n");
+        ALOGE("Couldn't allocate array for dirs; aborting\n");
         return -1;
     }
 
@@ -351,22 +351,22 @@
     int lsocket, s, count;
 
     if (initialize_globals() < 0) {
-        LOGE("Could not initialize globals; exiting.\n");
+        ALOGE("Could not initialize globals; exiting.\n");
         exit(1);
     }
 
     if (initialize_directories() < 0) {
-        LOGE("Could not create directories; exiting.\n");
+        ALOGE("Could not create directories; exiting.\n");
         exit(1);
     }
 
     lsocket = android_get_control_socket(SOCKET_PATH);
     if (lsocket < 0) {
-        LOGE("Failed to get socket from environment: %s\n", strerror(errno));
+        ALOGE("Failed to get socket from environment: %s\n", strerror(errno));
         exit(1);
     }
     if (listen(lsocket, 5)) {
-        LOGE("Listen on socket failed: %s\n", strerror(errno));
+        ALOGE("Listen on socket failed: %s\n", strerror(errno));
         exit(1);
     }
     fcntl(lsocket, F_SETFD, FD_CLOEXEC);
@@ -375,30 +375,30 @@
         alen = sizeof(addr);
         s = accept(lsocket, &addr, &alen);
         if (s < 0) {
-            LOGE("Accept failed: %s\n", strerror(errno));
+            ALOGE("Accept failed: %s\n", strerror(errno));
             continue;
         }
         fcntl(s, F_SETFD, FD_CLOEXEC);
 
-        LOGI("new connection\n");
+        ALOGI("new connection\n");
         for (;;) {
             unsigned short count;
             if (readx(s, &count, sizeof(count))) {
-                LOGE("failed to read size\n");
+                ALOGE("failed to read size\n");
                 break;
             }
             if ((count < 1) || (count >= BUFFER_MAX)) {
-                LOGE("invalid size %d\n", count);
+                ALOGE("invalid size %d\n", count);
                 break;
             }
             if (readx(s, buf, count)) {
-                LOGE("failed to read command\n");
+                ALOGE("failed to read command\n");
                 break;
             }
             buf[count] = 0;
             if (execute(s, buf)) break;
         }
-        LOGI("closing connection\n");
+        ALOGI("closing connection\n");
         close(s);
     }
 
diff --git a/cmds/installd/utils.c b/cmds/installd/utils.c
index a53a93c..52ec9e8 100644
--- a/cmds/installd/utils.c
+++ b/cmds/installd/utils.c
@@ -42,7 +42,7 @@
      if (append_and_increment(&dst, dir->path, &dst_size) < 0
              || append_and_increment(&dst, pkgname, &dst_size) < 0
              || append_and_increment(&dst, postfix, &dst_size) < 0) {
-         LOGE("Error building APK path");
+         ALOGE("Error building APK path");
          return -1;
      }
 
@@ -76,14 +76,14 @@
 
     if (append_and_increment(&dst, android_data_dir.path, &dst_size) < 0
             || append_and_increment(&dst, persona_prefix, &dst_size) < 0) {
-        LOGE("Error building prefix for APK path");
+        ALOGE("Error building prefix for APK path");
         return -1;
     }
 
     if (persona != 0) {
         int ret = snprintf(dst, dst_size, "%d/", persona);
         if (ret < 0 || (size_t) ret != uid_len + 1) {
-            LOGW("Error appending UID to APK path");
+            ALOGW("Error appending UID to APK path");
             return -1;
         }
     }
@@ -117,18 +117,18 @@
 
     if (append_and_increment(&dst, android_data_dir.path, &dst_size) < 0
             || append_and_increment(&dst, persona_prefix, &dst_size) < 0) {
-        LOGE("Error building prefix for user path");
+        ALOGE("Error building prefix for user path");
         return -1;
     }
 
     if (persona != 0) {
         if (dst_size < uid_len + 1) {
-            LOGE("Error building user path");
+            ALOGE("Error building user path");
             return -1;
         }
         int ret = snprintf(dst, dst_size, "%d/", persona);
         if (ret < 0 || (size_t) ret != uid_len) {
-            LOGE("Error appending persona id to path");
+            ALOGE("Error appending persona id to path");
             return -1;
         }
     }
@@ -163,7 +163,7 @@
         } else if (*x == '.') {
             if ((x == pkgname) || (x[1] == '.') || (x[1] == 0)) {
                     /* periods must not be first, last, or doubled */
-                LOGE("invalid package name '%s'\n", pkgname);
+                ALOGE("invalid package name '%s'\n", pkgname);
                 return -1;
             }
         } else if (*x == '-') {
@@ -172,7 +172,7 @@
             alpha = 1;
         } else {
                 /* anything not A-Z, a-z, 0-9, _, or . is invalid */
-            LOGE("invalid package name '%s'\n", pkgname);
+            ALOGE("invalid package name '%s'\n", pkgname);
             return -1;
         }
 
@@ -184,7 +184,7 @@
         x++;
         while (*x) {
             if (!isalnum(*x)) {
-                LOGE("invalid package name '%s' should include only numbers after -\n", pkgname);
+                ALOGE("invalid package name '%s' should include only numbers after -\n", pkgname);
                 return -1;
             }
             x++;
@@ -222,13 +222,13 @@
 
             subfd = openat(dfd, name, O_RDONLY | O_DIRECTORY);
             if (subfd < 0) {
-                LOGE("Couldn't openat %s: %s\n", name, strerror(errno));
+                ALOGE("Couldn't openat %s: %s\n", name, strerror(errno));
                 result = -1;
                 continue;
             }
             subdir = fdopendir(subfd);
             if (subdir == NULL) {
-                LOGE("Couldn't fdopendir %s: %s\n", name, strerror(errno));
+                ALOGE("Couldn't fdopendir %s: %s\n", name, strerror(errno));
                 close(subfd);
                 result = -1;
                 continue;
@@ -238,12 +238,12 @@
             }
             closedir(subdir);
             if (unlinkat(dfd, name, AT_REMOVEDIR) < 0) {
-                LOGE("Couldn't unlinkat %s: %s\n", name, strerror(errno));
+                ALOGE("Couldn't unlinkat %s: %s\n", name, strerror(errno));
                 result = -1;
             }
         } else {
             if (unlinkat(dfd, name, 0) < 0) {
-                LOGE("Couldn't unlinkat %s: %s\n", name, strerror(errno));
+                ALOGE("Couldn't unlinkat %s: %s\n", name, strerror(errno));
                 result = -1;
             }
         }
@@ -261,14 +261,14 @@
 
     d = opendir(pathname);
     if (d == NULL) {
-        LOGE("Couldn't opendir %s: %s\n", pathname, strerror(errno));
+        ALOGE("Couldn't opendir %s: %s\n", pathname, strerror(errno));
         return -errno;
     }
     res = _delete_dir_contents(d, ignore);
     closedir(d);
     if (also_delete_dir) {
         if (rmdir(pathname)) {
-            LOGE("Couldn't rmdir %s: %s\n", pathname, strerror(errno));
+            ALOGE("Couldn't rmdir %s: %s\n", pathname, strerror(errno));
             res = -1;
         }
     }
@@ -282,12 +282,12 @@
 
     fd = openat(dfd, name, O_RDONLY | O_DIRECTORY);
     if (fd < 0) {
-        LOGE("Couldn't openat %s: %s\n", name, strerror(errno));
+        ALOGE("Couldn't openat %s: %s\n", name, strerror(errno));
         return -1;
     }
     d = fdopendir(fd);
     if (d == NULL) {
-        LOGE("Couldn't fdopendir %s: %s\n", name, strerror(errno));
+        ALOGE("Couldn't fdopendir %s: %s\n", name, strerror(errno));
         close(fd);
         return -1;
     }
@@ -307,7 +307,7 @@
         const size_t dir_len = android_system_dirs.dirs[i].len;
         if (!strncmp(path, android_system_dirs.dirs[i].path, dir_len)) {
             if (path[dir_len] == '.' || strchr(path + dir_len, '/') != NULL) {
-                LOGE("invalid system apk path '%s' (trickery)\n", path);
+                ALOGE("invalid system apk path '%s' (trickery)\n", path);
                 return -1;
             }
             return 0;
@@ -326,7 +326,7 @@
     const char* path = getenv(var);
     int ret = get_path_from_string(rec, path);
     if (ret < 0) {
-        LOGW("Problem finding value for environment variable %s\n", var);
+        ALOGW("Problem finding value for environment variable %s\n", var);
     }
     return ret;
 }
@@ -377,7 +377,7 @@
 
             if (append_and_increment(&dst, path, &dst_size) < 0
                     || append_and_increment(&dst, "/", &dst_size)) {
-                LOGE("Error canonicalizing path");
+                ALOGE("Error canonicalizing path");
                 return -1;
             }
 
@@ -395,7 +395,7 @@
     if (dst->path == NULL
             || snprintf(dst->path, dstSize, "%s%s", src->path, suffix)
                     != (ssize_t) dst->len) {
-        LOGE("Could not allocate memory to hold appended path; aborting\n");
+        ALOGE("Could not allocate memory to hold appended path; aborting\n");
         return -1;
     }
 
@@ -422,7 +422,7 @@
         dir_len = android_asec_dir.len;
         allowsubdir = 1;
     } else {
-        LOGE("invalid apk path '%s' (bad prefix)\n", path);
+        ALOGE("invalid apk path '%s' (bad prefix)\n", path);
         return -1;
     }
 
@@ -435,7 +435,7 @@
         ++subdir;
         if (!allowsubdir
                 || (path_len > (size_t) (subdir - path) && (strchr(subdir, '/') != NULL))) {
-            LOGE("invalid apk path '%s' (subdir?)\n", path);
+            ALOGE("invalid apk path '%s' (subdir?)\n", path);
             return -1;
         }
     }
@@ -446,7 +446,7 @@
      */
     if (path[dir_len] == '.'
             || (subdir != NULL && ((*subdir == '.') || (strchr(subdir, '/') != NULL)))) {
-        LOGE("invalid apk path '%s' (trickery)\n", path);
+        ALOGE("invalid apk path '%s' (trickery)\n", path);
         return -1;
     }
 
diff --git a/cmds/ip-up-vpn/ip-up-vpn.c b/cmds/ip-up-vpn/ip-up-vpn.c
index 0e6286f..9fcc950 100644
--- a/cmds/ip-up-vpn/ip-up-vpn.c
+++ b/cmds/ip-up-vpn/ip-up-vpn.c
@@ -67,7 +67,7 @@
 {
     FILE *state = fopen(DIR ".tmp", "wb");
     if (!state) {
-        LOGE("Cannot create state: %s", strerror(errno));
+        ALOGE("Cannot create state: %s", strerror(errno));
         return 1;
     }
 
@@ -97,7 +97,7 @@
             while (!ioctl(s, SIOCDELRT, &rt));
         }
         if (errno != ESRCH) {
-            LOGE("Cannot remove host route: %s", strerror(errno));
+            ALOGE("Cannot remove host route: %s", strerror(errno));
             return 1;
         }
 
@@ -105,7 +105,7 @@
         rt.rt_flags |= RTF_GATEWAY;
         if (!set_address(&rt.rt_gateway, argv[1]) ||
                 (ioctl(s, SIOCADDRT, &rt) && errno != EEXIST)) {
-            LOGE("Cannot create host route: %s", strerror(errno));
+            ALOGE("Cannot create host route: %s", strerror(errno));
             return 1;
         }
 
@@ -113,21 +113,21 @@
         ifr.ifr_flags = IFF_UP;
         strncpy(ifr.ifr_name, interface, IFNAMSIZ);
         if (ioctl(s, SIOCSIFFLAGS, &ifr)) {
-            LOGE("Cannot bring up %s: %s", interface, strerror(errno));
+            ALOGE("Cannot bring up %s: %s", interface, strerror(errno));
             return 1;
         }
 
         /* Set the address. */
         if (!set_address(&ifr.ifr_addr, address) ||
                 ioctl(s, SIOCSIFADDR, &ifr)) {
-            LOGE("Cannot set address: %s", strerror(errno));
+            ALOGE("Cannot set address: %s", strerror(errno));
             return 1;
         }
 
         /* Set the netmask. */
         if (set_address(&ifr.ifr_netmask, env("INTERNAL_NETMASK4"))) {
             if (ioctl(s, SIOCSIFNETMASK, &ifr)) {
-                LOGE("Cannot set netmask: %s", strerror(errno));
+                ALOGE("Cannot set netmask: %s", strerror(errno));
                 return 1;
             }
         }
@@ -140,13 +140,13 @@
         fprintf(state, "%s\n", env("INTERNAL_DNS4_LIST"));
         fprintf(state, "%s\n", env("DEFAULT_DOMAIN"));
     } else {
-        LOGE("Cannot parse parameters");
+        ALOGE("Cannot parse parameters");
         return 1;
     }
 
     fclose(state);
     if (chmod(DIR ".tmp", 0444) || rename(DIR ".tmp", DIR "state")) {
-        LOGE("Cannot write state: %s", strerror(errno));
+        ALOGE("Cannot write state: %s", strerror(errno));
         return 1;
     }
     return 0;
diff --git a/cmds/keystore/keystore.cpp b/cmds/keystore/keystore.cpp
index 4b4b9b9..05f77e5 100644
--- a/cmds/keystore/keystore.cpp
+++ b/cmds/keystore/keystore.cpp
@@ -133,7 +133,7 @@
         const char* randomDevice = "/dev/urandom";
         mRandom = ::open(randomDevice, O_RDONLY);
         if (mRandom == -1) {
-            LOGE("open: %s: %s", randomDevice, strerror(errno));
+            ALOGE("open: %s: %s", randomDevice, strerror(errno));
             return false;
         }
         return true;
@@ -754,11 +754,11 @@
 int main(int argc, char* argv[]) {
     int controlSocket = android_get_control_socket("keystore");
     if (argc < 2) {
-        LOGE("A directory must be specified!");
+        ALOGE("A directory must be specified!");
         return 1;
     }
     if (chdir(argv[1]) == -1) {
-        LOGE("chdir: %s: %s", argv[1], strerror(errno));
+        ALOGE("chdir: %s: %s", argv[1], strerror(errno));
         return 1;
     }
 
@@ -767,7 +767,7 @@
         return 1;
     }
     if (listen(controlSocket, 3) == -1) {
-        LOGE("listen: %s", strerror(errno));
+        ALOGE("listen: %s", strerror(errno));
         return 1;
     }
 
@@ -785,7 +785,7 @@
         socklen_t size = sizeof(cred);
         int credResult = getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &cred, &size);
         if (credResult != 0) {
-            LOGW("getsockopt: %s", strerror(errno));
+            ALOGW("getsockopt: %s", strerror(errno));
         } else {
             int8_t request;
             if (recv_code(sock, &request)) {
@@ -796,7 +796,7 @@
                 } else {
                     send_code(sock, response);
                 }
-                LOGI("uid: %d action: %c -> %d state: %d -> %d retry: %d",
+                ALOGI("uid: %d action: %c -> %d state: %d -> %d retry: %d",
                      cred.uid,
                      request, response,
                      old_state, keyStore.getState(),
@@ -805,6 +805,6 @@
         }
         close(sock);
     }
-    LOGE("accept: %s", strerror(errno));
+    ALOGE("accept: %s", strerror(errno));
     return 1;
 }
diff --git a/cmds/screenshot/screenshot.c b/cmds/screenshot/screenshot.c
index 048636c..cca80c3 100644
--- a/cmds/screenshot/screenshot.c
+++ b/cmds/screenshot/screenshot.c
@@ -26,20 +26,20 @@
 
     fb = fileno(fb_in);
     if(fb < 0) {
-        LOGE("failed to open framebuffer\n");
+        ALOGE("failed to open framebuffer\n");
         return;
     }
     fb_in = fdopen(fb, "r");
 
     if(ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) < 0) {
-        LOGE("failed to get framebuffer info\n");
+        ALOGE("failed to get framebuffer info\n");
         return;
     }
     fcntl(fb, F_SETFD, FD_CLOEXEC);
 
     png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
     if (png == NULL) {
-        LOGE("failed png_create_write_struct\n");
+        ALOGE("failed png_create_write_struct\n");
         fclose(fb_in);
         return;
     }
@@ -47,13 +47,13 @@
     png_init_io(png, fb_out);
     info = png_create_info_struct(png);
     if (info == NULL) {
-        LOGE("failed png_create_info_struct\n");
+        ALOGE("failed png_create_info_struct\n");
         png_destroy_write_struct(&png, NULL);
         fclose(fb_in);
         return;
     }
     if (setjmp(png_jmpbuf(png))) {
-        LOGE("failed png setjmp\n");
+        ALOGE("failed png setjmp\n");
         png_destroy_write_struct(&png, NULL);
         fclose(fb_in);
         return;
@@ -68,7 +68,7 @@
 
     rowlen=vinfo.xres * bytespp;
     if (rowlen > sizeof(imgbuf)) {
-        LOGE("crazy rowlen: %d\n", rowlen);
+        ALOGE("crazy rowlen: %d\n", rowlen);
         png_destroy_write_struct(&png, NULL);
         fclose(fb_in);
         return;
diff --git a/cmds/servicemanager/binder.c b/cmds/servicemanager/binder.c
index b03b620..918d4d4 100644
--- a/cmds/servicemanager/binder.c
+++ b/cmds/servicemanager/binder.c
@@ -219,7 +219,7 @@
         case BR_TRANSACTION: {
             struct binder_txn *txn = (void *) ptr;
             if ((end - ptr) * sizeof(uint32_t) < sizeof(struct binder_txn)) {
-                LOGE("parse: txn too small!\n");
+                ALOGE("parse: txn too small!\n");
                 return -1;
             }
             binder_dump_txn(txn);
@@ -240,7 +240,7 @@
         case BR_REPLY: {
             struct binder_txn *txn = (void*) ptr;
             if ((end - ptr) * sizeof(uint32_t) < sizeof(struct binder_txn)) {
-                LOGE("parse: reply too small!\n");
+                ALOGE("parse: reply too small!\n");
                 return -1;
             }
             binder_dump_txn(txn);
@@ -266,7 +266,7 @@
             r = -1;
             break;
         default:
-            LOGE("parse: OOPS %d\n", cmd);
+            ALOGE("parse: OOPS %d\n", cmd);
             return -1;
         }
     }
@@ -375,17 +375,17 @@
         res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
 
         if (res < 0) {
-            LOGE("binder_loop: ioctl failed (%s)\n", strerror(errno));
+            ALOGE("binder_loop: ioctl failed (%s)\n", strerror(errno));
             break;
         }
 
         res = binder_parse(bs, 0, readbuf, bwr.read_consumed, func);
         if (res == 0) {
-            LOGE("binder_loop: unexpected reply?!\n");
+            ALOGE("binder_loop: unexpected reply?!\n");
             break;
         }
         if (res < 0) {
-            LOGE("binder_loop: io error %d %s\n", res, strerror(errno));
+            ALOGE("binder_loop: io error %d %s\n", res, strerror(errno));
             break;
         }
     }
diff --git a/cmds/servicemanager/service_manager.c b/cmds/servicemanager/service_manager.c
index 2df450f3..42d8977 100644
--- a/cmds/servicemanager/service_manager.c
+++ b/cmds/servicemanager/service_manager.c
@@ -11,8 +11,8 @@
 #include "binder.h"
 
 #if 0
-#define LOGI(x...) fprintf(stderr, "svcmgr: " x)
-#define LOGE(x...) fprintf(stderr, "svcmgr: " x)
+#define ALOGI(x...) fprintf(stderr, "svcmgr: " x)
+#define ALOGE(x...) fprintf(stderr, "svcmgr: " x)
 #else
 #define LOG_TAG "ServiceManager"
 #include <cutils/log.h>
@@ -115,7 +115,7 @@
 void svcinfo_death(struct binder_state *bs, void *ptr)
 {
     struct svcinfo *si = ptr;
-    LOGI("service '%s' died\n", str8(si->name));
+    ALOGI("service '%s' died\n", str8(si->name));
     if (si->ptr) {
         binder_release(bs, si->ptr);
         si->ptr = 0;
@@ -133,7 +133,7 @@
     struct svcinfo *si;
     si = find_svc(s, len);
 
-//    LOGI("check_service('%s') ptr = %p\n", str8(s), si ? si->ptr : 0);
+//    ALOGI("check_service('%s') ptr = %p\n", str8(s), si ? si->ptr : 0);
     if (si && si->ptr) {
         return si->ptr;
     } else {
@@ -146,13 +146,13 @@
                    void *ptr, unsigned uid)
 {
     struct svcinfo *si;
-//    LOGI("add_service('%s',%p) uid=%d\n", str8(s), ptr, uid);
+//    ALOGI("add_service('%s',%p) uid=%d\n", str8(s), ptr, uid);
 
     if (!ptr || (len == 0) || (len > 127))
         return -1;
 
     if (!svc_can_register(uid, s)) {
-        LOGE("add_service('%s',%p) uid=%d - PERMISSION DENIED\n",
+        ALOGE("add_service('%s',%p) uid=%d - PERMISSION DENIED\n",
              str8(s), ptr, uid);
         return -1;
     }
@@ -160,7 +160,7 @@
     si = find_svc(s, len);
     if (si) {
         if (si->ptr) {
-            LOGE("add_service('%s',%p) uid=%d - ALREADY REGISTERED, OVERRIDE\n",
+            ALOGE("add_service('%s',%p) uid=%d - ALREADY REGISTERED, OVERRIDE\n",
                  str8(s), ptr, uid);
             svcinfo_death(bs, si);
         }
@@ -168,7 +168,7 @@
     } else {
         si = malloc(sizeof(*si) + (len + 1) * sizeof(uint16_t));
         if (!si) {
-            LOGE("add_service('%s',%p) uid=%d - OUT OF MEMORY\n",
+            ALOGE("add_service('%s',%p) uid=%d - OUT OF MEMORY\n",
                  str8(s), ptr, uid);
             return -1;
         }
@@ -198,7 +198,7 @@
     void *ptr;
     uint32_t strict_policy;
 
-//    LOGI("target=%p code=%d pid=%d uid=%d\n",
+//    ALOGI("target=%p code=%d pid=%d uid=%d\n",
 //         txn->target, txn->code, txn->sender_pid, txn->sender_euid);
 
     if (txn->target != svcmgr_handle)
@@ -246,7 +246,7 @@
         return -1;
     }
     default:
-        LOGE("unknown code %d\n", txn->code);
+        ALOGE("unknown code %d\n", txn->code);
         return -1;
     }
 
@@ -262,7 +262,7 @@
     bs = binder_open(128*1024);
 
     if (binder_become_context_manager(bs)) {
-        LOGE("cannot become context manager (%s)\n", strerror(errno));
+        ALOGE("cannot become context manager (%s)\n", strerror(errno));
         return -1;
     }
 
diff --git a/cmds/stagefright/record.cpp b/cmds/stagefright/record.cpp
index b718299..613435d 100644
--- a/cmds/stagefright/record.cpp
+++ b/cmds/stagefright/record.cpp
@@ -96,7 +96,7 @@
         ++mNumFramesOutput;
 
         // printf("DummySource::read - returning buffer\n");
-        // LOGI("DummySource::read - returning buffer");
+        // ALOGI("DummySource::read - returning buffer");
         return OK;
     }
 
diff --git a/cmds/stagefright/sf2.cpp b/cmds/stagefright/sf2.cpp
index 7551d31..ae80f88 100644
--- a/cmds/stagefright/sf2.cpp
+++ b/cmds/stagefright/sf2.cpp
@@ -454,7 +454,7 @@
 
                 if (sizeNeeded > sizeLeft) {
                     if (outBuffer->size() == 0) {
-                        LOGE("Unable to fit even a single input buffer of size %d.",
+                        ALOGE("Unable to fit even a single input buffer of size %d.",
                              sizeNeeded);
                     }
                     CHECK_GT(outBuffer->size(), 0u);
diff --git a/cmds/stagefright/stream.cpp b/cmds/stagefright/stream.cpp
index 24403dc..0d6c738 100644
--- a/cmds/stagefright/stream.cpp
+++ b/cmds/stagefright/stream.cpp
@@ -90,7 +90,7 @@
 
 #if 0
     if (mNumPacketsSent >= 20000) {
-        LOGI("signalling discontinuity now");
+        ALOGI("signalling discontinuity now");
 
         off64_t offset = 0;
         CHECK((offset % 188) == 0);
diff --git a/cmds/system_server/library/system_init.cpp b/cmds/system_server/library/system_init.cpp
index 59360d3..bfbc138 100644
--- a/cmds/system_server/library/system_init.cpp
+++ b/cmds/system_server/library/system_init.cpp
@@ -42,7 +42,7 @@
 
     virtual void binderDied(const wp<IBinder>& who)
     {
-        LOGI("Grim Reaper killing system_server...");
+        ALOGI("Grim Reaper killing system_server...");
         kill(getpid(), SIGKILL);
     }
 };
@@ -53,12 +53,12 @@
 
 extern "C" status_t system_init()
 {
-    LOGI("Entered system_init()");
+    ALOGI("Entered system_init()");
 
     sp<ProcessState> proc(ProcessState::self());
 
     sp<IServiceManager> sm = defaultServiceManager();
-    LOGI("ServiceManager: %p\n", sm.get());
+    ALOGI("ServiceManager: %p\n", sm.get());
 
     sp<GrimReaper> grim = new GrimReaper();
     sm->asBinder()->linkToDeath(grim, grim.get(), 0);
@@ -82,10 +82,10 @@
     // All other servers should just start the Android runtime at
     // the beginning of their processes's main(), before calling
     // the init function.
-    LOGI("System server: starting Android runtime.\n");
+    ALOGI("System server: starting Android runtime.\n");
     AndroidRuntime* runtime = AndroidRuntime::getRuntime();
 
-    LOGI("System server: starting Android services.\n");
+    ALOGI("System server: starting Android services.\n");
     JNIEnv* env = runtime->getJNIEnv();
     if (env == NULL) {
         return UNKNOWN_ERROR;
@@ -100,10 +100,10 @@
     }
     env->CallStaticVoidMethod(clazz, methodId);
 
-    LOGI("System server: entering thread pool.\n");
+    ALOGI("System server: entering thread pool.\n");
     ProcessState::self()->startThreadPool();
     IPCThreadState::self()->joinThreadPool();
-    LOGI("System server: exiting thread pool.\n");
+    ALOGI("System server: exiting thread pool.\n");
 
     return NO_ERROR;
 }
diff --git a/cmds/system_server/system_main.cpp b/cmds/system_server/system_main.cpp
index d67329d..ddff065 100644
--- a/cmds/system_server/system_main.cpp
+++ b/cmds/system_server/system_main.cpp
@@ -44,12 +44,12 @@
 
 int main(int argc, const char* const argv[])
 {
-    LOGI("System server is starting with pid=%d.\n", getpid());
+    ALOGI("System server is starting with pid=%d.\n", getpid());
 
     blockSignals();
     
     // You can trust me, honestly!
-    LOGW("*** Current priority: %d\n", getpriority(PRIO_PROCESS, 0));
+    ALOGW("*** Current priority: %d\n", getpriority(PRIO_PROCESS, 0));
     setpriority(PRIO_PROCESS, 0, -1);
 
     system_init();    
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java
index 7f0ea99..894f428 100644
--- a/core/java/android/animation/LayoutTransition.java
+++ b/core/java/android/animation/LayoutTransition.java
@@ -321,13 +321,13 @@
     public long getStartDelay(int transitionType) {
         switch (transitionType) {
             case CHANGE_APPEARING:
-                return mChangingAppearingDuration;
+                return mChangingAppearingDelay;
             case CHANGE_DISAPPEARING:
-                return mChangingDisappearingDuration;
+                return mChangingDisappearingDelay;
             case APPEARING:
-                return mAppearingDuration;
+                return mAppearingDelay;
             case DISAPPEARING:
-                return mDisappearingDuration;
+                return mDisappearingDelay;
         }
         // shouldn't reach here
         return 0;
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index d38b8da..2af58be 100755
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -683,7 +683,6 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does
      *             not exist.
      * @return Drawable An object that can be used to draw this resource.
-     * @hide
      */
     public Drawable getDrawableForDensity(int id, int density) throws NotFoundException {
         synchronized (mTmpValue) {
@@ -1032,7 +1031,6 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does
      *             not exist.
      * @see #getValue(String, TypedValue, boolean)
-     * @hide
      */
     public void getValueForDensity(int id, int density, TypedValue outValue, boolean resolveRefs)
             throws NotFoundException {
diff --git a/core/java/android/hardware/CameraSound.java b/core/java/android/hardware/CameraSound.java
index 32de0cd..dc97ff09 100644
--- a/core/java/android/hardware/CameraSound.java
+++ b/core/java/android/hardware/CameraSound.java
@@ -110,7 +110,6 @@
 
     private static class CameraSoundPlayer implements Runnable {
         private int mSoundId;
-        private int mAudioStreamType;
         private MediaPlayer mPlayer;
         private Thread mThread;
         private boolean mExit;
@@ -147,7 +146,7 @@
             }
             mPlayer = new MediaPlayer();
             try {
-                mPlayer.setAudioStreamType(mAudioStreamType);
+                mPlayer.setAudioStreamType(AudioManager.STREAM_SYSTEM_ENFORCED);
                 mPlayer.setDataSource(soundFilePath);
                 mPlayer.setLooping(false);
                 mPlayer.prepare();
@@ -179,11 +178,6 @@
 
         public CameraSoundPlayer(int soundId) {
             mSoundId = soundId;
-            if (SystemProperties.get("ro.camera.sound.forced", "0").equals("0")) {
-                mAudioStreamType = AudioManager.STREAM_MUSIC;
-            } else {
-                mAudioStreamType = AudioManager.STREAM_SYSTEM_ENFORCED;
-            }
         }
 
         public void play() {
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index f6e627c..e8f60b4 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -16,8 +16,6 @@
 
 package android.net;
 
-import static com.android.internal.util.Preconditions.checkNotNull;
-
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.SystemClock;
@@ -40,8 +38,6 @@
  * @hide
  */
 public class NetworkStats implements Parcelable {
-    private static final String TAG = "NetworkStats";
-
     /** {@link #iface} value when interface details unavailable. */
     public static final String IFACE_ALL = null;
     /** {@link #uid} value when UID details unavailable. */
@@ -463,62 +459,64 @@
      * between two snapshots in time. Assumes that statistics rows collect over
      * time, and that none of them have disappeared.
      */
-    public NetworkStats subtract(NetworkStats value) throws NonMonotonicException {
-        return subtract(value, false);
+    public NetworkStats subtract(NetworkStats right) {
+        return subtract(this, right, null);
     }
 
     /**
-     * Subtract the given {@link NetworkStats}, effectively leaving the delta
+     * Subtract the two given {@link NetworkStats} objects, returning the delta
      * between two snapshots in time. Assumes that statistics rows collect over
      * time, and that none of them have disappeared.
-     *
-     * @param clampNonMonotonic When non-monotonic stats are found, just clamp
-     *            to 0 instead of throwing {@link NonMonotonicException}.
+     * <p>
+     * If counters have rolled backwards, they are clamped to {@code 0} and
+     * reported to the given {@link NonMonotonicObserver}.
      */
-    public NetworkStats subtract(NetworkStats value, boolean clampNonMonotonic)
-            throws NonMonotonicException {
-        final long deltaRealtime = this.elapsedRealtime - value.elapsedRealtime;
+    public static NetworkStats subtract(
+            NetworkStats left, NetworkStats right, NonMonotonicObserver observer) {
+        long deltaRealtime = left.elapsedRealtime - right.elapsedRealtime;
         if (deltaRealtime < 0) {
-            throw new NonMonotonicException(this, value);
+            if (observer != null) {
+                observer.foundNonMonotonic(left, -1, right, -1);
+            }
+            deltaRealtime = 0;
         }
 
         // result will have our rows, and elapsed time between snapshots
         final Entry entry = new Entry();
-        final NetworkStats result = new NetworkStats(deltaRealtime, size);
-        for (int i = 0; i < size; i++) {
-            entry.iface = iface[i];
-            entry.uid = uid[i];
-            entry.set = set[i];
-            entry.tag = tag[i];
+        final NetworkStats result = new NetworkStats(deltaRealtime, left.size);
+        for (int i = 0; i < left.size; i++) {
+            entry.iface = left.iface[i];
+            entry.uid = left.uid[i];
+            entry.set = left.set[i];
+            entry.tag = left.tag[i];
 
             // find remote row that matches, and subtract
-            final int j = value.findIndexHinted(entry.iface, entry.uid, entry.set, entry.tag, i);
+            final int j = right.findIndexHinted(entry.iface, entry.uid, entry.set, entry.tag, i);
             if (j == -1) {
                 // newly appearing row, return entire value
-                entry.rxBytes = rxBytes[i];
-                entry.rxPackets = rxPackets[i];
-                entry.txBytes = txBytes[i];
-                entry.txPackets = txPackets[i];
-                entry.operations = operations[i];
+                entry.rxBytes = left.rxBytes[i];
+                entry.rxPackets = left.rxPackets[i];
+                entry.txBytes = left.txBytes[i];
+                entry.txPackets = left.txPackets[i];
+                entry.operations = left.operations[i];
             } else {
                 // existing row, subtract remote value
-                entry.rxBytes = rxBytes[i] - value.rxBytes[j];
-                entry.rxPackets = rxPackets[i] - value.rxPackets[j];
-                entry.txBytes = txBytes[i] - value.txBytes[j];
-                entry.txPackets = txPackets[i] - value.txPackets[j];
-                entry.operations = operations[i] - value.operations[j];
+                entry.rxBytes = left.rxBytes[i] - right.rxBytes[j];
+                entry.rxPackets = left.rxPackets[i] - right.rxPackets[j];
+                entry.txBytes = left.txBytes[i] - right.txBytes[j];
+                entry.txPackets = left.txPackets[i] - right.txPackets[j];
+                entry.operations = left.operations[i] - right.operations[j];
 
                 if (entry.rxBytes < 0 || entry.rxPackets < 0 || entry.txBytes < 0
                         || entry.txPackets < 0 || entry.operations < 0) {
-                    if (clampNonMonotonic) {
-                        entry.rxBytes = Math.max(entry.rxBytes, 0);
-                        entry.rxPackets = Math.max(entry.rxPackets, 0);
-                        entry.txBytes = Math.max(entry.txBytes, 0);
-                        entry.txPackets = Math.max(entry.txPackets, 0);
-                        entry.operations = Math.max(entry.operations, 0);
-                    } else {
-                        throw new NonMonotonicException(this, i, value, j);
+                    if (observer != null) {
+                        observer.foundNonMonotonic(left, i, right, j);
                     }
+                    entry.rxBytes = Math.max(entry.rxBytes, 0);
+                    entry.rxPackets = Math.max(entry.rxPackets, 0);
+                    entry.txBytes = Math.max(entry.txBytes, 0);
+                    entry.txPackets = Math.max(entry.txPackets, 0);
+                    entry.operations = Math.max(entry.operations, 0);
                 }
             }
 
@@ -665,22 +663,8 @@
         }
     };
 
-    public static class NonMonotonicException extends Exception {
-        public final NetworkStats left;
-        public final NetworkStats right;
-        public final int leftIndex;
-        public final int rightIndex;
-
-        public NonMonotonicException(NetworkStats left, NetworkStats right) {
-            this(left, -1, right, -1);
-        }
-
-        public NonMonotonicException(
-                NetworkStats left, int leftIndex, NetworkStats right, int rightIndex) {
-            this.left = checkNotNull(left, "missing left");
-            this.right = checkNotNull(right, "missing right");
-            this.leftIndex = leftIndex;
-            this.rightIndex = rightIndex;
-        }
+    public interface NonMonotonicObserver {
+        public void foundNonMonotonic(
+                NetworkStats left, int leftIndex, NetworkStats right, int rightIndex);
     }
 }
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index cd585b2..8bdb669 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -20,7 +20,6 @@
 import android.app.backup.BackupManager;
 import android.content.Context;
 import android.media.MediaPlayer;
-import android.net.NetworkStats.NonMonotonicException;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 
@@ -193,15 +192,12 @@
                 throw new IllegalStateException("not profiling data");
             }
 
-            try {
-                // subtract starting values and return delta
-                final NetworkStats profilingStop = getDataLayerSnapshotForUid(context);
-                final NetworkStats profilingDelta = profilingStop.subtract(sActiveProfilingStart);
-                sActiveProfilingStart = null;
-                return profilingDelta;
-            } catch (NonMonotonicException e) {
-                throw new RuntimeException(e);
-            }
+            // subtract starting values and return delta
+            final NetworkStats profilingStop = getDataLayerSnapshotForUid(context);
+            final NetworkStats profilingDelta = NetworkStats.subtract(
+                    profilingStop, sActiveProfilingStart, null);
+            sActiveProfilingStart = null;
+            return profilingDelta;
         }
     }
 
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index cd065ec..7a174af 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -486,6 +486,11 @@
     private final Object mStartLock = new Object();
 
     private String mRequestedEngine;
+    // Whether to initialize this TTS object with the default engine,
+    // if the requested engine is not available. Valid only if mRequestedEngine
+    // is not null. Used only for testing, though potentially useful API wise
+    // too.
+    private final boolean mUseFallback;
     private final Map<String, Uri> mEarcons;
     private final Map<String, Uri> mUtterances;
     private final Bundle mParams = new Bundle();
@@ -519,7 +524,7 @@
      * @param engine Package name of the TTS engine to use.
      */
     public TextToSpeech(Context context, OnInitListener listener, String engine) {
-        this(context, listener, engine, null);
+        this(context, listener, engine, null, true);
     }
 
     /**
@@ -529,10 +534,11 @@
      * @hide
      */
     public TextToSpeech(Context context, OnInitListener listener, String engine,
-            String packageName) {
+            String packageName, boolean useFallback) {
         mContext = context;
         mInitListener = listener;
         mRequestedEngine = engine;
+        mUseFallback = useFallback;
 
         mEarcons = new HashMap<String, Uri>();
         mUtterances = new HashMap<String, Uri>();
@@ -567,10 +573,21 @@
 
     private int initTts() {
         // Step 1: Try connecting to the engine that was requested.
-        if (mRequestedEngine != null && mEnginesHelper.isEngineInstalled(mRequestedEngine)) {
-            if (connectToEngine(mRequestedEngine)) {
-                mCurrentEngine = mRequestedEngine;
-                return SUCCESS;
+        if (mRequestedEngine != null) {
+            if (mEnginesHelper.isEngineInstalled(mRequestedEngine)) {
+                if (connectToEngine(mRequestedEngine)) {
+                    mCurrentEngine = mRequestedEngine;
+                    return SUCCESS;
+                } else if (!mUseFallback) {
+                    mCurrentEngine = null;
+                    dispatchOnInit(ERROR);
+                    return ERROR;
+                }
+            } else if (!mUseFallback) {
+                Log.i(TAG, "Requested engine not installed: " + mRequestedEngine);
+                mCurrentEngine = null;
+                dispatchOnInit(ERROR);
+                return ERROR;
             }
         }
 
diff --git a/core/java/android/util/LocaleUtil.java b/core/java/android/util/LocaleUtil.java
index 763af73..4d773f6 100644
--- a/core/java/android/util/LocaleUtil.java
+++ b/core/java/android/util/LocaleUtil.java
@@ -39,8 +39,6 @@
      */
     public static final int TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE = 1;
 
-    private static final char UNDERSCORE_CHAR = '_';
-
     private static String ARAB_SCRIPT_SUBTAG = "Arab";
     private static String HEBR_SCRIPT_SUBTAG = "Hebr";
 
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index de3f00f..64f862a 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -2626,7 +2626,7 @@
     /**
      * Text direction is using "first strong algorithm". The first strong directional character
      * determines the paragraph direction. If there is no strong directional character, the
-     * paragraph direction is the view's resolved ayout direction.
+     * paragraph direction is the view's resolved layout direction.
      *
      * @hide
      */
@@ -2656,6 +2656,13 @@
     public static final int TEXT_DIRECTION_RTL = 4;
 
     /**
+     * Text direction is coming from the system Locale.
+     *
+     * @hide
+     */
+    public static final int TEXT_DIRECTION_LOCALE = 5;
+
+    /**
      * Default text direction is inherited
      *
      * @hide
@@ -2672,13 +2679,14 @@
             @ViewDebug.IntToString(from = TEXT_DIRECTION_FIRST_STRONG, to = "FIRST_STRONG"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_ANY_RTL, to = "ANY_RTL"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_LTR, to = "LTR"),
-            @ViewDebug.IntToString(from = TEXT_DIRECTION_RTL, to = "RTL")
+            @ViewDebug.IntToString(from = TEXT_DIRECTION_RTL, to = "RTL"),
+            @ViewDebug.IntToString(from = TEXT_DIRECTION_LOCALE, to = "LOCALE")
     })
     private int mTextDirection = DEFAULT_TEXT_DIRECTION;
 
     /**
      * The resolved text direction.  This needs resolution if the value is
-     * TEXT_DIRECTION_INHERIT.  The resolution matches mTextDirection if that is
+     * TEXT_DIRECTION_INHERIT.  The resolution matches mTextDirection if it is
      * not TEXT_DIRECTION_INHERIT, otherwise resolution proceeds up the parent
      * chain of the view.
      *
@@ -2689,7 +2697,8 @@
             @ViewDebug.IntToString(from = TEXT_DIRECTION_FIRST_STRONG, to = "FIRST_STRONG"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_ANY_RTL, to = "ANY_RTL"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_LTR, to = "LTR"),
-            @ViewDebug.IntToString(from = TEXT_DIRECTION_RTL, to = "RTL")
+            @ViewDebug.IntToString(from = TEXT_DIRECTION_RTL, to = "RTL"),
+            @ViewDebug.IntToString(from = TEXT_DIRECTION_LOCALE, to = "LOCALE")
     })
     private int mResolvedTextDirection = TEXT_DIRECTION_INHERIT;
 
@@ -13791,6 +13800,7 @@
      * {@link #TEXT_DIRECTION_ANY_RTL},
      * {@link #TEXT_DIRECTION_LTR},
      * {@link #TEXT_DIRECTION_RTL},
+     * {@link #TEXT_DIRECTION_LOCALE},
      *
      * @hide
      */
@@ -13808,6 +13818,7 @@
      * {@link #TEXT_DIRECTION_ANY_RTL},
      * {@link #TEXT_DIRECTION_LTR},
      * {@link #TEXT_DIRECTION_RTL},
+     * {@link #TEXT_DIRECTION_LOCALE},
      *
      * @hide
      */
@@ -13828,6 +13839,7 @@
      * {@link #TEXT_DIRECTION_ANY_RTL},
      * {@link #TEXT_DIRECTION_LTR},
      * {@link #TEXT_DIRECTION_RTL},
+     * {@link #TEXT_DIRECTION_LOCALE},
      *
      * @hide
      */
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 93caabe..18dec52 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -31,17 +31,15 @@
 import java.util.Locale;
 
 /**
- * This class is used to specify meta information of a subtype contained in an input method.
- * Subtype can describe locale (e.g. en_US, fr_FR...) and mode (e.g. voice, keyboard...), and is
- * used for IME switch and settings. The input method subtype allows the system to bring up the
- * specified subtype of the designated input method directly.
+ * This class is used to specify meta information of a subtype contained in an input method editor
+ * (IME). Subtype can describe locale (e.g. en_US, fr_FR...) and mode (e.g. voice, keyboard...),
+ * and is used for IME switch and settings. The input method subtype allows the system to bring up
+ * the specified subtype of the designated IME directly.
  *
- * <p>It should be defined in an XML resource file of the input method
- * with the <code>&lt;subtype></code> element.
- * For more information, see the guide to
+ * <p>It should be defined in an XML resource file of the input method with the
+ * <code>&lt;subtype&gt;</code> element. For more information, see the guide to
  * <a href="{@docRoot}resources/articles/creating-input-method.html">
  * Creating an Input Method</a>.</p>
- *
  */
 public final class InputMethodSubtype implements Parcelable {
     private static final String TAG = InputMethodSubtype.class.getSimpleName();
@@ -59,13 +57,24 @@
     private HashMap<String, String> mExtraValueHashMapCache;
 
     /**
-     * Constructor
-     * @param nameId The name of the subtype
-     * @param iconId The icon of the subtype
+     * Constructor.
+     * @param nameId Resource ID of the subtype name string. The string resource may have exactly
+     * one %s in it. If there is, the %s part will be replaced with the locale's display name by
+     * the formatter. Please refer to {@link #getDisplayName} for details.
+     * @param iconId Resource ID of the subtype icon drawable.
      * @param locale The locale supported by the subtype
      * @param mode The mode supported by the subtype
-     * @param extraValue The extra value of the subtype
-     * @param isAuxiliary true when this subtype is one shot subtype.
+     * @param extraValue The extra value of the subtype. This string is free-form, but the API
+     * supplies tools to deal with a key-value comma-separated list; see
+     * {@link #containsExtraValueKey} and {@link #getExtraValueOf}.
+     * @param isAuxiliary true when this subtype is auxiliary, false otherwise. An auxiliary
+     * subtype will not be shown in the list of enabled IMEs for choosing the current IME in
+     * the Settings even when this subtype is enabled. Please note that this subtype will still
+     * be shown in the list of IMEs in the IME switcher to allow the user to tentatively switch
+     * to this subtype while an IME is shown. The framework will never switch the current IME to
+     * this subtype by {@link android.view.inputmethod.InputMethodManager#switchToLastInputMethod}.
+     * The intent of having this flag is to allow for IMEs that are invoked in a one-shot way as
+     * auxiliary input mode, and return to the previous IME once it is finished (e.g. voice input).
      * @hide
      */
     public InputMethodSubtype(int nameId, int iconId, String locale, String mode, String extraValue,
@@ -74,16 +83,28 @@
     }
 
     /**
-     * Constructor
-     * @param nameId The name of the subtype
-     * @param iconId The icon of the subtype
+     * Constructor.
+     * @param nameId Resource ID of the subtype name string. The string resource may have exactly
+     * one %s in it. If there is, the %s part will be replaced with the locale's display name by
+     * the formatter. Please refer to {@link #getDisplayName} for details.
+     * @param iconId Resource ID of the subtype icon drawable.
      * @param locale The locale supported by the subtype
      * @param mode The mode supported by the subtype
-     * @param extraValue The extra value of the subtype
-     * @param isAuxiliary true when this subtype is one shot subtype.
-     * @param overridesImplicitlyEnabledSubtype true when this subtype should be selected by default
-     * if no other subtypes are selected explicitly. Note that a subtype with this parameter being
-     * true will not be shown in the subtypes list.
+     * @param extraValue The extra value of the subtype. This string is free-form, but the API
+     * supplies tools to deal with a key-value comma-separated list; see
+     * {@link #containsExtraValueKey} and {@link #getExtraValueOf}.
+     * @param isAuxiliary true when this subtype is auxiliary, false otherwise. An auxiliary
+     * subtype will not be shown in the list of enabled IMEs for choosing the current IME in
+     * the Settings even when this subtype is enabled. Please note that this subtype will still
+     * be shown in the list of IMEs in the IME switcher to allow the user to tentatively switch
+     * to this subtype while an IME is shown. The framework will never switch the current IME to
+     * this subtype by {@link android.view.inputmethod.InputMethodManager#switchToLastInputMethod}.
+     * The intent of having this flag is to allow for IMEs that are invoked in a one-shot way as
+     * auxiliary input mode, and return to the previous IME once it is finished (e.g. voice input).
+     * @param overridesImplicitlyEnabledSubtype true when this subtype should be enabled by default
+     * if no other subtypes in the IME are enabled explicitly. Note that a subtype with this
+     * parameter being true will not be shown in the list of subtypes in each IME's subtype enabler.
+     * Having an "automatic" subtype is an example use of this flag.
      */
     public InputMethodSubtype(int nameId, int iconId, String locale, String mode, String extraValue,
             boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype) {
@@ -115,52 +136,60 @@
     }
 
     /**
-     * @return the name of the subtype
+     * @return Resource ID of the subtype name string.
      */
     public int getNameResId() {
         return mSubtypeNameResId;
     }
 
     /**
-     * @return the icon of the subtype
+     * @return Resource ID of the subtype icon drawable.
      */
     public int getIconResId() {
         return mSubtypeIconResId;
     }
 
     /**
-     * @return the locale of the subtype
+     * @return The locale of the subtype. This method returns the "locale" string parameter passed
+     * to the constructor.
      */
     public String getLocale() {
         return mSubtypeLocale;
     }
 
     /**
-     * @return the mode of the subtype
+     * @return The mode of the subtype.
      */
     public String getMode() {
         return mSubtypeMode;
     }
 
     /**
-     * @return the extra value of the subtype
+     * @return The extra value of the subtype.
      */
     public String getExtraValue() {
         return mSubtypeExtraValue;
     }
 
     /**
-     * @return true if this subtype is one shot subtype. One shot subtype will not be shown in the
-     * ime switch list when this subtype is implicitly enabled. The framework will never
-     * switch the current ime to this subtype by switchToLastInputMethod in InputMethodManager.
+     * @return true if this subtype is auxiliary, false otherwise. An auxiliary subtype will not be
+     * shown in the list of enabled IMEs for choosing the current IME in the Settings even when this
+     * subtype is enabled. Please note that this subtype will still be shown in the list of IMEs in
+     * the IME switcher to allow the user to tentatively switch to this subtype while an IME is
+     * shown. The framework will never switch the current IME to this subtype by
+     * {@link android.view.inputmethod.InputMethodManager#switchToLastInputMethod}.
+     * The intent of having this flag is to allow for IMEs that are invoked in a one-shot way as
+     * auxiliary input mode, and return to the previous IME once it is finished (e.g. voice input).
      */
     public boolean isAuxiliary() {
         return mIsAuxiliary;
     }
 
     /**
-     * @return true when this subtype is selected by default if no other subtypes are selected
-     * explicitly. Note that a subtype that returns true will not be shown in the subtypes list.
+     * @return true when this subtype will be enabled by default if no other subtypes in the IME
+     * are enabled explicitly, false otherwise. Note that a subtype with this method returning true
+     * will not be shown in the list of subtypes in each IME's subtype enabler. Having an
+     * "automatic" subtype is an example use of this flag.
      */
     public boolean overridesImplicitlyEnabledSubtype() {
         return mOverridesImplicitlyEnabledSubtype;
@@ -171,10 +200,10 @@
      * @param packageName The package name of the IME
      * @param appInfo The application info of the IME
      * @return a display name for this subtype. The string resource of the label (mSubtypeNameResId)
-     * can have only one %s in it. If there is, the %s part will be replaced with the locale's
-     * display name by the formatter. If there is not, this method simply returns the string
-     * specified by mSubtypeNameResId. If mSubtypeNameResId is not specified (== 0), it's up to the
-     * framework to generate an appropriate display name.
+     * may have exactly one %s in it. If there is, the %s part will be replaced with the locale's
+     * display name by the formatter. If there is not, this method returns the string specified by
+     * mSubtypeNameResId. If mSubtypeNameResId is not specified (== 0), it's up to the framework to
+     * generate an appropriate display name.
      */
     public CharSequence getDisplayName(
             Context context, String packageName, ApplicationInfo appInfo) {
@@ -215,8 +244,8 @@
     /**
      * The string of ExtraValue in subtype should be defined as follows:
      * example: key0,key1=value1,key2,key3,key4=value4
-     * @param key the key of extra value
-     * @return the subtype contains specified the extra value
+     * @param key The key of extra value
+     * @return The subtype contains specified the extra value
      */
     public boolean containsExtraValueKey(String key) {
         return getExtraValueHashMap().containsKey(key);
@@ -225,8 +254,8 @@
     /**
      * The string of ExtraValue in subtype should be defined as follows:
      * example: key0,key1=value1,key2,key3,key4=value4
-     * @param key the key of extra value
-     * @return the value of the specified key
+     * @param key The key of extra value
+     * @return The value of the specified key
      */
     public String getExtraValueOf(String key) {
         return getExtraValueHashMap().get(key);
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index 97d61ba..0baf2eb 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -311,7 +311,11 @@
     }
 
     private float getMaxTimeSeekable() {
-        return mMediaPlayer.getDuration() / 1000.0f;
+        if (mState >= PREPARED) {
+            return mMediaPlayer.getDuration() / 1000.0f;
+        } else {
+            return 0;
+        }
     }
 
     private native void nativeOnBuffering(int percent, int nativePointer);
diff --git a/core/java/android/webkit/WebCoreThreadWatchdog.java b/core/java/android/webkit/WebCoreThreadWatchdog.java
new file mode 100644
index 0000000..d100260
--- /dev/null
+++ b/core/java/android/webkit/WebCoreThreadWatchdog.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Process;
+import android.webkit.WebViewCore.EventHub;
+
+// A Runnable that will monitor if the WebCore thread is still
+// processing messages by pinging it every so often. It is safe
+// to call the public methods of this class from any thread.
+class WebCoreThreadWatchdog implements Runnable {
+
+    // A message with this id is sent by the WebCore thread to notify the
+    // Watchdog that the WebCore thread is still processing messages
+    // (i.e. everything is OK).
+    private static final int IS_ALIVE = 100;
+
+    // This message is placed in the Watchdog's queue and removed when we
+    // receive an IS_ALIVE. If it is ever processed, we consider the
+    // WebCore thread unresponsive.
+    private static final int TIMED_OUT = 101;
+
+    // Message to tell the Watchdog thread to terminate.
+    private static final int QUIT = 102;
+
+    // Wait 10s after hearing back from the WebCore thread before checking it's still alive.
+    private static final int HEARTBEAT_PERIOD = 10 * 1000;
+
+    // If there's no callback from the WebCore thread for 30s, prompt the user the page has
+    // become unresponsive.
+    private static final int TIMEOUT_PERIOD = 30 * 1000;
+
+    // After the first timeout, use a shorter period before re-prompting the user.
+    private static final int SUBSEQUENT_TIMEOUT_PERIOD = 15 * 1000;
+
+    private Context mContext;
+    private Handler mWebCoreThreadHandler;
+    private Handler mHandler;
+    private boolean mPaused;
+    private boolean mPendingQuit;
+
+    private static WebCoreThreadWatchdog sInstance;
+
+    public synchronized static WebCoreThreadWatchdog start(Context context,
+            Handler webCoreThreadHandler) {
+        if (sInstance == null) {
+            sInstance = new WebCoreThreadWatchdog(context, webCoreThreadHandler);
+            new Thread(sInstance, "WebCoreThreadWatchdog").start();
+        }
+        return sInstance;
+    }
+
+    public synchronized static void updateContext(Context context) {
+        if (sInstance != null) {
+            sInstance.setContext(context);
+        }
+    }
+
+    public synchronized static void pause() {
+        if (sInstance != null) {
+            sInstance.pauseWatchdog();
+        }
+    }
+
+    public synchronized static void resume() {
+        if (sInstance != null) {
+            sInstance.resumeWatchdog();
+        }
+    }
+
+    public synchronized static void quit() {
+        if (sInstance != null) {
+            sInstance.quitWatchdog();
+        }
+    }
+
+    private void setContext(Context context) {
+        mContext = context;
+    }
+
+    private WebCoreThreadWatchdog(Context context, Handler webCoreThreadHandler) {
+        mContext = context;
+        mWebCoreThreadHandler = webCoreThreadHandler;
+    }
+
+    private void quitWatchdog() {
+        if (mHandler == null) {
+            // The thread hasn't started yet, so set a flag to stop it starting.
+            mPendingQuit = true;
+            return;
+        }
+        // Clear any pending messages, and then post a quit to the WatchDog handler.
+        mHandler.removeMessages(TIMED_OUT);
+        mHandler.removeMessages(IS_ALIVE);
+        mWebCoreThreadHandler.removeMessages(EventHub.HEARTBEAT);
+        mHandler.obtainMessage(QUIT).sendToTarget();
+    }
+
+    private void pauseWatchdog() {
+        mPaused = true;
+
+        if (mHandler == null) {
+            return;
+        }
+
+        mHandler.removeMessages(TIMED_OUT);
+        mHandler.removeMessages(IS_ALIVE);
+        mWebCoreThreadHandler.removeMessages(EventHub.HEARTBEAT);
+    }
+
+    private void resumeWatchdog() {
+        if (!mPaused) {
+            // Do nothing if we get a call to resume without being paused.
+            // This can happen during the initialisation of the WebView.
+            return;
+        }
+
+        mPaused = false;
+
+        if (mHandler == null) {
+            return;
+        }
+
+        mWebCoreThreadHandler.obtainMessage(EventHub.HEARTBEAT,
+                mHandler.obtainMessage(IS_ALIVE)).sendToTarget();
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(TIMED_OUT), TIMEOUT_PERIOD);
+    }
+
+    private boolean createHandler() {
+        synchronized (WebCoreThreadWatchdog.class) {
+            if (mPendingQuit) {
+                return false;
+            }
+
+            mHandler = new Handler() {
+                @Override
+                public void handleMessage(Message msg) {
+                    switch (msg.what) {
+                    case IS_ALIVE:
+                        synchronized(WebCoreThreadWatchdog.class) {
+                            if (mPaused) {
+                                return;
+                            }
+
+                            // The WebCore thread still seems alive. Reset the countdown timer.
+                            removeMessages(TIMED_OUT);
+                            sendMessageDelayed(obtainMessage(TIMED_OUT), TIMEOUT_PERIOD);
+                            mWebCoreThreadHandler.sendMessageDelayed(
+                                    mWebCoreThreadHandler.obtainMessage(EventHub.HEARTBEAT,
+                                            mHandler.obtainMessage(IS_ALIVE)),
+                                    HEARTBEAT_PERIOD);
+                        }
+                        break;
+
+                    case TIMED_OUT:
+                        new AlertDialog.Builder(mContext)
+                            .setMessage(com.android.internal.R.string.webpage_unresponsive)
+                            .setPositiveButton(com.android.internal.R.string.force_close,
+                                    new DialogInterface.OnClickListener() {
+                                        @Override
+                                        public void onClick(DialogInterface dialog, int which) {
+                                        // User chose to force close.
+                                        Process.killProcess(Process.myPid());
+                                    }
+                                })
+                            .setNegativeButton(com.android.internal.R.string.wait,
+                                    new DialogInterface.OnClickListener() {
+                                        @Override
+                                        public void onClick(DialogInterface dialog, int which) {
+                                            // The user chose to wait. The last HEARTBEAT message
+                                            // will still be in the WebCore thread's queue, so all
+                                            // we need to do is post another TIMED_OUT so that the
+                                            // user will get prompted again if the WebCore thread
+                                            // doesn't sort itself out.
+                                            sendMessageDelayed(obtainMessage(TIMED_OUT),
+                                                    SUBSEQUENT_TIMEOUT_PERIOD);
+                                       }
+                                    })
+                            .setOnCancelListener(new DialogInterface.OnCancelListener() {
+                                    @Override
+                                    public void onCancel(DialogInterface dialog) {
+                                        sendMessageDelayed(obtainMessage(TIMED_OUT),
+                                                SUBSEQUENT_TIMEOUT_PERIOD);
+                                    }
+                            })
+                            .setIcon(android.R.drawable.ic_dialog_alert)
+                            .show();
+                        break;
+
+                    case QUIT:
+                        Looper.myLooper().quit();
+                        break;
+                    }
+                }
+            };
+
+            return true;
+        }
+    }
+
+    @Override
+    public void run() {
+        Looper.prepare();
+
+        if (!createHandler()) {
+            return;
+        }
+
+        // Send the initial control to WebViewCore and start the timeout timer as long as we aren't
+        // paused.
+        synchronized (WebCoreThreadWatchdog.class) {
+            if (!mPaused) {
+                mWebCoreThreadHandler.obtainMessage(EventHub.HEARTBEAT,
+                        mHandler.obtainMessage(IS_ALIVE)).sendToTarget();
+                mHandler.sendMessageDelayed(mHandler.obtainMessage(TIMED_OUT), TIMEOUT_PERIOD);
+            }
+        }
+
+        Looper.loop();
+    }
+}
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 617584b..08d94e2 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -142,7 +142,7 @@
     }
 
     // TODO: Keep this up to date
-    private static final String PREVIOUS_VERSION = "3.1";
+    private static final String PREVIOUS_VERSION = "4.0.3";
 
     // WebView associated with this WebSettings.
     private WebView mWebView;
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index fa82c46..15b47e3 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -27,7 +27,6 @@
 import android.content.DialogInterface.OnCancelListener;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.database.DataSetObserver;
@@ -57,9 +56,9 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.StrictMode;
+import android.os.SystemClock;
 import android.provider.Settings;
 import android.speech.tts.TextToSpeech;
-import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.EventLog;
 import android.util.Log;
@@ -84,6 +83,7 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.inputmethod.BaseInputConnection;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
 import android.view.inputmethod.InputMethodManager;
@@ -126,7 +126,8 @@
 import javax.microedition.khronos.egl.EGL10;
 import javax.microedition.khronos.egl.EGLContext;
 import javax.microedition.khronos.egl.EGLDisplay;
-import static javax.microedition.khronos.egl.EGL10.*;
+
+import static javax.microedition.khronos.egl.EGL10.EGL_DEFAULT_DISPLAY;
 
 /**
  * <p>A View that displays web pages. This class is the basis upon which you
@@ -333,6 +334,7 @@
         ViewGroup.OnHierarchyChangeListener {
 
     private class InnerGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
+        @Override
         public void onGlobalLayout() {
             if (isShown()) {
                 setGLRectViewport();
@@ -341,6 +343,7 @@
     }
 
     private class InnerScrollChangedListener implements ViewTreeObserver.OnScrollChangedListener {
+        @Override
         public void onScrollChanged() {
             if (isShown()) {
                 setGLRectViewport();
@@ -348,6 +351,43 @@
         }
     }
 
+    /**
+     * InputConnection used for ContentEditable. This captures the 'delete'
+     * commands and sends delete key presses.
+     */
+    private class WebViewInputConnection extends BaseInputConnection {
+        public WebViewInputConnection() {
+            super(WebView.this, false);
+        }
+
+        private void sendKeyPress(int keyCode) {
+            long eventTime = SystemClock.uptimeMillis();
+            sendKeyEvent(new KeyEvent(eventTime, eventTime,
+                    KeyEvent.ACTION_DOWN, keyCode, 0, 0,
+                    KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
+                    KeyEvent.FLAG_SOFT_KEYBOARD));
+            sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
+                    KeyEvent.ACTION_UP, keyCode, 0, 0,
+                    KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
+                    KeyEvent.FLAG_SOFT_KEYBOARD));
+        }
+
+        @Override
+        public boolean deleteSurroundingText(int leftLength, int rightLength) {
+            // Look for one-character delete and send it as a key press.
+            if (leftLength == 1 && rightLength == 0) {
+                sendKeyPress(KeyEvent.KEYCODE_DEL);
+            } else if (leftLength == 0 && rightLength == 1){
+                sendKeyPress(KeyEvent.KEYCODE_FORWARD_DEL);
+            } else if (mWebViewCore != null) {
+                mWebViewCore.sendMessage(EventHub.DELETE_SURROUNDING_TEXT,
+                        leftLength, rightLength);
+            }
+            return super.deleteSurroundingText(leftLength, rightLength);
+        }
+    }
+
+
     // The listener to capture global layout change event.
     private InnerGlobalLayoutListener mGlobalLayoutListener = null;
 
@@ -372,6 +412,8 @@
     private final Rect mViewRectViewport = new Rect();
     private final RectF mVisibleContentRect = new RectF();
     private boolean mGLViewportEmpty = false;
+    WebViewInputConnection mInputConnection = new WebViewInputConnection();
+
 
     /**
      *  Transportation object for returning WebView across thread boundaries.
@@ -952,8 +994,7 @@
         public void onNewPicture(WebView view, Picture picture);
     }
 
-    // FIXME: Want to make this public, but need to change the API file.
-    public /*static*/ class HitTestResult {
+    public static class HitTestResult {
         /**
          * Default HitTestResult, where the target is unknown
          */
@@ -1243,7 +1284,7 @@
                 PackageManager pm = mContext.getPackageManager();
                 for (String name : sGoogleApps) {
                     try {
-                        PackageInfo pInfo = pm.getPackageInfo(name,
+                        pm.getPackageInfo(name,
                                 PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES);
                         installedPackages.add(name);
                     } catch (PackageManager.NameNotFoundException e) {
@@ -1322,7 +1363,7 @@
                 final String packageName = ctx.getPackageName();
                 if (packageName != null) {
                     mTextToSpeech = new TextToSpeech(getContext(), null, null,
-                            packageName + ".**webview**");
+                            packageName + ".**webview**", true);
                     addJavascriptInterface(mTextToSpeech, ALIAS_ACCESSIBILITY_JS_INTERFACE);
                 }
             }
@@ -1415,23 +1456,27 @@
                     .setMessage(com.android.internal.R.string.save_password_message)
                     .setPositiveButton(com.android.internal.R.string.save_password_notnow,
                     new DialogInterface.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             resumeMsg.sendToTarget();
                         }
                     })
                     .setNeutralButton(com.android.internal.R.string.save_password_remember,
                     new DialogInterface.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             remember.sendToTarget();
                         }
                     })
                     .setNegativeButton(com.android.internal.R.string.save_password_never,
                     new DialogInterface.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             neverRemember.sendToTarget();
                         }
                     })
                     .setOnCancelListener(new OnCancelListener() {
+                        @Override
                         public void onCancel(DialogInterface dialog) {
                             resumeMsg.sendToTarget();
                         }
@@ -1517,6 +1562,7 @@
      *
      * @deprecated This method is now obsolete.
      */
+    @Deprecated
     public int getVisibleTitleHeight() {
         checkThread();
         return getVisibleTitleHeightImpl();
@@ -1855,6 +1901,7 @@
         // contains valid data.
         final File temp = new File(dest.getPath() + ".writing");
         new Thread(new Runnable() {
+            @Override
             public void run() {
                 FileOutputStream out = null;
                 try {
@@ -1924,6 +1971,7 @@
             final FileInputStream in = new FileInputStream(src);
             final Bundle copy = new Bundle(b);
             new Thread(new Runnable() {
+                @Override
                 public void run() {
                     try {
                         final Picture p = Picture.createFromStream(in);
@@ -1931,6 +1979,7 @@
                             // Post a runnable on the main thread to update the
                             // history picture fields.
                             mPrivateHandler.post(new Runnable() {
+                                @Override
                                 public void run() {
                                     restoreHistoryPictureFields(p, copy);
                                 }
@@ -2659,8 +2708,8 @@
                 int slop = viewToContentDimension(mNavSlop);
                 cursorBounds.inset(-slop, -slop);
                 if (cursorBounds.contains(contentX, contentY)) {
-                    contentX = (int) cursorBounds.centerX();
-                    contentY = (int) cursorBounds.centerY();
+                    contentX = cursorBounds.centerX();
+                    contentY = cursorBounds.centerY();
                 }
             }
         }
@@ -3309,6 +3358,7 @@
             }
 
             cancelSelectDialog();
+            WebCoreThreadWatchdog.pause();
         }
     }
 
@@ -3341,6 +3391,15 @@
                 nativeSetPauseDrawing(mNativeClass, false);
             }
         }
+        // Ensure that the watchdog has a currently valid Context to be able to display
+        // a prompt dialog. For example, if the Activity was finished whilst the WebCore
+        // thread was blocked and the Activity is started again, we may reuse the blocked
+        // thread, but we'll have a new Activity.
+        WebCoreThreadWatchdog.updateContext(mContext);
+        // We get a call to onResume for new WebViews (i.e. mIsPaused will be false). We need
+        // to ensure that the Watchdog thread is running for the new WebView, so call
+        // it outside the if block above.
+        WebCoreThreadWatchdog.resume();
     }
 
     /**
@@ -4857,10 +4916,16 @@
     }
 
     @Override
+    public boolean onCheckIsTextEditor() {
+        return true;
+    }
+
+    @Override
     public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
-      InputConnection connection = super.onCreateInputConnection(outAttrs);
-      outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_FULLSCREEN;
-      return connection;
+        outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN
+                | EditorInfo.TYPE_CLASS_TEXT
+                | EditorInfo.TYPE_TEXT_VARIATION_NORMAL;
+        return mInputConnection;
     }
 
     /**
@@ -5055,6 +5120,7 @@
             mWebSettings = getSettings();
         }
 
+        @Override
         public void run() {
             ArrayList<String> pastEntries = new ArrayList<String>();
 
@@ -5717,6 +5783,7 @@
      * @deprecated WebView no longer needs to implement
      * ViewGroup.OnHierarchyChangeListener.  This method does nothing now.
      */
+    @Override
     // Cannot add @hide as this can always be accessed via the interface.
     @Deprecated
     public void onChildViewAdded(View parent, View child) {}
@@ -5725,6 +5792,7 @@
      * @deprecated WebView no longer needs to implement
      * ViewGroup.OnHierarchyChangeListener.  This method does nothing now.
      */
+    @Override
     // Cannot add @hide as this can always be accessed via the interface.
     @Deprecated
     public void onChildViewRemoved(View p, View child) {}
@@ -5733,6 +5801,7 @@
      * @deprecated WebView should not have implemented
      * ViewTreeObserver.OnGlobalFocusChangeListener. This method does nothing now.
      */
+    @Override
     // Cannot add @hide as this can always be accessed via the interface.
     @Deprecated
     public void onGlobalFocusChanged(View oldFocus, View newFocus) {
@@ -6169,9 +6238,10 @@
                         }
                         if (DEBUG_TOUCH_HIGHLIGHT) {
                             if (getSettings().getNavDump()) {
-                                mTouchHighlightX = (int) x + mScrollX;
-                                mTouchHighlightY = (int) y + mScrollY;
+                                mTouchHighlightX = x + mScrollX;
+                                mTouchHighlightY = y + mScrollY;
                                 mPrivateHandler.postDelayed(new Runnable() {
+                                    @Override
                                     public void run() {
                                         mTouchHighlightX = mTouchHighlightY = 0;
                                         invalidate();
@@ -6763,8 +6833,6 @@
             int oldY = mScrollY;
             int rangeX = computeMaxScrollX();
             int rangeY = computeMaxScrollY();
-            int overscrollDistance = mOverscrollDistance;
-
             // Check for the original scrolling layer in case we change
             // directions.  mTouchMode might be TOUCH_DRAG_MODE if we have
             // reached the edge of a layer but mScrollingLayer will be non-zero
@@ -7477,8 +7545,8 @@
             return false;
         }
         mDragFromTextInput = true;
-        event.offsetLocation((float) (mWebTextView.getLeft() - mScrollX),
-                (float) (mWebTextView.getTop() - mScrollY));
+        event.offsetLocation((mWebTextView.getLeft() - mScrollX),
+                (mWebTextView.getTop() - mScrollY));
         boolean result = onTouchEvent(event);
         mDragFromTextInput = false;
         return result;
@@ -9033,7 +9101,7 @@
                 if (position < 0 || position >= getCount()) {
                     return null;
                 }
-                return (Container) getItem(position);
+                return getItem(position);
             }
 
             @Override
@@ -9132,6 +9200,7 @@
             }
         }
 
+        @Override
         public void run() {
             final ListView listView = (ListView) LayoutInflater.from(mContext)
                     .inflate(com.android.internal.R.layout.select_dialog, null);
@@ -9142,6 +9211,7 @@
 
             if (mMultiple) {
                 b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int which) {
                         mWebViewCore.sendMessage(
                                 EventHub.LISTBOX_CHOICES,
@@ -9150,6 +9220,7 @@
                     }});
                 b.setNegativeButton(android.R.string.cancel,
                         new DialogInterface.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int which) {
                         mWebViewCore.sendMessage(
                                 EventHub.SINGLE_LISTBOX_CHOICE, -2, 0);
@@ -9173,6 +9244,7 @@
                 }
             } else {
                 listView.setOnItemClickListener(new OnItemClickListener() {
+                    @Override
                     public void onItemClick(AdapterView<?> parent, View v,
                             int position, long id) {
                         // Rather than sending the message right away, send it
@@ -9193,6 +9265,7 @@
                 }
             }
             mListBoxDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+                @Override
                 public void onCancel(DialogInterface dialog) {
                     mWebViewCore.sendMessage(
                                 EventHub.SINGLE_LISTBOX_CHOICE, -2, 0);
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index d99e264..95533c6 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -37,18 +37,14 @@
 import android.view.MotionEvent;
 import android.view.SurfaceView;
 import android.view.View;
-import android.webkit.DeviceMotionService;
-import android.webkit.DeviceMotionAndOrientationManager;
-import android.webkit.DeviceOrientationService;
-import android.webkit.JniUtil;
+
+import junit.framework.Assert;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
-import junit.framework.Assert;
-
 /**
  * @hide
  */
@@ -170,6 +166,10 @@
                            "creation.");
                     Log.e(LOGTAG, Log.getStackTraceString(e));
                 }
+
+                // Start the singleton watchdog which will monitor the WebCore thread
+                // to verify it's still processing messages.
+                WebCoreThreadWatchdog.start(context, sWebCoreHandler);
             }
         }
         // Create an EventHub to handle messages before and after the thread is
@@ -382,8 +382,9 @@
         mCallbackProxy.onExceededDatabaseQuota(url, databaseIdentifier,
                 currentQuota, estimatedSize, getUsedQuota(),
                 new WebStorage.QuotaUpdater() {
+                        @Override
                         public void updateQuota(long quota) {
-                            nativeSetNewStorageLimit(quota);
+                            nativeSetNewStorageLimit(mNativeClass, quota);
                         }
                 });
     }
@@ -396,14 +397,16 @@
     protected void reachedMaxAppCacheSize(long spaceNeeded) {
         mCallbackProxy.onReachedMaxAppCacheSize(spaceNeeded, getUsedQuota(),
                 new WebStorage.QuotaUpdater() {
+                    @Override
                     public void updateQuota(long quota) {
-                        nativeSetNewStorageLimit(quota);
+                        nativeSetNewStorageLimit(mNativeClass, quota);
                     }
                 });
     }
 
     protected void populateVisitedLinks() {
         ValueCallback callback = new ValueCallback<String[]>() {
+            @Override
             public void onReceiveValue(String[] value) {
                 sendMessage(EventHub.POPULATE_VISITED_LINKS, (Object)value);
             }
@@ -420,14 +423,15 @@
     protected void geolocationPermissionsShowPrompt(String origin) {
         mCallbackProxy.onGeolocationPermissionsShowPrompt(origin,
                 new GeolocationPermissions.Callback() {
-          public void invoke(String origin, boolean allow, boolean remember) {
-            GeolocationPermissionsData data = new GeolocationPermissionsData();
-            data.mOrigin = origin;
-            data.mAllow = allow;
-            data.mRemember = remember;
-            // Marshall to WebCore thread.
-            sendMessage(EventHub.GEOLOCATION_PERMISSIONS_PROVIDE, data);
-          }
+            @Override
+            public void invoke(String origin, boolean allow, boolean remember) {
+                GeolocationPermissionsData data = new GeolocationPermissionsData();
+                data.mOrigin = origin;
+                data.mAllow = allow;
+                data.mRemember = remember;
+                // Marshall to WebCore thread.
+                sendMessage(EventHub.GEOLOCATION_PERMISSIONS_PROVIDE, data);
+            }
         });
     }
 
@@ -501,7 +505,7 @@
      * Clear the picture set. To be called only on the WebCore thread.
      */
     /* package */ void clearContent() {
-        nativeClearContent();
+        nativeClearContent(mNativeClass);
     }
 
     //-------------------------------------------------------------------------
@@ -513,15 +517,16 @@
     /**
      * Empty the picture set.
      */
-    private native void nativeClearContent();
+    private native void nativeClearContent(int nativeClass);
 
-    private native void nativeContentInvalidateAll();
+    private native void nativeContentInvalidateAll(int nativeClass);
 
     /**
      * Redraw a portion of the picture set. The Point wh returns the
      * width and height of the overall picture.
      */
-    private native int nativeRecordContent(Region invalRegion, Point wh);
+    private native int nativeRecordContent(int nativeClass, Region invalRegion,
+            Point wh);
 
     /**
      * Update the layers' content
@@ -533,25 +538,27 @@
      */
     private native void nativeNotifyAnimationStarted(int nativeClass);
 
-    private native boolean nativeFocusBoundsChanged();
+    private native boolean nativeFocusBoundsChanged(int nativeClass);
 
     /**
      * Splits slow parts of the picture set. Called from the webkit thread after
      * WebView.nativeDraw() returns content to be split.
      */
-    private native void nativeSplitContent(int content);
+    private native void nativeSplitContent(int nativeClass, int content);
 
-    private native boolean nativeKey(int keyCode, int unichar,
-            int repeatCount, boolean isShift, boolean isAlt, boolean isSym,
-            boolean isDown);
+    private native boolean nativeKey(int nativeClass, int keyCode,
+            int unichar, int repeatCount, boolean isShift, boolean isAlt,
+            boolean isSym, boolean isDown);
 
-    private native void nativeClick(int framePtr, int nodePtr, boolean fake);
+    private native void nativeClick(int nativeClass, int framePtr, int nodePtr,
+            boolean fake);
 
-    private native void nativeSendListBoxChoices(boolean[] choices, int size);
+    private native void nativeSendListBoxChoices(int nativeClass,
+            boolean[] choices, int size);
 
-    private native void nativeSendListBoxChoice(int choice);
+    private native void nativeSendListBoxChoice(int nativeClass, int choice);
 
-    private native void nativeCloseIdleConnections();
+    private native void nativeCloseIdleConnections(int nativeClass);
 
     /*  Tell webkit what its width and height are, for the purposes
         of layout/line-breaking. These coordinates are in document space,
@@ -561,75 +568,96 @@
         fixed size, textWrapWidth can be different from width with zooming.
         should this be called nativeSetViewPortSize?
     */
-    private native void nativeSetSize(int width, int height, int textWrapWidth,
-            float scale, int screenWidth, int screenHeight, int anchorX,
-            int anchorY, boolean ignoreHeight);
+    private native void nativeSetSize(int nativeClass, int width, int height,
+            int textWrapWidth, float scale, int screenWidth, int screenHeight,
+            int anchorX, int anchorY, boolean ignoreHeight);
 
-    private native int nativeGetContentMinPrefWidth();
+    private native int nativeGetContentMinPrefWidth(int nativeClass);
 
     // Start: functions that deal with text editing
     private native void nativeReplaceTextfieldText(
-            int oldStart, int oldEnd, String replace, int newStart, int newEnd,
-            int textGeneration);
+            int nativeClass, int oldStart, int oldEnd, String replace,
+            int newStart, int newEnd, int textGeneration);
 
-    private native void passToJs(int gen,
-            String currentText, int keyCode, int keyValue, boolean down,
-            boolean cap, boolean fn, boolean sym);
+    private native void passToJs(int nativeClass,
+            int gen, String currentText, int keyCode, int keyValue,
+            boolean down, boolean cap, boolean fn, boolean sym);
 
-    private native void nativeSetFocusControllerActive(boolean active);
+    private native void nativeSetFocusControllerActive(int nativeClass,
+            boolean active);
 
-    private native void nativeSaveDocumentState(int frame);
+    private native void nativeSaveDocumentState(int nativeClass, int frame);
 
-    private native void nativeMoveFocus(int framePtr, int nodePointer);
-    private native void nativeMoveMouse(int framePtr, int x, int y);
+    private native void nativeMoveFocus(int nativeClass, int framePtr,
+            int nodePointer);
+    private native void nativeMoveMouse(int nativeClass, int framePtr, int x,
+            int y);
 
-    private native void nativeMoveMouseIfLatest(int moveGeneration,
-            int framePtr, int x, int y);
+    private native void nativeMoveMouseIfLatest(int nativeClass,
+            int moveGeneration, int framePtr, int x, int y);
 
-    private native String nativeRetrieveHref(int x, int y);
-    private native String nativeRetrieveAnchorText(int x, int y);
-    private native String nativeRetrieveImageSource(int x, int y);
-    private native void nativeStopPaintingCaret();
-    private native void nativeTouchUp(int touchGeneration,
-            int framePtr, int nodePtr, int x, int y);
+    private native String nativeRetrieveHref(int nativeClass, int x, int y);
+    private native String nativeRetrieveAnchorText(int nativeClass,
+            int x, int y);
+    private native String nativeRetrieveImageSource(int nativeClass,
+            int x, int y);
+    private native void nativeStopPaintingCaret(int nativeClass);
+    private native void nativeTouchUp(int nativeClass,
+            int touchGeneration, int framePtr, int nodePtr, int x, int y);
 
-    private native boolean nativeHandleTouchEvent(int action, int[] idArray,
-            int[] xArray, int[] yArray, int count, int actionIndex, int metaState);
+    private native boolean nativeHandleTouchEvent(int nativeClass, int action,
+            int[] idArray, int[] xArray, int[] yArray, int count,
+            int actionIndex, int metaState);
 
-    private native void nativeUpdateFrameCache();
+    private native void nativeUpdateFrameCache(int nativeClass);
 
-    private native void nativeSetBackgroundColor(int color);
+    private native void nativeSetBackgroundColor(int nativeClass, int color);
 
-    private native void nativeDumpDomTree(boolean useFile);
+    private native void nativeDumpDomTree(int nativeClass, boolean useFile);
 
-    private native void nativeDumpRenderTree(boolean useFile);
+    private native void nativeDumpRenderTree(int nativeClass, boolean useFile);
 
-    private native void nativeDumpNavTree();
+    private native void nativeDumpNavTree(int nativeClass);
 
-    private native void nativeSetJsFlags(String flags);
+    private native void nativeSetJsFlags(int nativeClass, String flags);
 
     /**
      *  Delete text from start to end in the focused textfield. If there is no
      *  focus, or if start == end, silently fail.  If start and end are out of
      *  order, swap them.
-     *  @param  start   Beginning of selection to delete.
-     *  @param  end     End of selection to delete.
-     *  @param  textGeneration Text generation number when delete was pressed.
+     * @param  nativeClass Pointer to the C++ WebViewCore object mNativeClass
+     * @param  start   Beginning of selection to delete.
+     * @param  end     End of selection to delete.
+     * @param  textGeneration Text generation number when delete was pressed.
      */
-    private native void nativeDeleteSelection(int start, int end,
-            int textGeneration);
+    private native void nativeDeleteSelection(int nativeClass, int start,
+            int end, int textGeneration);
+
+    /**
+     * Delete text near the cursor.
+     * @param nativeClass The pointer to the native class (mNativeClass)
+     * @param leftLength The number of characters to the left of the cursor to
+     * delete
+     * @param rightLength The number of characters to the right of the cursor
+     * to delete.
+     */
+    private native void nativeDeleteSurroundingText(int nativeClass,
+            int leftLength,
+            int rightLength);
 
     /**
      *  Set the selection to (start, end) in the focused textfield. If start and
      *  end are out of order, swap them.
-     *  @param  start   Beginning of selection.
-     *  @param  end     End of selection.
+     * @param  nativeClass Pointer to the C++ WebViewCore object mNativeClass
+     * @param  start   Beginning of selection.
+     * @param  end     End of selection.
      */
-    private native void nativeSetSelection(int start, int end);
+    private native void nativeSetSelection(int nativeClass, int start, int end);
 
     // Register a scheme to be treated as local scheme so that it can access
     // local asset files for resources
-    private native void nativeRegisterURLSchemeAsLocal(String scheme);
+    private native void nativeRegisterURLSchemeAsLocal(int nativeClass,
+            String scheme);
 
     /*
      * Inform webcore that the user has decided whether to allow or deny new
@@ -637,34 +665,39 @@
      * the main thread should wake up now.
      * @param limit Is the new quota for an origin or new app cache max size.
      */
-    private native void nativeSetNewStorageLimit(long limit);
+    private native void nativeSetNewStorageLimit(int nativeClass, long limit);
 
     /**
      * Provide WebCore with a Geolocation permission state for the specified
      * origin.
+     * @param nativeClass Pointer to the C++ WebViewCore object mNativeClass
      * @param origin The origin for which Geolocation permissions are provided.
      * @param allow Whether Geolocation permissions are allowed.
      * @param remember Whether this decision should be remembered beyond the
      *     life of the current page.
      */
-    private native void nativeGeolocationPermissionsProvide(String origin, boolean allow, boolean remember);
+    private native void nativeGeolocationPermissionsProvide(int nativeClass,
+            String origin, boolean allow, boolean remember);
 
     /**
      * Provide WebCore with the previously visted links from the history database
+     * @param nativeClass TODO
      */
-    private native void nativeProvideVisitedHistory(String[] history);
+    private native void nativeProvideVisitedHistory(int nativeClass,
+            String[] history);
 
     /**
      * Modifies the current selection.
      *
      * Note: Accessibility support.
-     *
+     * @param nativeClass Pointer to the C++ WebViewCore object mNativeClass
      * @param direction The direction in which to alter the selection.
      * @param granularity The granularity of the selection modification.
      *
      * @return The selection string.
      */
-    private native String nativeModifySelection(int direction, int granularity);
+    private native String nativeModifySelection(int nativeClass, int direction,
+            int granularity);
 
     // EventHub for processing messages
     private final EventHub mEventHub;
@@ -677,6 +710,7 @@
         private static final int REDUCE_PRIORITY = 1;
         private static final int RESUME_PRIORITY = 2;
 
+        @Override
         public void run() {
             Looper.prepare();
             Assert.assertNull(sWebCoreHandler);
@@ -725,6 +759,13 @@
                                 }
                                 BrowserFrame.sJavaBridge.updateProxy((ProxyProperties)msg.obj);
                                 break;
+
+                            case EventHub.HEARTBEAT:
+                                // Ping back the watchdog to let it know we're still processing
+                                // messages.
+                                Message m = (Message)msg.obj;
+                                m.sendToTarget();
+                                break;
                         }
                     }
                 };
@@ -963,6 +1004,8 @@
         static final int SET_BACKGROUND_COLOR = 126;
         static final int SET_MOVE_FOCUS = 127;
         static final int SAVE_DOCUMENT_STATE = 128;
+        static final int DELETE_SURROUNDING_TEXT = 129;
+
 
         static final int WEBKIT_DRAW = 130;
         static final int POST_URL = 132;
@@ -1046,6 +1089,8 @@
 
         static final int NOTIFY_ANIMATION_STARTED = 196;
 
+        static final int HEARTBEAT = 197;
+
         // private message ids
         private static final int DESTROY =     200;
 
@@ -1124,18 +1169,19 @@
                                 mSettings.onDestroyed();
                                 mNativeClass = 0;
                                 mWebView = null;
+                                WebCoreThreadWatchdog.quit();
                             }
                             break;
 
                         case REVEAL_SELECTION:
-                            nativeRevealSelection();
+                            nativeRevealSelection(mNativeClass);
                             break;
 
                         case REQUEST_LABEL:
                             if (mWebView != null) {
                                 int nodePointer = msg.arg2;
-                                String label = nativeRequestLabel(msg.arg1,
-                                        nodePointer);
+                                String label = nativeRequestLabel(mNativeClass,
+                                        msg.arg1, nodePointer);
                                 if (label != null && label.length() > 0) {
                                     Message.obtain(mWebView.mPrivateHandler,
                                             WebView.RETURN_LABEL, nodePointer,
@@ -1145,7 +1191,7 @@
                             break;
 
                         case UPDATE_FRAME_CACHE_IF_LOADING:
-                            nativeUpdateFrameCacheIfLoading();
+                            nativeUpdateFrameCacheIfLoading(mNativeClass);
                             break;
 
                         case SCROLL_TEXT_INPUT:
@@ -1155,7 +1201,7 @@
                             } else {
                                 xPercent = ((Float) msg.obj).floatValue();
                             }
-                            nativeScrollFocusedTextInput(xPercent, msg.arg2);
+                            nativeScrollFocusedTextInput(mNativeClass, xPercent, msg.arg2);
                             break;
 
                         case LOAD_URL: {
@@ -1190,7 +1236,8 @@
                                             !scheme.startsWith("ftp") &&
                                             !scheme.startsWith("about") &&
                                             !scheme.startsWith("javascript")) {
-                                        nativeRegisterURLSchemeAsLocal(scheme);
+                                        nativeRegisterURLSchemeAsLocal(mNativeClass,
+                                                scheme);
                                     }
                                 }
                             }
@@ -1199,7 +1246,7 @@
                                     loadParams.mMimeType,
                                     loadParams.mEncoding,
                                     loadParams.mHistoryUrl);
-                            nativeContentInvalidateAll();
+                            nativeContentInvalidateAll(mNativeClass);
                             break;
 
                         case STOP_LOADING:
@@ -1228,11 +1275,11 @@
                             break;
 
                         case FAKE_CLICK:
-                            nativeClick(msg.arg1, msg.arg2, true);
+                            nativeClick(mNativeClass, msg.arg1, msg.arg2, true);
                             break;
 
                         case CLICK:
-                            nativeClick(msg.arg1, msg.arg2, false);
+                            nativeClick(mNativeClass, msg.arg1, msg.arg2, false);
                             break;
 
                         case VIEW_SIZE_CHANGED: {
@@ -1243,14 +1290,14 @@
                             // note: these are in document coordinates
                             // (inv-zoom)
                             Point pt = (Point) msg.obj;
-                            nativeSetScrollOffset(msg.arg1, msg.arg2 == 1,
-                                    pt.x, pt.y);
+                            nativeSetScrollOffset(mNativeClass, msg.arg1,
+                                    msg.arg2 == 1, pt.x, pt.y);
                             break;
 
                         case SET_GLOBAL_BOUNDS:
                             Rect r = (Rect) msg.obj;
-                            nativeSetGlobalBounds(r.left, r.top, r.width(),
-                                r.height());
+                            nativeSetGlobalBounds(mNativeClass, r.left, r.top,
+                                r.width(), r.height());
                             break;
 
                         case GO_BACK_FORWARD:
@@ -1279,7 +1326,7 @@
                                 WebViewWorker.getHandler().sendEmptyMessage(
                                         WebViewWorker.MSG_PAUSE_CACHE_TRANSACTION);
                             } else {
-                                nativeCloseIdleConnections();
+                                nativeCloseIdleConnections(mNativeClass);
                             }
                             break;
 
@@ -1293,16 +1340,16 @@
                             break;
 
                         case ON_PAUSE:
-                            nativePause();
+                            nativePause(mNativeClass);
                             break;
 
                         case ON_RESUME:
-                            nativeResume();
+                            nativeResume(mNativeClass);
                             break;
 
                         case FREE_MEMORY:
                             clearCache(false);
-                            nativeFreeMemory();
+                            nativeFreeMemory(mNativeClass);
                             break;
 
                         case SET_NETWORK_STATE:
@@ -1335,9 +1382,9 @@
 
                         case REPLACE_TEXT:
                             ReplaceTextData rep = (ReplaceTextData) msg.obj;
-                            nativeReplaceTextfieldText(msg.arg1, msg.arg2,
-                                    rep.mReplace, rep.mNewStart, rep.mNewEnd,
-                                    rep.mTextGeneration);
+                            nativeReplaceTextfieldText(mNativeClass, msg.arg1,
+                                    msg.arg2, rep.mReplace, rep.mNewStart,
+                                    rep.mNewEnd, rep.mTextGeneration);
                             break;
 
                         case PASS_TO_JS: {
@@ -1346,19 +1393,19 @@
                             int keyCode = evt.getKeyCode();
                             int keyValue = evt.getUnicodeChar();
                             int generation = msg.arg1;
-                            passToJs(generation,
+                            passToJs(mNativeClass,
+                                    generation,
                                     jsData.mCurrentText,
                                     keyCode,
                                     keyValue,
-                                    evt.isDown(),
-                                    evt.isShiftPressed(), evt.isAltPressed(),
-                                    evt.isSymPressed());
+                                    evt.isDown(), evt.isShiftPressed(),
+                                    evt.isAltPressed(), evt.isSymPressed());
                             break;
                         }
 
                         case SAVE_DOCUMENT_STATE: {
                             CursorData cDat = (CursorData) msg.obj;
-                            nativeSaveDocumentState(cDat.mFrame);
+                            nativeSaveDocumentState(mNativeClass, cDat.mFrame);
                             break;
                         }
 
@@ -1367,7 +1414,7 @@
                                 // FIXME: This will not work for connections currently in use, as
                                 // they cache the certificate responses. See http://b/5324235.
                                 SslCertLookupTable.getInstance().clear();
-                                nativeCloseIdleConnections();
+                                nativeCloseIdleConnections(mNativeClass);
                             } else {
                                 Network.getInstance(mContext).clearUserSslPrefTable();
                             }
@@ -1376,10 +1423,12 @@
                         case TOUCH_UP:
                             TouchUpData touchUpData = (TouchUpData) msg.obj;
                             if (touchUpData.mNativeLayer != 0) {
-                                nativeScrollLayer(touchUpData.mNativeLayer,
+                                nativeScrollLayer(mNativeClass,
+                                        touchUpData.mNativeLayer,
                                         touchUpData.mNativeLayerRect);
                             }
-                            nativeTouchUp(touchUpData.mMoveGeneration,
+                            nativeTouchUp(mNativeClass,
+                                    touchUpData.mMoveGeneration,
                                     touchUpData.mFrame, touchUpData.mNode,
                                     touchUpData.mX, touchUpData.mY);
                             break;
@@ -1394,11 +1443,13 @@
                                 yArray[c] = ted.mPoints[c].y;
                             }
                             if (ted.mNativeLayer != 0) {
-                                nativeScrollLayer(ted.mNativeLayer,
-                                        ted.mNativeLayerRect);
+                                nativeScrollLayer(mNativeClass,
+                                        ted.mNativeLayer, ted.mNativeLayerRect);
                             }
-                            ted.mNativeResult = nativeHandleTouchEvent(ted.mAction, ted.mIds,
-                                    xArray, yArray, count, ted.mActionIndex, ted.mMetaState);
+                            ted.mNativeResult = nativeHandleTouchEvent(
+                                    mNativeClass, ted.mAction, ted.mIds, xArray,
+                                    yArray, count, ted.mActionIndex,
+                                    ted.mMetaState);
                             Message.obtain(
                                     mWebView.mPrivateHandler,
                                     WebView.PREVENT_TOUCH_ID,
@@ -1409,7 +1460,7 @@
                         }
 
                         case SET_ACTIVE:
-                            nativeSetFocusControllerActive(msg.arg1 == 1);
+                            nativeSetFocusControllerActive(mNativeClass, msg.arg1 == 1);
                             break;
 
                         case ADD_JS_INTERFACE:
@@ -1435,39 +1486,39 @@
 
                         case SET_MOVE_FOCUS:
                             CursorData focusData = (CursorData) msg.obj;
-                            nativeMoveFocus(focusData.mFrame, focusData.mNode);
+                            nativeMoveFocus(mNativeClass, focusData.mFrame, focusData.mNode);
                             break;
 
                         case SET_MOVE_MOUSE:
                             CursorData cursorData = (CursorData) msg.obj;
-                            nativeMoveMouse(cursorData.mFrame,
-                                     cursorData.mX, cursorData.mY);
+                            nativeMoveMouse(mNativeClass,
+                                     cursorData.mFrame, cursorData.mX, cursorData.mY);
                             break;
 
                         case SET_MOVE_MOUSE_IF_LATEST:
                             CursorData cData = (CursorData) msg.obj;
-                            nativeMoveMouseIfLatest(cData.mMoveGeneration,
-                                    cData.mFrame,
-                                    cData.mX, cData.mY);
+                            nativeMoveMouseIfLatest(mNativeClass,
+                                    cData.mMoveGeneration,
+                                    cData.mFrame, cData.mX, cData.mY);
                             if (msg.arg1 == 1) {
-                                nativeStopPaintingCaret();
+                                nativeStopPaintingCaret(mNativeClass);
                             }
                             break;
 
                         case REQUEST_CURSOR_HREF: {
                             Message hrefMsg = (Message) msg.obj;
                             hrefMsg.getData().putString("url",
-                                    nativeRetrieveHref(msg.arg1, msg.arg2));
+                                    nativeRetrieveHref(mNativeClass, msg.arg1, msg.arg2));
                             hrefMsg.getData().putString("title",
-                                    nativeRetrieveAnchorText(msg.arg1, msg.arg2));
+                                    nativeRetrieveAnchorText(mNativeClass, msg.arg1, msg.arg2));
                             hrefMsg.getData().putString("src",
-                                    nativeRetrieveImageSource(msg.arg1, msg.arg2));
+                                    nativeRetrieveImageSource(mNativeClass, msg.arg1, msg.arg2));
                             hrefMsg.sendToTarget();
                             break;
                         }
 
                         case UPDATE_CACHE_AND_TEXT_ENTRY:
-                            nativeUpdateFrameCache();
+                            nativeUpdateFrameCache(mNativeClass);
                             // FIXME: this should provide a minimal rectangle
                             if (mWebView != null) {
                                 mWebView.postInvalidate();
@@ -1485,17 +1536,23 @@
                         case DELETE_SELECTION:
                             TextSelectionData deleteSelectionData
                                     = (TextSelectionData) msg.obj;
-                            nativeDeleteSelection(deleteSelectionData.mStart,
-                                    deleteSelectionData.mEnd, msg.arg1);
+                            nativeDeleteSelection(mNativeClass,
+                                    deleteSelectionData.mStart, deleteSelectionData.mEnd, msg.arg1);
+                            break;
+
+                        case DELETE_SURROUNDING_TEXT:
+                            nativeDeleteSurroundingText(mNativeClass,
+                                    msg.arg1, msg.arg2);
                             break;
 
                         case SET_SELECTION:
-                            nativeSetSelection(msg.arg1, msg.arg2);
+                            nativeSetSelection(mNativeClass, msg.arg1, msg.arg2);
                             break;
 
                         case MODIFY_SELECTION:
-                            String modifiedSelectionString = nativeModifySelection(msg.arg1,
-                                    msg.arg2);
+                            String modifiedSelectionString = 
+                                nativeModifySelection(mNativeClass, msg.arg1,
+                                        msg.arg2);
                             mWebView.mPrivateHandler.obtainMessage(WebView.SELECTION_STRING_CHANGED,
                                     modifiedSelectionString).sendToTarget();
                             break;
@@ -1508,36 +1565,36 @@
                             for (int c = 0; c < choicesSize; c++) {
                                 choicesArray[c] = choices.get(c);
                             }
-                            nativeSendListBoxChoices(choicesArray,
-                                    choicesSize);
+                            nativeSendListBoxChoices(mNativeClass,
+                                    choicesArray, choicesSize);
                             break;
 
                         case SINGLE_LISTBOX_CHOICE:
-                            nativeSendListBoxChoice(msg.arg1);
+                            nativeSendListBoxChoice(mNativeClass, msg.arg1);
                             break;
 
                         case SET_BACKGROUND_COLOR:
-                            nativeSetBackgroundColor(msg.arg1);
+                            nativeSetBackgroundColor(mNativeClass, msg.arg1);
                             break;
 
                         case DUMP_DOMTREE:
-                            nativeDumpDomTree(msg.arg1 == 1);
+                            nativeDumpDomTree(mNativeClass, msg.arg1 == 1);
                             break;
 
                         case DUMP_RENDERTREE:
-                            nativeDumpRenderTree(msg.arg1 == 1);
+                            nativeDumpRenderTree(mNativeClass, msg.arg1 == 1);
                             break;
 
                         case DUMP_NAVTREE:
-                            nativeDumpNavTree();
+                            nativeDumpNavTree(mNativeClass);
                             break;
 
                         case SET_JS_FLAGS:
-                            nativeSetJsFlags((String)msg.obj);
+                            nativeSetJsFlags(mNativeClass, (String)msg.obj);
                             break;
 
                         case CONTENT_INVALIDATE_ALL:
-                            nativeContentInvalidateAll();
+                            nativeContentInvalidateAll(mNativeClass);
                             break;
 
                         case SAVE_WEBARCHIVE:
@@ -1552,12 +1609,12 @@
                         case GEOLOCATION_PERMISSIONS_PROVIDE:
                             GeolocationPermissionsData data =
                                     (GeolocationPermissionsData) msg.obj;
-                            nativeGeolocationPermissionsProvide(data.mOrigin,
-                                    data.mAllow, data.mRemember);
+                            nativeGeolocationPermissionsProvide(mNativeClass,
+                                    data.mOrigin, data.mAllow, data.mRemember);
                             break;
 
                         case SPLIT_PICTURE_SET:
-                            nativeSplitContent(msg.arg1);
+                            nativeSplitContent(mNativeClass, msg.arg1);
                             mWebView.mPrivateHandler.obtainMessage(
                                     WebView.REPLACE_BASE_CONTENT, msg.arg1, 0);
                             mSplitPictureIsScheduled = false;
@@ -1575,15 +1632,15 @@
                             break;
 
                         case POPULATE_VISITED_LINKS:
-                            nativeProvideVisitedHistory((String[])msg.obj);
+                            nativeProvideVisitedHistory(mNativeClass, (String[])msg.obj);
                             break;
 
                         case VALID_NODE_BOUNDS: {
                             MotionUpData motionUpData = (MotionUpData) msg.obj;
                             if (!nativeValidNodeAndBounds(
-                                    motionUpData.mFrame, motionUpData.mNode,
-                                    motionUpData.mBounds)) {
-                                nativeUpdateFrameCache();
+                                    mNativeClass, motionUpData.mFrame,
+                                    motionUpData.mNode, motionUpData.mBounds)) {
+                                nativeUpdateFrameCache(mNativeClass);
                             }
                             Message message = mWebView.mPrivateHandler
                                     .obtainMessage(WebView.DO_MOTION_UP,
@@ -1594,11 +1651,11 @@
                         }
 
                         case HIDE_FULLSCREEN:
-                            nativeFullScreenPluginHidden(msg.arg1);
+                            nativeFullScreenPluginHidden(mNativeClass, msg.arg1);
                             break;
 
                         case PLUGIN_SURFACE_READY:
-                            nativePluginSurfaceReady();
+                            nativePluginSurfaceReady(mNativeClass);
                             break;
 
                         case NOTIFY_ANIMATION_STARTED:
@@ -1617,11 +1674,11 @@
                         case GET_TOUCH_HIGHLIGHT_RECTS:
                             TouchHighlightData d = (TouchHighlightData) msg.obj;
                             if (d.mNativeLayer != 0) {
-                                nativeScrollLayer(d.mNativeLayer,
-                                        d.mNativeLayerRect);
+                                nativeScrollLayer(mNativeClass,
+                                        d.mNativeLayer, d.mNativeLayerRect);
                             }
                             ArrayList<Rect> rects = nativeGetTouchHighlightRects
-                                    (d.mX, d.mY, d.mSlop);
+                                    (mNativeClass, d.mX, d.mY, d.mSlop);
                             mWebView.mPrivateHandler.obtainMessage(
                                     WebView.SET_TOUCH_HIGHLIGHT_RECTS, rects)
                                     .sendToTarget();
@@ -1632,7 +1689,7 @@
                             break;
 
                         case AUTOFILL_FORM:
-                            nativeAutoFillForm(msg.arg1);
+                            nativeAutoFillForm(mNativeClass, msg.arg1);
                             mWebView.mPrivateHandler.obtainMessage(WebView.AUTOFILL_COMPLETE, null)
                                     .sendToTarget();
                             break;
@@ -1853,9 +1910,9 @@
             unicodeChar = evt.getCharacters().codePointAt(0);
         }
 
-        if (!nativeKey(keyCode, unicodeChar, evt.getRepeatCount(), evt.isShiftPressed(),
-                evt.isAltPressed(), evt.isSymPressed(),
-                isDown) && keyCode != KeyEvent.KEYCODE_ENTER) {
+        if (!nativeKey(mNativeClass, keyCode, unicodeChar, evt.getRepeatCount(),
+                evt.isShiftPressed(), evt.isAltPressed(),
+                evt.isSymPressed(), isDown) && keyCode != KeyEvent.KEYCODE_ENTER) {
             if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
                     && keyCode <= KeyEvent.KEYCODE_DPAD_RIGHT) {
                 if (DebugFlags.WEB_VIEW_CORE) {
@@ -1901,9 +1958,9 @@
             float ratio = (heightWidthRatio > 0) ? heightWidthRatio : (float) h / w;
             height = Math.round(ratio * width);
         }
-        nativeSetSize(width, height, textwrapWidth, scale, w,
-                data.mActualViewHeight > 0 ? data.mActualViewHeight : h,
-                data.mAnchorX, data.mAnchorY, data.mIgnoreHeight);
+        int screenHeight = data.mActualViewHeight > 0 ? data.mActualViewHeight : h;
+        nativeSetSize(mNativeClass, width, height, textwrapWidth, scale,
+                w, screenHeight, data.mAnchorX, data.mAnchorY, data.mIgnoreHeight);
         // Remember the current width and height
         boolean needInvalidate = (mCurrentViewWidth == 0);
         mCurrentViewWidth = w;
@@ -2039,7 +2096,8 @@
         mDrawIsScheduled = false;
         DrawData draw = new DrawData();
         if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw start");
-        draw.mBaseLayer = nativeRecordContent(draw.mInvalRegion, draw.mContentSize);
+        draw.mBaseLayer = nativeRecordContent(mNativeClass, draw.mInvalRegion,
+                draw.mContentSize);
         if (draw.mBaseLayer == 0) {
             if (mWebView != null && !mWebView.isPaused()) {
                 if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw abort, resending draw message");
@@ -2055,14 +2113,14 @@
 
     private void webkitDraw(DrawData draw) {
         if (mWebView != null) {
-            draw.mFocusSizeChanged = nativeFocusBoundsChanged();
+            draw.mFocusSizeChanged = nativeFocusBoundsChanged(mNativeClass);
             draw.mViewSize = new Point(mCurrentViewWidth, mCurrentViewHeight);
             if (mSettings.getUseWideViewPort()) {
                 draw.mMinPrefWidth = Math.max(
                         mViewportWidth == -1 ? WebView.DEFAULT_VIEWPORT_WIDTH
                                 : (mViewportWidth == 0 ? mCurrentViewWidth
                                         : mViewportWidth),
-                        nativeGetContentMinPrefWidth());
+                        nativeGetContentMinPrefWidth(mNativeClass));
             }
             if (mInitialViewState != null) {
                 draw.mViewState = mInitialViewState;
@@ -2113,7 +2171,7 @@
                     Log.w(LOGTAG, "Cannot pauseUpdatePicture, core destroyed or not initialized!");
                     return;
                 }
-                core.nativeSetIsPaused(true);
+                core.nativeSetIsPaused(core.mNativeClass, true);
                 core.mDrawIsPaused = true;
             }
         }
@@ -2131,7 +2189,7 @@
                     Log.w(LOGTAG, "Cannot resumeUpdatePicture, core destroyed!");
                     return;
                 }
-                core.nativeSetIsPaused(false);
+                core.nativeSetIsPaused(core.mNativeClass, false);
                 core.mDrawIsPaused = false;
                 // always redraw on resume to reenable gif animations
                 core.mDrawIsScheduled = false;
@@ -2255,7 +2313,7 @@
         return mWebView;
     }
 
-    private native void setViewportSettingsFromNative();
+    private native void setViewportSettingsFromNative(int nativeClass);
 
     // called by JNI
     private void didFirstLayout(boolean standardLoad) {
@@ -2300,7 +2358,7 @@
             return;
         }
         // set the viewport settings from WebKit
-        setViewportSettingsFromNative();
+        setViewportSettingsFromNative(mNativeClass);
 
         // clamp initial scale
         if (mViewportInitialScale > 0) {
@@ -2338,11 +2396,7 @@
         // adjust the default scale to match the densityDpi
         float adjust = 1.0f;
         if (mViewportDensityDpi == -1) {
-            // convert default zoom scale to a integer (percentage) to avoid any
-            // issues with floating point comparisons
-            if (mWebView != null && (int)(mWebView.getDefaultZoomScale() * 100) != 100) {
-                adjust = mWebView.getDefaultZoomScale();
-            }
+            adjust = mContext.getResources().getDisplayMetrics().density;
         } else if (mViewportDensityDpi > 0) {
             adjust = (float) mContext.getResources().getDisplayMetrics().densityDpi
                     / mViewportDensityDpi;
@@ -2614,18 +2668,22 @@
                 WebView.FIND_AGAIN).sendToTarget();
     }
 
-    private native void nativeUpdateFrameCacheIfLoading();
-    private native void nativeRevealSelection();
-    private native String nativeRequestLabel(int framePtr, int nodePtr);
+    private native void nativeUpdateFrameCacheIfLoading(int nativeClass);
+    private native void nativeRevealSelection(int nativeClass);
+    private native String nativeRequestLabel(int nativeClass, int framePtr,
+            int nodePtr);
     /**
      * Scroll the focused textfield to (xPercent, y) in document space
      */
-    private native void nativeScrollFocusedTextInput(float xPercent, int y);
+    private native void nativeScrollFocusedTextInput(int nativeClass,
+            float xPercent, int y);
 
     // these must be in document space (i.e. not scaled/zoomed).
-    private native void nativeSetScrollOffset(int gen, boolean sendScrollEvent, int dx, int dy);
+    private native void nativeSetScrollOffset(int nativeClass, int gen,
+            boolean sendScrollEvent, int dx, int dy);
 
-    private native void nativeSetGlobalBounds(int x, int y, int w, int h);
+    private native void nativeSetGlobalBounds(int nativeClass, int x, int y,
+            int w, int h);
 
     // called by JNI
     private void requestListBox(String[] array, int[] enabledArray,
@@ -2860,18 +2918,18 @@
         return mDeviceOrientationService;
     }
 
-    private native void nativeSetIsPaused(boolean isPaused);
-    private native void nativePause();
-    private native void nativeResume();
-    private native void nativeFreeMemory();
-    private native void nativeFullScreenPluginHidden(int npp);
-    private native void nativePluginSurfaceReady();
-    private native boolean nativeValidNodeAndBounds(int frame, int node,
-            Rect bounds);
+    private native void nativeSetIsPaused(int nativeClass, boolean isPaused);
+    private native void nativePause(int nativeClass);
+    private native void nativeResume(int nativeClass);
+    private native void nativeFreeMemory(int nativeClass);
+    private native void nativeFullScreenPluginHidden(int nativeClass, int npp);
+    private native void nativePluginSurfaceReady(int nativeClass);
+    private native boolean nativeValidNodeAndBounds(int nativeClass, int frame,
+            int node, Rect bounds);
 
-    private native ArrayList<Rect> nativeGetTouchHighlightRects(int x, int y,
-            int slop);
+    private native ArrayList<Rect> nativeGetTouchHighlightRects(int nativeClass,
+            int x, int y, int slop);
 
-    private native void nativeAutoFillForm(int queryId);
-    private native void nativeScrollLayer(int layer, Rect rect);
+    private native void nativeAutoFillForm(int nativeClass, int queryId);
+    private native void nativeScrollLayer(int nativeClass, int layer, Rect rect);
 }
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index 12a93ac..a452fec 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -18,10 +18,10 @@
 
 import com.android.internal.R;
 
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Comparator;
-import java.util.HashSet;
-import java.util.LinkedList;
+import java.util.HashMap;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
@@ -151,6 +151,15 @@
 
     private static final int VERB_COUNT              = 16;
 
+
+    private static final int[] RULES_VERTICAL = {
+            ABOVE, BELOW, ALIGN_BASELINE, ALIGN_TOP, ALIGN_BOTTOM
+    };
+
+    private static final int[] RULES_HORIZONTAL = {
+            LEFT_OF, RIGHT_OF, ALIGN_LEFT, ALIGN_RIGHT
+    };
+
     private View mBaselineView = null;
     private boolean mHasBaselineAlignedChild;
 
@@ -284,14 +293,13 @@
 
         if (DEBUG_GRAPH) {
             d(LOG_TAG, "=== Sorted vertical children");
-            graph.log(getResources(), ABOVE, BELOW, ALIGN_BASELINE, ALIGN_TOP, ALIGN_BOTTOM);
+            graph.log(getResources(), RULES_VERTICAL);
             d(LOG_TAG, "=== Sorted horizontal children");
-            graph.log(getResources(), LEFT_OF, RIGHT_OF, ALIGN_LEFT, ALIGN_RIGHT);
+            graph.log(getResources(), RULES_HORIZONTAL);
         }
 
-        graph.getSortedViews(mSortedVerticalChildren, ABOVE, BELOW, ALIGN_BASELINE,
-                ALIGN_TOP, ALIGN_BOTTOM);
-        graph.getSortedViews(mSortedHorizontalChildren, LEFT_OF, RIGHT_OF, ALIGN_LEFT, ALIGN_RIGHT);
+        graph.getSortedViews(mSortedVerticalChildren, RULES_VERTICAL);
+        graph.getSortedViews(mSortedHorizontalChildren, RULES_HORIZONTAL);
 
         if (DEBUG_GRAPH) {
             d(LOG_TAG, "=== Ordered list of vertical children");
@@ -1216,7 +1224,7 @@
          * Temporary data structure used to build the list of roots
          * for this graph.
          */
-        private LinkedList<Node> mRoots = new LinkedList<Node>();
+        private ArrayDeque<Node> mRoots = new ArrayDeque<Node>();
 
         /**
          * Clears the graph.
@@ -1261,18 +1269,18 @@
          * @param rules The list of rules to take into account.
          */
         void getSortedViews(View[] sorted, int... rules) {
-            final LinkedList<Node> roots = findRoots(rules);
+            final ArrayDeque<Node> roots = findRoots(rules);
             int index = 0;
 
-            while (roots.size() > 0) {
-                final Node node = roots.removeFirst();
+            Node node;
+            while ((node = roots.pollLast()) != null) {
                 final View view = node.view;
                 final int key = view.getId();
 
                 sorted[index++] = view;
 
-                final HashSet<Node> dependents = node.dependents;
-                for (Node dependent : dependents) {
+                final HashMap<Node, DependencyGraph> dependents = node.dependents;
+                for (Node dependent : dependents.keySet()) {
                     final SparseArray<Node> dependencies = dependent.dependencies;
 
                     dependencies.remove(key);
@@ -1297,7 +1305,7 @@
          *
          * @return A list of node, each being a root of the graph
          */
-        private LinkedList<Node> findRoots(int[] rulesFilter) {
+        private ArrayDeque<Node> findRoots(int[] rulesFilter) {
             final SparseArray<Node> keyNodes = mKeyNodes;
             final ArrayList<Node> nodes = mNodes;
             final int count = nodes.size();
@@ -1330,20 +1338,20 @@
                             continue;
                         }
                         // Add the current node as a dependent
-                        dependency.dependents.add(node);
+                        dependency.dependents.put(node, this);
                         // Add a dependency to the current node
                         node.dependencies.put(rule, dependency);
                     }
                 }
             }
 
-            final LinkedList<Node> roots = mRoots;
+            final ArrayDeque<Node> roots = mRoots;
             roots.clear();
 
             // Finds all the roots in the graph: all nodes with no dependencies
             for (int i = 0; i < count; i++) {
                 final Node node = nodes.get(i);
-                if (node.dependencies.size() == 0) roots.add(node);
+                if (node.dependencies.size() == 0) roots.addLast(node);
             }
 
             return roots;
@@ -1356,7 +1364,7 @@
          * @param rules The list of rules to take into account.
          */
         void log(Resources resources, int... rules) {
-            final LinkedList<Node> roots = findRoots(rules);
+            final ArrayDeque<Node> roots = findRoots(rules);
             for (Node node : roots) {
                 printNode(resources, node);
             }
@@ -1382,7 +1390,7 @@
             if (node.dependents.size() == 0) {
                 printViewId(resources, node.view);
             } else {
-                for (Node dependent : node.dependents) {
+                for (Node dependent : node.dependents.keySet()) {
                     StringBuilder buffer = new StringBuilder();
                     appendViewId(resources, node, buffer);
                     printdependents(resources, dependent, buffer);
@@ -1397,7 +1405,7 @@
             if (node.dependents.size() == 0) {
                 d(LOG_TAG, buffer.toString());
             } else {
-                for (Node dependent : node.dependents) {
+                for (Node dependent : node.dependents.keySet()) {
                     StringBuilder subBuffer = new StringBuilder(buffer);
                     printdependents(resources, dependent, subBuffer);
                 }
@@ -1420,7 +1428,7 @@
              * The list of dependents for this node; a dependent is a node
              * that needs this node to be processed first.
              */
-            final HashSet<Node> dependents = new HashSet<Node>();
+            final HashMap<Node, DependencyGraph> dependents = new HashMap<Node, DependencyGraph>();
 
             /**
              * The list of dependencies for this node.
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 81fc069..3dd7a9f 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -11378,6 +11378,9 @@
             case TEXT_DIRECTION_RTL:
                 mTextDir = TextDirectionHeuristics.RTL;
                 break;
+            case TEXT_DIRECTION_LOCALE:
+                mTextDir = TextDirectionHeuristics.LOCALE;
+                break;
         }
     }
 
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index 8e438ff..64fdf34 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -380,7 +380,6 @@
                 }
 
                 new AlertDialog.Builder(mContext)
-                        .setTitle(com.android.internal.R.string.VideoView_error_title)
                         .setMessage(messageId)
                         .setPositiveButton(com.android.internal.R.string.VideoView_error_button,
                                 new DialogInterface.OnClickListener() {
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index b689f53..517ce4e 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -300,6 +300,7 @@
         mProgressView = new ProgressBar(mContext, null, 0, mProgressStyle);
         mProgressView.setId(R.id.progress_horizontal);
         mProgressView.setMax(10000);
+        mProgressView.setVisibility(GONE);
         addView(mProgressView);
     }
 
@@ -307,6 +308,7 @@
         mIndeterminateProgressView = new ProgressBar(mContext, null, 0,
                 mIndeterminateProgressStyle);
         mIndeterminateProgressView.setId(R.id.progress_circular);
+        mIndeterminateProgressView.setVisibility(GONE);
         addView(mIndeterminateProgressView);
     }
 
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index adb0ac9..905a171 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -117,6 +117,8 @@
             = "lockscreen.biometric_weak_fallback";
     public final static String BIOMETRIC_WEAK_EVER_CHOSEN_KEY
             = "lockscreen.biometricweakeverchosen";
+    public final static String LOCKSCREEN_POWER_BUTTON_INSTANTLY_LOCKS
+            = "lockscreen.power_button_instantly_locks";
 
     private final static String PASSWORD_HISTORY_KEY = "lockscreen.passwordhistory";
 
@@ -335,7 +337,7 @@
      * @return True if the user has ever chosen a pattern.
      */
     public boolean isPatternEverChosen() {
-        return getBoolean(PATTERN_EVER_CHOSEN_KEY);
+        return getBoolean(PATTERN_EVER_CHOSEN_KEY, false);
     }
 
     /**
@@ -345,7 +347,7 @@
      * @return True if the user has ever chosen biometric weak.
      */
     public boolean isBiometricWeakEverChosen() {
-        return getBoolean(BIOMETRIC_WEAK_EVER_CHOSEN_KEY);
+        return getBoolean(BIOMETRIC_WEAK_EVER_CHOSEN_KEY, false);
     }
 
     /**
@@ -845,7 +847,7 @@
                 getLong(PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
                 == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
 
-        return getBoolean(Settings.Secure.LOCK_PATTERN_ENABLED)
+        return getBoolean(Settings.Secure.LOCK_PATTERN_ENABLED, false)
                 && (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
                         == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ||
                         (usingBiometricWeak() && backupEnabled));
@@ -891,7 +893,7 @@
      * @return Whether the visible pattern is enabled.
      */
     public boolean isVisiblePatternEnabled() {
-        return getBoolean(Settings.Secure.LOCK_PATTERN_VISIBLE);
+        return getBoolean(Settings.Secure.LOCK_PATTERN_VISIBLE, false);
     }
 
     /**
@@ -905,7 +907,7 @@
      * @return Whether tactile feedback for the pattern is enabled.
      */
     public boolean isTactileFeedbackEnabled() {
-        return getBoolean(Settings.Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
+        return getBoolean(Settings.Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, false);
     }
 
     /**
@@ -946,7 +948,7 @@
      *   attempts.
      */
     public boolean isPermanentlyLocked() {
-        return getBoolean(LOCKOUT_PERMANENT_KEY);
+        return getBoolean(LOCKOUT_PERMANENT_KEY, false);
     }
 
     /**
@@ -989,9 +991,10 @@
         return nextAlarm;
     }
 
-    private boolean getBoolean(String secureSettingKey) {
+    private boolean getBoolean(String secureSettingKey, boolean defaultValue) {
         return 1 ==
-                android.provider.Settings.Secure.getInt(mContentResolver, secureSettingKey, 0);
+                android.provider.Settings.Secure.getInt(mContentResolver, secureSettingKey,
+                        defaultValue ? 1 : 0);
     }
 
     private void setBoolean(String secureSettingKey, boolean enabled) {
@@ -1092,4 +1095,12 @@
         mContext.startActivity(intent);
     }
 
+    public void setPowerButtonInstantlyLocks(boolean enabled) {
+        setBoolean(LOCKSCREEN_POWER_BUTTON_INSTANTLY_LOCKS, enabled);
+    }
+
+    public boolean getPowerButtonInstantlyLocks() {
+        return getBoolean(LOCKSCREEN_POWER_BUTTON_INSTANTLY_LOCKS, true);
+    }
+
 }
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index e4d3aa8..c006615 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -294,7 +294,7 @@
 
     methodId = env->GetStaticMethodID(clazz, "main", "([Ljava/lang/String;)V");
     if (methodId == NULL) {
-        LOGE("ERROR: could not find method %s.main(String[])\n", className);
+        ALOGE("ERROR: could not find method %s.main(String[])\n", className);
         return UNKNOWN_ERROR;
     }
 
@@ -396,7 +396,7 @@
     sigemptyset(&mask);
     sigaddset(&mask, SIGPIPE);
     if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0)
-        LOGW("WARNING: SIGPIPE not blocked\n");
+        ALOGW("WARNING: SIGPIPE not blocked\n");
 }
 
 /*
@@ -703,7 +703,7 @@
         /* accept "all" to mean "all classes and packages" */
         if (strcmp(enableAssertBuf+4, "all") == 0)
             enableAssertBuf[3] = '\0';
-        LOGI("Assertions enabled: '%s'\n", enableAssertBuf);
+        ALOGI("Assertions enabled: '%s'\n", enableAssertBuf);
         opt.optionString = enableAssertBuf;
         mOptions.add(opt);
     } else {
@@ -711,7 +711,7 @@
     }
 
     if (jniOptsBuf[10] != '\0') {
-        LOGI("JNI options: '%s'\n", jniOptsBuf);
+        ALOGI("JNI options: '%s'\n", jniOptsBuf);
         opt.optionString = jniOptsBuf;
         mOptions.add(opt);
     }
@@ -765,7 +765,7 @@
      * JNI calls.
      */
     if (JNI_CreateJavaVM(pJavaVM, pEnv, &initArgs) < 0) {
-        LOGE("JNI_CreateJavaVM failed\n");
+        ALOGE("JNI_CreateJavaVM failed\n");
         goto bail;
     }
 
@@ -837,7 +837,7 @@
      * Register android functions.
      */
     if (startReg(env) < 0) {
-        LOGE("Unable to register all android natives\n");
+        ALOGE("Unable to register all android natives\n");
         return;
     }
 
@@ -868,13 +868,13 @@
     char* slashClassName = toSlashClassName(className);
     jclass startClass = env->FindClass(slashClassName);
     if (startClass == NULL) {
-        LOGE("JavaVM unable to locate class '%s'\n", slashClassName);
+        ALOGE("JavaVM unable to locate class '%s'\n", slashClassName);
         /* keep going */
     } else {
         jmethodID startMeth = env->GetStaticMethodID(startClass, "main",
             "([Ljava/lang/String;)V");
         if (startMeth == NULL) {
-            LOGE("JavaVM unable to find main() in '%s'\n", className);
+            ALOGE("JavaVM unable to find main() in '%s'\n", className);
             /* keep going */
         } else {
             env->CallStaticVoidMethod(startClass, startMeth, strArray);
@@ -889,9 +889,9 @@
 
     ALOGD("Shutting down VM\n");
     if (mJavaVM->DetachCurrentThread() != JNI_OK)
-        LOGW("Warning: unable to detach main thread\n");
+        ALOGW("Warning: unable to detach main thread\n");
     if (mJavaVM->DestroyJavaVM() != 0)
-        LOGW("Warning: VM did not shut down cleanly\n");
+        ALOGW("Warning: VM did not shut down cleanly\n");
 }
 
 void AndroidRuntime::onExit(int code)
@@ -942,7 +942,7 @@
 
     result = vm->AttachCurrentThread(pEnv, (void*) &args);
     if (result != JNI_OK)
-        LOGI("NOTE: attach of thread '%s' failed\n", threadName);
+        ALOGI("NOTE: attach of thread '%s' failed\n", threadName);
 
     return result;
 }
@@ -960,7 +960,7 @@
 
     result = vm->DetachCurrentThread();
     if (result != JNI_OK)
-        LOGE("ERROR: thread detach failed\n");
+        ALOGE("ERROR: thread detach failed\n");
     return result;
 }
 
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index f118dc1..4aa13f9 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -762,7 +762,7 @@
         value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count,
                 contextCount, flags);
         if (value == NULL) {
-            LOGE("Cannot get TextLayoutCache value for text = '%s'",
+            ALOGE("Cannot get TextLayoutCache value for text = '%s'",
                     String8(textArray + start, count).string());
             return ;
         }
@@ -779,15 +779,8 @@
         // TODO: need to suppress this code after the GL renderer is modified for not
         // copying the paint
 
-        // Save old text encoding
-        SkPaint::TextEncoding oldEncoding = paint->getTextEncoding();
-        // Define Glyph encoding
-        paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-
+        // Beware: this needs Glyph encoding (already done on the Paint constructor)
         canvas->drawText(glyphArray + index * 2, count * 2, x, y, *paint);
-
-        // Get back old encoding
-        paint->setTextEncoding(oldEncoding);
     }
 
     static void drawTextRun___CIIIIFFIPaint(
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index 64bd207..47ffd94 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -40,7 +40,7 @@
 
 bool GraphicsJNI::hasException(JNIEnv *env) {
     if (env->ExceptionCheck() != 0) {
-        LOGE("*** Uncaught exception returned from Java call!\n");
+        ALOGE("*** Uncaught exception returned from Java call!\n");
         env->ExceptionDescribe();
         return true;
     }
diff --git a/core/jni/android/graphics/NinePatchImpl.cpp b/core/jni/android/graphics/NinePatchImpl.cpp
index 7aaca8a..1d0bb506 100644
--- a/core/jni/android/graphics/NinePatchImpl.cpp
+++ b/core/jni/android/graphics/NinePatchImpl.cpp
@@ -297,7 +297,7 @@
                     }
                     SkIRect idst;
                     dst.round(&idst);
-                    //LOGI("Adding trans rect: (%d,%d)-(%d,%d)\n",
+                    //ALOGI("Adding trans rect: (%d,%d)-(%d,%d)\n",
                     //     idst.fLeft, idst.fTop, idst.fRight, idst.fBottom);
                     (*outRegion)->op(idst, SkRegion::kUnion_Op);
                 }
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 19f53d7..9f3238ab 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -54,8 +54,8 @@
 static JMetricsID gFontMetricsInt_fieldID;
 
 static void defaultSettingsForAndroid(SkPaint* paint) {
-    // utf16 is required for java
-    paint->setTextEncoding(SkPaint::kUTF16_TextEncoding);
+    // GlyphID encoding is required because we are using Harfbuzz shaping
+    paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
 }
 
 class SkPaintGlue {
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp
index de2d8c4..3d350ed 100644
--- a/core/jni/android/graphics/SurfaceTexture.cpp
+++ b/core/jni/android/graphics/SurfaceTexture.cpp
@@ -112,7 +112,7 @@
         JavaVM* vm = AndroidRuntime::getJavaVM();
         int result = vm->AttachCurrentThread(&env, (void*) &args);
         if (result != JNI_OK) {
-            LOGE("thread attach failed: %#x", result);
+            ALOGE("thread attach failed: %#x", result);
             return NULL;
         }
         *needsDetach = true;
@@ -124,7 +124,7 @@
     JavaVM* vm = AndroidRuntime::getJavaVM();
     int result = vm->DetachCurrentThread();
     if (result != JNI_OK) {
-        LOGE("thread detach failed: %#x", result);
+        ALOGE("thread detach failed: %#x", result);
     }
 }
 
@@ -136,7 +136,7 @@
         env->DeleteGlobalRef(mWeakThiz);
         env->DeleteGlobalRef(mClazz);
     } else {
-        LOGW("leaking JNI object references");
+        ALOGW("leaking JNI object references");
     }
     if (needsDetach) {
         detachJNI();
@@ -150,7 +150,7 @@
     if (env != NULL) {
         env->CallStaticVoidMethod(mClazz, fields.postEvent, mWeakThiz);
     } else {
-        LOGW("onFrameAvailable event will not posted");
+        ALOGW("onFrameAvailable event will not posted");
     }
     if (needsDetach) {
         detachJNI();
@@ -164,14 +164,14 @@
     fields.surfaceTexture = env->GetFieldID(clazz,
             ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID, "I");
     if (fields.surfaceTexture == NULL) {
-        LOGE("can't find android/graphics/SurfaceTexture.%s",
+        ALOGE("can't find android/graphics/SurfaceTexture.%s",
                 ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID);
     }
 
     fields.postEvent = env->GetStaticMethodID(clazz, "postEventFromNative",
             "(Ljava/lang/Object;)V");
     if (fields.postEvent == NULL) {
-        LOGE("can't find android/graphics/SurfaceTexture.postEventFromNative");
+        ALOGE("can't find android/graphics/SurfaceTexture.postEventFromNative");
     }
 }
 
diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp
index f88dcd6..2d83851 100644
--- a/core/jni/android/graphics/TextLayout.cpp
+++ b/core/jni/android/graphics/TextLayout.cpp
@@ -52,7 +52,7 @@
 // This will draw if canvas is not null, otherwise path must be non-null and it will create
 // a path representing the text that would have been drawn.
 void TextLayout::handleText(SkPaint *paint, const jchar* text, jsize len,
-                            jint bidiFlags, jfloat x, jfloat y,SkCanvas *canvas, SkPath *path) {
+                            jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
     sp<TextLayoutCacheValue> value;
 #if USE_TEXT_LAYOUT_CACHE
     // Return advances from the cache. Compute them if needed
@@ -64,17 +64,14 @@
             reinterpret_cast<const UChar*>(text), 0, len, len, bidiFlags);
 #endif
     if (value == NULL) {
-        LOGE("Cannot get TextLayoutCache value for text = '%s'",
+        ALOGE("Cannot get TextLayoutCache value for text = '%s'",
                 String8(text, len).string());
         return ;
     }
     SkScalar x_ = SkFloatToScalar(x);
     SkScalar y_ = SkFloatToScalar(y);
-    if (canvas) {
-        canvas->drawText(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, *paint);
-    } else {
-        paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
-    }
+    // Beware: this needs Glyph encoding (already done on the Paint constructor)
+    paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
 }
 
 void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
@@ -91,7 +88,7 @@
             reinterpret_cast<const UChar*>(chars), start, count, contextCount, dirFlags);
 #endif
     if (value == NULL) {
-        LOGE("Cannot get TextLayoutCache value for text = '%s'",
+        ALOGE("Cannot get TextLayoutCache value for text = '%s'",
                 String8(chars + start, count).string());
         return ;
     }
@@ -113,7 +110,7 @@
 
 void TextLayout::getTextPath(SkPaint *paint, const jchar *text, jsize len,
                              jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
-    handleText(paint, text, len, bidiFlags, x, y, NULL, path);
+    handleText(paint, text, len, bidiFlags, x, y, path);
 }
 
 
@@ -139,20 +136,12 @@
             reinterpret_cast<const UChar*>(text), 0, count, count, bidiFlags);
 #endif
     if (value == NULL) {
-        LOGE("Cannot get TextLayoutCache value for text = '%s'",
+        ALOGE("Cannot get TextLayoutCache value for text = '%s'",
                 String8(text, count).string());
         return ;
     }
-
-    // Save old text encoding
-    SkPaint::TextEncoding oldEncoding = paint->getTextEncoding();
-    // Define Glyph encoding
-    paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-
+    // Beware: this needs Glyph encoding (already done on the Paint constructor)
     canvas->drawTextOnPathHV(value->getGlyphs(), value->getGlyphsCount() * 2, *path, h_, v_, *paint);
-
-    // Get back old encoding
-    paint->setTextEncoding(oldEncoding);
 }
 
 void TextLayout::computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
diff --git a/core/jni/android/graphics/TextLayout.h b/core/jni/android/graphics/TextLayout.h
index 1dabe32..a0f9402 100644
--- a/core/jni/android/graphics/TextLayout.h
+++ b/core/jni/android/graphics/TextLayout.h
@@ -81,7 +81,7 @@
     static bool needsLayout(const jchar* text, jint len, jint bidiFlags);
 
     static void handleText(SkPaint* paint, const jchar* text, jsize len,
-                           int bidiFlags, jfloat x, jfloat y, SkCanvas* canvas, SkPath* path);
+                           int bidiFlags, jfloat x, jfloat y, SkPath* path);
 
     static void computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
             size_t start, size_t count, size_t contextCount, int dirFlags,
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 44ba68e..1b7623d 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -176,7 +176,6 @@
                         value->getElapsedTime() * 0.000001f,
                         String8(text + start, count).string());
             }
-            value.clear();
         }
     } else {
         // This is a cache hit, just log timestamp and user infos
@@ -424,7 +423,7 @@
                         isRTL = (paraDir == 1);
                         useSingleRun = true;
                     } else if (!U_SUCCESS(status) || rc < 1) {
-                        LOGW("Need to force to single run -- string = '%s',"
+                        ALOGW("Need to force to single run -- string = '%s',"
                                 " status = %d, rc = %d",
                                 String8(chars + start, count).string(), status, int(rc));
                         isRTL = (paraDir == 1);
@@ -439,7 +438,7 @@
                             if (startRun == -1 || lengthRun == -1) {
                                 // Something went wrong when getting the visual run, need to clear
                                 // already computed data before doing a single run pass
-                                LOGW("Visual run is not valid");
+                                ALOGW("Visual run is not valid");
                                 outGlyphs->clear();
                                 outAdvances->clear();
                                 *outTotalAdvance = 0;
@@ -476,13 +475,13 @@
                         }
                     }
                 } else {
-                    LOGW("Cannot set Para");
+                    ALOGW("Cannot set Para");
                     useSingleRun = true;
                     isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL);
                 }
                 ubidi_close(bidi);
             } else {
-                LOGW("Cannot ubidi_open()");
+                ALOGW("Cannot ubidi_open()");
                 useSingleRun = true;
                 isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL);
             }
diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp
index 6a049e0..929df540 100644
--- a/core/jni/android/opengl/util.cpp
+++ b/core/jni/android/opengl/util.cpp
@@ -73,10 +73,10 @@
 static
 void
 print_poly(const char* label, Poly* pPoly) {
-    LOGI("%s: %d verts", label, pPoly->n);
+    ALOGI("%s: %d verts", label, pPoly->n);
     for(int i = 0; i < pPoly->n; i++) {
         Poly_vert* pV = & pPoly->vert[i];
-        LOGI("[%d] %g, %g, %g %g", i, pV->sx, pV->sy, pV->sz, pV->sw);
+        ALOGI("[%d] %g, %g, %g %g", i, pV->sx, pV->sy, pV->sz, pV->sw);
     }
 }
 #endif
@@ -1062,7 +1062,7 @@
         result = AndroidRuntime::registerNativeMethods(env,
                 cri->classPath, cri->methods, cri->methodCount);
         if (result < 0) {
-            LOGE("Failed to register %s: %d", cri->classPath, result);
+            ALOGE("Failed to register %s: %d", cri->classPath, result);
             break;
         }
     }
diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp
index 15bb543..ac4fe5b 100644
--- a/core/jni/android_app_NativeActivity.cpp
+++ b/core/jni/android_app_NativeActivity.cpp
@@ -84,8 +84,8 @@
     
     if (res == sizeof(work)) return;
     
-    if (res < 0) LOGW("Failed writing to work fd: %s", strerror(errno));
-    else LOGW("Truncated writing to work fd: %d", res);
+    if (res < 0) ALOGW("Failed writing to work fd: %s", strerror(errno));
+    else ALOGW("Truncated writing to work fd: %d", res);
 }
 
 static bool read_work(int fd, ActivityWork* outWork) {
@@ -93,8 +93,8 @@
     // no need to worry about EINTR, poll loop will just come back again.
     if (res == sizeof(ActivityWork)) return true;
     
-    if (res < 0) LOGW("Failed reading work fd: %s", strerror(errno));
-    else LOGW("Truncated reading work fd: %d", res);
+    if (res < 0) ALOGW("Failed reading work fd: %s", strerror(errno));
+    else ALOGW("Truncated reading work fd: %d", res);
     return false;
 }
 
@@ -108,7 +108,7 @@
         mWorkWrite(workWrite), mConsumer(channel), mSeq(0) {
     int msgpipe[2];
     if (pipe(msgpipe)) {
-        LOGW("could not create pipe: %s", strerror(errno));
+        ALOGW("could not create pipe: %s", strerror(errno));
         mDispatchKeyRead = mDispatchKeyWrite = -1;
     } else {
         mDispatchKeyRead = msgpipe[0];
@@ -187,7 +187,7 @@
                 }
             }
             if (*outEvent == NULL) {
-                LOGW("getEvent couldn't find inflight for seq %d", finish.seq);
+                ALOGW("getEvent couldn't find inflight for seq %d", finish.seq);
             }
         }
         mLock.unlock();
@@ -203,7 +203,7 @@
     
     int32_t res = mConsumer.receiveDispatchSignal();
     if (res != android::OK) {
-        LOGE("channel '%s' ~ Failed to receive dispatch signal.  status=%d",
+        ALOGE("channel '%s' ~ Failed to receive dispatch signal.  status=%d",
                 mConsumer.getChannel()->getName().string(), res);
         return -1;
     }
@@ -211,7 +211,7 @@
     InputEvent* myEvent = NULL;
     res = mConsumer.consume(this, &myEvent);
     if (res != android::OK) {
-        LOGW("channel '%s' ~ Failed to consume input event.  status=%d",
+        ALOGW("channel '%s' ~ Failed to consume input event.  status=%d",
                 mConsumer.getChannel()->getName().string(), res);
         mConsumer.sendFinishedSignal(false);
         return -1;
@@ -265,7 +265,7 @@
             if (inflight.doFinish) {
                 int32_t res = mConsumer.sendFinishedSignal(handled);
                 if (res != android::OK) {
-                    LOGW("Failed to send finished signal on channel '%s'.  status=%d",
+                    ALOGW("Failed to send finished signal on channel '%s'.  status=%d",
                             mConsumer.getChannel()->getName().string(), res);
                 }
             }
@@ -281,7 +281,7 @@
     }
     mLock.unlock();
     
-    LOGW("finishEvent called for unknown event: %p", event);
+    ALOGW("finishEvent called for unknown event: %p", event);
 }
 
 void AInputQueue::dispatchEvent(android::KeyEvent* event) {
@@ -398,7 +398,7 @@
         }
     }
 
-    LOGW("preDispatchKey called for unknown event: %p", keyEvent);
+    ALOGW("preDispatchKey called for unknown event: %p", keyEvent);
     return false;
 }
 
@@ -412,8 +412,8 @@
 
     if (res == sizeof(dummy)) return;
 
-    if (res < 0) LOGW("Failed writing to dispatch fd: %s", strerror(errno));
-    else LOGW("Truncated writing to dispatch fd: %d", res);
+    if (res < 0) ALOGW("Failed writing to dispatch fd: %s", strerror(errno));
+    else ALOGW("Truncated writing to dispatch fd: %d", res);
 }
 
 namespace android {
@@ -548,7 +548,7 @@
 
 static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
    if (env->ExceptionCheck()) {
-       LOGE("An exception was thrown by callback '%s'.", methodName);
+       ALOGE("An exception was thrown by callback '%s'.", methodName);
        LOGE_EX(env);
        env->ExceptionClear();
        return true;
@@ -585,7 +585,7 @@
                     checkAndClearExceptionFromCallback(code->env, "dispatchUnhandledKeyEvent");
                     code->env->DeleteLocalRef(inputEventObj);
                 } else {
-                    LOGE("Failed to obtain key event for dispatchUnhandledKeyEvent.");
+                    ALOGE("Failed to obtain key event for dispatchUnhandledKeyEvent.");
                     handled = false;
                 }
                 code->nativeInputQueue->finishEvent(keyEvent, handled, true);
@@ -600,7 +600,7 @@
                     checkAndClearExceptionFromCallback(code->env, "preDispatchKeyEvent");
                     code->env->DeleteLocalRef(inputEventObj);
                 } else {
-                    LOGE("Failed to obtain key event for preDispatchKeyEvent.");
+                    ALOGE("Failed to obtain key event for preDispatchKeyEvent.");
                 }
             }
         } break;
@@ -629,7 +629,7 @@
             checkAndClearExceptionFromCallback(code->env, "hideIme");
         } break;
         default:
-            LOGW("Unknown work command: %d", work.cmd);
+            ALOGW("Unknown work command: %d", work.cmd);
             break;
     }
     
@@ -660,21 +660,21 @@
         env->ReleaseStringUTFChars(funcName, funcStr);
         
         if (code->createActivityFunc == NULL) {
-            LOGW("ANativeActivity_onCreate not found");
+            ALOGW("ANativeActivity_onCreate not found");
             delete code;
             return 0;
         }
         
         code->looper = android_os_MessageQueue_getLooper(env, messageQueue);
         if (code->looper == NULL) {
-            LOGW("Unable to retrieve MessageQueue's Looper");
+            ALOGW("Unable to retrieve MessageQueue's Looper");
             delete code;
             return 0;
         }
         
         int msgpipe[2];
         if (pipe(msgpipe)) {
-            LOGW("could not create pipe: %s", strerror(errno));
+            ALOGW("could not create pipe: %s", strerror(errno));
             delete code;
             return 0;
         }
@@ -690,7 +690,7 @@
         
         code->ANativeActivity::callbacks = &code->callbacks;
         if (env->GetJavaVM(&code->vm) < 0) {
-            LOGW("NativeActivity GetJavaVM failed");
+            ALOGW("NativeActivity GetJavaVM failed");
             delete code;
             return 0;
         }
diff --git a/core/jni/android_app_backup_FullBackup.cpp b/core/jni/android_app_backup_FullBackup.cpp
index 6ef62a9..066a23e 100644
--- a/core/jni/android_app_backup_FullBackup.cpp
+++ b/core/jni/android_app_backup_FullBackup.cpp
@@ -97,12 +97,12 @@
 
     // Validate
     if (!writer) {
-        LOGE("No output stream provided [%s]", path.string());
+        ALOGE("No output stream provided [%s]", path.string());
         return -1;
     }
 
     if (path.length() < rootpath.length()) {
-        LOGE("file path [%s] shorter than root path [%s]",
+        ALOGE("file path [%s] shorter than root path [%s]",
                 path.string(), rootpath.string());
         return -1;
     }
diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp
index 1f188ff..3e36677 100644
--- a/core/jni/android_backup_BackupHelperDispatcher.cpp
+++ b/core/jni/android_backup_BackupHelperDispatcher.cpp
@@ -58,7 +58,7 @@
     int remainingHeader = flattenedHeader.headerSize - sizeof(flattenedHeader.headerSize);
 
     if (flattenedHeader.headerSize < (int)sizeof(chunk_header_v1)) {
-        LOGW("Skipping unknown header: %d bytes", flattenedHeader.headerSize);
+        ALOGW("Skipping unknown header: %d bytes", flattenedHeader.headerSize);
         if (remainingHeader > 0) {
             lseek(fd, remainingHeader, SEEK_CUR);
             // >0 means skip this chunk
@@ -69,13 +69,13 @@
     amt = read(fd, &flattenedHeader.version,
             sizeof(chunk_header_v1)-sizeof(flattenedHeader.headerSize));
     if (amt <= 0) {
-        LOGW("Failed reading chunk header");
+        ALOGW("Failed reading chunk header");
         return -1;
     }
     remainingHeader -= sizeof(chunk_header_v1)-sizeof(flattenedHeader.headerSize);
 
     if (flattenedHeader.version != VERSION_1_HEADER) {
-        LOGW("Skipping unknown header version: 0x%08x, %d bytes", flattenedHeader.version,
+        ALOGW("Skipping unknown header version: 0x%08x, %d bytes", flattenedHeader.version,
                 flattenedHeader.headerSize);
         if (remainingHeader > 0) {
             lseek(fd, remainingHeader, SEEK_CUR);
@@ -94,14 +94,14 @@
 
     if (flattenedHeader.dataSize < 0 || flattenedHeader.nameLength < 0 ||
             remainingHeader < flattenedHeader.nameLength) {
-        LOGW("Malformed V1 header remainingHeader=%d dataSize=%d nameLength=%d", remainingHeader,
+        ALOGW("Malformed V1 header remainingHeader=%d dataSize=%d nameLength=%d", remainingHeader,
                 flattenedHeader.dataSize, flattenedHeader.nameLength);
         return -1;
     }
 
     buf = keyPrefix.lockBuffer(flattenedHeader.nameLength);
     if (buf == NULL) {
-        LOGW("unable to allocate %d bytes", flattenedHeader.nameLength);
+        ALOGW("unable to allocate %d bytes", flattenedHeader.nameLength);
         return -1;
     }
 
diff --git a/core/jni/android_bluetooth_BluetoothAudioGateway.cpp b/core/jni/android_bluetooth_BluetoothAudioGateway.cpp
index 5aef2ad..3b8fb79 100755
--- a/core/jni/android_bluetooth_BluetoothAudioGateway.cpp
+++ b/core/jni/android_bluetooth_BluetoothAudioGateway.cpp
@@ -127,7 +127,7 @@
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = (native_data_t *)calloc(1, sizeof(native_data_t));
     if (NULL == nat) {
-        LOGE("%s: out of memory!", __FUNCTION__);
+        ALOGE("%s: out of memory!", __FUNCTION__);
         return;
     }
 
@@ -166,7 +166,7 @@
 static int set_nb(int sk, bool nb) {
     int flags = fcntl(sk, F_GETFL);
     if (flags < 0) {
-        LOGE("Can't get socket flags with fcntl(): %s (%d)",
+        ALOGE("Can't get socket flags with fcntl(): %s (%d)",
              strerror(errno), errno);
         close(sk);
         return -1;
@@ -175,7 +175,7 @@
     if (nb) flags |= O_NONBLOCK;
     int status = fcntl(sk, F_SETFL, flags);
     if (status < 0) {
-        LOGE("Can't set socket to nonblocking mode with fcntl(): %s (%d)",
+        ALOGE("Can't set socket to nonblocking mode with fcntl(): %s (%d)",
              strerror(errno), errno);
         close(sk);
         return -1;
@@ -198,7 +198,7 @@
     int alen = sizeof(raddr);
     int nsk = accept(ag_fd, (struct sockaddr *) &raddr, &alen);
     if (nsk < 0) {
-        LOGE("Error on accept from socket fd %d: %s (%d).",
+        ALOGE("Error on accept from socket fd %d: %s (%d).",
              ag_fd,
              strerror(errno),
              errno);
@@ -215,7 +215,7 @@
     get_bdaddr_as_string(&raddr.rc_bdaddr, addr);
     env->SetObjectField(object, out_address, env->NewStringUTF(addr));
 
-    LOGI("Successful accept() on AG socket %d: new socket %d, address %s, RFCOMM channel %d",
+    ALOGI("Successful accept() on AG socket %d: new socket %d, address %s, RFCOMM channel %d",
          ag_fd,
          nsk,
          addr,
@@ -240,11 +240,11 @@
                          out_fd, out_address, out_channel);
     }
     else {
-        LOGI("fd = %d, FD_ISSET() = %d",
+        ALOGI("fd = %d, FD_ISSET() = %d",
              ag_fd,
              FD_ISSET(ag_fd, &rset));
         if (ag_fd >= 0 && !FD_ISSET(ag_fd, &rset)) {
-            LOGE("WTF???");
+            ALOGE("WTF???");
             return -1;
         }
     }
@@ -265,32 +265,32 @@
     native_data_t *nat = get_native_data(env, object);
 #if USE_ACCEPT_DIRECTLY
     if (nat->hf_ag_rfcomm_channel > 0) {
-        LOGI("Setting HF AG server socket to RFCOMM port %d!",
+        ALOGI("Setting HF AG server socket to RFCOMM port %d!",
              nat->hf_ag_rfcomm_channel);
         struct timeval tv;
         int len = sizeof(tv);
         if (getsockopt(nat->hf_ag_rfcomm_channel,
                        SOL_SOCKET, SO_RCVTIMEO, &tv, &len) < 0) {
-            LOGE("getsockopt(%d, SOL_SOCKET, SO_RCVTIMEO): %s (%d)",
+            ALOGE("getsockopt(%d, SOL_SOCKET, SO_RCVTIMEO): %s (%d)",
                  nat->hf_ag_rfcomm_channel,
                  strerror(errno),
                  errno);
             return JNI_FALSE;
         }
-        LOGI("Current HF AG server socket RCVTIMEO is (%d(s), %d(us))!",
+        ALOGI("Current HF AG server socket RCVTIMEO is (%d(s), %d(us))!",
              (int)tv.tv_sec, (int)tv.tv_usec);
         if (timeout_ms >= 0) {
             tv.tv_sec = timeout_ms / 1000;
             tv.tv_usec = 1000 * (timeout_ms % 1000);
             if (setsockopt(nat->hf_ag_rfcomm_channel,
                            SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
-                LOGE("setsockopt(%d, SOL_SOCKET, SO_RCVTIMEO): %s (%d)",
+                ALOGE("setsockopt(%d, SOL_SOCKET, SO_RCVTIMEO): %s (%d)",
                      nat->hf_ag_rfcomm_channel,
                      strerror(errno),
                      errno);
                 return JNI_FALSE;
             }
-            LOGI("Changed HF AG server socket RCVTIMEO to (%d(s), %d(us))!",
+            ALOGI("Changed HF AG server socket RCVTIMEO to (%d(s), %d(us))!",
                  (int)tv.tv_sec, (int)tv.tv_usec);
         }
 
@@ -310,19 +310,19 @@
     FD_ZERO(&rset);
     int cnt = 0;
     if (nat->hf_ag_rfcomm_channel > 0) {
-        LOGI("Setting HF AG server socket to RFCOMM port %d!",
+        ALOGI("Setting HF AG server socket to RFCOMM port %d!",
              nat->hf_ag_rfcomm_channel);
         cnt++;
         FD_SET(nat->hf_ag_rfcomm_sock, &rset);
     }
     if (nat->hs_ag_rfcomm_channel > 0) {
-        LOGI("Setting HS AG server socket to RFCOMM port %d!",
+        ALOGI("Setting HS AG server socket to RFCOMM port %d!",
              nat->hs_ag_rfcomm_channel);
         cnt++;
         FD_SET(nat->hs_ag_rfcomm_sock, &rset);
     }
     if (cnt == 0) {
-        LOGE("Neither HF nor HS listening sockets are open!");
+        ALOGE("Neither HF nor HS listening sockets are open!");
         return JNI_FALSE;
     }
 
@@ -339,16 +339,16 @@
                    (timeout_ms < 0 ? NULL : &to));
     if (timeout_ms > 0) {
         jint remaining = to.tv_sec*1000 + to.tv_usec/1000;
-        LOGI("Remaining time %ldms", (long)remaining);
+        ALOGI("Remaining time %ldms", (long)remaining);
         env->SetIntField(object, field_mTimeoutRemainingMs,
                          remaining);
     }
 
-    LOGI("listening select() returned %d", n);
+    ALOGI("listening select() returned %d", n);
 
     if (n <= 0) {
         if (n < 0)  {
-            LOGE("listening select() on RFCOMM sockets: %s (%d)",
+            ALOGE("listening select() on RFCOMM sockets: %s (%d)",
                  strerror(errno),
                  errno);
         }
@@ -372,7 +372,7 @@
     struct pollfd fds[2];
     int cnt = 0;
     if (nat->hf_ag_rfcomm_channel > 0) {
-//        LOGI("Setting HF AG server socket %d to RFCOMM port %d!",
+//        ALOGI("Setting HF AG server socket %d to RFCOMM port %d!",
 //             nat->hf_ag_rfcomm_sock,
 //             nat->hf_ag_rfcomm_channel);
         fds[cnt].fd = nat->hf_ag_rfcomm_sock;
@@ -380,7 +380,7 @@
         cnt++;
     }
     if (nat->hs_ag_rfcomm_channel > 0) {
-//        LOGI("Setting HS AG server socket %d to RFCOMM port %d!",
+//        ALOGI("Setting HS AG server socket %d to RFCOMM port %d!",
 //             nat->hs_ag_rfcomm_sock,
 //             nat->hs_ag_rfcomm_channel);
         fds[cnt].fd = nat->hs_ag_rfcomm_sock;
@@ -388,30 +388,30 @@
         cnt++;
     }
     if (cnt == 0) {
-        LOGE("Neither HF nor HS listening sockets are open!");
+        ALOGE("Neither HF nor HS listening sockets are open!");
         return JNI_FALSE;
     }
     n = poll(fds, cnt, timeout_ms);
     if (n <= 0) {
         if (n < 0)  {
-            LOGE("listening poll() on RFCOMM sockets: %s (%d)",
+            ALOGE("listening poll() on RFCOMM sockets: %s (%d)",
                  strerror(errno),
                  errno);
         }
         else {
             env->SetIntField(object, field_mTimeoutRemainingMs, 0);
-//            LOGI("listening poll() on RFCOMM socket timed out");
+//            ALOGI("listening poll() on RFCOMM socket timed out");
         }
         return JNI_FALSE;
     }
 
-    //LOGI("listening poll() on RFCOMM socket returned %d", n);
+    //ALOGI("listening poll() on RFCOMM socket returned %d", n);
     int err = 0;
     for (cnt = 0; cnt < (int)(sizeof(fds)/sizeof(fds[0])); cnt++) {
-        //LOGI("Poll on fd %d revent = %d.", fds[cnt].fd, fds[cnt].revents);
+        //ALOGI("Poll on fd %d revent = %d.", fds[cnt].fd, fds[cnt].revents);
         if (fds[cnt].fd == nat->hf_ag_rfcomm_sock) {
             if (fds[cnt].revents & (POLLIN | POLLPRI | POLLOUT)) {
-                LOGI("Accepting HF connection.\n");
+                ALOGI("Accepting HF connection.\n");
                 err += do_accept(env, object, fds[cnt].fd,
                                field_mConnectingHandsfreeSocketFd,
                                field_mConnectingHandsfreeAddress,
@@ -421,7 +421,7 @@
         }
         else if (fds[cnt].fd == nat->hs_ag_rfcomm_sock) {
             if (fds[cnt].revents & (POLLIN | POLLPRI | POLLOUT)) {
-                LOGI("Accepting HS connection.\n");
+                ALOGI("Accepting HS connection.\n");
                 err += do_accept(env, object, fds[cnt].fd,
                                field_mConnectingHeadsetSocketFd,
                                field_mConnectingHeadsetAddress,
@@ -432,7 +432,7 @@
     } /* for */
 
     if (n != 0) {
-        LOGI("Bogus poll(): %d fake pollfd entrie(s)!", n);
+        ALOGI("Bogus poll(): %d fake pollfd entrie(s)!", n);
         return JNI_FALSE;
     }
 
@@ -475,7 +475,7 @@
 
     sk = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
     if (sk < 0) {
-        LOGE("Can't create RFCOMM socket");
+        ALOGE("Can't create RFCOMM socket");
         return -1;
     }
 
@@ -486,7 +486,7 @@
     }
 
     if (lm && setsockopt(sk, SOL_RFCOMM, RFCOMM_LM, &lm, sizeof(lm)) < 0) {
-        LOGE("Can't set RFCOMM link mode");
+        ALOGE("Can't set RFCOMM link mode");
         close(sk);
         return -1;
     }
@@ -497,7 +497,7 @@
     laddr.rc_channel = channel;
 
     if (bind(sk, (struct sockaddr *)&laddr, sizeof(laddr)) < 0) {
-        LOGE("Can't bind RFCOMM socket");
+        ALOGE("Can't bind RFCOMM socket");
         close(sk);
         return -1;
     }
@@ -517,14 +517,14 @@
 
     if (nat->hf_ag_rfcomm_sock > 0) {
         if (close(nat->hf_ag_rfcomm_sock) < 0) {
-            LOGE("Could not close HF server socket: %s (%d)\n",
+            ALOGE("Could not close HF server socket: %s (%d)\n",
                  strerror(errno), errno);
         }
         nat->hf_ag_rfcomm_sock = -1;
     }
     if (nat->hs_ag_rfcomm_sock > 0) {
         if (close(nat->hs_ag_rfcomm_sock) < 0) {
-            LOGE("Could not close HS server socket: %s (%d)\n",
+            ALOGE("Could not close HS server socket: %s (%d)\n",
                  strerror(errno), errno);
         }
         nat->hs_ag_rfcomm_sock = -1;
diff --git a/core/jni/android_bluetooth_HeadsetBase.cpp b/core/jni/android_bluetooth_HeadsetBase.cpp
index 71697a7..a982182 100644
--- a/core/jni/android_bluetooth_HeadsetBase.cpp
+++ b/core/jni/android_bluetooth_HeadsetBase.cpp
@@ -69,12 +69,12 @@
     errno = 0;
     ret = write(fd, line, len);
     if (ret < 0) {
-        LOGE("%s: write() failed: %s (%d)", __FUNCTION__, strerror(errno),
+        ALOGE("%s: write() failed: %s (%d)", __FUNCTION__, strerror(errno),
              errno);
         return -1;
     }
     if (ret != len) {
-        LOGE("%s: write() only wrote %d of %d bytes", __FUNCTION__, ret, len);
+        ALOGE("%s: write() only wrote %d of %d bytes", __FUNCTION__, ret, len);
         return -1;
     }
     return 0;
@@ -117,7 +117,7 @@
     *err = errno = 0;
     int ret = poll(&pfd, 1, timeout_ms);
     if (ret < 0) {
-        LOGE("poll() error\n");
+        ALOGE("poll() error\n");
         *err = errno;
         return NULL;
     }
@@ -126,7 +126,7 @@
     }
 
     if (pfd.revents & (POLLHUP | POLLERR | POLLNVAL)) {
-        LOGW("RFCOMM poll() returned  success (%d), "
+        ALOGW("RFCOMM poll() returned  success (%d), "
              "but with an unexpected revents bitmask: %#x\n", ret, pfd.revents);
         errno = EIO;
         *err = errno;
@@ -143,12 +143,12 @@
 
         if (rc < 0) {
             if (errno == EBUSY) {
-                LOGI("read() error %s (%d): repeating read()...",
+                ALOGI("read() error %s (%d): repeating read()...",
                      strerror(errno), errno);
                 goto again;
             }
             *err = errno;
-            LOGE("read() error %s (%d)", strerror(errno), errno);
+            ALOGE("read() error %s (%d)", strerror(errno), errno);
             return NULL;
         }
 
@@ -195,7 +195,7 @@
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = (native_data_t *)calloc(1, sizeof(native_data_t));
     if (NULL == nat) {
-        LOGE("%s: out of memory!", __FUNCTION__);
+        ALOGE("%s: out of memory!", __FUNCTION__);
         return;
     }
 
@@ -208,7 +208,7 @@
     nat->rfcomm_sock = socketFd;
     nat->rfcomm_connected = socketFd >= 0;
     if (nat->rfcomm_connected)
-        LOGI("%s: ALREADY CONNECTED!", __FUNCTION__);
+        ALOGI("%s: ALREADY CONNECTED!", __FUNCTION__);
 #endif
 }
 
@@ -235,7 +235,7 @@
     nat->rfcomm_sock = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
 
     if (nat->rfcomm_sock < 0) {
-        LOGE("%s: Could not create RFCOMM socket: %s\n", __FUNCTION__,
+        ALOGE("%s: Could not create RFCOMM socket: %s\n", __FUNCTION__,
              strerror(errno));
         return JNI_FALSE;
     }
@@ -248,7 +248,7 @@
 
     if (lm && setsockopt(nat->rfcomm_sock, SOL_RFCOMM, RFCOMM_LM, &lm,
                 sizeof(lm)) < 0) {
-        LOGE("%s: Can't set RFCOMM link mode", __FUNCTION__);
+        ALOGE("%s: Can't set RFCOMM link mode", __FUNCTION__);
         close(nat->rfcomm_sock);
         return JNI_FALSE;
     }
@@ -262,7 +262,7 @@
         if (connect(nat->rfcomm_sock, (struct sockaddr *)&addr,
                       sizeof(addr)) < 0) {
             if (errno == EINTR) continue;
-            LOGE("%s: connect() failed: %s\n", __FUNCTION__, strerror(errno));
+            ALOGE("%s: connect() failed: %s\n", __FUNCTION__, strerror(errno));
             close(nat->rfcomm_sock);
             nat->rfcomm_sock = -1;
             return JNI_FALSE;
@@ -293,7 +293,7 @@
 
         nat->rfcomm_sock = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
         if (nat->rfcomm_sock < 0) {
-            LOGE("%s: Could not create RFCOMM socket: %s\n", __FUNCTION__,
+            ALOGE("%s: Could not create RFCOMM socket: %s\n", __FUNCTION__,
                  strerror(errno));
             return -1;
         }
@@ -306,11 +306,11 @@
 
         if (lm && setsockopt(nat->rfcomm_sock, SOL_RFCOMM, RFCOMM_LM, &lm,
                     sizeof(lm)) < 0) {
-            LOGE("%s: Can't set RFCOMM link mode", __FUNCTION__);
+            ALOGE("%s: Can't set RFCOMM link mode", __FUNCTION__);
             close(nat->rfcomm_sock);
             return -1;
         }
-        LOGI("Created RFCOMM socket fd %d.", nat->rfcomm_sock);
+        ALOGI("Created RFCOMM socket fd %d.", nat->rfcomm_sock);
     }
 
     memset(&addr, 0, sizeof(struct sockaddr_rc));
@@ -330,20 +330,20 @@
 
             if (rc >= 0) {
                 nat->rfcomm_connected = 1;
-                LOGI("async connect successful");
+                ALOGI("async connect successful");
                 return 0;
             }
             else if (rc < 0) {
                 if (errno == EINPROGRESS || errno == EAGAIN)
                 {
-                    LOGI("async connect is in progress (%s)",
+                    ALOGI("async connect is in progress (%s)",
                          strerror(errno));
                     nat->rfcomm_connected = -1;
                     return 0;
                 }
                 else
                 {
-                    LOGE("async connect error: %s (%d)", strerror(errno), errno);
+                    ALOGE("async connect error: %s (%d)", strerror(errno), errno);
                     close(nat->rfcomm_sock);
                     nat->rfcomm_sock = -1;
                     return -errno;
@@ -365,19 +365,19 @@
     env->SetIntField(obj, field_mTimeoutRemainingMs, timeout_ms);
 
     if (nat->rfcomm_connected > 0) {
-        LOGI("RFCOMM is already connected!");
+        ALOGI("RFCOMM is already connected!");
         return 1;
     }
 
     if (nat->rfcomm_sock >= 0 && nat->rfcomm_connected == 0) {
-        LOGI("Re-opening RFCOMM socket.");
+        ALOGI("Re-opening RFCOMM socket.");
         close(nat->rfcomm_sock);
         nat->rfcomm_sock = -1;
     }
     int ret = connectAsyncNative(env, obj);
 
     if (ret < 0) {
-        LOGI("Failed to re-open RFCOMM socket!");
+        ALOGI("Failed to re-open RFCOMM socket!");
         return ret;
     }
 
@@ -410,7 +410,7 @@
 
         if (n <= 0) {
             if (n < 0)  {
-                LOGE("select() on RFCOMM socket: %s (%d)",
+                ALOGE("select() on RFCOMM socket: %s (%d)",
                      strerror(errno),
                      errno);
                 return -errno;
@@ -433,7 +433,7 @@
                    respond... but one can't be paranoid enough.
                 */
                 if (nr >= 0 || errno != EAGAIN) {
-                    LOGE("RFCOMM async connect() error: %s (%d), nr = %d\n",
+                    ALOGE("RFCOMM async connect() error: %s (%d), nr = %d\n",
                          strerror(errno),
                          errno,
                          nr);
@@ -451,12 +451,12 @@
             }
             /* Restore the blocking properties of the socket. */
             fcntl(nat->rfcomm_sock, F_SETFL, nat->rfcomm_sock_flags);
-            LOGI("Successful RFCOMM socket connect.");
+            ALOGI("Successful RFCOMM socket connect.");
             nat->rfcomm_connected = 1;
             return 1;
         }
     }
-    else LOGE("RFCOMM socket file descriptor %d is bad!",
+    else ALOGE("RFCOMM socket file descriptor %d is bad!",
               nat->rfcomm_sock);
 #endif
     return -1;
diff --git a/core/jni/android_bluetooth_common.cpp b/core/jni/android_bluetooth_common.cpp
index c8dc9c2..5cdaa6c 100644
--- a/core/jni/android_bluetooth_common.cpp
+++ b/core/jni/android_bluetooth_common.cpp
@@ -101,7 +101,7 @@
                    const char *mtype) {
     jfieldID field = env->GetFieldID(clazz, member, mtype);
     if (field == NULL) {
-        LOGE("Can't find member %s", member);
+        ALOGE("Can't find member %s", member);
     }
     return field;
 }
@@ -158,13 +158,13 @@
     msg = dbus_message_new_method_call(BLUEZ_DBUS_BASE_IFC, path, ifc, func);
 
     if (msg == NULL) {
-        LOGE("Could not allocate D-Bus message object!");
+        ALOGE("Could not allocate D-Bus message object!");
         goto done;
     }
 
     /* append arguments */
     if (!dbus_message_append_args_valist(msg, first_arg_type, args)) {
-        LOGE("Could not append argument to method call!");
+        ALOGE("Could not append argument to method call!");
         goto done;
     }
 
@@ -219,7 +219,7 @@
     return ret;
 }
 
-// If err is NULL, then any errors will be LOGE'd, and free'd and the reply
+// If err is NULL, then any errors will be ALOGE'd, and free'd and the reply
 // will be NULL.
 // If err is not NULL, then it is assumed that dbus_error_init was already
 // called, and error's will be returned to the caller without logging. The
@@ -248,13 +248,13 @@
     msg = dbus_message_new_method_call(BLUEZ_DBUS_BASE_IFC, path, ifc, func);
 
     if (msg == NULL) {
-        LOGE("Could not allocate D-Bus message object!");
+        ALOGE("Could not allocate D-Bus message object!");
         goto done;
     }
 
     /* append arguments */
     if (!dbus_message_append_args_valist(msg, first_arg_type, args)) {
-        LOGE("Could not append argument to method call!");
+        ALOGE("Could not append argument to method call!");
         goto done;
     }
 
@@ -587,7 +587,7 @@
     dbus_message_iter_recurse(&iter, &prop_val);
     type = properties[*prop_index].type;
     if (dbus_message_iter_get_arg_type(&prop_val) != type) {
-        LOGE("Property type mismatch in get_property: %d, expected:%d, index:%d",
+        ALOGE("Property type mismatch in get_property: %d, expected:%d, index:%d",
              dbus_message_iter_get_arg_type(&prop_val), type, *prop_index);
         return -1;
     }
diff --git a/core/jni/android_bluetooth_common.h b/core/jni/android_bluetooth_common.h
index 1f4da3a..daf4bb2 100644
--- a/core/jni/android_bluetooth_common.h
+++ b/core/jni/android_bluetooth_common.h
@@ -56,14 +56,14 @@
                    const char *member,
                    const char *mtype);
 
-// LOGE and free a D-Bus error
+// ALOGE and free a D-Bus error
 // Using #define so that __FUNCTION__ resolves usefully
 #define LOG_AND_FREE_DBUS_ERROR_WITH_MSG(err, msg) \
-    {   LOGE("%s: D-Bus error in %s: %s (%s)", __FUNCTION__, \
+    {   ALOGE("%s: D-Bus error in %s: %s (%s)", __FUNCTION__, \
         dbus_message_get_member((msg)), (err)->name, (err)->message); \
          dbus_error_free((err)); }
 #define LOG_AND_FREE_DBUS_ERROR(err) \
-    {   LOGE("%s: D-Bus error: %s (%s)", __FUNCTION__, \
+    {   ALOGE("%s: D-Bus error: %s (%s)", __FUNCTION__, \
         (err)->name, (err)->message); \
         dbus_error_free((err)); }
 
diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp
index 9a87a10..f927064 100644
--- a/core/jni/android_database_CursorWindow.cpp
+++ b/core/jni/android_database_CursorWindow.cpp
@@ -71,7 +71,7 @@
     CursorWindow* window;
     status_t status = CursorWindow::create(name, cursorWindowSize, &window);
     if (status || !window) {
-        LOGE("Could not allocate CursorWindow '%s' of size %d due to error %d.",
+        ALOGE("Could not allocate CursorWindow '%s' of size %d due to error %d.",
                 name.string(), cursorWindowSize, status);
         return 0;
     }
@@ -86,7 +86,7 @@
     CursorWindow* window;
     status_t status = CursorWindow::createFromParcel(parcel, &window);
     if (status || !window) {
-        LOGE("Could not create CursorWindow from Parcel due to error %d.", status);
+        ALOGE("Could not create CursorWindow from Parcel due to error %d.", status);
         return 0;
     }
 
diff --git a/core/jni/android_database_SQLiteCompiledSql.cpp b/core/jni/android_database_SQLiteCompiledSql.cpp
index a916ef5..857267a 100644
--- a/core/jni/android_database_SQLiteCompiledSql.cpp
+++ b/core/jni/android_database_SQLiteCompiledSql.cpp
@@ -104,7 +104,7 @@
 
     clazz = env->FindClass("android/database/sqlite/SQLiteCompiledSql");
     if (clazz == NULL) {
-        LOGE("Can't find android/database/sqlite/SQLiteCompiledSql");
+        ALOGE("Can't find android/database/sqlite/SQLiteCompiledSql");
         return -1;
     }
 
@@ -112,7 +112,7 @@
     gStatementField = env->GetFieldID(clazz, "nStatement", "I");
 
     if (gHandleField == NULL || gStatementField == NULL) {
-        LOGE("Error locating fields");
+        ALOGE("Error locating fields");
         return -1;
     }
 
diff --git a/core/jni/android_database_SQLiteDatabase.cpp b/core/jni/android_database_SQLiteDatabase.cpp
index 2966a71..28c421d 100644
--- a/core/jni/android_database_SQLiteDatabase.cpp
+++ b/core/jni/android_database_SQLiteDatabase.cpp
@@ -79,7 +79,7 @@
     // skip printing this message if it is due to certain types of errors
     if (iErrCode == 0 || iErrCode == SQLITE_CONSTRAINT) return;
     // print databasename, errorcode and msg
-    LOGI("sqlite returned: error code = %d, msg = %s, db=%s\n", iErrCode, zMsg, databaseName);
+    ALOGI("sqlite returned: error code = %d, msg = %s, db=%s\n", iErrCode, zMsg, databaseName);
 }
 
 // register the logging func on sqlite. needs to be done BEFORE any sqlite3 func is called.
@@ -92,7 +92,7 @@
     ALOGV("Registering sqlite logging func \n");
     int err = sqlite3_config(SQLITE_CONFIG_LOG, &sqlLogger, (void *)createStr(path, 0));
     if (err != SQLITE_OK) {
-        LOGW("sqlite returned error = %d when trying to register logging func.\n", err);
+        ALOGW("sqlite returned error = %d when trying to register logging func.\n", err);
         return;
     }
     loggingFuncSet = true;
@@ -121,7 +121,7 @@
 
     err = sqlite3_open_v2(path8, &handle, sqliteFlags, NULL);
     if (err != SQLITE_OK) {
-        LOGE("sqlite3_open_v2(\"%s\", &handle, %d, NULL) failed\n", path8, sqliteFlags);
+        ALOGE("sqlite3_open_v2(\"%s\", &handle, %d, NULL) failed\n", path8, sqliteFlags);
         throw_sqlite3_exception(env, handle);
         goto done;
     }
@@ -134,7 +134,7 @@
     // Set the default busy handler to retry for 1000ms and then return SQLITE_BUSY
     err = sqlite3_busy_timeout(handle, 1000 /* ms */);
     if (err != SQLITE_OK) {
-        LOGE("sqlite3_busy_timeout(handle, 1000) failed for \"%s\"\n", path8);
+        ALOGE("sqlite3_busy_timeout(handle, 1000) failed for \"%s\"\n", path8);
         throw_sqlite3_exception(env, handle);
         goto done;
     }
@@ -143,7 +143,7 @@
     static const char* integritySql = "pragma integrity_check(1);";
     err = sqlite3_prepare_v2(handle, integritySql, -1, &statement, NULL);
     if (err != SQLITE_OK) {
-        LOGE("sqlite_prepare_v2(handle, \"%s\") failed for \"%s\"\n", integritySql, path8);
+        ALOGE("sqlite_prepare_v2(handle, \"%s\") failed for \"%s\"\n", integritySql, path8);
         throw_sqlite3_exception(env, handle);
         goto done;
     }
@@ -151,13 +151,13 @@
     // first is OK or error message
     err = sqlite3_step(statement);
     if (err != SQLITE_ROW) {
-        LOGE("integrity check failed for \"%s\"\n", integritySql, path8);
+        ALOGE("integrity check failed for \"%s\"\n", integritySql, path8);
         throw_sqlite3_exception(env, handle);
         goto done;
     } else {
         const char *text = (const char*)sqlite3_column_text(statement, 0);
         if (strcmp(text, "ok") != 0) {
-            LOGE("integrity check failed for \"%s\": %s\n", integritySql, path8, text);
+            ALOGE("integrity check failed for \"%s\": %s\n", integritySql, path8, text);
             jniThrowException(env, "android/database/sqlite/SQLiteDatabaseCorruptException", text);
             goto done;
         }
@@ -184,7 +184,7 @@
 static char *getDatabaseName(JNIEnv* env, sqlite3 * handle, jstring databaseName, short connNum) {
     char const *path = env->GetStringUTFChars(databaseName, NULL);
     if (path == NULL) {
-        LOGE("Failure in getDatabaseName(). VM ran out of memory?\n");
+        ALOGE("Failure in getDatabaseName(). VM ran out of memory?\n");
         return NULL; // VM would have thrown OutOfMemoryError
     }
     char *dbNameStr = createStr(path, 4);
@@ -197,7 +197,7 @@
 }
 
 static void sqlTrace(void *databaseName, const char *sql) {
-    LOGI("sql_statement|%s|%s\n", (char *)databaseName, sql);
+    ALOGI("sql_statement|%s|%s\n", (char *)databaseName, sql);
 }
 
 /* public native void enableSqlTracing(); */
@@ -209,7 +209,7 @@
 
 static void sqlProfile(void *databaseName, const char *sql, sqlite3_uint64 tm) {
     double d = tm/1000000.0;
-    LOGI("elapsedTime4Sql|%s|%.3f ms|%s\n", (char *)databaseName, d, sql);
+    ALOGI("elapsedTime4Sql|%s|%.3f ms|%s\n", (char *)databaseName, d, sql);
 }
 
 /* public native void enableSqlProfiling(); */
@@ -244,7 +244,7 @@
         } else {
             // This can happen if sub-objects aren't closed first.  Make sure the caller knows.
             throw_sqlite3_exception(env, handle);
-            LOGE("sqlite3_close(%p) failed: %d\n", handle, result);
+            ALOGE("sqlite3_close(%p) failed: %d\n", handle, result);
         }
     }
 }
@@ -277,7 +277,7 @@
         static const char *createSql ="CREATE TABLE IF NOT EXISTS " ANDROID_TABLE " (locale TEXT)";
         err = sqlite3_exec(handle, createSql, NULL, NULL, NULL);
         if (err != SQLITE_OK) {
-            LOGE("CREATE TABLE " ANDROID_TABLE " failed\n");
+            ALOGE("CREATE TABLE " ANDROID_TABLE " failed\n");
             throw_sqlite3_exception(env, handle);
             goto done;
         }
@@ -287,7 +287,7 @@
     static const char *selectSql = "SELECT locale FROM " ANDROID_TABLE " LIMIT 1";
     err = sqlite3_get_table(handle, selectSql, &meta, &rowCount, &colCount, NULL);
     if (err != SQLITE_OK) {
-        LOGE("SELECT locale FROM " ANDROID_TABLE " failed\n");
+        ALOGE("SELECT locale FROM " ANDROID_TABLE " failed\n");
         throw_sqlite3_exception(env, handle);
         goto done;
     }
@@ -312,21 +312,21 @@
     // need to update android_metadata and indexes atomically, so use a transaction...
     err = sqlite3_exec(handle, "BEGIN TRANSACTION", NULL, NULL, NULL);
     if (err != SQLITE_OK) {
-        LOGE("BEGIN TRANSACTION failed setting locale\n");
+        ALOGE("BEGIN TRANSACTION failed setting locale\n");
         throw_sqlite3_exception(env, handle);
         goto done;
     }
 
     err = register_localized_collators(handle, locale8, UTF16_STORAGE);
     if (err != SQLITE_OK) {
-        LOGE("register_localized_collators() failed setting locale\n");
+        ALOGE("register_localized_collators() failed setting locale\n");
         throw_sqlite3_exception(env, handle);
         goto rollback;
     }
 
     err = sqlite3_exec(handle, "DELETE FROM " ANDROID_TABLE, NULL, NULL, NULL);
     if (err != SQLITE_OK) {
-        LOGE("DELETE failed setting locale\n");
+        ALOGE("DELETE failed setting locale\n");
         throw_sqlite3_exception(env, handle);
         goto rollback;
     }
@@ -334,28 +334,28 @@
     static const char *sql = "INSERT INTO " ANDROID_TABLE " (locale) VALUES(?);";
     err = sqlite3_prepare_v2(handle, sql, -1, &stmt, NULL);
     if (err != SQLITE_OK) {
-        LOGE("sqlite3_prepare_v2(\"%s\") failed\n", sql);
+        ALOGE("sqlite3_prepare_v2(\"%s\") failed\n", sql);
         throw_sqlite3_exception(env, handle);
         goto rollback;
     }
 
     err = sqlite3_bind_text(stmt, 1, locale8, -1, SQLITE_TRANSIENT);
     if (err != SQLITE_OK) {
-        LOGE("sqlite3_bind_text() failed setting locale\n");
+        ALOGE("sqlite3_bind_text() failed setting locale\n");
         throw_sqlite3_exception(env, handle);
         goto rollback;
     }
 
     err = sqlite3_step(stmt);
     if (err != SQLITE_OK && err != SQLITE_DONE) {
-        LOGE("sqlite3_step(\"%s\") failed setting locale\n", sql);
+        ALOGE("sqlite3_step(\"%s\") failed setting locale\n", sql);
         throw_sqlite3_exception(env, handle);
         goto rollback;
     }
 
     err = sqlite3_exec(handle, "REINDEX LOCALIZED", NULL, NULL, NULL);
     if (err != SQLITE_OK) {
-        LOGE("REINDEX LOCALIZED failed\n");
+        ALOGE("REINDEX LOCALIZED failed\n");
         throw_sqlite3_exception(env, handle);
         goto rollback;
     }
@@ -363,7 +363,7 @@
     // all done, yay!
     err = sqlite3_exec(handle, "COMMIT TRANSACTION", NULL, NULL, NULL);
     if (err != SQLITE_OK) {
-        LOGE("COMMIT TRANSACTION failed setting locale\n");
+        ALOGE("COMMIT TRANSACTION failed setting locale\n");
         throw_sqlite3_exception(env, handle);
         goto done;
     }
@@ -399,7 +399,7 @@
 static void custom_function_callback(sqlite3_context * context, int argc, sqlite3_value ** argv) {
     JNIEnv* env = AndroidRuntime::getJNIEnv();
     if (!env) {
-        LOGE("custom_function_callback cannot call into Java on this thread");
+        ALOGE("custom_function_callback cannot call into Java on this thread");
         return;
     }
     // get global ref to CustomFunction object from our user data
@@ -412,7 +412,7 @@
     for (int i = 0; i < argc; i++) {
         char* arg = (char *)sqlite3_value_text(argv[i]);
         if (!arg) {
-            LOGE("NULL argument in custom_function_callback.  This should not happen.");
+            ALOGE("NULL argument in custom_function_callback.  This should not happen.");
             return;
         }
         jobject obj = env->NewStringUTF(arg);
@@ -427,7 +427,7 @@
 
 done:
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by custom sqlite3 function.");
+        ALOGE("An exception was thrown by custom sqlite3 function.");
         LOGE_EX(env);
         env->ExceptionClear();
     }
@@ -447,7 +447,7 @@
     if (err == SQLITE_OK)
         return (int)ref;
     else {
-        LOGE("sqlite3_create_function returned %d", err);
+        ALOGE("sqlite3_create_function returned %d", err);
         env->DeleteGlobalRef(ref);
         throw_sqlite3_exception(env, handle);
         return 0;
@@ -484,30 +484,30 @@
 
     clazz = env->FindClass("android/database/sqlite/SQLiteDatabase");
     if (clazz == NULL) {
-        LOGE("Can't find android/database/sqlite/SQLiteDatabase\n");
+        ALOGE("Can't find android/database/sqlite/SQLiteDatabase\n");
         return -1;
     }
 
     string_class = (jclass)env->NewGlobalRef(env->FindClass("java/lang/String"));
     if (string_class == NULL) {
-        LOGE("Can't find java/lang/String\n");
+        ALOGE("Can't find java/lang/String\n");
         return -1;
     }
 
     offset_db_handle = env->GetFieldID(clazz, "mNativeHandle", "I");
     if (offset_db_handle == NULL) {
-        LOGE("Can't find SQLiteDatabase.mNativeHandle\n");
+        ALOGE("Can't find SQLiteDatabase.mNativeHandle\n");
         return -1;
     }
 
     clazz = env->FindClass("android/database/sqlite/SQLiteDatabase$CustomFunction");
     if (clazz == NULL) {
-        LOGE("Can't find android/database/sqlite/SQLiteDatabase$CustomFunction\n");
+        ALOGE("Can't find android/database/sqlite/SQLiteDatabase$CustomFunction\n");
         return -1;
     }
     method_custom_function_callback = env->GetMethodID(clazz, "callback", "([Ljava/lang/String;)V");
     if (method_custom_function_callback == NULL) {
-        LOGE("Can't find method SQLiteDatabase.CustomFunction.callback\n");
+        ALOGE("Can't find method SQLiteDatabase.CustomFunction.callback\n");
         return -1;
     }
 
diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp
index 873b2a1..20ff00b 100644
--- a/core/jni/android_database_SQLiteDebug.cpp
+++ b/core/jni/android_database_SQLiteDebug.cpp
@@ -201,25 +201,25 @@
 
     clazz = env->FindClass("android/database/sqlite/SQLiteDebug$PagerStats");
     if (clazz == NULL) {
-        LOGE("Can't find android/database/sqlite/SQLiteDebug$PagerStats");
+        ALOGE("Can't find android/database/sqlite/SQLiteDebug$PagerStats");
         return -1;
     }
 
     gMemoryUsedField = env->GetFieldID(clazz, "memoryUsed", "I");
     if (gMemoryUsedField == NULL) {
-        LOGE("Can't find memoryUsed");
+        ALOGE("Can't find memoryUsed");
         return -1;
     }
 
     gLargestMemAllocField = env->GetFieldID(clazz, "largestMemAlloc", "I");
     if (gLargestMemAllocField == NULL) {
-        LOGE("Can't find largestMemAlloc");
+        ALOGE("Can't find largestMemAlloc");
         return -1;
     }
 
     gPageCacheOverfloField = env->GetFieldID(clazz, "pageCacheOverflo", "I");
     if (gPageCacheOverfloField == NULL) {
-        LOGE("Can't find pageCacheOverflo");
+        ALOGE("Can't find pageCacheOverflo");
         return -1;
     }
 
diff --git a/core/jni/android_database_SQLiteProgram.cpp b/core/jni/android_database_SQLiteProgram.cpp
index c247bbd..2e34c00 100644
--- a/core/jni/android_database_SQLiteProgram.cpp
+++ b/core/jni/android_database_SQLiteProgram.cpp
@@ -176,7 +176,7 @@
 
     clazz = env->FindClass("android/database/sqlite/SQLiteProgram");
     if (clazz == NULL) {
-        LOGE("Can't find android/database/sqlite/SQLiteProgram");
+        ALOGE("Can't find android/database/sqlite/SQLiteProgram");
         return -1;
     }
 
@@ -184,7 +184,7 @@
     gStatementField = env->GetFieldID(clazz, "nStatement", "I");
 
     if (gHandleField == NULL || gStatementField == NULL) {
-        LOGE("Error locating fields");
+        ALOGE("Error locating fields");
         return -1;
     }
 
diff --git a/core/jni/android_database_SQLiteQuery.cpp b/core/jni/android_database_SQLiteQuery.cpp
index ea4200a..da7ccf0 100644
--- a/core/jni/android_database_SQLiteQuery.cpp
+++ b/core/jni/android_database_SQLiteQuery.cpp
@@ -122,7 +122,7 @@
             LOG_WINDOW("%d,%d is NULL", startPos + addedRows, i);
         } else {
             // Unknown data
-            LOGE("Unknown column type when filling database window");
+            ALOGE("Unknown column type when filling database window");
             throw_sqlite3_exception(env, "Unknown column type when filling window");
             result = CPR_ERROR;
             break;
@@ -153,7 +153,7 @@
         startPos = requiredPos;
         int err = sqlite3_bind_int(statement, offsetParam, startPos);
         if (err != SQLITE_OK) {
-            LOGE("Unable to bind offset position, offsetParam = %d", offsetParam);
+            ALOGE("Unable to bind offset position, offsetParam = %d", offsetParam);
             throw_sqlite3_exception(env, database);
             return 0;
         }
@@ -167,7 +167,7 @@
     int numColumns = sqlite3_column_count(statement);
     status_t status = window->setNumColumns(numColumns);
     if (status) {
-        LOGE("Failed to change column count from %d to %d", window->getNumColumns(), numColumns);
+        ALOGE("Failed to change column count from %d to %d", window->getNumColumns(), numColumns);
         jniThrowException(env, "java/lang/IllegalStateException", "numColumns mismatch");
         return 0;
     }
@@ -216,7 +216,7 @@
             // The table is locked, retry
             LOG_WINDOW("Database locked, retrying");
             if (retryCount > 50) {
-                LOGE("Bailing on database busy retry");
+                ALOGE("Bailing on database busy retry");
                 throw_sqlite3_exception(env, database, "retrycount exceeded");
                 gotException = true;
             } else {
@@ -237,7 +237,7 @@
 
     // Report the total number of rows on request.
     if (startPos > totalRows) {
-        LOGE("startPos %d > actual rows %d", startPos, totalRows);
+        ALOGE("startPos %d > actual rows %d", startPos, totalRows);
     }
     jlong result = jlong(startPos) << 32 | jlong(totalRows);
     return result;
diff --git a/core/jni/android_database_SQLiteStatement.cpp b/core/jni/android_database_SQLiteStatement.cpp
index 05ffbb1..e376258 100644
--- a/core/jni/android_database_SQLiteStatement.cpp
+++ b/core/jni/android_database_SQLiteStatement.cpp
@@ -169,7 +169,7 @@
     // Create ashmem area
     int fd = ashmem_create_region(NULL, length);
     if (fd < 0) {
-        LOGE("ashmem_create_region failed: %s", strerror(errno));
+        ALOGE("ashmem_create_region failed: %s", strerror(errno));
         jniThrowIOException(env, errno);
         return NULL;
     }
@@ -179,7 +179,7 @@
         void * ashmem_ptr =
                 mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
         if (ashmem_ptr == MAP_FAILED) {
-            LOGE("mmap failed: %s", strerror(errno));
+            ALOGE("mmap failed: %s", strerror(errno));
             jniThrowIOException(env, errno);
             close(fd);
             return NULL;
@@ -190,7 +190,7 @@
 
         // munmap ashmem area
         if (munmap(ashmem_ptr, length) < 0) {
-            LOGE("munmap failed: %s", strerror(errno));
+            ALOGE("munmap failed: %s", strerror(errno));
             jniThrowIOException(env, errno);
             close(fd);
             return NULL;
@@ -199,7 +199,7 @@
 
     // Make ashmem area read-only
     if (ashmem_set_prot_region(fd, PROT_READ) < 0) {
-        LOGE("ashmem_set_prot_region failed: %s", strerror(errno));
+        ALOGE("ashmem_set_prot_region failed: %s", strerror(errno));
         jniThrowIOException(env, errno);
         close(fd);
         return NULL;
@@ -267,7 +267,7 @@
 
     clazz = env->FindClass("android/database/sqlite/SQLiteStatement");
     if (clazz == NULL) {
-        LOGE("Can't find android/database/sqlite/SQLiteStatement");
+        ALOGE("Can't find android/database/sqlite/SQLiteStatement");
         return -1;
     }
 
@@ -275,7 +275,7 @@
     gStatementField = env->GetFieldID(clazz, "nStatement", "I");
 
     if (gHandleField == NULL || gStatementField == NULL) {
-        LOGE("Error locating fields");
+        ALOGE("Error locating fields");
         return -1;
     }
 
diff --git a/core/jni/android_debug_JNITest.cpp b/core/jni/android_debug_JNITest.cpp
index f14201e..9147284 100644
--- a/core/jni/android_debug_JNITest.cpp
+++ b/core/jni/android_debug_JNITest.cpp
@@ -39,20 +39,20 @@
     jint arrayVal;
     int result = -2;
 
-    LOGI("JNI test: in part1, intArg=%d, doubleArg=%.3f\n", intArg, doubleArg);
+    ALOGI("JNI test: in part1, intArg=%d, doubleArg=%.3f\n", intArg, doubleArg);
 
     /* find "int part2(double doubleArg, int fromArray, String stringArg)" */
     clazz = env->GetObjectClass(object);
     part2id = env->GetMethodID(clazz,
                 "part2", "(DILjava/lang/String;)I");
     if (part2id == NULL) {
-        LOGE("JNI test: unable to find part2\n");
+        ALOGE("JNI test: unable to find part2\n");
         return -1;
     }
 
     /* get the length of the array */
     arrayLen = env->GetArrayLength(arrayArg);
-    LOGI("  array size is %d\n", arrayLen);
+    ALOGI("  array size is %d\n", arrayLen);
 
     /*
      * Get the last element in the array.
@@ -60,7 +60,7 @@
      * to multiple elements.
      */
     arrayVal = (int) env->GetObjectArrayElement(arrayArg, arrayLen-1);
-    LOGI("  array val is %d\n", arrayVal);
+    ALOGI("  array val is %d\n", arrayVal);
 
     /* call this->part2 */
     result = env->CallIntMethod(object, part2id,
@@ -79,11 +79,11 @@
     const char* utfChars;
     jboolean isCopy;
 
-    LOGI("JNI test: in part3\n");
+    ALOGI("JNI test: in part3\n");
 
     utfChars = env->GetStringUTFChars(stringArg, &isCopy);
 
-    LOGI("  String is '%s', isCopy=%d\n", (const char*) utfChars, isCopy);
+    ALOGI("  String is '%s', isCopy=%d\n", (const char*) utfChars, isCopy);
 
     env->ReleaseStringUTFChars(stringArg, utfChars);
 
diff --git a/core/jni/android_emoji_EmojiFactory.cpp b/core/jni/android_emoji_EmojiFactory.cpp
index 81dae88..a658561 100644
--- a/core/jni/android_emoji_EmojiFactory.cpp
+++ b/core/jni/android_emoji_EmojiFactory.cpp
@@ -60,7 +60,7 @@
     error_str = "unknown reason";
   }
 
-  LOGE("%s: %s", error_msg, error_str);
+  ALOGE("%s: %s", error_msg, error_str);
   if (m_handle != NULL) {
     dlclose(m_handle);
     m_handle = NULL;
@@ -109,7 +109,7 @@
   jobject obj = env->NewObject(gEmojiFactory_class, gEmojiFactory_constructorMethodID,
       static_cast<jint>(reinterpret_cast<uintptr_t>(factory)), name);
   if (env->ExceptionCheck() != 0) {
-    LOGE("*** Uncaught exception returned from Java call!\n");
+    ALOGE("*** Uncaught exception returned from Java call!\n");
     env->ExceptionDescribe();
   }
   return obj;
@@ -172,14 +172,14 @@
 
   SkBitmap *bitmap = new SkBitmap;
   if (!SkImageDecoder::DecodeMemory(bytes, size, bitmap)) {
-    LOGE("SkImageDecoder::DecodeMemory() failed.");
+    ALOGE("SkImageDecoder::DecodeMemory() failed.");
     return NULL;
   }
 
   jobject obj = env->NewObject(gBitmap_class, gBitmap_constructorMethodID,
       static_cast<jint>(reinterpret_cast<uintptr_t>(bitmap)), NULL, false, NULL, -1);
   if (env->ExceptionCheck() != 0) {
-    LOGE("*** Uncaught exception returned from Java call!\n");
+    ALOGE("*** Uncaught exception returned from Java call!\n");
     env->ExceptionDescribe();
   }
   return obj;
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 953da79..b89273b 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -173,7 +173,7 @@
     // VM pointer will be NULL if object is released
     Mutex::Autolock _l(mLock);
     if (mCameraJObjectWeak == NULL) {
-        LOGW("callback on dead camera object");
+        ALOGW("callback on dead camera object");
         return;
     }
     JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -208,7 +208,7 @@
         if (obj != NULL) {
             jsize bufferLength = env->GetArrayLength(obj);
             if ((int)bufferLength < (int)bufferSize) {
-                LOGE("Callback buffer was too small! Expected %d bytes, but got %d bytes!",
+                ALOGE("Callback buffer was too small! Expected %d bytes, but got %d bytes!",
                     bufferSize, bufferLength);
                 env->DeleteLocalRef(obj);
                 return NULL;
@@ -254,13 +254,13 @@
             }
 
             if (obj == NULL) {
-                LOGE("Couldn't allocate byte array for JPEG data");
+                ALOGE("Couldn't allocate byte array for JPEG data");
                 env->ExceptionClear();
             } else {
                 env->SetByteArrayRegion(obj, 0, size, data);
             }
         } else {
-            LOGE("image heap is NULL");
+            ALOGE("image heap is NULL");
         }
     }
 
@@ -279,7 +279,7 @@
     Mutex::Autolock _l(mLock);
     JNIEnv *env = AndroidRuntime::getJNIEnv();
     if (mCameraJObjectWeak == NULL) {
-        LOGW("callback on dead camera object");
+        ALOGW("callback on dead camera object");
         return;
     }
 
@@ -331,7 +331,7 @@
     obj = (jobjectArray) env->NewObjectArray(metadata->number_of_faces,
                                              mFaceClass, NULL);
     if (obj == NULL) {
-        LOGE("Couldn't allocate face metadata array");
+        ALOGE("Couldn't allocate face metadata array");
         return;
     }
 
@@ -419,7 +419,7 @@
             }
         }
     } else {
-       LOGE("Null byte array!");
+       ALOGE("Null byte array!");
     }
 }
 
@@ -899,13 +899,13 @@
         field *f = &fields[i];
         jclass clazz = env->FindClass(f->class_name);
         if (clazz == NULL) {
-            LOGE("Can't find %s", f->class_name);
+            ALOGE("Can't find %s", f->class_name);
             return -1;
         }
 
         jfieldID field = env->GetFieldID(clazz, f->field_name, f->field_type);
         if (field == NULL) {
-            LOGE("Can't find %s.%s", f->class_name, f->field_name);
+            ALOGE("Can't find %s.%s", f->class_name, f->field_name);
             return -1;
         }
 
@@ -940,21 +940,21 @@
     fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
                                                "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (fields.post_event == NULL) {
-        LOGE("Can't find android/hardware/Camera.postEventFromNative");
+        ALOGE("Can't find android/hardware/Camera.postEventFromNative");
         return -1;
     }
 
     clazz = env->FindClass("android/graphics/Rect");
     fields.rect_constructor = env->GetMethodID(clazz, "<init>", "()V");
     if (fields.rect_constructor == NULL) {
-        LOGE("Can't find android/graphics/Rect.Rect()");
+        ALOGE("Can't find android/graphics/Rect.Rect()");
         return -1;
     }
 
     clazz = env->FindClass("android/hardware/Camera$Face");
     fields.face_constructor = env->GetMethodID(clazz, "<init>", "()V");
     if (fields.face_constructor == NULL) {
-        LOGE("Can't find android/hardware/Camera$Face.Face()");
+        ALOGE("Can't find android/hardware/Camera$Face.Face()");
         return -1;
     }
 
diff --git a/core/jni/android_hardware_UsbDeviceConnection.cpp b/core/jni/android_hardware_UsbDeviceConnection.cpp
index f53e2f7..923781e 100644
--- a/core/jni/android_hardware_UsbDeviceConnection.cpp
+++ b/core/jni/android_hardware_UsbDeviceConnection.cpp
@@ -53,7 +53,7 @@
     if (device) {
         env->SetIntField(thiz, field_context, (int)device);
     } else {
-        LOGE("usb_device_open failed for %s", deviceNameStr);
+        ALOGE("usb_device_open failed for %s", deviceNameStr);
         close(fd);
     }
 
@@ -77,7 +77,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_get_fd");
+        ALOGE("device is closed in native_get_fd");
         return -1;
     }
     return usb_device_get_fd(device);
@@ -110,7 +110,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_claim_interface");
+        ALOGE("device is closed in native_claim_interface");
         return -1;
     }
 
@@ -128,7 +128,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_release_interface");
+        ALOGE("device is closed in native_release_interface");
         return -1;
     }
     int ret = usb_device_release_interface(device, interfaceID);
@@ -146,7 +146,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_control_request");
+        ALOGE("device is closed in native_control_request");
         return -1;
     }
 
@@ -174,7 +174,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_control_request");
+        ALOGE("device is closed in native_control_request");
         return -1;
     }
 
@@ -200,7 +200,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_request_wait");
+        ALOGE("device is closed in native_request_wait");
         return NULL;
     }
 
@@ -216,7 +216,7 @@
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
-        LOGE("device is closed in native_request_wait");
+        ALOGE("device is closed in native_request_wait");
         return NULL;
     }
     char* serial = usb_device_get_serial(device);
@@ -249,12 +249,12 @@
 {
     jclass clazz = env->FindClass("android/hardware/usb/UsbDeviceConnection");
     if (clazz == NULL) {
-        LOGE("Can't find android/hardware/usb/UsbDeviceConnection");
+        ALOGE("Can't find android/hardware/usb/UsbDeviceConnection");
         return -1;
     }
     field_context = env->GetFieldID(clazz, "mNativeContext", "I");
     if (field_context == NULL) {
-        LOGE("Can't find UsbDeviceConnection.mNativeContext");
+        ALOGE("Can't find UsbDeviceConnection.mNativeContext");
         return -1;
     }
 
diff --git a/core/jni/android_hardware_UsbRequest.cpp b/core/jni/android_hardware_UsbRequest.cpp
index 6e1d443..1398968 100644
--- a/core/jni/android_hardware_UsbRequest.cpp
+++ b/core/jni/android_hardware_UsbRequest.cpp
@@ -46,7 +46,7 @@
 
     struct usb_device* device = get_device_from_object(env, java_device);
     if (!device) {
-        LOGE("device null in native_init");
+        ALOGE("device null in native_init");
         return false;
     }
 
@@ -82,7 +82,7 @@
 {
     struct usb_request* request = get_request_from_object(env, thiz);
     if (!request) {
-        LOGE("request is closed in native_queue");
+        ALOGE("request is closed in native_queue");
         return false;
     }
 
@@ -119,7 +119,7 @@
 {
     struct usb_request* request = get_request_from_object(env, thiz);
     if (!request) {
-        LOGE("request is closed in native_dequeue");
+        ALOGE("request is closed in native_dequeue");
         return;
     }
 
@@ -138,7 +138,7 @@
 {
     struct usb_request* request = get_request_from_object(env, thiz);
     if (!request) {
-        LOGE("request is closed in native_queue");
+        ALOGE("request is closed in native_queue");
         return false;
     }
 
@@ -168,7 +168,7 @@
 {
     struct usb_request* request = get_request_from_object(env, thiz);
     if (!request) {
-        LOGE("request is closed in native_dequeue");
+        ALOGE("request is closed in native_dequeue");
         return;
     }
     // all we need to do is delete our global ref
@@ -180,7 +180,7 @@
 {
     struct usb_request* request = get_request_from_object(env, thiz);
     if (!request) {
-        LOGE("request is closed in native_cancel");
+        ALOGE("request is closed in native_cancel");
         return false;
     }
     return (usb_request_cancel(request) == 0);
@@ -202,12 +202,12 @@
 {
     jclass clazz = env->FindClass("android/hardware/usb/UsbRequest");
     if (clazz == NULL) {
-        LOGE("Can't find android/hardware/usb/UsbRequest");
+        ALOGE("Can't find android/hardware/usb/UsbRequest");
         return -1;
     }
     field_context = env->GetFieldID(clazz, "mNativeContext", "I");
     if (field_context == NULL) {
-        LOGE("Can't find UsbRequest.mNativeContext");
+        ALOGE("Can't find UsbRequest.mNativeContext");
         return -1;
     }
 
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index ca13c18..3052553 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -134,7 +134,7 @@
     //     sampleRateInHertz, audioFormat, channels,     buffSizeInBytes);
 
     if (!audio_is_input_channel(channels)) {
-        LOGE("Error creating AudioRecord: channel count is not 1 or 2.");
+        ALOGE("Error creating AudioRecord: channel count is not 1 or 2.");
         return AUDIORECORD_ERROR_SETUP_INVALIDCHANNELMASK;
     }
     uint32_t nbChannels = popcount(channels);
@@ -142,7 +142,7 @@
     // compare the format against the Java constants
     if ((audioFormat != javaAudioRecordFields.PCM16) 
         && (audioFormat != javaAudioRecordFields.PCM8)) {
-        LOGE("Error creating AudioRecord: unsupported audio format.");
+        ALOGE("Error creating AudioRecord: unsupported audio format.");
         return AUDIORECORD_ERROR_SETUP_INVALIDFORMAT;
     }
 
@@ -151,25 +151,25 @@
             AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT;
 
     if (buffSizeInBytes == 0) {
-         LOGE("Error creating AudioRecord: frameCount is 0.");
+         ALOGE("Error creating AudioRecord: frameCount is 0.");
         return AUDIORECORD_ERROR_SETUP_ZEROFRAMECOUNT;
     }
     int frameSize = nbChannels * bytesPerSample;
     size_t frameCount = buffSizeInBytes / frameSize;
     
     if (source >= AUDIO_SOURCE_CNT) {
-        LOGE("Error creating AudioRecord: unknown source.");
+        ALOGE("Error creating AudioRecord: unknown source.");
         return AUDIORECORD_ERROR_SETUP_INVALIDSOURCE;
     }
 
     if (jSession == NULL) {
-        LOGE("Error creating AudioRecord: invalid session ID pointer");
+        ALOGE("Error creating AudioRecord: invalid session ID pointer");
         return AUDIORECORD_ERROR;
     }
 
     jint* nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
     if (nSession == NULL) {
-        LOGE("Error creating AudioRecord: Error retrieving session id pointer");
+        ALOGE("Error creating AudioRecord: Error retrieving session id pointer");
         return AUDIORECORD_ERROR;
     }
     int sessionId = nSession[0];
@@ -182,7 +182,7 @@
     // create an uninitialized AudioRecord object
     lpRecorder = new AudioRecord();
         if(lpRecorder == NULL) {
-        LOGE("Error creating AudioRecord instance.");
+        ALOGE("Error creating AudioRecord instance.");
         return AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED;
     }
     
@@ -190,7 +190,7 @@
     // this data will be passed with every AudioRecord callback
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
-        LOGE("Can't find %s when setting up callback.", kClassPathName);
+        ALOGE("Can't find %s when setting up callback.", kClassPathName);
         goto native_track_failure;
     }
     lpCallbackData = new audiorecord_callback_cookie;
@@ -211,13 +211,13 @@
         sessionId);
 
     if(lpRecorder->initCheck() != NO_ERROR) {
-        LOGE("Error creating AudioRecord instance: initialization check failed.");
+        ALOGE("Error creating AudioRecord instance: initialization check failed.");
         goto native_init_failure;
     }
 
     nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
     if (nSession == NULL) {
-        LOGE("Error creating AudioRecord: Error retrieving session id pointer");
+        ALOGE("Error creating AudioRecord: Error retrieving session id pointer");
         goto native_init_failure;
     }
     // read the audio session ID back from AudioTrack in case a new session was created during set()
@@ -332,12 +332,12 @@
     lpRecorder = 
             (AudioRecord *)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj);
     if (lpRecorder == NULL) {
-        LOGE("Unable to retrieve AudioRecord object, can't record");
+        ALOGE("Unable to retrieve AudioRecord object, can't record");
         return 0;
     }
 
     if (!javaAudioData) {
-        LOGE("Invalid Java array to store recorded audio, can't record");
+        ALOGE("Invalid Java array to store recorded audio, can't record");
         return 0;
     }
 
@@ -349,7 +349,7 @@
     recordBuff = (jbyte *)env->GetByteArrayElements(javaAudioData, NULL);
 
     if (recordBuff == NULL) {
-        LOGE("Error retrieving destination for recorded audio data, can't record");
+        ALOGE("Error retrieving destination for recorded audio data, can't record");
         return 0;
     }
 
@@ -390,13 +390,13 @@
     long capacity = env->GetDirectBufferCapacity(jBuffer);
     if(capacity == -1) {
         // buffer direct access is not supported
-        LOGE("Buffer direct access is not supported, can't record");
+        ALOGE("Buffer direct access is not supported, can't record");
         return 0;
     }
     //ALOGV("capacity = %ld", capacity);
     jbyte* nativeFromJavaBuf = (jbyte*) env->GetDirectBufferAddress(jBuffer);
     if(nativeFromJavaBuf==NULL) {
-        LOGE("Buffer direct access is not supported, can't record");
+        ALOGE("Buffer direct access is not supported, can't record");
         return 0;
     } 
 
@@ -555,7 +555,7 @@
     // Get the AudioRecord class
     jclass audioRecordClass = env->FindClass(kClassPathName);
     if (audioRecordClass == NULL) {
-        LOGE("Can't find %s", kClassPathName);
+        ALOGE("Can't find %s", kClassPathName);
         return -1;
     }
     // Get the postEvent method
@@ -563,7 +563,7 @@
             audioRecordClass,
             JAVA_POSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (javaAudioRecordFields.postNativeEventInJava == NULL) {
-        LOGE("Can't find AudioRecord.%s", JAVA_POSTEVENT_CALLBACK_NAME);
+        ALOGE("Can't find AudioRecord.%s", JAVA_POSTEVENT_CALLBACK_NAME);
         return -1;
     }
 
@@ -573,7 +573,7 @@
         env->GetFieldID(audioRecordClass,
                         JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME, "I");
     if (javaAudioRecordFields.nativeRecorderInJavaObj == NULL) {
-        LOGE("Can't find AudioRecord.%s", JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME);
+        ALOGE("Can't find AudioRecord.%s", JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME);
         return -1;
     }
     //     mNativeCallbackCookie
@@ -581,7 +581,7 @@
             audioRecordClass,
             JAVA_NATIVECALLBACKINFO_FIELD_NAME, "I");
     if (javaAudioRecordFields.nativeCallbackCookie == NULL) {
-        LOGE("Can't find AudioRecord.%s", JAVA_NATIVECALLBACKINFO_FIELD_NAME);
+        ALOGE("Can't find AudioRecord.%s", JAVA_NATIVECALLBACKINFO_FIELD_NAME);
         return -1;
     }
 
@@ -589,7 +589,7 @@
     jclass audioFormatClass = NULL;
     audioFormatClass = env->FindClass(JAVA_AUDIOFORMAT_CLASS_NAME);
     if (audioFormatClass == NULL) {
-        LOGE("Can't find %s", JAVA_AUDIOFORMAT_CLASS_NAME);
+        ALOGE("Can't find %s", JAVA_AUDIOFORMAT_CLASS_NAME);
         return -1;
     }
     if ( !android_media_getIntConstantFromClass(env, audioFormatClass, 
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 2573aa6d..4067324 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -176,11 +176,11 @@
     int afFrameCount;
 
     if (AudioSystem::getOutputFrameCount(&afFrameCount, streamType) != NO_ERROR) {
-        LOGE("Error creating AudioTrack: Could not get AudioSystem frame count.");
+        ALOGE("Error creating AudioTrack: Could not get AudioSystem frame count.");
         return AUDIOTRACK_ERROR_SETUP_AUDIOSYSTEM;
     }
     if (AudioSystem::getOutputSamplingRate(&afSampleRate, streamType) != NO_ERROR) {
-        LOGE("Error creating AudioTrack: Could not get AudioSystem sampling rate.");
+        ALOGE("Error creating AudioTrack: Could not get AudioSystem sampling rate.");
         return AUDIOTRACK_ERROR_SETUP_AUDIOSYSTEM;
     }
 
@@ -189,7 +189,7 @@
     uint32_t nativeChannelMask = ((uint32_t)javaChannelMask) >> 2;
 
     if (!audio_is_output_channel(nativeChannelMask)) {
-        LOGE("Error creating AudioTrack: invalid channel mask.");
+        ALOGE("Error creating AudioTrack: invalid channel mask.");
         return AUDIOTRACK_ERROR_SETUP_INVALIDCHANNELMASK;
     }
 
@@ -214,14 +214,14 @@
     } else if (streamType == javaAudioTrackFields.STREAM_DTMF) {
         atStreamType = AUDIO_STREAM_DTMF;
     } else {
-        LOGE("Error creating AudioTrack: unknown stream type.");
+        ALOGE("Error creating AudioTrack: unknown stream type.");
         return AUDIOTRACK_ERROR_SETUP_INVALIDSTREAMTYPE;
     }
 
     // check the format.
     // This function was called from Java, so we compare the format against the Java constants
     if ((audioFormat != javaAudioTrackFields.PCM16) && (audioFormat != javaAudioTrackFields.PCM8)) {
-        LOGE("Error creating AudioTrack: unsupported audio format.");
+        ALOGE("Error creating AudioTrack: unsupported audio format.");
         return AUDIOTRACK_ERROR_SETUP_INVALIDFORMAT;
     }
 
@@ -250,7 +250,7 @@
     // this data will be passed with every AudioTrack callback
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
-        LOGE("Can't find %s when setting up callback.", kClassPathName);
+        ALOGE("Can't find %s when setting up callback.", kClassPathName);
         delete lpJniStorage;
         return AUDIOTRACK_ERROR_SETUP_NATIVEINITFAILED;
     }
@@ -261,14 +261,14 @@
     lpJniStorage->mStreamType = atStreamType;
 
     if (jSession == NULL) {
-        LOGE("Error creating AudioTrack: invalid session ID pointer");
+        ALOGE("Error creating AudioTrack: invalid session ID pointer");
         delete lpJniStorage;
         return AUDIOTRACK_ERROR;
     }
 
     jint* nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
     if (nSession == NULL) {
-        LOGE("Error creating AudioTrack: Error retrieving session id pointer");
+        ALOGE("Error creating AudioTrack: Error retrieving session id pointer");
         delete lpJniStorage;
         return AUDIOTRACK_ERROR;
     }
@@ -279,7 +279,7 @@
     // create the native AudioTrack object
     AudioTrack* lpTrack = new AudioTrack();
     if (lpTrack == NULL) {
-        LOGE("Error creating uninitialized AudioTrack");
+        ALOGE("Error creating uninitialized AudioTrack");
         goto native_track_failure;
     }
     
@@ -303,7 +303,7 @@
         // AudioTrack is using shared memory
         
         if (!lpJniStorage->allocSharedMem(buffSizeInBytes)) {
-            LOGE("Error creating AudioTrack in static mode: error creating mem heap base");
+            ALOGE("Error creating AudioTrack in static mode: error creating mem heap base");
             goto native_init_failure;
         }
         
@@ -322,13 +322,13 @@
     }
 
     if (lpTrack->initCheck() != NO_ERROR) {
-        LOGE("Error initializing AudioTrack");
+        ALOGE("Error initializing AudioTrack");
         goto native_init_failure;
     }
 
     nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
     if (nSession == NULL) {
-        LOGE("Error creating AudioTrack: Error retrieving session id pointer");
+        ALOGE("Error creating AudioTrack: Error retrieving session id pointer");
         goto native_init_failure;
     }
     // read the audio session ID back from AudioTrack in case we create a new session
@@ -544,11 +544,11 @@
     if (javaAudioData) {
         cAudioData = (jbyte *)env->GetByteArrayElements(javaAudioData, NULL);
         if (cAudioData == NULL) {
-            LOGE("Error retrieving source of audio data to play, can't play");
+            ALOGE("Error retrieving source of audio data to play, can't play");
             return 0; // out of memory or no data to load
         }
     } else {
-        LOGE("NULL java array of audio data to play, can't play");
+        ALOGE("NULL java array of audio data to play, can't play");
         return 0;
     }
 
@@ -785,7 +785,7 @@
     }
 
     if (AudioSystem::getOutputSamplingRate(&afSamplingRate, nativeStreamType) != NO_ERROR) {
-        LOGE("AudioSystem::getOutputSamplingRate() for stream type %d failed in AudioTrack JNI",
+        ALOGE("AudioSystem::getOutputSamplingRate() for stream type %d failed in AudioTrack JNI",
             nativeStreamType);
         return DEFAULT_OUTPUT_SAMPLE_RATE;
     } else {
@@ -913,7 +913,7 @@
         *constVal = pEnv->GetStaticIntField(theClass, javaConst);
         return true;
     } else {
-        LOGE("Can't find %s.%s", className, constName);
+        ALOGE("Can't find %s.%s", className, constName);
         return false;
     }
 }
@@ -928,7 +928,7 @@
     // Get the AudioTrack class
     jclass audioTrackClass = env->FindClass(kClassPathName);
     if (audioTrackClass == NULL) {
-        LOGE("Can't find %s", kClassPathName);
+        ALOGE("Can't find %s", kClassPathName);
         return -1;
     }
 
@@ -937,7 +937,7 @@
             audioTrackClass,
             JAVA_POSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (javaAudioTrackFields.postNativeEventInJava == NULL) {
-        LOGE("Can't find AudioTrack.%s", JAVA_POSTEVENT_CALLBACK_NAME);
+        ALOGE("Can't find AudioTrack.%s", JAVA_POSTEVENT_CALLBACK_NAME);
         return -1;
     }
 
@@ -947,7 +947,7 @@
             audioTrackClass,
             JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME, "I");
     if (javaAudioTrackFields.nativeTrackInJavaObj == NULL) {
-        LOGE("Can't find AudioTrack.%s", JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME);
+        ALOGE("Can't find AudioTrack.%s", JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME);
         return -1;
     }
     //      jniData;
@@ -955,7 +955,7 @@
             audioTrackClass,
             JAVA_JNIDATA_FIELD_NAME, "I");
     if (javaAudioTrackFields.jniData == NULL) {
-        LOGE("Can't find AudioTrack.%s", JAVA_JNIDATA_FIELD_NAME);
+        ALOGE("Can't find AudioTrack.%s", JAVA_JNIDATA_FIELD_NAME);
         return -1;
     }
 
@@ -974,7 +974,7 @@
     jclass audioFormatClass = NULL;
     audioFormatClass = env->FindClass(JAVA_AUDIOFORMAT_CLASS_NAME);
     if (audioFormatClass == NULL) {
-        LOGE("Can't find %s", JAVA_AUDIOFORMAT_CLASS_NAME);
+        ALOGE("Can't find %s", JAVA_AUDIOFORMAT_CLASS_NAME);
         return -1;
     }
     if ( !android_media_getIntConstantFromClass(env, audioFormatClass, 
@@ -991,7 +991,7 @@
     jclass audioManagerClass = NULL;
     audioManagerClass = env->FindClass(JAVA_AUDIOMANAGER_CLASS_NAME);
     if (audioManagerClass == NULL) {
-       LOGE("Can't find %s", JAVA_AUDIOMANAGER_CLASS_NAME);
+       ALOGE("Can't find %s", JAVA_AUDIOMANAGER_CLASS_NAME);
        return -1;
     }
     if ( !android_media_getIntConstantFromClass(env, audioManagerClass,
diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp
index 66421a98..85c0a9c 100644
--- a/core/jni/android_media_JetPlayer.cpp
+++ b/core/jni/android_media_JetPlayer.cpp
@@ -66,7 +66,7 @@
             env->ExceptionClear();
         }
     } else {
-        LOGE("JET jetPlayerEventCallback(): No JNI env for JET event callback, can't post event.");
+        ALOGE("JET jetPlayerEventCallback(): No JNI env for JET event callback, can't post event.");
         return;
     }
 }
@@ -90,7 +90,7 @@
         env->SetIntField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, (int)lpJet);
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_setup(): initialization failed with EAS error code %d", (int)result);
+        ALOGE("android_media_JetPlayer_setup(): initialization failed with EAS error code %d", (int)result);
         delete lpJet;
         env->SetIntField(weak_this, javaJetPlayerFields.nativePlayerInJavaObj, 0);
         return JNI_FALSE;
@@ -140,7 +140,7 @@
 
     const char *pathStr = env->GetStringUTFChars(path, NULL);
     if (pathStr == NULL) {  // Out of memory
-        LOGE("android_media_JetPlayer_openFile(): aborting, out of memory");
+        ALOGE("android_media_JetPlayer_openFile(): aborting, out of memory");
         return JNI_FALSE;
     }
 
@@ -152,7 +152,7 @@
         //ALOGV("android_media_JetPlayer_openFile(): file successfully opened");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_openFile(): failed to open file with EAS error %d",
+        ALOGE("android_media_JetPlayer_openFile(): failed to open file with EAS error %d",
             (int)result);
         return JNI_FALSE;
     }
@@ -182,7 +182,7 @@
         ALOGV("android_media_JetPlayer_openFileDescr(): file successfully opened");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_openFileDescr(): failed to open file with EAS error %d",
+        ALOGE("android_media_JetPlayer_openFileDescr(): failed to open file with EAS error %d",
             (int)result);
         return JNI_FALSE;
     }
@@ -204,7 +204,7 @@
         //ALOGV("android_media_JetPlayer_closeFile(): file successfully closed");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_closeFile(): failed to close file");
+        ALOGE("android_media_JetPlayer_closeFile(): failed to close file");
         return JNI_FALSE;
     }
 }
@@ -226,7 +226,7 @@
         //ALOGV("android_media_JetPlayer_play(): play successful");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_play(): failed to play with EAS error code %ld",
+        ALOGE("android_media_JetPlayer_play(): failed to play with EAS error code %ld",
             result);
         return JNI_FALSE;
     }
@@ -253,7 +253,7 @@
             ALOGV("android_media_JetPlayer_pause(): paused with an empty queue");
             return JNI_TRUE;
         } else
-            LOGE("android_media_JetPlayer_pause(): failed to pause with EAS error code %ld",
+            ALOGE("android_media_JetPlayer_pause(): failed to pause with EAS error code %ld",
                 result);
         return JNI_FALSE;
     }
@@ -279,7 +279,7 @@
         //ALOGV("android_media_JetPlayer_queueSegment(): segment successfully queued");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_queueSegment(): failed with EAS error code %ld",
+        ALOGE("android_media_JetPlayer_queueSegment(): failed with EAS error code %ld",
             result);
         return JNI_FALSE;
     }
@@ -304,7 +304,7 @@
     jboolean *muteTracks = NULL;
     muteTracks = env->GetBooleanArrayElements(muteArray, NULL);
     if (muteTracks == NULL) {
-        LOGE("android_media_JetPlayer_queueSegment(): failed to read track mute mask.");
+        ALOGE("android_media_JetPlayer_queueSegment(): failed to read track mute mask.");
         return JNI_FALSE;
     }
 
@@ -325,7 +325,7 @@
         //ALOGV("android_media_JetPlayer_queueSegmentMuteArray(): segment successfully queued");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_queueSegmentMuteArray(): failed with EAS error code %ld",
+        ALOGE("android_media_JetPlayer_queueSegmentMuteArray(): failed with EAS error code %ld",
             result);
         return JNI_FALSE;
     }
@@ -350,7 +350,7 @@
         //ALOGV("android_media_JetPlayer_setMuteFlags(): mute flags successfully updated");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_setMuteFlags(): failed with EAS error code %ld", result);
+        ALOGE("android_media_JetPlayer_setMuteFlags(): failed with EAS error code %ld", result);
         return JNI_FALSE;
     }
 }
@@ -373,7 +373,7 @@
     jboolean *muteTracks = NULL;
     muteTracks = env->GetBooleanArrayElements(muteArray, NULL);
     if (muteTracks == NULL) {
-        LOGE("android_media_JetPlayer_setMuteArray(): failed to read track mute mask.");
+        ALOGE("android_media_JetPlayer_setMuteArray(): failed to read track mute mask.");
         return JNI_FALSE;
     }
 
@@ -394,7 +394,7 @@
         //ALOGV("android_media_JetPlayer_setMuteArray(): mute flags successfully updated");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_setMuteArray(): \
+        ALOGE("android_media_JetPlayer_setMuteArray(): \
             failed to update mute flags with EAS error code %ld", result);
         return JNI_FALSE;
     }
@@ -420,7 +420,7 @@
         //ALOGV("android_media_JetPlayer_setMuteFlag(): mute flag successfully updated for track %d", trackId);
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_setMuteFlag(): failed to update mute flag for track %d with EAS error code %ld",
+        ALOGE("android_media_JetPlayer_setMuteFlag(): failed to update mute flag for track %d with EAS error code %ld",
                 trackId, result);
         return JNI_FALSE;
     }
@@ -444,7 +444,7 @@
         //ALOGV("android_media_JetPlayer_triggerClip(): triggerClip successful for clip %d", clipId);
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_triggerClip(): triggerClip for clip %d failed with EAS error code %ld",
+        ALOGE("android_media_JetPlayer_triggerClip(): triggerClip for clip %d failed with EAS error code %ld",
                 clipId, result);
         return JNI_FALSE;
     }
@@ -467,7 +467,7 @@
         //ALOGV("android_media_JetPlayer_clearQueue(): clearQueue successful");
         return JNI_TRUE;
     } else {
-        LOGE("android_media_JetPlayer_clearQueue(): clearQueue failed with EAS error code %ld",
+        ALOGE("android_media_JetPlayer_clearQueue(): clearQueue failed with EAS error code %ld",
                 result);
         return JNI_FALSE;
     }
@@ -513,7 +513,7 @@
     // Get the JetPlayer java class
     jetPlayerClass = env->FindClass(kClassPathName);
     if (jetPlayerClass == NULL) {
-        LOGE("Can't find %s", kClassPathName);
+        ALOGE("Can't find %s", kClassPathName);
         return -1;
     }
     javaJetPlayerFields.jetClass = (jclass)env->NewGlobalRef(jetPlayerClass);
@@ -523,7 +523,7 @@
             jetPlayerClass,
             JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "I");
     if (javaJetPlayerFields.nativePlayerInJavaObj == NULL) {
-        LOGE("Can't find AudioTrack.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME);
+        ALOGE("Can't find AudioTrack.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME);
         return -1;
     }
 
@@ -531,7 +531,7 @@
     javaJetPlayerFields.postNativeEventInJava = env->GetStaticMethodID(javaJetPlayerFields.jetClass,
             JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;III)V");
     if (javaJetPlayerFields.postNativeEventInJava == NULL) {
-        LOGE("Can't find Jet.%s", JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME);
+        ALOGE("Can't find Jet.%s", JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME);
         return -1;
     }
 
diff --git a/core/jni/android_media_ToneGenerator.cpp b/core/jni/android_media_ToneGenerator.cpp
index 965afae..49be1c7 100644
--- a/core/jni/android_media_ToneGenerator.cpp
+++ b/core/jni/android_media_ToneGenerator.cpp
@@ -86,14 +86,14 @@
     ALOGV("android_media_ToneGenerator_native_setup jobject: %x\n", (int)thiz);
 
     if (lpToneGen == NULL) {
-        LOGE("ToneGenerator creation failed \n");
+        ALOGE("ToneGenerator creation failed \n");
         jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
         return;
     }
     ALOGV("ToneGenerator lpToneGen: %x\n", (unsigned int)lpToneGen);
 
     if (!lpToneGen->isInited()) {
-        LOGE("ToneGenerator init failed \n");
+        ALOGE("ToneGenerator init failed \n");
         jniThrowRuntimeException(env, "Init failed");
         return;
     }
@@ -133,13 +133,13 @@
 
     clazz = env->FindClass("android/media/ToneGenerator");
     if (clazz == NULL) {
-        LOGE("Can't find %s", "android/media/ToneGenerator");
+        ALOGE("Can't find %s", "android/media/ToneGenerator");
         return -1;
     }
 
     fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
     if (fields.context == NULL) {
-        LOGE("Can't find ToneGenerator.mNativeContext");
+        ALOGE("Can't find ToneGenerator.mNativeContext");
         return -1;
     }
     ALOGV("register_android_media_ToneGenerator ToneGenerator fields.context: %x", (unsigned int)fields.context);
diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp
index c8add70..1426b2c 100644
--- a/core/jni/android_net_LocalSocketImpl.cpp
+++ b/core/jni/android_net_LocalSocketImpl.cpp
@@ -957,7 +957,7 @@
         "android/net/LocalSocketImpl", gMethods, NELEM(gMethods));
 
 error:
-    LOGE("Error registering android.net.LocalSocketImpl");
+    ALOGE("Error registering android.net.LocalSocketImpl");
     return -1;
 }
 
diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp
index 7a61432..0ab659b 100644
--- a/core/jni/android_net_TrafficStats.cpp
+++ b/core/jni/android_net_TrafficStats.cpp
@@ -47,13 +47,13 @@
     char buf[80];
     int fd = open(filename, O_RDONLY);
     if (fd < 0) {
-        if (errno != ENOENT) LOGE("Can't open %s: %s", filename, strerror(errno));
+        if (errno != ENOENT) ALOGE("Can't open %s: %s", filename, strerror(errno));
         return -1;
     }
 
     int len = read(fd, buf, sizeof(buf) - 1);
     if (len < 0) {
-        LOGE("Can't read %s: %s", filename, strerror(errno));
+        ALOGE("Can't read %s: %s", filename, strerror(errno));
         close(fd);
         return -1;
     }
@@ -101,7 +101,7 @@
     char filename[PATH_MAX] = "/sys/class/net/";
     DIR *dir = opendir(filename);
     if (dir == NULL) {
-        LOGE("Can't list %s: %s", filename, strerror(errno));
+        ALOGE("Can't list %s: %s", filename, strerror(errno));
         return -1;
     }
 
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index f8dc618..9586717 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -184,7 +184,7 @@
             }
         }
 
-        //LOGI("native=%d dalvik=%d sqlite=%d: %s\n", isNativeHeap, isDalvikHeap,
+        //ALOGI("native=%d dalvik=%d sqlite=%d: %s\n", isNativeHeap, isDalvikHeap,
         //    isSqliteHeap, line);
             
         while (true) {
@@ -517,14 +517,14 @@
     /* dup() the descriptor so we don't close the original with fclose() */
     int fd = dup(origFd);
     if (fd < 0) {
-        LOGW("dup(%d) failed: %s\n", origFd, strerror(errno));
+        ALOGW("dup(%d) failed: %s\n", origFd, strerror(errno));
         jniThrowRuntimeException(env, "dup() failed");
         return;
     }
 
     FILE* fp = fdopen(fd, "w");
     if (fp == NULL) {
-        LOGW("fdopen(%d) failed: %s\n", fd, strerror(errno));
+        ALOGW("fdopen(%d) failed: %s\n", fd, strerror(errno));
         close(fd);
         jniThrowRuntimeException(env, "fdopen() failed");
         return;
diff --git a/core/jni/android_os_StatFs.cpp b/core/jni/android_os_StatFs.cpp
index c658aa5..79d8fef 100644
--- a/core/jni/android_os_StatFs.cpp
+++ b/core/jni/android_os_StatFs.cpp
@@ -91,7 +91,7 @@
     // note that stat will contain the new file data corresponding to
     // pathstr
     if (statfs(pathstr, stat) != 0) {
-        LOGE("statfs %s failed, errno: %d", pathstr, errno);
+        ALOGE("statfs %s failed, errno: %d", pathstr, errno);
         delete stat;
         env->SetIntField(thiz, fields.context, 0);
         jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
@@ -146,13 +146,13 @@
 
     clazz = env->FindClass("android/os/StatFs");
     if (clazz == NULL) {
-        LOGE("Can't find android/os/StatFs");
+        ALOGE("Can't find android/os/StatFs");
         return -1;
     }
 
     fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
     if (fields.context == NULL) {
-        LOGE("Can't find StatFs.mNativeContext");
+        ALOGE("Can't find StatFs.mNativeContext");
         return -1;
     }
 
diff --git a/core/jni/android_os_UEventObserver.cpp b/core/jni/android_os_UEventObserver.cpp
index 7f31b00..5639f4f 100644
--- a/core/jni/android_os_UEventObserver.cpp
+++ b/core/jni/android_os_UEventObserver.cpp
@@ -59,7 +59,7 @@
 
     clazz = env->FindClass("android/os/UEventObserver");
     if (clazz == NULL) {
-        LOGE("Can't find android/os/UEventObserver");
+        ALOGE("Can't find android/os/UEventObserver");
         return -1;
     }
 
diff --git a/core/jni/android_server_BluetoothA2dpService.cpp b/core/jni/android_server_BluetoothA2dpService.cpp
index 2bab4b5..d065a9e 100644
--- a/core/jni/android_server_BluetoothA2dpService.cpp
+++ b/core/jni/android_server_BluetoothA2dpService.cpp
@@ -65,7 +65,7 @@
 #ifdef HAVE_BLUETOOTH
     nat = (native_data_t *)calloc(1, sizeof(native_data_t));
     if (NULL == nat) {
-        LOGE("%s: out of memory!", __FUNCTION__);
+        ALOGE("%s: out of memory!", __FUNCTION__);
         return false;
     }
     env->GetJavaVM( &(nat->vm) );
@@ -77,7 +77,7 @@
     dbus_threads_init_default();
     nat->conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
     if (dbus_error_is_set(&err)) {
-        LOGE("Could not get onto the system bus: %s", err.message);
+        ALOGE("Could not get onto the system bus: %s", err.message);
         dbus_error_free(&err);
         return false;
     }
@@ -117,7 +117,7 @@
             LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, reply);
             return NULL;
         } else if (!reply) {
-            LOGE("DBus reply is NULL in function %s", __FUNCTION__);
+            ALOGE("DBus reply is NULL in function %s", __FUNCTION__);
             return NULL;
         }
         DBusMessageIter iter;
@@ -268,7 +268,7 @@
         ALOGV("... ignored");
     }
     if (env->ExceptionCheck()) {
-        LOGE("VM Exception occurred while handling %s.%s (%s) in %s,"
+        ALOGE("VM Exception occurred while handling %s.%s (%s) in %s,"
              " leaving for VM",
              dbus_message_get_interface(msg), dbus_message_get_member(msg),
              dbus_message_get_path(msg), __FUNCTION__);
@@ -326,7 +326,7 @@
 int register_android_server_BluetoothA2dpService(JNIEnv *env) {
     jclass clazz = env->FindClass("android/server/BluetoothA2dpService");
     if (clazz == NULL) {
-        LOGE("Can't find android/server/BluetoothA2dpService");
+        ALOGE("Can't find android/server/BluetoothA2dpService");
         return -1;
     }
 
diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index 100fca4..9292fc0 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -161,7 +161,7 @@
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = (native_data_t *)calloc(1, sizeof(native_data_t));
     if (NULL == nat) {
-        LOGE("%s: out of memory!", __FUNCTION__);
+        ALOGE("%s: out of memory!", __FUNCTION__);
         return;
     }
     memset(nat, 0, sizeof(native_data_t));
@@ -176,7 +176,7 @@
         dbus_threads_init_default();
         nat->conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
         if (dbus_error_is_set(&err)) {
-            LOGE("%s: Could not get onto the system bus!", __FUNCTION__);
+            ALOGE("%s: Could not get onto the system bus!", __FUNCTION__);
             dbus_error_free(&err);
         }
         dbus_connection_set_exit_on_disconnect(nat->conn, FALSE);
@@ -321,7 +321,7 @@
         msg = dbus_message_new_method_call("org.bluez", "/",
               "org.bluez.Manager", "DefaultAdapter");
         if (!msg) {
-            LOGE("%s: Can't allocate new method call for get_adapter_path!",
+            ALOGE("%s: Can't allocate new method call for get_adapter_path!",
                   __FUNCTION__);
             return NULL;
         }
@@ -346,7 +346,7 @@
         }
     }
     if (attempt == 1000) {
-        LOGE("Time out while trying to get Adapter path, is bluetoothd up ?");
+        ALOGE("Time out while trying to get Adapter path, is bluetoothd up ?");
         goto failed;
     }
 
@@ -375,7 +375,7 @@
 
     if (!dbus_connection_register_object_path(nat->conn, agent_path,
             &agent_vtable, nat)) {
-        LOGE("%s: Can't register object path %s for agent!",
+        ALOGE("%s: Can't register object path %s for agent!",
               __FUNCTION__, agent_path);
         return -1;
     }
@@ -387,7 +387,7 @@
     msg = dbus_message_new_method_call("org.bluez", nat->adapter,
           "org.bluez.Adapter", "RegisterAgent");
     if (!msg) {
-        LOGE("%s: Can't allocate new method call for agent!",
+        ALOGE("%s: Can't allocate new method call for agent!",
               __FUNCTION__);
         return -1;
     }
@@ -400,7 +400,7 @@
     dbus_message_unref(msg);
 
     if (!reply) {
-        LOGE("%s: Can't register agent!", __FUNCTION__);
+        ALOGE("%s: Can't register agent!", __FUNCTION__);
         if (dbus_error_is_set(&err)) {
             LOG_AND_FREE_DBUS_ERROR(&err);
         }
@@ -442,7 +442,7 @@
             }
             dbus_message_unref(msg);
         } else {
-             LOGE("%s: Can't create new method call!", __FUNCTION__);
+             ALOGE("%s: Can't create new method call!", __FUNCTION__);
         }
 
         dbus_connection_flush(nat->conn);
@@ -629,7 +629,7 @@
             return;
         }
     }
-    LOGW("WatchRemove given with unknown watch");
+    ALOGW("WatchRemove given with unknown watch");
 }
 
 static void *eventLoopMain(void *ptr) {
@@ -717,7 +717,7 @@
     nat->running = false;
 
     if (nat->pollData) {
-        LOGW("trying to start EventLoop a second time!");
+        ALOGW("trying to start EventLoop a second time!");
         pthread_mutex_unlock( &(nat->thread_mutex) );
         return JNI_FALSE;
     }
@@ -725,14 +725,14 @@
     nat->pollData = (struct pollfd *)malloc(sizeof(struct pollfd) *
             DEFAULT_INITIAL_POLLFD_COUNT);
     if (!nat->pollData) {
-        LOGE("out of memory error starting EventLoop!");
+        ALOGE("out of memory error starting EventLoop!");
         goto done;
     }
 
     nat->watchData = (DBusWatch **)malloc(sizeof(DBusWatch *) *
             DEFAULT_INITIAL_POLLFD_COUNT);
     if (!nat->watchData) {
-        LOGE("out of memory error starting EventLoop!");
+        ALOGE("out of memory error starting EventLoop!");
         goto done;
     }
 
@@ -744,7 +744,7 @@
     nat->pollMemberCount = 1;
 
     if (socketpair(AF_LOCAL, SOCK_STREAM, 0, &(nat->controlFdR))) {
-        LOGE("Error getting BT control socket");
+        ALOGE("Error getting BT control socket");
         goto done;
     }
     nat->pollData[0].fd = nat->controlFdR;
@@ -756,7 +756,7 @@
     nat->me = env->NewGlobalRef(object);
 
     if (setUpEventLoop(nat) != JNI_TRUE) {
-        LOGE("failure setting up Event Loop!");
+        ALOGE("failure setting up Event Loop!");
         goto done;
     }
 
@@ -1097,7 +1097,7 @@
         ALOGV("%s: not interested (not a method call).", __FUNCTION__);
         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
     }
-    LOGI("%s: Received method %s:%s", __FUNCTION__,
+    ALOGI("%s: Received method %s:%s", __FUNCTION__,
          dbus_message_get_interface(msg), dbus_message_get_member(msg));
 
     if (nat == NULL) return DBUS_HANDLER_RESULT_HANDLED;
@@ -1111,7 +1111,7 @@
         // reply
         DBusMessage *reply = dbus_message_new_method_return(msg);
         if (!reply) {
-            LOGE("%s: Cannot create message reply\n", __FUNCTION__);
+            ALOGE("%s: Cannot create message reply\n", __FUNCTION__);
             goto failure;
         }
         dbus_connection_send(nat->conn, reply, NULL);
@@ -1126,7 +1126,7 @@
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_STRING, &uuid,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for Authorize() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for Authorize() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1145,7 +1145,7 @@
         if (!dbus_message_get_args(msg, NULL,
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for OutOfBandData available() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for OutOfBandData available() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1160,7 +1160,7 @@
         if (available) {
             DBusMessage *reply = dbus_message_new_method_return(msg);
             if (!reply) {
-                LOGE("%s: Cannot create message reply\n", __FUNCTION__);
+                ALOGE("%s: Cannot create message reply\n", __FUNCTION__);
                 goto failure;
             }
             dbus_connection_send(nat->conn, reply, NULL);
@@ -1169,7 +1169,7 @@
             DBusMessage *reply = dbus_message_new_error(msg,
                     "org.bluez.Error.DoesNotExist", "OutofBand data not available");
             if (!reply) {
-                LOGE("%s: Cannot create message reply\n", __FUNCTION__);
+                ALOGE("%s: Cannot create message reply\n", __FUNCTION__);
                 goto failure;
             }
             dbus_connection_send(nat->conn, reply, NULL);
@@ -1182,7 +1182,7 @@
         if (!dbus_message_get_args(msg, NULL,
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for RequestPinCode() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for RequestPinCode() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1197,7 +1197,7 @@
         if (!dbus_message_get_args(msg, NULL,
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for RequestPasskey() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for RequestPasskey() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1212,7 +1212,7 @@
         if (!dbus_message_get_args(msg, NULL,
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for RequestOobData() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for RequestOobData() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1229,7 +1229,7 @@
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_UINT32, &passkey,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for RequestPasskey() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for RequestPasskey() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1247,7 +1247,7 @@
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_UINT32, &passkey,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for RequestConfirmation() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for RequestConfirmation() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1263,7 +1263,7 @@
         if (!dbus_message_get_args(msg, NULL,
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_INVALID)) {
-            LOGE("%s: Invalid arguments for RequestPairingConsent() method", __FUNCTION__);
+            ALOGE("%s: Invalid arguments for RequestPairingConsent() method", __FUNCTION__);
             goto failure;
         }
 
@@ -1277,7 +1277,7 @@
         // reply
         DBusMessage *reply = dbus_message_new_method_return(msg);
         if (!reply) {
-            LOGE("%s: Cannot create message reply\n", __FUNCTION__);
+            ALOGE("%s: Cannot create message reply\n", __FUNCTION__);
             goto failure;
         }
         dbus_connection_send(nat->conn, reply, NULL);
@@ -1354,7 +1354,7 @@
             ALOGV("... error = %s (%s)\n", err.name, err.message);
             result = BOND_RESULT_AUTH_TIMEOUT;
         } else {
-            LOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message);
+            ALOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message);
             result = BOND_RESULT_ERROR;
         }
     }
@@ -1445,7 +1445,7 @@
         !dbus_message_get_args(msg, &err,
                                DBUS_TYPE_INT32, &channel,
                                DBUS_TYPE_INVALID)) {
-        LOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message);
+        ALOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message);
         dbus_error_free(&err);
     }
 
diff --git a/core/jni/android_server_BluetoothService.cpp b/core/jni/android_server_BluetoothService.cpp
index 9dbe774..c475261 100644
--- a/core/jni/android_server_BluetoothService.cpp
+++ b/core/jni/android_server_BluetoothService.cpp
@@ -89,7 +89,7 @@
     native_data_t *nat =
             (native_data_t *)(env->GetIntField(object, field_mNativeData));
     if (nat == NULL || nat->conn == NULL) {
-        LOGE("Uninitialized native data\n");
+        ALOGE("Uninitialized native data\n");
         return NULL;
     }
     return nat;
@@ -113,7 +113,7 @@
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = (native_data_t *)calloc(1, sizeof(native_data_t));
     if (NULL == nat) {
-        LOGE("%s: out of memory!", __FUNCTION__);
+        ALOGE("%s: out of memory!", __FUNCTION__);
         return false;
     }
     nat->env = env;
@@ -124,7 +124,7 @@
     dbus_threads_init_default();
     nat->conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
     if (dbus_error_is_set(&err)) {
-        LOGE("Could not get onto the system bus: %s", err.message);
+        ALOGE("Could not get onto the system bus: %s", err.message);
         dbus_error_free(&err);
         return false;
     }
@@ -162,7 +162,7 @@
 
     if (!dbus_connection_register_object_path(nat->conn, device_agent_path,
                                               &agent_vtable, event_nat)) {
-        LOGE("%s: Can't register object path %s for remote device agent!",
+        ALOGE("%s: Can't register object path %s for remote device agent!",
                                __FUNCTION__, device_agent_path);
         return JNI_FALSE;
     }
@@ -332,7 +332,7 @@
                    env->SetByteArrayRegion(byteArray, 16, 16, randomizer);
                }
            } else {
-               LOGE("readAdapterOutOfBandDataNative: Hash len = %d, R len = %d",
+               ALOGE("readAdapterOutOfBandDataNative: Hash len = %d, R len = %d",
                                                                   hash_len, r_len);
            }
        } else {
@@ -466,7 +466,7 @@
             if (dbus_error_is_set(&err)) {
                 LOG_AND_FREE_DBUS_ERROR(&err);
             } else
-                LOGE("DBus reply is NULL in function %s", __FUNCTION__);
+                ALOGE("DBus reply is NULL in function %s", __FUNCTION__);
             return JNI_FALSE;
         } else {
             result = JNI_TRUE;
@@ -540,7 +540,7 @@
         }
 
         if (!reply) {
-            LOGE("%s: Cannot create message reply to RequestPasskeyConfirmation or"
+            ALOGE("%s: Cannot create message reply to RequestPasskeyConfirmation or"
                   "RequestPairingConsent to D-Bus\n", __FUNCTION__);
             dbus_message_unref(msg);
             return JNI_FALSE;
@@ -564,7 +564,7 @@
         DBusMessage *msg = (DBusMessage *)nativeData;
         DBusMessage *reply = dbus_message_new_method_return(msg);
         if (!reply) {
-            LOGE("%s: Cannot create message reply to return Passkey code to "
+            ALOGE("%s: Cannot create message reply to return Passkey code to "
                  "D-Bus\n", __FUNCTION__);
             dbus_message_unref(msg);
             return JNI_FALSE;
@@ -593,7 +593,7 @@
         jbyte *h_ptr = env->GetByteArrayElements(hash, NULL);
         jbyte *r_ptr = env->GetByteArrayElements(randomizer, NULL);
         if (!reply) {
-            LOGE("%s: Cannot create message reply to return remote OOB data to "
+            ALOGE("%s: Cannot create message reply to return remote OOB data to "
                  "D-Bus\n", __FUNCTION__);
             dbus_message_unref(msg);
             return JNI_FALSE;
@@ -631,7 +631,7 @@
                     "org.bluez.Error.Rejected", "Authorization rejected");
         }
         if (!reply) {
-            LOGE("%s: Cannot create message reply D-Bus\n", __FUNCTION__);
+            ALOGE("%s: Cannot create message reply D-Bus\n", __FUNCTION__);
             dbus_message_unref(msg);
             return JNI_FALSE;
         }
@@ -654,7 +654,7 @@
         DBusMessage *msg = (DBusMessage *)nativeData;
         DBusMessage *reply = dbus_message_new_method_return(msg);
         if (!reply) {
-            LOGE("%s: Cannot create message reply to return PIN code to "
+            ALOGE("%s: Cannot create message reply to return PIN code to "
                  "D-Bus\n", __FUNCTION__);
             dbus_message_unref(msg);
             return JNI_FALSE;
@@ -685,7 +685,7 @@
         DBusMessage *reply = dbus_message_new_error(msg,
                 "org.bluez.Error.Canceled", "Pairing User Input was canceled");
         if (!reply) {
-            LOGE("%s: Cannot create message reply to return cancelUserInput to"
+            ALOGE("%s: Cannot create message reply to return cancelUserInput to"
                  "D-BUS\n", __FUNCTION__);
             dbus_message_unref(msg);
             return JNI_FALSE;
@@ -722,7 +722,7 @@
             if (dbus_error_is_set(&err)) {
                 LOG_AND_FREE_DBUS_ERROR(&err);
             } else
-                LOGE("DBus reply is NULL in function %s", __FUNCTION__);
+                ALOGE("DBus reply is NULL in function %s", __FUNCTION__);
             return NULL;
         }
         env->PushLocalFrame(PROPERTIES_NREFS);
@@ -756,7 +756,7 @@
             if (dbus_error_is_set(&err)) {
                 LOG_AND_FREE_DBUS_ERROR(&err);
             } else
-                LOGE("DBus reply is NULL in function %s", __FUNCTION__);
+                ALOGE("DBus reply is NULL in function %s", __FUNCTION__);
             return NULL;
         }
         env->PushLocalFrame(PROPERTIES_NREFS);
@@ -788,7 +788,7 @@
                                            get_adapter_path(env, object),
                                            DBUS_ADAPTER_IFACE, "SetProperty");
         if (!msg) {
-            LOGE("%s: Can't allocate new method call for GetProperties!",
+            ALOGE("%s: Can't allocate new method call for GetProperties!",
                   __FUNCTION__);
             env->ReleaseStringUTFChars(key, c_key);
             return JNI_FALSE;
@@ -856,7 +856,7 @@
         msg = dbus_message_new_method_call(BLUEZ_DBUS_BASE_IFC,
                                           c_path, DBUS_DEVICE_IFACE, "SetProperty");
         if (!msg) {
-            LOGE("%s: Can't allocate new method call for device SetProperty!", __FUNCTION__);
+            ALOGE("%s: Can't allocate new method call for device SetProperty!", __FUNCTION__);
             env->ReleaseStringUTFChars(key, c_key);
             env->ReleaseStringUTFChars(path, c_path);
             return JNI_FALSE;
@@ -985,7 +985,7 @@
         if (handleArray) {
             env->SetIntArrayRegion(handleArray, 0, len, handles);
         } else {
-            LOGE("Null array in extract_handles");
+            ALOGE("Null array in extract_handles");
         }
     } else {
         LOG_AND_FREE_DBUS_ERROR(&err);
@@ -1169,7 +1169,7 @@
         const char *c_role = env->GetStringUTFChars(src_role, NULL);
         const char *c_bridge = env->GetStringUTFChars(bridge, NULL);
         if (value) {
-            LOGE("setBluetoothTetheringNative true");
+            ALOGE("setBluetoothTetheringNative true");
             reply = dbus_func_args(env, nat->conn,
                                   get_adapter_path(env, object),
                                   DBUS_NETWORKSERVER_IFACE,
@@ -1178,7 +1178,7 @@
                                   DBUS_TYPE_STRING, &c_bridge,
                                   DBUS_TYPE_INVALID);
         } else {
-            LOGE("setBluetoothTetheringNative false");
+            ALOGE("setBluetoothTetheringNative false");
             reply = dbus_func_args(env, nat->conn,
                                   get_adapter_path(env, object),
                                   DBUS_NETWORKSERVER_IFACE,
@@ -1198,7 +1198,7 @@
                                        jstring dstRole) {
     ALOGV("%s", __FUNCTION__);
 #ifdef HAVE_BLUETOOTH
-    LOGE("connectPanDeviceNative");
+    ALOGE("connectPanDeviceNative");
     native_data_t *nat = get_native_data(env, object);
     jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
     struct event_loop_native_data_t *eventLoopNat =
@@ -1230,7 +1230,7 @@
                                      jstring path) {
     ALOGV("%s", __FUNCTION__);
 #ifdef HAVE_BLUETOOTH
-    LOGE("disconnectPanDeviceNative");
+    ALOGE("disconnectPanDeviceNative");
     native_data_t *nat = get_native_data(env, object);
     jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
     struct event_loop_native_data_t *eventLoopNat =
@@ -1260,7 +1260,7 @@
                                                 jstring iface) {
     ALOGV("%s", __FUNCTION__);
 #ifdef HAVE_BLUETOOTH
-    LOGE("disconnectPanServerDeviceNative");
+    ALOGE("disconnectPanServerDeviceNative");
     native_data_t *nat = get_native_data(env, object);
     jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
     struct event_loop_native_data_t *eventLoopNat =
@@ -1316,7 +1316,7 @@
                                             "CreateApplication");
 
         if (msg == NULL) {
-            LOGE("Could not allocate D-Bus message object!");
+            ALOGE("Could not allocate D-Bus message object!");
             return NULL;
         }
 
@@ -1379,7 +1379,7 @@
                                             "CreateApplication");
 
         if (msg == NULL) {
-            LOGE("Could not allocate D-Bus message object!");
+            ALOGE("Could not allocate D-Bus message object!");
             return NULL;
         }
 
@@ -1487,7 +1487,7 @@
 
 static jboolean destroyChannelNative(JNIEnv *env, jobject object, jstring devicePath,
                                      jstring channelPath, jint code) {
-    LOGE("%s", __FUNCTION__);
+    ALOGE("%s", __FUNCTION__);
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = get_native_data(env, object);
     jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
@@ -1517,7 +1517,7 @@
 }
 
 static jstring getMainChannelNative(JNIEnv *env, jobject object, jstring devicePath) {
-    LOGE("%s", __FUNCTION__);
+    ALOGE("%s", __FUNCTION__);
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = get_native_data(env, object);
     if (nat) {
@@ -1551,7 +1551,7 @@
 }
 
 static jstring getChannelApplicationNative(JNIEnv *env, jobject object, jstring channelPath) {
-    LOGE("%s", __FUNCTION__);
+    ALOGE("%s", __FUNCTION__);
 #ifdef HAVE_BLUETOOTH
     native_data_t *nat = get_native_data(env, object);
     if (nat) {
@@ -1647,7 +1647,7 @@
 
         int flags = fcntl(fd, F_GETFL);
         if (flags < 0) {
-           LOGE("Can't get flags with fcntl(): %s (%d)",
+           ALOGE("Can't get flags with fcntl(): %s (%d)",
                                 strerror(errno), errno);
            releaseChannelFdNative(env, object, channelPath);
            close(fd);
@@ -1657,7 +1657,7 @@
         flags &= ~O_NONBLOCK;
         int status = fcntl(fd, F_SETFL, flags);
         if (status < 0) {
-           LOGE("Can't set flags with fcntl(): %s (%d)",
+           ALOGE("Can't set flags with fcntl(): %s (%d)",
                strerror(errno), errno);
            releaseChannelFdNative(env, object, channelPath);
            close(fd);
diff --git a/core/jni/android_server_NetworkManagementSocketTagger.cpp b/core/jni/android_server_NetworkManagementSocketTagger.cpp
index c279ced..12beff7 100644
--- a/core/jni/android_server_NetworkManagementSocketTagger.cpp
+++ b/core/jni/android_server_NetworkManagementSocketTagger.cpp
@@ -36,7 +36,7 @@
   int userFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
 
   if (env->ExceptionOccurred() != NULL) {
-    LOGE("Can't get FileDescriptor num");
+    ALOGE("Can't get FileDescriptor num");
     return (jint)-1;
   }
 
@@ -52,7 +52,7 @@
   int userFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
 
   if (env->ExceptionOccurred() != NULL) {
-    LOGE("Can't get FileDescriptor num");
+    ALOGE("Can't get FileDescriptor num");
     return (jint)-1;
   }
 
diff --git a/core/jni/android_server_Watchdog.cpp b/core/jni/android_server_Watchdog.cpp
index 9e0ed47..6726c14 100644
--- a/core/jni/android_server_Watchdog.cpp
+++ b/core/jni/android_server_Watchdog.cpp
@@ -48,7 +48,7 @@
         write(outFd, "\n", 1);
         close(stackFd);
     } else {
-        LOGE("Unable to open stack of tid %d : %d (%s)", tid, errno, strerror(errno));
+        ALOGE("Unable to open stack of tid %d : %d (%s)", tid, errno, strerror(errno));
     }
 }
 
@@ -56,7 +56,7 @@
     char buf[128];
     DIR* taskdir;
 
-    LOGI("dumpKernelStacks");
+    ALOGI("dumpKernelStacks");
     if (!pathStr) {
         jniThrowException(env, "java/lang/IllegalArgumentException", "Null path");
         return;
@@ -67,7 +67,7 @@
     int outFd = open(path, O_WRONLY | O_APPEND | O_CREAT,
         S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
     if (outFd < 0) {
-        LOGE("Unable to open stack dump file: %d (%s)", errno, strerror(errno));
+        ALOGE("Unable to open stack dump file: %d (%s)", errno, strerror(errno));
         goto done;
     }
 
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 9e3d04a..990a617 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -194,8 +194,8 @@
 
     if ((tagstr == NULL) || (msgstr == NULL)) {
         env->ExceptionClear();      /* assume exception (OOM?) was thrown */
-        LOGE("Unable to call Log.e()\n");
-        LOGE("%s", msg);
+        ALOGE("Unable to call Log.e()\n");
+        ALOGE("%s", msg);
         goto bail;
     }
 
@@ -203,7 +203,7 @@
         gLogOffsets.mClass, gLogOffsets.mLogE, tagstr, msgstr, excep);
     if (env->ExceptionCheck()) {
         /* attempting to log the failure has failed */
-        LOGW("Failed trying to log exception, msg='%s'\n", msg);
+        ALOGW("Failed trying to log exception, msg='%s'\n", msg);
         env->ExceptionClear();
     }
 
@@ -221,7 +221,7 @@
         env->Throw(excep);
         vm->DetachCurrentThread();
         sleep(60);
-        LOGE("Forcefully exiting");
+        ALOGE("Forcefully exiting");
         exit(1);
         *((int *) 1) = 1;
     }
@@ -463,11 +463,11 @@
                     (jstring) env->CallObjectMethod(objClassRef.get(), gClassOffsets.mGetName));
             ScopedUtfChars nameUtf(env, nameRef.get());
             if (nameUtf.c_str() != NULL) {
-                LOGW("BinderProxy is being destroyed but the application did not call "
+                ALOGW("BinderProxy is being destroyed but the application did not call "
                         "unlinkToDeath to unlink all of its death recipients beforehand.  "
                         "Releasing leaked death recipient: %s", nameUtf.c_str());
             } else {
-                LOGW("BinderProxy being destroyed; unable to get DR object name");
+                ALOGW("BinderProxy being destroyed; unable to get DR object name");
                 env->ExceptionClear();
             }
         }
@@ -476,7 +476,7 @@
 protected:
     virtual ~JavaDeathRecipient()
     {
-        //LOGI("Removing death ref: recipient=%p\n", mObject);
+        //ALOGI("Removing death ref: recipient=%p\n", mObject);
         android_atomic_dec(&gNumDeathRefs);
         JNIEnv* env = javavm_to_jnienv(mVM);
         if (mObject != NULL) {
@@ -630,7 +630,7 @@
             env->GetIntField(obj, gBinderProxyOffsets.mObject);
     }
 
-    LOGW("ibinderForJavaObject: %p is not a Binder object", obj);
+    ALOGW("ibinderForJavaObject: %p is not a Binder object", obj);
     return NULL;
 }
 
@@ -699,7 +699,7 @@
             jniThrowException(env, "java/lang/RuntimeException", "Unknown transaction code");
             break;
         case FAILED_TRANSACTION:
-            LOGE("!!! FAILED BINDER TRANSACTION !!!");
+            ALOGE("!!! FAILED BINDER TRANSACTION !!!");
             // TransactionTooLargeException is a checked exception, only throw from certain methods.
             // FIXME: Transaction too large is the most common reason for FAILED_TRANSACTION
             //        but it is not the only one.  The Binder driver can return BR_FAILED_REPLY
@@ -715,7 +715,7 @@
                     "Not allowed to write file descriptors here");
             break;
         default:
-            LOGE("Unknown binder error code. 0x%x", err);
+            ALOGE("Unknown binder error code. 0x%x", err);
             String8 msg;
             msg.appendFormat("Unknown binder error code. 0x%x", err);
             // RemoteException is a checked exception, only throw from certain methods.
@@ -976,7 +976,7 @@
     jint len = strlen(str);
     int space_needed = 1 + sizeof(len) + len;
     if (end - *pos < space_needed) {
-        LOGW("not enough space for string. remain=%d; needed=%d",
+        ALOGW("not enough space for string. remain=%d; needed=%d",
              (end - *pos), space_needed);
         return false;
     }
@@ -992,7 +992,7 @@
 static bool push_eventlog_int(char** pos, const char* end, jint val) {
     int space_needed = 1 + sizeof(val);
     if (end - *pos < space_needed) {
-        LOGW("not enough space for int.  remain=%d; needed=%d",
+        ALOGW("not enough space for int.  remain=%d; needed=%d",
              (end - *pos), space_needed);
         return false;
     }
@@ -1117,7 +1117,7 @@
     IBinder* target = (IBinder*)
         env->GetIntField(obj, gBinderProxyOffsets.mObject);
     if (target == NULL) {
-        LOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
+        ALOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
         assert(false);
     }
 
@@ -1149,7 +1149,7 @@
     IBinder* target = (IBinder*)
         env->GetIntField(obj, gBinderProxyOffsets.mObject);
     if (target == NULL) {
-        LOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
+        ALOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
         return JNI_FALSE;
     }
 
@@ -1635,7 +1635,7 @@
     int fd = jniGetFDFromFileDescriptor(env, object);
     if (fd >= 0) {
         jniSetFileDescriptorOfFD(env, object, -1);
-        //LOGI("Closing ParcelFileDescriptor %d\n", fd);
+        //ALOGI("Closing ParcelFileDescriptor %d\n", fd);
         close(fd);
     }
 }
@@ -1658,7 +1658,7 @@
     if (own) {
         Parcel* parcel = parcelForJavaObject(env, clazz);
         if (parcel != NULL) {
-            //LOGI("Parcel.freeBuffer() called for C++ Parcel %p\n", parcel);
+            //ALOGI("Parcel.freeBuffer() called for C++ Parcel %p\n", parcel);
             parcel->freeData();
         }
     }
@@ -1669,17 +1669,17 @@
     Parcel* parcel = (Parcel*)parcelInt;
     int own = 0;
     if (!parcel) {
-        //LOGI("Initializing obj %p: creating new Parcel\n", clazz);
+        //ALOGI("Initializing obj %p: creating new Parcel\n", clazz);
         own = 1;
         parcel = new Parcel;
     } else {
-        //LOGI("Initializing obj %p: given existing Parcel %p\n", clazz, parcel);
+        //ALOGI("Initializing obj %p: given existing Parcel %p\n", clazz, parcel);
     }
     if (parcel == NULL) {
         jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
         return;
     }
-    //LOGI("Initializing obj %p from C++ Parcel %p, own=%d\n", clazz, parcel, own);
+    //ALOGI("Initializing obj %p from C++ Parcel %p, own=%d\n", clazz, parcel, own);
     env->SetIntField(clazz, gParcelOffsets.mOwnObject, own);
     env->SetIntField(clazz, gParcelOffsets.mObject, (int)parcel);
 }
@@ -1690,11 +1690,11 @@
     if (own) {
         Parcel* parcel = parcelForJavaObject(env, clazz);
         env->SetIntField(clazz, gParcelOffsets.mObject, 0);
-        //LOGI("Destroying obj %p: deleting C++ Parcel %p\n", clazz, parcel);
+        //ALOGI("Destroying obj %p: deleting C++ Parcel %p\n", clazz, parcel);
         delete parcel;
     } else {
         env->SetIntField(clazz, gParcelOffsets.mObject, 0);
-        //LOGI("Destroying obj %p: leaving C++ Parcel %p\n", clazz);
+        //ALOGI("Destroying obj %p: leaving C++ Parcel %p\n", clazz);
     }
 }
 
diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp
index 5d51110..a3981ce 100644
--- a/core/jni/android_util_EventLog.cpp
+++ b/core/jni/android_util_EventLog.cpp
@@ -267,7 +267,7 @@
     for (int i = 0; i < NELEM(gClasses); ++i) {
         jclass clazz = env->FindClass(gClasses[i].name);
         if (clazz == NULL) {
-            LOGE("Can't find class: %s\n", gClasses[i].name);
+            ALOGE("Can't find class: %s\n", gClasses[i].name);
             return -1;
         }
         *gClasses[i].clazz = (jclass) env->NewGlobalRef(clazz);
@@ -277,7 +277,7 @@
         *gFields[i].id = env->GetFieldID(
                 *gFields[i].c, gFields[i].name, gFields[i].ft);
         if (*gFields[i].id == NULL) {
-            LOGE("Can't find field: %s\n", gFields[i].name);
+            ALOGE("Can't find field: %s\n", gFields[i].name);
             return -1;
         }
     }
@@ -286,7 +286,7 @@
         *gMethods[i].id = env->GetMethodID(
                 *gMethods[i].c, gMethods[i].name, gMethods[i].mt);
         if (*gMethods[i].id == NULL) {
-            LOGE("Can't find method: %s\n", gMethods[i].name);
+            ALOGE("Can't find method: %s\n", gMethods[i].name);
             return -1;
         }
     }
diff --git a/core/jni/android_util_FileObserver.cpp b/core/jni/android_util_FileObserver.cpp
index 65e7130..0327d8c 100644
--- a/core/jni/android_util_FileObserver.cpp
+++ b/core/jni/android_util_FileObserver.cpp
@@ -67,7 +67,7 @@
             if (errno == EINTR)
                 continue;
 
-            LOGE("***** ERROR! android_os_fileobserver_observe() got a short event!");
+            ALOGE("***** ERROR! android_os_fileobserver_observe() got a short event!");
             return;
         }
         
@@ -148,14 +148,14 @@
 
     if (clazz == NULL)
 	{
-        LOGE("Can't find android/os/FileObserver$ObserverThread");
+        ALOGE("Can't find android/os/FileObserver$ObserverThread");
         return -1;
     }
 
     method_onEvent = env->GetMethodID(clazz, "onEvent", "(IILjava/lang/String;)V");
     if (method_onEvent == NULL)
     {
-        LOGE("Can't find FileObserver.onEvent(int, int, String)");
+        ALOGE("Can't find FileObserver.onEvent(int, int, String)");
         return -1;
     }
 
diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp
index 2c7bb84..a57aad7 100644
--- a/core/jni/android_util_Log.cpp
+++ b/core/jni/android_util_Log.cpp
@@ -139,7 +139,7 @@
     jclass clazz = env->FindClass("android/util/Log");
 
     if (clazz == NULL) {
-        LOGE("Can't find android/util/Log");
+        ALOGE("Can't find android/util/Log");
         return -1;
     }
 
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index bc7e47c..2c494ac 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -227,7 +227,7 @@
         t_pid = atoi(de->d_name);
 
         if (!t_pid) {
-            LOGE("Error getting pid for '%s'\n", de->d_name);
+            ALOGE("Error getting pid for '%s'\n", de->d_name);
             continue;
         }
 
@@ -274,7 +274,7 @@
         if (pid == androidGetTid()) {
             void* bgOk = pthread_getspecific(gBgKey);
             if (bgOk == ((void*)0xbaad)) {
-                LOGE("Thread marked fg-only put self in background!");
+                ALOGE("Thread marked fg-only put self in background!");
                 jniThrowException(env, "java/lang/SecurityException", "May not put this thread into background");
                 return;
             }
@@ -291,7 +291,7 @@
         }
     }
 
-    //LOGI("Setting priority of %d: %d, getpriority returns %d\n",
+    //ALOGI("Setting priority of %d: %d, getpriority returns %d\n",
     //     pid, pri, getpriority(PRIO_PROCESS, pid));
 }
 
@@ -310,7 +310,7 @@
     if (errno != 0) {
         signalExceptionForPriorityError(env, clazz, errno);
     }
-    //LOGI("Returning priority of %d: %d\n", pid, pri);
+    //ALOGI("Returning priority of %d: %d\n", pid, pri);
     return pri;
 }
 
@@ -362,7 +362,7 @@
 
 static int pid_compare(const void* v1, const void* v2)
 {
-    //LOGI("Compare %d vs %d\n", *((const jint*)v1), *((const jint*)v2));
+    //ALOGI("Compare %d vs %d\n", *((const jint*)v1), *((const jint*)v2));
     return *((const jint*)v1) - *((const jint*)v2);
 }
 
@@ -371,7 +371,7 @@
     int fd = open("/proc/meminfo", O_RDONLY);
 
     if (fd < 0) {
-        LOGW("Unable to open /proc/meminfo");
+        ALOGW("Unable to open /proc/meminfo");
         return -1;
     }
 
@@ -380,7 +380,7 @@
     close(fd);
 
     if (len < 0) {
-        LOGW("Unable to read /proc/meminfo");
+        ALOGW("Unable to read /proc/meminfo");
         return -1;
     }
     buffer[len] = 0;
@@ -420,7 +420,7 @@
 void android_os_Process_readProcLines(JNIEnv* env, jobject clazz, jstring fileStr,
                                       jobjectArray reqFields, jlongArray outFields)
 {
-    //LOGI("getMemInfo: %p %p", reqFields, outFields);
+    //ALOGI("getMemInfo: %p %p", reqFields, outFields);
 
     if (fileStr == NULL || reqFields == NULL || outFields == NULL) {
         jniThrowNullPointerException(env, NULL);
@@ -447,7 +447,7 @@
         jobject obj = env->GetObjectArrayElement(reqFields, i);
         if (obj != NULL) {
             const char* str8 = env->GetStringUTFChars((jstring)obj, NULL);
-            //LOGI("String at %d: %p = %s", i, obj, str8);
+            //ALOGI("String at %d: %p = %s", i, obj, str8);
             if (str8 == NULL) {
                 jniThrowNullPointerException(env, "Element in reqFields");
                 return;
@@ -465,7 +465,7 @@
         return;
     }
 
-    //LOGI("Clearing %d sizes", count);
+    //ALOGI("Clearing %d sizes", count);
     for (i=0; i<count; i++) {
         sizesArray[i] = 0;
     }
@@ -479,7 +479,7 @@
         close(fd);
 
         if (len < 0) {
-            LOGW("Unable to read %s", file.string());
+            ALOGW("Unable to read %s", file.string());
             len = 0;
         }
         buffer[len] = 0;
@@ -489,7 +489,7 @@
         char* p = buffer;
         while (*p && foundCount < count) {
             bool skipToEol = true;
-            //LOGI("Parsing at: %s", p);
+            //ALOGI("Parsing at: %s", p);
             for (i=0; i<count; i++) {
                 const String8& field = fields[i];
                 if (strncmp(p, field.string(), field.length()) == 0) {
@@ -504,7 +504,7 @@
                     }
                     char* end;
                     sizesArray[i] = strtoll(num, &end, 10);
-                    //LOGI("Field %s = %d", field.string(), sizesArray[i]);
+                    //ALOGI("Field %s = %d", field.string(), sizesArray[i]);
                     foundCount++;
                     break;
                 }
@@ -521,10 +521,10 @@
 
         free(buffer);
     } else {
-        LOGW("Unable to open %s", file.string());
+        ALOGW("Unable to open %s", file.string());
     }
 
-    //LOGI("Done!");
+    //ALOGI("Done!");
     env->ReleaseLongArrayElements(outFields, sizesArray, 0);
 }
 
@@ -570,7 +570,7 @@
 
         char* end;
         int pid = strtol(entry->d_name, &end, 10);
-        //LOGI("File %s pid=%d\n", entry->d_name, pid);
+        //ALOGI("File %s pid=%d\n", entry->d_name, pid);
         if (curPos >= curCount) {
             jsize newCount = (curCount == 0) ? 10 : (curCount*2);
             jintArray newArray = env->NewIntArray(newCount);
@@ -693,7 +693,7 @@
             }
         }
 
-        //LOGI("Field %d: %d-%d dest=%d mode=0x%x\n", i, start, end, di, mode);
+        //ALOGI("Field %d: %d-%d dest=%d mode=0x%x\n", i, start, end, di, mode);
 
         if ((mode&(PROC_OUT_FLOAT|PROC_OUT_LONG|PROC_OUT_STRING)) != 0) {
             char c = buffer[end];
@@ -759,7 +759,7 @@
     env->ReleaseStringUTFChars(file, file8);
 
     if (fd < 0) {
-        //LOGW("Unable to open process file: %s\n", file8);
+        //ALOGW("Unable to open process file: %s\n", file8);
         return JNI_FALSE;
     }
 
@@ -768,7 +768,7 @@
     close(fd);
 
     if (len < 0) {
-        //LOGW("Unable to open process file: %s fd=%d\n", file8, fd);
+        //ALOGW("Unable to open process file: %s fd=%d\n", file8, fd);
         return JNI_FALSE;
     }
     buffer[len] = 0;
@@ -792,7 +792,7 @@
 void android_os_Process_sendSignal(JNIEnv* env, jobject clazz, jint pid, jint sig)
 {
     if (pid > 0) {
-        LOGI("Sending signal. PID: %d SIG: %d", pid, sig);
+        ALOGI("Sending signal. PID: %d SIG: %d", pid, sig);
         kill(pid, sig);
     }
 }
diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp
index f61795d..25397b5 100644
--- a/core/jni/android_view_DisplayEventReceiver.cpp
+++ b/core/jni/android_view_DisplayEventReceiver.cpp
@@ -84,7 +84,7 @@
 status_t NativeDisplayEventReceiver::initialize() {
     status_t result = mReceiver.initCheck();
     if (result) {
-        LOGW("Failed to initialize display event receiver, status=%d", result);
+        ALOGW("Failed to initialize display event receiver, status=%d", result);
         return result;
     }
 
@@ -103,13 +103,13 @@
         }
 
         if (n < 0) {
-            LOGW("Failed to drain events from display event receiver, status=%d", status_t(n));
+            ALOGW("Failed to drain events from display event receiver, status=%d", status_t(n));
             return status_t(n);
         }
 
         status_t status = mReceiver.requestNextVsync();
         if (status) {
-            LOGW("Failed to request next vsync, status=%d", status);
+            ALOGW("Failed to request next vsync, status=%d", status);
             return status;
         }
 
@@ -131,14 +131,14 @@
     sp<NativeDisplayEventReceiver> r = static_cast<NativeDisplayEventReceiver*>(data);
 
     if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) {
-        LOGE("Display event receiver pipe was closed or an error occurred.  "
+        ALOGE("Display event receiver pipe was closed or an error occurred.  "
                 "events=0x%x", events);
         r->mFdCallbackRegistered = false;
         return 0; // remove the callback
     }
 
     if (!(events & ALOOPER_EVENT_INPUT)) {
-        LOGW("Received spurious callback for unhandled poll event.  "
+        ALOGW("Received spurious callback for unhandled poll event.  "
                 "events=0x%x", events);
         return 1; // keep the callback
     }
@@ -177,7 +177,7 @@
     ALOGV("receiver %p ~ Returned from vsync handler.", this);
 
     if (env->ExceptionCheck()) {
-        LOGE("An exception occurred while dispatching a vsync event.");
+        ALOGE("An exception occurred while dispatching a vsync event.");
         LOGE_EX(env);
         env->ExceptionClear();
     }
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 383d5ae..23ad154 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -491,7 +491,7 @@
 #if USE_TEXT_LAYOUT_CACHE
     value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, flags);
     if (value == NULL) {
-        LOGE("Cannot get TextLayoutCache value for text = '%s'",
+        ALOGE("Cannot get TextLayoutCache value for text = '%s'",
                 String8(text, count).string());
         return;
     }
@@ -513,7 +513,7 @@
 #if USE_TEXT_LAYOUT_CACHE
     value = TextLayoutCache::getInstance().getValue(paint, text, start, count, contextCount, flags);
     if (value == NULL) {
-        LOGE("Cannot get TextLayoutCache value for text = '%s'",
+        ALOGE("Cannot get TextLayoutCache value for text = '%s'",
                 String8(text + start, count).string());
         return;
     }
diff --git a/core/jni/android_view_InputChannel.cpp b/core/jni/android_view_InputChannel.cpp
index 5fcf8fa..fce432b 100644
--- a/core/jni/android_view_InputChannel.cpp
+++ b/core/jni/android_view_InputChannel.cpp
@@ -101,7 +101,7 @@
     NativeInputChannel* nativeInputChannel =
             android_view_InputChannel_getNativeInputChannel(env, inputChannelObj);
     if (nativeInputChannel == NULL) {
-        LOGW("Cannot set dispose callback because input channel object has not been initialized.");
+        ALOGW("Cannot set dispose callback because input channel object has not been initialized.");
     } else {
         nativeInputChannel->setDisposeCallback(callback, data);
     }
@@ -161,7 +161,7 @@
             android_view_InputChannel_getNativeInputChannel(env, obj);
     if (nativeInputChannel) {
         if (finalized) {
-            LOGW("Input channel object '%s' was finalized without being disposed!",
+            ALOGW("Input channel object '%s' was finalized without being disposed!",
                     nativeInputChannel->getInputChannel()->getName().string());
         }
 
@@ -202,17 +202,17 @@
             int32_t parcelAshmemFd = parcel->readFileDescriptor();
             int32_t ashmemFd = dup(parcelAshmemFd);
             if (ashmemFd < 0) {
-                LOGE("Error %d dup ashmem fd %d.", errno, parcelAshmemFd);
+                ALOGE("Error %d dup ashmem fd %d.", errno, parcelAshmemFd);
             }
             int32_t parcelReceivePipeFd = parcel->readFileDescriptor();
             int32_t receivePipeFd = dup(parcelReceivePipeFd);
             if (receivePipeFd < 0) {
-                LOGE("Error %d dup receive pipe fd %d.", errno, parcelReceivePipeFd);
+                ALOGE("Error %d dup receive pipe fd %d.", errno, parcelReceivePipeFd);
             }
             int32_t parcelSendPipeFd = parcel->readFileDescriptor();
             int32_t sendPipeFd = dup(parcelSendPipeFd);
             if (sendPipeFd < 0) {
-                LOGE("Error %d dup send pipe fd %d.", errno, parcelSendPipeFd);
+                ALOGE("Error %d dup send pipe fd %d.", errno, parcelSendPipeFd);
             }
             if (ashmemFd < 0 || receivePipeFd < 0 || sendPipeFd < 0) {
                 if (ashmemFd >= 0) ::close(ashmemFd);
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index c8f1f51..ed0acce 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -95,7 +95,7 @@
 status_t NativeInputEventReceiver::initialize() {
     status_t result = mInputConsumer.initialize();
     if (result) {
-        LOGW("Failed to initialize input consumer for input channel '%s', status=%d",
+        ALOGW("Failed to initialize input consumer for input channel '%s', status=%d",
                 getInputChannelName(), result);
         return result;
     }
@@ -114,12 +114,12 @@
 
         status_t status = mInputConsumer.sendFinishedSignal(handled);
         if (status) {
-            LOGW("Failed to send finished signal on channel '%s'.  status=%d",
+            ALOGW("Failed to send finished signal on channel '%s'.  status=%d",
                     getInputChannelName(), status);
         }
         return status;
     } else {
-        LOGW("Ignoring attempt to finish input event while no event is in progress.");
+        ALOGW("Ignoring attempt to finish input event while no event is in progress.");
         return OK;
     }
 }
@@ -128,26 +128,26 @@
     sp<NativeInputEventReceiver> r = static_cast<NativeInputEventReceiver*>(data);
 
     if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) {
-        LOGE("channel '%s' ~ Publisher closed input channel or an error occurred.  "
+        ALOGE("channel '%s' ~ Publisher closed input channel or an error occurred.  "
                 "events=0x%x", r->getInputChannelName(), events);
         return 0; // remove the callback
     }
 
     if (!(events & ALOOPER_EVENT_INPUT)) {
-        LOGW("channel '%s' ~ Received spurious callback for unhandled poll event.  "
+        ALOGW("channel '%s' ~ Received spurious callback for unhandled poll event.  "
                 "events=0x%x", r->getInputChannelName(), events);
         return 1;
     }
 
     status_t status = r->mInputConsumer.receiveDispatchSignal();
     if (status) {
-        LOGE("channel '%s' ~ Failed to receive dispatch signal.  status=%d",
+        ALOGE("channel '%s' ~ Failed to receive dispatch signal.  status=%d",
                 r->getInputChannelName(), status);
         return 0; // remove the callback
     }
 
     if (r->mEventInProgress) {
-        LOGW("channel '%s' ~ Publisher sent spurious dispatch signal.",
+        ALOGW("channel '%s' ~ Publisher sent spurious dispatch signal.",
                 r->getInputChannelName());
         return 1;
     }
@@ -155,7 +155,7 @@
     InputEvent* inputEvent;
     status = r->mInputConsumer.consume(&r->mInputEventFactory, &inputEvent);
     if (status) {
-        LOGW("channel '%s' ~ Failed to consume input event.  status=%d",
+        ALOGW("channel '%s' ~ Failed to consume input event.  status=%d",
                 r->getInputChannelName(), status);
         r->mInputConsumer.sendFinishedSignal(false);
         return 1;
@@ -188,7 +188,7 @@
     }
 
     if (!inputEventObj) {
-        LOGW("channel '%s' ~ Failed to obtain event object.",
+        ALOGW("channel '%s' ~ Failed to obtain event object.",
                 r->getInputChannelName());
         r->mInputConsumer.sendFinishedSignal(false);
         return 1;
@@ -206,7 +206,7 @@
 #endif
 
     if (env->ExceptionCheck()) {
-        LOGE("channel '%s' ~ An exception occurred while dispatching an event.",
+        ALOGE("channel '%s' ~ An exception occurred while dispatching an event.",
                 r->getInputChannelName());
         LOGE_EX(env);
         env->ExceptionClear();
diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp
index 4b04b8b..27469a2 100644
--- a/core/jni/android_view_KeyEvent.cpp
+++ b/core/jni/android_view_KeyEvent.cpp
@@ -63,7 +63,7 @@
             event->getSource(),
             NULL);
     if (env->ExceptionCheck()) {
-        LOGE("An exception occurred while obtaining a key event.");
+        ALOGE("An exception occurred while obtaining a key event.");
         LOGE_EX(env);
         env->ExceptionClear();
         return NULL;
@@ -93,7 +93,7 @@
 status_t android_view_KeyEvent_recycle(JNIEnv* env, jobject eventObj) {
     env->CallVoidMethod(eventObj, gKeyEventClassInfo.recycle);
     if (env->ExceptionCheck()) {
-        LOGW("An exception occurred while recycling a key event.");
+        ALOGW("An exception occurred while recycling a key event.");
         LOGW_EX(env);
         env->ExceptionClear();
         return UNKNOWN_ERROR;
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp
index fef06b2..2def1d1 100644
--- a/core/jni/android_view_MotionEvent.cpp
+++ b/core/jni/android_view_MotionEvent.cpp
@@ -80,7 +80,7 @@
     jobject eventObj = env->CallStaticObjectMethod(gMotionEventClassInfo.clazz,
             gMotionEventClassInfo.obtain);
     if (env->ExceptionCheck() || !eventObj) {
-        LOGE("An exception occurred while obtaining a motion event.");
+        ALOGE("An exception occurred while obtaining a motion event.");
         LOGE_EX(env);
         env->ExceptionClear();
         return NULL;
@@ -99,7 +99,7 @@
 status_t android_view_MotionEvent_recycle(JNIEnv* env, jobject eventObj) {
     env->CallVoidMethod(eventObj, gMotionEventClassInfo.recycle);
     if (env->ExceptionCheck()) {
-        LOGW("An exception occurred while recycling a motion event.");
+        ALOGW("An exception occurred while recycling a motion event.");
         LOGW_EX(env);
         env->ExceptionClear();
         return UNKNOWN_ERROR;
diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp
index 091341a..8b6dc60 100644
--- a/core/jni/android_view_PointerIcon.cpp
+++ b/core/jni/android_view_PointerIcon.cpp
@@ -43,7 +43,7 @@
     jobject pointerIconObj = env->CallStaticObjectMethod(gPointerIconClassInfo.clazz,
             gPointerIconClassInfo.getSystemIcon, contextObj, style);
     if (env->ExceptionCheck()) {
-        LOGW("An exception occurred while getting a pointer icon with style %d.", style);
+        ALOGW("An exception occurred while getting a pointer icon with style %d.", style);
         LOGW_EX(env);
         env->ExceptionClear();
         return NULL;
@@ -62,7 +62,7 @@
     jobject loadedPointerIconObj = env->CallObjectMethod(pointerIconObj,
             gPointerIconClassInfo.load, contextObj);
     if (env->ExceptionCheck() || !loadedPointerIconObj) {
-        LOGW("An exception occurred while loading a pointer icon.");
+        ALOGW("An exception occurred while loading a pointer icon.");
         LOGW_EX(env);
         env->ExceptionClear();
         return UNKNOWN_ERROR;
diff --git a/core/jni/android_view_VelocityTracker.cpp b/core/jni/android_view_VelocityTracker.cpp
index 516e421..0da90d7 100644
--- a/core/jni/android_view_VelocityTracker.cpp
+++ b/core/jni/android_view_VelocityTracker.cpp
@@ -154,7 +154,7 @@
         jobject eventObj) {
     const MotionEvent* event = android_view_MotionEvent_getNativePtr(env, eventObj);
     if (!event) {
-        LOGW("nativeAddMovement failed because MotionEvent was finalized.");
+        ALOGW("nativeAddMovement failed because MotionEvent was finalized.");
         return;
     }
 
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index 62ea277..a5b85b4 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -216,18 +216,18 @@
 
     if (strlcpy(localTmpFileName + nativeLibPath.size(), TMP_FILE_PATTERN,
                     TMP_FILE_PATTERN_LEN - nativeLibPath.size()) != TMP_FILE_PATTERN_LEN) {
-        LOGI("Couldn't allocate temporary file name for library");
+        ALOGI("Couldn't allocate temporary file name for library");
         return INSTALL_FAILED_INTERNAL_ERROR;
     }
 
     int fd = mkstemp(localTmpFileName);
     if (fd < 0) {
-        LOGI("Couldn't open temporary file name: %s: %s\n", localTmpFileName, strerror(errno));
+        ALOGI("Couldn't open temporary file name: %s: %s\n", localTmpFileName, strerror(errno));
         return INSTALL_FAILED_CONTAINER_ERROR;
     }
 
     if (!zipFile->uncompressEntry(zipEntry, fd)) {
-        LOGI("Failed uncompressing %s to %s\n", fileName, localTmpFileName);
+        ALOGI("Failed uncompressing %s to %s\n", fileName, localTmpFileName);
         close(fd);
         unlink(localTmpFileName);
         return INSTALL_FAILED_CONTAINER_ERROR;
@@ -241,7 +241,7 @@
     times[1].tv_sec = modTime;
     times[0].tv_usec = times[1].tv_usec = 0;
     if (utimes(localTmpFileName, times) < 0) {
-        LOGI("Couldn't change modification time on %s: %s\n", localTmpFileName, strerror(errno));
+        ALOGI("Couldn't change modification time on %s: %s\n", localTmpFileName, strerror(errno));
         unlink(localTmpFileName);
         return INSTALL_FAILED_CONTAINER_ERROR;
     }
@@ -249,14 +249,14 @@
     // Set the mode to 755
     static const mode_t mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP |  S_IXGRP | S_IROTH | S_IXOTH;
     if (chmod(localTmpFileName, mode) < 0) {
-        LOGI("Couldn't change permissions on %s: %s\n", localTmpFileName, strerror(errno));
+        ALOGI("Couldn't change permissions on %s: %s\n", localTmpFileName, strerror(errno));
         unlink(localTmpFileName);
         return INSTALL_FAILED_CONTAINER_ERROR;
     }
 
     // Finally, rename it to the final name.
     if (rename(localTmpFileName, localFileName) < 0) {
-        LOGI("Couldn't rename %s to %s: %s\n", localTmpFileName, localFileName, strerror(errno));
+        ALOGI("Couldn't rename %s to %s: %s\n", localTmpFileName, localFileName, strerror(errno));
         unlink(localTmpFileName);
         return INSTALL_FAILED_CONTAINER_ERROR;
     }
@@ -276,7 +276,7 @@
     ZipFileRO zipFile;
 
     if (zipFile.open(filePath.c_str()) != NO_ERROR) {
-        LOGI("Couldn't open APK %s\n", filePath.c_str());
+        ALOGI("Couldn't open APK %s\n", filePath.c_str());
         return INSTALL_FAILED_INVALID_APK;
     }
 
@@ -308,7 +308,7 @@
         }
 
         const char* lastSlash = strrchr(fileName, '/');
-        LOG_ASSERT(lastSlash != NULL, "last slash was null somehow for %s\n", fileName);
+        ALOG_ASSERT(lastSlash != NULL, "last slash was null somehow for %s\n", fileName);
 
         // Check to make sure the CPU ABI of this file is one we support.
         const char* cpuAbiOffset = fileName + APK_LIB_LEN;
diff --git a/core/res/res/drawable-large-nodpi/default_wallpaper.jpg b/core/res/res/drawable-large-nodpi/default_wallpaper.jpg
index 7d7cdbb..355286e 100644
--- a/core/res/res/drawable-large-nodpi/default_wallpaper.jpg
+++ b/core/res/res/drawable-large-nodpi/default_wallpaper.jpg
Binary files differ
diff --git a/core/res/res/drawable-nodpi/default_wallpaper.jpg b/core/res/res/drawable-nodpi/default_wallpaper.jpg
index 5ba522f..7e92243 100644
--- a/core/res/res/drawable-nodpi/default_wallpaper.jpg
+++ b/core/res/res/drawable-nodpi/default_wallpaper.jpg
Binary files differ
diff --git a/core/res/res/drawable-xlarge-nodpi/default_wallpaper.jpg b/core/res/res/drawable-xlarge-nodpi/default_wallpaper.jpg
index 7d7cdbb..355286e 100644
--- a/core/res/res/drawable-xlarge-nodpi/default_wallpaper.jpg
+++ b/core/res/res/drawable-xlarge-nodpi/default_wallpaper.jpg
Binary files differ
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index af59198..fea8523 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2066,6 +2066,8 @@
             <enum name="ltr" value="4" />
             <!-- The paragraph direction is right to left. -->
             <enum name="rtl" value="5" />
+            <!-- The paragraph direction is coming from the system Locale. -->
+            <enum name="locale" value="6" />
         </attr>
     </declare-styleable>
 
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 80aef215..dc45c408 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2568,6 +2568,8 @@
     <string name="report">Report</string>
     <!-- Button allowing the user to choose to wait for an application that is not responding to become responsive again. -->
     <string name="wait">Wait</string>
+    <!-- Text of the alert that is displayed when a web page is not responding. [CHAR-LIMIT=NONE] -->
+    <string name="webpage_unresponsive">The page has become unresponsive.\n\nDo you want to close it?</string>
     <!-- [CHAR LIMIT=25] Title of the alert when application launches on top of another. -->
     <string name="launch_warning_title">App redirected</string>
     <!-- [CHAR LIMIT=50] Title of the alert when application launches on top of another. -->
diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk
index b2ebb08..b81f774 100644
--- a/core/tests/coretests/Android.mk
+++ b/core/tests/coretests/Android.mk
@@ -1,4 +1,14 @@
-LOCAL_PATH:= $(call my-dir)
+ACTUAL_LOCAL_PATH := $(call my-dir)
+
+# this var will hold all the test apk module names later.
+FrameworkCoreTests_all_apks :=
+
+# We have to include the subdir makefiles first
+# so that FrameworkCoreTests_all_apks will be populated correctly.
+include $(call all-makefiles-under,$(ACTUAL_LOCAL_PATH))
+
+LOCAL_PATH := $(ACTUAL_LOCAL_PATH)
+
 include $(CLEAR_VARS)
 
 # We only want this apk build for tests.
@@ -18,6 +28,21 @@
 
 LOCAL_CERTIFICATE := platform
 
-include $(BUILD_PACKAGE)
+# intermediate dir to include all the test apks as raw resource
+FrameworkCoreTests_intermediates := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME))/test_apks/res
+LOCAL_RESOURCE_DIR := $(FrameworkCoreTests_intermediates) $(LOCAL_PATH)/res
 
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(BUILD_PACKAGE)
+# Rules to copy all the test apks to the intermediate raw resource directory
+FrameworkCoreTests_all_apks_res := $(addprefix $(FrameworkCoreTests_intermediates)/raw/, \
+    $(foreach a, $(FrameworkCoreTests_all_apks), $(patsubst FrameworkCoreTests_%,%,$(a))))
+
+$(FrameworkCoreTests_all_apks_res): $(FrameworkCoreTests_intermediates)/raw/%: $(call intermediates-dir-for,APPS,FrameworkCoreTests_%)/package.apk | $(ACP)
+	$(call copy-file-to-new-target)
+
+# Use R_file_stamp as dependency because we want the test apks in place before the R.java is generated.
+$(R_file_stamp) : $(FrameworkCoreTests_all_apks_res)
+
+FrameworkCoreTests_all_apks :=
+FrameworkCoreTests_intermediates :=
+FrameworkCoreTests_all_apks_res :=
diff --git a/core/tests/coretests/apks/Android.mk b/core/tests/coretests/apks/Android.mk
index 4670e21..98c0c2a 100644
--- a/core/tests/coretests/apks/Android.mk
+++ b/core/tests/coretests/apks/Android.mk
@@ -1,5 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
+FrameworkCoreTests_BUILD_PACKAGE := $(LOCAL_PATH)/FrameworkCoreTests_apk.mk
+
 # build sub packages
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/core/tests/coretests/apks/FrameworkCoreTests_apk.mk b/core/tests/coretests/apks/FrameworkCoreTests_apk.mk
new file mode 100644
index 0000000..ac545ca
--- /dev/null
+++ b/core/tests/coretests/apks/FrameworkCoreTests_apk.mk
@@ -0,0 +1,12 @@
+
+LOCAL_MODULE_TAGS := tests
+
+# Disable dexpreopt.
+LOCAL_DEX_PREOPT := false
+
+# Make sure every package name gets the FrameworkCoreTests_ prefix.
+LOCAL_PACKAGE_NAME := FrameworkCoreTests_$(LOCAL_PACKAGE_NAME)
+
+FrameworkCoreTests_all_apks += $(LOCAL_PACKAGE_NAME)
+
+include $(BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_decl_perm/Android.mk b/core/tests/coretests/apks/install_decl_perm/Android.mk
index c38e981..86370c8 100644
--- a/core/tests/coretests/apks/install_decl_perm/Android.mk
+++ b/core/tests/coretests/apks/install_decl_perm/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_decl_perm
+LOCAL_PACKAGE_NAME := install_decl_perm
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_loc_auto/Android.mk b/core/tests/coretests/apks/install_loc_auto/Android.mk
index 2deb978..6435f36 100644
--- a/core/tests/coretests/apks/install_loc_auto/Android.mk
+++ b/core/tests/coretests/apks/install_loc_auto/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_loc_auto
+LOCAL_PACKAGE_NAME := install_loc_auto
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_loc_internal/Android.mk b/core/tests/coretests/apks/install_loc_internal/Android.mk
index 784bf0a..8cc8b8e 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.mk
+++ b/core/tests/coretests/apks/install_loc_internal/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_loc_internal
+LOCAL_PACKAGE_NAME := install_loc_internal
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_loc_sdcard/Android.mk b/core/tests/coretests/apks/install_loc_sdcard/Android.mk
index 4eea322..e1411c2 100644
--- a/core/tests/coretests/apks/install_loc_sdcard/Android.mk
+++ b/core/tests/coretests/apks/install_loc_sdcard/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_loc_sdcard
+LOCAL_PACKAGE_NAME := install_loc_sdcard
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_loc_unspecified/Android.mk b/core/tests/coretests/apks/install_loc_unspecified/Android.mk
index 206c99f..0741d04 100644
--- a/core/tests/coretests/apks/install_loc_unspecified/Android.mk
+++ b/core/tests/coretests/apks/install_loc_unspecified/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_loc_unspecified
+LOCAL_PACKAGE_NAME := install_loc_unspecified
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_use_perm_good/Android.mk b/core/tests/coretests/apks/install_use_perm_good/Android.mk
index 1a07fc8..e2661a1 100644
--- a/core/tests/coretests/apks/install_use_perm_good/Android.mk
+++ b/core/tests/coretests/apks/install_use_perm_good/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_use_perm_good
+LOCAL_PACKAGE_NAME := install_use_perm_good
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_uses_feature/Android.mk b/core/tests/coretests/apks/install_uses_feature/Android.mk
index c0a5067..b60d734 100644
--- a/core/tests/coretests/apks/install_uses_feature/Android.mk
+++ b/core/tests/coretests/apks/install_uses_feature/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_uses_feature
+LOCAL_PACKAGE_NAME := install_uses_feature
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_verifier_bad/Android.mk b/core/tests/coretests/apks/install_verifier_bad/Android.mk
index b50cfd04..a6f9d5b 100644
--- a/core/tests/coretests/apks/install_verifier_bad/Android.mk
+++ b/core/tests/coretests/apks/install_verifier_bad/Android.mk
@@ -1,11 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_verifier_bad
+LOCAL_PACKAGE_NAME := install_verifier_bad
 
-include $(BUILD_PACKAGE)
-
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_verifier_good/Android.mk b/core/tests/coretests/apks/install_verifier_good/Android.mk
index a48a80e..6f2d44f 100644
--- a/core/tests/coretests/apks/install_verifier_good/Android.mk
+++ b/core/tests/coretests/apks/install_verifier_good/Android.mk
@@ -1,10 +1,8 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := tests
-
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_verifier_good
+LOCAL_PACKAGE_NAME := install_verifier_good
 
-include $(BUILD_PACKAGE)
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/res/raw/install_decl_perm b/core/tests/coretests/res/raw/install_decl_perm
deleted file mode 100644
index af05d81..0000000
--- a/core/tests/coretests/res/raw/install_decl_perm
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/res/raw/install_loc_auto b/core/tests/coretests/res/raw/install_loc_auto
deleted file mode 100644
index 63bf35c..0000000
--- a/core/tests/coretests/res/raw/install_loc_auto
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/res/raw/install_loc_internal b/core/tests/coretests/res/raw/install_loc_internal
deleted file mode 100644
index 5178803..0000000
--- a/core/tests/coretests/res/raw/install_loc_internal
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/res/raw/install_loc_sdcard b/core/tests/coretests/res/raw/install_loc_sdcard
deleted file mode 100644
index 013a414..0000000
--- a/core/tests/coretests/res/raw/install_loc_sdcard
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/res/raw/install_loc_unspecified b/core/tests/coretests/res/raw/install_loc_unspecified
deleted file mode 100644
index 06981f4..0000000
--- a/core/tests/coretests/res/raw/install_loc_unspecified
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/res/raw/install_use_perm_good b/core/tests/coretests/res/raw/install_use_perm_good
deleted file mode 100644
index a7eb32f..0000000
--- a/core/tests/coretests/res/raw/install_use_perm_good
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/res/raw/install_uses_feature b/core/tests/coretests/res/raw/install_uses_feature
deleted file mode 100644
index eeeb309..0000000
--- a/core/tests/coretests/res/raw/install_uses_feature
+++ /dev/null
Binary files differ
diff --git a/core/tests/coretests/src/android/widget/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java
index 5f65faf..d4dbced 100644
--- a/core/tests/coretests/src/android/widget/TextViewTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewTest.java
@@ -86,6 +86,9 @@
 
         tv.setTextDirection(View.TEXT_DIRECTION_RTL);
         assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
+        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection());
     }
 
     @SmallTest
@@ -93,81 +96,13 @@
         TextView tv = new TextView(getActivity());
         tv.setText("this is a test");
 
-        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-    }
-
-    @SmallTest
-    public void testGetResolvedTextDirectionLtrWithInheritance() {
-        LinearLayout ll = new LinearLayout(getActivity());
-        ll.setTextDirection(View.TEXT_DIRECTION_RTL);
-
-        TextView tv = new TextView(getActivity());
-        tv.setText("this is a test");
-        ll.addView(tv);
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
 
         tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
 
         tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-    }
-
-    @SmallTest
-    public void testGetResolvedTextDirectionRtl() {
-        TextView tv = new TextView(getActivity());
-        tv.setText("\u05DD\u05DE"); // hebrew
-
-        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-    }
-
-    @SmallTest
-    public void testGetResolvedTextDirectionRtlWithInheritance() {
-        LinearLayout ll = new LinearLayout(getActivity());
-
-        TextView tv = new TextView(getActivity());
-        tv.setText("\u05DD\u05DE"); // hebrew
-        ll.addView(tv);
-
-        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
 
         tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
         assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
@@ -178,14 +113,99 @@
         tv.setTextDirection(View.TEXT_DIRECTION_RTL);
         assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
 
+        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
+        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
+    }
+
+    @SmallTest
+    public void testGetResolvedTextDirectionLtrWithInheritance() {
+        LinearLayout ll = new LinearLayout(getActivity());
+        ll.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
+
+        TextView tv = new TextView(getActivity());
+        tv.setText("this is a test");
+        ll.addView(tv);
+
+        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
+        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
+        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
+        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
+        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
+        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
+    }
+
+    @SmallTest
+    public void testGetResolvedTextDirectionRtl() {
+        TextView tv = new TextView(getActivity());
+        tv.setText("\u05DD\u05DE"); // hebrew
+
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
+        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
+        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
+        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
+        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
+    }
+
+    @SmallTest
+    public void testGetResolvedTextDirectionRtlWithInheritance() {
+        LinearLayout ll = new LinearLayout(getActivity());
+        ll.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
+
+        TextView tv = new TextView(getActivity());
+        tv.setText("\u05DD\u05DE"); // hebrew
+        ll.addView(tv);
+
+        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
+        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
+        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
+        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
+        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
+
         // Force to RTL text direction on the layout
         ll.setTextDirection(View.TEXT_DIRECTION_RTL);
 
         tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
 
         tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
 
         tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
         assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
@@ -195,6 +215,9 @@
 
         tv.setTextDirection(View.TEXT_DIRECTION_RTL);
         assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
+
+        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
+        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
     }
 
     @SmallTest
diff --git a/docs/html/design/building-blocks/buttons.html b/docs/html/design/building-blocks/buttons.html
new file mode 100644
index 0000000..cc43fcb
--- /dev/null
+++ b/docs/html/design/building-blocks/buttons.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Buttons
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Buttons</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>A button consists of text and/or an image that clearly communicates what action will occur when the
+user touches it. Android supports two different types of buttons: <em>basic buttons</em> and <em>borderless
+buttons</em>. Both can contain text labels and/or images.</p>
+
+<div style="text-align: center">
+  <img src="../static/content/buttons_basic.png">
+</div>
+
+<h2>Basic Buttons</h2>
+<p>Basic buttons are traditional buttons with borders and background. Android supports two styles for
+basic buttons: default and small. Default buttons have slightly larger font size and are optimized
+for display outside of form content. Small buttons are intended for display alongside other content.
+They have a smaller font and smaller minimum height. Use small buttons in forms where they need to
+align with other UI elements.</p>
+
+<img src="../static/content/buttons_default_small.png">
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <div class="figure-caption">
+      Default buttons in Holo Dark &amp; Light.
+    </div>
+  </div>
+  <div class="layout-content-col span-6">
+    <div class="figure-caption">
+      Small buttons in Holo Dark &amp; Light.
+    </div>
+  </div>
+</div>
+
+<h2>Borderless Buttons</h2>
+<p>Borderless buttons resemble basic buttons except that they have no borders or background. You can
+use borderless buttons with both icons and text. Borderless buttons are visually more lightweight
+than basic buttons and integrate nicely with other content.</p>
+
+<img src="../static/content/buttons_borderless.png">
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/dialogs.html b/docs/html/design/building-blocks/dialogs.html
new file mode 100644
index 0000000..fc00780
--- /dev/null
+++ b/docs/html/design/building-blocks/dialogs.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Dialogs
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Dialogs</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Dialogs prompt the user for decisions or additional information required by the app to continue a
+task. Such requests can range from simple Cancel/OK decisions to more complex layouts asking the
+user to adjust settings or enter text.</p>
+
+<img src="../static/content/dialogs_main.png">
+
+<div class="with-callouts">
+
+<ol>
+<li>
+<h4>Optional title region</h4>
+<p>The title introduces the content of your dialog. It can, for example, identify the name of a
+ setting that the user is about to change, or request a decision.</p>
+</li>
+<li>
+<h4>Content area</h4>
+<p>Dialog content varies widely. For settings dialogs, a dialog may contain UI elements such as
+ sliders, text fields, checkboxes, or radio buttons that allow the user to change app or system
+ settings. In other cases, such as alerts, the content may consist solely of text that provides
+ further context for a user decision.</p>
+</li>
+<li>
+<h4>Action buttons</h4>
+<p>Action buttons are typically Cancel and/or OK, with OK indicating the preferred or most likely
+ action. However, if the options consist of specific actions such as Close or Wait rather than
+ a confirmation or cancellation of the action described in the content, then all the buttons
+ should be active verbs. As a rule, the dismissive action of a dialog is always on the left
+ whereas the affirmative actions are on the right.</p>
+</li>
+</ol>
+
+</div>
+
+<img src="../static/content/dialogs_examples.png">
+<div class="figure-caption">
+  Samples of typical dialog use in Android.
+</div>
+
+<h2 id="alerts">Alerts</h2>
+
+<p>Alerts inform the user about a situation that requires their confirmation or acknowledgement before
+proceeding. They differ slightly in appearance based upon the severity and impact of the message
+conveyed.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/dialogs_w_no_title.png">
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Alerts without title bars</h4>
+<p>Most alerts don't need titles. Usually the decision doesn't have a severe impact and can be summed
+up succinctly in a sentence or two. The content area should either ask a question (such as "Delete
+this conversation?") or make a clear statement whose relationship to the action buttons is obvious.</p>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/dialogs_w_title.png">
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Alerts with title bars</h4>
+<p>Use alerts with title bars sparingly. They are appropriate only when a high-risk operation involving
+potential loss of data, connectivity, extra charges, and so on requires a clear question or
+statement (the title) and some additional explanation (in the content area).</p>
+<p>Keep the question or statement short: for example, "Erase USB storage?" Avoid apologies. A user
+should be able to skip the content completely and still have a clear idea of what choices are
+available based on the title and the text of the action buttons.</p>
+
+  </div>
+</div>
+
+
+<h2 id="popups">Popups</h2>
+
+<p>Popups are lightweight version of dialogs that require a single selection from the user. Popups
+don't have have explicit buttons that accept or cancel the operation. Instead, making a selection
+advances the workflow, and simply touching outside the popup dismisses it.</p>
+
+<img src="../static/content/dialogs_popups_example.png">
+
+
+<h2 id="toasts">Toasts</h2>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <div class="vspace size-6"></div>
+
+<p>Toasts provide lightweight feedback about an operation in a small popup. For example, navigating
+away from an email before you send it triggers a "Draft saved" toast to let you know that you can
+continue editing later. Toasts automatically disappear after a timeout.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/dialogs_toasts.png">
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/grid-lists.html b/docs/html/design/building-blocks/grid-lists.html
new file mode 100644
index 0000000..b4cfdcb
--- /dev/null
+++ b/docs/html/design/building-blocks/grid-lists.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Grid Lists
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Grid Lists</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<img src="../static/content/gridview_overview.png">
+
+<p>Grid lists are an alternative to standard list views. They are best suited for showing data sets
+that represent themselves through images. In contrast to simple lists, grid lists may scroll either
+vertically or horizontally.</p>
+
+
+
+<h2 id="generic_grid">Generic Grids</h2>
+
+
+<p>The items in a grid list are arranged in two dimensions, one of which is fixed when scrolling
+content. The scrolling direction dictates the ordering of the items within the grid list. Since the
+scrolling direction is not deterministic, make it easy for the user to determine the orientation by
+cutting off grid items to communicate where the overflow is located.</p>
+<p>Avoid creating grid lists that scroll in two dimensions.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/gridview_vertical.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Vertical scrolling</h4>
+<p>Vertically scrolling grid list items are sorted in traditional western reading direction:
+left-to-right and top-down. When displaying the list, cut off the items in the bottom row to
+communicate that the user can scroll the list down to show additional items. Be sure to retain this
+scheme when the user rotates the screen.</p>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/gridview_horizontal.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Horizontal scrolling</h4>
+<p>Horizontally scrolling lists fix the vertical axis of the item grid. Compared to vertically
+scrolling lists, the sorting changes slightly to a top-down and left-to-right arrangement. Employ
+the same technique of cutting off the items in the rightmost column to indicate the scrolling
+direction.</p>
+<p>Don't use scrolling tabs as a means to switch views in conjunction with horizontally scrolling grid
+lists, because the horizontal gesture for view and content navigation will conflict. If you show
+scrolling tabs for view navigation together with a grid list, use vertical grid scrolling for list
+navigation.</p>
+
+  </div>
+</div>
+
+
+<h2 id="with_labels">Grid List with Labels</h2>
+
+<p>Use labels to display additional contextual information for your grid list items.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/gridview_style.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Style</h4>
+<p>Use semi-transparent panels on top of the grid list items to display your labels. This allows you to
+control the contrast and ensures legibility of the labels while letting the content "shine through".</p>
+
+  </div>
+</div>
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/index.html b/docs/html/design/building-blocks/index.html
new file mode 100644
index 0000000..c99d85c
--- /dev/null
+++ b/docs/html/design/building-blocks/index.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Building Blocks
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+<style>
+#landing-graphic-container {
+  position: relative;
+}
+
+#text-overlay {
+  position: absolute;
+  left: 10px;
+  top: 472px;
+  width: 450px;
+}
+</style>
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+<div class="layout-content-row content-header just-links">
+  <div class="layout-content-col span-9">&nbsp;</div>
+  <div class="paging-links layout-content-col span-4">
+    <a href="#" class="prev-page-link">Previous</a>
+    <a href="#" class="next-page-link">Next</a>
+  </div>
+</div>
+
+
+          
+
+<div id="landing-graphic-container">
+  <div id="text-overlay">
+    Your inventory of ready-to-use elements for creating outstanding apps.
+    <br><br>
+    <a href="../building-blocks/tabs.html" class="landing-page-link">Tabs</a>
+  </div>
+
+  <a href="../building-blocks/tabs.html">
+    <img src="../static/content/building_blocks_landing.png">
+  </a>
+</div>
+
+
+
+          
+
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/lists.html b/docs/html/design/building-blocks/lists.html
new file mode 100644
index 0000000..914ae9e
--- /dev/null
+++ b/docs/html/design/building-blocks/lists.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Lists
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Lists</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Lists present multiple line items in a vertical arrangement. They can be used for data selection as
+well as drilldown navigation.</p>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row clearfix">
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/lists_main.png">
+
+  </div>
+  <div class="layout-content-col span-4 with-callouts">
+
+<ol>
+<li>
+<h4>Section Divider</h4>
+<p>Use section dividers to organize the content of your list into groups and facilitate scanning.</p>
+</li>
+<li>
+<h4>Line Items</h4>
+<p>List items can accommodate a wide range of data types in different arrangements, including
+ simple single-line items, multi-line items, and custom items with icons, checkboxes, and action
+ buttons.</p>
+</li>
+</ol>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/pickers.html b/docs/html/design/building-blocks/pickers.html
new file mode 100644
index 0000000..4c95a9f
--- /dev/null
+++ b/docs/html/design/building-blocks/pickers.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Pickers
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Pickers</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Pickers provide a simple way to select a single value from a set. In addition to touching the
+up/down arrow buttons, it's possible to set the desired value from the keyboard or via a swipe
+gesture.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-2">&nbsp;</div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/picker_space.png">
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Space considerations</h4>
+<p>Pickers can be used inline on a form, but their relatively large footprint is best suited for
+display in a dialog. For inline display, consider using more compact controls such as text fields or
+spinners.</p>
+
+  </div>
+</div>
+
+<h2>Date and time pickers</h2>
+
+<p>Android provides these as ready-to-use dialogs. Each picker is a dialog with a set of controls for
+entering the parts of the date (month, day, year) or time (hour, minute, AM/PM). Using these in your
+app helps ensure that a user's specification of a data or time input is valid and formatted
+correctly. The format of a time and date picker adjusts automatically to the locale.</p>
+
+<img src="../static/content/picker_datetime.png">
+
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/progress.html b/docs/html/design/building-blocks/progress.html
new file mode 100644
index 0000000..7aae913
--- /dev/null
+++ b/docs/html/design/building-blocks/progress.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Progress and Activity
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+
+
+          
+
+<div class="layout-content-row content-header">
+  <div class="layout-content-col span-9">
+    <h2 id="system">Feedback</h2>
+  </div>
+  <div class="paging-links layout-content-col span-4">
+    <a href="#" class="prev-page-link">Previous</a>
+    <a href="#" class="next-page-link">Next</a>
+  </div>
+</div>
+
+<p>When an operation of interest to the user is taking place over a relatively long period of time,
+provide visual feedback that it's still happening and in the process of being completed.</p>
+<h2>Progress</h2>
+<p>If you know the percentage of the operation that has been completed, use a determinate progress bar
+to give the user a sense of how much longer it will take.</p>
+
+<img src="../static/content/progress_download.png">
+
+<p>The progress bar should always travel from 0% to 100% completion. Avoid setting the bar to a lower
+value than a previous value, or using the same progress bar to represent the progress of multiple
+events, since doing so makes the display meaningless. If you're not sure how long a particular
+operation will take, use an indeterminate progress indicator.</p>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<img src="../static/content/progress_themes.png">
+<div class="figure-caption">
+  Progress bar in Holo Dark and Holo Light.
+</div>
+
+<h2 id="activity">Activity</h2>
+
+<p>If you don't know how much longer an operation will continue, use an indeterminate progress
+indicator. There are two styles available: a flat bar and a circle. Use the one that best fits the
+available space.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/progress_activity.png">
+
+  </div>
+  <div class="layout-content-col span-7 with-callouts">
+
+    <ol>
+      <li class="value-1"><h4>Activity bar (shown with the Holo Dark theme)</h4>
+        <p>
+
+An indeterminate activity bar is used at the start of an application download because Market hasn't
+been able to contact the server yet, and it's not possible to determine how long it will take for
+the download to begin.
+
+        </p>
+      </li>
+    </ol>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/progress_activity2.png">
+
+  </div>
+  <div class="layout-content-col span-7 with-callouts">
+
+    <ol>
+      <li class="value-2"><h4>Activity circle (shown with the Holo Light theme)</h4>
+        <p>
+
+An indeterminate activity circle is used in the Gmail application when a message is being
+loaded because it's not possible to determine how long it will take to download the email.
+
+        </p>
+      </li>
+    </ol>
+
+  </div>
+</div>
+
+<p>You should only use one activity indicator on screen per activity, and it should appropriately sized
+for the surrounding context. For example, the largest activity circle works well when displayed in a
+blank content area, but not in a smaller dialog box.</p>
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/scrolling.html b/docs/html/design/building-blocks/scrolling.html
new file mode 100644
index 0000000..3f1167c
--- /dev/null
+++ b/docs/html/design/building-blocks/scrolling.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Scrolling
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Scrolling</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Scrolling allows the user to navigate to content in the overflow using a swipe gesture. The
+scrolling speed is proportional to the speed of the gesture.</p>
+<h2>Scroll Indicator</h2>
+<p>Appears during scrolling to indicate what portion of the content is currently in view.</p>
+
+<div class="framed-galaxynexus-land-span-13">
+  <video class="play-on-hover" autoplay>
+    <source src="../static/content/scroll_indicator.mp4" type="video/mp4">
+    <source src="../static/content/scroll_indicator.webm" type="video/webm">
+    <source src="../static/content/scroll_indicator.ogv" type="video/ogg">
+  </video>
+</div>
+<div class="figure-caption">
+  <div class="video-instructions">&nbsp;</div>
+</div>
+
+<h2>Index Scrolling</h2>
+<p>In addition to traditional scrolling, a long alphabetical list can also offer index scrolling: a way
+to quickly navigate to the items that begin with a particular letter. With index scrolling, a scroll
+indicator appears even when the user isn't scrolling. Touching or dragging it causes the current
+letter to pop up in a prominent way.</p>
+
+<div class="framed-galaxynexus-land-span-13">
+  <video class="play-on-hover" autoplay>
+    <source src="../static/content/scroll_index.mp4" type="video/mp4">
+    <source src="../static/content/scroll_index.webm" type="video/webm">
+    <source src="../static/content/scroll_index.ogv" type="video/ogg">
+  </video>
+</div>
+<div class="figure-caption">
+  <div class="video-instructions">&nbsp;</div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/seek-bars.html b/docs/html/design/building-blocks/seek-bars.html
new file mode 100644
index 0000000..84cf5d2
--- /dev/null
+++ b/docs/html/design/building-blocks/seek-bars.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Seek Bars and Sliders
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Seek Bars and Sliders</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Interactive sliders make it possible to select a value from a continuous or discrete range of values
+by moving the slider thumb. The smallest value is to the left, the largest to the right. The
+interactive nature of the slider makes it a great choice for settings that reflect intensity levels,
+such as volume, brightness, or color saturation.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/seekbar_example.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<div class="vspace size-2">&nbsp;</div>
+
+<h4>Example</h4>
+<p>Interactive slider to set the ringer volume. The value can either be set through the hardware volume controls or interactively via a gesture.</p>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/seekbar_style.png">
+    <div class="figure-caption">
+      Seek bars in Holo Light &amp; Dark
+    </div>
+
+  </div>
+  <div class="layout-content-col span-4">&nbsp;</div>
+</div>
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/spinners.html b/docs/html/design/building-blocks/spinners.html
new file mode 100644
index 0000000..bf21fe8
--- /dev/null
+++ b/docs/html/design/building-blocks/spinners.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Spinners
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Spinners</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Spinners provide a quick way to select one value from a set. In the default state, a spinner shows
+its currently selected value. Touching the spinner displays a dropdown menu with all other available
+values, from which the user can select a new one.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/spinners_form.png">
+
+<h4>Spinners in forms</h4>
+<p>Spinners are useful for data picking in forms. They are compact and integrate nicely with other
+components. Use spinners in forms for both simple data input and in combination with other input
+fields. For example, a text field might let you edit an email address for a contact, while its
+associated spinner allows you to select whether it's a Home or Work address.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/spinners_actionbar.png">
+
+<h4>Spinners in action bars</h4>
+<p>Use spinners in action bars to switch views. For example, Gmail uses a spinner to permit switching
+between accounts or commonly used labels. Spinners are useful when changing the view is important to
+your app, but not necessarily a frequent occurrence. In cases where view switching is frequent, use
+tabs.</p>
+
+  </div>
+</div>
+
+<img src="../static/content/spinners_hololightanddark.png">
+<div class="figure-caption">
+  Spinners in the Holo Dark and Holo Light themes, in various states.
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/switches.html b/docs/html/design/building-blocks/switches.html
new file mode 100644
index 0000000..3d7bc9c
--- /dev/null
+++ b/docs/html/design/building-blocks/switches.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Switches
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Switches</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Switches allow the user to select options. There are three kinds of switches: checkboxes, radio
+buttons, and on/off switches.</p>
+<h2>Checkboxes</h2>
+<p>Checkboxes allow the user to select multiple options from a set. Avoid using a single checkbox to
+turn an option off or on. Instead, use an on/off switch.</p>
+
+<div style="text-align: center">
+  <img src="../static/content/switches_checkboxes.png">
+</div>
+
+<h2>Radio Buttons</h2>
+<p>Radio buttons allow the user to select one option from a set. Use radio buttons for exclusive
+selection if you think that the user needs to see all available options side-by-side. Otherwise,
+consider a spinner, which uses less space.</p>
+
+<div style="text-align: center">
+  <img src="../static/content/switches_radios.png">
+</div>
+
+<h2>On/off Switches</h2>
+<p>On/off switches toggle the state of a single settings option.</p>
+
+<div style="text-align: center">
+  <img src="../static/content/switches_switches.png">
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/tabs.html b/docs/html/design/building-blocks/tabs.html
new file mode 100644
index 0000000..c094cce
--- /dev/null
+++ b/docs/html/design/building-blocks/tabs.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Tabs
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Tabs</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<img src="../static/content/tabs_overview.png">
+
+<p>Tabs in the action bar make it easy to explore and switch between different views or functional
+aspects of your app, or to browse categorized data sets.</p>
+
+
+<h2 id="scrollable">Scrollable Tabs</h2>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<p>Scrolling tab controls can contain a larger number of items than a standard tab control. To navigate
+to the next/previous view, swipe left or right.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <video width="400" class="with-shadow play-on-hover" autoplay>
+      <source src="../static/content/tabs_scrolly.mp4" type="video/mp4">
+      <source src="../static/content/tabs_scrolly.webm" type="video/webm">
+      <source src="../static/content/tabs_scrolly.ogv" type="video/ogg">
+    </video>
+    <div class="figure-caption">
+      Scrolling tabs in Android Market.
+      <div class="video-instructions">&nbsp;</div>
+    </div>
+
+  </div>
+</div>
+
+
+<h2 id="fixed">Fixed Tabs</h2>
+
+
+<p>Fixed tabs display all items concurrently. To navigate to a different view, touch the tab.</p>
+
+<img src="../static/content/tabs_standard.png">
+<div class="figure-caption">
+  Tabs in Holo Dark &amp; Light.
+</div>
+
+<img src="../static/content/tabs_youtube.png">
+<div class="figure-caption">
+  Tabs in the YouTube app.
+</div>
+
+
+
+<h2 id="stacked">Stacked Tabs</h2>
+
+
+<p>If view navigation is essential to your app, you can break out tabs into a separate action bar. This
+permits fast view switching even on narrower screens.</p>
+
+<img src="../static/content/tabs_stacked.png">
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/building-blocks/text-fields.html b/docs/html/design/building-blocks/text-fields.html
new file mode 100644
index 0000000..6496fa5
--- /dev/null
+++ b/docs/html/design/building-blocks/text-fields.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Text Fields
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Text Fields</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Text fields allow the user to type text into your app. They can be either single line or multi-line.
+Touching a text field places the cursor and automatically displays the keyboard. In addition to
+typing, text fields allow for a variety of other activities, such as text selection (cut, copy,
+paste) and data lookup via auto-completion.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-12">
+
+    <img src="../static/content/text_input_singlevsmultiline.png">
+
+  </div>
+</div>
+
+<h4>Single line and multi line</h4>
+<p>Single-line fields automatically scroll their content to the left as the text input cursor reaches
+the right edge of the input field. Multi-line text fields automatically break to a new line for
+overflow text and scroll vertically when the cursor reaches the lower edge.</p>
+
+<img src="../static/content/text_input_typesandtypedown.png">
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Text field types</h4>
+<p>Text fields can have different types, such as number, message, or email address. The type determines
+what kind of characters are allowed inside the field, and may prompt the virtual keyboard to
+optimize its layout for frequently used characters.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Auto-complete text fields</h4>
+<p>Use auto-complete text fields to present real-time completions or search results in popups, so users
+can enter information more accurately and efficiently.</p>
+
+  </div>
+</div>
+
+<h2>Text Selection</h2>
+
+<p>Users can select any word in a text field with a long press. This action triggers a text selection
+mode that facilitates extending the selection or choosing an action to perform on the selected text.
+Selection mode includes:</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/text_input_textselection.png">
+
+  </div>
+  <div class="layout-content-col span-4 with-callouts">
+
+<ol>
+<li>
+<h4>Contextual action bar</h4>
+<p>A contextual action bar (CAB) displays the actions available to perform on the selection:
+ typically cut, copy, and paste, but apps can insert additional commands as needed.</p>
+</li>
+<li>
+<h4>Selection handles</h4>
+<p>Selection handles can be dragged to select more or less text while remaining in selection mode.</p>
+</li>
+</ol>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/get-started/creative-vision.html b/docs/html/design/get-started/creative-vision.html
new file mode 100644
index 0000000..11783c4
--- /dev/null
+++ b/docs/html/design/get-started/creative-vision.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Creative Vision
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Creative Vision</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<img src="../static/content/creative_vision_main.png">
+
+<div class="vspace size-1">&nbsp;</div>
+
+<p>Ice Cream Sandwich (Android 4.0) marks a major milestone for Android design. We touched nearly every
+pixel of the system as we expanded the new design approaches introduced in Honeycomb tablets to all
+types of mobile devices. Starting with the most basic elements, we introduced a new font, Roboto,
+designed for high-resolution displays. Other big changes include framework-level action bars on
+phones and support for new phones without physical buttons.</p>
+<p>We focused the design work with three overarching goals for our core apps and the system at large.
+As you design apps to work with Android, consider these goals:</p>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+<h4>Enchant me</h4>
+<p>Beauty is more than skin deep. Android apps are sleek and aesthetically pleasing on multiple levels.
+Transitions are fast and clear; layout and typography are crisp and meaningful. App icons are works
+of art in their own right. Just like a well-made tool, your app should strive to combine beauty,
+simplicity and purpose to create a magical experience that is effortless and powerful.</p>
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Simplify my life</h4>
+<p>Android apps make life easier and are easy to understand. When people use your app for the first
+time, they should intuitively grasp the most important features. The design work doesn't stop at the
+first use, though. Android apps remove ongoing chores like file management and syncing. Simple tasks
+never require complex procedures, and complex tasks are tailored to the human hand and mind. People
+of all ages and cultures feel firmly in control, and are never overwhelmed by too many choices or
+irrelevant flash.</p>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Make me amazing</h4>
+<p>It's not enough to make an app that is easy to use. Android apps empower people to try new things
+and to use apps in inventive new ways. Android lets people combine applications into new workflows
+through multitasking, notifications, and sharing across apps. At the same time, your app should feel
+personal, giving people access to superb technology with clarity and grace.</p>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/get-started/principles.html b/docs/html/design/get-started/principles.html
new file mode 100644
index 0000000..c564e5c
--- /dev/null
+++ b/docs/html/design/get-started/principles.html
@@ -0,0 +1,452 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Design Principles
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Design Principles</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>These design principles were developed by and for the Android User Experience Team to keep users'
+best interests in mind. Consider them as you apply your own creativity and design thinking. Deviate
+with purpose.</p>
+
+<h2>Enchant Me</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Delight me in surprising ways</h4>
+<p>A beautiful surface, a carefully-placed animation, or a well-timed sound effect is a joy to
+experience. Subtle effects contribute to a feeling of effortlessness and a sense that a powerful
+force is at hand.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Real objects are more fun than buttons and menus</h4>
+<p>Allow people to directly touch and manipulate objects in your app. It reduces the cognitive effort
+needed to perform a task while making it more emotionally satisfying.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Let me make it mine</h4>
+<p>Let people add a personal touch because it helps them feel at home and in control. Think about
+subtle ways to offer personalization while providing sensible and beautiful default functionality.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Get to know me</h4>
+<p>Learn peoples' preferences over time. Rather than asking them to make the same choices over and
+over, place previous choices within easy reach.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2>Simplify My Life</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Keep it brief</h4>
+<p>Use short phrases with simple words. People are likely to skip sentences if they're long.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Pictures are faster than words</h4>
+<p>Consider using pictures to explain ideas. They get people's attention and can be much more efficient
+than words.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Decide for me but let me have the final say</h4>
+<p>Take your best guess and act rather than asking first. Too many choices and decisions make people
+unhappy. Just in case you get it wrong, allow for 'undo'.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Only show what I need when I need it</h4>
+<p>People get overwhelmed when they see too much at once. Break tasks and information into small,
+digestible chunks. Hide options that aren't essential at the moment, and teach people as they go.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>I should always know where I am</h4>
+<p>Give people confidence that they know their way around. Make places in your app look distinct and
+use transitions to show relationships among screens. Provide feedback on tasks in progress.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Never lose my stuff</h4>
+<p>Save what people took time to create and let them access it from anywhere. Remember settings,
+personal touches, and creations across phones, tablets, and computers. It makes upgrading the
+easiest thing in the world.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>If it looks the same, it should act the same</h4>
+<p>Help people discern functional differences by making them visually distinct rather than subtle.
+Avoid modes, which are places that look similar but act differently on the same input.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Only interrupt me if it's important</h4>
+<p>Like a good personal assistant, shield people from unimportant minutiae. People want to stay
+focused, and unless it's critical and time-sensitive, an interruption can be taxing and frustrating.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2>Make Me Amazing</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Give me tricks that work everywhere</h4>
+<p>People feel great when they figure things out for themselves. Make your app easier to learn by
+leveraging visual patterns and muscle memory from other Android apps. For example, the swipe gesture
+may be a good navigational shortcut.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>It's not my fault</h4>
+<p>Be gentle in how you prompt people to make corrections. They want to feel smart when they use your
+app. If something goes wrong, give clear recovery instructions but spare them the technical details.
+If you can fix it behind the scenes, even better.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Sprinkle encouragement</h4>
+<p>Break complex tasks into smaller steps that can be easily accomplished. Give feedback on actions,
+even if it's just a subtle glow.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Do the heavy lifting for me</h4>
+<p>Make novices feel like experts by enabling them to do things they never thought they could. For
+example, shortcuts that combine multiple photo effects can make amateur photographs look amazing in
+only a few steps.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Make important things fast</h4>
+<p>Not all actions are equal. Decide what's most important in your app and make it easy to find and
+fast to use, like the shutter button in a camera, or the pause button in a music player.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/principles_make_important_fast.png">
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/get-started/ui-overview.html b/docs/html/design/get-started/ui-overview.html
new file mode 100644
index 0000000..b08c743
--- /dev/null
+++ b/docs/html/design/get-started/ui-overview.html
@@ -0,0 +1,301 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - UI Overview
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>UI Overview</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Android's system UI provides the framework on top of which you build your app. Important aspects
+include the Home screen experience, global device navigation, and notifications.</p>
+<p>Your app will play an important part in keeping the overall Android experience consistent and
+enjoyable to use. At the end of this chapter we introduce the main elements for achieving this goal
+in your app.</p>
+<p>Read on for a quick overview of the most important aspects of the Android user interface.</p>
+
+<h2>Home, All Apps, and Recents</h2>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/ui_overview_home_screen.png">
+
+<h4>Home screen</h4>
+<p>Home is a customizable space that houses app shortcuts, folders and widgets. Navigate between
+different home screen panels by swiping left and right.</p>
+<p>The Favorites Tray at the bottom always keeps your most important shortcuts and folders in view
+regardless of which panel is currently showing.</p>
+<p>Access the entire collection of apps and widgets by touching the All Apps button at the center of
+the Favorites Tray.</p>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/ui_overview_all_apps.png">
+
+<h4>All apps screen</h4>
+<p>The All Apps screen lets you browse the entire set of apps and widgets that are installed on your
+device.</p>
+<p>Users can drag an app or widget icon from the All Apps screen and place it in any empty location on
+any Home screen.</p>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/ui_overview_recents.png">
+
+<h4>Recents screen</h4>
+<p>Recents provides an efficient way of switching between recently used applications. It provides a
+clear navigation path between multiple ongoing tasks.</p>
+<p>The Recents button at the right side of the navigation bar displays the apps that the user has
+interacted with most recently. They are organized in reverse chronological order with the most
+recently used app at the bottom.</p>
+<p>Switch to an app by touching it. Remove an item by swiping left or right.</p>
+
+  </div>
+</div>
+
+<h2>UI Bars</h2>
+
+<p>The UI bars are screen areas dedicated to the display of notifications, communication of device
+status, and device navigation. Typically the UI bars are displayed concurrently with your app. Apps
+that display immersive content, such as movies or images, can temporarily hide the UI bars to allow
+the user to enjoy full screen content without distraction.</p>
+
+<img src="../static/content/ui_overview_system_ui.png">
+
+<div class="with-callouts">
+
+<ol>
+<li>
+<h4>Status Bar</h4>
+<p>Displays pending notifications on the left and status, such as time, battery level, or signal
+  strength, on the right. Swipe down from the status bar to show notification details.</p>
+</li>
+<li>
+<h4>Navigation Bar</h4>
+<p>New for phones in Android 4.0, the navigation bar is present only on devices that don't have
+  the traditional hardware keys. It houses the device navigation controls Back, Home, and
+  Recents, and also displays a menu for apps written for Android 2.3 or earlier.</p>
+</li>
+<li>
+<h4>System Bar</h4>
+<p>Combines the status and navigation bars for display on tablet form factors.</p>
+</li>
+</ol>
+
+</div>
+
+<h2>Notifications</h2>
+
+<p>Notifications are brief messages that users can access at any time from the status bar. They
+provide updates, reminders, or information that's important, but not critical enough to warrant
+interrupting the user. Open the notifications drawer by swiping down on the status bar. Touching a
+notification opens the associated app. <a href="../patterns/notifications.html">More on Notifications</a></p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/ui_overview_notifications.png">
+
+  </div>
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/notifications_dismiss.png">
+
+<p>Most notifications have a one-line title and a one-line message. The recommended layout for a
+notification includes two lines. If necessary, you can add a third line. Timestamps are optional.</p>
+<p>Swiping a notification right or left removes it from the notification drawer.</p>
+
+  </div>
+</div>
+
+
+<h2 id="app">Common App UI</h2>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/ui_overview_app_ui.png">
+
+  </div>
+  <div class="layout-content-col span-6 with-callouts">
+
+<p>A typical Android app consists of action bars and the app content area.</p>
+<ol>
+<li>
+<h4>Main Action Bar</h4>
+<p>The command and control center for your app. The main action bar includes elements for
+  navigating your app's hierarchy and views, and also surfaces the most important actions.</p>
+<p><a href="../patterns/actionbar.html">More on the Action Bar</a></p>
+</li>
+<li>
+<h4>View Control</h4>
+<p>Allows users to switch between the different views that your app provides. Views typically
+  consist of different arrangements of your data or different functional aspects of your app.</p>
+</li>
+<li>
+<h4>Content Area</h4>
+<p>The space where the content of your app is displayed.</p>
+</li>
+<li>
+<h4>Split Action Bar</h4>
+<p>Split action bars provide a way to distribute actions across additional bars located below
+  the main action bar or at the bottom of the screen. In this example, a split action bar moves
+  important actions that won't fit in the main bar to the bottom.</p>
+</li>
+</ol>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/index.html b/docs/html/design/index.html
new file mode 100644
index 0000000..14d7b63
--- /dev/null
+++ b/docs/html/design/index.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Welcome
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="static/default.css">
+
+<style>
+#landing-graphic-container {
+  position: relative;
+}
+
+#text-overlay {
+  position: absolute;
+  left: 10px;
+  top: 472px;
+  width: 280px;
+}
+</style>
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="index.html">Get Started</a></div>
+            <ul>
+              <li><a href="get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="get-started/principles.html">Design Principles</a></li>
+              <li><a href="get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="style/index.html">Style</a></div>
+            <ul>
+              <li><a href="style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="style/themes.html">Themes</a></li>
+              <li><a href="style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="style/typography.html">Typography</a></li>
+              <li><a href="style/color.html">Color</a></li>
+              <li><a href="style/iconography.html">Iconography</a></li>
+              <li><a href="style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="patterns/gestures.html">Gestures</a></li>
+              <li><a href="patterns/app-structure.html">App Structure</a></li>
+              <li><a href="patterns/navigation.html">Navigation</a></li>
+              <li><a href="patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="patterns/selection.html">Selection</a></li>
+              <li><a href="patterns/notifications.html">Notifications</a></li>
+              <li><a href="patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="building-blocks/lists.html">Lists</a></li>
+              <li><a href="building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="building-blocks/switches.html">Switches</a></li>
+              <li><a href="building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+
+
+          
+
+<div id="landing-graphic-container">
+  <div id="text-overlay">
+    Welcome to <strong>Android Design</strong>, your place for learning how to design exceptional Android apps.
+    <br><br>
+    <a href="get-started/creative-vision.html" class="landing-page-link">Creative Vision</a>
+  </div>
+
+  <a href="get-started/creative-vision.html">
+    <img src="static/content/index_landing_page.png">
+  </a>
+</div>
+
+
+
+          
+
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '';
+    </script>
+    <script src="static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/actionbar.html b/docs/html/design/patterns/actionbar.html
new file mode 100644
index 0000000..99ae2d7
--- /dev/null
+++ b/docs/html/design/patterns/actionbar.html
@@ -0,0 +1,487 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Action Bar
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Action Bar</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<img src="../static/content/action_bar_pattern_overview.png">
+
+<p>The <em>action bar</em> is arguably the most important structural element of an Android app. It's a
+dedicated piece of real estate at the top of each screen that is generally persistent throughout the
+app.</p>
+<p><strong>The main purpose of the action bar is to</strong>:</p>
+<ul>
+<li>Make important actions (such as <em>New</em> or <em>Search</em>, etc) prominent and accessible in a predictable
+   way.</li>
+<li>Support consistent navigation and view switching within apps.</li>
+<li>Reduce clutter by providing an action overflow for rarely used actions.</li>
+<li>Provide a dedicated space for giving your app an identity.</li>
+</ul>
+<p>If you're new to writing Android apps, note that the action bar is one of the most important design
+elements you can implement. Following the guidelines described here will go a long way toward making
+your app's interface consistent with the core Android apps.</p>
+<h2>General Organization</h2>
+<p>The action bar is split into four different functional areas that apply to most apps.</p>
+<img src="../static/content/action_bar_basics.png">
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7 with-callouts">
+
+    <ol>
+      <li class="value-1"><h4>App icon</h4>
+        <p>
+
+The app icon establishes your app's identity. It can be replaced with a different logo or branding if
+you wish.
+Important: If the app is currently not displaying the top-level screen, be sure to display the Up
+caret to the left of the app icon, so the user can navigate up the hierarchy. For more discussion of
+Up navigation, see the "Navigation" pattern.
+
+<div class="figure">
+  <img src="../static/content/action_bar_pattern_up_app_icon.png">
+  <div class="figure-caption">
+    App icon with and without "up" affordance.
+  </div>
+</div>
+
+        </p>
+      </li>
+    </ol>
+
+  </div>
+  <div class="layout-content-col span-6 with-callouts">
+
+    <ol>
+      <li class="value-2"><h4>View control</h4>
+        <p>
+
+If your app displays data in different views, this segment of the action bar allows users to switch
+views. Examples of view-switching controls are drop-down menus or tab controls. 
+
+        </p>
+        <p>
+
+If your app doesn't support different views, you can also use this space to display non-interactive
+content, such as an app title or longer branding information.
+
+        </p>
+      </li>
+      <li class="value-3"><h4>Action buttons</h4>
+        <p>
+
+Show the most important actions of your app in the actions section. Actions that don't fit in the
+action bar are moved automatically to the action overflow.
+
+        </p>
+      </li>
+      <li class="value-4"><h4>Action overflow</h4>
+        <p>
+
+Move less often used actions to the action overflow.
+
+        </p>
+      </li>
+    </ol>
+
+  </div>
+</div>
+
+
+<h2>Adapting to Rotation and Different Screen Sizes</h2>
+<p>One of the most important UI issues to consider when creating an app is how to adjust to screen
+rotation on different screen sizes.</p>
+<p>You can adapt to such changes by using <em>split action bars</em>, which allow you to distribute action bar
+content across multiple bars located below the main action bar or at the bottom of the screen.</p>
+
+<img src="../static/content/action_bar_pattern_rotation.png">
+<div class="figure-caption">
+  Split action bar showing action buttons at the bottom of the screen in vertical orientation.
+</div>
+
+<h2>Layout Considerations for Split Action Bars</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8 with-callouts">
+
+<p>When splitting up content across multiple action bars, you generally have three possible locations
+for action bar content:</p>
+<ol>
+<li><strong>Main action bar</strong></li>
+<li><strong>Top bar</strong></li>
+<li><strong>Bottom bar</strong></li>
+</ol>
+<p>If the user can navigate up the hierarchy from a given screen, the main action bar contains the up
+caret, at a minimum.</p>
+<p>To allow the user to quickly switch between the views your app provides, use tabs or a spinner in
+the top bar.</p>
+<p>To display actions and, if necessary, the action overflow, use the bottom bar.</p>
+
+  </div>
+  <div class="layout-content-col span-3">
+
+    <img src="../static/content/action_bar_pattern_considerations.png">
+
+  </div>
+</div>
+
+<h2>Contextual Action Bars</h2>
+<p>A <em>contextual action bar (CAB)</em> is a temporary action bar that overlays the app's action bar for the
+duration of a particular sub-task. CABs are most typically used for tasks that involve acting on
+selected data or text.</p>
+
+<img src="../static/content/action_bar_cab.png">
+<div class="figure-caption">
+  Contextual action bar shown in Browser and Gmail
+</div>
+
+<p>The selection CAB appears after a long press on a selectable data item triggers selection mode.</p>
+<p><strong>From here the user can</strong>:</p>
+<ul>
+<li>Select additional elements by touching them.</li>
+<li>Trigger an action from the CAB that applies to all selected data items. The CAB then
+   automatically dismisses itself.</li>
+<li>Dismiss the CAB via the navigation bar's Back button or the CAB's checkmark button. This removes
+   the CAB along with all selection highlights.</li>
+</ul>
+<p>Use CABs whenever you allow the user to select data via long press. You can control the action
+content of a CAB in order to insert the actions you would like the user to be able to perform.</p>
+<p>For more information, refer to the "Selection" pattern.</p>
+<h2>Action Bar Elements</h2>
+<h4>Tabs</h4>
+<p><em>Tabs</em> display app views concurrently and make it easy to explore and switch between them. Use tabs
+if you expect your users to switch views frequently.</p>
+
+<img src="../static/content/tabs_youtube.png">
+
+<p>There are two types of tabs: fixed and scrollable.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Scrollable tabs</h4>
+<p><em>Scrollable tabs</em> always take up the entire width of the bar, with the currently active view item in
+the center, and therefore need to live in a dedicated bar. Scrollable tabs can themselves be
+scrolled horizontally to bring more tabs into view.</p>
+<p>Use scrollable tabs if you have a large number of views or if you're unsure how many views will be
+displayed because your app inserts views dynamically (for example, open chats in a messaging app
+that the user can navigate between). Scrollable tabs should always allow the user to navigate
+between the views by swiping left or right on the content area as well as swiping the tabs
+themselves.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <video width="400" class="with-shadow play-on-hover" autoplay>
+      <source src="../static/content/tabs_scrolly.mp4" type="video/mp4">
+      <source src="../static/content/tabs_scrolly.webm" type="video/webm">
+      <source src="../static/content/tabs_scrolly.ogv" type="video/ogg">
+    </video>
+    <div class="figure-caption">
+      Scrolling tabs in Android Market.
+      <div class="video-instructions">&nbsp;</div>
+    </div>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Fixed tabs</h4>
+<p><em>Fixed tabs</em> are always visible on the screen, and can't be moved out of the way like scrollable
+tabs. Fixed tabs in the main action bar can move to the top bar when the screen orientation changes.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/action_bar_pattern_default_tabs.png">
+    <div class="figure-caption">
+      Default fixed tabs shown in Holo Dark &amp; Light.
+    </div>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Spinners</h4>
+<p>A <em>spinner</em> is a drop-down menu that allows users to switch between views of your app. </p>
+<p><strong>Use spinners rather than tabs in the main action bar if</strong>:</p>
+<ul>
+<li>You don't want to give up the vertical screen real estate for a dedicated tab bar.</li>
+<li>You expect your app's users to switch views infrequently.</li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/action_bar_pattern_spinner.png">
+    <div class="figure-caption">
+      Action bar spinner from Calendar application.
+    </div>
+
+  </div>
+</div>
+
+<h4>Action buttons</h4>
+<p><em>Action buttons</em> on the action bar surface your app's most important activities. Think about which
+buttons will get used most often, and order them accordingly. Depending on available screen real
+estate, the system shows your most important actions as action buttons and moves the rest to the
+action overflow.</p>
+
+<img src="../static/content/action_bar_pattern_action_icons.png">
+<div class="figure-caption">
+  A sampling of action buttons used throughout the Gmail application.
+</div>
+
+<p>For guidance on prioritizing actions, use the FIT scheme.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+<p><strong>F &mdash; Frequent</strong></p>
+<ul>
+<li>Will people use this action at least 7 out of 10 times they visit the screen?</li>
+<li>Will they typically use it several times in a row?</li>
+<li>Would taking an extra step every time truly be burdensome?</li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<p><strong>I &mdash; Important</strong></p>
+<ul>
+<li>Do you want everyone to discover this action because it's especially cool or a selling point?</li>
+<li>Is it something that needs to be effortless in the rare cases it's needed?</li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<p><strong>T &mdash; Typical</strong></p>
+<ul>
+<li>Is it typically presented as a first-class action in similar apps?</li>
+<li>Given the context, would people be surprised if it were buried in the action overflow?</li>
+</ul>
+
+  </div>
+</div>
+
+<p>If either F, I, or T apply, then it's appropriate for the action bar. Otherwise, it belongs in the
+action overflow.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Action overflow</h4>
+<p>The action overflow in the action bar provides access to your app's less frequently used actions.
+The overflow icon only appears on phones that have no menu hardware keys. Phones with menu keys
+display the action overflow when the user presses the key.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/action_bar_pattern_overflow.png">
+    <div class="figure-caption">
+      Action overflow is pinned to the right side.
+    </div>
+
+  </div>
+</div>
+
+<p>How many actions will fit in the main action bar? Action bar capacity is controlled by the following
+rules:</p>
+<ul>
+<li>Action buttons in the main action bar may not occupy more than 50% of the bar's width. Action
+  buttons on bottom action bars can use the entire width.</li>
+<li>The screen width in density-independent pixels
+  (<acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym>)
+  determine the number of items that will fit in the main action bar:<ul>
+<li>smaller than 360 dp = 2 icons</li>
+<li>360-499 dp = 3 icons</li>
+<li>500-599 dp = 4 icons</li>
+<li>600 dp and larger = 5 icons</li>
+</ul>
+</li>
+</ul>
+
+<img src="../static/content/action_bar_pattern_table.png">
+<div class="figure-caption">
+  In the above table "o" denotes an action bar item and "=" an overflow icon.
+</div>
+
+<h4>Sharing data</h4>
+<p>Whenever your app permits sharing of data, such as images or movie clips, use a <em>share action
+provider</em> in your action bar. The share action provider is designed to speed up sharing by
+displaying the most recently used sharing service next to a spinner button that contains other
+sharing options.</p>
+
+<img src="../static/content/action_bar_pattern_share_pack.png">
+<div class="figure-caption">
+  The Gallery app's share action provider with extended spinner for additional sharing options.
+</div>
+
+<h2>Action Bar Checklist</h2>
+<p>When planning your split action bars, ask yourself questions like these:</p>
+<h4>How important is view navigation to the task?</h4>
+<p>If view navigation is very important to your app, use tabs (for fastest view-switching) or spinners.</p>
+<h4>Which of the app's actions need to be consistently available directly from the action bar, and which can be moved to the action overflow?</h4>
+<p>Use the <acronym title="Frequent, Important or Typical">FIT</acronym> scheme to decide if actions
+are displayed at the top-level or can be moved to the action overflow. If the number of top-level
+actions exceeds the capacity of the main action bar, display them separately in a bottom action bar.</p>
+<h4>What else is important enough to warrant continuous display?</h4>
+<p>Sometimes it is important to display contextual information for your app that's always visible.
+Examples are the number of unread messages in a messaging inbox view or the Now Playing information
+in a music player. Carefully plan which important information you would like to display and
+structure your action bars accordingly.</p>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/app-structure.html b/docs/html/design/patterns/app-structure.html
new file mode 100644
index 0000000..b87f402
--- /dev/null
+++ b/docs/html/design/patterns/app-structure.html
@@ -0,0 +1,402 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Application Structure
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Application Structure</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Apps come in many varieties that address very different needs. For example:</p>
+<ul>
+<li>Apps such as Calculator or Camera that are built around a single focused activity handled from a
+  single screen</li>
+<li>Apps such as Phone whose main purpose is to switch between different activities without deeper
+  navigation</li>
+<li>Apps such as Gmail or Market that combine a broad set of data views with deep navigation</li>
+</ul>
+<p>Your app's structure depends largely on the content and tasks you want to surface for your users.</p>
+<h2>General Structure</h2>
+<p>A typical Android app consists of top level and detail/edit views. If the navigation hierarchy is
+deep and complex, category views connect top level and detail views.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/app_structure_overview.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Top level views</h4>
+<p>The top level of the app typically consists of the different views that your app supports. The views
+either show different representations of the same data or expose an altogether different functional
+facet of your app.</p>
+<div class="vspace size-3">&nbsp;</div>
+
+<h4>Category views</h4>
+<p>Category views allow you to drill deeper into your data.</p>
+<div class="vspace size-11">&nbsp;</div>
+
+<h4>Detail/edit view</h4>
+<p>The detail/edit view is where you consume or create data.</p>
+
+  </div>
+</div>
+
+<h2>Top Level</h2>
+<p>The layout of your start screen requires special attention. This is the first screen people see
+after launching your app, so it should be an equally rewarding experience for new and frequent
+visitors alike.</p>
+<p>Ask yourself: "What are my typical users most likely going to want to do in my app?", and structure
+your start screen experience accordingly.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Put content forward</h4>
+<p>Many apps focus on the content display. Avoid navigation-only screens and instead let people get to
+the meat of your app right away by making content the centerpiece of your start screen. Choose
+layouts that are visually engaging and appropriate for the data type and screen size.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/app_structure_market.png">
+    <div class="figure-caption">
+      Market's start screen primarily allows navigation into the stores for Apps, Music, Books, and
+      Games. It is also enriched with tailored recommendations and promotions that surface content
+      of interest to the user. Search is readily available from the action bar.
+    </div>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Set up action bars for navigation and actions</h4>
+<p>All screens in your app should display action bars to provide consistent navigation and surface
+important actions.</p>
+<p>At the top level, special considerations apply to the action bar:</p>
+<ul>
+<li>Use the action bar to display your app's icon or title.</li>
+<li>If your top level consists of multiple views, or if switching between data from different user
+  accounts is a significant use case, make sure that it's easy for the user to navigate between them
+  by adding view controls to your action bar.</li>
+<li>If your app allows people to create content, consider making the content accessible right from the
+  top level.</li>
+<li>If your content is searchable, include the Search action in the action bar so people can cut
+  through the navigation hierarchy.</li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/app_structure_gmail.png">
+    <div class="figure-caption">
+      Email is about productivity, so an efficient, easy-to-skim list with higher data density works
+      well. Navigation supports switching between accounts and recent labels. Icons for creating a
+      new message or searching are prominent in the split action bar at the bottom.
+    </div>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Create an identity for your app</h4>
+<p>Creating an identity for your app goes beyond the action bar. Your app communicates its identity
+through its data, the way that data is arranged, and how people interact with it. Especially for
+media-rich applications, try to create unique layouts that showcase your data and go beyond the
+monotony of simple list views.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/app_structure_music_lndscp.png">
+    <div class="figure-caption">
+      The 3D carousel celebrates cover art and establishes a unique identity for the Music app.
+      Defaulting to the Recent view keeps the focus on music the user has been listening to lately.
+    </div>
+
+  </div>
+</div>
+
+<h2>Categories</h2>
+<p>Generally, the purpose of a deep, data-driven app is to navigate through organizational categories
+to the detail level, where data can be viewed and managed. Minimize perceived navigation effort by
+keeping your apps shallow.</p>
+<p>Even though the number of vertical navigation steps from the top level down to the detail views is
+typically dictated by the structure of your app's content, there are several ways you can cut down
+on the perception of onerous navigation.</p>
+<h4>Use tabs to combine category selection and data display</h4>
+<p>This can be successful if the categories are familiar or the number of categories is small. It has
+the advantage that a level of hierarchy is removed and data remains at the center of the user's
+attention. Navigating laterally between data-rich categories is more akin to a casual browsing
+experience than to an explicit navigation step.</p>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+<p>If the categories are familiar, predictable, or closely related, use scrolling tabs (where not all
+items are in view simultaneously). Keep the number of scrolling tabs at a manageable level to
+minimize navigational effort. Rule of thumb: no more than 5&ndash;7 tabs.</p>
+
+    <img src="../static/content/app_structure_scrolltabs.png">
+    <div class="figure-caption">
+      Market uses tabs to simultaneously show category choice and content. To navigate between
+      categories, users can swipe left/right on the content.
+    </div>
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<p>If the categories in the tabs are not closely related, favor fixed tabs, so that all categories are
+in view at the same time.</p>
+
+    <img src="../static/content/app_structure_fixedtabs.png">
+    <div class="figure-caption">
+      YouTube uses fixed tabs to switch between different, relatively unrelated functional areas.
+    </div>
+
+
+  </div>
+</div>
+
+<h4>Allow cutting through hierarchies</h4>
+<p>Take advantage of shortcuts that allow people to reach their goals quicker. To allow top-level
+invocation of actions for a data item from within list or grid views, display prominent actions
+directly on list view items using drop-downs or split list items. This lets people invoke actions on
+data without having to navigate all the way down the hierarchy.</p>
+
+<img src="../static/content/app_structure_shortcut_on_item.png">
+<div class="figure-caption">
+  Music allows the user to act upon a data item (song) from within the category view (album),
+  thereby removing the need to navigate all the way down to the song's detail view.
+</div>
+
+<h4>Acting upon multiple data items</h4>
+<p>Even though category views mostly serve to guide people to content detail, keep in mind that there
+are often good reasons to act on collections of data as well.</p>
+<p>For example, if you allow people to delete an item in a detail view, you should also allow them to
+delete multiple items in the category view. Analyze which detail view actions are applicable to
+collections of items. Then use multi-select to allow application of those actions to multiple items
+in a category view.</p>
+<h2>Details</h2>
+<p>The detail view allows you to view and act on your data. The layout of the detail view depends on
+the data type being displayed, and therefore differs widely among apps.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+<h4>Layout</h4>
+<p>Consider the activities people will perform in the detail view and arrange the layout accordingly.
+For immersive content, make use of the lights-out mode to allow for distraction-free viewing of
+full-screen content.</p>
+
+    <img src="../static/content/app_structure_people_detail.png">
+
+  </div>
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/app_structure_book_detail_page_flip.png">
+    <div class="figure-caption">
+      Google Books' detail view is all about replicating the experience of reading an actual book.
+      The page-flip animation reinforces that notion. To create an immersive experience the app
+      enters lights-out mode, which hides all system UI affordances.
+    </div>
+
+    <div class="figure-caption">
+      The purpose of the People app's detail view is to surface communication options. The list view
+      allows for efficient scanning and quick access of phone numbers, email addresses and other
+      information items. Split items are used to combine calling and messaging into one compact line
+      item.
+    </div>
+  </div>
+</div>
+
+<h4>Make navigation between detail views efficient</h4>
+<p>If your users are likely to want to look at multiple items in sequence, allow them to navigate
+between items from within the detail view. Use swipe views or other techniques, such as filmstrips,
+to achieve this.</p>
+
+<img src="../static/content/app_structure_gmail_swipe.png">
+<div class="figure-caption">
+  Gmail using swipe views to navigate from detail view to detail view.
+</div>
+
+<img src="../static/content/app_structure_gallery_filmstrip.png">
+<div class="figure-caption">
+  In addition to supporting swipe gestures to move left or right through images, Gallery provides a
+  filmstrip control that lets people quickly jump to specific images.
+</div>
+
+<h2>Checklist</h2>
+<ul>
+<li>
+<p>Find ways to display useful content on your start screen.</p>
+</li>
+<li>
+<p>Use action bars to provide consistent navigation.</p>
+</li>
+<li>
+<p>Keep your hierarchies shallow by using horizontal navigation and shortcuts.</p>
+</li>
+<li>
+<p>Use multi-select to allow the user to act on collections of data.</p>
+</li>
+<li>
+<p>Allow for quick navigation between detail items with swipe views.</p>
+</li>
+</ul>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/compatibility.html b/docs/html/design/patterns/compatibility.html
new file mode 100644
index 0000000..f18c62d
--- /dev/null
+++ b/docs/html/design/patterns/compatibility.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Backwards Compatibility
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Backwards Compatibility</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Significant changes in Android 3.0 included:</p>
+<ul>
+<li>Deprecation of navigation hardware keys (Back, Menu, Search, Home) in favor of handling navigation
+  via virtual controls (Back, Home, Recents).</li>
+<li>Robust pattern for the use of menus in action bars.</li>
+</ul>
+<p>Android 4.0 brings these changes for tablets to the phone platform.</p>
+
+<h2>Adapting Android 4.0 to Older Hardware and Apps</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Phones with virtual navigation controls</h4>
+<p>Android apps written for Android 3.0 and later display actions in the action bar. Actions that don't
+fit in the action bar or aren't important enough to be displayed at the top level appear in the
+action overflow.</p>
+<p>Users access the action overflow by touching it in the action bar.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/compatibility_virtual_nav.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Phones with physical navigation keys</h4>
+<p>Android phones with traditional navigation hardware keys don't display the virtual navigation bar at
+the bottom of the screen. Instead, the action overflow is available from the menu hardware key. The
+resulting actions popup has the same style as in the previous example, but is displayed at the bottom of the screen.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/compatibility_physical_buttons.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Legacy apps on phones with virtual navigation controls</h4>
+<p>When you run an app that was built for Android 2.3 or earlier on a phone with virtual navigation
+controls, an action overflow control appears at the right side of the virtual navigation bar. You
+can touch the control to display the app's actions in the traditional Android menu styling.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/compatibility_legacy_apps.png">
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/gestures.html b/docs/html/design/patterns/gestures.html
new file mode 100644
index 0000000..f8585e4
--- /dev/null
+++ b/docs/html/design/patterns/gestures.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Gestures
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Gestures</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Gestures allow users to interact with your app by manipulating the screen objects you provide. The
+following table shows the core gesture set that is supported in Android.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_touch.png">
+
+<h4>Touch</h4>
+<p>Triggers the default functionality for a given item.</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>Press, lift</p></li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_longtouch.png">
+
+<h4>Long press</h4>
+<p>Enters data selection mode. Allows you to select one or more items in a view and act upon
+  the data using a contextual action bar. Avoid using long press for showing contextual menus.</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>Press, wait, lift</p></li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_swipe.png">
+
+<h4>Swipe</h4>
+<p>Scrolls overflowing content, or navigates between views in the same hierarchy.</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>Press, move, lift</p></li>
+</ul>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_drag.png">
+
+<h4>Drag</h4>
+<p>Rearranges data within a view, or moves data into a container (e.g. folders on Home Screen).</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>Long press, move, lift</p></li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_doubletouch.png">
+
+<h4>Double touch</h4>
+<p>Zooms into content. Also used as a secondary gesture for text selection.</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>Two touches in quick succession</p></li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_pinchopen.png">
+
+<h4>Pinch open</h4>
+<p>Zooms into content.</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>2-finger press, move outwards, lift</p></li>
+</ul>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/gesture_pinchclose.png">
+
+<h4>Pinch close</h4>
+<p>Zooms out of content.</p>
+
+<ul>
+  <li class="no-bullet with-icon action">
+    <h4>Action</h4>
+    <p>2-finger press, move inwards, lift</p></li>
+</ul>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/index.html b/docs/html/design/patterns/index.html
new file mode 100644
index 0000000..ff797db
--- /dev/null
+++ b/docs/html/design/patterns/index.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Design Patterns
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+<style>
+#landing-graphic-container {
+  position: relative;
+}
+
+#text-overlay {
+  position: absolute;
+  left: 10px;
+  top: 492px;
+  width: 200px;
+}
+</style>
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+<div class="layout-content-row content-header just-links">
+  <div class="layout-content-col span-9">&nbsp;</div>
+  <div class="paging-links layout-content-col span-4">
+    <a href="#" class="prev-page-link">Previous</a>
+    <a href="#" class="next-page-link">Next</a>
+  </div>
+</div>
+
+
+          
+
+<div id="landing-graphic-container">
+  <div id="text-overlay">
+    Design apps that behave in a consistent, predictable fashion.
+    <br><br>
+    <a href="../patterns/new-4-0.html" class="landing-page-link">New in Android 4.0</a>
+  </div>
+
+  <a href="../patterns/new-4-0.html">
+    <img src="../static/content/patterns_landing.png">
+  </a>
+</div>
+
+
+
+          
+
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/multi-pane-layouts.html b/docs/html/design/patterns/multi-pane-layouts.html
new file mode 100644
index 0000000..af05e31
--- /dev/null
+++ b/docs/html/design/patterns/multi-pane-layouts.html
@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Multi-pane Layouts
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Multi-pane Layouts</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>When writing an app for Android, keep in mind that Android devices come in many different screen
+sizes and types. Make sure that your app consistently provides a balanced and aesthetically pleasing
+layout by adjusting its content to varying screen sizes and orientations.</p>
+<p><em>Panels</em> are a great way for your app to achieve this. They allow you to combine multiple views into
+one compound view when a lot of horizontal screen real estate is available and by splitting them up
+when less space is available.</p>
+<h2>Combining Multiple Views Into One</h2>
+<p>On smaller devices your content is typically divided into a master grid or list view and a detail
+view. Touching an item in the master view opens a different screen showing that item's detail
+information.</p>
+
+<img src="../static/content/multipane_views.png">
+
+<p>Because tablets have more screen real estate than phones, you can use panels to combine the related
+list and detail views into a single compound view. This uses the additional space more efficiently
+and makes navigating the app easier. </p>
+
+<img src="../static/content/multipane_view_tablet.png">
+
+<p>In general, use the pane on the right to present more information about the item you selected in the
+left pane. Make sure to keep the item in the left pane selected in order to establish the
+relationship between the panels.</p>
+<h2>Compound Views and Orientation Changes</h2>
+<p>Screens should have the same functionality regardless of orientation. If you use a compound view in
+one orientation, don't split it up when the user rotates the screen. There are several techniques
+you can use to adjust the layout after orientation change while keeping functional parity intact.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/multipane_stretch.png">
+    
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Stretch/compress</h4>
+<p>Adjust the column width of your left pane to achieve a balanced layout in both orientations.</p>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/multipane_stack.png">
+    
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Stack</h4>
+<p>Rearrange the panels on your screen to match the orientation.</p>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/multipane_expand.png">
+    
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Expand/collapse</h4>
+<p>When the device rotates, collapse the left pane view to only show the most important information.
+Provide an <em>expand</em> control that allows the user to bring the left pane content back to its original
+width and vice versa.</p>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/multipane_show.png">
+    
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Show/hide</h4>
+<p>After rotating the device, show the right pane in fullscreen view. Use the Up icon in the action bar
+to show the left panel and allow navigation to a different email. Hide the left panel by touching
+the content in the detail panel.</p>
+
+  </div>
+</div>
+
+<h2>Checklist</h2>
+<ul>
+<li>
+<p>Plan in advance on how your app scales to different screen sizes and screen orientations.</p>
+</li>
+<li>
+<p>Identify the most appropriate method for the panels in your compound views to reorganize
+  themselves when screen orientation changes.</p>
+</li>
+<li>
+<p>Look for opportunities to consolidate your views into multi-panel compound views.</p>
+</li>
+<li>
+<p>Make sure that your screens provide functional parity after the screen orientation
+  changes.</p>
+</li>
+</ul>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/navigation.html b/docs/html/design/patterns/navigation.html
new file mode 100644
index 0000000..aabfc39
--- /dev/null
+++ b/docs/html/design/patterns/navigation.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Navigation with Back and Up
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Navigation with Back and Up</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Consistent navigation is an essential component of the overall user experience. Few things frustrate
+users more than basic navigation that behaves in inconsistent and unexpected ways. Android 3.0
+introduced significant changes to the global navigation behavior. Thoughtfully following the
+guidelines for Back and Up will make your app's navigation predictable and reliable for your users.</p>
+<p>Android 2.3 and earlier relied upon the system <em>Back</em> button for supporting navigation within an
+app. With the introduction of action bars in Android 3.0, a second navigation mechanism appeared:
+the <em>Up</em> button, consisting of the app icon and a left-point caret.</p>
+
+<img src="../static/content/navigation_with_back_and_up.png">
+
+<h2>Up vs. Back</h2>
+<p>The Up button is used to navigate within an application based on the hierarchical relationships
+between screens. For instance, if screen A displays a list of items, and selecting an item leads to
+screen B (which presents that item in more detail), then screen B should offer an Up button that
+returns to screen A.</p>
+<p>If a screen is the topmost one in an app (i.e. the home of the app), it should not present an Up
+button.</p>
+<p>The system Back key is used to navigate based on the history of screens the user has recently seen,
+in reverse chronological order&mdash;in effect, the temporal relationships between screens.</p>
+<p>When the previously viewed screen is also the hierarchical parent of the current screen, pressing
+the Back key will have the same result as pressing an Up button -- this is a common occurrence.
+However, unlike the Up button, which ensures the user remains within your app, the Back key can
+return the user to the Home screen, or even to a different application.</p>
+
+<img src="../static/content/navigation_up_vs_back_gmail.png">
+
+<p>The Back key also supports a few behaviors not directly tied to screen-to-screen navigation:</p>
+<ul>
+<li>Back dismisses floating windows (dialogs, popups)</li>
+<li>Back dismisses contextual action bars, and remove highlight from selected items</li>
+<li>Back hides the onscreen keyboard (IME)</li>
+</ul>
+<h2>Navigation Within Your App</h2>
+<h4>Navigating to screens with multiple entry points</h4>
+<p>Sometimes a screen doesn't have a strict position within the app's hierarchy, and can be reached
+from multiple entry points&mdash;e.g., a settings screen which can be navigated to from any screen
+in your app. In this case, the Up button should choose to return to the referring screen, behaving
+identically to Back.</p>
+<h4>Changing view within a screen</h4>
+<p>Changing view options for a screen does not change the behavior of Up or Back: the screen is still
+in the same place within the app's hierarchy, and no new navigation history is created.</p>
+<p>Examples of such view changes are:</p>
+<ul>
+<li>Switching views using tabs and/or left-and-right swipes</li>
+<li>Switching views using a dropdown (aka collapsed tabs)</li>
+<li>Filtering a list</li>
+<li>Sorting a list</li>
+<li>Changing display characteristics (e.g. zooming)</li>
+</ul>
+<h4>Navigating between sibling screens</h4>
+<p>When your app supports navigation from a list of items to a detail view of one of those items, it's
+often desirable to support direction navigation from that item to another one which precedes or
+follows it in the list. For example, in Gmail, it's easy to swipe left or right from a conversation
+to view a newer or older one in the same Inbox. Just as when changing view within a screen, such
+navigation does not change the behavior of Up or Back.</p>
+
+<img src="../static/content/navigation_between_siblings_gmail.png">
+
+<p>However, a notable exception to this occurs when browsing between "related" detail views not tied
+together by the referring list&mdash;for example, when browsing in the Market between apps from
+the same developer, or albums by the same artist. In these cases, following each link does create
+history, causing the Back button to step through each screen of related content which has been
+viewed. Up should continue to bypass these related screens and navigate to the most recently viewed
+container screen.</p>
+
+<img src="../static/content/navigation_between_siblings_market1.png">
+
+<p>You have the ability to make the Up behavior even smarter based on your knowledge of detail
+view. If we extend our Market sample from above, imagine the user has navigated from the last Book
+viewed to the details for the Movie adaptation. In that case, Up can return to a container (Movies)
+which the user had not previously navigated through.</p>
+
+<img src="../static/content/navigation_between_siblings_market2.png">
+
+<h2>Navigation From Outside Your App</h2>
+<p>There are two categories of navigation from outside your app to screens deep within the app's
+hierarchy:</p>
+<ul>
+<li>App-to-app navigation, such as via intent completion.</li>
+<li>System-to-app navigation, such as via notifications and home screen widgets.</li>
+</ul>
+<p>Gmail provides examples of each of these. For app-to-app navigation, a "Share" intent goes directly
+to the compose screen. For system-to-app navigation, both a new message notification and a home
+screen widget can bypass the Inbox screen, taking the user directly to a conversation view.</p>
+<h4>App-to-app navigation</h4>
+<p>When navigating deep into your app's hierarchy directly from another app via an intent, Back will
+return to the referring app.</p>
+<p>The Up button is handled is follows:
+- If the destination screen is typically reached from one particular screen within your app, Up
+  should navigate to that screen.
+- Otherwise, Up should navigate to the topmost ("Home") screen of your app.</p>
+<p>For example, after choosing to share a book being view in Market, the user navigates directly to the
+Gmail's compose screen. From there, Up returns to the Inbox (which happens to be both the typical
+referrer to compose, as well as the topmost screen of the app), while Back returns to Market.</p>
+
+<img src="../static/content/navigation_from_outside_up.png">
+
+<h4>System-to-app navigation</h4>
+<p>If the your app was reached via the system mechanisms of notifications or home screen widgets, Up
+behaves as described for app-to-app navigation, above.</p>
+<p>For the Back key, you should make navigation more predictably by inserting into the task's back
+stack the complete upward navigation path to the app's topmost screen. This way, a user who has
+forgotten how they entered your app can safely navigate to the app's topmost screen before exiting
+it.</p>
+<p>For example, Gmail's Home screen widget has a button for diving directly to its compose screen.
+After following that path, the Back key first returns to the Inbox, and from there continues to
+Home.</p>
+
+<img src="../static/content/navigation_from_outside_back.png">
+
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/new-4-0.html b/docs/html/design/patterns/new-4-0.html
new file mode 100644
index 0000000..272b079
--- /dev/null
+++ b/docs/html/design/patterns/new-4-0.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - New in Android 4.0
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>New in Android 4.0</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Navigation bar</h4>
+<p>Android 4.0 removes the need for traditional hardware keys on phones by replacing them with a
+virtual navigation bar that houses the Back, Home and Recents buttons. Read the
+<a href="../patterns/compatibility.html">Compatibility</a> pattern to learn how the OS adapts to
+phones with hardware buttons and how pre-Android 3.0 apps that rely on menu keys are supported.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/whats_new_nav_bar.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Action bar</h4>
+<p>The action bar is the most important structural element of an Android app. It provides consistent
+navigation across the platform and allows your app to surface actions.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/whats_new_action_bar.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Multi-pane layouts</h4>
+<p>Creating apps that scale well across different form factors and screen sizes is important in the
+Android world. Multi-pane layouts allow you to combine different activities that show separately on
+smaller devices into richer compound views for tablets.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/whats_new_multipanel.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Selection</h4>
+<p>The long press gesture which was traditionally used to show contextual actions for objects is now
+used for data selection. When selecting data, contextual action bars allow you to surface actions.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/whats_new_multiselect.png">
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/notifications.html b/docs/html/design/patterns/notifications.html
new file mode 100644
index 0000000..acec306
--- /dev/null
+++ b/docs/html/design/patterns/notifications.html
@@ -0,0 +1,390 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Notifications
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Notifications</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>The notification system allows your app to keep the user informed about important events, such as
+new messages in a chat app or a calendar event.</p>
+<p>To create an app that feels streamlined, pleasant, and respectful, it is important to design your
+notifications carefully. Notifications embody your app's voice, and contribute to your app's
+personality. Unwanted or unimportant notifications can annoy the user, so use them judiciously.</p>
+<h4>When to display a notification</h4>
+<p>To create an application that people love, it's important to recognize that the user's attention and
+focus is a resource that must be protected. To use an analogy that might resonate with software
+developers, the user is not a method that can be invoked to return a value.  The user's focus is a
+resource more akin to a thread, and creating a notification momentarily blocks the user thread as
+they process and then dismiss the interruptive notification.</p>
+<p>Android's notification system has been designed to quickly inform users of events while they focus
+on a task, but it is nonetheless still important to be conscientious when deciding to create a
+notification.</p>
+<p>While well behaved apps generally only speak when spoken to, there are some limited cases where an
+app actually should interrupt the user with an unprompted notification.</p>
+<p>Notifications should be used primarily for <strong>time sensitive events</strong>, and especially if these
+synchronous events <strong>involve other people</strong>. For instance, an incoming chat is a real time and
+synchronous form of communication: there is another user actively waiting on you to respond.
+Calendar events are another good example of when to use a notification and grab the user's
+attention, because the event is imminent, and calendar events often involve other people.</p>
+
+<img src="../static/content/notifications_pattern_real_time_people.png">
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>When not to display a notification</h4>
+<p>There are however many other cases where notifications should not be used:</p>
+<ul>
+<li>
+<p>Don't notify the user of information that is not directed specifically at them, or information
+that is not truly time sensitive.  For instance the asynchronous and undirected updates flowing
+through a social network do not warrant a real time interruption.</p>
+</li>
+<li>
+<p>Don't create a notification if the relevant new information is currently on screen. Instead, use
+the UI of the application itself to notify the user of new information directly in context. For
+instance, a chat application should not create system notifications while the user is actively
+chatting with another user.</p>
+</li>
+<li>
+<p>Don't interrupt the user for low level technical operations, like saving or syncing information,
+or updating an application, if it is possible for the system to simply take care of itself without
+involving the user.</p>
+</li>
+<li>
+<p>Don't interrupt the user to inform them of an error if it is possible for the application to
+quickly recover from the error on its own without the user taking any action.</p>
+</li>
+<li>
+<p>Don't use notifications for services that the user cannot manually start or stop.</p>
+</li>
+<li>
+<p>Don't create superfluous notifications just to get your brand in front of users. Such
+notifications will only frustrate and likely alienate your audience. The best way to provide the
+user with a small amount of updated information and to keep them engaged with your application is to
+develop a widget that they can choose to place on their home screen.</p>
+</li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/notifications_pattern_social_fail.png">
+
+  </div>
+</div>
+
+<h2>Design Guidelines</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/notifications_pattern_anatomy.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Make it personal</h4>
+<p>For notifications of items sent by another user (such as a message or status update), include that
+person's image.</p>
+<p>Remember to include the app icon as a secondary icon in the notification, so that the user can
+still identify which app posted it.</p>    
+
+  </div>
+</div>
+
+<h4>Navigate to the right place</h4>
+<p>When the user touches a notification, be open your app to the place where the user can consume and
+act upon the data referenced in the notification. In most cases this will be the detail view of a
+single data item (e.g. a message), but it might also be a summary view if the notification is
+stacked (see <em>Stacked notifications</em> below) and references multiple items. If in any of those cases
+the user is taken to a hierarchy level below your app's top-level, insert navigation into your app's
+back stack to allow them to navigate to your app's top level using the system back key. For more
+information, see the chapter on <em>System-to-app navigation</em> in the
+<a href="../patterns/notifications.html">Navigation</a> design pattern.</p>
+<h4>Timestamps for time sensitive events</h4>
+<p>By default, standard Android notifications include a timestamp in the upper right corner. Consider
+whether the timestamp is valuable in the context of your notification. If the timestamp is not
+valuable, consider if the event is important enough to warrant grabbing the user's attention with a
+notification. If the notification is important enough, decide if you would like to opt out of
+displaying the timestamp.</p>
+<p>Include a timestamp if the user likely needs to know how long ago the notification occurred. Good
+candidates for timestamps include communication notifications (email, messaging, chat, voicemail)
+where the user may need the timestamp information to understand the context of a message or to
+tailor a response.</p>
+<h4>Stack your notifications</h4>
+<p>If your app creates a notification while another of the same type is still pending, avoid creating
+an altogether new notification object. Instead, stack the notification.</p>
+<p>A stacked notification builds a summary description and allows the user to understand how many
+notifications of a particular kind are pending.</p>
+<p><strong>Don't</strong>:</p>
+
+<img src="../static/content/notifications_pattern_additional_fail.png">
+
+<p><strong>Do</strong>:</p>
+
+<img src="../static/content/notifications_pattern_additional_win.png">
+
+<p>If you keep the summary and detail information on different screens, a stacked notification may need
+to open to a different place in the app than a single notification.</p>
+<p>For example, a single email notification should always open to the content of the email, whereas a
+stacked email notification opens to the Inbox view.</p>
+<h4>Clean up after yourself</h4>
+<p>Just like calendar events, some notifications alert the user to an event that happens at a
+particular point in time. After that moment has passed, the notification is likely not important to
+the user anymore, and you should consider removing it automatically.  The same is true for active
+chat conversations or voicemail messages the user has listened to, users should not have to manually
+dismiss notifications independently from taking action on them.</p>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4>Provide a peek into your notification</h4>
+<p>You can provide a short preview of your notification's content by providing optional ticker text.
+The ticker text is shown for a short amount of time when the notification enters the system and then
+hides automatically.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/notifications_pattern_phone_ticker.png">
+
+  </div>
+</div>
+
+<h4>Make notifications optional</h4>
+<p>Users should always be in control of notifications. Allow the user to silence the notifications from
+your app by adding a notification settings item to your application settings.</p>
+<h4>Use distinct icons</h4>
+<p>By glancing at the notification area, the user should be able to discern what notification types are
+currently pending.</p>
+<p><strong>Do</strong>:</p>
+<ul>
+<li>Look at the notification icons the Android apps already provide and create notification icons for
+  your app that are sufficiently distinct in appearance.</li>
+</ul>
+<p><strong>Don't</strong>:</p>
+<ul>
+<li>Use color to distinguish your app from others. Notification icons should generally be monochrome.</li>
+</ul>
+
+<h2>Interacting With Notifications</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/notifications_pattern_phone_icons.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<p>Notifications are indicated by icons in the notification area and can be accessed by opening the
+notification drawer.</p>
+<p>Inside the drawer, notifications are chronologically sorted with the latest one on top. Touching a
+notification opens the associated app to detailed content matching the notification. Swiping left or
+right on a notification removes it from the drawer.</p>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<p>On tablets, the notification area is integrated with the system bar at the bottom of the screen. The
+notification drawer is opened by touching anywhere inside the notification area.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/notifications_pattern_tablet.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/notifications_pattern_ongoing_music.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Ongoing notifications</h4>
+<p>Ongoing notifications keep users informed about an ongoing process in the background. For example,
+music players announce the currently playing track in the notification system and continue to do so
+until the user stops the playback. They can also be used to show the user feedback for longer tasks
+like downloading a file, or encoding a video. Ongoing notifications cannot be manually removed from
+the notification drawer.</p>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-12">
+
+<h4>Dialogs and toasts are for feedback not notification</h4>
+<p>Your app should not create a dialog or toast if it is not currently on screen. Dialogs and Toasts
+should only be displayed as the immediate response to the user taking an action inside of your app.
+For instance, dialogs can be used to confirm that the user understands the severity of an action,
+and toasts can echo back that an action has been successfully taken.</p>
+
+  </div>
+</div>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<img src="../static/content/notifications_pattern_dialog_toast.png">
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/pure-android.html b/docs/html/design/patterns/pure-android.html
new file mode 100644
index 0000000..507558a
--- /dev/null
+++ b/docs/html/design/patterns/pure-android.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Pure Android
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Pure Android</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Most developers want to distribute their apps on multiple platforms. As you plan your app for
+Android, keep in mind that different platforms play by different rules and conventions. Design
+decisions that make perfect sense on one platform will look and feel misplaced in the context of a
+different platform. While a "design once, ship anywhere" approach might save you time up-front, you
+run the very real risk of creating inconsistent apps that alienate users. Consider the following
+guidelines to avoid the most common traps and pitfalls.</p>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Don't mimic UI elements from other platforms</h4>
+<p>Platforms typically provide a carefully designed set of UI elements that are themed in a very
+distinctive fashion. For example, some platforms advocate rounded corners for their buttons, others
+use gradients in their title bars. In some cases, elements may have the same purpose, but are
+designed to work a bit differently.</p>
+<p>As you build your app for Android, don't carry over themed UI elements from other platforms and
+don't mimic their specific behaviors. Review the <a href="../building-
+blocks/index.html">Building Blocks</a> section in this styleguide to learn about Android's most important UI elements
+and the way they look in the system default themes. Also examine Android's platform apps to get a
+sense of how elements are applied in the context of an app. If you want to customize the theme of UI
+elements, customize carefully according to your specific branding - and not according to the
+conventions of a different platform.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/migrating_ui_elements.png">
+    <div class="figure-caption">
+      Sampling of UI elements from Android, iOS and Windows Phone 7.
+    </div>
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Don't carry over platform-specific icons</h4>
+<p>Platforms typically provide sets of icons for common functionality, such as sharing, creating a new
+document or deleting.</p>
+<p>As you are migrating your app to Android, please swap out platform-specific icons with their Android
+counterparts.</p>
+<p>You can find a wide variety of icons for use in your app in the Android SDK.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/migrating_icons.png">
+    <div class="figure-caption">
+      Sampling of icons from Android, iOS and Windows Phone 7.
+    </div>
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Don't use bottom tab bars</h4>
+<p>Other platforms use the bottom tab bar to switch between the app's views. Per platform convention,
+Android's tabs for view control are shown in action bars at the top of the screen instead. In
+addition, Android apps may use a bottom bar to display actions on a split action bar.</p>
+<p>You should follow this guideline to create a consistent experience with other apps on the Android
+platform and to avoid confusion between actions and view switching on Android.</p>
+<p>For more information on how to properly use action bars for view control, see
+<a href="../patterns/actionbar.html">Action Bars</a>.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/migrating_ios_dialers.png">
+    <div class="figure-caption">
+      Android dialer with tabs in an action bar vs. bottom tabs in iOS.
+    </div>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Don't use labeled back buttons on action bars</h4>
+<p>Other platforms use an explicit back button with label to allow the user to navigate up the
+application's hierarchy. Instead, Android uses the main action bar's app icon for hierarchical
+navigation and the navigation bar's back button for temporal navigation. For more information,
+please review the <a href="../patterns/navigation.html">Navigation</a> pattern.</p>
+<p>Follow this guideline to provide a consistent navigation experience across the platform.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/migrating_ios_galleries.png">
+    <div class="figure-caption">
+      Android action bar with up caret vs. iOS labeled "Back" button.
+    </div>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+<h4>Don't use right-pointing carets on line items</h4>
+<p>A common pattern on other platforms is the display of right-pointing carets on line items that allow
+the user to drill deeper into additional content.</p>
+<p>Android does not use such indicators on drill-down line items. Avoid them to stay consistent with
+the platform and in order to not have the user guess as to what the meaning of those carets may be.</p>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/migrating_ios_settings.png">
+    <div class="figure-caption">
+      Android settings without right-pointing carets in line items vs. iOS settings.
+    </div>
+
+  </div>
+</div>
+
+<h2>Device Independence</h2>
+
+<p>Remember that your app will run on a wide variety of different screen sizes. Create visual assets
+for different screen sizes and densities and make use of concepts such as multi-pane layouts to
+appropriately scale your UI on different device form factors.</p>
+<p>For more information, read <a href="../style/devices-displays.html">Devices and Displays</a> as
+well as <a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a> in this design guide.</p>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/selection.html b/docs/html/design/patterns/selection.html
new file mode 100644
index 0000000..37dcab5
--- /dev/null
+++ b/docs/html/design/patterns/selection.html
@@ -0,0 +1,252 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Selection
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Selection</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Android 3.0 introduced the <em>long press</em> gesture&mdash;that is, a touch that's held in the same
+position for a moment&mdash;as the global gesture to select data. This affects the way you should
+handle multi-select and contextual actions in your apps.</p>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>What has changed?</h4>
+<p>In previous versions of Android, the long press gesture was universally used to display contextual
+actions for a given data item in a contextual menu.</p>
+<p>This pattern changed with Android 3.0. The long press gesture is now used to select data, combining
+contextual actions and selection management functions for selected data into a new element called
+the contextual action bar (CAB).</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/selection_context_menu.png">
+    <div class="figure-caption">
+      Traditional use of the long press gesture to show contextual menus.
+    </div>
+
+  </div>
+</div>
+
+<h4>Using the contextual action bar (CAB)</h4>
+<p>The selection CAB is a temporary action bar that overlays your app's current action bar while data
+is selected. It appears after the user long presses on a selectable data item.</p>
+
+<img src="../static/content/selection_cab_big.png">
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<p>From here the user can:</p>
+<ul>
+<li>Select additional data items by touching them.</li>
+<li>Trigger an action from the CAB that applies to all highlighted data items. The CAB then
+  automatically dismisses itself.</li>
+<li>Dismiss the CAB via the navigation bar's Back button or the CAB's checkmark button. This removes
+  the CAB along with all selection highlights.</li>
+</ul>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/selection_cab_example.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Selecting CAB actions</h4>
+<p>You can decide which actions and elements appear in the CAB. Use the guidelines in the <a href="actionbar.html">Action Bar
+pattern</a> to decide which items to surface at the top level and which to move to the
+action overflow.</p>
+<h4>Dynamically adjust CAB actions</h4>
+<p>In most cases you need to adjust the actions in the CAB dynamically as the user adds more items to
+the selection. Actions that apply to a single selected data item don't necessarily apply to multiple
+selected data items of the same kind.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/selection_adjusting_actions.png">
+    <div class="figure-caption">
+      Adjusting actions in the CAB as additional items are selected.
+    </div>
+
+  </div>
+</div>
+
+<h2>Checklist</h2>
+<ul>
+<li>
+<p>Whenever your app supports the selection of multiple data items, make use of the contextual action
+  bar (CAB).</p>
+</li>
+<li>
+<p>Reserve the long press gesture for selection exclusively. Don't use it to display traditional
+  contextual menus.</p>
+</li>
+<li>
+<p>If you don't support multi-selection within a list, long press should do nothing.</p>
+</li>
+<li>
+<p>Plan the actions you want to display inside of a CAB in the same way you would plan the actions
+  inside your app's action bar.</p>
+</li>
+</ul>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/patterns/swipe-views.html b/docs/html/design/patterns/swipe-views.html
new file mode 100644
index 0000000..4e8cd03
--- /dev/null
+++ b/docs/html/design/patterns/swipe-views.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Swipe Views
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Swipe Views</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Efficient navigation is one of the cornerstones of a well-designed app. While apps are generally
+built in a hierarchical fashion, there are instances where horizontal navigation can flatten
+vertical hierarchies and make access to related data items faster and more enjoyable. Swipe views
+allow the user to efficiently move from item to item using a simple gesture and thereby make
+browsing and consuming data a more fluent experience.</p>
+<h2>Swiping Between Detail Views</h2>
+<p>An app's data is often organized in a master/detail relationship: The user can view a list of
+related data items, such as images, chats, or emails, and then pick one of the items to see the
+detail contents in a separate screen.</p>
+
+<img src="../static/content/swipe_views.png">
+<div class="figure-caption">
+  Master (left) and detail (right) views.
+</div>
+
+<p>On a phone, since the master and detail are on separate screens, this typically requires the user to
+jump back and forth between the list and the detail view, aka "pogo-sticking".</p>
+<p>In cases where users will want to view multiple detail items in succession, avoid pogo-sticking by
+using the swipe gesture to navigate to the next/previous detail view.</p>
+
+<img src="../static/content/swipe_views2.png">
+<div class="figure-caption">
+  Navigating between consecutive Email messages using the swipe gesture.
+</div>
+
+<h2>Swiping Between Tabs</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+    <div class="framed-galaxynexus-port-span-5">
+      <video class="play-on-hover" autoplay>
+        <source src="../static/content/swipe_tabs.mp4" type="video/mp4">
+        <source src="../static/content/swipe_tabs.webm" type="video/webm">
+        <source src="../static/content/swipe_tabs.ogv" type="video/ogg">
+      </video>
+    </div>
+    <div class="figure-caption">
+      People app with swipe gesture navigation between top-level screens.
+      <div class="video-instructions">&nbsp;</div>
+    </div>
+
+  </div>
+  <div class="layout-content-col span-8">
+
+<p>If your app uses action bar tabs, use swipe to navigate between the different views.</p>
+<div class="vspace size-2">&nbsp;</div>
+
+<h2>Checklist</h2>
+<ul>
+<li>
+<p>Use swipe to quickly navigate between detail views or tabs.</p>
+</li>
+<li>
+<p>Transition between the views as the user performs the swipe gesture. Do not wait for the
+  gesture to complete and then transition between views.</p>
+</li>
+<li>
+<p>If you used buttons in the past for previous/next navigation, replace them with
+  the swipe gesture.</p>
+</li>
+<li>
+<p>Consider adding contextual information in your detail view that informs the user about the
+  relative list position of the currently visible item.</p>
+</li>
+</ul>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/static/callout.png b/docs/html/design/static/callout.png
new file mode 100644
index 0000000..5d49f34
--- /dev/null
+++ b/docs/html/design/static/callout.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_basics.png b/docs/html/design/static/content/action_bar_basics.png
new file mode 100644
index 0000000..0bf3d56
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_basics.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_cab.png b/docs/html/design/static/content/action_bar_cab.png
new file mode 100644
index 0000000..aa629b9
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_cab.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_action_icons.png b/docs/html/design/static/content/action_bar_pattern_action_icons.png
new file mode 100644
index 0000000..66f7f87
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_action_icons.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_considerations.png b/docs/html/design/static/content/action_bar_pattern_considerations.png
new file mode 100644
index 0000000..977e7f2
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_considerations.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_default_tabs.png b/docs/html/design/static/content/action_bar_pattern_default_tabs.png
new file mode 100644
index 0000000..69df289
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_default_tabs.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_overflow.png b/docs/html/design/static/content/action_bar_pattern_overflow.png
new file mode 100644
index 0000000..9c69cfe
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_overflow.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_overview.png b/docs/html/design/static/content/action_bar_pattern_overview.png
new file mode 100644
index 0000000..83a986b
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_overview.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_rotation.png b/docs/html/design/static/content/action_bar_pattern_rotation.png
new file mode 100644
index 0000000..5b9a656
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_rotation.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_share_pack.png b/docs/html/design/static/content/action_bar_pattern_share_pack.png
new file mode 100644
index 0000000..7ae8a0a
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_share_pack.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_spinner.png b/docs/html/design/static/content/action_bar_pattern_spinner.png
new file mode 100644
index 0000000..9c054b5
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_spinner.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_table.png b/docs/html/design/static/content/action_bar_pattern_table.png
new file mode 100644
index 0000000..dac7e21
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_table.png
Binary files differ
diff --git a/docs/html/design/static/content/action_bar_pattern_up_app_icon.png b/docs/html/design/static/content/action_bar_pattern_up_app_icon.png
new file mode 100644
index 0000000..11b8aa9
--- /dev/null
+++ b/docs/html/design/static/content/action_bar_pattern_up_app_icon.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_book_detail_page_flip.png b/docs/html/design/static/content/app_structure_book_detail_page_flip.png
new file mode 100644
index 0000000..13c9c52
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_book_detail_page_flip.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_fixedtabs.png b/docs/html/design/static/content/app_structure_fixedtabs.png
new file mode 100644
index 0000000..e41f97e
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_fixedtabs.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_gallery_filmstrip.png b/docs/html/design/static/content/app_structure_gallery_filmstrip.png
new file mode 100644
index 0000000..deed672
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_gallery_filmstrip.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_gmail.png b/docs/html/design/static/content/app_structure_gmail.png
new file mode 100644
index 0000000..862ac75
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_gmail.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_gmail_swipe.png b/docs/html/design/static/content/app_structure_gmail_swipe.png
new file mode 100644
index 0000000..21da4ac
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_gmail_swipe.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_market.png b/docs/html/design/static/content/app_structure_market.png
new file mode 100644
index 0000000..3b0b786
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_market.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_music_lndscp.png b/docs/html/design/static/content/app_structure_music_lndscp.png
new file mode 100644
index 0000000..0dd400c
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_music_lndscp.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_overview.png b/docs/html/design/static/content/app_structure_overview.png
new file mode 100644
index 0000000..5ba25b4
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_overview.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_people_detail.png b/docs/html/design/static/content/app_structure_people_detail.png
new file mode 100644
index 0000000..b870796
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_people_detail.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_scrolltabs.png b/docs/html/design/static/content/app_structure_scrolltabs.png
new file mode 100644
index 0000000..ef4fca4
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_scrolltabs.png
Binary files differ
diff --git a/docs/html/design/static/content/app_structure_shortcut_on_item.png b/docs/html/design/static/content/app_structure_shortcut_on_item.png
new file mode 100644
index 0000000..3874e1d4
--- /dev/null
+++ b/docs/html/design/static/content/app_structure_shortcut_on_item.png
Binary files differ
diff --git a/docs/html/design/static/content/building_blocks_landing.png b/docs/html/design/static/content/building_blocks_landing.png
new file mode 100644
index 0000000..2da47b7
--- /dev/null
+++ b/docs/html/design/static/content/building_blocks_landing.png
Binary files differ
diff --git a/docs/html/design/static/content/buttons_basic.png b/docs/html/design/static/content/buttons_basic.png
new file mode 100644
index 0000000..7fa3d09
--- /dev/null
+++ b/docs/html/design/static/content/buttons_basic.png
Binary files differ
diff --git a/docs/html/design/static/content/buttons_borderless.png b/docs/html/design/static/content/buttons_borderless.png
new file mode 100644
index 0000000..1a9d906
--- /dev/null
+++ b/docs/html/design/static/content/buttons_borderless.png
Binary files differ
diff --git a/docs/html/design/static/content/buttons_default_small.png b/docs/html/design/static/content/buttons_default_small.png
new file mode 100644
index 0000000..3e776ed
--- /dev/null
+++ b/docs/html/design/static/content/buttons_default_small.png
Binary files differ
diff --git a/docs/html/design/static/content/color_spectrum.png b/docs/html/design/static/content/color_spectrum.png
new file mode 100644
index 0000000..3fd7a57
--- /dev/null
+++ b/docs/html/design/static/content/color_spectrum.png
Binary files differ
diff --git a/docs/html/design/static/content/compatibility_legacy_apps.png b/docs/html/design/static/content/compatibility_legacy_apps.png
new file mode 100644
index 0000000..a0400e1
--- /dev/null
+++ b/docs/html/design/static/content/compatibility_legacy_apps.png
Binary files differ
diff --git a/docs/html/design/static/content/compatibility_physical_buttons.png b/docs/html/design/static/content/compatibility_physical_buttons.png
new file mode 100644
index 0000000..30d5ddd
--- /dev/null
+++ b/docs/html/design/static/content/compatibility_physical_buttons.png
Binary files differ
diff --git a/docs/html/design/static/content/compatibility_virtual_nav.png b/docs/html/design/static/content/compatibility_virtual_nav.png
new file mode 100644
index 0000000..ea595a4
--- /dev/null
+++ b/docs/html/design/static/content/compatibility_virtual_nav.png
Binary files differ
diff --git a/docs/html/design/static/content/creative_vision_main.png b/docs/html/design/static/content/creative_vision_main.png
new file mode 100644
index 0000000..c9d31cb
--- /dev/null
+++ b/docs/html/design/static/content/creative_vision_main.png
Binary files differ
diff --git a/docs/html/design/static/content/design_elements_landing.png b/docs/html/design/static/content/design_elements_landing.png
new file mode 100644
index 0000000..d078cef
--- /dev/null
+++ b/docs/html/design/static/content/design_elements_landing.png
Binary files differ
diff --git a/docs/html/design/static/content/devices_displays_density.png b/docs/html/design/static/content/devices_displays_density.png
new file mode 100644
index 0000000..a21b482
--- /dev/null
+++ b/docs/html/design/static/content/devices_displays_density.png
Binary files differ
diff --git a/docs/html/design/static/content/devices_displays_main.png b/docs/html/design/static/content/devices_displays_main.png
new file mode 100644
index 0000000..fd1c645
--- /dev/null
+++ b/docs/html/design/static/content/devices_displays_main.png
Binary files differ
diff --git a/docs/html/design/static/content/dialogs_examples.png b/docs/html/design/static/content/dialogs_examples.png
new file mode 100644
index 0000000..981c5f3
--- /dev/null
+++ b/docs/html/design/static/content/dialogs_examples.png
Binary files differ
diff --git a/docs/html/design/static/content/dialogs_main.png b/docs/html/design/static/content/dialogs_main.png
new file mode 100644
index 0000000..b95266a
--- /dev/null
+++ b/docs/html/design/static/content/dialogs_main.png
Binary files differ
diff --git a/docs/html/design/static/content/dialogs_popups_example.png b/docs/html/design/static/content/dialogs_popups_example.png
new file mode 100644
index 0000000..c2a66f6
--- /dev/null
+++ b/docs/html/design/static/content/dialogs_popups_example.png
Binary files differ
diff --git a/docs/html/design/static/content/dialogs_toasts.png b/docs/html/design/static/content/dialogs_toasts.png
new file mode 100644
index 0000000..cc0b815
--- /dev/null
+++ b/docs/html/design/static/content/dialogs_toasts.png
Binary files differ
diff --git a/docs/html/design/static/content/dialogs_w_no_title.png b/docs/html/design/static/content/dialogs_w_no_title.png
new file mode 100644
index 0000000..47e2dbf
--- /dev/null
+++ b/docs/html/design/static/content/dialogs_w_no_title.png
Binary files differ
diff --git a/docs/html/design/static/content/dialogs_w_title.png b/docs/html/design/static/content/dialogs_w_title.png
new file mode 100644
index 0000000..4f2b81f
--- /dev/null
+++ b/docs/html/design/static/content/dialogs_w_title.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_doubletouch.png b/docs/html/design/static/content/gesture_doubletouch.png
new file mode 100644
index 0000000..693a593
--- /dev/null
+++ b/docs/html/design/static/content/gesture_doubletouch.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_drag.png b/docs/html/design/static/content/gesture_drag.png
new file mode 100644
index 0000000..6262644
--- /dev/null
+++ b/docs/html/design/static/content/gesture_drag.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_longtouch.png b/docs/html/design/static/content/gesture_longtouch.png
new file mode 100644
index 0000000..3eb3cbc
--- /dev/null
+++ b/docs/html/design/static/content/gesture_longtouch.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_pinchclose.png b/docs/html/design/static/content/gesture_pinchclose.png
new file mode 100644
index 0000000..471251f
--- /dev/null
+++ b/docs/html/design/static/content/gesture_pinchclose.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_pinchopen.png b/docs/html/design/static/content/gesture_pinchopen.png
new file mode 100644
index 0000000..b7c3ee3
--- /dev/null
+++ b/docs/html/design/static/content/gesture_pinchopen.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_swipe.png b/docs/html/design/static/content/gesture_swipe.png
new file mode 100644
index 0000000..f8e8a26
--- /dev/null
+++ b/docs/html/design/static/content/gesture_swipe.png
Binary files differ
diff --git a/docs/html/design/static/content/gesture_touch.png b/docs/html/design/static/content/gesture_touch.png
new file mode 100644
index 0000000..5c49b17
--- /dev/null
+++ b/docs/html/design/static/content/gesture_touch.png
Binary files differ
diff --git a/docs/html/design/static/content/gridview_example.png b/docs/html/design/static/content/gridview_example.png
new file mode 100644
index 0000000..850790f
--- /dev/null
+++ b/docs/html/design/static/content/gridview_example.png
Binary files differ
diff --git a/docs/html/design/static/content/gridview_horizontal.png b/docs/html/design/static/content/gridview_horizontal.png
new file mode 100644
index 0000000..1d329a1
--- /dev/null
+++ b/docs/html/design/static/content/gridview_horizontal.png
Binary files differ
diff --git a/docs/html/design/static/content/gridview_overview.png b/docs/html/design/static/content/gridview_overview.png
new file mode 100644
index 0000000..a831625
--- /dev/null
+++ b/docs/html/design/static/content/gridview_overview.png
Binary files differ
diff --git a/docs/html/design/static/content/gridview_style.png b/docs/html/design/static/content/gridview_style.png
new file mode 100644
index 0000000..77384f9
--- /dev/null
+++ b/docs/html/design/static/content/gridview_style.png
Binary files differ
diff --git a/docs/html/design/static/content/gridview_vertical.png b/docs/html/design/static/content/gridview_vertical.png
new file mode 100644
index 0000000..f7d85a0
--- /dev/null
+++ b/docs/html/design/static/content/gridview_vertical.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_actionbar_colors.png b/docs/html/design/static/content/iconography_actionbar_colors.png
new file mode 100644
index 0000000..2ad550a
--- /dev/null
+++ b/docs/html/design/static/content/iconography_actionbar_colors.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_actionbar_focal.png b/docs/html/design/static/content/iconography_actionbar_focal.png
new file mode 100644
index 0000000..49b6537
--- /dev/null
+++ b/docs/html/design/static/content/iconography_actionbar_focal.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_actionbar_size.png b/docs/html/design/static/content/iconography_actionbar_size.png
new file mode 100644
index 0000000..307a4fe
--- /dev/null
+++ b/docs/html/design/static/content/iconography_actionbar_size.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_actionbar_style.png b/docs/html/design/static/content/iconography_actionbar_style.png
new file mode 100644
index 0000000..a48b448
--- /dev/null
+++ b/docs/html/design/static/content/iconography_actionbar_style.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_launcher_example.png b/docs/html/design/static/content/iconography_launcher_example.png
new file mode 100644
index 0000000..a5db53e
--- /dev/null
+++ b/docs/html/design/static/content/iconography_launcher_example.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_launcher_example2.png b/docs/html/design/static/content/iconography_launcher_example2.png
new file mode 100644
index 0000000..5a709e2
--- /dev/null
+++ b/docs/html/design/static/content/iconography_launcher_example2.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_launcher_focal.png b/docs/html/design/static/content/iconography_launcher_focal.png
new file mode 100644
index 0000000..014a340
--- /dev/null
+++ b/docs/html/design/static/content/iconography_launcher_focal.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_launcher_size.png b/docs/html/design/static/content/iconography_launcher_size.png
new file mode 100644
index 0000000..48267de
--- /dev/null
+++ b/docs/html/design/static/content/iconography_launcher_size.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_launcher_style.png b/docs/html/design/static/content/iconography_launcher_style.png
new file mode 100644
index 0000000..b20c91b
--- /dev/null
+++ b/docs/html/design/static/content/iconography_launcher_style.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_notification_example.png b/docs/html/design/static/content/iconography_notification_example.png
new file mode 100644
index 0000000..a8498ce
--- /dev/null
+++ b/docs/html/design/static/content/iconography_notification_example.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_notification_focal.png b/docs/html/design/static/content/iconography_notification_focal.png
new file mode 100644
index 0000000..20d5e8f
--- /dev/null
+++ b/docs/html/design/static/content/iconography_notification_focal.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_notification_size.png b/docs/html/design/static/content/iconography_notification_size.png
new file mode 100644
index 0000000..b264e98
--- /dev/null
+++ b/docs/html/design/static/content/iconography_notification_size.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_notification_style.png b/docs/html/design/static/content/iconography_notification_style.png
new file mode 100644
index 0000000..a52db1f
--- /dev/null
+++ b/docs/html/design/static/content/iconography_notification_style.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_overview.png b/docs/html/design/static/content/iconography_overview.png
new file mode 100644
index 0000000..688c1b5
--- /dev/null
+++ b/docs/html/design/static/content/iconography_overview.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_small_colors.png b/docs/html/design/static/content/iconography_small_colors.png
new file mode 100644
index 0000000..0ac1bfd
--- /dev/null
+++ b/docs/html/design/static/content/iconography_small_colors.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_small_example.png b/docs/html/design/static/content/iconography_small_example.png
new file mode 100644
index 0000000..1e1400e
--- /dev/null
+++ b/docs/html/design/static/content/iconography_small_example.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_small_focal.png b/docs/html/design/static/content/iconography_small_focal.png
new file mode 100644
index 0000000..dff3c16
--- /dev/null
+++ b/docs/html/design/static/content/iconography_small_focal.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_small_size.png b/docs/html/design/static/content/iconography_small_size.png
new file mode 100644
index 0000000..748cf79
--- /dev/null
+++ b/docs/html/design/static/content/iconography_small_size.png
Binary files differ
diff --git a/docs/html/design/static/content/iconography_small_style.png b/docs/html/design/static/content/iconography_small_style.png
new file mode 100644
index 0000000..0149ac6
--- /dev/null
+++ b/docs/html/design/static/content/iconography_small_style.png
Binary files differ
diff --git a/docs/html/design/static/content/index_landing_page.png b/docs/html/design/static/content/index_landing_page.png
new file mode 100644
index 0000000..3f319b0
--- /dev/null
+++ b/docs/html/design/static/content/index_landing_page.png
Binary files differ
diff --git a/docs/html/design/static/content/lists_main.png b/docs/html/design/static/content/lists_main.png
new file mode 100644
index 0000000..d89ac79
--- /dev/null
+++ b/docs/html/design/static/content/lists_main.png
Binary files differ
diff --git a/docs/html/design/static/content/metrics_48.png b/docs/html/design/static/content/metrics_48.png
new file mode 100644
index 0000000..5e6c57e
--- /dev/null
+++ b/docs/html/design/static/content/metrics_48.png
Binary files differ
diff --git a/docs/html/design/static/content/metrics_closeup.png b/docs/html/design/static/content/metrics_closeup.png
new file mode 100644
index 0000000..032115a
--- /dev/null
+++ b/docs/html/design/static/content/metrics_closeup.png
Binary files differ
diff --git a/docs/html/design/static/content/metrics_diagram.png b/docs/html/design/static/content/metrics_diagram.png
new file mode 100644
index 0000000..b5e6cd2
--- /dev/null
+++ b/docs/html/design/static/content/metrics_diagram.png
Binary files differ
diff --git a/docs/html/design/static/content/metrics_forms.png b/docs/html/design/static/content/metrics_forms.png
new file mode 100644
index 0000000..449bd57
--- /dev/null
+++ b/docs/html/design/static/content/metrics_forms.png
Binary files differ
diff --git a/docs/html/design/static/content/migrating_icons.png b/docs/html/design/static/content/migrating_icons.png
new file mode 100644
index 0000000..1a25867
--- /dev/null
+++ b/docs/html/design/static/content/migrating_icons.png
Binary files differ
diff --git a/docs/html/design/static/content/migrating_ios_dialers.png b/docs/html/design/static/content/migrating_ios_dialers.png
new file mode 100644
index 0000000..27751d8
--- /dev/null
+++ b/docs/html/design/static/content/migrating_ios_dialers.png
Binary files differ
diff --git a/docs/html/design/static/content/migrating_ios_galleries.png b/docs/html/design/static/content/migrating_ios_galleries.png
new file mode 100644
index 0000000..04472fe
--- /dev/null
+++ b/docs/html/design/static/content/migrating_ios_galleries.png
Binary files differ
diff --git a/docs/html/design/static/content/migrating_ios_settings.png b/docs/html/design/static/content/migrating_ios_settings.png
new file mode 100644
index 0000000..b17cb72
--- /dev/null
+++ b/docs/html/design/static/content/migrating_ios_settings.png
Binary files differ
diff --git a/docs/html/design/static/content/migrating_ui_elements.png b/docs/html/design/static/content/migrating_ui_elements.png
new file mode 100644
index 0000000..51c2a80
--- /dev/null
+++ b/docs/html/design/static/content/migrating_ui_elements.png
Binary files differ
diff --git a/docs/html/design/static/content/misc_full_galaxynexus_blank_land_span13.png b/docs/html/design/static/content/misc_full_galaxynexus_blank_land_span13.png
new file mode 100644
index 0000000..bab6aca
--- /dev/null
+++ b/docs/html/design/static/content/misc_full_galaxynexus_blank_land_span13.png
Binary files differ
diff --git a/docs/html/design/static/content/misc_full_galaxynexus_blank_port_span5.png b/docs/html/design/static/content/misc_full_galaxynexus_blank_port_span5.png
new file mode 100644
index 0000000..bdccc2f
--- /dev/null
+++ b/docs/html/design/static/content/misc_full_galaxynexus_blank_port_span5.png
Binary files differ
diff --git a/docs/html/design/static/content/misc_full_galaxynexus_blank_port_span9.png b/docs/html/design/static/content/misc_full_galaxynexus_blank_port_span9.png
new file mode 100644
index 0000000..5e0135b
--- /dev/null
+++ b/docs/html/design/static/content/misc_full_galaxynexus_blank_port_span9.png
Binary files differ
diff --git a/docs/html/design/static/content/multipane_expand.png b/docs/html/design/static/content/multipane_expand.png
new file mode 100644
index 0000000..bb4f371
--- /dev/null
+++ b/docs/html/design/static/content/multipane_expand.png
Binary files differ
diff --git a/docs/html/design/static/content/multipane_show.png b/docs/html/design/static/content/multipane_show.png
new file mode 100644
index 0000000..0231adb
--- /dev/null
+++ b/docs/html/design/static/content/multipane_show.png
Binary files differ
diff --git a/docs/html/design/static/content/multipane_stack.png b/docs/html/design/static/content/multipane_stack.png
new file mode 100644
index 0000000..7769f0c
--- /dev/null
+++ b/docs/html/design/static/content/multipane_stack.png
Binary files differ
diff --git a/docs/html/design/static/content/multipane_stretch.png b/docs/html/design/static/content/multipane_stretch.png
new file mode 100644
index 0000000..5075af6
--- /dev/null
+++ b/docs/html/design/static/content/multipane_stretch.png
Binary files differ
diff --git a/docs/html/design/static/content/multipane_view_tablet.png b/docs/html/design/static/content/multipane_view_tablet.png
new file mode 100644
index 0000000..56a6718
--- /dev/null
+++ b/docs/html/design/static/content/multipane_view_tablet.png
Binary files differ
diff --git a/docs/html/design/static/content/multipane_views.png b/docs/html/design/static/content/multipane_views.png
new file mode 100644
index 0000000..9fdfcfd
--- /dev/null
+++ b/docs/html/design/static/content/multipane_views.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_between_siblings_gmail.png b/docs/html/design/static/content/navigation_between_siblings_gmail.png
new file mode 100644
index 0000000..fe01ed3
--- /dev/null
+++ b/docs/html/design/static/content/navigation_between_siblings_gmail.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_between_siblings_market1.png b/docs/html/design/static/content/navigation_between_siblings_market1.png
new file mode 100644
index 0000000..c3148f8
--- /dev/null
+++ b/docs/html/design/static/content/navigation_between_siblings_market1.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_between_siblings_market2.png b/docs/html/design/static/content/navigation_between_siblings_market2.png
new file mode 100644
index 0000000..208be47
--- /dev/null
+++ b/docs/html/design/static/content/navigation_between_siblings_market2.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_from_outside_back.png b/docs/html/design/static/content/navigation_from_outside_back.png
new file mode 100644
index 0000000..971ee57
--- /dev/null
+++ b/docs/html/design/static/content/navigation_from_outside_back.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_from_outside_up.png b/docs/html/design/static/content/navigation_from_outside_up.png
new file mode 100644
index 0000000..eaa3cdb
--- /dev/null
+++ b/docs/html/design/static/content/navigation_from_outside_up.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_up_vs_back_gmail.png b/docs/html/design/static/content/navigation_up_vs_back_gmail.png
new file mode 100644
index 0000000..71e6484
--- /dev/null
+++ b/docs/html/design/static/content/navigation_up_vs_back_gmail.png
Binary files differ
diff --git a/docs/html/design/static/content/navigation_with_back_and_up.png b/docs/html/design/static/content/navigation_with_back_and_up.png
new file mode 100644
index 0000000..4fb6dce
--- /dev/null
+++ b/docs/html/design/static/content/navigation_with_back_and_up.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_dismiss.png b/docs/html/design/static/content/notifications_dismiss.png
new file mode 100644
index 0000000..71bed4f
--- /dev/null
+++ b/docs/html/design/static/content/notifications_dismiss.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_additional_fail.png b/docs/html/design/static/content/notifications_pattern_additional_fail.png
new file mode 100644
index 0000000..3945ffb
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_additional_fail.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_additional_win.png b/docs/html/design/static/content/notifications_pattern_additional_win.png
new file mode 100644
index 0000000..74472c3
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_additional_win.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_anatomy.png b/docs/html/design/static/content/notifications_pattern_anatomy.png
new file mode 100644
index 0000000..cacc183
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_anatomy.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_dialog_toast.png b/docs/html/design/static/content/notifications_pattern_dialog_toast.png
new file mode 100644
index 0000000..517d57b
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_dialog_toast.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_ongoing_music.png b/docs/html/design/static/content/notifications_pattern_ongoing_music.png
new file mode 100644
index 0000000..01039bd
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_ongoing_music.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_phone_icons.png b/docs/html/design/static/content/notifications_pattern_phone_icons.png
new file mode 100644
index 0000000..09d8a83
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_phone_icons.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_phone_ticker.png b/docs/html/design/static/content/notifications_pattern_phone_ticker.png
new file mode 100644
index 0000000..601e310
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_phone_ticker.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_real_time_people.png b/docs/html/design/static/content/notifications_pattern_real_time_people.png
new file mode 100644
index 0000000..32e62eb
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_real_time_people.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_social_fail.png b/docs/html/design/static/content/notifications_pattern_social_fail.png
new file mode 100644
index 0000000..2c8fddc
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_social_fail.png
Binary files differ
diff --git a/docs/html/design/static/content/notifications_pattern_tablet.png b/docs/html/design/static/content/notifications_pattern_tablet.png
new file mode 100644
index 0000000..15637d5
--- /dev/null
+++ b/docs/html/design/static/content/notifications_pattern_tablet.png
Binary files differ
diff --git a/docs/html/design/static/content/patterns_landing.png b/docs/html/design/static/content/patterns_landing.png
new file mode 100644
index 0000000..d9869a5
--- /dev/null
+++ b/docs/html/design/static/content/patterns_landing.png
Binary files differ
diff --git a/docs/html/design/static/content/picker_datetime.png b/docs/html/design/static/content/picker_datetime.png
new file mode 100644
index 0000000..9876ab2
--- /dev/null
+++ b/docs/html/design/static/content/picker_datetime.png
Binary files differ
diff --git a/docs/html/design/static/content/picker_space.png b/docs/html/design/static/content/picker_space.png
new file mode 100644
index 0000000..024776f
--- /dev/null
+++ b/docs/html/design/static/content/picker_space.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_decide_for_me.png b/docs/html/design/static/content/principles_decide_for_me.png
new file mode 100644
index 0000000..65911bc
--- /dev/null
+++ b/docs/html/design/static/content/principles_decide_for_me.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_delight.png b/docs/html/design/static/content/principles_delight.png
new file mode 100644
index 0000000..5d6e909
--- /dev/null
+++ b/docs/html/design/static/content/principles_delight.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_error.png b/docs/html/design/static/content/principles_error.png
new file mode 100644
index 0000000..93767660
--- /dev/null
+++ b/docs/html/design/static/content/principles_error.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_get_to_know_me.png b/docs/html/design/static/content/principles_get_to_know_me.png
new file mode 100644
index 0000000..954363f
--- /dev/null
+++ b/docs/html/design/static/content/principles_get_to_know_me.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_heavy_lifting.png b/docs/html/design/static/content/principles_heavy_lifting.png
new file mode 100644
index 0000000..c89c0ff
--- /dev/null
+++ b/docs/html/design/static/content/principles_heavy_lifting.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_important_interruption.png b/docs/html/design/static/content/principles_important_interruption.png
new file mode 100644
index 0000000..0576efe
--- /dev/null
+++ b/docs/html/design/static/content/principles_important_interruption.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_information_when_need_it.png b/docs/html/design/static/content/principles_information_when_need_it.png
new file mode 100644
index 0000000..c5ef3ca
--- /dev/null
+++ b/docs/html/design/static/content/principles_information_when_need_it.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_keep_it_brief.png b/docs/html/design/static/content/principles_keep_it_brief.png
new file mode 100644
index 0000000..9c2813b
--- /dev/null
+++ b/docs/html/design/static/content/principles_keep_it_brief.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_looks_same.png b/docs/html/design/static/content/principles_looks_same.png
new file mode 100644
index 0000000..3a556ad
--- /dev/null
+++ b/docs/html/design/static/content/principles_looks_same.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_make_important_fast.png b/docs/html/design/static/content/principles_make_important_fast.png
new file mode 100644
index 0000000..26da655
--- /dev/null
+++ b/docs/html/design/static/content/principles_make_important_fast.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_make_it_mine.png b/docs/html/design/static/content/principles_make_it_mine.png
new file mode 100644
index 0000000..3b63238
--- /dev/null
+++ b/docs/html/design/static/content/principles_make_it_mine.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_navigation.png b/docs/html/design/static/content/principles_navigation.png
new file mode 100644
index 0000000..c23dde7
--- /dev/null
+++ b/docs/html/design/static/content/principles_navigation.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_never_lose_stuff.png b/docs/html/design/static/content/principles_never_lose_stuff.png
new file mode 100644
index 0000000..acbefea
--- /dev/null
+++ b/docs/html/design/static/content/principles_never_lose_stuff.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_pictures.png b/docs/html/design/static/content/principles_pictures.png
new file mode 100644
index 0000000..cebd162
--- /dev/null
+++ b/docs/html/design/static/content/principles_pictures.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_real_objects.png b/docs/html/design/static/content/principles_real_objects.png
new file mode 100644
index 0000000..3889c9a
--- /dev/null
+++ b/docs/html/design/static/content/principles_real_objects.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_sprinkle_encouragement.png b/docs/html/design/static/content/principles_sprinkle_encouragement.png
new file mode 100644
index 0000000..8617365
--- /dev/null
+++ b/docs/html/design/static/content/principles_sprinkle_encouragement.png
Binary files differ
diff --git a/docs/html/design/static/content/principles_tricks.png b/docs/html/design/static/content/principles_tricks.png
new file mode 100644
index 0000000..f436ce9
--- /dev/null
+++ b/docs/html/design/static/content/principles_tricks.png
Binary files differ
diff --git a/docs/html/design/static/content/progress_activity.png b/docs/html/design/static/content/progress_activity.png
new file mode 100644
index 0000000..51210b4
--- /dev/null
+++ b/docs/html/design/static/content/progress_activity.png
Binary files differ
diff --git a/docs/html/design/static/content/progress_activity2.png b/docs/html/design/static/content/progress_activity2.png
new file mode 100644
index 0000000..ec3df99
--- /dev/null
+++ b/docs/html/design/static/content/progress_activity2.png
Binary files differ
diff --git a/docs/html/design/static/content/progress_download.png b/docs/html/design/static/content/progress_download.png
new file mode 100644
index 0000000..f567f74
--- /dev/null
+++ b/docs/html/design/static/content/progress_download.png
Binary files differ
diff --git a/docs/html/design/static/content/progress_themes.png b/docs/html/design/static/content/progress_themes.png
new file mode 100644
index 0000000..df090e5
--- /dev/null
+++ b/docs/html/design/static/content/progress_themes.png
Binary files differ
diff --git a/docs/html/design/static/content/scroll_index.mp4 b/docs/html/design/static/content/scroll_index.mp4
new file mode 100644
index 0000000..383bbd8
--- /dev/null
+++ b/docs/html/design/static/content/scroll_index.mp4
Binary files differ
diff --git a/docs/html/design/static/content/scroll_index.ogv b/docs/html/design/static/content/scroll_index.ogv
new file mode 100644
index 0000000..2cd61ef
--- /dev/null
+++ b/docs/html/design/static/content/scroll_index.ogv
Binary files differ
diff --git a/docs/html/design/static/content/scroll_index.webm b/docs/html/design/static/content/scroll_index.webm
new file mode 100644
index 0000000..5a665d1
--- /dev/null
+++ b/docs/html/design/static/content/scroll_index.webm
Binary files differ
diff --git a/docs/html/design/static/content/scroll_indicator.mp4 b/docs/html/design/static/content/scroll_indicator.mp4
new file mode 100644
index 0000000..924852e
--- /dev/null
+++ b/docs/html/design/static/content/scroll_indicator.mp4
Binary files differ
diff --git a/docs/html/design/static/content/scroll_indicator.ogv b/docs/html/design/static/content/scroll_indicator.ogv
new file mode 100644
index 0000000..c037bf5
--- /dev/null
+++ b/docs/html/design/static/content/scroll_indicator.ogv
Binary files differ
diff --git a/docs/html/design/static/content/scroll_indicator.webm b/docs/html/design/static/content/scroll_indicator.webm
new file mode 100644
index 0000000..000dc0a
--- /dev/null
+++ b/docs/html/design/static/content/scroll_indicator.webm
Binary files differ
diff --git a/docs/html/design/static/content/seekbar_example.png b/docs/html/design/static/content/seekbar_example.png
new file mode 100644
index 0000000..70b7e5e
--- /dev/null
+++ b/docs/html/design/static/content/seekbar_example.png
Binary files differ
diff --git a/docs/html/design/static/content/seekbar_style.png b/docs/html/design/static/content/seekbar_style.png
new file mode 100644
index 0000000..e31445d
--- /dev/null
+++ b/docs/html/design/static/content/seekbar_style.png
Binary files differ
diff --git a/docs/html/design/static/content/selection_adjusting_actions.png b/docs/html/design/static/content/selection_adjusting_actions.png
new file mode 100644
index 0000000..0799b6b
--- /dev/null
+++ b/docs/html/design/static/content/selection_adjusting_actions.png
Binary files differ
diff --git a/docs/html/design/static/content/selection_cab_big.png b/docs/html/design/static/content/selection_cab_big.png
new file mode 100644
index 0000000..72567cb
--- /dev/null
+++ b/docs/html/design/static/content/selection_cab_big.png
Binary files differ
diff --git a/docs/html/design/static/content/selection_cab_example.png b/docs/html/design/static/content/selection_cab_example.png
new file mode 100644
index 0000000..c49a2ad
--- /dev/null
+++ b/docs/html/design/static/content/selection_cab_example.png
Binary files differ
diff --git a/docs/html/design/static/content/selection_context_menu.png b/docs/html/design/static/content/selection_context_menu.png
new file mode 100644
index 0000000..c711546
--- /dev/null
+++ b/docs/html/design/static/content/selection_context_menu.png
Binary files differ
diff --git a/docs/html/design/static/content/spinners_actionbar.png b/docs/html/design/static/content/spinners_actionbar.png
new file mode 100644
index 0000000..5d07419
--- /dev/null
+++ b/docs/html/design/static/content/spinners_actionbar.png
Binary files differ
diff --git a/docs/html/design/static/content/spinners_form.png b/docs/html/design/static/content/spinners_form.png
new file mode 100644
index 0000000..79ee4e4
--- /dev/null
+++ b/docs/html/design/static/content/spinners_form.png
Binary files differ
diff --git a/docs/html/design/static/content/spinners_hololightanddark.png b/docs/html/design/static/content/spinners_hololightanddark.png
new file mode 100644
index 0000000..9b0601e
--- /dev/null
+++ b/docs/html/design/static/content/spinners_hololightanddark.png
Binary files differ
diff --git a/docs/html/design/static/content/swipe_tabs.mp4 b/docs/html/design/static/content/swipe_tabs.mp4
new file mode 100644
index 0000000..f8a1ab5
--- /dev/null
+++ b/docs/html/design/static/content/swipe_tabs.mp4
Binary files differ
diff --git a/docs/html/design/static/content/swipe_tabs.ogv b/docs/html/design/static/content/swipe_tabs.ogv
new file mode 100644
index 0000000..ae3c86b
--- /dev/null
+++ b/docs/html/design/static/content/swipe_tabs.ogv
Binary files differ
diff --git a/docs/html/design/static/content/swipe_tabs.png b/docs/html/design/static/content/swipe_tabs.png
new file mode 100644
index 0000000..f25f061
--- /dev/null
+++ b/docs/html/design/static/content/swipe_tabs.png
Binary files differ
diff --git a/docs/html/design/static/content/swipe_tabs.webm b/docs/html/design/static/content/swipe_tabs.webm
new file mode 100644
index 0000000..86f403e
--- /dev/null
+++ b/docs/html/design/static/content/swipe_tabs.webm
Binary files differ
diff --git a/docs/html/design/static/content/swipe_views.png b/docs/html/design/static/content/swipe_views.png
new file mode 100644
index 0000000..3b6ecaf
--- /dev/null
+++ b/docs/html/design/static/content/swipe_views.png
Binary files differ
diff --git a/docs/html/design/static/content/swipe_views2.png b/docs/html/design/static/content/swipe_views2.png
new file mode 100644
index 0000000..2ed366c
--- /dev/null
+++ b/docs/html/design/static/content/swipe_views2.png
Binary files differ
diff --git a/docs/html/design/static/content/switches_checkboxes.png b/docs/html/design/static/content/switches_checkboxes.png
new file mode 100644
index 0000000..92b8d5c
--- /dev/null
+++ b/docs/html/design/static/content/switches_checkboxes.png
Binary files differ
diff --git a/docs/html/design/static/content/switches_radios.png b/docs/html/design/static/content/switches_radios.png
new file mode 100644
index 0000000..f9bf5fc
--- /dev/null
+++ b/docs/html/design/static/content/switches_radios.png
Binary files differ
diff --git a/docs/html/design/static/content/switches_switches.png b/docs/html/design/static/content/switches_switches.png
new file mode 100644
index 0000000..43e2623
--- /dev/null
+++ b/docs/html/design/static/content/switches_switches.png
Binary files differ
diff --git a/docs/html/design/static/content/system_ui_landing.png b/docs/html/design/static/content/system_ui_landing.png
new file mode 100644
index 0000000..1d22920
--- /dev/null
+++ b/docs/html/design/static/content/system_ui_landing.png
Binary files differ
diff --git a/docs/html/design/static/content/tabs_overview.png b/docs/html/design/static/content/tabs_overview.png
new file mode 100644
index 0000000..c336982
--- /dev/null
+++ b/docs/html/design/static/content/tabs_overview.png
Binary files differ
diff --git a/docs/html/design/static/content/tabs_scrolly.mp4 b/docs/html/design/static/content/tabs_scrolly.mp4
new file mode 100644
index 0000000..4329243
--- /dev/null
+++ b/docs/html/design/static/content/tabs_scrolly.mp4
Binary files differ
diff --git a/docs/html/design/static/content/tabs_scrolly.ogv b/docs/html/design/static/content/tabs_scrolly.ogv
new file mode 100644
index 0000000..345e57a
--- /dev/null
+++ b/docs/html/design/static/content/tabs_scrolly.ogv
Binary files differ
diff --git a/docs/html/design/static/content/tabs_scrolly.webm b/docs/html/design/static/content/tabs_scrolly.webm
new file mode 100644
index 0000000..17e368e
--- /dev/null
+++ b/docs/html/design/static/content/tabs_scrolly.webm
Binary files differ
diff --git a/docs/html/design/static/content/tabs_stacked.png b/docs/html/design/static/content/tabs_stacked.png
new file mode 100644
index 0000000..09e9958
--- /dev/null
+++ b/docs/html/design/static/content/tabs_stacked.png
Binary files differ
diff --git a/docs/html/design/static/content/tabs_standard.png b/docs/html/design/static/content/tabs_standard.png
new file mode 100644
index 0000000..8e3ed66
--- /dev/null
+++ b/docs/html/design/static/content/tabs_standard.png
Binary files differ
diff --git a/docs/html/design/static/content/tabs_youtube.png b/docs/html/design/static/content/tabs_youtube.png
new file mode 100644
index 0000000..69e9268
--- /dev/null
+++ b/docs/html/design/static/content/tabs_youtube.png
Binary files differ
diff --git a/docs/html/design/static/content/text_input_holodarkandlight.png b/docs/html/design/static/content/text_input_holodarkandlight.png
new file mode 100644
index 0000000..aff61fc
--- /dev/null
+++ b/docs/html/design/static/content/text_input_holodarkandlight.png
Binary files differ
diff --git a/docs/html/design/static/content/text_input_singlevsmultiline.png b/docs/html/design/static/content/text_input_singlevsmultiline.png
new file mode 100644
index 0000000..7bb9a5c
--- /dev/null
+++ b/docs/html/design/static/content/text_input_singlevsmultiline.png
Binary files differ
diff --git a/docs/html/design/static/content/text_input_textselection.png b/docs/html/design/static/content/text_input_textselection.png
new file mode 100644
index 0000000..85689cf
--- /dev/null
+++ b/docs/html/design/static/content/text_input_textselection.png
Binary files differ
diff --git a/docs/html/design/static/content/text_input_typesandtypedown.png b/docs/html/design/static/content/text_input_typesandtypedown.png
new file mode 100644
index 0000000..32f761c
--- /dev/null
+++ b/docs/html/design/static/content/text_input_typesandtypedown.png
Binary files differ
diff --git a/docs/html/design/static/content/themes_holo_dark.png b/docs/html/design/static/content/themes_holo_dark.png
new file mode 100644
index 0000000..916ad27
--- /dev/null
+++ b/docs/html/design/static/content/themes_holo_dark.png
Binary files differ
diff --git a/docs/html/design/static/content/themes_holo_inverse.png b/docs/html/design/static/content/themes_holo_inverse.png
new file mode 100644
index 0000000..72c0244
--- /dev/null
+++ b/docs/html/design/static/content/themes_holo_inverse.png
Binary files differ
diff --git a/docs/html/design/static/content/themes_holo_light.png b/docs/html/design/static/content/themes_holo_light.png
new file mode 100644
index 0000000..d4b0861
--- /dev/null
+++ b/docs/html/design/static/content/themes_holo_light.png
Binary files differ
diff --git a/docs/html/design/static/content/touch_feedback_communication.png b/docs/html/design/static/content/touch_feedback_communication.png
new file mode 100644
index 0000000..bb27250
--- /dev/null
+++ b/docs/html/design/static/content/touch_feedback_communication.png
Binary files differ
diff --git a/docs/html/design/static/content/touch_feedback_manipulation.png b/docs/html/design/static/content/touch_feedback_manipulation.png
new file mode 100644
index 0000000..cb1f2681
--- /dev/null
+++ b/docs/html/design/static/content/touch_feedback_manipulation.png
Binary files differ
diff --git a/docs/html/design/static/content/touch_feedback_reaction_response.png b/docs/html/design/static/content/touch_feedback_reaction_response.png
new file mode 100644
index 0000000..5a34d7a
--- /dev/null
+++ b/docs/html/design/static/content/touch_feedback_reaction_response.png
Binary files differ
diff --git a/docs/html/design/static/content/touch_feedback_states.png b/docs/html/design/static/content/touch_feedback_states.png
new file mode 100644
index 0000000..972198c
--- /dev/null
+++ b/docs/html/design/static/content/touch_feedback_states.png
Binary files differ
diff --git a/docs/html/design/static/content/typography_alphas.png b/docs/html/design/static/content/typography_alphas.png
new file mode 100644
index 0000000..4b53bd0
--- /dev/null
+++ b/docs/html/design/static/content/typography_alphas.png
Binary files differ
diff --git a/docs/html/design/static/content/typography_defaults.png b/docs/html/design/static/content/typography_defaults.png
new file mode 100644
index 0000000..87f1c87
--- /dev/null
+++ b/docs/html/design/static/content/typography_defaults.png
Binary files differ
diff --git a/docs/html/design/static/content/typography_main.png b/docs/html/design/static/content/typography_main.png
new file mode 100644
index 0000000..8298cf6e
--- /dev/null
+++ b/docs/html/design/static/content/typography_main.png
Binary files differ
diff --git a/docs/html/design/static/content/typography_sizes.png b/docs/html/design/static/content/typography_sizes.png
new file mode 100644
index 0000000..eda1d99
--- /dev/null
+++ b/docs/html/design/static/content/typography_sizes.png
Binary files differ
diff --git a/docs/html/design/static/content/ui_overview_all_apps.png b/docs/html/design/static/content/ui_overview_all_apps.png
new file mode 100644
index 0000000..467f5ad
--- /dev/null
+++ b/docs/html/design/static/content/ui_overview_all_apps.png
Binary files differ
diff --git a/docs/html/design/static/content/ui_overview_app_ui.png b/docs/html/design/static/content/ui_overview_app_ui.png
new file mode 100644
index 0000000..7fc5dcd
--- /dev/null
+++ b/docs/html/design/static/content/ui_overview_app_ui.png
Binary files differ
diff --git a/docs/html/design/static/content/ui_overview_home_screen.png b/docs/html/design/static/content/ui_overview_home_screen.png
new file mode 100644
index 0000000..ee0e4d6
--- /dev/null
+++ b/docs/html/design/static/content/ui_overview_home_screen.png
Binary files differ
diff --git a/docs/html/design/static/content/ui_overview_notifications.png b/docs/html/design/static/content/ui_overview_notifications.png
new file mode 100644
index 0000000..fd7438a
--- /dev/null
+++ b/docs/html/design/static/content/ui_overview_notifications.png
Binary files differ
diff --git a/docs/html/design/static/content/ui_overview_recents.png b/docs/html/design/static/content/ui_overview_recents.png
new file mode 100644
index 0000000..4ea0583
--- /dev/null
+++ b/docs/html/design/static/content/ui_overview_recents.png
Binary files differ
diff --git a/docs/html/design/static/content/ui_overview_system_ui.png b/docs/html/design/static/content/ui_overview_system_ui.png
new file mode 100644
index 0000000..ecc4b7d
--- /dev/null
+++ b/docs/html/design/static/content/ui_overview_system_ui.png
Binary files differ
diff --git a/docs/html/design/static/content/whats_new_action_bar.png b/docs/html/design/static/content/whats_new_action_bar.png
new file mode 100644
index 0000000..713187e
--- /dev/null
+++ b/docs/html/design/static/content/whats_new_action_bar.png
Binary files differ
diff --git a/docs/html/design/static/content/whats_new_multipanel.png b/docs/html/design/static/content/whats_new_multipanel.png
new file mode 100644
index 0000000..8e9c2f0
--- /dev/null
+++ b/docs/html/design/static/content/whats_new_multipanel.png
Binary files differ
diff --git a/docs/html/design/static/content/whats_new_multiselect.png b/docs/html/design/static/content/whats_new_multiselect.png
new file mode 100644
index 0000000..ab34b24
--- /dev/null
+++ b/docs/html/design/static/content/whats_new_multiselect.png
Binary files differ
diff --git a/docs/html/design/static/content/whats_new_nav_bar.png b/docs/html/design/static/content/whats_new_nav_bar.png
new file mode 100644
index 0000000..46239e5
--- /dev/null
+++ b/docs/html/design/static/content/whats_new_nav_bar.png
Binary files differ
diff --git a/docs/html/design/static/default.css b/docs/html/design/static/default.css
new file mode 100644
index 0000000..20fefad
--- /dev/null
+++ b/docs/html/design/static/default.css
@@ -0,0 +1,572 @@
+/* color definitions */
+/* 16 column layout */
+/* clearfix idiom */
+/* common mixins */
+/* page layout + top-level styles */
+::-moz-selection,
+::-webkit-selection,
+::selection {
+  background-color: #0099cc;
+  color: #fff; }
+
+html, body {
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  background: #eee none no-repeat fixed top left;
+  background-image: -webkit-gradient(linear, 100% 0%, 100% 100%, from(#dddddd), color-stop(25%, #f2f2f2), color-stop(75%, #f2f2f2), to(#dddddd));
+  background-image: -moz-linear-gradient(top, #dddddd, #f2f2f2, #f2f2f2, #dddddd);
+  -webkit-font-smoothing: antialiased;
+  /* prevent subpixel antialiasing, which thickens the text */
+  text-rendering: optimizeLegibility;
+  /* opentype ftw */ }
+
+body {
+  color: #555555;
+  font: 14px/20px Roboto, sans-serif;
+  font-weight: 400; }
+
+#page-container {
+  width: 940px;
+  margin: 0 40px; }
+
+#page-header {
+  height: 80px;
+  margin-bottom: 20px;
+  font-size: 48px;
+  line-height: 48px;
+  font-weight: 100;
+  padding-left: 10px; }
+  #page-header a {
+    display: block;
+    position: relative;
+    top: 20px;
+    text-decoration: none;
+    color: #555555 !important; }
+
+#main-row {
+  display: inline-block; }
+  #main-row:after {
+    content: ".";
+    display: block;
+    height: 0;
+    clear: both;
+    visibility: hidden; }
+  * html #main-row {
+    height: 1px; }
+
+#page-footer {
+  margin-left: 190px;
+  margin-top: 80px;
+  color: #999999;
+  padding-bottom: 40px;
+  font-size: 12px;
+  line-height: 15px; }
+  #page-footer a {
+    color: #777777; }
+  #page-footer #copyright {
+    margin-bottom: 10px; }
+
+#nav {
+  width: 160px;
+  margin-right: 20px;
+  float: left; }
+
+#content {
+  width: 760px;
+  float: left; }
+
+a,
+a:visited {
+  color: #333333; }
+
+a:hover,
+acronym:hover {
+  color: #7aa1b0 !important; }
+
+a:focus,
+a:active {
+  color: #33b5e5 !important; }
+
+img {
+  border: none; }
+
+ul {
+  margin: 0;
+  padding: 0; }
+
+strong {
+  font-weight: 500; }
+
+em {
+  font-style: italic; }
+
+code {
+  font-family: Courier New, monospace; }
+
+acronym {
+  border-bottom: 1px dotted #555555;
+  cursor: help; }
+
+acronym:hover {
+  border-bottom-color: #7aa1b0; }
+
+img.with-shadow,
+video.with-shadow {
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25); }
+
+/* disclosures mixin */
+/* content layout */
+.layout-content-row {
+  display: inline-block;
+  margin-bottom: 10px; }
+  .layout-content-row:after {
+    content: ".";
+    display: block;
+    height: 0;
+    clear: both;
+    visibility: hidden; }
+  * html .layout-content-row {
+    height: 1px; }
+
+.layout-content-col {
+  float: left;
+  margin-left: 20px; }
+  .layout-content-col:first-child {
+    margin-left: 0; }
+
+.layout-content-col.span-1 {
+  width: 40px; }
+
+.layout-content-col.span-2 {
+  width: 100px; }
+
+.layout-content-col.span-3 {
+  width: 160px; }
+
+.layout-content-col.span-4 {
+  width: 220px; }
+
+.layout-content-col.span-5 {
+  width: 280px; }
+
+.layout-content-col.span-6 {
+  width: 340px; }
+
+.layout-content-col.span-7 {
+  width: 400px; }
+
+.layout-content-col.span-8 {
+  width: 460px; }
+
+.layout-content-col.span-9 {
+  width: 520px; }
+
+.layout-content-col.span-10 {
+  width: 580px; }
+
+.layout-content-col.span-11 {
+  width: 640px; }
+
+.layout-content-col.span-12 {
+  width: 700px; }
+
+.layout-content-col.span-13 {
+  width: 760px; }
+
+.vspace.size-1 {
+  height: 10px; }
+
+.vspace.size-2 {
+  height: 20px; }
+
+.vspace.size-3 {
+  height: 30px; }
+
+.vspace.size-4 {
+  height: 40px; }
+
+.vspace.size-5 {
+  height: 50px; }
+
+.vspace.size-6 {
+  height: 60px; }
+
+.vspace.size-7 {
+  height: 70px; }
+
+.vspace.size-8 {
+  height: 80px; }
+
+.vspace.size-9 {
+  height: 90px; }
+
+.vspace.size-10 {
+  height: 100px; }
+
+.vspace.size-11 {
+  height: 110px; }
+
+.vspace.size-12 {
+  height: 120px; }
+
+.vspace.size-13 {
+  height: 130px; }
+
+.vspace.size-14 {
+  height: 140px; }
+
+.vspace.size-15 {
+  height: 150px; }
+
+.vspace.size-16 {
+  height: 160px; }
+
+/* nav */
+#nav {
+  /* section header divs */
+  /* expanded section header divs */
+  /* sublinks */ }
+  #nav li {
+    list-style-type: none;
+    font-size: 14px;
+    line-height: 10px; }
+  #nav a {
+    color: #555555;
+    text-decoration: none; }
+  #nav li.selected > a,
+  #nav li.selected .nav-section-header a {
+    font-weight: 500;
+    color: #0099cc !important; }
+  #nav .nav-section-header {
+    position: relative;
+    padding: 10px;
+    margin-bottom: 1px;
+    /* section header links */ }
+    #nav .nav-section-header a {
+      color: #333333;
+      font-weight: 500;
+      text-transform: uppercase; }
+    #nav .nav-section-header:after {
+      content: '';
+      background: transparent url(disclosure_down.png) no-repeat scroll top left;
+      width: 10px;
+      height: 10px;
+      display: block;
+      position: absolute;
+      top: 10px;
+      right: 10px; }
+  #nav li.expanded .nav-section-header {
+    background: rgba(0, 0, 0, 0.05); }
+    #nav li.expanded .nav-section-header:after {
+      content: '';
+      background: transparent url(disclosure_up.png) no-repeat scroll top left;
+      width: 10px;
+      height: 10px; }
+  #nav > li > ul {
+    height: 0;
+    overflow: hidden;
+    margin-bottom: 0; }
+    #nav > li > ul.animate-height {
+      transition: height 0.25s ease-in;
+      -webkit-transition: height 0.25s ease-in;
+      -moz-transition: height 0.25s ease-in; }
+    #nav > li > ul li {
+      padding: 10px 10px 11px 10px; }
+  #nav > li.expanded > ul {
+    height: auto; }
+    #nav > li.expanded > ul li {
+      background: rgba(0, 0, 0, 0.03); }
+  #nav #back-dac-section {
+    padding: 10px;
+    border-top: 1px solid #ddd;
+    background: transparent url(open_new_page.png) no-repeat scroll 139px 9px; }
+    #nav #back-dac-section a {
+      color: #333333;
+      font-weight: 500;
+      text-transform: uppercase; }
+
+/* content header */
+.content-header {
+  border-bottom: 1px solid #33b5e5;
+  height: 30px; }
+  .content-header h2 {
+    border-bottom: 0; }
+  .content-header.just-links {
+    border-bottom: 0; }
+
+.content-footer {
+  border-top: 1px solid #33b5e5;
+  margin-top: 10px;
+  height: 30px; }
+
+.paging-links {
+  position: relative; }
+  .paging-links a {
+    position: absolute;
+    font-size: 14px;
+    line-height: 30px;
+    color: #555555;
+    text-decoration: none;
+    text-transform: uppercase; }
+  .paging-links .prev-page-link {
+    display: none;
+    left: -5px; }
+    .paging-links .prev-page-link:before {
+      content: '';
+      background: transparent url(disclosure_left.png) no-repeat scroll top left;
+      width: 10px;
+      height: 10px;
+      display: inline-block;
+      margin-right: 5px; }
+  .paging-links .next-page-link {
+    display: none;
+    right: 10px; }
+    .paging-links .next-page-link:after {
+      content: '';
+      background: transparent url(disclosure_right.png) no-repeat scroll top left;
+      width: 10px;
+      height: 10px;
+      display: inline-block;
+      margin-left: 5px; }
+
+/* content body */
+#content p,
+#content ul,
+#content ol,
+#content h3 {
+  margin: 0 10px 10px 10px; }
+#content h2 {
+  padding-left: 10px;
+  padding-right: 10px;
+  margin-bottom: 10px;
+  font-size: 16px;
+  line-height: 30px;
+  font-weight: 500;
+  color: #33b5e5;
+  border-bottom: 1px solid #33b5e5;
+  height: 30px; }
+#content hr {
+  border: 0;
+  border-bottom: 1px solid #33b5e5;
+  margin-bottom: 20px; }
+#content h3 {
+  color: #33b5e5;
+  text-transform: uppercase;
+  font-size: 14px;
+  line-height: 20px;
+  font-weight: 500; }
+#content h4 {
+  margin: 0 10px;
+  color: #333333;
+  font-weight: 500;
+  font-size: 14px;
+  line-height: 20px; }
+#content strong {
+  color: #333333; }
+#content ul li,
+#content ol li {
+  margin-left: 20px; }
+  #content ul li h4,
+  #content ol li h4 {
+    margin: 0; }
+  #content ul li p,
+  #content ol li p {
+    margin-left: 0; }
+#content ul li {
+  list-style-type: square;
+  list-style-type: none;
+  position: relative; }
+  #content ul li:before {
+    content: '\2022';
+    font-family: verdana;
+    font-size: 14px;
+    line-height: 20px;
+    position: absolute;
+    left: -20px;
+    top: -1px; }
+#content ol {
+  counter-reset: item; }
+  #content ol li {
+    font-size: 14px;
+    line-height: 20px;
+    list-style-type: none;
+    position: relative; }
+    #content ol li:before {
+      content: counter(item) ". ";
+      counter-increment: item;
+      position: absolute;
+      left: -20px;
+      top: 0; }
+    #content ol li.value-1:before {
+      content: "1. "; }
+    #content ol li.value-2:before {
+      content: "2. "; }
+    #content ol li.value-3:before {
+      content: "3. "; }
+    #content ol li.value-4:before {
+      content: "4. "; }
+    #content ol li.value-5:before {
+      content: "5. "; }
+    #content ol li.value-6:before {
+      content: "6. "; }
+    #content ol li.value-7:before {
+      content: "7. "; }
+    #content ol li.value-8:before {
+      content: "8. "; }
+    #content ol li.value-9:before {
+      content: "9. "; }
+    #content ol li.value-10:before {
+      content: "10. "; }
+#content .with-callouts ol li {
+  list-style-position: inside;
+  margin-left: 0; }
+  #content .with-callouts ol li:before {
+    position: static;
+    display: inline;
+    left: 0;
+    float: left;
+    width: 17px;
+    color: #33b5e5;
+    font-weight: 500; }
+
+/* special list items */
+li.no-bullet {
+  list-style-type: none !important; }
+
+#content li.with-icon {
+  position: relative;
+  margin-left: 40px;
+  min-height: 30px; }
+  #content li.with-icon p {
+    margin-left: 0 !important; }
+  #content li.with-icon:before {
+    position: absolute;
+    left: -40px;
+    top: 0;
+    content: '';
+    width: 30px;
+    height: 30px; }
+  #content li.with-icon.tablet:before {
+    background-image: url(ico_phone_tablet.png); }
+  #content li.with-icon.web:before {
+    background-image: url(ico_web.png); }
+  #content li.with-icon.checklist:before {
+    background-image: url(ico_checklist.png); }
+  #content li.with-icon.action:before {
+    background-image: url(ico_action.png); }
+  #content li.with-icon.use:before {
+    background-image: url(ico_use.png); }
+
+/* figures and callouts */
+.figure {
+  position: relative; }
+  .figure.pad-below {
+    margin-bottom: 20px; }
+  .figure .figure-callout {
+    position: absolute;
+    color: #fff;
+    font-weight: 500;
+    font-size: 16px;
+    line-height: 23px;
+    text-align: center;
+    background: transparent url(callout.png) no-repeat scroll 50% 50%;
+    padding-right: 2px;
+    width: 30px;
+    height: 29px;
+    z-index: 1000; }
+    .figure .figure-callout.top {
+      top: -9px; }
+    .figure .figure-callout.right {
+      right: -5px; }
+
+.figure-caption {
+  margin: 0 10px 20px 10px;
+  font-size: 14px;
+  line-height: 20px;
+  font-style: italic; }
+
+/* rows of figures */
+.figure-row {
+  font-size: 0;
+  line-height: 0;
+  /* to prevent space between figures */ }
+  .figure-row .figure {
+    display: inline-block;
+    vertical-align: top; }
+  .figure-row .figure + .figure {
+    margin-left: 10px;
+    /* reintroduce space between figures */ }
+
+/* video  containers */
+.framed-galaxynexus-land-span-13 {
+  background: transparent url(content/misc_full_galaxynexus_blank_land_span13.png) no-repeat scroll top left;
+  padding: 42px 122px 62px 126px;
+  overflow: hidden; }
+  .framed-galaxynexus-land-span-13, .framed-galaxynexus-land-span-13 video, .framed-galaxynexus-land-span-13 img {
+    width: 512px;
+    height: 286px; }
+
+.framed-galaxynexus-port-span-9 {
+  background: transparent url(content/misc_full_galaxynexus_blank_port_span9.png) no-repeat scroll top left;
+  padding: 95px 122px 107px 124px;
+  overflow: hidden; }
+  .framed-galaxynexus-port-span-9, .framed-galaxynexus-port-span-9 video, .framed-galaxynexus-port-span-9 img {
+    width: 274px;
+    height: 488px; }
+
+.framed-galaxynexus-port-span-5 {
+  background: transparent url(content/misc_full_galaxynexus_blank_port_span5.png) no-repeat scroll top left;
+  padding: 75px 31px 76px 33px;
+  overflow: hidden; }
+  .framed-galaxynexus-port-span-5, .framed-galaxynexus-port-span-5 video, .framed-galaxynexus-port-span-5 img {
+    width: 216px;
+    height: 384px; }
+
+/* landing page disclosures */
+.landing-page-link {
+  text-decoration: none;
+  font-weight: 500;
+  color: #333333; }
+  .landing-page-link:after {
+    content: '';
+    background: transparent url(disclosure_right.png) no-repeat scroll top left;
+    width: 10px;
+    height: 10px;
+    display: inline-block;
+    margin-left: 5px; }
+
+/* tooltips */
+.tooltip-box {
+  position: absolute;
+  background-color: rgba(0, 0, 0, 0.9);
+  border-radius: 2px;
+  font-size: 14px;
+  line-height: 20px;
+  color: #fff;
+  padding: 6px 10px;
+  max-width: 250px;
+  z-index: 10000; }
+  .tooltip-box.below:after {
+    position: absolute;
+    content: '';
+    line-height: 0;
+    display: block;
+    top: -10px;
+    left: 5px;
+    border: 5px solid transparent;
+    border-bottom-color: rgba(0, 0, 0, 0.9); }
+
+/* video note */
+.video-instructions {
+  margin-top: 10px;
+  margin-bottom: 10px; }
+  .video-instructions:before {
+    content: '';
+    background: transparent url(ico_movie_inline.png) no-repeat scroll top left;
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    margin-right: 8px; }
+  .video-instructions:after {
+    content: 'Click or move mouse over screenshot to replay movie.'; }
diff --git a/docs/html/design/static/default.js b/docs/html/design/static/default.js
new file mode 100644
index 0000000..26848e6
--- /dev/null
+++ b/docs/html/design/static/default.js
@@ -0,0 +1,160 @@
+$(document).ready(function() {
+  // prep nav expandos
+  var pagePath = document.location.pathname;
+  if (pagePath.indexOf(SITE_ROOT) == 0) {
+    pagePath = pagePath.substr(SITE_ROOT.length);
+    if (pagePath == '' || pagePath.charAt(pagePath.length - 1) == '/') {
+      pagePath += 'index.html';
+    }
+  }
+
+  if (SITE_ROOT.match(/\.\.\//) || SITE_ROOT == '') {
+    // If running locally, SITE_ROOT will be a relative path, so account for that by
+    // finding the relative URL to this page. This will allow us to find links on the page
+    // leading back to this page.
+    var pathParts = pagePath.split('/');
+    var relativePagePathParts = [];
+    var upDirs = (SITE_ROOT.match(/(\.\.\/)+/) || [''])[0].length / 3;
+    for (var i = 0; i < upDirs; i++) {
+      relativePagePathParts.push('..');
+    }
+    for (var i = 0; i < upDirs; i++) {
+      relativePagePathParts.push(pathParts[pathParts.length - (upDirs - i) - 1]);
+    }
+    relativePagePathParts.push(pathParts[pathParts.length - 1]);
+    pagePath = relativePagePathParts.join('/');
+  } else {
+    // Otherwise the page path should be an absolute URL.
+    pagePath = SITE_ROOT + pagePath;
+  }
+
+  // select current page in sidenav and set up prev/next links if they exist
+  var $selNavLink = $('#nav').find('a[href="' + pagePath + '"]');
+  if ($selNavLink.length) {
+    $selListItem = $selNavLink.closest('li');
+
+    $selListItem.addClass('selected');
+    $selListItem.closest('li.nav-section').addClass('expanded');
+
+    // set up prev links
+    var $prevLink = [];
+    var $prevListItem = $selListItem.prev('li');
+    if ($prevListItem.length) {
+      if ($prevListItem.hasClass('nav-section')) {
+        // jump to last topic of previous section
+        $prevLink = $prevListItem.find('a:last');
+      } else {
+        // jump to previous topic in this section
+        $prevLink = $prevListItem.find('a:eq(0)');
+      }
+    } else {
+      // jump to this section's index page (if it exists)
+      $prevLink = $selListItem.parents('li').find('a');
+    }
+
+    if ($prevLink.length) {
+      var prevHref = $prevLink.attr('href');
+      if (prevHref == SITE_ROOT + 'index.html') {
+        // Don't show Previous when it leads to the homepage
+        $('.prev-page-link').hide();
+      } else {
+        $('.prev-page-link').attr('href', prevHref).show();
+      }
+    } else {
+      $('.prev-page-link').hide();
+    }
+
+    // set up next links
+    var $nextLink = [];
+    if ($selListItem.hasClass('nav-section')) {
+      // we're on an index page, jump to the first topic
+      $nextLink = $selListItem.find('ul').find('a:eq(0)')
+    } else {
+      // jump to the next topic in this section (if it exists)
+      $nextLink = $selListItem.next('li').find('a:eq(0)');
+      if (!$nextLink.length) {
+        // no more topics in this section, jump to the first topic in the next section
+        $nextLink = $selListItem.parents('li').next('li.nav-section').find('a:eq(0)');
+      }
+    }
+    if ($nextLink.length) {
+      $('.next-page-link').attr('href', $nextLink.attr('href')).show();
+    } else {
+      $('.next-page-link').hide();
+    }
+  }
+
+  // Set up expand/collapse behavior
+  $('#nav li.nav-section').click(function() {
+    if ($(this).hasClass('expanded')) {
+      return;
+    }
+
+    // hide other
+    var $old = $('#nav li.nav-section.expanded');
+    if ($old.length) {
+      var $oldUl = $old.children('ul');
+      $oldUl.css('height', $oldUl.height() + 'px');
+      window.setTimeout(function() {
+        $oldUl
+            .addClass('animate-height')
+            .css('height', '');
+      }, 0);
+      $old.removeClass('expanded');
+    }
+
+    // show me
+    $(this).addClass('expanded');
+    var $ul = $(this).children('ul');
+    var expandedHeight = $ul.height();
+    $ul
+        .removeClass('animate-height')
+        .css('height', 0);
+    window.setTimeout(function() {
+      $ul
+          .addClass('animate-height')
+          .css('height', expandedHeight + 'px');
+    }, 0);
+  });
+
+  // Stop expand/collapse behavior when clicking on nav section links (since we're navigating away
+  // from the page)
+  $('.nav-section-header').find('a:eq(0)').click(function(evt) {
+    window.location.href = $(this).attr('href');
+    return false;
+  });
+
+  // Set up play-on-hover <video> tags.
+  $('video.play-on-hover').bind('mouseenter click', function(){
+    $(this).get(0).play();
+  });
+
+  // Set up tooltips
+  var TOOLTIP_MARGIN = 10;
+  $('acronym').each(function() {
+    var $target = $(this);
+    var $tooltip = $('<div>')
+        .addClass('tooltip-box')
+        .text($target.attr('title'))
+        .hide()
+        .appendTo('body');
+    $target.removeAttr('title');
+
+    $target.hover(function() {
+      // in
+      var targetRect = $target.offset();
+      targetRect.width = $target.width();
+      targetRect.height = $target.height();
+
+      $tooltip.css({
+        left: targetRect.left,
+        top: targetRect.top + targetRect.height + TOOLTIP_MARGIN
+      });
+      $tooltip.addClass('below');
+      $tooltip.show();
+    }, function() {
+      // out
+      $tooltip.hide();
+    });
+  });
+});
\ No newline at end of file
diff --git a/docs/html/design/static/disclosure_down.png b/docs/html/design/static/disclosure_down.png
new file mode 100644
index 0000000..4b3ff4d
--- /dev/null
+++ b/docs/html/design/static/disclosure_down.png
Binary files differ
diff --git a/docs/html/design/static/disclosure_left.png b/docs/html/design/static/disclosure_left.png
new file mode 100644
index 0000000..607845e
--- /dev/null
+++ b/docs/html/design/static/disclosure_left.png
Binary files differ
diff --git a/docs/html/design/static/disclosure_right.png b/docs/html/design/static/disclosure_right.png
new file mode 100644
index 0000000..f3bceb1
--- /dev/null
+++ b/docs/html/design/static/disclosure_right.png
Binary files differ
diff --git a/docs/html/design/static/disclosure_up.png b/docs/html/design/static/disclosure_up.png
new file mode 100644
index 0000000..5ff6d9d
--- /dev/null
+++ b/docs/html/design/static/disclosure_up.png
Binary files differ
diff --git a/docs/html/design/static/download/RobotoSpecimenBook.pdf b/docs/html/design/static/download/RobotoSpecimenBook.pdf
new file mode 100644
index 0000000..594a366
--- /dev/null
+++ b/docs/html/design/static/download/RobotoSpecimenBook.pdf
Binary files differ
diff --git a/docs/html/design/static/download/Roboto_Hinted_20111129.zip b/docs/html/design/static/download/Roboto_Hinted_20111129.zip
new file mode 100644
index 0000000..3d3ab77
--- /dev/null
+++ b/docs/html/design/static/download/Roboto_Hinted_20111129.zip
Binary files differ
diff --git a/docs/html/design/static/download/color_swatches.zip b/docs/html/design/static/download/color_swatches.zip
new file mode 100644
index 0000000..0221d7b
--- /dev/null
+++ b/docs/html/design/static/download/color_swatches.zip
Binary files differ
diff --git a/docs/html/design/static/ico_action.png b/docs/html/design/static/ico_action.png
new file mode 100644
index 0000000..30e4cc7
--- /dev/null
+++ b/docs/html/design/static/ico_action.png
Binary files differ
diff --git a/docs/html/design/static/ico_good.png b/docs/html/design/static/ico_good.png
new file mode 100644
index 0000000..afebe1c
--- /dev/null
+++ b/docs/html/design/static/ico_good.png
Binary files differ
diff --git a/docs/html/design/static/ico_movie_inline.png b/docs/html/design/static/ico_movie_inline.png
new file mode 100644
index 0000000..7cfb5c5
--- /dev/null
+++ b/docs/html/design/static/ico_movie_inline.png
Binary files differ
diff --git a/docs/html/design/static/ico_phone_tablet.png b/docs/html/design/static/ico_phone_tablet.png
new file mode 100644
index 0000000..003b876
--- /dev/null
+++ b/docs/html/design/static/ico_phone_tablet.png
Binary files differ
diff --git a/docs/html/design/static/ico_styleguide.png b/docs/html/design/static/ico_styleguide.png
new file mode 100644
index 0000000..c12907c
--- /dev/null
+++ b/docs/html/design/static/ico_styleguide.png
Binary files differ
diff --git a/docs/html/design/static/ico_use.png b/docs/html/design/static/ico_use.png
new file mode 100644
index 0000000..9d868b3
--- /dev/null
+++ b/docs/html/design/static/ico_use.png
Binary files differ
diff --git a/docs/html/design/static/ico_web.png b/docs/html/design/static/ico_web.png
new file mode 100644
index 0000000..0848e3c
--- /dev/null
+++ b/docs/html/design/static/ico_web.png
Binary files differ
diff --git a/docs/html/design/static/ico_wrong.png b/docs/html/design/static/ico_wrong.png
new file mode 100644
index 0000000..b7d04ce
--- /dev/null
+++ b/docs/html/design/static/ico_wrong.png
Binary files differ
diff --git a/docs/html/design/static/jquery-1.6.2.min.js b/docs/html/design/static/jquery-1.6.2.min.js
new file mode 100644
index 0000000..8cdc80e
--- /dev/null
+++ b/docs/html/design/static/jquery-1.6.2.min.js
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Jun 30 14:16:56 2011 -0400
+ */
+(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bR,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
+)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cs(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
diff --git a/docs/html/design/static/open_new_page.png b/docs/html/design/static/open_new_page.png
new file mode 100644
index 0000000..6197e3a
--- /dev/null
+++ b/docs/html/design/static/open_new_page.png
Binary files differ
diff --git a/docs/html/design/static/yui-3.3.0-reset-min.css b/docs/html/design/static/yui-3.3.0-reset-min.css
new file mode 100644
index 0000000..00c3892
--- /dev/null
+++ b/docs/html/design/static/yui-3.3.0-reset-min.css
@@ -0,0 +1,8 @@
+/*
+Copyright (c) 2010, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 3.3.0
+build: 3167
+*/
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
\ No newline at end of file
diff --git a/docs/html/design/style/color.html b/docs/html/design/style/color.html
new file mode 100644
index 0000000..893e09e
--- /dev/null
+++ b/docs/html/design/style/color.html
@@ -0,0 +1,291 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Color
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+<style>
+  .color-row {
+    width: 740px;
+    margin-left: 10px !important;
+    margin-right: 10px !important;
+
+    display:         box;
+    display: -webkit-box;
+    display:    -moz-box;
+
+            box-orient: horizontal;
+    -webkit-box-orient: horizontal;
+       -moz-box-orient: horizontal;
+
+    cursor: pointer;
+
+            user-select: none;
+    -webkit-user-select: none;
+    /* nested user-select in FF is broken as of Jan 2012, don't use it */
+  }
+
+  .color-row-container {
+    line-height: 0; /* to remove more top space in FF for -moz-box elements */
+  }
+
+  .color-row-container + .color-row-container {
+    margin-top: -10px !important;
+  }
+
+  .color-row li {
+    margin-left: 0 !important;
+    position: relative;
+    list-style-type: none;
+    height: 80px;
+    display: block;
+
+            box-flex: 1;
+    -webkit-box-flex: 1;
+       -moz-box-flex: 1;
+  }
+
+  .color-row li:before {
+    display: none;
+  }
+
+  .color-row li.thin {
+    height: 40px;
+  }
+
+  .color-row li span {
+    display: none;
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    margin-left: -2.5em;
+    width: 5em;
+    background-color: #fff;
+    padding: 10px;
+    font-weight: 600;
+    line-height: 20px;
+    text-align: center;
+    box-shadow: 0 5px 5px rgba(0,0,0,0.1);
+    cursor: text;
+
+            user-select: text;
+    -webkit-user-select: text;
+    /* nested user-select in FF is broken as of Jan 2012, don't use it */
+  }
+
+  .color-row li:hover span {
+    display: block;
+  }
+
+  /*.color-row li span:before {
+    color: #999;
+    content: 'copy ';
+  }*/
+
+  /* triangle callout */
+  .color-row li span:after {
+    content: '';
+    display: block;
+    position: absolute;
+    left: 50%;
+    bottom: -16px;
+    border: 8px solid transparent;
+    border-top-color: #fff;
+    width: 0;
+    height: 0;
+    margin-left: -8px;
+  }
+</style>
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Color</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Use color primarily for emphasis. Choose colors that fit with your brand and provide good contrast
+between visual components. Note that red and green may be indistinguishable to color-blind users.</p>
+
+    <div class="color-row-container">
+      <ul class="color-row">
+        <li><span>#33b5e5</span></li>
+        <li><span>#aa66cc</span></li>
+        <li><span>#99cc00</span></li>
+        <li><span>#ffbb33</span></li>
+        <li><span>#ff4444</span></li>
+      </ul>
+    </div>
+
+    <div class="color-row-container">
+      <ul class="color-row">
+        <li class="thin"><span>#0099cc</span></li>
+        <li class="thin"><span>#9933cc</span></li>
+        <li class="thin"><span>#669900</span></li>
+        <li class="thin"><span>#ff8800</span></li>
+        <li class="thin"><span>#cc0000</span></li>
+      </ul>
+    </div>
+
+<h2>Palette</h2>
+<p>Blue is the standard accent color in Android's color palette. Each color has a corresponding darker
+shade that can be used as a complement when needed.</p>
+<p><a href="../static/download/color_swatches.zip">Download the swatches</a></p>
+
+<img src="../static/content/color_spectrum.png">
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+<script>
+  $(document).ready(function() {
+    $('.color-row li').each(function() {
+      var color = $(this).text();
+      $(this).css('background-color', color);
+      $(this).find('span')
+          .css('color', color)
+          .text(color.toUpperCase());
+    });
+    
+  });
+</script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/devices-displays.html b/docs/html/design/style/devices-displays.html
new file mode 100644
index 0000000..9fba719
--- /dev/null
+++ b/docs/html/design/style/devices-displays.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Devices and Displays
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Devices and Displays</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Android powers millions of phones, tablets, and other devices in a wide variety of screen sizes and
+form factors. By taking advantage of Android's flexible layout system, you can create apps that
+gracefully scale from large tablets to smaller phones.</p>
+
+<img src="../static/content/devices_displays_main.png">
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+<h4>Be flexible</h4>
+<p>Stretch and compress your layouts to accommodate various heights and widths.</p>
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Optimize layouts</h4>
+<p>On larger devices, take advantage of extra screen real estate. Create compound views that combine
+multiple views to reveal more content and ease navigation.</p>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Assets for all</h4>
+<p>Provide resources for different screen densities (<acronym title="Dots per inch">DPI</acronym>) to
+ensure that your app looks great on any device.</p>
+
+  </div>
+</div>
+
+<div style="text-align:center">
+  <img src="../static/content/devices_displays_density.png">
+</div>
+
+<h4>Strategies</h4>
+<p>So where do you begin when designing for multiple screens? One approach is to work in the base
+standard (medium size, <acronym title="Medium density (160 dpi)">MDPI</acronym>) and scale it up or
+down for the other buckets. Another approach is to start with the device with the largest screen
+size, and then scale down and figure out the UI compromises you'll need to make on smaller screens.</p>
+<p>For more detailed information on this topic, please visit <a href="http://developer.android.com/guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/iconography.html b/docs/html/design/style/iconography.html
new file mode 100644
index 0000000..663770b
--- /dev/null
+++ b/docs/html/design/style/iconography.html
@@ -0,0 +1,476 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Iconography
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Iconography</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<img src="../static/content/iconography_overview.png">
+
+<p>An icon is a graphic that takes up a small portion of screen real estate and provides a quick,
+intuitive representation of an action, a status, or an app.</p>
+
+
+
+<h2 id="launcher">Launcher</h2>
+
+<p>The launcher icon is the visual representation of your app on the Home or All Apps screen. Since the
+user can change the Home screen's wallpaper, make sure that your launcher icon is clearly visible on
+any type of background.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_launcher_size.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_launcher_focal.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_launcher_style.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <h4>Sizes &amp; scale</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Launcher icons on a mobile device must be <strong>48x48 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
+      <li class="no-bullet with-icon web">
+        <p>Launcher icons for display in Market must be <strong>512x512 pixels</strong>.</p></li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <h4>Proportions</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Full asset, <strong>48x48 dp</strong></p>
+      </li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Style</h4>
+<p>Use a distinct silhouette. Three-dimensional, front view, with a slight perspective as if viewed
+from above, so that users perceive some depth.</p>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+    &nbsp;
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/iconography_launcher_example.png">
+
+  </div>
+  <!-- 2 free columns -->
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-12">
+
+    <img src="../static/content/iconography_launcher_example2.png">
+
+    <div class="vspace size-2">&nbsp;</div>
+
+  </div>
+  <!-- 1 free columns -->
+</div>
+
+
+<h2 id="actionbar">Action Bar</h2>
+
+<p>Action bar icons are graphic buttons that represent the most important actions people can take
+within your app. Each one should employ a simple metaphor representing a single concept that most
+people can grasp at a glance.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_actionbar_size.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_actionbar_focal.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_actionbar_style.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <h4>Sizes &amp; scale</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Action bar icons for phones should be <strong>32x32 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <h4>Focal area &amp; proportions</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Full asset, <strong>32x32 dp</strong></p>
+        <p>Optical square, <strong>24x24 dp</strong></p>
+      </li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Style</h4>
+<p>Pictographic, flat, not too detailed, with smooth curves or sharp shapes. If the graphic is thin,
+rotate it 45&deg; left or right to fill the focal space. The thickness of the strokes and negative
+spaces should be a minimum of 2 dp.</p>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-3">
+
+<h4>Colors</h4>
+<p>Colors: <strong>#333333</strong><br />
+Enabled: <strong>60%</strong> opacity<br />
+Disabled: <strong>30%</strong> opacity</p>
+<div class="vspace size-1">&nbsp;</div>
+
+<p>Colors: <strong>#FFFFFF</strong><br />
+Enabled: <strong>80%</strong> opacity<br />
+Disabled: <strong>30%</strong> opacity</p>
+
+  </div>
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/iconography_actionbar_colors.png">
+
+  </div>
+</div>
+
+
+<h2 id="small_contextual">Small / Contextual Icons</h2>
+
+<p>Within the body of your app, use small icons to surface actions and/or provide status for specific
+items. For example, in the Gmail app, each message has a star icon that marks the message as
+important.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_small_size.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_small_focal.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_small_style.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <h4>Sizes &amp; scale</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Small icons should be <strong>16x16 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <h4>Focal area &amp; proportions</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Full asset, <strong>16x16 dp</strong></p>
+        <p>Optical square, <strong>12x12 dp</strong></p>
+      </li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Style</h4>
+<p>Neutral, flat, and simple. Filled shapes are easier to see than thin strokes. Use a single visual
+metaphor so that a user can easily recognize and understand its purpose.</p>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_small_colors.png">
+
+    <div class="vspace size-2">&nbsp;</div>
+
+<h4>Colors</h4>
+<p>Use non-neutral colors sparingly and with purpose. For example, Gmail uses yellow in the star icon
+to indicate a bookmarked message. If an icon is actionable, choose a color that contrasts well with
+the background.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/iconography_small_example.png">
+
+  </div>
+  <!-- 2 free columns -->
+</div>
+
+
+<h2 id="notification">Notification Icons</h2>
+
+<p>If your app generates notifications, provide an icon that the system can display in the status bar
+whenever a new notification is available.</p>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_notification_size.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_notification_focal.png">
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <img src="../static/content/iconography_notification_style.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+    <h4>Sizes &amp; scale</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Notification icons must be <strong>24x24 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+    <h4>Focal area &amp; proportions</h4>
+
+    <ul>
+      <li class="no-bullet with-icon tablet">
+        <p>Full asset, <strong>24x24 dp</strong></p>
+        <p>Optical square, <strong>22x22 dp</strong></p>
+      </li>
+    </ul>
+
+  </div>
+  <div class="layout-content-col span-4">
+
+<h4>Style</h4>
+<p>Keep the style flat and simple, using the same single, visual metaphor as your launcher icon.</p>
+
+  </div>
+</div>
+
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+<h4>Colors</h4>
+<p>Notification icons must be entirely white. Also, the system may scale down and/or darken the icons.</p>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+    <img src="../static/content/iconography_notification_example.png">
+
+  </div>
+  <!-- 2 free columns -->
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/index.html b/docs/html/design/style/index.html
new file mode 100644
index 0000000..5ecbafa
--- /dev/null
+++ b/docs/html/design/style/index.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Design Elements
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+<style>
+#landing-graphic-container {
+  position: relative;
+}
+
+#text-overlay {
+  position: absolute;
+  left: 10px;
+  top: 402px;
+  width: 220px;
+}
+</style>
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+<div class="layout-content-row content-header just-links">
+  <div class="layout-content-col span-9">&nbsp;</div>
+  <div class="paging-links layout-content-col span-4">
+    <a href="#" class="prev-page-link">Previous</a>
+    <a href="#" class="next-page-link">Next</a>
+  </div>
+</div>
+
+
+          
+
+<div id="landing-graphic-container">
+  <div id="text-overlay">
+    Build visually compelling apps that look great on any device. 
+    <br><br>
+    <a href="../style/devices-displays.html" class="landing-page-link">Devices and Displays</a>
+  </div>
+
+  <a href="../style/devices-displays.html">
+    <img src="../static/content/design_elements_landing.png">
+  </a>
+</div>
+
+
+
+          
+
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/metrics-grids.html b/docs/html/design/style/metrics-grids.html
new file mode 100644
index 0000000..17d4937
--- /dev/null
+++ b/docs/html/design/style/metrics-grids.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Metrics and Grids
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Metrics and Grids</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>Devices vary not only in physical size, but also in screen density (<acronym title="Dots per
+inch">DPI</acronym>). To simplify the way you design for multiple screens, think of each device as
+falling into a particular size bucket and density bucket. The size buckets are <em>handset</em> (smaller than
+600<acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi
+screen.">dp</acronym>) and <em>tablet</em> (larger than or equal 600dp). The density buckets are <acronym
+title="Low density (120 dpi)">LDPI</acronym>, <acronym title="Medium density (160
+dpi)">MDPI</acronym>, <acronym title="High density (240 dpi)">HDPI</acronym>, and <acronym title
+="Extra-high density (320 dpi)">XHDPI</acronym>. Optimize your application's UI by designing
+alternative layouts for some of the different size buckets, and provide alternative bitmap images
+for different density buckets.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/metrics_diagram.png">
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<h4>Space considerations</h4>
+<p>Devices vary in the amount of density-independent pixels (dp) they can display.</p>
+<p>To see more, visit the
+<a href="http://developer.android.com/resources/dashboard/screens.html" target="_blank">
+Screen Sizes and Densities Device Dashboard</a>.</p>
+
+  </div>
+</div>
+
+<h2>48dp Rhythm</h2>
+
+<p>Touchable UI components are generally laid out along 48dp units.</p>
+
+<img src="../static/content/metrics_48.png">
+
+<div class="vspace size-2">&nbsp;</div>
+
+<h4>Why 48dp?</h4>
+<p>On average, 48dp translate to a physical size of about 9mm (with some variability). This is
+comfortably in the range of recommended target sizes (7-10 mm) for touchscreen objects and users
+will be able to reliably and accurately target them with their fingers.</p>
+<p>If you design your elements to be at least 48dp high and wide you can guarantee that:</p>
+<ul>
+<li>your targets will never be smaller than the minimum recommended target size of 7mm regardless of
+  what screen they are displayed on.</li>
+<li>you strike a good compromise between overall information density on the one hand, and
+  targetability of UI elements on the other.</li>
+</ul>
+
+<img src="../static/content/metrics_closeup.png">
+
+<div class="vspace size-2">&nbsp;</div>
+
+<h4>Mind the gaps</h4>
+<p>Spacing between each UI element is 8dp.</p>
+
+<h2>Examples</h2>
+
+<img src="../static/content/metrics_forms.png">
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/themes.html b/docs/html/design/style/themes.html
new file mode 100644
index 0000000..ada974d
--- /dev/null
+++ b/docs/html/design/style/themes.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Themes
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Themes</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-5">
+
+    <img src="../static/content/themes_holo_light.png">
+    <div class="figure-caption">
+      Gmail in Holo Light.
+    </div>
+
+    <img src="../static/content/themes_holo_dark.png">
+    <div class="figure-caption">
+      Settings in Holo Dark.
+    </div>
+
+    <img src="../static/content/themes_holo_inverse.png">
+    <div class="figure-caption">
+      Talk in Holo Light with dark action bar.
+    </div>
+
+  </div>
+  <div class="layout-content-col span-7">
+
+<p>Themes are Android's mechanism for applying a consistent style to an app or activity. The style
+specifies the visual properties of the elements that make up your user interface, such as color,
+height, padding and font size. To promote greater cohesion between all apps on the platform, Android
+provides three system themes that you can choose from when building apps for Ice Cream Sandwich:</p>
+<ul>
+<li>Holo Light</li>
+<li>Holo Dark</li>
+<li>Holo Light with dark action bars</li>
+</ul>
+<p>Applying these themes will go a long way in helping you to build apps that fit right into the
+general visual language of Android.</p>
+<p>Pick the system theme that best matches the needs and design aesthetics for your app. If your
+desire is to have a more distinct look for your app, using one of the system themes as a starting
+point for your customizations is a good idea. The system themes provide a solid foundation on top
+of which you can selectively implement your own visual stylings.</p>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/touch-feedback.html b/docs/html/design/style/touch-feedback.html
new file mode 100644
index 0000000..0d49832
--- /dev/null
+++ b/docs/html/design/style/touch-feedback.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Touch Feedback
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Touch Feedback</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<div class="layout-content-row" style="margin-bottom: -100px">
+  <div class="layout-content-col span-7">
+
+<p>Use color and illumination to respond to touches, reinforce the resulting behaviors of gestures, and
+indicate what actions are enabled and disabled.</p>
+<p>Whenever a user touches an actionable area in your app, provide a visual response. This lets the
+user know which object was touched and that your app is "listening".</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/touch_feedback_reaction_response.png">
+
+  </div>
+</div>
+
+<h4>States</h4>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<img src="../static/content/touch_feedback_states.png">
+<div class="figure-caption">
+  Most of Android's UI elements have touch-feedback built in, including states that indicate
+  whether touching the element will have any effect.
+</div>
+
+<div class="vspace size-4">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-4">
+
+<h4>Communication</h4>
+<p>When your objects react to more complex gestures, help users understand what the outcome of the
+operation will be. For example, in Recents, when you start swiping a thumbnail left or right, it
+starts to dim. This helps the user understand that swiping will cause the item to be removed.</p>
+
+  </div>
+  <div class="layout-content-col span-9">
+
+    <img src="../static/content/touch_feedback_manipulation.png">
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+    <img src="../static/content/touch_feedback_communication.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<div class="vspace size-3">&nbsp;</div>
+
+<h4>Boundaries</h4>
+<p>When users try to scroll past the upper or lower limit of a scrollable area, communicate the
+boundary with a visual cue. For example, if a user attempts to scroll past the first home screen
+panel, the screen content tilts to the right to indicate that further navigation in this direction
+is not possible. Many of Android's scrollable UI widgets (e.g. lists or grid lists) already have
+support for boundary feedback built in. If you are building custom, keep boundary feedback in mind
+and provide it from within your app.</p>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/typography.html b/docs/html/design/style/typography.html
new file mode 100644
index 0000000..d3cc769
--- /dev/null
+++ b/docs/html/design/style/typography.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Typography
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Typography</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-8">
+
+    <img src="../static/content/typography_main.png">
+
+  </div>
+  <div class="layout-content-col span-5">
+
+<p>The Android design language relies on traditional typographic tools such as scale, space, rhythm,
+and alignment with an underlying grid. Successful deployment of these tools is essential to help
+users quickly understand a screen of information. To support such use of typography, Ice Cream
+Sandwich introduced a new type family named Roboto, created specifically for the requirements of UI
+and high-resolution screens. The current TextView framework supports regular, bold, italic, and bold
+italic weights by default.</p>
+
+    <img src="../static/content/typography_alphas.png">
+
+<p><a href="../static/download/Roboto_Hinted_20111129.zip">Download Roboto</a></p>
+<p><a href="../static/download/RobotoSpecimenBook.pdf">Specimen Book</a></p>
+
+  </div>
+</div>
+
+<hr>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+
+<h4>Default type colors</h4>
+<p>The Android UI uses the following default color styles: <code>textColorPrimary</code> and
+<code>textColorSecondary</code>. For light themes use <code>textColorPrimaryInverse</code> and
+<code>textColorSecondaryInverse</code>. The framework text color styles also support variants for
+touch feedback states when used inside UI elements.</p>
+
+    <img src="../static/content/typography_defaults.png">
+
+  </div>
+  <div class="layout-content-col span-6">
+
+<h4>Typographic Scale</h4>
+<p>Contrast in type sizes can go a long way to create ordered, understandable layouts. However, too
+many different sizes in the same UI can be messy. The Android framework uses the following limited
+set of type sizes:</p>
+
+<img src="../static/content/typography_sizes.png">
+
+<p>Users can select a system-wide scaling factor for text in the Settings app. In order to support
+these accessibility features, type should be specified in scale-independent pixels
+(<acronym title="Scale-independent pixels. One sp is one pixel on a 160 dpi screen if the user's global text scale is set to 100%.">sp</acronym>)
+wherever possible. Layouts supporting scalable types should be tested against these settings.</p>
+
+  </div>
+</div>
+
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/design/style/writing.html b/docs/html/design/style/writing.html
new file mode 100644
index 0000000..e5f1ea8
--- /dev/null
+++ b/docs/html/design/style/writing.html
@@ -0,0 +1,483 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>
+
+Android Design - Writing Style
+    </title>
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+    <link rel="stylesheet" href="../static/yui-3.3.0-reset-min.css">
+    <link rel="stylesheet" href="../static/default.css">
+
+<style>
+
+/* UI tables */
+
+.ui_table {
+  width: 100%;
+  background: #282828;
+  color: #fff;
+  border-radius: 2px;
+  box-shadow: 0 2px 4px rgba(0,0,0,0.25);
+  border-collapse: separate;
+}
+
+.ui_table th,
+.ui_table td {
+  padding: 5px 10px;
+}
+
+.ui_table thead th {
+  font-weight: 600;
+}
+
+.ui_table tfoot td {
+  border-top: 1px solid #494949;
+  border-right: 1px solid #494949;
+  text-align: center;
+}
+
+.ui_table tfoot td:last-child {
+  border-right: 0;
+}
+
+.list_item_margins {
+  margin-left: 30px !important;
+}
+
+.example_label {
+  margin-bottom: 10px;
+  padding-left: 20px;
+  background: transparent none no-repeat scroll 0px 3px;
+}
+
+.example_label.bad {
+  background-image: url(../static/ico_wrong.png);
+}
+
+.example_label.good {
+  background-image: url(../static/ico_good.png);
+}
+
+</style>
+
+  </head>
+  <body>
+
+    <div id="page-container">
+
+      <div id="page-header"><a href="../index.html">Android Design</a></div>
+
+      <div id="main-row">
+
+        <ul id="nav">
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../index.html">Get Started</a></div>
+            <ul>
+              <li><a href="../get-started/creative-vision.html">Creative Vision</a></li>
+              <li><a href="../get-started/principles.html">Design Principles</a></li>
+              <li><a href="../get-started/ui-overview.html">UI Overview</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../style/index.html">Style</a></div>
+            <ul>
+              <li><a href="../style/devices-displays.html">Devices and Displays</a></li>
+              <li><a href="../style/themes.html">Themes</a></li>
+              <li><a href="../style/touch-feedback.html">Touch Feedback</a></li>
+              <li><a href="../style/metrics-grids.html">Metrics and Grids</a></li>
+              <li><a href="../style/typography.html">Typography</a></li>
+              <li><a href="../style/color.html">Color</a></li>
+              <li><a href="../style/iconography.html">Iconography</a></li>
+              <li><a href="../style/writing.html">Writing Style</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../patterns/index.html">Patterns</a></div>
+            <ul>
+              <li><a href="../patterns/new-4-0.html">New in Android 4.0</a></li>
+              <li><a href="../patterns/gestures.html">Gestures</a></li>
+              <li><a href="../patterns/app-structure.html">App Structure</a></li>
+              <li><a href="../patterns/navigation.html">Navigation</a></li>
+              <li><a href="../patterns/actionbar.html">Action Bar</a></li>
+              <li><a href="../patterns/multi-pane-layouts.html">Multi-pane Layouts</a></li>
+              <li><a href="../patterns/swipe-views.html">Swipe Views</a></li>
+              <li><a href="../patterns/selection.html">Selection</a></li>
+              <li><a href="../patterns/notifications.html">Notifications</a></li>
+              <li><a href="../patterns/compatibility.html">Compatibility</a></li>
+              <li><a href="../patterns/pure-android.html">Pure Android</a></li>
+            </ul>
+          </li>
+
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="../building-blocks/index.html">Building Blocks</a></div>
+            <ul>
+              <li><a href="../building-blocks/tabs.html">Tabs</a></li>
+              <li><a href="../building-blocks/lists.html">Lists</a></li>
+              <li><a href="../building-blocks/grid-lists.html">Grid Lists</a></li>
+              <li><a href="../building-blocks/scrolling.html">Scrolling</a></li>
+              <li><a href="../building-blocks/spinners.html">Spinners</a></li>
+              <li><a href="../building-blocks/buttons.html">Buttons</a></li>
+              <li><a href="../building-blocks/text-fields.html">Text Fields</a></li>
+              <li><a href="../building-blocks/seek-bars.html">Seek Bars</a></li>
+              <li><a href="../building-blocks/progress.html">Progress &amp; Activity</a></li>
+              <li><a href="../building-blocks/switches.html">Switches</a></li>
+              <li><a href="../building-blocks/dialogs.html">Dialogs</a></li>
+              <li><a href="../building-blocks/pickers.html">Pickers</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <div id="back-dac-section"><a href="../../index.html">Developers</a></div>
+          </li>
+
+        </ul>
+
+        <div id="content">
+
+          
+          <div class="layout-content-row content-header">
+            <div class="layout-content-col span-9">
+              <h2>Writing Style</h2>
+            </div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+
+          
+
+<p>When choosing words for your app:</p>
+<ol>
+<li>
+<p><strong>Keep it brief.</strong> Be concise, simple and precise. Start with a 30 character limit (including
+   spaces), and don't use more unless absolutely necessary.</p>
+</li>
+<li>
+<p><strong>Keep it simple.</strong> Pretend you're speaking to someone who's smart and competent, but doesn't
+   know technical jargon and may not speak English very well. Use short words, active verbs, and
+   common nouns.</p>
+</li>
+<li>
+<p><strong>Be friendly.</strong> Use contractions. Talk directly to the reader using second person ("you"). If
+   your text doesn't read the way you'd say it in casual conversation, it's probably not the way
+   you should write it. Don't be abrupt or annoying and make the user feel safe, happy and
+   energized.</p>
+</li>
+<li>
+<p><strong>Put the most important thing first.</strong> The first two words (around 11 characters, including
+   spaces) should include at least a taste of the most important information in the string. If they
+   don't, start over.</p>
+</li>
+<li>
+<p><strong>Describe only what's necessary, and no more.</strong> Don't try to explain subtle differences. They
+   will be lost on most users.</p>
+</li>
+<li>
+<p><strong>Avoid repetition.</strong> If a significant term gets repeated within a screen or block of text, find
+   a way to use it just once.</p>
+</li>
+</ol>
+
+<h2>Examples</h2>
+
+<ol><li class="value-1"><strong>Keep it brief.</strong> From the setup wizard:</ol>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6 list_item_margins">
+
+    <div class="example_label bad">Too formal</div>
+
+    <table class="ui_table good"><tbody><tr><td>
+    Consult the documentation that came with your phone for further instructions.
+    </td></tr></tbody></table>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <div class="example_label good">Better</div>
+
+    <table class="ui_table good"><tbody><tr><td>
+    Read the instructions that came with your phone.
+    </td></tr></tbody></table>
+
+  </div>
+</div>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<ol><li class="value-2"><strong>Keep it simple.</strong> From the Location settings screen:</ol>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6 list_item_margins">
+
+    <div class="example_label bad">Confusing</div>
+
+    <table class="ui_table bad">
+    <thead>
+      <tr>
+        <th>
+        Use GPS satellites
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>
+        When locating, accurate to street level.
+        </td>
+      </tr>
+    </tbody>
+    </table>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <div class="example_label good">Better</div>
+
+    <table class="ui_table good">
+    <thead>
+      <tr>
+        <th>
+        GPS
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>
+        Let apps use satellites to pinpoint your location.
+        </td>
+      </tr>
+    </tbody>
+    </table>
+
+  </div>
+</div>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<ol><li class="value-3"><strong>Be friendly.</strong> Dialog that appears when an application
+crashes:</ol>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6 list_item_margins">
+
+    <div class="example_label bad">Confusing and annoying&mdash;"Sorry" just rubs salt in the
+    wound.</div>
+
+    <table class="ui_table bad">
+    <thead>
+      <tr>
+        <th colspan="3">
+        Sorry!
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td colspan="3">
+        Activity MyAppActivity (in application MyApp)
+        is not responding.
+        </td>
+      </tr>
+    </tbody>
+    <tfoot>
+      <tr>
+        <td width="33%">Force close</td>
+        <td width="33%">Wait</td>
+        <td width="33%">Report</td>
+      </tr>
+    </tbody>
+    </table>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <div class="example_label good">Shorter, more direct, no faux-apologetic title:<br><br></div>
+
+    <table class="ui_table good">
+    <thead>
+      <tr>
+        <th colspan="3">
+        MyApp isn't responding.
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td colspan="3">
+        Do you want to close it?
+        </td>
+      </tr>
+    </tbody>
+    <tfoot>
+      <tr>
+        <td width="33%">Wait</td>
+        <td width="33%">Report</td>
+        <td width="33%">Close</td>
+      </tr>
+    </tbody>
+    </table>
+
+  </div>
+</div>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<ol><li class="value-4"><strong>Put the most important thing first.</strong></ol>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6 list_item_margins">
+
+    <div class="example_label bad">Top news last</div>
+
+    <table class="ui_table bad"><tbody><tr><td>
+    77 other people +1'd this, including Larry Page.
+    </td></tr></tbody></table>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <div class="example_label good">Top news first</div>
+
+    <table class="ui_table good"><tbody><tr><td>
+    Larry Page and 77 others +1'd this.
+    </td></tr></tbody></table>
+
+  </div>
+</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6 list_item_margins">
+
+    <div class="example_label bad">Task last</div>
+
+    <table class="ui_table bad"><tbody><tr><td>
+    Touch Next to complete setup using a Wi-Fi connection.
+    </td></tr></tbody></table>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <div class="example_label good">Task first</div>
+
+    <table class="ui_table good"><tbody><tr><td>
+    To finish setup using Wi-Fi, touch Next.
+    </td></tr></tbody></table>
+
+  </div>
+</div>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<ol><li class="value-5"><strong>Describe only what's necessary, and no more.</strong></ol>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6 list_item_margins">
+
+    <div class="example_label bad">From a Setup Wizard screen</div>
+
+    <table class="ui_table bad">
+    <thead>
+      <tr>
+        <th>
+        Signing in...
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>
+        Your phone needs to communicate with<br>
+        Google servers to sign in to your account.<br>
+        This may take up to five minutes.
+        </td>
+      </tr>
+    </tbody>
+    </table>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <div class="example_label good">From a Setup Wizard screen</div>
+
+    <table class="ui_table good">
+    <thead>
+      <tr>
+        <th>
+        Signing in...
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>
+        Your phone is contacting Google.<br>
+        This can take up to 5 minutes.
+        </td>
+      </tr>
+    </tbody>
+    </table>
+
+  </div>
+</div>
+
+
+
+          
+          <div class="layout-content-row content-footer">
+            <div class="paging-links layout-content-col span-9">&nbsp;</div>
+            <div class="paging-links layout-content-col span-4">
+              <a href="#" class="prev-page-link">Previous</a>
+              <a href="#" class="next-page-link">Next</a>
+            </div>
+          </div>
+          
+        </div>
+
+      </div>
+
+      <div id="page-footer">
+
+        <p id="copyright">
+          Except as noted, this content is licensed under
+          <a href="http://creativecommons.org/licenses/by/2.5/">
+          Creative Commons Attribution 2.5</a>.<br>
+          For details and restrictions, see the
+          <a href="http://developer.android.com/license.html">Content License</a>.
+        </p>
+
+        <p>
+          <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+          <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+          <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+        </p>
+
+      </div>
+    </div>
+
+    <script src="../static/jquery-1.6.2.min.js"></script>
+    <script>
+    var SITE_ROOT = '../';
+    </script>
+    <script src="../static/default.js"></script>
+
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-5831155-1");
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/docs/html/guide/appendix/api-levels.jd b/docs/html/guide/appendix/api-levels.jd
index 7d119ca..cc98f8f 100644
--- a/docs/html/guide/appendix/api-levels.jd
+++ b/docs/html/guide/appendix/api-levels.jd
@@ -154,7 +154,7 @@
     <td>2</td>
     <td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr>
     
-  <tr><td><a href="{@docRoot}sdk/android-1.0.html">Android 1.0</td>
+  <tr><td>Android 1.0</td>
     <td>1</td>
     <td>{@link android.os.Build.VERSION_CODES#BASE}</td>
     <td></td></tr>
diff --git a/docs/html/guide/developing/device.jd b/docs/html/guide/developing/device.jd
index 62ebfee..c4d08ed 100644
--- a/docs/html/guide/developing/device.jd
+++ b/docs/html/guide/developing/device.jd
@@ -79,10 +79,8 @@
   <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a> document.</li>
       <li>If you're developing on Mac OS X, it just works. Skip this step.</li>
       
-      <li>If you're developing on Ubuntu Linux, you need to add a <a
-href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">
-<code>udev</code></a> 
-rules file that contains a USB configuration for each type of device
+      <li>If you're developing on Ubuntu Linux, you need to add a
+<code>udev</code> rules file that contains a USB configuration for each type of device
 you want to use for development. In the rules file, each device manufacturer
 is identified by a unique vendor ID, as specified by the
 <code>ATTR{idVendor}</code> property. For a list of vendor IDs, see  <a
diff --git a/docs/html/guide/developing/devices/emulator.jd b/docs/html/guide/developing/devices/emulator.jd
index 8211275..02dcb68 100644
--- a/docs/html/guide/developing/devices/emulator.jd
+++ b/docs/html/guide/developing/devices/emulator.jd
@@ -480,7 +480,7 @@
   <td>Enable the root shell (as in <code>-shell</code> and specify the QEMU character 
   device to use for communication with the shell.</td>
   <td>&lt;device&gt; must be a QEMU device type. See the documentation for '-serial <em>dev</em>' at 
-  <a href="http://www.nongnu.org/qemu/qemu-doc.html#SEC10">http://www.bellard.org/qemu/qemu-doc.html#SEC10</a> 
+  <a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a> 
   for a list of device types.
 
 <p>Here are some examples: </p>
@@ -619,7 +619,7 @@
   <td>Use this command to emulate an NMEA-compatible GPS unit connected to
   an external character device or socket. The format of <code>&lt;device&gt;</code> must be QEMU-specific 
   serial device specification. See the documentation for 'serial -dev' at 
-  <a href="http://www.bellard.org/qemu/qemu-doc.html#SEC10">http://www.bellard.org/qemu/qemu-doc.html#SEC10</a>.
+  <a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>.
 </td>
 </tr>
 <tr>
@@ -638,7 +638,7 @@
   <td>Redirect radio mode to the specified character device.</td>
   <td>The format of <code>&lt;device&gt;</code> must be QEMU-specific 
   serial device specification. See the documentation for 'serial -dev' at 
-<a href="http://www.bellard.org/qemu/qemu-doc.html#SEC10">http://www.bellard.org/qemu/qemu-doc.html#SEC10</a>.
+<a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>.
 </td>
 </tr>
 <tr>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index a9c4d30..7f3894d 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -751,20 +751,20 @@
           <li class="toggle-list">
             <div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design.html">
                    <span class="en">Icon Design</span>
-                 </a> <span class="new">updated</span></div>
+                 </a></div>
             <ul>
               <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_launcher.html">
                     <span class="en">Launcher Icons</span>
-                  </a> <span class="new">updated</span></li>
+                  </a></li>
               <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_menu.html">
                     <span class="en">Menu Icons</span>
                   </a></li>
               <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_action_bar.html">
                     <span class="en">Action Bar Icons</span>
-                  </a> <span class="new">new!</span></li>
+                  </a></li>
               <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_status_bar.html">
                     <span class="en">Status Bar Icons</span>
-                  </a> <span class="new">updated</span></li>
+                  </a></li>
               <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_tab.html">
                     <span class="en">Tab Icons</span>
                   </a></li>
diff --git a/docs/html/guide/practices/screens-support-1.5.jd b/docs/html/guide/practices/screens-support-1.5.jd
index 9f033b4..4c6fb99 100644
--- a/docs/html/guide/practices/screens-support-1.5.jd
+++ b/docs/html/guide/practices/screens-support-1.5.jd
@@ -46,7 +46,7 @@
 default, an application written for Android 1.5 or below that does not set the <a
 href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
 android:targetSdkVersion}</a> set to {@code "4"} or higher runs in <a
-href="screen-compat-mode">screen compatibility mode</a> when on a device with a screen larger than
+href="screen-compat-mode.html">screen compatibility mode</a> when on a device with a screen larger than
 the
 <em>normal</em> screen size (basically, the system displays the application in a small window
 that is roughly the size of the normal screen size).</p>
diff --git a/docs/html/guide/practices/security.jd b/docs/html/guide/practices/security.jd
index 476c301..eeaac44 100644
--- a/docs/html/guide/practices/security.jd
+++ b/docs/html/guide/practices/security.jd
@@ -126,8 +126,8 @@
 <p>Use of <a
 href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_WRITEABLE">
 world writable</a> or <a
-href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_READABLE
-">world readable</a> files for IPC is discouraged because it does not provide
+href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_READABLE">world
+readable</a> files for IPC is discouraged because it does not provide
 the ability to limit data access to particular applications, nor does it
 provide any control on data format. As an alternative, you might consider using
 a ContentProvider which provides read and write permissions, and can make
@@ -199,10 +199,10 @@
 <p>ContentProviders can also provide more granular access by declaring the <a
 href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
 grantUriPermissions</a> element and using the <code><a
-href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMIS
-SION">FLAG_GRANT_READ_URI_PERMISSION</a></code> and <code><a
-href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_WRITE_URI_PERMI
-SSION">FLAG_GRANT_WRITE_URI_PERMISSION</a></code> flags in the Intent object
+href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION">FLAG_GRANT_READ_URI_PERMISSION</a></code>
+and <code><a
+href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_WRITE_URI_PERMISSION">FLAG_GRANT_WRITE_URI_PERMISSION</a></code>
+flags in the Intent object
 that activates the component.  The scope of these permissions can be further
 limited by the <code><a
 href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">
@@ -211,14 +211,9 @@
 <p>When accessing a <code>
 <a href="{@docRoot}reference/android/content/ContentProvider.html">
 ContentProvider</a></code>, use parameterized query methods such as <code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html#query(android.net
-.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lan
-g.String)">query()</a></code>, <code><a
-href="{@docRoot}reference/android/content/ContentProvider.html#update(android.ne
-t.Uri,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[]
-)">update()</a></code>, and <code><a
-href="{@docRoot}reference/android/content/ContentProvider.html#delete(android.ne
-t.Uri,%20java.lang.String,%20java.lang.String[])">delete()</a></code> to avoid
+<a href="{@docRoot}reference/android/content/ContentProvider.html#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String)">query()</a></code>, <code><a
+href="{@docRoot}reference/android/content/ContentProvider.html#update(android.net.Uri,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])">update()</a></code>, and <code><a
+href="{@docRoot}reference/android/content/ContentProvider.html#delete(android.net.Uri,%20java.lang.String,%20java.lang.String[])">delete()</a></code> to avoid
 potential <a href="http://en.wikipedia.org/wiki/SQL_injection">SQL
 Injection</a> from untrusted data. Note that using parameterized methods is not
 sufficient if the <code>selection</code> is built by concatenating user data
@@ -249,8 +244,9 @@
 Activities</a>, and <a
 href="{@docRoot}reference/android/R.styleable.html#AndroidManifestService">
 Services</a> are all declared in the application manifest.  If your IPC mechanism is
-not intended for use by other applications, set the android:exported property
-to false.  This is useful for applications that consist of multiple processes
+not intended for use by other applications, set the <a
+href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a>
+property to false.  This is useful for applications that consist of multiple processes
 within the same UID, or if you decide late in development that you do not
 actually want to expose functionality as IPC but you don’t want to rewrite
 the code.</p>
@@ -276,11 +272,10 @@
 
 <p>Intents are the preferred mechanism for asynchronous IPC in Android.
 Depending on your application requirements, you might use <code><a
-href="{@docRoot}reference/android/content/Context.html#sendBroadcast(android.con
-tent.Intent)">sendBroadcast()</a></code>, <code><a
-href="{@docRoot}reference/android/content/Context.html#sendOrderedBroadcast(andr
-oid.content.Intent,%20java.lang.String)">sendOrderedBroadcast()</a></code>, or
-direct an intent to a specific application component.</p>
+href="{@docRoot}reference/android/content/Context.html#sendBroadcast(android.content.Intent)">sendBroadcast()</a></code>, 
+<code><a
+href="{@docRoot}reference/android/content/Context.html#sendOrderedBroadcast(android.content.Intent,%20java.lang.String)">sendOrderedBroadcast()</a></code>,
+or direct an intent to a specific application component.</p>
 
 <p>Note that ordered broadcasts can be “consumed” by a recipient, so they
 may not be delivered to all applications.  If you are sending an Intent where
@@ -311,14 +306,13 @@
 explicitly added as code in the interface.</p>
 
 <p>If providing an interface that does require access controls, use <code><a
-href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(ja
-va.lang.String)">checkCallingPermission()</a></code> to verify whether the
+href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(java.lang.String)">checkCallingPermission()</a></code>
+to verify whether the
 caller of the Binder has a required permission. This is especially important
 before accessing a Service on behalf of the caller, as the identify of your
 application is passed to other interfaces.  If invoking an interface provided
 by a Service, the <code><a
-href="{@docRoot}reference/android/content/Context.html#bindService(android.conte
-nt.Intent,%20android.content.ServiceConnection,%20int)">bindService()</a></code>
+href="{@docRoot}reference/android/content/Context.html#bindService(android.content.Intent,%20android.content.ServiceConnection,%20int)">bindService()</a></code>
  invocation may fail if you do not have permission to access the given Service.
  If calling an interface provided locally by your own application, it may be
 useful to use the <code><a
@@ -332,14 +326,14 @@
 
 <p>By default, receivers are exported and can be invoked by any other
 application. If your <code><a
-href={@docRoot}reference/android/content/BroadcastReceiver.html">
+href="{@docRoot}reference/android/content/BroadcastReceiver.html">
 BroadcastReceivers</a></code> is intended for use by other applications, you
 may want to apply security permissions to receivers using the <code><a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestReceiver">
+href="{@docRoot}guide/topics/manifest/receiver-element.html">
 &lt;receiver&gt;</a></code> element within the application manifest.  This will
 prevent applications without appropriate permissions from sending an intent to
 the <code><a
-href={@docRoot}reference/android/content/BroadcastReceiver.html">
+href="{@docRoot}reference/android/content/BroadcastReceiver.html">
 BroadcastReceivers</a></code>.</p>
 
 <h3>Using Services</h3>
@@ -349,19 +343,21 @@
 package's AndroidManifest.xml.</p>
 
 <p>By default, Services are exported and can be invoked by any other
-application.  Services can be protected using the android:permission attribute
+application.  Services can be protected using the <a
+href="{@docRoot}guide/topics/manifest/service-element.html#prmsn">{@code android:permission}</a>
+attribute
 within the manifest’s <code><a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestService">
+href="{@docRoot}guide/topics/manifest/service-element.html">
 &lt;service&gt;</a></code> tag. By doing so, other applications will need to declare
 a corresponding <code><a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestService_permis
-sion">&lt;uses-permission&gt;</a></code> element in their own manifest to be
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a>
+</code> element in their own manifest to be
 able to start, stop, or bind to the service.</p>
 
 <p>A Service can protect individual IPC calls into it with permissions, by
 calling <code><a
-href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(ja
-va.lang.String)">checkCallingPermission()</a></code>before executing
+href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(java.lang.String)">checkCallingPermission()</a></code>
+before executing
 the implementation of that call.  We generally recommend using the
 declarative permissions in the manifest, since those are less prone to
 oversight.</p>
@@ -376,9 +372,9 @@
 functionality that is not intended for use by other applications.</p>
 
 <p>If you do expose an Activity for purposes of IPC, the  <code><a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestActivity_permi
-ssion">android:permission</a></code> attribute in the  <code><a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestActivity">
+href="{@docRoot}guide/topics/manifest/activity-element.html#prmsn">android:permission</a></code>
+attribute in the  <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html">
 &lt;activity&gt;</a></code> declaration in the application manifest can be used to
 restrict access to only those applications which have the stated
 permissions.</p>
@@ -432,8 +428,8 @@
 <p>Generally, you should strive to create as few permissions as possible while
 satisfying your security requirements.  Creating a new permission is relatively
 uncommon for most applications, since <a
-href="{@docRoot}reference/android/Manifest.permission.html">
-system-defined permissions</a> cover many situations.  Where appropriate,
+href="{@docRoot}reference/android/Manifest.permission.html">system-defined
+permissions</a> cover many situations.  Where appropriate,
 perform access checks using existing permissions.</p>
 
 <p>If you must create a new permission, consider whether you can accomplish
@@ -560,17 +556,14 @@
 not execute JavaScript so cross-site-scripting is not possible.</p>
 
 <p>Use <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(jav
-a.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> with
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> with
 particular care because it allows JavaScript to invoke operations that are
 normally reserved for Android applications.  Only expose <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(jav
-a.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
 sources from which all input is trustworthy.  If untrusted input is allowed,
 untrusted JavaScript may be able to invoke Android methods.  In general, we
 recommend only exposing <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(jav
-a.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
 JavaScript that is contained within your application APK.</p>
 
 <p>Do not trust information downloaded over HTTP, use HTTPS instead.  Even if
@@ -578,13 +571,11 @@
 subject to <a
 href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack">MiTM</a> attacks
 and interception of data.  Sensitive capabilities using <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(jav
-a.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> should
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> should
 not ever be exposed to unverified script downloaded over HTTP. Note that even
 with the use of HTTPS,
 <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(jav
-a.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code>
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code>
 increases the attack surface of your application to include the server
 infrastructure and all CAs trusted by the Android-powered device.</p>
 
@@ -683,8 +674,7 @@
 <p>If a GUID is required, create a large, unique number and store it.  Do not
 use phone identifiers such as the phone number or IMEI which may be associated
 with personal information.  This topic is discussed in more detail in the <a
-href="http://android-developers.blogspot.com/2011/03/identifying-app-installatio
-ns.html">Android Developer Blog</a>.</p>
+href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html">Android Developer Blog</a>.</p>
 
 <p>Application developers should be careful writing to on-device logs.
 In Android, logs are a shared resource, and are available
@@ -724,9 +714,8 @@
 <p>If credentials are to be used only by applications that you create, then you
 can verify the application which accesses the <code><a
 href="{@docRoot}reference/android/accounts/AccountManager.html">
-AccountManager</a></code> using <code><a href="<code><a
-href="{@docRoot}h/reference/android/content/pm/PackageManager.html#checkSignatur
-es(java.lang.String,%20java.lang.String)">checkSignature()</a></code>.
+AccountManager</a></code> using <code><a
+href="{@docRoot}reference/android/content/pm/PackageManager.html#checkSignatures(java.lang.String,%20java.lang.String)">checkSignature()</a></code>.
 Alternatively, if only one application will use the credential, you might use a
 <code><a
 href={@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> for
@@ -756,15 +745,15 @@
 href="{@docRoot}reference/javax/crypto/Cipher.html">Cipher</a></code> class.</p>
 
 <p>Use a secure random number generator (
-<a href="http://developer.android.com/reference/java/security/SecureRandom.html">
+<a href="{@docRoot}reference/java/security/SecureRandom.html">
 <code>SecureRandom</code></a>) to initialize any cryptographic keys (<a
-href="http://developer.android.com/reference/javax/crypto/KeyGenerator.html">
+href="{@docRoot}reference/javax/crypto/KeyGenerator.html">
 <code>KeyGenerator</code></a>). Use of a key that is not generated with a secure random
 number generator significantly weakens the strength of the algorithm, and may
 allow offline attacks.</p>
 
 <p>If you need to store a key for repeated use, use a mechanism like <code><a
-href={@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> that
+href="{@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> that
 provides a mechanism for long term storage and retrieval of cryptographic
 keys.</p>
 
diff --git a/docs/html/guide/practices/tablets-and-handsets.jd b/docs/html/guide/practices/tablets-and-handsets.jd
index dc35801..3f4aaa9 100644
--- a/docs/html/guide/practices/tablets-and-handsets.jd
+++ b/docs/html/guide/practices/tablets-and-handsets.jd
@@ -481,7 +481,7 @@
 information in each list item based on the available space. That is, you can create alternative
 layouts to be used by the items in your list adapter such that a large screen might display more
 detail for each item.</li>
-  <li>Create <a href="{@docRoot}guide/topics/resources/more-resources.html ">alternative resource
+  <li>Create <a href="{@docRoot}guide/topics/resources/more-resources.html">alternative resource
 files</a> for values such as integers, dimensions, and even booleans. Using size qualifiers for
 these resources, you can easily apply different layout sizes, font sizes, or enable/disable features
 based on the current screen size.</li>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design.jd b/docs/html/guide/practices/ui_guidelines/icon_design.jd
index 07b73bb..96aecf5 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design.jd
@@ -57,6 +57,16 @@
 </div>
 </div>
 
+
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
+
+
+
 <p>Creating a unified look and feel throughout a user interface adds value to
 your product. Streamlining the graphic style will also make the UI seem more
 professional to users.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
index 449c27f..2476255 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
@@ -29,6 +29,12 @@
 </div>
 </div>
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
 
 
 <p>Action Bar icons are graphical elements placed in the <a
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd b/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd
index f78bd86..9b8cce7 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd
@@ -27,6 +27,12 @@
 </div>
 </div>
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
 
 
 <p>Dialog icons are shown in pop-up dialog boxes that prompt the user for
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
index 3f6061c..6b686b1 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
@@ -26,6 +26,15 @@
 </div>
 
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
+
+
+
 <p>A launcher icon is a graphic that represents your application. Launcher icons are used by
 Launcher applications and appear on the user’s Home screen. Launcher icons can also be used to
 represent shortcuts into your application (for example, a contact shortcut icon that opens detail
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_list.jd b/docs/html/guide/practices/ui_guidelines/icon_design_list.jd
index 7bf34cc..fd4dc6b 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_list.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_list.jd
@@ -28,6 +28,13 @@
 </div>
 
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
+
 
 <p>List view icons look a lot like dialog icons, but they use an inner shadow
 effect where the light source is above the object. They are also designed to be
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
index 974e48f..e267013 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
@@ -32,6 +32,13 @@
 </div>
 
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
+
 
 <p>Menu icons are graphical elements placed in the options menu shown to users
 when they press the Menu button. They are drawn in a flat-front perspective and
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
index b8e07b5..a20c1ee 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
@@ -40,6 +40,13 @@
 </div>
 
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
+
 
 <p>Status bar icons are used to represent notifications from your application in
 the status bar.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
index 271bd85..f85398d 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
@@ -32,6 +32,13 @@
 </div>
 
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines
+for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p>
+</div>
+
 
 <p>Tab icons are graphical elements used to represent individual tabs in a
 multi-tab interface. Each tab icon has two states: unselected and selected.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/index.jd b/docs/html/guide/practices/ui_guidelines/index.jd
index 0e42788..3255275 100644
--- a/docs/html/guide/practices/ui_guidelines/index.jd
+++ b/docs/html/guide/practices/ui_guidelines/index.jd
@@ -2,18 +2,28 @@
 @jd:body
 
 
-<img src="{@docRoot}assets/images/uiguidelines1.png" alt="" align="right">
+
+<div class="design-announce" style="background:none;overflow:auto;padding:10px 5px">
+  <a href="{@docRoot}design/index.html"><img src="{@docRoot}images/home/android-design.png" alt=""
+style="float:left;margin:0 1em 0 0;"/></a>
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>The Android UX team has put together a set of guidelines for the interaction and
+visual design of Android applications. The new collection provides an overview of
+Android styles, design patterns, building blocks for exceptional Android designs, and more.</p>
+<p><strong><a href="{@docRoot}design/index.html">Android Design</a></strong></p>
+
+<p>Over time, the documents below will be deprecated as more design information is published at
+the new location.</p>
+</div>
 
 
-<p>The Android UI team has begun developing guidelines for the interaction and
-visual design of Android applications. Look here for articles that describe
-these guidelines as we release them.</p>
+
 
  <dl>
   <dt><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Icon
 Design Guidelines</a> and <a
 href="{@docRoot}shareables/icon_templates-v4.0.zip">Android Icon Templates Pack
-&raquo; </a> <span class="new">updated</span></dt>
+&raquo; </a></dt>
   <dd>Your applications need a wide variety of icons, from a launcher icon to
 icons in menus, dialogs, tabs, the status bar, and lists. The Icon Guidelines
 describe each kind of icon in detail, with specifications for the size, color,
@@ -22,7 +32,8 @@
 filters that make it much simpler to create conforming icons.</dd>
 </dl>
  <dl>
-  <dt><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">Widget Design Guidelines</a> <span class="new">updated</span></dt>
+  <dt><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">Widget Design
+Guidelines</a> </dt>
   <dd>A widget displays an application's most important or timely information
 at a glance, on a user's Home screen. These design guidelines describe how to
 design widgets that fit with others on the Home screen. They include links to
@@ -43,7 +54,7 @@
   <dd>Android applications make use of Option menus and Context menus 
       that enable users to perform operations and navigate to other parts
       of your application or to other applications.  These guidelines describe
-      the difference between Options and Context menus, how to arrange
+      the difference between Options anontext menus, how to arrange
       menu items, when to put commands on-screen, and other details about
       menu design.
 </dd>
diff --git a/docs/html/guide/practices/ui_guidelines/widget_design.jd b/docs/html/guide/practices/ui_guidelines/widget_design.jd
index f63f3c4..d789407 100644
--- a/docs/html/guide/practices/ui_guidelines/widget_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/widget_design.jd
@@ -44,6 +44,13 @@
 </div>
 
 
+<div class="design-announce">
+<p><strong>New Guides for App Designers!</strong></p> 
+<p>Check out the new documents for designers at <strong><a
+href="{@docRoot}design/index.html">Android Design</a></strong>.</p>
+</div>
+
+
 <p>App widgets (sometimes just "widgets") are a feature introduced in Android 1.5 and vastly
 improved in Android 3.0 and 3.1. A widget can display an application's most timely or otherwise
 relevant information at a glance, on a user's Home screen. The standard Android system image
diff --git a/docs/html/guide/publishing/preparing.jd b/docs/html/guide/publishing/preparing.jd
index 5ed55fe..4d3bffa 100644
--- a/docs/html/guide/publishing/preparing.jd
+++ b/docs/html/guide/publishing/preparing.jd
@@ -120,8 +120,8 @@
 <p>You may also have to obtain other release keys if your application accesses a service or uses a
 third-party library that requires you to use a key that is based on your private key. For example,
 if your application uses the <a
-href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/ MapView.
-html">MapView</a> class, which is part of the <a
+href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html">MapView</a>
+class, which is part of the <a
 href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
 library</a>, you will need to register your application with the Google Maps service and obtain
 a Maps API key. For information about getting a Maps API key, see <a
diff --git a/docs/html/guide/publishing/publishing_overview.jd b/docs/html/guide/publishing/publishing_overview.jd
index a0f6ae3..e30360b 100755
--- a/docs/html/guide/publishing/publishing_overview.jd
+++ b/docs/html/guide/publishing/publishing_overview.jd
@@ -21,7 +21,7 @@
   </ol>
   <h2>See also</h2>
   <ol>
-    <li><a href="{@docRoot}guide/publishing/publishing_preparing.html">Preparing for
+    <li><a href="{@docRoot}guide/publishing/preparing.html">Preparing for
     Release</a></li>
     <li><a href="{@docRoot}guide/publishing/publishing.html">Publishing on Android Market</a></li>
   </ol>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index 7b869a0..ba7b67c 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -518,15 +518,12 @@
 to the App Widget without worrying about the AppWidgetProvider closing down due
 to an <a href="{@docRoot}guide/practices/design/responsiveness.html">Application
 Not Responding</a> (ANR) error. See the <a
-href="http://code.google.com/p/wiktionary-android/source/browse/trunk/Wiktionary
-/src/com/example/android/wiktionary/WordWidget.java">Wiktionary sample's
-AppWidgetProvider</a> for an example of an App Widget running a {@link
+href="http://code.google.com/p/wiktionary-android/source/browse/trunk/Wiktionary/src/com/example/android/wiktionary/WordWidget.java">Wiktionary sample's AppWidgetProvider</a> for an example of an App Widget running a {@link
 android.app.Service}.</p>
 
 <p>Also see the <a 
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/
-appwidget/ExampleAppWidgetProvider.html">
-ExampleAppWidgetProvider.java</a> sample class.</p>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html">ExampleAppWidgetProvider.java</a>
+sample class.</p>
 
 
 <h3 id="ProviderBroadcasts">Receiving App Widget broadcast Intents</h3>
@@ -683,9 +680,8 @@
 App Widget will not be added.</p>
 
 <p>See the <a 
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/
-appwidget/ExampleAppWidgetConfigure.html">
-ExampleAppWidgetConfigure.java</a> sample class in ApiDemos for an example.</p>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html">ExampleAppWidgetConfigure.java</a>
+sample class in ApiDemos for an example.</p>
 
 <h2 id="preview">Setting a Preview Image</h2>
 
diff --git a/docs/html/guide/topics/fundamentals/activities.jd b/docs/html/guide/topics/fundamentals/activities.jd
index cb453da..3b31199 100644
--- a/docs/html/guide/topics/fundamentals/activities.jd
+++ b/docs/html/guide/topics/fundamentals/activities.jd
@@ -19,9 +19,10 @@
   </li>
   <li><a href="#StartingAnActivity">Starting an Activity</a>
     <ol>
-      <li><a href="#StartingAnActivityForResult">Starting an Activity for a Result</a></li>
+      <li><a href="#StartingAnActivityForResult">Starting an activity for a result</a></li>
     </ol>
   </li>
+  <li><a href="#ShuttingDown">Shutting Down an Activity</a></li>
   <li><a href="#Lifecycle">Managing the Activity Lifecycle</a>
     <ol>
       <li><a href="#ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</a></li>
@@ -612,17 +613,9 @@
 when an activity is paused or stopped, the state of the activity is retained. This is true because
 the {@link android.app.Activity} object is still held in memory when it is paused or
 stopped&mdash;all information about its members and current state is still alive. Thus, any changes
-the user made within the activity are retained in memory, so that when the activity returns to the
+the user made within the activity are retained so that when the activity returns to the
 foreground (when it "resumes"), those changes are still there.</p>
 
-<div class="figure" style="width:615px">
-<img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
-<p class="img-caption"><strong>Figure 2.</strong> The two ways in which an activity returns to user
-focus with its state intact: either the activity is stopped, then resumed and the activity state
-remains intact (left), or the activity is destroyed, then recreated and the activity must restore
-the previous activity state (right).</p>
-</div>
-
 <p>However, when the system destroys an activity in order to recover memory, the {@link
 android.app.Activity} object is destroyed, so the system cannot simply resume it with its state
 intact. Instead, the system must recreate the {@link android.app.Activity} object if the user
@@ -630,26 +623,35 @@
 that the system destroyed the activity and recreated it and, thus, probably
 expects the activity to be exactly as it was. In this situation, you can ensure that
 important information about the activity state is preserved by implementing an additional
-callback method that allows you to save information about the state of your activity and then
-restore it when the the system recreates the activity.</p>
+callback method that allows you to save information about the state of your activity: {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
 
-<p>The callback method in which you can save information about the current state of your activity is
-{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}. The system calls this method
-before making the activity vulnerable to being destroyed and passes it
-a {@link android.os.Bundle} object. The {@link android.os.Bundle} is where you can store 
+<p>The system calls {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
+before making the activity vulnerable to destruction. The system passes this method
+a {@link android.os.Bundle} in which you can save 
 state information about the activity as name-value pairs, using methods such as {@link
-android.os.Bundle#putString putString()}. Then, if the system kills your activity's
-process and the user navigates back to your activity, the system passes the {@link
-android.os.Bundle} to {@link android.app.Activity#onCreate onCreate()} so you can restore the
-activity state you saved during {@link android.app.Activity#onSaveInstanceState
-onSaveInstanceState()}. If there is no state information to restore, then the {@link
-android.os.Bundle} passed to {@link android.app.Activity#onCreate onCreate()} is null.</p>
+android.os.Bundle#putString putString()} and {@link
+android.os.Bundle#putInt putInt()}. Then, if the system kills your application
+process and the user navigates back to your activity, the system recreates the activity and passes
+the {@link android.os.Bundle} to both {@link android.app.Activity#onCreate onCreate()} and {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Using either of these
+methods, you can extract your saved state from the {@link android.os.Bundle} and restore the
+activity state. If there is no state information to restore, then the {@link
+android.os.Bundle} passed to you is null (which is the case when the activity is created for
+the first time).</p>
+
+<img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> The two ways in which an activity returns to user
+focus with its state intact: either the activity is destroyed, then recreated and the activity must restore
+the previously saved state, or the activity is stopped, then resumed and the activity state
+remains intact.</p>
 
 <p class="note"><strong>Note:</strong> There's no guarantee that {@link
 android.app.Activity#onSaveInstanceState onSaveInstanceState()} will be called before your
 activity is destroyed, because there are cases in which it won't be necessary to save the state
 (such as when the user leaves your activity using the BACK key, because the user is explicitly
-closing the activity). If the method is called, it is always called before {@link
+closing the activity). If the system calls {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()}, it does so before {@link
 android.app.Activity#onStop onStop()} and possibly before {@link android.app.Activity#onPause
 onPause()}.</p>
 
@@ -657,17 +659,17 @@
 android.app.Activity#onSaveInstanceState onSaveInstanceState()}, some of the activity state is
 restored by the {@link android.app.Activity} class's default implementation of {@link
 android.app.Activity#onSaveInstanceState onSaveInstanceState()}. Specifically, the default
-implementation calls {@link
-android.view.View#onSaveInstanceState onSaveInstanceState()} for every {@link android.view.View}
-in the layout, which allows each view to provide information about itself
+implementation calls the corresponding {@link
+android.view.View#onSaveInstanceState onSaveInstanceState()} method for every {@link
+android.view.View} in the layout, which allows each view to provide information about itself
 that should be saved. Almost every widget in the Android framework implements this method as
 appropriate, such that any visible changes to the UI are automatically saved and restored when your
 activity is recreated. For example, the {@link android.widget.EditText} widget saves any text
 entered by the user and the {@link android.widget.CheckBox} widget saves whether it's checked or
 not. The only work required by you is to provide a unique ID (with the <a
 href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>
-attribute) for each widget you want to save its state. If a widget does not have an ID, then it
-cannot save its state.</p>
+attribute) for each widget you want to save its state. If a widget does not have an ID, then the
+system cannot save its state.</p>
 
 <div class="sidebox-wrapper">
 <div class="sidebox">
@@ -689,7 +691,9 @@
 android.app.Activity#onSaveInstanceState onSaveInstanceState()} helps save the state of the UI, if
 you override the method in order to save additional state information, you should always call the
 superclass implementation of {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
-before doing any work.</p>
+before doing any work. Likewise, you should also call the supercall implementation of {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} if you override it, so the
+default implementation can restore view states.</p>
 
 <p class="note"><strong>Note:</strong> Because {@link android.app.Activity#onSaveInstanceState
 onSaveInstanceState()} is not guaranteed
@@ -701,7 +705,7 @@
 <p>A good way to test your application's ability to restore its state is to simply rotate the
 device so that the screen orientation changes. When the screen orientation changes, the system
 destroys and recreates the activity in order to apply alternative resources that might be available
-for the new orientation. For this reason alone, it's very important that your activity
+for the new screen configuration. For this reason alone, it's very important that your activity
 completely restores its state when it is recreated, because users regularly rotate the screen while
 using applications.</p>
 
@@ -709,22 +713,25 @@
 <h3 id="ConfigurationChanges">Handling configuration changes</h3>
 
 <p>Some device configurations can change during runtime (such as screen orientation, keyboard
-availability, and language). When such a change occurs, Android restarts the running Activity
-({@link android.app.Activity#onDestroy} is called, followed immediately by {@link
-android.app.Activity#onCreate onCreate()}). The restart behavior is
+availability, and language). When such a change occurs, Android recreates the running activity
+(the system calls {@link android.app.Activity#onDestroy}, then immediately calls {@link
+android.app.Activity#onCreate onCreate()}). This behavior is
 designed to help your application adapt to new configurations by automatically reloading your
-application with alternative resources that you've provided. If you design your activity to
-properly handle this event, it will be more resilient to unexpected events in the activity
-lifecycle.</p>
+application with alternative resources that you've provided (such as different layouts for
+different screen orientations and sizes).</p>
 
-<p>The best way to handle a configuration change, such as a change in the screen orientation, is
-  to simply preserve the state of your application using {@link
+<p>If you properly design your activity to handle a restart due to a screen orientation change and
+restore the activity state as described above, your application will be more resilient to other
+unexpected events in the activity lifecycle.</p>
+
+<p>The best way to handle such a restart is
+  to save and restore the state of your activity using {@link
   android.app.Activity#onSaveInstanceState onSaveInstanceState()} and {@link
 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (or {@link
 android.app.Activity#onCreate onCreate()}), as discussed in the previous section.</p>
 
-<p>For a detailed discussion about configuration changes that happen at runtime and how you should
-handle them, read <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
+<p>For more information about configuration changes that happen at runtime and how you can handle
+them, read the guide to <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
 Runtime Changes</a>.</p>
 
 
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
index d6ba646..e8f6cd8 100644
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -33,7 +33,7 @@
     </li>
     <li><a href="#Lifecycle">Handling the Fragment Lifecycle</a>
       <ol>
-        <li><a href="#CoordinadingWithActivity">Coordinating with the activity lifecycle</a></li>
+        <li><a href="#CoordinatingWithActivity">Coordinating with the activity lifecycle</a></li>
       </ol>
     </li>
     <li><a href="#Example">Example</a></li>
@@ -143,7 +143,7 @@
 
 <h2 id="Creating">Creating a Fragment</h2>
 
-<div class="figure" style="width:314px">
+<div class="figure" style="width:327px">
 <img src="{@docRoot}images/fragment_lifecycle.png" alt="" />
 <p class="img-caption"><strong>Figure 2.</strong> The lifecycle of a fragment (while its
 activity is running).</p>
@@ -657,7 +657,7 @@
 
 <h2 id="Lifecycle">Handling the Fragment Lifecycle</h2>
 
-<div class="figure" style="width:403px">
+<div class="figure" style="width:350px">
 <img src="{@docRoot}images/activity_fragment_lifecycle.png" alt=""/>
 <p class="img-caption"><strong>Figure 3.</strong> The activity lifecycle's affect on the fragment
 lifecycle.</p>
diff --git a/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd b/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd
index 216420c..086ba71 100644
--- a/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd
+++ b/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd
@@ -34,7 +34,9 @@
 
 <h2>See also</h2>
 <ol>
-  <li><a><a href="{@docRoot}videos/index.html#v=fL6gSd4ugSI">Application Lifecycle video</a></li>
+  <li><a href="{@docRoot}design/patterns/navigation.html">Android Design:
+Navigation</a></li>
+  <li><a href="{@docRoot}videos/index.html#v=fL6gSd4ugSI">Application Lifecycle video</a></li>
   <li><a
 href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;} manifest
 element</a></li>
@@ -72,7 +74,7 @@
 suppose you have a two-pane layout using fragments, one of which is a list view (fragment A) and the
 other being a layout to display an item from the list (fragment B). When the user selects an item
 from the list, fragment B is replaced by a new fragment (fragment C). In this case, it might be
-desireable for the user to navigate back to reveal fragment B, using the BACK key.</p>
+desireable for the user to navigate back to reveal fragment B, using the BACK button.</p>
 <p>In order to add fragment B to the back stack so that this is possible, you must call {@link
 android.app.FragmentTransaction#addToBackStack addToBackStack()} before you {@link
 android.app.FragmentTransaction#commit()} the transaction that replaces fragment B with fragment
@@ -93,17 +95,17 @@
 <p>When the current activity starts another, the new activity is pushed on the top of the stack and
 takes focus. The previous activity remains in the stack, but is stopped. When an activity
 stops, the system retains the current state of its user interface. When the user presses the BACK
-key, the current activity is popped from the top of the stack (the activity is destroyed) and the
+button, the current activity is popped from the top of the stack (the activity is destroyed) and the
 previous activity resumes (the previous state of its UI is restored). Activities in the stack are
 never rearranged, only pushed and popped from the stack&mdash;pushed onto the stack when started by
-the current activity and popped off when the user leaves it using the BACK key. As such, the back
+the current activity and popped off when the user leaves it using the BACK button. As such, the back
 stack operates as a "last in, first out" object structure. Figure 1 visualizes
 this behavior with a timeline showing the progress between activities along with the current back
 stack at each point in time.</p>
 
 <img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" />
 <p class="img-caption"><strong>Figure 1.</strong> A representation of how each new activity in a
-task adds an item to the back stack. When the user presses the BACK key, the current activity is
+task adds an item to the back stack. When the user presses the BACK button, the current activity is
 destroyed and the previous activity resumes.</p>
 
 
@@ -111,22 +113,22 @@
 previous one, until the user returns to the Home screen (or to whichever activity was running when
 the task began). When all activities are removed from the stack, the task no longer exists.</p>
 
-<div class="figure" style="width:369px">
+<div class="figure" style="width:287px">
 <img src="{@docRoot}images/fundamentals/diagram_multitasking.png" alt="" /> <p
-class="img-caption"><strong>Figure 2.</strong> Two tasks: Task A is in the background, waiting
-to be resumed, while Task B receives user interaction in the foreground.</p>
+class="img-caption"><strong>Figure 2.</strong> Two tasks: Task B receives user interaction
+in the foreground, while Task A is in the background, waiting to be resumed.</p>
 </div>
-<div class="figure" style="width:178px">
+<div class="figure" style="width:215px">
   <img src="{@docRoot}images/fundamentals/diagram_multiple_instances.png" alt="" /> <p
 class="img-caption"><strong>Figure 3.</strong> A single activity is instantiated multiple times.</p>
 </div>
 
 <p>A task is a cohesive unit that can move to the "background" when users begin a new task or go
-to the Home screen, via the HOME key. While in the background, all the activities in the task are
+to the Home screen, via the HOME button. While in the background, all the activities in the task are
 stopped, but the back stack for the task remains intact&mdash;the task has simply lost focus while
 another task takes place, as shown in figure 2. A task can then return to the "foreground" so users
 can pick up where they left off. Suppose, for example, that the current task (Task A) has three
-activities in its stack&mdash;two under the current activity. The user presses the HOME key, then
+activities in its stack&mdash;two under the current activity. The user presses the HOME button, then
 starts a new application from the application launcher. When the Home screen appears, Task A goes
 into the background. When the new application starts, the system starts a task for that application
 (Task B) with its own stack of activities. After interacting with
@@ -135,7 +137,7 @@
 foreground&mdash;all three activities in its stack are intact and the activity at the top of the
 stack resumes. At
 this point, the user can also switch back to Task B by going Home and selecting the application icon
-that started that task (or by touching and holding the HOME key to reveal recent tasks and selecting
+that started that task (or by touching and holding the HOME button to reveal recent tasks and selecting
 one). This is an example of multitasking on Android.</p>
 
 <p class="note"><strong>Note:</strong> Multiple tasks can be held in the background at once.
@@ -148,7 +150,7 @@
 that activity is created and popped onto the stack (rather than bringing any previous instance of
 the activity to the top). As such, one activity in your application might be instantiated multiple
 times (even from different tasks), as shown in figure 3. As such, if the user navigates backward
-using the BACK key, each instance of the activity is revealed in the order they were opened (each
+using the BACK button, each instance of the activity is revealed in the order they were opened (each
 with their own UI state). However, you can modify this behavior if you do not want an activity to be
 instantiated more than once. How to do so is discussed in the later section about <a
 href="#ManagingTasks">Managing Tasks</a>.</p>
@@ -159,19 +161,26 @@
 <ul>
   <li>When Activity A starts Activity B, Activity A is stopped, but the system retains its state
 (such as scroll position and text entered into forms).
-If the user presses the BACK key while in Activity B, Activity A resumes with its state
+If the user presses the BACK button while in Activity B, Activity A resumes with its state
 restored.</li>
-  <li>When the user leaves a task by pressing the HOME key, the current activity is stopped and
+  <li>When the user leaves a task by pressing the HOME button, the current activity is stopped and
 its task goes into the background. The system retains the state of every activity in the task. If
 the user later resumes the task by selecting the launcher icon that began the task, the task comes
 to the foreground and resumes the activity at the top of the stack.</li>
-  <li>If the user presses the BACK key, the current activity is popped from the stack and
+  <li>If the user presses the BACK button, the current activity is popped from the stack and
 destroyed. The previous activity in the stack is resumed. When an activity is destroyed, the system
 <em>does not</em> retain the activity's state.</li>
   <li>Activities can be instantiated multiple times, even from other tasks.</li>
 </ul>
 
 
+<div class="design-announce">
+<p><strong>Navigation Design</strong></p>
+  <p>For more about how app navigation works on Android, read Android Design's <a
+href="{@docRoot}design/patterns/navigation.html">Navigation</a> guide.</p>
+</div>
+
+
 <h2 id="ActivityState">Saving Activity State</h2>
 
 <p>As discussed above, the system's default behavior preserves the state of an activity when it is
@@ -247,7 +256,7 @@
 <p class="caution"><strong>Caution:</strong> Most applications should not interrupt the default
 behavior for activities and tasks. If you determine that it's necessary for your activity to modify
 the default behaviors, use caution and be sure to test the usability of the activity during
-launch and when navigating back to it from other activities and tasks with the BACK key. Be sure 
+launch and when navigating back to it from other activities and tasks with the BACK button. Be sure 
 to test for navigation behaviors that might conflict with the user's expected behavior.</p>
 
 
@@ -311,8 +320,8 @@
 stack remains A-B-C-D. However, if an intent arrives for an activity of type B, then a new
 instance of B is added to the stack, even if its launch mode is {@code "singleTop"}.</p>
   <p class="note"><strong>Note:</strong> When a new instance of an activity is created,
-the user can press the BACK key to return to the previous activity. But when an existing instance of
-an activity handles a new intent, the user cannot press the BACK key to return to the state of
+the user can press the BACK button to return to the previous activity. But when an existing instance of
+an activity handles a new intent, the user cannot press the BACK button to return to the state of
 the activity before the new intent arrived in {@link android.app.Activity#onNewIntent
 onNewIntent()}.</p>
 </dd>
@@ -324,7 +333,7 @@
 android.app.Activity#onNewIntent onNewIntent()} method, rather than creating a new instance. Only
 one instance of the activity can exist at a time.
   <p class="note"><strong>Note:</strong> Although the activity starts in a new task, the
-BACK key still returns the user to the previous activity.</p></dd>
+BACK button still returns the user to the previous activity.</p></dd>
 <dt>{@code "singleInstance"}.</dt>
   <dd>Same as {@code "singleTask"}, except that the system doesn't launch any other activities into
 the task holding the instance. The activity is always the single and only member of its task;
@@ -342,19 +351,17 @@
 intent.</p>
 
 <p>Regardless of whether an activity starts in a new task or in the same task as the activity that
-started it, the BACK key always takes the user to the previous activity. However, if you
-start an activity from your task (Task A) that specifies the {@code singleTask} launch mode, then
-that activity might have an instance in the background that belongs to a task with its own back
-stack (Task B). In this
-case, when Task B is brought forward to handle a new intent, the BACK key first navigates
-backward through the activities in Task B before returning to
-the top-most activity in Task A. Figure 4 visualizes this type of scenario.</p>
+started it, the BACK button always takes the user to the previous activity. However, if you
+start an activity that specifies the {@code singleTask} launch mode, then if an instance of
+that activity exists in a background task, that whole task is brought to the foreground. At this
+point, the back stack now includes all activities from the task brought forward, at the top of the
+stack. Figure 4 illustrates this type of scenario.</p>
 
 <img src="{@docRoot}images/fundamentals/diagram_backstack_singletask_multiactivity.png" alt="" />
 <p class="img-caption"><strong>Figure 4.</strong> A representation of how an activity with
 launch mode "singleTask" is added to the back stack. If the activity is already a part of a
-background task with its own back stack (Task B), then the entire back stack also comes
-forward, on top of the current task (Task A).</p>
+background task with its own back stack, then the entire back stack also comes
+forward, on top of the current task.</p>
 
 <p>For more information about using launch modes in the manifest file, see the
 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
@@ -447,7 +454,7 @@
 However, it doesn't have to be.  If there's already an existing task with the same affinity as the
 new activity, the activity is launched into that task.  If not, it begins a new task.</p>
 
-<p>If this flag causes an activity to begin a new task and the user presses the HOME key to leave
+<p>If this flag causes an activity to begin a new task and the user presses the HOME button to leave
 it, there must be some way for the user to navigate back to the task. Some entities (such as the
 notification manager) always start activities in an external task, never as part of their own, so
 they always put {@code FLAG_ACTIVITY_NEW_TASK} in the intents they pass to {@link
@@ -549,9 +556,9 @@
 and a {@link android.content.Intent#CATEGORY_LAUNCHER}
 filter. Imagine, for example, what could happen if the filter is missing: An intent launches a
 {@code "singleTask"} activity, initiating a new task, and the user spends some time working in
-that task.  The user then presses the HOME key. The task is now sent to the background and not
-visible. Because it is not represented in the application launcher, the user has no way to return to
-the task.
+that task.  The user then presses the HOME button. The task is now sent to the background and is
+not visible. Now the user has no way to return to the task, because it is not represented in the
+application launcher.
 </p>
 
 <p>For those cases where you don't want the user to be able to return to an activity, set the
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index e23fb0ec..e76a6be 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -59,7 +59,7 @@
 
 <dt>attributes:</dt>
 <dd><dl class="attr">
-<dt><a href name="reparent"></a>{@code android:allowTaskReparenting}</dt>
+<dt><a name="reparent"></a>{@code android:allowTaskReparenting}</dt>
 <dd>Whether or not the activity can move from the task that started it to 
 the task it has an affinity for when that task is next brought to the 
 front &mdash; "{@code true}" if it can move, and "{@code false}" if it 
diff --git a/docs/html/guide/topics/manifest/application-element.jd b/docs/html/guide/topics/manifest/application-element.jd
index 4f1964c..df6f61a 100644
--- a/docs/html/guide/topics/manifest/application-element.jd
+++ b/docs/html/guide/topics/manifest/application-element.jd
@@ -249,7 +249,7 @@
 applications, reducing resource usage.
 </p></dd>
 
-<dt><a href name="restoreany"></a>{@code android:restoreAnyVersion}</dt>
+<dt><a name="restoreany"></a>{@code android:restoreAnyVersion}</dt>
 <dd>Indicate that the application is prepared to attempt a restore of any
 backed-up data set, even if the backup was stored by a newer version
 of the application than is currently installed on the device.  Setting
@@ -260,7 +260,7 @@
 <p>The default value of this attribute is {@code false}.
 </p></dd>
 
-<dt><a href name="aff"></a>{@code android:taskAffinity}</dt>
+<dt><a name="aff"></a>{@code android:taskAffinity}</dt>
 <dd>An affinity name that applies to all activities within the application,
 except for those that set a different affinity with their own
 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">taskAffinity</a></code> 
diff --git a/docs/html/guide/topics/media/mediaplayer.jd b/docs/html/guide/topics/media/mediaplayer.jd
index b3ca7dd..002d113 100644
--- a/docs/html/guide/topics/media/mediaplayer.jd
+++ b/docs/html/guide/topics/media/mediaplayer.jd
@@ -251,7 +251,7 @@
 "background media" even when the user leaves your activity, much in the same
 way that the built-in Music application behaves. In this case, what you need is
 a {@link android.media.MediaPlayer MediaPlayer} controlled by a {@link android.app.Service}, as
-discussed in <a href="mpandservices">Using a Service with MediaPlayer</a>.</p>
+discussed in <a href="#mpandservices">Using a Service with MediaPlayer</a>.</p>
 
 <h2 id="mpandservices">Using a Service with MediaPlayer</h2>
 
diff --git a/docs/html/guide/topics/nfc/nfc.jd b/docs/html/guide/topics/nfc/nfc.jd
index 175bc7cc..83873c3 100644
--- a/docs/html/guide/topics/nfc/nfc.jd
+++ b/docs/html/guide/topics/nfc/nfc.jd
@@ -666,7 +666,7 @@
 potentially handling specific tags that you have deployed. AARs are only supported at the
 application level, because of the package name constraint, and not at the Activity level as with
 intent filtering. If you want to handle an intent at the Activity level, <a
-href="filtering-intents">use intent filters</a>.
+href="#filtering-intents">use intent filters</a>.
 </p>
 
 
@@ -795,8 +795,8 @@
 
 <p>The following sample shows how a simple activity calls {@link
 android.nfc.NfcAdapter.CreateNdefMessageCallback} in the <code>onCreate()</code> method of an
-activity (see <a href="{@docRoot}resources/samples/AndroidBeam/index.html"></a> for the
-complete sample). This example also has methods to help you create a MIME record:</p>
+activity (see <a href="{@docRoot}resources/samples/AndroidBeamDemo/index.html">AndroidBeamDemo</a>
+for the complete sample). This example also has methods to help you create a MIME record:</p>
 
 <pre id="code-example">
 package com.example.android.beam;
diff --git a/docs/html/guide/topics/renderscript/index.jd b/docs/html/guide/topics/renderscript/index.jd
index 148705c..63f341a 100644
--- a/docs/html/guide/topics/renderscript/index.jd
+++ b/docs/html/guide/topics/renderscript/index.jd
@@ -376,7 +376,7 @@
   you call the constructor for the {@link android.renderscript.Script.FieldBase} class and specify
   the amount of structures that you want to allocate memory for. To allocate memory for a primitive
   type pointer, you must build an allocation manually, using the memory management classes
-  described in <a href="mem-mgmt-table">Table 1</a>. The example below allocates memory for both
+  described in <a href="#mem-mgmt-table">Table 1</a>. The example below allocates memory for both
   the <code>intPointer</code> and <code>touchPoints</code> pointer and binds it to the
   RenderScript:</p>
   <pre>
diff --git a/docs/html/guide/topics/resources/animation-resource.jd b/docs/html/guide/topics/resources/animation-resource.jd
index eaa698f..6473155 100644
--- a/docs/html/guide/topics/resources/animation-resource.jd
+++ b/docs/html/guide/topics/resources/animation-resource.jd
@@ -335,7 +335,7 @@
 <dd>
 <ul>
   <li><a href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a></li>
-  <li><a href="http://zoso:8080/resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API Demos</a> for examples
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API Demos</a> for examples
   on how to use the property animation system.</li>
 </ul>
 </dd>
diff --git a/docs/html/guide/topics/resources/index.jd b/docs/html/guide/topics/resources/index.jd
index 84eac73..3f0f1ee 100644
--- a/docs/html/guide/topics/resources/index.jd
+++ b/docs/html/guide/topics/resources/index.jd
@@ -28,18 +28,18 @@
 project's {@code res/} directory, using various sub-directories that group resources by type and
 configuration.</p>
 
-<div class="figure" style="width:421px">
-<img src="{@docRoot}images/resources/resource_devices_diagram1.png" height="137" alt="" />
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram1.png" height="167" alt="" />
 <p class="img-caption">
-<strong>Figure 1.</strong> Two different devices, both using default
-resources.</p>
+<strong>Figure 1.</strong> Two different devices, each using the default layout
+(the app provides no alternative layouts).</p>
 </div>
 
-<div class="figure" style="width:421px">
-<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="137" alt="" />
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
 <p class="img-caption">
-<strong>Figure 2.</strong> Two different devices, one using alternative
-resources.</p>
+<strong>Figure 2.</strong> Two different devices, each using a different layout provided
+for different screen sizes.</p>
 </div>
 
 <p>For any type of resource, you can specify <em>default</em> and multiple
@@ -54,18 +54,16 @@
 </ul>
 
 <p>For example, while your default UI
-layout is saved in the {@code res/layout/} directory, you might specify a different UI layout to
+layout is saved in the {@code res/layout/} directory, you might specify a different layout to
 be used when the screen is in landscape orientation, by saving it in the {@code res/layout-land/}
 directory. Android automatically applies the appropriate resources by matching the
 device's current configuration to your resource directory names.</p>
 
-<p>Figure 1 demonstrates how a collection of default resources from an application are applied
-to two different devices when there are no alternative resources available. Figure 2 shows
-the same application with a set of alternative resources that qualify for one of the device
-configurations, thus, the two devices uses different resources.</p>
+<p>Figure 1 illustrates how the system applies the same layout for
+two different devices when there are no alternative resources available. Figure 2 shows
+the same application when it adds an alternative layout resource for larger screens.</p>
 
-<p>The information above is just an introduction to how application resources work on Android.
-The following documents provide a complete guide to how you can organize your application resources,
+<p>The following documents provide a complete guide to how you can organize your application resources,
 specify alternative resources, access them in your application, and more:</p>
 
 <dl>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index 252c153..3a176e6 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -207,10 +207,10 @@
 <h2 id="AlternativeResources">Providing Alternative Resources</h2>
 
 
-<div class="figure" style="width:421px">
-<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="137" alt="" />
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
 <p class="img-caption">
-<strong>Figure 1.</strong> Two different devices, one using alternative resources.</p>
+<strong>Figure 1.</strong> Two different devices, each using different layout resources.</p>
 </div>
 
 <p>Almost every application should provide alternative resources to support specific device
@@ -1021,8 +1021,8 @@
 logic:</p>
 
 
-<div class="figure" style="width:280px">
-<img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="590" />
+<div class="figure" style="width:371px">
+<img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" />
 <p class="img-caption"><strong>Figure 2.</strong> Flowchart of how Android finds the
 best-matching resource.</p>
 </div>
diff --git a/docs/html/guide/topics/sensors/sensors_motion.jd b/docs/html/guide/topics/sensors/sensors_motion.jd
index 3f712b2..b6c3cb4 100644
--- a/docs/html/guide/topics/sensors/sensors_motion.jd
+++ b/docs/html/guide/topics/sensors/sensors_motion.jd
@@ -28,7 +28,7 @@
 href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html">
 API Demos (OS - RotationVectorDemo)</a></li>
       <li><a
-href="{@docRoot}/resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html"
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html"
 >API Demos (OS - Sensors)</a></li>
     </ol>
     <h2>See also</h2>
diff --git a/docs/html/guide/topics/testing/testing_android.jd b/docs/html/guide/topics/testing/testing_android.jd
index c8a3f6e..adbc59d 100755
--- a/docs/html/guide/topics/testing/testing_android.jd
+++ b/docs/html/guide/topics/testing/testing_android.jd
@@ -318,7 +318,7 @@
     A useful general test case class, especially if you are
     just starting out with Android testing, is {@link android.test.AndroidTestCase}. It extends
     both {@link junit.framework.TestCase} and {@link junit.framework.Assert}. It provides the
-    JUnit-standard <code>setUp()</code> and <code>tearDown()</code> methods, as well as well as
+    JUnit-standard <code>setUp()</code> and <code>tearDown()</code> methods, as well as
     all of JUnit's Assert methods. In addition, it provides methods for testing permissions, and a
     method that guards against memory leaks by clearing out certain class references.
 </p>
@@ -401,7 +401,7 @@
     Mock objects isolate tests from a running system by stubbing out or overriding
     normal operations. For example, a {@link android.test.mock.MockContentResolver}
     replaces the normal resolver framework with its own local framework, which is isolated
-    from the rest of the system. MockContentResolver also also stubs out the
+    from the rest of the system. MockContentResolver also stubs out the
     {@link android.content.ContentResolver#notifyChange(Uri, ContentObserver, boolean)} method
     so that observer objects outside the test environment are not accidentally triggered.
 </p>
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index 3c0ef26..b83bde7 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -73,8 +73,10 @@
 API Demos</a></li>
   </ol>
 
-  <h2>See also</h2>item
+  <h2>See also</h2>
   <ol>
+    <li><a
+href="{@docRoot}design/patterns/actionbar.html">Android Design: Action Bar</a></li>
     <li><a href="{@docRoot}guide/topics/ui/menus.html">Menus</a></li>
     <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets
 and Handsets</a></li>
@@ -124,6 +126,14 @@
 right (plus the overflow menu button).</p>
 
 
+<div class="design-announce">
+<p><strong>Action Bar Design</strong></p>
+  <p>For design guidelines, read Android Design's <a
+href="{@docRoot}design/patterns/actionbar.html">Action Bar</a> guide.</p>
+</div>
+
+
+
 <div class="sidebox-wrapper">
 <div class="sidebox">
   <h2>Remaining backward-compatible</h2>
@@ -536,6 +546,12 @@
 <p class="img-caption"><strong>Figure 6.</strong> Example behavior for UP navigation after
 entering the Email app from the People app.</p>
 
+<div class="design-announce">
+<p><strong>Navigation Design</strong></p>
+  <p>For more about how <em>Up</em> and <em>Back</em> navigation differ, read Android Design's <a
+href="{@docRoot}design/patterns/navigation.html">Navigation</a> guide.</p>
+</div>
+
 <p>To enable the icon for up navigation (which displays the "up" indicator next to the icon), call
 {@link android.app.ActionBar#setDisplayHomeAsUpEnabled setDisplayHomeAsUpEnabled(true)} on your
 {@link android.app.ActionBar}:</p>
@@ -642,7 +658,7 @@
   <p>Adding this value requires that you set your build target to Android 4.0 or higher in order to
 compile. Older versions of Android ignore the {@code "collapseActionView"} value because they don't
 understand it. Just be sure not to use other APIs in your source code that are not supported in the
-version declared by your <a href="{@docRoot}guide/topics/manifest/uses-sdk-elementl.html#min">{@code
+version declared by your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
 minSdkVersion}</a>, unless you add the appropriate version check at runtime.</p>
 </div>
 </div>
@@ -843,8 +859,8 @@
 android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} callback method.</p>
 
 <p>For a sample using the share action provider, see
-<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.html"
->ActionBarActionProviderActivity</a>.
+<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html"
+>ActionBarShareActionProviderActivity</a>.
 
 
 
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index 16f14cb..82cbfd1 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -37,6 +37,11 @@
       <li><a href="{@docRoot}resources/tutorials/views/hello-timepicker.html">Hello
 TimePicker</a></li>
     </ol>
+    
+    <h2>See also</h2>
+    <ol>
+      <li><a href="{@docRoot}design/building-blocks/dialogs.html">Android Design: Dialogs</a></li>
+    </ol>
   </div>
 </div>
 
@@ -70,6 +75,13 @@
 base {@link android.app.Dialog} object or any of the subclasses listed above and define a new layout.
 See the section on <a href="#CustomDialog">Creating a Custom Dialog</a> below.</p>
 
+<div class="design-announce">
+<p><strong>Dialog Design</strong></p>
+  <p>For design guidelines, read Android Design's <a
+href="{@docRoot}design/building-blocks/dialogs.html">Dialogs</a> guide.</p>
+</div>
+
+
 
 <h2 id="ShowingADialog">Showing a Dialog</h2>
 
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index 7bc1cde..71aa2fe 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -33,6 +33,12 @@
       <li>{@link android.app.Notification}</li>
       <li>{@link android.app.NotificationManager}</li>
     </ol>
+    
+    <h2>See also</h2>
+    <ol>
+      <li><a href="{@docRoot}design/patterns/notifications.html">Android
+Design: Notifications</a></li>
+    </ol>
   </div>
 </div>
 
@@ -61,6 +67,14 @@
 <p class="img-caption"><strong>Figure 2.</strong> The notifications window.</p>
 
 
+<div class="design-announce">
+<p><strong>Notification Design</strong></p>
+  <p>For design guidelines, read Android Design's <a
+href="{@docRoot}design/patterns/notifications.html">Notifications</a> guide.</p>
+</div>
+
+
+
 <h2 id="Basics">The Basics</h2>
 
 <p>An {@link android.app.Activity} or {@link android.app.Service} can initiate a status bar
diff --git a/docs/html/guide/topics/usb/accessory.jd b/docs/html/guide/topics/usb/accessory.jd
index b0f4881..8b74bc0 100644
--- a/docs/html/guide/topics/usb/accessory.jd
+++ b/docs/html/guide/topics/usb/accessory.jd
@@ -169,8 +169,9 @@
     include a <code>&lt;uses-feature&gt;</code> element that declares that your application uses
     the <code>android.hardware.usb.accessory</code> feature.</li>
 
-    <li>If you are using the <a href="addon">add-on library</a>, add the
-    <code>&lt;uses-library&gt;</code> element specifying
+    <li>If you are using the 
+    <a href="http://code.google.com/android/add-ons/google-apis/index.html">add-on library</a>,
+    add the <code>&lt;uses-library&gt;</code> element specifying
     <code>com.android.future.usb.accessory</code> for the library.</li>
 
     <li>Set the minimum SDK of the application to API Level 10 if you are using the add-on library
diff --git a/docs/html/guide/topics/usb/adk.jd b/docs/html/guide/topics/usb/adk.jd
index 6c7ab0d..99c5f92 100644
--- a/docs/html/guide/topics/usb/adk.jd
+++ b/docs/html/guide/topics/usb/adk.jd
@@ -699,7 +699,7 @@
 </pre>If this method returns false, the board waits until a new device is connected. If it is
 successful, the device displays itself on the USB bus as being in accessory mode when the ADK board
 re-enumerates the bus. When the device is in accessory mode, the accessory then <a href=
-"establish-adk">establishes communication with the device</a>.
+"#establish-adk">establishes communication with the device</a>.
 
   <h3 id="establish-adk">Establish communication with the device</h3>
 
diff --git a/docs/html/guide/topics/wireless/bluetooth.jd b/docs/html/guide/topics/wireless/bluetooth.jd
index 0af1d2c..e4c6e1b 100644
--- a/docs/html/guide/topics/wireless/bluetooth.jd
+++ b/docs/html/guide/topics/wireless/bluetooth.jd
@@ -902,8 +902,9 @@
 <p>Here are the basic steps for working with a profile:</p> 
 <ol> 
 
-  <li>Get the default adapter, as described in <a href="{@docRoot}guide/topics/wireless/bluetooth.
-html#SettingUp">Setting Up Bluetooth</a>.</li> 
+  <li>Get the default adapter, as described in
+    <a href="{@docRoot}guide/topics/wireless/bluetooth.html#SettingUp">Setting Up
+      Bluetooth</a>.</li> 
 
   <li>Use {@link
 android.bluetooth.BluetoothAdapter#getProfileProxy(android.content.Context,
diff --git a/docs/html/images/activity_fragment_lifecycle.png b/docs/html/images/activity_fragment_lifecycle.png
index 156aa40..bab9579 100644
--- a/docs/html/images/activity_fragment_lifecycle.png
+++ b/docs/html/images/activity_fragment_lifecycle.png
Binary files differ
diff --git a/docs/html/images/activity_lifecycle.graffle b/docs/html/images/activity_lifecycle.graffle
new file mode 100644
index 0000000..7475c67
--- /dev/null
+++ b/docs/html/images/activity_lifecycle.graffle
@@ -0,0 +1,9886 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGrafflePro</string>
+		<string>138.9.0.117994</string>
+	</array>
+	<key>CreationDate</key>
+	<string>2007-11-06 13:31:34 -0800</string>
+	<key>Creator</key>
+	<string>mcleron</string>
+	<key>GraphDocumentVersion</key>
+	<integer>6</integer>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>ImageCounter</key>
+	<integer>1</integer>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2011-12-29 11:59:46 -0800</string>
+	<key>Modifier</key>
+	<string>Scott Main</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>12</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>12</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>12</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>12</string>
+		</array>
+	</dict>
+	<key>QuickLookPreview</key>
+	<data>
+	JVBERi0xLjMKJcTl8uXrp/Og0MTGCjUgMCBvYmoKPDwgL0xlbmd0aCA2IDAgUiAvRmls
+	dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9XMuSXLeR3eMrsGwuWLzAfS9leTwx
+	XlkmHbMYeyGXKVOeboruJu3Qz/pbfPJx8qKqblU3FTEjhoJIFB6JfCEzkZd/z9/lv+cO
+	f8ZlyfO05Mf3+b/zx/zm26eSj0+56J+nY37dHcYs/zcDf8hvfvf+8fj+0+cv39+nxx+x
+	VKmrLjdh4rocpq4ueRrGQ126NR8f8pv/eij51z/ptntjhzIfpqWvycbWW2PHeigY2t9Y
+	t8dqXZ2XLOsOSz1bVw5faznMee7KYVn6OT/kvhsO/dZxn/syHLq5G7a+vtY8rd0BJ5uT
+	AvN0mFeQ8JgVnOphHes2cxqxSRmKLx7g0bdnR7rPtZTDWtcpsy9XbD35itreNlPQEdlm
+	8jDp7GxHZW3terBRVq+CUSlrRrtMa8P9ja3Z2KpMfV1ynfo8+f7Ko7cfSn76AH5eEaSS
+	fwsR+psJ1LdvIUJ93y/jgMYwVzAHjbUfS01vvxX54UadSiOkwM4wTYdSpr4P/kRHwx/2
+	KUvm+dCPQw+Sg1krDtuVMjt/SjceumHZ+IO1IaKTs4eQcycRbpjDLmEAV5N2s5GAgQS5
+	mojj+bmO+S1ICLWronZdhso11GjJLuL+q3fQNCdVza8hwtPcL31+3ad3ULLflEMHUr77
+	If9PvvvmlShvzXdHNj7/+ApUR88/2MOOzz+zJ79Kf8rvfpv/453pKvmygwlW7zow8t3x
+	FKkJrJ6XFRJ2htTd/fdfPh4/vP/Lq/zub7YD7Y0Iw1JUPNCoE6yJ9HTzKBSp3ZymHqiD
+	VVBUSC4hSEGFPo6YwC5VxLoc1gE2yYBZZ7qOdlVVEiqnP8IAdOMs4uLrjOvqOisaQkCR
+	2ECIBGSpFznjkKRKyeUMsK0gfSfgdcAHVkVYjIKYAJ4lduRJQZY49TF/EDIF/JB/AAnn
+	ruvn2RrjPCTtqXXI15QOKxQYT9gsJzShhtDepdpW+pXkq7kMWB8zjdBlEvM/ZaNzgQI4
+	R5zOZVpM98qa2DYqE2qIzC4hSCxlgO1ilPM9lRXcf2eU42n0jSMEfXlmETu2SV/CD8/r
+	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
+	MT7kwX+9RHGWPritBzC8+NIFpdw7rjwKU7uyAr89PbiVPQghiazl9s4dYh7hOnUkBOla
+	XqHINXEVW7hETCtclhFzj69OK6SvfMFuwxP6wsIwsVuJL/V4pdMUn3zWMc3I3CjjNpbF
+	v1qwU3MRqT28RBTMFe/rLAbc4xsQsCf763xLdy/kmxs50nSHb0nefeOfnzhHeUfUGuad
+	VgnJR6jc6KuZd1p+YIY37O0mklz/xDR992/IoA7aCmVuZHN0cmVhbQplbmRvYmoKNiAw
+	IG9iago1MzA3CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgNCAw
+	IFIgL1Jlc291cmNlcyA3IDAgUiAvQ29udGVudHMgNSAwIFIgL01lZGlhQm94IFswIDAg
+	NTg4IDE1MzZdCj4+CmVuZG9iago3IDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4
+	dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdIC9Db2xvclNwYWNlIDw8IC9DczIgMTQg
+	MCBSCi9DczEgOCAwIFIgPj4gL0V4dEdTdGF0ZSA8PCAvR3M0IDIwIDAgUiAvR3MzIDIx
+	IDAgUiAvR3MyIDIyIDAgUiAvR3MxIDIzIDAgUgo+PiAvRm9udCA8PCAvRjEuMCAxNSAw
+	IFIgL0YyLjAgMTYgMCBSID4+IC9YT2JqZWN0IDw8IC9JbTEgOSAwIFIgL0ltMiAxMSAw
+	IFIKPj4gL1NoYWRpbmcgPDwgL1NoMSAxMyAwIFIgL1NoMyAxOCAwIFIgL1NoNCAxOSAw
+	IFIgL1NoMiAxNyAwIFIgPj4gPj4KZW5kb2JqCjEzIDAgb2JqCjw8IC9Db2xvclNwYWNl
+	IDI0IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTkuNSAtMjUuNTg0ODUgNTku
+	NDk5OTggMjUuNTg0ODcKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZh
+	bHNlIF0gL0Z1bmN0aW9uIDI1IDAgUiA+PgplbmRvYmoKMTggMCBvYmoKPDwgL0NvbG9y
+	U3BhY2UgMjQgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA1OS41IC0yNS41ODQ4
+	NSA1OS40OTk5OCAyNS41ODQ4NwpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFs
+	c2UgZmFsc2UgXSAvRnVuY3Rpb24gMjYgMCBSID4+CmVuZG9iagoxOSAwIG9iago8PCAv
+	Q29sb3JTcGFjZSAyNCAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDU5LjUgLTI1
+	LjU4NDg1IDU5LjQ5OTk4IDI1LjU4NDg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQg
+	WyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAyNyAwIFIgPj4KZW5kb2JqCjE3IDAgb2Jq
+	Cjw8IC9Db2xvclNwYWNlIDI0IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTku
+	NSAtMjUuNTg0ODUgNTkuNDk5OTggMjUuNTg0ODcKXSAvRG9tYWluIFsgMCAxIF0gL0V4
+	dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDI4IDAgUiA+PgplbmRvYmoKOSAw
+	IG9iago8PCAvTGVuZ3RoIDEwIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1h
+	Z2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JT
+	cGFjZSAyOSAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgMzAgMCBSIC9CaXRz
+	UGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dCB
+	AAAAAMOg+VMf5IVQYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQPvAwNw6wABCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKNDM0
+	CmVuZG9iagoxMSAwIG9iago8PCAvTGVuZ3RoIDEyIDAgUiAvVHlwZSAvWE9iamVjdCAv
+	U3VidHlwZSAvSW1hZ2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAvSW50ZXJwb2xhdGUK
+	dHJ1ZSAvQ29sb3JTcGFjZSAyOSAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sg
+	MzIgMCBSIC9CaXRzUGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K
+	c3RyZWFtCngB7dCBAAAAAMOg+VMf5IVQYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQPvAwNw6wABCmVuZHN0cmVhbQplbmRvYmoK
+	MTIgMCBvYmoKNDM0CmVuZG9iagozMiAwIG9iago8PCAvTGVuZ3RoIDMzIDAgUiAvVHlw
+	ZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAv
+	Q29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNv
+	bXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae1dZ1viQBA2
+	IE2aAQGR3gUMiAgiVXrvoOf//yM3swEUCEXvPpiV/XCgcnkyL++0zezM2dlpnRA4IXBC
+	4ITACYHjEGAYiUQiFcuSSBjmOLmO+xRILz2XyRVKpUocS6lQyGXnUsl/QoGRnMsUKrVG
+	p79kWYMYFste6rSaC6X8v4DASM8VKo2evTJf39jsDqcIlsNht1ktJuOlVg0g/CMRGKlM
+	caEzmG4cHn8oEuVisfiPX7EYdxcNB30u+/XVpUb1TxgA/0F+47XTd8slUplsvlAUxSrk
+	c8/pZDwa9NjMrFYlk37XHgABVDqj1RW8e3jKlyq1RrPVFsVqNZv1armYTd1HfA4zq1F8
+	TxWQAGrW4gpyj7lSrdnp9QfD0WgshjUaDQf9brtRKWQeoj67SX8h/wYNGAkQ4Mruv3vM
+	lRud/nA8nc3m8/mrGBbc52w6GQ96rVopkwh7rAa14ssQAAAXeovrNvH80ugOxlMQ/e3t
+	D6z3H7/wLv+8vb3OZ5NRv10rpLmA/UqrPJccF/wsPsVI5WrW6r1LFWqdwWQmGulXX88C
+	hOm436pkE7dOs+5rECAABps/lik3++PZnP/2xfD9rxB4f19iMOzWC48Rt0Wv+gILGAkC
+	ELzPVjtD4D+y/9OlRfIWbpoow2zcb5bSd56vQAA2AAFI5GrdEa8AIhF64zZ5DF7nk0G7
+	/MR5LXrl+ZGBARhBFgDI13tjAACus3Fl8fzI02A+HQIEwALdkR6BOVdd3gQQgAmvAeJF
+	AL4rognTYQcgcJu0R0HASBW6a188VwMAxOIA97ESrcHrDFiQjjiv1LLDPhGsoNbk4Z6r
+	3TFhwL6Li+JvRBNep8NW6TFkN1wcNgVgBIyOSLrS4W2AKITcf5MLCAbNQiJg1SsPBYeM
+	VHl5E0yW2kNiBPdfWyR/JRDMJ/16NuYxaeQH9AB0wOyN5xuDKXoBkYh46DZ5CMbdylPE
+	cUgPmPMLgzOaqaIVhP936NJi+TuIAtZw1C4lA9YDLhH8gBV1YMS7AbFIePg+EYLpoJ7j
+	3Pv9ASNTX7ljuYUOUEMBBAggmE+6ldSt7XKfMZQq9DehVKVLdOAwsGL6BB8VNAtxr0mz
+	OyhACnji+eZwRpMR4L8nYgomvepTeB8JkAK36UpvIu5sYAc1gQWzUatwv4cExAosKbDj
+	MiL+NTGGSxII7xdJwBEQKwAUELGku24d9WA+bBXiHnAHgmkyiQW4XINYgV2XEfPvkQST
+	XiUdgphAMDCEcNDiT5aJIxCzoDvvHUkwGzZznHNHYAgZgS3yXId4mJ5gcB0NVINx5yXp
+	N2uE1IA5B1d4X8RwkEYrgFgACV6n/VomYtMLqQEqQTDFu8J16Cj6CUgADjHuMgrtE4AS
+	2KPZxgCjIYpkXhcFbWG3/CioBuAJjO54sT3GpHD9v1H0E9rCQf05fCOgBoxMa/Y/QkoA
+	dpBqBFANYk6DSroZFEkgIg6DJ6BaCYgtnHReHrym7aBIqmIdHCRFVCsBuoPXaa+aDl5r
+	5RthIZiBK0+i1BlTrQRkm2A2aGQF/CEj05j9xBdSbAXApGNQJGwIJHLIijK1Pt1mgEDw
+	CmFhArKj83VTKIGQOEpxVrTy6GAIIDsSiAikKoMzVmiN5vR6Qh4EUAMIjJ9C17oNU4jx
+	EG8IV2jR+YbERGAKN2MiSItMPsyMX2nnwDtukzTzd3ZWuRYToSsIpKq9KbV54YrRf/7M
+	x+3iVlTIYGL4VOv/CgTAGZTu3ZAefnYG6Axv+Zh4BRalb9AZdMsP3g13iFlBhE+NKRV8
+	JRZBoPLogwcnn+NiiQLDAcgK6I4IeRjepr1KanOLAAIi+x3mRb8EgWo6YNGuc0DJ2jkS
+	EFHvDd/fSUgUtKxnhyQ3/lUIhAQQiBUxKP4NHJiRsHibAzHcKV+ZTIrfvAECmdDGHglq
+	Ac8BiiVfioYIQGq0zQHeEi4/RvGroCWUrHwBxZIvRUME0pu+4CMeWH6M4leIiATiAYV+
+	ERNSLPlSNOGYcJUXLD9G7SufFyR9G08MPnJDaiVfCoYIdMoPm1uln/YHaA+JAAGh/QH+
+	cQHZI6IfgflIaI8I9gm9/D4h9Qis9gnXa4k+9oopR2DXXvEZPC9wkOcFtG+Vrp4XrAfF
+	Z2f8JhGpIFkaTTpf0RUIPjMizw1/w2Yx7woEnhsSZ8CXkND53S+kAiXY8ez47NfXD4Ap
+	/OU1JGAKoY6I+gICUAIsH8A6oq2Dh7whIM9OKd4rRDMAz02hsni7lmxZT4hFtfQGRYDA
+	rF/PCNYTnmFNaSRLeTndvprSM6wrDuApKzrPV/DecOELheuKsZ7OHcenJtQGxsva8rBw
+	bTmqAZ4v6P/a8wVnxBskXzpYW01lXMifMWngGRPVli/EagroPWFw/oJzRqmgVbfjADqe
+	NYMzFtTaQnSFQzh1CkePBSmAJICSutjiyCmFekCOmlXTt1BIt1ZG9qmcaHXsmNozp3Dc
+	EM6cblfWL0Hgj54jCRACuliAZhD2Rqppcu54KfHWK0+CMjRhoRAB7EjTzMc9QIH1PdLP
+	MAAJjC4OQmPSg4MqFmBONO6WU6Gb/c1YsBdRAHtQzEgrInoUAXVgCr1YONeuQ8cLJoA7
+	MDgiT3T2IRm2ig+Ba+hD8pn2W+8lcg30oln24aCEA2AFiQ5U0uHDPZmgH5Ee+hEVWxT5
+	Ax6ASb+W5Y7oR3QGPakMjnC63MHGfFS4RAIANKJpFBJ+1IHPtbRbOgC/gL5kGpP7LgN9
+	yeiAYAEAGIFkyMYKp0TrQGBvOos3lq31+NZsYucB2gBozNZ+SYUdxn2hwAcMkCPqrf57
+	aM8n9gaNaMhBfgJAOR11QVOygzpAcMAeldCiEZp0LiAQLQ2IBrwtelS6zcc1aEQM0Bra
+	AIJqdwTBIdhDcUaHKD9oAPQpbb1gq1Zo2HvICi41gW/VGog/V9qDRadO8UUGvPyQDIx7
+	jWIq+iUA0CHI1OyNj3t6afagX7X4aEDEJ42rJ8NOLZ8Mu77cshltwbUn+og9q6Fns9h0
+	gfAfFGA66jXLz4mQw/TFntWEBSq92Rm6fy7VAYPpEoSfbxIW7Cd9y4e9drWQ4vw2I3bw
+	Xyr5ka/QvF+pNdp80WT2pd7uDccTQAHXT29eT25yBr3rR4Nus1p8ur91XbPqI93gOjg4
+	v+DS4gxwyWyp2mh3YX4BDDD48RMM4BZxfEGv06qXC0+JiNd2pfvuGAucYaE1XDsD0UQ6
+	VyxX6zDEovXjx1jALTabjVr1pfD8GA977eZL9TdnWAAhQBPkMMfE4vCG7u4f08+5fKHw
+	80eZFGCMSTaTeohFAm6bidUovz/HhMdAcaFlTVa72xcMR+44DsbZ/PDFwSibSCjgddos
+	Rj3MsvnXwU7IA5VaxxpNFisONBLBstttN1bzlUGvvVDI/lV+tI0w0ksmV15otGSoFQvr
+	B8+1wtuDkVZ6nVZ9ofg/M60QAwQB5pqJZbCZcjnW7B/HWRHRP/5hRDTcDqbw/efZdh84
+	nN6dEDghcEKARgT+AgHb0MwKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iagoyNjI4CmVu
+	ZG9iagozMCAwIG9iago8PCAvTGVuZ3RoIDMxIDAgUiAvVHlwZSAvWE9iamVjdCAvU3Vi
+	dHlwZSAvSW1hZ2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAvQ29sb3JTcGFjZQovRGV2
+	aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0
+	ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae1dZ1viQBA2IE2aAQGRDgICBkQ6iEjv
+	HfT8/3/kZjaAAqHo3Qezsh8OVC5P5uWdtpmdOTs7rRMCJwROCJwQOCFwHAIMI5FIpGJZ
+	EgnDHCfXcZ8C6aXnMrlCqVSJYykVCrnsXCr5TygwknOZQqXW6PSXLGsQw2LZS51Wc6GU
+	/xcQGOm5QqXRs1fm6xub3eEUwXI47DarxWS81KoBhH8kAiOVKS50BtONw3MbDEe4aDT2
+	41c0yt1HQgGfy359dalR/RMGwH+Q33jt9N1x8VQ2/1R8FsUqPhVy6UQsEvDYzKxWJZN+
+	1x4AAVQ6o9UVuH/MPJUqtUaz1RbFajWb9Wr5OZ96CPscZlaj+J4qIAHUrMUV4JKFUq3Z
+	6fUHw9FoLIY1Gg0H/W67USlmHyM+u0l/If8GDRgJEODKfnufLJQbnf5wPJ3N5vP5qxgW
+	3OdsOhkPeq1aKRsPeawGteLLEAAAF3qL6y6ee2l0B+MpiP729gfW+49feJd/3t5e57PJ
+	qN+uFdOc336lVZ5Ljgt+Fp9ipHI1a/Xep4q1zmAyE430q69nAcJ03G9V8vE7p1n3NQgQ
+	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
+	QQOgT2nrBVu1QsPeQ1ZwqQl8q1Z/LFdpDxadOsUXGfDyQzIw7jVKqciXAECHIFOzNz4u
+	89LsQb9q8dGAiE8aV0+GndpTIuT6cstmtAXXnkgSe1ZDz2ax6QLhPyjAdNRrlnPxoMP0
+	xZ7VhAUqvdkZfMiV6oDBdAnCzzcJC/aTvuXDXrtaTHG3NiN28F8q+ZGv0LxfqTXafJFE
+	/qXe7g3HE0AB109vXk9ucga960eDbrP6nHm4c12z6iPd4Do4OL/g0uL0c4l8qdpod2F+
+	AQww+PETDOAWcXxBr9Oql4uZeNhru9J9d4wFzrDQGq6d/kg8XXguV+swxKL148dYwC02
+	m41a9aWYS8ZCXrv5Uv3NGRZACNAEOcwxsTi8wfuHZDpXeCoWf/4okyKMMclnU4/RsN9t
+	M7Ea5ffnmPAYKC60rMlqd/sCofA9x8E4mx++OBhlEw76vU6bxaiHWTb/OtgJeaBS61ij
+	yWLFgUYiWHa77cZqvjLotRcK2b/Kj7YRRnrJ5MoLjZYMtWJh/eC5Vnh7MNJKr9OqLxT/
+	Z6YVYoAgwFwzsQw2Uy7Hmv3jOCsi+sc/jIiG28EUvv882+4Dh9O7EwInBE4I0IjAXxMa
+	0M0KZW5kc3RyZWFtCmVuZG9iagozMSAwIG9iagoyNjI4CmVuZG9iagoyMCAwIG9iago8
+	PCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjY1ID4+CmVuZG9iagoyMSAwIG9iago8PCAv
+	VHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+CmVuZG9iagoyMiAwIG9iago8PCAvVHlwZSAv
+	RXh0R1N0YXRlIC9jYSAwLjcgPj4KZW5kb2JqCjIzIDAgb2JqCjw8IC9UeXBlIC9FeHRH
+	U3RhdGUgL0NBIDAuNyA+PgplbmRvYmoKMzQgMCBvYmoKPDwgL0xlbmd0aCAzNSAwIFIg
+	L04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K
+	c3RyZWFtCngB1XlnWBTLs3fPbF52l5zTknPOOYMkiRKVnDNLDiIgIEFBQBEBRUFFRAVR
+	oiRRUMSDiIIKBoJIEBUDgoLyDnrO+d/3ufd+e7+8/Tzb+5uq6uqaqe6eqhoAOFe8o6LC
+	YAYAwiNiafZmhlQXVzcqbgoQAQ+gB7xA0ds3JsrA1tYK/K/t2wSAdpiPZXZ0/a9i/zOD
+	0c8/xhcAyBZh+/jF+IYj+AYAsKFvFC0WANQGQh9NiI1CMPoeglloiIEIfrGDA//g1R3s
+	8xtj0L9lHO2NAMBwAIAneXvTAgEgCyN0arxvIKKHbAwAlinCLzgCAGYXBOv6Bnn7AcBZ
+	jshIh4dH7uA7CBb3+S96Av8L9vb2+Vent3fgv/jPvSAjkYmNg2OiwryTfl/8v+zCw+KQ
+	5/W7MSE9KSJs945v2JDfop+3sSXyz4P8fkWF/fYZIgNx+UfscUBoO1g6wme3zd9YN4Bm
+	ao9gZCxkGxVruIORZwYFRMXaOv5NT0sOMtqNYBJCP+YfY/KPnjMh3hY7PqMg9GZanP0e
+	BAsjuC8m3sEEwciKgt4kBzk6/y3z1c/f+G86DAcEm5r/kYGZgmPNd+ZiQXwuGBppuWMD
+	MhesCixBGPAHcYCG9BFABlgBI2D8dy8DAoA3wolHeDEgFLxFcDgyIhIZE4lg6t9yRv+N
+	Yvp7XCAy7v/WSAW+iGzcv3P+mY2KzPmPzmDgh+B/6N7IHDu8HetiPIMz/zPnPxI7+n5b
+	I98gvyS/9Y9NaFG0IloFbYjWQeuiNQAVzYbmAjJoZbQ62gCth9ZCeBrAFLxBNAf+Y+OO
+	/vDmgPjyyCRNpyCEu3PvPv9wgdNv6eB/r/+bBSB4ZKVt5R8LAIj1T0T2AQBGkVFJtODA
+	oFiqAbJz/aWp5hG+stJURXkFhR32/zdt58z6Y+wX+99nEcT28D+0SORmNHbOmIP/oXl9
+	AKAtBNmmTP+hibYBQK8IwNAJ3zha/B996J0/DHIa0iMrlBPwASEgjjxnRaAKtIA+MAEW
+	wAY4AlfggayfIGQN0kACSAUZIAcUgKPgOKgA1aAWXARXQDNoA13gFhgEw2AUjIMpMA3m
+	wTuwCr6BTQiCcBAZYoY4IX5IBJKCFCF1SBcygawge8gV8oICoQgoDkqFDkIFUAlUAZ2F
+	6qFrUAd0CxqCHkHPoRloCfoM/YBRMAlmgXlhUVgOVocNYEvYEd4HB8LRcDKcBRfC5XAN
+	fBluhW/Bw/A4PA2/g9dQAEWHYkMJoGRQ6igjlA3KDRWAoqHSUPmoMlQN6iqqE3UX9Rg1
+	jVpBfUdj0cxoKloGWae70HvQvuhodBr6MLoCfRHdir6DfoyeQa+if2HIGB6MFEYTY45x
+	wQRiEjA5mDLMBUwLZgAzjpnHfMNisWxYMawadhfWFRuCTcEexp7CNmL7sI+wc9g1HA7H
+	iZPC6eBscN64WFwO7iTuMq4XN4abx23g6fD8eEW8Kd4NH4HPxJfhL+F78GP4BfwmgYEg
+	QtAk2BD8CEmEIsI5QifhIWGesElkJIoRdYiOxBBiBrGceJU4QHxB/EJHRydIp0FnRxdM
+	l05XTtdEd49uhu47iYkkSTIi7SXFkQpJdaQ+0nPSFzKZLErWJ7uRY8mF5HrybfIr8gaF
+	mSJLMaf4UQ5QKimtlDHKB3oCvQi9Ab0HfTJ9Gf11+of0KwwEBlEGIwZvhjSGSoYOhqcM
+	a4zMjAqMNozhjIcZLzEOMS4y4ZhEmUyY/JiymGqZbjPNMaOYhZiNmH2ZDzKfYx5gnmfB
+	soixmLOEsBSwXGEZYVllZWJVZnViTWStZO1mnWZDsYmymbOFsRWxNbNNsP1g52U3YPdn
+	z2O/yj7Gvs7BzaHP4c+Rz9HIMc7xg5PKacIZylnM2cb5kgvNJcllx5XAdZprgGuFm4Vb
+	i9uXO5+7mXuSB+aR5LHnSeGp5XnAs8bLx2vGG8V7kvc27wofG58+XwjfMb4eviV+Zn5d
+	/mD+Y/y9/MtUVqoBNYxaTr1DXRXgEdglECdwVmBEYFNQTHCPYKZgo+BLIaKQulCA0DGh
+	fqFVYX5ha+FU4QbhSRGCiLpIkMgJkbsi66Jios6ih0TbRBfFOMTMxZLFGsReiJPF9cSj
+	xWvEn0hgJdQlQiVOSYxKwpIqkkGSlZIPpWApValgqVNSj6Qx0hrSEdI10k9lSDIGMvEy
+	DTIzsmyyVrKZsm2yH+SE5dzkiuXuyv2SV5EPkz8nP6XApGChkKnQqfBZUVLRV7FS8YkS
+	WclU6YBSu9InZSllf+XTys9UmFWsVQ6p9Kv8VFVTpaleVV1SE1bzUqtSe6rOom6rflj9
+	ngZGw1DjgEaXxndNVc1YzWbNj1oyWqFal7QWtcW0/bXPac/pCOp465zVmdal6nrpntGd
+	1hPQ89ar0ZvVF9L307+gv2AgYRBicNngg6G8Ic2wxXDdSNNov1GfMcrYzDjfeMSEyWSP
+	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
+	lru+2FLXFtwh0/m5q7Mns8+qn/323EDT3dQhi2HOB6Mjex7OPUp+zPdkZKLgmcOk6Avo
+	5ezrwZmGuaJ52oLDEvdy9YrY+2sfdVdHPnt++biWvk6/cfIH32b1T65fRb/9zw4MQBRS
+	OXoIthHfB0AnoQHoCywI2yM1nDZ4BanVuCD7fQiNQmqIyeg29BpGBROP6cZisDbYSuwy
+	Tgt3FLeIN8afI+AJUYQXRCtiH50a4mlD0gOyK3mZkkbPSt/EYMPwibGMSZdpifkUiwMr
+	mfU+Wx67FQcTxyTneS4atwEPM8873kG+c/w51FABR0EDIUVhMRF+UW4xLnGqhJSkhpSl
+	tLdMqmyFXLf8G0WKkrYyTeWq6kd1FY0MzTFtcZ0s3bf6VgZtRlLG50wFzGrNJSxarIyt
+	n9lE2ZHsmxzdkf3a7Rrvrrx3w6PP64iPh59qACnweXBFqHnYUkRS5FZ0LG0+1jbuegJj
+	Ii3pSYpm6tk0ugOJ6QuZLgcfZBvmdOYq57UW6BweKnQtelecVsp4rKZM7kTHSd2K3irt
+	U63VmDNWZ4/XvD4neT7hwsBF1vqAS52XKVf8rnY1sV6Lah6+IY5kPu/b7TrabvJ15XR/
+	6HXuu9Uvdfv4ne3BkLtPhvTvNzxg+ytm5P4o96OgscuPl8eFJpyfZj67+Pz+5PzU1kuG
+	V/yvpaZVZjRndef03+jP677VXFBbVFiSXBZ8R3m3tNLxPuGDyoeVj+dXXT8RP3V9DvjC
+	8KX96941sFbzzfDb7PqBDZ6Nju97vq/+OLwpttm/5bG18bP0l9yvoW2/Hf/HBCghdUik
+	QSRDpPz4anv7iyiSVJQA8LN4e3uzZnv7Zy2SbCDfQPrC/nyv2BHGIjX3qms76H9q/we0
+	8H6NCmVuZHN0cmVhbQplbmRvYmoKMzUgMCBvYmoKNTk2MwplbmRvYmoKMjkgMCBvYmoK
+	WyAvSUNDQmFzZWQgMzQgMCBSIF0KZW5kb2JqCjM2IDAgb2JqCjw8IC9MZW5ndGggMzcg
+	MCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+	ID4+CnN0cmVhbQp4AYVUz2sTQRT+Nm6p0CIIWmsOsniQIklZq2hF1Db9EWJrDNsftkWQ
+	ZDNJ1m426+4mtaWI5OLRKt5F7aEH/4AeevBkL0qFWkUo3qsoYqEXLfHNbky2perAzn7z
+	3jfvfW923wANctI09YAE5A3HUqIRaWx8Qmr8iACOoglBNCVV2+xOJAZBg3P5e+fYeg+B
+	W1bDe/t3snetmtK2mgeE/UDgR5rZKrDvF3EKWRICiDzfoSnHdAjf49jy7I85Tnl4wbUP
+	Kz3EWSJ8QDUtzn9NuFPNJdNAg0g4lPVxUj6c14uU1x0HaW5mxsgQvU+QprvM7qtioZxO
+	9g6QvZ30fk6z3j7CIcILGa0/RriNnvWM1T/iYeGk5sSGPRwYNfT4YBW3Gqn4NcIUXxBN
+	J6JUcdkuDfGYrv1W8kqCcJA4ymRhgHNaSE/XTG74uocFfSbXE6/id1ZR4XmPE2fe1N3v
+	RdoCrzAOHQwaDJoNSFAQRQRhmLBQQIY8GjE0snI/I6sGG5N7MnUkart0YkSxQXs23D23
+	UaTdPP4oInGUQ7UIkvxB/iqvyU/lefnLXLDYVveUrZuauvLgO8XlmbkaHtfTyONzTV58
+	ldR2k1dHlqx5erya7Bo/7FeXMeaCNY/Ec7D78S1flcyXKYwUxeNV8+pLhHVaMTffn2x/
+	Oz3iLs8utdZzrYmLN1abl2f9akj77qq8k+ZV+U9e9fH8Z83EY+IpMSZ2iuchiZfFLvGS
+	2EurC+JgbccInZWGKdJtkfok1WBgmrz1L10/W3i9Rn8M9VGUGczSVIn3f8IqZDSduQ5v
+	+o/bx/wX5PeK558oAi9s4MiZum1Tce8QoWWlbnOuAhe/0X3wtm5ro344/ARYPKsWrVI1
+	nyC8ARx2h3oe6CmY05aWzTlShyyfk7rpymJSzFDbQ1JS1yXXZUsWs5lVYul22JnTHW4c
+	oTlC98SnSmWT+q/xEbD9sFL5+axS2X5OGtaBl/pvwLz9RQplbmRzdHJlYW0KZW5kb2Jq
+	CjM3IDAgb2JqCjczNwplbmRvYmoKMjQgMCBvYmoKWyAvSUNDQmFzZWQgMzYgMCBSIF0K
+	ZW5kb2JqCjM4IDAgb2JqCjw8IC9MZW5ndGggMzkgMCBSIC9OIDMgL0FsdGVybmF0ZSAv
+	RGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYVUz2sTQRT+
+	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
+	tvk5cjfeuHlF77KiOy8QZLF+RSOOjHw+R26R+3f3svSeasjPrTYitN5AOQCfDz1lJC7B
+	j32RIhPxkDZCJAE5wMVDqkDzkKI5An7D/dKwQJeJsZKF+OBlXTp4AX1w7k+9ebpft76Z
+	4SqE2stdR2cnUu4gRS0sXTdGXtZuyAwkzQMIxWTsICL/e20pNGU0AX3rBYzVwVFrrlu/
+	/andJmlhmd63jjbHaoSuBdTBm6q5LO/3/wOSVm5vCmVuZHN0cmVhbQplbmRvYmoKNDQg
+	MCBvYmoKNjI2MgplbmRvYmoKNDIgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCA0
+	IDAgUiAvUmVzb3VyY2VzIDQ1IDAgUiAvQ29udGVudHMgNDMgMCBSIC9NZWRpYUJveApb
+	MCAwIDU4OCAxNTM2XSA+PgplbmRvYmoKNDUgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERG
+	IC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2UgPDwgL0Nz
+	MiAxNCAwIFIKL0NzMSA4IDAgUiA+PiAvRXh0R1N0YXRlIDw8IC9HczUgNDkgMCBSIC9H
+	czQgMjAgMCBSIC9HczMgMjEgMCBSIC9HczIgMjIgMCBSCi9HczEgMjMgMCBSID4+IC9G
+	b250IDw8IC9GMS4wIDE1IDAgUiAvRjIuMCAxNiAwIFIgPj4gL1hPYmplY3QgPDwgL0lt
+	MSA5IDAgUgovSW0yIDExIDAgUiA+PiAvU2hhZGluZyA8PCAvU2g2IDQ3IDAgUiAvU2g3
+	IDQ4IDAgUiAvU2g1IDQ2IDAgUiA+PiA+PgplbmRvYmoKNDcgMCBvYmoKPDwgL0NvbG9y
+	U3BhY2UgMjQgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA1OS41IC0yNS41ODQ4
+	NSA1OS40OTk5OCAyNS41ODQ4NwpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFs
+	c2UgZmFsc2UgXSAvRnVuY3Rpb24gNTAgMCBSID4+CmVuZG9iago0OCAwIG9iago8PCAv
+	Q29sb3JTcGFjZSAyNCAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDU5LjUgLTI1
+	LjU4NDg1IDU5LjQ5OTk4IDI1LjU4NDg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQg
+	WyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiA1MSAwIFIgPj4KZW5kb2JqCjQ2IDAgb2Jq
+	Cjw8IC9Db2xvclNwYWNlIDI0IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTku
+	NSAtMjUuNTg0ODUgNTkuNDk5OTggMjUuNTg0ODcKXSAvRG9tYWluIFsgMCAxIF0gL0V4
+	dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDUyIDAgUiA+PgplbmRvYmoKNDkg
+	MCBvYmoKPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSA+PgplbmRvYmoKNTQgMCBvYmoK
+	PDwgL0xlbmd0aCA1NSAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+	rVtJkx1HEb73r+jj6OB219bL0QhMhE8YKeBgc4DxIoPGYI0w4X/Pl8uXXW/emzcPB5pQ
+	TGXWkntVVnbNT+OX40/jjJ+2beO6bOOHb8c/jz+On75+TOP945j05/F+/GSe2ij/u4Hf
+	ybAsw+YBQz79/WMdv3/EgkmX/ASTtx1TlnWd0p728f5h/M3bMWXvzuMnOU2ltnWs49uH
+	8dPP8zQPaXz73fjVePf6lRDN492Hb9n6KxsfX4EXdEXPN6/Gv4xvvxh/91YlesJAXepw
+	TjvtoF3X0hEH50b8DSkEyQ/EfPtqML6u0yxlm/JSL8k8g+6+JKU7qNBB9w9B79+U9fFW
+	Iec8pZIvCJrbtKzbagRNy0HwjyQTVB6D8sNlUefRjF2eGntPMPZayjRfEhv6mFOGqQc1
+	dZrmYOIzMnHPxscf3MI/E0PEx1+IGV8N6gRvPobSPkKKi35QKtz7Oc7aOs15btDPOWuf
+	Ox8fSDVofe89D+wJDf6oPcPdx9GHhCvH5Pfew99/czgGhCb+YcsPd4+9aLTB5YDLa5nK
+	vlzyvTyVVlqmqAi4sEL4/D8p0b/OGiFj7/zDWcTnuUwtb5cYWJ8GfND/LSUNIo+MuQ/B
+	0i/R2XOANb7A/7/bvvX6DXaHpcy1NHiINQIzvnnd71Cz7nrYHFJexrxih1uW8WGsrQb0
+	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
+	OK4VHwhiZhG2OUXOdoAnkuqAE0wVQ5xg+g8EXEuYfDrqDGMf6I61GtKLKBcLOiFvkwfC
+	kvGhtmsjE55BV7lri4D6BQpbuuLWhExGjf908osxZBOa/H2QZkekpqoD6uSDgagdNx3h
+	oKN2TL7F3xbcjyoSJIsubCtT2XCiWkAtcOW94eMIQcS3gQywhAvUXKsHWNK/G7LabBsP
+	yALBx94UYAvuF0rKImwpQVlCtwNt6W64cPblfwEzmCZMCmVuZHN0cmVhbQplbmRvYmoK
+	NTUgMCBvYmoKNDE2NgplbmRvYmoKNTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVu
+	dCA0IDAgUiAvUmVzb3VyY2VzIDU2IDAgUiAvQ29udGVudHMgNTQgMCBSIC9NZWRpYUJv
+	eApbMCAwIDU4OCAxNTM2XSA+PgplbmRvYmoKNTYgMCBvYmoKPDwgL1Byb2NTZXQgWyAv
+	UERGIC9UZXh0IF0gL0NvbG9yU3BhY2UgPDwgL0NzMiAxNCAwIFIgL0NzMSA4IDAgUiA+
+	PiAvRXh0R1N0YXRlCjw8IC9HczUgNDkgMCBSIC9HczQgMjAgMCBSIC9HczMgMjEgMCBS
+	IC9HczIgMjIgMCBSIC9HczEgMjMgMCBSID4+IC9Gb250IDw8Ci9GMi4wIDE2IDAgUiAv
+	RjEuMCAxNSAwIFIgPj4gPj4KZW5kb2JqCjQgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9N
+	ZWRpYUJveCBbMCAwIDYxMiA3OTJdIC9Db3VudCAzIC9LaWRzIFsgMyAwIFIgNDIgMCBS
+	IDUzIDAgUgpdID4+CmVuZG9iago1NyAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvT3V0
+	bGluZXMgMiAwIFIgL1BhZ2VzIDQgMCBSIC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjUy
+	IDAgb2JqCjw8IC9MZW5ndGggNTggMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQg
+	XSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAg
+	MSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6
+	ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGlwoVSQlEA
+	QMG/tru7u7HpBhUDA1uxA+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h95WY7egr
+	El+IGkdeUJwjkiOsPZQj9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH99N7j2bPHTrd
+	dxje4pa5eovlG1adrtwg9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX6LpA6Dku
+	s3PnSD9jLn/2DK2nzOidPuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5foj6DOMZxvSO
+	Zvh9wKj8kQNM7jMidngfh3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5Nn/DebRxu
+	0Wu9ZwuJm/QYd2+iOEX3z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQnafu3NYnKBK35
+	LQl0NidojqtvimMYo0lmYwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQGsnVQSwH
+	qHZaFUConyqzlX6k+6j8s8KHei/lesu8FHook1zqwbybUoElbr5+Al7liFUKZW5kc3Ry
+	ZWFtCmVuZG9iago1OCAwIG9iago0MTAKZW5kb2JqCjUxIDAgb2JqCjw8IC9MZW5ndGgg
+	NTkgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAg
+	L0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsg
+	MCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVy
+	IC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGNwgk3VHEYB+AvJhKJRCKRkpKSkhKJRCIZ
+	Y8asZgxjZuz7vu9bX+v9vZ3rmNO943/vfZ/z8N8E24zzpXCML01exNhwjC8ko3yhex5l
+	06N8LjnCZ8IRPjN5GmHDYT6VDPOp7kmYTYf4RPA4xMdDskE+NnkUZMMAHwn7+Sj50M+m
+	fXwoeODjA6+4hw9U9z1sOMj7wm7eT95zs1UX713Hnkt914XdAXEndlV3nEjdjx1JB3au
+	bjtgsw/bdrf6oP0j24st1c1epP6NTeEebPZgw3Y3Nuyud0P7S7YL66prXUj9E2vCnVjr
+	xKrtDqzaXemA9od4O1ZuXG5H6u9YFm7DchuWJFuxZHmxFdpv4i1YNF5ogfpXLEg2Y6EZ
+	85JNmLc814TrXzAn2Yg549lGqH/GrPAnzEg2YMbydAOuf8S0cD2mdafqof4BU8LvMSlZ
+	h0nzE3X4/x0mhGsxoTteC/W3GBd+g4RwDRKKlKihuP5rigtXU1w3Vk2mX1FM8iWNCVfR
+	mMloFRm+oKhkJUV1RyvJ9HMalR15RqIVNGIyUkGGTykiXE6R5OFyMl1Gw4LhMgo/ES+l
+	sGqolAwfU0i4hELJQyVktZiG7AaLKfhIvIiCqoEiMnxIAeFCCiT7C8lqAfnt+grI90A8
+	n3yq3nxKfZ+8knnkverJI5u55LE7mEvae7I5NKjqzqHUd8ktnE3ubHLZziKX3YEs0t4R
+	z6SBG52ZlPo2OYUzyJlB/ZLp1G/ZkU7aW+Jp5Ej7B4pzCpwKZW5kc3RyZWFtCmVuZG9i
+	ago1OSAwIG9iago1NzIKZW5kb2JqCjUwIDAgb2JqCjw8IC9MZW5ndGggNjAgMCBSIC9P
+	cmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJT
+	YW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1Jh
+	bmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURl
+	Y29kZSA+PgpzdHJlYW0KeAG1wolWAVEAANDvMvvqS7NFlsggknUGoZTKki1LKcIXdOrk
+	OKMx5s28d88tbeylY5WNHfjarhgtKmtVeS0euRJleIsrUfVLLCK6FItLsQC5UFj+XggF
+	rfmFAOGnkDc29ymA/RByFmY/BL1zIauXz87BZub87jufQfeNz7zx1yjO+OvD0zPecC49
+	+3fKpUFeTTmAE+7K2tSE0z7mUggmx9zPV81s8hXGEZvcvhyxMA/ZS92JIWv+gE0Ajg/Y
+	bSY+0N1n4pbH+ozGHhNDU+ox0gvKXUb6S0tdOgp3h47qvujQJrfpC/CRNm1oi44ApyKt
+	/eEWpfGZCqN5/kQh/Eidq4ceKWibZOjYYJM084EMmhp4II+/JwOQ+u/J/Q3SbyjhbwA/
+	uyNQvSXOtPpuCQjrhM9Yb50wFvfWt2u41+zTGq63ip9C7aniuze4B90K7qng7oMxd8Xs
+	MuY+0FXGrC5hLsOdJQysgjktdCjYts2hqMs2B+wnsu1v0XYC8hsKr7WjCmVuZHN0cmVh
+	bQplbmRvYmoKNjAgMCBvYmoKMzg0CmVuZG9iagoyOCAwIG9iago8PCAvTGVuZ3RoIDYx
+	IDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1bmN0aW9uVHlwZSAwIC9C
+	aXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAxIF0gL0RvbWFpbiBbIDAg
+	MSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAxMzY1Cl0gL0ZpbHRlciAv
+	RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBtcKJVgFRAADQ7zL76kuzRZbIIJJ1BqGUypIt
+	SynCF3Tq5DijMebNvHfPLW3spWOVjR342q4YLSprVXktHrkSZXiLK1H1SywiuhSLS7EA
+	uVBY/l4IBa35hQDhp5A3NvcpgP0QchZmPwS9cyGrl8/OwWbm/O47n0H3jc+88dcozvjr
+	w9Mz3nAuPft3yqVBXk05gBPuytrUhNM+5lIIJsfcz1fNbPIVxhGb3L4csTAP2UvdiSFr
+	/oBNAI4P2G0mPtDdZ+KWx/qMxh4TQ1PqMdILyl1G+ktLXToKd4eO6r7o0Ca36QvwkTZt
+	aIuOAKcirf3hFqXxmQqjef5EIfxInauHHilom2To2GCTNPOBDJoaeCCPvycDkPrvyf0N
+	0m8o4W8AP7sjUL0lzrT6bgkI64TPWG+dMBb31rdruNfs0xqut4qfQu2p4rs3uAfdCu6p
+	4O6DMXfF7DLmPtBVxqwuYS7DnSUMrII5LXQo2LbNoajLNgfsJ7Ltb9F2AvIbCq+1owpl
+	bmRzdHJlYW0KZW5kb2JqCjYxIDAgb2JqCjM4NAplbmRvYmoKMjcgMCBvYmoKPDwgL0xl
+	bmd0aCA2MiAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5
+	cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21h
+	aW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9G
+	aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AY3CCTdUcRgH4C8mEolEIpGSkpKS
+	EolEIhljxqxmDGNm7Pu+71tf6/29neuY073jf+99n/Pw3wTbjPOlcIwvTV7E2HCMLySj
+	fKF7HmXTo3wuOcJnwhE+M3kaYcNhPpUM86nuSZhNh/hE8DjEx0OyQT42eRRkwwAfCfv5
+	KPnQz6Z9fCh44OMDr7iHD1T3PWw4yPvCbt5P3nOzVRfvXceeS33Xhd0BcSd2VXecSN2P
+	HUkHdq5uO2CzD9t2t/qg/SPbiy3VzV6k/o1N4R5s9mDDdjc27K53Q/tLtgvrqmtdSP0T
+	a8KdWOvEqu0OrNpd6YD2h3g7Vm5cbkfq71gWbsNyG5YkW7FkebEV2m/iLVg0XmiB+lcs
+	SDZjoRnzkk2YtzzXhOtfMCfZiDnj2Uaof8as8CfMSDZgxvJ0A65/xLRwPaZ1p+qh/gFT
+	wu8xKVmHSfMTdfj/HSaEazGhO14L9bcYF36DhHANEoqUqKG4/muKC1dTXDdWTaZfUUzy
+	JY0JV9GYyWgVGb6gqGQlRXVHK8n0cxqVHXlGohU0YjJSQYZPKSJcTpHk4XIyXUbDguEy
+	Cj8RL6WwaqiUDB9TSLiEQslDJWS1mIbsBosp+Ei8iIKqgSIyfEgB4UIKJPsLyWoB+e36
+	Csj3QDyffKrefEp9n7ySeeS96skjm7nksTuYS9p7sjk0qOrOodR3yS2cTe5sctnOIpfd
+	gSzS3hHPpIEbnZmU+jY5hTPImUH9kunUb9mRTtpb4mnkSPsHinMKnAplbmRzdHJlYW0K
+	ZW5kb2JqCjYyIDAgb2JqCjU3MgplbmRvYmoKMjYgMCBvYmoKPDwgL0xlbmd0aCA2MyAw
+	IFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0
+	c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEg
+	XSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0Zs
+	YXRlRGVjb2RlID4+CnN0cmVhbQp4AY3CCTdUcRgH4C8mEolEIpGSkpKSEolEIhljxqxm
+	DGNm7Pu+71tf6/29neuY073jf+99n/Pw3wTbjPOlcIwvTV7E2HCMLySjfKF7HmXTo3wu
+	OcJnwhE+M3kaYcNhPpUM86nuSZhNh/hE8DjEx0OyQT42eRRkwwAfCfv5KPnQz6Z9fCh4
+	4OMDr7iHD1T3PWw4yPvCbt5P3nOzVRfvXceeS33Xhd0BcSd2VXecSN2PHUkHdq5uO2Cz
+	D9t2t/qg/SPbiy3VzV6k/o1N4R5s9mDDdjc27K53Q/tLtgvrqmtdSP0Ta8KdWOvEqu0O
+	rNpd6YD2h3g7Vm5cbkfq71gWbsNyG5YkW7FkebEV2m/iLVg0XmiB+lcsSDZjoRnzkk2Y
+	tzzXhOtfMCfZiDnj2Uaof8as8CfMSDZgxvJ0A65/xLRwPaZ1p+qh/gFTwu8xKVmHSfMT
+	dfj/HSaEazGhO14L9bcYF36DhHANEoqUqKG4/muKC1dTXDdWTaZfUUzyJY0JV9GYyWgV
+	Gb6gqGQlRXVHK8n0cxqVHXlGohU0YjJSQYZPKSJcTpHk4XIyXUbDguEyCj8RL6WwaqiU
+	DB9TSLiEQslDJWS1mIbsBosp+Ei8iIKqgSIyfEgB4UIKJPsLyWoB+e36Csj3QDyffKre
+	fEp9n7ySeeS96skjm7nksTuYS9p7sjk0qOrOodR3yS2cTe5sctnOIpfdgSzS3hHPpIEb
+	nZmU+jY5hTPImUH9kunUb9mRTtpb4mnkSPsHinMKnAplbmRzdHJlYW0KZW5kb2JqCjYz
+	IDAgb2JqCjU3MgplbmRvYmoKMjUgMCBvYmoKPDwgL0xlbmd0aCA2NCAwIFIgL09yZGVy
+	IDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBs
+	ZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2Ug
+	WyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+	ID4+CnN0cmVhbQp4AaXChVJCUQBAwb+2u7u7sekGFQMDW7ED61OOMTL48MWNnU1+kLSY
+	+OD7u+L4O8XfiAuPvWH3lZjt6CsSX4gaR15QnCOSI6w9lCP0rD74jOETQZmBJ+w+ErDt
+	f0T0A/5/fQ+ovMf303uPZs8dOt13GN7ilrl6i+UbVp2u3CD0mhWzy9dIv2I5f+kKzYtZ
+	dC5kKbxkQfL8JeYvmBfoukDoOS6zc+dIP2Muf/YMrafM6J0+5fcJ0/KnTjB/zJTAyWOc
+	HzFpceIIuYdM/Dl+iPoM4xnG9I5m+H3AqPyRA0zuMyJ2eB+HewxbH9pD4i5DxoO7qE8z
+	mGZAb3+a7zuK+3Yovk2f8N5tHG7Ra71nC4mb9Bh3b6I4RffPrhQ6O1N0bqjv2KD4Oh3C
+	29exu0a77bY1RCdp+7c1icoErfktCXQ2J2iOq2+KYxijSWZjDMtRGp02RBEaocFsfQSV
+	Yerz68LorA2hsyZEYZAaydVBLAeodloVQKifKrOVfqT7qPyzwod6L+V6y7wUeiiTXOrB
+	vJtSgSVuvn4CXuWIVQplbmRzdHJlYW0KZW5kb2JqCjY0IDAgb2JqCjQxMAplbmRvYmoK
+	MiAwIG9iago8PCAvTGFzdCA2NSAwIFIgL0ZpcnN0IDY2IDAgUiA+PgplbmRvYmoKNjYg
+	MCBvYmoKPDwgL1BhcmVudCA2NyAwIFIgL1RpdGxlIChDYW52YXMgMSkgL0NvdW50IDAg
+	L0Rlc3QgWyAzIDAgUiAvWFlaIDAgMTUzNiAwIF0KL05leHQgNjggMCBSID4+CmVuZG9i
+	ago2OCAwIG9iago8PCAvUGFyZW50IDY5IDAgUiAvUHJldiA3MCAwIFIgL0NvdW50IDAg
+	L1RpdGxlIChDYW52YXMgMykgL0Rlc3QgWyA0MiAwIFIgL1hZWgowIDE1MzYgMCBdIC9O
+	ZXh0IDcxIDAgUiA+PgplbmRvYmoKNzEgMCBvYmoKPDwgL1BhcmVudCA3MiAwIFIgL1By
+	ZXYgNzMgMCBSIC9Db3VudCAwIC9EZXN0IFsgNTMgMCBSIC9YWVogMCAxNTM2IDAgXSAv
+	VGl0bGUKKENhbnZhcyA0KSA+PgplbmRvYmoKNzMgMCBvYmoKPDwgL1BhcmVudCA2OSAw
+	IFIgPj4KZW5kb2JqCjcyIDAgb2JqCjw8ID4+CmVuZG9iago3MCAwIG9iago8PCAvUGFy
+	ZW50IDY3IDAgUiA+PgplbmRvYmoKNjkgMCBvYmoKPDwgPj4KZW5kb2JqCjY3IDAgb2Jq
+	Cjw8ID4+CmVuZG9iago2NSAwIG9iago8PCAvUGFyZW50IDcyIDAgUiAvUHJldiA3MyAw
+	IFIgL0NvdW50IDAgL0Rlc3QgWyA1MyAwIFIgL1hZWiAwIDE1MzYgMCBdIC9UaXRsZQoo
+	Q2FudmFzIDQpID4+CmVuZG9iago3NCAwIG9iago8PCAvTGVuZ3RoIDc1IDAgUiAvTGVu
+	Z3RoMSAxMTE3MiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9Wgt4U1W2
+	3vs8k5OkTdK82zRJkzR9pWkLTRso9LT0BW2gtLS0tZUWKFMQsGAtr4GpgBYKKs4MD5E7
+	vnAG8To3LQ4GvXC5DiqDMqPIXF/4GhF1sIM6VVTIyV3npFToN3c+v+/6zTlZWft19l77
+	32uvvfY+p2fl7Z1IhfoQiWpbOroXIelK34wQYV+wrKM7Fk/ggb+8oLfHHovTaQiRdy3q
+	/smyWFwWQohz/WTpmtHndWUI6Y53dXYsjOWjq8D9XZAQi+OJwF1dy3pWx+Las8CXLr11
+	wWi+TgnxwmUdq0fbR+cgbl/esawzVj69FXha96239YzGKeBN3Ss7R8vjJpDvTwhDaiJa
+	guRoKZIhAqnhhifZTzgXoiBXzAcq8TY8NC++6CukkUnVPeLJ7hMDLzj+89vL5656FBvk
+	FVBOLpUXM+AZJl1IR0iJIf9txYaxHDFXvBLDqC4zjKqApgJNBMrIHJTxz+AdSNc2wsux
+	jUIK2xvmvx3D2YD/Bek/hLN5pQrJF2wqsi3YtKkqvUSOq1EBhZENlyOXxMuGXE/Ywnjq
+	kMsJbEqMEUMFVoghXl7gskUK5tuuFoRlmE+0feP6he0y0NeuYttXrlzbq1DulYJK2+kS
+	yB+yvZQRJoCdcoUpzMfbTrrusP2uIN32VMFk25AH0oZsgyXADtv2F9xhe3SzlPJIhsQe
+	doXx3iHbQyI7bHsQ6t+1ScrYGXtwY4x1b5YauvWQxJYfChNPHLYtc6Xa5sODmFfY2lxL
+	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
+	07+hn6ZPkh/jy1hO2inKo4U1lrBj7NFCFQxBw2dTDElwMgIWnzBWDpE0zBTlYcrMdop4
+	m68/xDGrXzBJhlE8vRk7uIEFdezMBsJin1eIniq4GdiRQLpxnrBKeE1Yg/kPqdIrx6jS
+	q+egH3Gw9jmgH0oUEL/+QmFE+8JIBoSASCDO9wyMC5zigRo/A6vYtZByNJSTix2JYhvS
+	SVAC0Y8dvz6I04UTwttPPCm8IfwR5x2Exi6RmivHSMvVCxD+MjYX9UIlVQtjnQCnfG/y
+	3R6ukVvE7eT2c69x4HRghkliNSova1dNYXNV1WwbK64gq9g1KpUx3q/ql29R7FGEFYxO
+	p5SpCLtS6dEqFBzDEjaZzAPnZWJQxemVCjh5YeXIRmQl2NTxOtYASh2nUigB30OQwQHn
+	lQk/l5k79YbHY9rdO3MkeN50FfZwIo0emYERCp6PnIcFVzo1AzgwHJrR4M3UrV77/IRR
+	8MWwePrhuzYAcKzhL5iKPTGUCHGn7sGDrowaizmTErrxlL99AKdjA0s3HE3NzsYbXyUI
+	TqtZqqRWXj1Huq68IpzaiUlGJ9ou6YqKX4P8oysREknwNVLBl/DDNy3lqAK+H6mCT7Oq
+	4TubmWgWeBGzUR2qhy9UGtFc+K6kGc6AxW8UMfgkWKqSEc+KS+rKp8+pyqzqXNrb2bN4
+	QYe39NalC8VS164eCPQB7QB6CCgEdBzoFaD3gT6PFcZq4HagHCAeqBaoHagbqA9oB9BD
+	QCGg40CvAL0P9Hmss4Q6OnohuMbCGFbCG+Ml4+KSqb+ufMW4/Ppx8Y5x8fnj4gvGxQGM
+	G+SRxuO69n4yLr9rXHzxuPgt4+JLx8Wl71evq3/5uPxbx8W7x8VXjovfNi4ujuf1+N4+
+	Lt47Lr5qXHyNGP9fv6WqEAplbmRzdHJlYW0KZW5kb2JqCjc1IDAgb2JqCjczMTgKZW5k
+	b2JqCjc2IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAv
+	Q2FwSGVpZ2h0IDcyMCAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWy0x
+	MDE4IC00ODEgMTQzNiAxMTU5XSAvRm9udE5hbWUgL0FSRUlUSCtIZWx2ZXRpY2EtQm9s
+	ZCAvSXRhbGljQW5nbGUKMCAvU3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA2
+	NDQgL0ZvbnRGaWxlMiA3NCAwIFIgPj4KZW5kb2JqCjc3IDAgb2JqClsgMjc4IDAgMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCA3MjIKMCA3MjIgMCAwIDYxMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2
+	NjcgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgNjExCjU1NiA2MTEgNTU2IDAg
+	NjExIDYxMSAyNzggMCA1NTYgMjc4IDg4OSA2MTEgNjExIDYxMSAwIDM4OSA1NTYgMzMz
+	IDYxMSA1NTYKNzc4IDAgNTU2IF0KZW5kb2JqCjE1IDAgb2JqCjw8IC9UeXBlIC9Gb250
+	IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FSRUlUSCtIZWx2ZXRpY2EtQm9s
+	ZCAvRm9udERlc2NyaXB0b3IKNzYgMCBSIC9XaWR0aHMgNzcgMCBSIC9GaXJzdENoYXIg
+	MzIgL0xhc3RDaGFyIDEyMSAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5k
+	b2JqCjc4IDAgb2JqCjw8IC9MZW5ndGggNzkgMCBSIC9MZW5ndGgxIDE0NDM2IC9GaWx0
+	ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AdV7eXhU1dn4Oeeus2Qy+75mMjOZ7DuE
+	BDKErEAQCEKCBBMgEBAqYAxihS8qCERE2RGsggsEUDOEVAYQSymKWKu4oVK1+onW+plP
+	2x/aVsjM9547IUJq+/hHnz7Pb27O8p5zl/e8593vTdvS21tQAupADJo4vXnxXCT9CloR
+	IldmL2peHId14xHC22a3t7njMJeCELNw7uJ5i+KwuAUhuWPewuUD1xvyEXLtbm1pnhOf
+	R1egLWyFgTiMYR4lty5quyMOa3uh3bHw1tkD8/qLAE9Y1HzHwPPRBwC7f9a8qCV+fkE5
+	tMmLb72tLQ7nvw3t4sVLWwbOx/WA3+sIw6gf3Ypk6BYkIILUcDQiJHwhdyAWZuk8/Oak
+	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
+	WpPJzGFMmdsML+UoaWgjQgtUyMleQvOQOI9niEAkpVhAA+HCYaPwMKAMw3jO+O+dVfZI
+	xyP+oDMrVZ2bpeZGqaJtr8JLAzZrXnRj9Ktno3N7efHJBN5jFrcksxOAFe+hfhLEt8wd
+	Unxrg1iyOVRo+8yCfohzHRDoujRyD6zV5gyaXf8Q7ro9b3rmDWRUBlXieYh5B7xXcOqp
+	XqRBb2kfzsn+Z3GvD97TCuBz/0P8S3S98PvHKNj16qtnLp+XdCVU8GV+C3w//mM/cM5g
+	nfSLiUSQumTw4AMQWBagQjQMvqkvQuWoAlVKX6nXwD9m0G/RJ6AbpK/lJ8MX8DeiqWga
+	qkcNaDqagU5KD6DSi6UeD99aoClVVQ2jx6dVtyxsb2mbP7sZZuKz9JTdUJ6G8jwUGm3R
+	tMJXUK7ASUooQH+cDqUEyngoM6AshHIXlPVQHoHyNJTnobwK5QMoX0G5AoyuhGKHkg6l
+	BMp4KDOgLIRyF5T1UB6B8jSU56G8CuUDKF/FBn6ABxrsY+QeAqcMgYND4PQhMAjfdfcb
+	PQSGl+TXzZcPgScOgScPgeuGwFOGwDcOgacOgenOXLveWUPg2UPgOUNgib+uodfcIfPz
+	hsCtQ+D5Q+BbhsALh8DS/9td8zwazV6L/61D4MVD4KVD4NuGwG1D4NuHwO1D4GVD4OXX
+	w5clrv8/G7R8JAplbmRzdHJlYW0KZW5kb2JqCjc5IDAgb2JqCjk0NzAKZW5kb2JqCjgw
+	IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVp
+	Z2h0IDcxNyAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWy05NTEgLTQ4
+	MSAxNDQ1IDExMjJdIC9Gb250TmFtZSAvVEdHWUFMK0hlbHZldGljYSAvSXRhbGljQW5n
+	bGUgMAovU3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA2MzcgL0ZvbnRGaWxl
+	MiA3OCAwIFIgPj4KZW5kb2JqCjgxIDAgb2JqClsgMjc4IDAgMCAwIDAgMCAwIDAgMzMz
+	IDMzMyAwIDAgMjc4IDAgMCAyNzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAK
+	MCAwIDY2NyAwIDcyMiA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDY2NyAwIDcyMiA2
+	NjcgNjExIDcyMiA2NjcgMCAwIDAgMAowIDAgMCAwIDAgMCA1NTYgNTU2IDUwMCA1NTYg
+	NTU2IDI3OCA1NTYgNTU2IDIyMiAwIDUwMCAyMjIgODMzIDU1NiA1NTYgNTU2CjAgMzMz
+	IDUwMCAyNzggNTU2IDUwMCA3MjIgMCA1MDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwCjAgMCAwIDAgMCA1MDAgXQplbmRvYmoKMTYgMCBvYmoKPDwgL1R5
+	cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvVEdHWUFMK0hlbHZl
+	dGljYSAvRm9udERlc2NyaXB0b3IKODAgMCBSIC9XaWR0aHMgODEgMCBSIC9GaXJzdENo
+	YXIgMzIgL0xhc3RDaGFyIDIyMiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4K
+	ZW5kb2JqCjgyIDAgb2JqCihVbnRpdGxlZCkKZW5kb2JqCjgzIDAgb2JqCihNYWMgT1Mg
+	WCAxMC42LjggUXVhcnR6IFBERkNvbnRleHQpCmVuZG9iago4NCAwIG9iagooU2NvdHQg
+	TWFpbikKZW5kb2JqCjg1IDAgb2JqCihPbW5pR3JhZmZsZSBQcm9mZXNzaW9uYWwpCmVu
+	ZG9iago4NiAwIG9iagooRDoyMDExMTIyOTIwMDQwOVowMCcwMCcpCmVuZG9iagoxIDAg
+	b2JqCjw8IC9UaXRsZSA4MiAwIFIgL0F1dGhvciA4NCAwIFIgL1Byb2R1Y2VyIDgzIDAg
+	UiAvQ3JlYXRvciA4NSAwIFIgL0NyZWF0aW9uRGF0ZQo4NiAwIFIgL01vZERhdGUgODYg
+	MCBSID4+CmVuZG9iagp4cmVmCjAgODcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDU4
+	ODUwIDAwMDAwIG4gCjAwMDAwMzk0NzQgMDAwMDAgbiAKMDAwMDAwNTQyMyAwMDAwMCBu
+	IAowMDAwMDM0MzQ4IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwNTQw
+	MyAwMDAwMCBuIAowMDAwMDA1NTI4IDAwMDAwIG4gCjAwMDAwMjE1NzMgMDAwMDAgbiAK
+	MDAwMDAwNjQ3NCAwMDAwMCBuIAowMDAwMDA3MTI4IDAwMDAwIG4gCjAwMDAwMDcxNDgg
+	MDAwMDAgbiAKMDAwMDAwNzgwMyAwMDAwMCBuIAowMDAwMDA1ODQyIDAwMDAwIG4gCjAw
+	MDAwMjI0MzcgMDAwMDAgbiAKMDAwMDA0ODAxOSAwMDAwMCBuIAowMDAwMDU4NDgyIDAw
+	MDAwIG4gCjAwMDAwMDYzMTYgMDAwMDAgbiAKMDAwMDAwNjAwMCAwMDAwMCBuIAowMDAw
+	MDA2MTU4IDAwMDAwIG4gCjAwMDAwMTM1MDUgMDAwMDAgbiAKMDAwMDAxMzU1MyAwMDAw
+	MCBuIAowMDAwMDEzNTk4IDAwMDAwIG4gCjAwMDAwMTM2NDUgMDAwMDAgbiAKMDAwMDAy
+	MDY3NiAwMDAwMCBuIAowMDAwMDM4ODI5IDAwMDAwIG4gCjAwMDAwMzgwMjIgMDAwMDAg
+	biAKMDAwMDAzNzIxNSAwMDAwMCBuIAowMDAwMDM2NTk2IDAwMDAwIG4gCjAwMDAwMTk3
+	NzkgMDAwMDAgbiAKMDAwMDAxMDY2NCAwMDAwMCBuIAowMDAwMDEzNDg0IDAwMDAwIG4g
+	CjAwMDAwMDc4MjMgMDAwMDAgbiAKMDAwMDAxMDY0MyAwMDAwMCBuIAowMDAwMDEzNjky
+	IDAwMDAwIG4gCjAwMDAwMTk3NTggMDAwMDAgbiAKMDAwMDAxOTgxNiAwMDAwMCBuIAow
+	MDAwMDIwNjU2IDAwMDAwIG4gCjAwMDAwMjA3MTMgMDAwMDAgbiAKMDAwMDAyMTU1MyAw
+	MDAwMCBuIAowMDAwMDIxNjA5IDAwMDAwIG4gCjAwMDAwMjI0MTcgMDAwMDAgbiAKMDAw
+	MDAyODgzMyAwMDAwMCBuIAowMDAwMDIyNDc0IDAwMDAwIG4gCjAwMDAwMjg4MTIgMDAw
+	MDAgbiAKMDAwMDAyODk0MSAwMDAwMCBuIAowMDAwMDI5NTcyIDAwMDAwIG4gCjAwMDAw
+	MjkyNTYgMDAwMDAgbiAKMDAwMDAyOTQxNCAwMDAwMCBuIAowMDAwMDI5NzMwIDAwMDAw
+	IG4gCjAwMDAwMzU5NzcgMDAwMDAgbiAKMDAwMDAzNTE3MCAwMDAwMCBuIAowMDAwMDM0
+	NTI1IDAwMDAwIG4gCjAwMDAwMzQwMzggMDAwMDAgbiAKMDAwMDAyOTc3NSAwMDAwMCBu
+	IAowMDAwMDM0MDE3IDAwMDAwIG4gCjAwMDAwMzQxNDYgMDAwMDAgbiAKMDAwMDAzNDQ0
+	NSAwMDAwMCBuIAowMDAwMDM1MTUwIDAwMDAwIG4gCjAwMDAwMzU5NTcgMDAwMDAgbiAK
+	MDAwMDAzNjU3NiAwMDAwMCBuIAowMDAwMDM3MTk1IDAwMDAwIG4gCjAwMDAwMzgwMDIg
+	MDAwMDAgbiAKMDAwMDAzODgwOSAwMDAwMCBuIAowMDAwMDM5NDU0IDAwMDAwIG4gCjAw
+	MDAwMzk5OTggMDAwMDAgbiAKMDAwMDAzOTUyMiAwMDAwMCBuIAowMDAwMDM5OTc2IDAw
+	MDAwIG4gCjAwMDAwMzk2MjkgMDAwMDAgbiAKMDAwMDAzOTk1NCAwMDAwMCBuIAowMDAw
+	MDM5OTE3IDAwMDAwIG4gCjAwMDAwMzk3NTAgMDAwMDAgbiAKMDAwMDAzOTg5NSAwMDAw
+	MCBuIAowMDAwMDM5ODU4IDAwMDAwIG4gCjAwMDAwNDAxMDYgMDAwMDAgbiAKMDAwMDA0
+	NzUxNSAwMDAwMCBuIAowMDAwMDQ3NTM2IDAwMDAwIG4gCjAwMDAwNDc3NjcgMDAwMDAg
+	biAKMDAwMDA0ODE5OSAwMDAwMCBuIAowMDAwMDU3NzYwIDAwMDAwIG4gCjAwMDAwNTc3
+	ODEgMDAwMDAgbiAKMDAwMDA1ODAwNiAwMDAwMCBuIAowMDAwMDU4NjU3IDAwMDAwIG4g
+	CjAwMDAwNTg2ODQgMDAwMDAgbiAKMDAwMDA1ODczNiAwMDAwMCBuIAowMDAwMDU4NzY1
+	IDAwMDAwIG4gCjAwMDAwNTg4MDggMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA4NyAv
+	Um9vdCA1NyAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPDA0ZjlmMDRhNjk0OTdlYjNhMjU0
+	OGI4YjdiZWM0OTE4Pgo8MDRmOWYwNGE2OTQ5N2ViM2EyNTQ4YjhiN2JlYzQ5MTg+IF0g
+	Pj4Kc3RhcnR4cmVmCjU4OTcwCiUlRU9GCjMgMCBvYmoKPDwvVHlwZSAvUGFnZSAvQ29u
+	dGVudHMgNSAwIFIgL01lZGlhQm94IFswIDAgNTg4IDc2OF0gL1BhcmVudCA0IDAgUiAv
+	UmVzb3VyY2VzIDcgMCBSID4+CmVuZG9iago0MiAwIG9iago8PC9UeXBlIC9QYWdlIC9D
+	b250ZW50cyA0MyAwIFIgL01lZGlhQm94IFswIDAgNTg4IDE1MzZdIC9QYXJlbnQgNCAw
+	IFIgL1Jlc291cmNlcyA0NSAwIFIgPj4KZW5kb2JqCjUzIDAgb2JqCjw8L1R5cGUgL1Bh
+	Z2UgL0NvbnRlbnRzIDU0IDAgUiAvTWVkaWFCb3ggWzAgMCA1ODggNzY4XSAvUGFyZW50
+	IDQgMCBSIC9SZXNvdXJjZXMgNTYgMCBSID4+CmVuZG9iagoxIDAgb2JqCjw8L0F1dGhv
+	ciAobWNsZXJvblxuU2NvdHQgTWFpbikvQ3JlYXRpb25EYXRlIChEOjIwMDcxMTA2MjEz
+	MTAwWikvQ3JlYXRvciAoT21uaUdyYWZmbGUgUHJvZmVzc2lvbmFsIDUuMikvTW9kRGF0
+	ZSAoRDoyMDExMTIyOTE5NTkwMFopL1Byb2R1Y2VyIDgzIDAgUiAvVGl0bGUgKGFjdGl2
+	aXR5X2xpZmVjeWNsZS5ncmFmZmxlKT4+CmVuZG9iagp4cmVmCjEgMQowMDAwMDYxMTg0
+	IDAwMDAwIG4gCjMgMQowMDAwMDYwODY4IDAwMDAwIG4gCjQyIDEKMDAwMDA2MDk3MSAw
+	MDAwMCBuIAo1MyAxCjAwMDAwNjEwNzggMDAwMDAgbiAKdHJhaWxlcgo8PC9JRCBbPDA0
+	ZjlmMDRhNjk0OTdlYjNhMjU0OGI4YjdiZWM0OTE4PiA8MDRmOWYwNGE2OTQ5N2ViM2Ey
+	NTQ4YjhiN2JlYzQ5MTg+XSAvSW5mbyAxIDAgUiAvUHJldiA1ODk3MCAvUm9vdCA1NyAw
+	IFIgL1NpemUgODc+PgpzdGFydHhyZWYKNjEzODUKJSVFT0YK
+	</data>
+	<key>QuickLookThumbnail</key>
+	<data>
+	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
+	QlIAAAAYAAABZnB0UFQAAAAWAAABfnpoQ04AAAAMAAABlGVzRVMAAAASAAABoGphSlAA
+	AAAOAAABsnJ1UlUAAAAkAAABwHN2U0UAAAAQAAAB5HpoVFcAAAAOAAAB9GRlREUAAAAQ
+	AAACAmZpRkkAAAAQAAACEml0SVQAAAAUAAACImtvS1IAAAAMAAACNgBLAGwAZQB1AHIA
+	ZQBuAC0ATABDAEQATABDAEQALQBmAGEAcgB2AGUAcwBrAOYAcgBtAEsAbwBsAG8AcgAg
+	AEwAQwBEAEMAbwBsAG8AcgAgAEwAQwBEAEYAYQByAGcAZQAtAEwAQwBEAEwAQwBEACAA
+	YwBvAHUAbABlAHUAcgBMAEMARAAgAEMAbwBsAG8AcgBpAGQAbwBMAEMARAAgAGEAIABD
+	AG8AcgBlAHNfaYJyACAATABDAEQATABDAEQAIABjAG8AbABvAHIwqzDpMPwAIABMAEMA
+	RAQmBDIENQRCBD0EPgQ5ACAEFgQaAC0ENAQ4BEEEPwQ7BDUEOQBGAOQAcgBnAC0ATABD
+	AERfaYJybbJmdphveTpWaABGAGEAcgBiAC0ATABDAEQAVgDkAHIAaQAtAEwAQwBEAEwA
+	QwBEACAAYwBvAGwAbwByAGnO7LfsACAATABDAEQAAHRleHQAAAAAQ29weXJpZ2h0IEFw
+	cGxlLCBJbmMuLCAyMDExAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81IAAQAA
+	AAEWz1hZWiAAAAAAAABvMQAAOWMAAAGDWFlaIAAAAAAAAGDuAAC3agAACBJYWVogAAAA
+	AAAAJrcAAA8yAADJl2N1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANgA7
+	AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCjAKgArQCyALcA
+	vADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFM
+	AVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwC
+	FAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAML
+	AxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsE
+	SARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1
+	BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EH
+	dAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlk
+	CXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gL
+	sAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4u
+	DkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPUR
+	ExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQn
+	FEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kX
+	rhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtj
+	G4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kf
+	lB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPw
+	JB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo
+	1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3h
+	LhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0Yz
+	fzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlC
+	OX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/
+	oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYi
+	RmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJN
+	Sk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSP
+	VNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVc
+	hlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSU
+	ZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQht
+	YG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+
+	dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/
+	5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZ
+	if6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aU
+	IJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6u
+	nx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamq
+	HKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WK
+	tgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB
+	48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42
+	zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvb
+	gNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui8
+	6Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32
+	+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//cGFyYQAAAAAAAwAAAAJmZgAA
+	8qcAAA1ZAAAT0AAACg52Y2d0AAAAAAAAAAAAAwEAAAIAAAAHAB4ASgCLAOMBKgFuAcAC
+	GQJ0AtoDSQPDBEcE1AVtBhEGwgd8CD4JBwndCrkLnAyPDacO3BAQEUsSiRPJFREWXBes
+	GQQaYRu9HSAejB/4IWQi2iROJcknLyiOKesrSSyfLfYvQzCNMdAzDTRCNXM2nDfAOOA5
+	/TsXPCs9OT5FP1JAY0FzQoRDl0SrRb9G00fpSP9KFUssTENNW05pT3ZQhVGSUp9Tq1S3
+	VcJWy1fSWNlZ31rjW+hc7V3oXtxfzmC/Ya9inmONZHplZmZRZztoJGkOafZq32vGbKlt
+	jW5wb1NwN3Eacfxy3nPAdKN1hXZmd0l4K3kKeep6zHuwfJh9hH53f3GAcoF6goqDoYS9
+	hd+HCYg8iXCKo4vWjQqOPI9tkJ6RzpL9lCyVW5aKl7aY4JoLmzWcX52JnrKf26EEoi2j
+	VqR/paim0af4qSCqTKt8rLKt8a86sI+x77NbtM+2T7fUuTy6dLupvNy+C78zwFbBccKF
+	w5HElsWWxpHHiMiDyYfKjcuNzIXNdM5Xzy7P+9DA0XvSNtL209fUudWa1n3XX9hC2SXa
+	Cdrt29Hctd2a3n3fYOBE4SniEOL54+bk1uXJ5sHnu+i56bnqpeuO7HbtXu5F7yvwEPD1
+	8dryvvOh9IX1aPZL9y/4E/j3+dz6wPui/IT9Zf5E/yL//wAAAAYAGgBAAHgAxQETAUwB
+	kAHfAjMCjgLzA18D1gRVBN0FcAYOBrcHZQgaCNoJnApnC0IMPQ1UDmgPgBCgEcES6RQV
+	FUQWeRevGO8aLhtyHLweCx9WIKoh/yNBJIElvyb8KDcpaiqdK8ss8i4VLzMwSDFbMmcz
+	cTR5NX02ejdqOFs5TDo9OzA8Ij0VPgg++j/tQOFB1ULKQ75Es0WnRphHiEh3SWhKWUtI
+	TDhNJ04VTwRP9FDiUdFSwFOwVJ5ViFZzV15YSVkzWh1bBlvuXNZdvV6jX4pgb2FUYjRj
+	DGPiZLllj2ZmZzxoEWjmabtqkWtlbDptD23jbrdviHBZcStx/HLOc6B0cnVDdhV253e5
+	eIx5XnowewJ713yvfYt+bX9VgESBOoI5gz2ESIVYhm6Hh4ilicOK4Yv+jRyOOY9WkHOR
+	kJKsk8mU5pYClxyYNplRmm2bi5ysndCe9qAioVCig6O5pPGmLqdxqLSp96s5rHytvq8A
+	sEGxg7LFtAW1R7aIt8e5B7pFu4K8vb30vybAU8F7wp7Du8TVxenG98gEyRPKIcsvzD3N
+	TM5az2jQd9GG0pXTotSv1bzWydfW2OXZ9NsD3BTdJd4430zgZ+Gj4unkJ+Va5obnqujH
+	6eHq+OwO7SXuP+9b8IDx0PMz9JP18/dS+LT6GPuF/Pj+d///AAAABAARACoATgCAAMAB
+	BwE6AXQBtwICAk0CoAL7A14DygQ8BLYFOAXCBlAG4wd7CBsIxwmNCmMLPAwbDP4N4g7L
+	D7UQpRGYEo4TiBSFFYYWixeTGJ8Zqxq4G70cvR2+Hr8fviC7IbUiqyOdJIsldSZcJ0Ao
+	IikAKdsqtyuLLFYtIC3qLrUvgDBLMRYx4TKrM3U0PzUJNdM2nTdoODQ4+Dm+OoU7SzwS
+	PNo9oj5qPzI//EDGQZFCXUMqQ/dEw0WPRltHJ0fySL5JikpWSyFL60y2TYBOTE8WT+FQ
+	q1FzUjtTAlPKVJJVWlYgVudXrlh1WTtaAlrJW49cU10WXdlem19dYB1g3WGdYl1jHGPa
+	ZJhlVmYTZs9ni2hFaQBpu2p2azFr7GynbWJuHG7Xb5NwTnEIccFyenMzc+x0pXVedhd2
+	z3eHeD94+Hmweml7IHvZfJR9VH4ZfuV/uICUgXmCZoNchFmFW4Zlh3WIhYmWiqaLtozG
+	jdWO5Y/0kQOSE5MilDCVOpZDl0qYUZlZmmKbb5x/nZOerJ/LoO+iJaN5pNCmJ6d+qNaq
+	LauErNuuMa+IsN6yNrOLtN+2M7eHuNy6M7uKvOK+PL+YwPbCVMO1xSfGpMgtycXLa80k
+	zuzQx9Kx1KnWsNjB2t3dAN8w4afkhueK6rfuD/GI9Rj4tfxX//8AAG5kaW4AAAAAAAAG
+	NgAApeMAAFahAABRWwAApysAACWbAAAOFAAAUA0AAFQ5AAJCjwAB2ZkAAUeuAAMBAAAC
+	AAAADQAnAEYAZgCHAKgAyQDrAQ4BMQFVAXoBnQG8AdsB/AIdAj8CYgKGAqoCzwL0AxsD
+	QQNoA5ADuQPiBAsENQRgBIwEuATkBRIFPwVuBaEF1QYKBkEGeAayBuwHKAdnB6cH6Qgu
+	CHUIvwkLCVoJrAoBClgKsgsOC24L0gw4DKANCA1yDd4OSg65DygPmhANEIEQ9xFvEegS
+	YxLfE2IT5xRtFPYVgRYOFp0XLxfDGFsY9RmRGjEa0xt3HB0c0B2HHkIfAB/BIIUhTSIZ
+	IugjuySRJWomRiclKAwo9SniKtIrxCy6LbMusC+vMLIxuDLAM8s03jXxNwQ4FTkjOi07
+	MTwwPSo+ID8SQAJA70HbQr9DokSIRW9GWEdCSC9JHkoPSwNL+EzwTepO5U/iUOFR5FLr
+	U/NU/VYJVxdYJ1k5Wk1bY1x7XZVesF/OYO1iDmMzZFllf2ajZ8Vo42n9axJsIW0qbi5v
+	LXApcSJyFnMJc/p06XYad014hHm/ev58RX2TfuuATYG7gzSEuYZJh+OJh4shjK6OQI/g
+	kZGTWJU9l0mZd5vFnhugDqICo/ml8qfuqeyr7K3vr/Wx/bQIthu4L7pEvFm+acB2wn7E
+	gMZ9yHbKbMxgzovQuNLq1SHXXdmf2+beMeCB4tXlK+eI6efsR+6q8RDze/Xt+Gb65/1w
+	//8AAAAPAC4AUQB1AJoAvwDkAQsBMgFbAYQBqQHLAe8CFAI6AmACiAKwAtkDAwMtA1kD
+	hQOxA98EDQQ8BGsEmwTNBP4FMQVkBZwF1QYPBkwGiQbIBwoHTQeSB9oIJQhyCMIJFgls
+	CcYKIwqCCuULSgu6DCsMnw0VDYwOBg6CDwAPgRADEIgRDhGXEiISrxNAE9UUbRUGFaIW
+	QRbiF4YYLRjWGYEaMBrgG5McSB0EHcIegx9GIAwg1iGiInMjRiQeJPgl1ia3J6AolymR
+	Ko4rjiySLZoupi+1MMgx3jL3NBU1OjZjN444vTnvOyU8Xz2bPttAHkFkQq9D+0VFRotH
+	y0kFSjdLYkyGTaZOwU/aUPBSBFMWVCpVQFZZV3NYj1muWs5b8V0WXj1fZmCRYb5i7mQj
+	ZVhmj2fGaP1qNGtpbJ5t0W8CcDJxYHKOc7t06HYPdzd4YHmLerh7530Xfkl/fYCygeqD
+	I4RdhZqG2IgXiVmKnovkjS2OeI/GkRiSb5PMlTCWm5gOmYmbDJyVniefx6FpowyksqZa
+	qASpsKtfrRCuw7B4si+z6LWnt2m5LbryvLq+gsBMwhfD48Wwx3zJSssZzNDOVc/j0XrT
+	HtTO1ovYU9om3AHd4t/G4avjj+Vy51PpG+qf7Cftse8+8M7yX/Pv9YD3D/iZ+h77n/0a
+	/o///wAAABcAQQBwAJ8AzwD/ATIBZgGZAcUB8wIiAlIChAK3AuwDIQNYA5ADyQQDBD4E
+	egS3BPUFNQV2Bb0GBQZPBpsG6gc7B5AH6AhECKQJCAlwCdwKTArACzcLugxCDMwNWQ3q
+	Dn4PFQ+wEE8Q8RGWEj4S6ROdFFMVDRXKFokXTBgSGNoZpRpyG0EcExzrHcYepB+GIGsh
+	VCJBIzIkJyUfJhsnGiggKSsqOStLLGEtfC6aL70w5DIOMzw0cjWuNu84NTmBOtI8KD2E
+	PuZATEG3QytEpEYhR6NJKUq1TERN2E9wUQxSsFRbVglXvVl2WzRc+F7AYI1iXmQ2Zgxn
+	2Wmaa0ls6W55b/xxdHLldFB1s3cReHJ51Hs6fKF+C394gOeCWIPMhUKGuog0ibaLPYzJ
+	jlmP65F+kxGUopYvl7mZPpq/nDydtp8FoEyhlaLfpCqld6bFqBWpZqq6rA6tZK68sBWx
+	cLLLtCi1irbtuFG5t7sevIa97r9XwMHCK8OVxP/GasfUyUDKq8wWzXPOytAb0WjSrNPq
+	1SPWV9eC2KjZytrl2/zdEN4f3yvgNeE64j7jQORA5T7mOuc36DHpKuoi6w7r6ey57Xfu
+	Ne7s76XwWfEK8bzyZvMQ87j0XPUA9aL2Qvbi93/4HPi5+VX58PqM+yf7wvxe/Pj9k/4v
+	/sn/ZP//AABzZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADA
+	bG1tb2QAAAAAAAAGEAAAnLEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+	</data>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>Sheets</key>
+	<array>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {588, 768}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Bounds</key>
+					<string>{{429.333, 473.825}, {91, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>229</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>198</integer>
+						<key>Position</key>
+						<real>0.40094965696334839</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKx5Vc2VyIG5hdmln
+						YXRlcwp0byB0aGUgYWN0aXZpdHmG
+						hAJpSQEekoSEhAxOU0RpY3Rpb25h
+						cnkAlIQBaQOShJaWB05TQ29sb3KG
+						koSEhAdOU0NvbG9yAJSEAWMDhAJm
+						ZgCDZmYmP4aShJaWBk5TRm9udIaS
+						hISEBk5TRm9udB6UmRyEBVsyOGNd
+						BgAAABQAAAD//kgAZQBsAHYAZQB0
+						AGkAYwBhAIQBZgybAJsBmwCbAIaS
+						hJaWEE5TUGFyYWdyYXBoU3R5bGWG
+						koSEhBBOU1BhcmFncmFwaFN0eWxl
+						AJSEBENDQFMCAISEhAdOU0FycmF5
+						AJSZDJKEhIQJTlNUZXh0VGFiAJSE
+						AkNmAByGkoSlpAA4hpKEpaQAVIaS
+						hKWkAHCGkoSlpACBjACGkoSlpACB
+						qACGkoSlpACBxACGkoSlpACB4ACG
+						koSlpACB/ACGkoSlpACBGAGGkoSl
+						pACBNAGGkoSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 User navigates\
+to the activity}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{58.5, 236.825}, {91, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>228</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>227</integer>
+						<key>Offset</key>
+						<real>-2</real>
+						<key>Position</key>
+						<real>0.15748642385005951</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKx5Vc2VyIG5hdmln
+						YXRlcwp0byB0aGUgYWN0aXZpdHmG
+						hAJpSQEekoSEhAxOU0RpY3Rpb25h
+						cnkAlIQBaQOShJaWB05TQ29sb3KG
+						koSEhAdOU0NvbG9yAJSEAWMDhAJm
+						ZgCDZmYmP4aShJaWBk5TRm9udIaS
+						hISEBk5TRm9udB6UmRyEBVsyOGNd
+						BgAAABQAAAD//kgAZQBsAHYAZQB0
+						AGkAYwBhAIQBZgybAJsBmwCbAIaS
+						hJaWEE5TUGFyYWdyYXBoU3R5bGWG
+						koSEhBBOU1BhcmFncmFwaFN0eWxl
+						AJSEBENDQFMCAISEhAdOU0FycmF5
+						AJSZDJKEhIQJTlNUZXh0VGFiAJSE
+						AkNmAByGkoSlpAA4hpKEpaQAVIaS
+						hKWkAHCGkoSlpACBjACGkoSlpACB
+						qACGkoSlpACBxACGkoSlpACB4ACG
+						koSlpACB/ACGkoSlpACBGAGGkoSl
+						pACBNAGGkoSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 User navigates\
+to the activity}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>192</integer>
+						<key>Info</key>
+						<integer>4</integer>
+					</dict>
+					<key>ID</key>
+					<integer>227</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{102, 293.915}</string>
+						<string>{204, 153}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>223</integer>
+						<key>Info</key>
+						<integer>6</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{31, 406.546}, {142, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>226</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>224</integer>
+						<key>Position</key>
+						<real>0.70940077304840088</real>
+						<key>RotationType</key>
+						<integer>4</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKyZBcHBzIHdpdGgg
+						aGlnaGVyIHByaW9yaXR5IApuZWVk
+						IG1lbW9yeYaEAmlJASaShISEDE5T
+						RGljdGlvbmFyeQCUhAFpA5KElpYH
+						TlNDb2xvcoaShISEB05TQ29sb3IA
+						lIQBYwOEAmZmAINmZiY/hpKElpYG
+						TlNGb250hpKEhIQGTlNGb250HpSZ
+						HIQFWzI4Y10GAAAAFAAAAP/+SABl
+						AGwAdgBlAHQAaQBjAGEAhAFmDJsA
+						mwGbAJsAhpKElpYQTlNQYXJhZ3Jh
+						cGhTdHlsZYaShISEEE5TUGFyYWdy
+						YXBoU3R5bGUAlIQEQ0NAUwIAhISE
+						B05TQXJyYXkAlJkMkoSEhAlOU1Rl
+						eHRUYWIAlIQCQ2YAHIaShKWkADiG
+						koSlpABUhpKEpaQAcIaShKWkAIGM
+						AIaShKWkAIGoAIaShKWkAIHEAIaS
+						hKWkAIHgAIaShKWkAIH8AIaShKWk
+						AIEYAYaShKWkAIE0AYaShKWkAIFQ
+						AYaGAIaGhg==
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Apps with higher priority \
+need memory}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>226</integer>
+					</dict>
+					<key>ID</key>
+					<integer>225</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{203.5, 426.026}</string>
+						<string>{173, 425.546}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>200</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>223</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+					<key>ID</key>
+					<integer>224</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{204, 523.454}</string>
+						<string>{102, 344.085}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>201</integer>
+						<key>Info</key>
+						<integer>4</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{43, 293.915}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>223</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 App process killed}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>221</integer>
+					</dict>
+					<key>ID</key>
+					<integer>222</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 636.168}</string>
+						<string>{263, 659.214}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>202</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 659.214}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>221</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Activity\
+ shut down}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{359.5, 377.305}, {81, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>220</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>219</integer>
+						<key>Position</key>
+						<real>0.33032712340354919</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKxxVc2VyIHJldHVy
+						bnMKdG8gdGhlIGFjdGl2aXR5hoQC
+						aUkBHJKEhIQMTlNEaWN0aW9uYXJ5
+						AJSEAWkDkoSWlgdOU0NvbG9yhpKE
+						hIQHTlNDb2xvcgCUhAFjA4QCZmYA
+						g2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+						hAZOU0ZvbnQelJkchAVbMjhjXQYA
+						AAAUAAAA//5IAGUAbAB2AGUAdABp
+						AGMAYQCEAWYMmwCbAZsAmwCGkoSW
+						lhBOU1BhcmFncmFwaFN0eWxlhpKE
+						hIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+						hARDQ0BTAgCEhIQHTlNBcnJheQCU
+						mQyShISECU5TVGV4dFRhYgCUhAJD
+						ZgAchpKEpaQAOIaShKWkAFSGkoSl
+						pABwhpKEpaQAgYwAhpKEpaQAgagA
+						hpKEpaQAgcQAhpKEpaQAgeAAhpKE
+						paQAgfwAhpKEpaQAgRgBhpKEpaQA
+						gTQBhpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 User returns\
+to the activity}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>219</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{322, 426.026}</string>
+						<string>{400, 343.883}</string>
+						<string>{322, 257}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>200</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>216</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+					<key>ID</key>
+					<integer>198</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{322, 523.454}</string>
+						<string>{474.833, 220.286}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>201</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>217</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{415.833, 205}</string>
+						<string>{322, 205}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>216</integer>
+						<key>Info</key>
+						<integer>4</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{415.833, 189.714}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>216</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onRestart()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 293.714}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>4</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Activity running}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{176.5, 549.527}, {173, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>211</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>208</integer>
+						<key>Position</key>
+						<real>0.44555199146270752</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKzpUaGUgYWN0aXZp
+						dHkgaXMgZmluaXNoaW5nIG9yCmJl
+						aW5nIGRlc3Ryb3llZCBieSB0aGUg
+						c3lzdGVthoQCaUkBOpKEhIQMTlNE
+						aWN0aW9uYXJ5AJSEAWkDkoSWlgdO
+						U0NvbG9yhpKEhIQHTlNDb2xvcgCU
+						hAFjA4QCZmYAg2ZmJj+GkoSWlgZO
+						U0ZvbnSGkoSEhAZOU0ZvbnQelJkc
+						hAVbMjhjXQYAAAAUAAAA//5IAGUA
+						bAB2AGUAdABpAGMAYQCEAWYMmwCb
+						AZsAmwCGkoSWlhBOU1BhcmFncmFw
+						aFN0eWxlhpKEhIQQTlNQYXJhZ3Jh
+						cGhTdHlsZQCUhARDQ0BTAgCEhIQH
+						TlNBcnJheQCUmQyShISECU5TVGV4
+						dFRhYgCUhAJDZgAchpKEpaQAOIaS
+						hKWkAFSGkoSlpABwhpKEpaQAgYwA
+						hpKEpaQAgagAhpKEpaQAgcQAhpKE
+						paQAgeAAhpKEpaQAgfwAhpKEpaQA
+						gRgBhpKEpaQAgTQBhpKEpaQAgVAB
+						hoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 The activity is finishing or\
+being destroyed by the system}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{214.5, 451.089}, {97, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+						<key>Position</key>
+						<real>0.43043658137321472</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKyJUaGUgYWN0aXZp
+						dHkgaXMgCm5vIGxvbmdlciB2aXNp
+						YmxlhoQCaUkBIpKEhIQMTlNEaWN0
+						aW9uYXJ5AJSEAWkDkoSWlgdOU0Nv
+						bG9yhpKEhIQHTlNDb2xvcgCUhAFj
+						A4QCZmYAg2ZmJj+GkoSWlgZOU0Zv
+						bnSGkoSEhAZOU0ZvbnQelJkchAVb
+						MjhjXQYAAAAUAAAA//5IAGUAbAB2
+						AGUAdABpAGMAYQCEAWYMmwCbAZsA
+						mwCGkoSWlhBOU1BhcmFncmFwaFN0
+						eWxlhpKEhIQQTlNQYXJhZ3JhcGhT
+						dHlsZQCUhARDQ0BTAgCEhIQHTlNB
+						cnJheQCUmQyShISECU5TVGV4dFRh
+						YgCUhAJDZgAchpKEpaQAOIaShKWk
+						AFSGkoSlpABwhpKEpaQAgYwAhpKE
+						paQAgagAhpKEpaQAgcQAhpKEpaQA
+						geAAhpKEpaQAgfwAhpKEpaQAgRgB
+						hpKEpaQAgTQBhpKEpaQAgVABhoYA
+						hoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 The activity is \
+no longer visible}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{197.5, 354.367}, {131, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>214</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>213</integer>
+						<key>Position</key>
+						<real>0.4409976601600647</real>
+						<key>RotationType</key>
+						<integer>4</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKypBbm90aGVyIGFj
+						dGl2aXR5IGNvbWVzCmludG8gdGhl
+						IGZvcmVncm91bmSGhAJpSQEqkoSE
+						hAxOU0RpY3Rpb25hcnkAlIQBaQOS
+						hJaWB05TQ29sb3KGkoSEhAdOU0Nv
+						bG9yAJSEAWMDhAJmZgCDZmYmP4aS
+						hJaWBk5TRm9udIaShISEBk5TRm9u
+						dB6UmRyEBVsyOGNdBgAAABQAAAD/
+						/kgAZQBsAHYAZQB0AGkAYwBhAIQB
+						ZgybAJsBmwCbAIaShJaWEE5TUGFy
+						YWdyYXBoU3R5bGWGkoSEhBBOU1Bh
+						cmFncmFwaFN0eWxlAJSEBENDQFMC
+						AISEhAdOU0FycmF5AJSZDJKEhIQJ
+						TlNUZXh0VGFiAJSEAkNmAByGkoSl
+						pAA4hpKEpaQAVIaShKWkAHCGkoSl
+						pACBjACGkoSlpACBqACGkoSlpACB
+						xACGkoSlpACB4ACGkoSlpACB/ACG
+						koSlpACBGAGGkoSlpACBNAGGkoSl
+						pACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Another activity comes\
+into the foreground}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>202</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>208</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 538.74}</string>
+						<string>{263, 605.596}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>201</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>201</integer>
+					</dict>
+					<key>ID</key>
+					<integer>207</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 441.312}</string>
+						<string>{263, 508.168}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>200</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>200</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>213</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 343.884}</string>
+						<string>{263, 410.74}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>4</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>4</integer>
+					</dict>
+					<key>ID</key>
+					<integer>215</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 272.286}</string>
+						<string>{263, 293.714}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>204</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 220.286}</string>
+						<string>{263, 241.714}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>203</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 168.286}</string>
+						<string>{263, 189.714}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>192</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>192</integer>
+					</dict>
+					<key>ID</key>
+					<integer>196</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{263, 116.286}</string>
+						<string>{263, 137.714}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>157</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 605.596}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>202</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 508.168}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>201</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStop()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 410.74}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>200</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onPause()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 241.714}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>194</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onResume()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 189.714}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>193</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStart()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 137.714}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>192</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{204, 66.1163}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>157</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.874135</string>
+								<key>r</key>
+								<string>0.71718</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.662438</string>
+								<key>r</key>
+								<string>0.464468</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.93512</string>
+								<key>g</key>
+								<string>0.472602</string>
+								<key>r</key>
+								<string>0.333854</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Activity launched}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>OutlineStyle</key>
+			<string>Basic</string>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>Canvas 1</string>
+			<key>UniqueID</key>
+			<integer>1</integer>
+			<key>VPages</key>
+			<integer>1</integer>
+		</dict>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {588, 1536}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>fill</key>
+					<dict>
+						<key>GradientColor</key>
+						<dict>
+							<key>w</key>
+							<string>0.666667</string>
+						</dict>
+					</dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>209</integer>
+					</dict>
+					<key>ID</key>
+					<integer>224</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 728.248}</string>
+						<string>{281, 747.619}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>208</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>222</integer>
+					</dict>
+					<key>ID</key>
+					<integer>223</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 778.191}</string>
+						<string>{281, 798.915}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>209</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 798.915}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>222</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Fragment is destroyed}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{394, 603.395}, {90, 66}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>221</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKzZUaGUgZnJhZ21l
+						bnQKcmV0dXJucyB0byB0aGUKbGF5
+						b3V0IGZyb20gdGhlCmJhY2sgc3Rh
+						Y2uGhAJpSQE2koSEhAxOU0RpY3Rp
+						b25hcnkAlIQBaQOShJaWB05TQ29s
+						b3KGkoSEhAdOU0NvbG9yAJSEAWMD
+						hAJmZgCDZmYmP4aShJaWBk5TRm9u
+						dIaShISEBk5TRm9udB6UmRyEBVsy
+						OGNdBgAAABQAAAD//kgAZQBsAHYA
+						ZQB0AGkAYwBhAIQBZgybAJsBmwCb
+						AIaShJaWEE5TUGFyYWdyYXBoU3R5
+						bGWGkoSEhBBOU1BhcmFncmFwaFN0
+						eWxlAJSEBENDQFMCAISEhAdOU0Fy
+						cmF5AJSZDJKEhIQJTlNUZXh0VGFi
+						AJSEAkNmAByGkoSlpAA4hpKEpaQA
+						VIaShKWkAHCGkoSlpACBjACGkoSl
+						pACBqACGkoSlpACBxACGkoSlpACB
+						4ACGkoSlpACB/ACGkoSlpACBGAGG
+						koSlpACBNAGGkoSlpACBUAGGhgCG
+						hoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 The fragment\
+returns to the\
+layout from the\
+back stack}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>220</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{310.5, 669.395}</string>
+						<string>{438, 618}</string>
+						<string>{340, 208.533}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+						<key>Info</key>
+						<integer>7</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>208</integer>
+					</dict>
+					<key>ID</key>
+					<integer>219</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{251.5, 669.395}</string>
+						<string>{281, 697.176}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+						<key>Info</key>
+						<integer>9</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>218</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{310.5, 621.689}</string>
+						<string>{310.5, 638.823}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>206</integer>
+						<key>Info</key>
+						<integer>7</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+					<key>ID</key>
+					<integer>217</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{251.5, 621.689}</string>
+						<string>{251.5, 638.823}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>206</integer>
+						<key>Info</key>
+						<integer>9</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>206</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>216</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{310.5, 573.983}</string>
+						<string>{310.5, 591.117}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>205</integer>
+						<key>Info</key>
+						<integer>7</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>206</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+					<key>ID</key>
+					<integer>215</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{251.5, 573.983}</string>
+						<string>{251.5, 591.117}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>205</integer>
+						<key>Info</key>
+						<integer>9</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{288, 457.277}, {109, 66}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>214</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBK0FUaGUgZnJhZ21l
+						bnQgaXMgCmFkZGVkIHRvIHRoZSBi
+						YWNrIApzdGFjaywgdGhlbiAKcmVt
+						b3ZlZC9yZXBsYWNlZIaEAmlJAUGS
+						hISEDE5TRGljdGlvbmFyeQCUhAFp
+						A5KElpYHTlNDb2xvcoaShISEB05T
+						Q29sb3IAlIQBYwOEAmZmAINmZiY/
+						hpKElpYGTlNGb250hpKEhIQGTlNG
+						b250HpSZHIQFWzI4Y10GAAAAFAAA
+						AP/+SABlAGwAdgBlAHQAaQBjAGEA
+						hAFmDJsAmwGbAJsAhpKElpYQTlNQ
+						YXJhZ3JhcGhTdHlsZYaShISEEE5T
+						UGFyYWdyYXBoU3R5bGUAlIQEQ0NA
+						UwIAhISEB05TQXJyYXkAlJkMkoSE
+						hAlOU1RleHRUYWIAlIQCQ2YAHIaS
+						hKWkADiGkoSlpABUhpKEpaQAcIaS
+						hKWkAIGMAIaShKWkAIGoAIaShKWk
+						AIHEAIaShKWkAIHgAIaShKWkAIH8
+						AIaShKWkAIEYAYaShKWkAIE0AYaS
+						hKWkAIFQAYaGAIaGhg==
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 The fragment is \
+added to the back \
+stack, then \
+removed/replaced}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{175, 457.277}, {107, 66}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>213</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKzpVc2VyIG5hdmln
+						YXRlcyAKYmFja3dhcmQgb3IgCmZy
+						YWdtZW50IGlzIApyZW1vdmVkL3Jl
+						cGxhY2VkhoQCaUkBOpKEhIQMTlNE
+						aWN0aW9uYXJ5AJSEAWkDkoSWlgdO
+						U0NvbG9yhpKEhIQHTlNDb2xvcgCU
+						hAFjA4QCZmYAg2ZmJj+GkoSWlgZO
+						U0ZvbnSGkoSEhAZOU0ZvbnQelJkc
+						hAVbMjhjXQYAAAAUAAAA//5IAGUA
+						bAB2AGUAdABpAGMAYQCEAWYMmwCb
+						AZsAmwCGkoSWlhBOU1BhcmFncmFw
+						aFN0eWxlhpKEhIQQTlNQYXJhZ3Jh
+						cGhTdHlsZQCUhARDQ0BTAgCEhIQH
+						TlNBcnJheQCUmQyShISECU5TVGV4
+						dFRhYgCUhAJDZgAchpKEpaQAOIaS
+						hKWkAFSGkoSlpABwhpKEpaQAgYwA
+						hpKEpaQAgagAhpKEpaQAgcQAhpKE
+						paQAgeAAhpKEpaQAgfwAhpKEpaQA
+						gRgBhpKEpaQAgTQBhpKEpaQAgVAB
+						hoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 User navigates \
+backward or \
+fragment is \
+removed/replaced}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>205</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>212</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>44</real>
+					<key>Points</key>
+					<array>
+						<string>{312.935, 447.471}</string>
+						<string>{310.5, 543.411}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>4</integer>
+						<key>Info</key>
+						<integer>15</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>205</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+					<key>ID</key>
+					<integer>211</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{250.506, 447.471}</string>
+						<string>{251.5, 543.411}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>4</integer>
+						<key>Info</key>
+						<integer>16</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 747.619}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>209</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDetach()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 697.176}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>208</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 638.823}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>207</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{-0.596285, -1.19257}</string>
+						<string>{0, -1.33333}</string>
+						<string>{0.596285, -1.19257}</string>
+						<string>{1.19257, -0.596285}</string>
+						<string>{1.33333, 0}</string>
+						<string>{1.19257, 0.596285}</string>
+						<string>{0.596285, 1.19257}</string>
+						<string>{0, 1.33333}</string>
+						<string>{-0.596285, 1.19257}</string>
+						<string>{-1.19257, 0.596285}</string>
+						<string>{-1.33333, 0}</string>
+						<string>{-1.19257, -0.596285}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroyView()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 591.117}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>206</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{-0.596285, -1.19257}</string>
+						<string>{0, -1.33333}</string>
+						<string>{0.596285, -1.19257}</string>
+						<string>{1.19257, -0.596285}</string>
+						<string>{1.33333, 0}</string>
+						<string>{1.19257, 0.596285}</string>
+						<string>{0.596285, 1.19257}</string>
+						<string>{0, 1.33333}</string>
+						<string>{-0.596285, 1.19257}</string>
+						<string>{-1.19257, 0.596285}</string>
+						<string>{-1.33333, 0}</string>
+						<string>{-1.19257, -0.596285}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStop()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 543.411}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>205</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{-0.596287, -1.19257}</string>
+						<string>{0, -1.33333}</string>
+						<string>{0.596287, -1.19257}</string>
+						<string>{1.19257, -0.596281}</string>
+						<string>{1.33333, 5.08626e-06}</string>
+						<string>{1.19257, 0.596288}</string>
+						<string>{0.596283, 1.19257}</string>
+						<string>{0, 1.33333}</string>
+						<string>{-0.596283, 1.19257}</string>
+						<string>{-1.19257, 0.596289}</string>
+						<string>{-1.33333, 5.08627e-06}</string>
+						<string>{-1.19257, -0.596281}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onPause()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>4</integer>
+						<key>Info</key>
+						<integer>6</integer>
+					</dict>
+					<key>ID</key>
+					<integer>204</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 377.11}</string>
+						<string>{281, 397.301}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>197</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 397.301}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>4</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Fragment is active}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>197</integer>
+					</dict>
+					<key>ID</key>
+					<integer>203</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 326.346}</string>
+						<string>{281, 346.538}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>196</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>196</integer>
+					</dict>
+					<key>ID</key>
+					<integer>202</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 274.993}</string>
+						<string>{281, 295.774}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>195</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>195</integer>
+					</dict>
+					<key>ID</key>
+					<integer>201</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 224.319}</string>
+						<string>{281, 244.421}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+					</dict>
+					<key>ID</key>
+					<integer>200</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 172.645}</string>
+						<string>{281, 193.247}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+					</dict>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 122.471}</string>
+						<string>{281, 142.073}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>192</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>192</integer>
+					</dict>
+					<key>ID</key>
+					<integer>198</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{281, 72.5287}</string>
+						<string>{281, 91.8993}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>157</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 346.538}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>197</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onResume()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 295.774}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>196</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStart()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 244.421}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>195</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onActivityCreated()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 193.247}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>194</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreateView()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 142.073}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>193</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 91.8993}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>192</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onAttach()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{222, 22.359}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>157</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.874135</string>
+								<key>r</key>
+								<string>0.71718</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.662438</string>
+								<key>r</key>
+								<string>0.464468</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.93512</string>
+								<key>g</key>
+								<string>0.472602</string>
+								<key>r</key>
+								<string>0.333854</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Fragment is added}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>OutlineStyle</key>
+			<string>Basic</string>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>Canvas 3</string>
+			<key>UniqueID</key>
+			<integer>3</integer>
+			<key>VPages</key>
+			<integer>2</integer>
+		</dict>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {588, 768}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>fill</key>
+					<dict>
+						<key>GradientColor</key>
+						<dict>
+							<key>w</key>
+							<string>0.666667</string>
+						</dict>
+					</dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>209</integer>
+					</dict>
+					<key>ID</key>
+					<integer>224</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 624.485}</string>
+						<string>{348, 644.856}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>208</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>208</integer>
+					</dict>
+					<key>ID</key>
+					<integer>219</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 573.06}</string>
+						<string>{348, 593.413}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>207</integer>
+					</dict>
+					<key>ID</key>
+					<integer>217</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 507.942}</string>
+						<string>{348, 542.488}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>206</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>206</integer>
+					</dict>
+					<key>ID</key>
+					<integer>215</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 444.736}</string>
+						<string>{348, 476.87}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>205</integer>
+						<key>Info</key>
+						<integer>8</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 644.856}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>209</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDetach()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 593.413}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>208</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 542.488}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>207</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{-0.596285, -1.19257}</string>
+						<string>{0, -1.33333}</string>
+						<string>{0.596285, -1.19257}</string>
+						<string>{1.19257, -0.596285}</string>
+						<string>{1.33333, 0}</string>
+						<string>{1.19257, 0.596285}</string>
+						<string>{0.596285, 1.19257}</string>
+						<string>{0, 1.33333}</string>
+						<string>{-0.596285, 1.19257}</string>
+						<string>{-1.19257, 0.596285}</string>
+						<string>{-1.33333, 0}</string>
+						<string>{-1.19257, -0.596285}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroyView()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 476.87}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>206</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{-0.596285, -1.19257}</string>
+						<string>{0, -1.33333}</string>
+						<string>{0.596285, -1.19257}</string>
+						<string>{1.19257, -0.596285}</string>
+						<string>{1.33333, 0}</string>
+						<string>{1.19257, 0.596285}</string>
+						<string>{0.596285, 1.19257}</string>
+						<string>{0, 1.33333}</string>
+						<string>{-0.596285, 1.19257}</string>
+						<string>{-1.19257, 0.596285}</string>
+						<string>{-1.33333, 0}</string>
+						<string>{-1.19257, -0.596285}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStop()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 414.164}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>205</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{-0.596287, -1.19257}</string>
+						<string>{0, -1.33333}</string>
+						<string>{0.596287, -1.19257}</string>
+						<string>{1.19257, -0.596281}</string>
+						<string>{1.33333, 5.08626e-06}</string>
+						<string>{1.19257, 0.596288}</string>
+						<string>{0.596283, 1.19257}</string>
+						<string>{0, 1.33333}</string>
+						<string>{-0.596283, 1.19257}</string>
+						<string>{-1.19257, 0.596289}</string>
+						<string>{-1.33333, 5.08627e-06}</string>
+						<string>{-1.19257, -0.596281}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onPause()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>205</integer>
+					</dict>
+					<key>ID</key>
+					<integer>204</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 381.913}</string>
+						<string>{348, 414.164}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>197</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>197</integer>
+					</dict>
+					<key>ID</key>
+					<integer>203</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 318.47}</string>
+						<string>{348, 351.341}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>196</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>196</integer>
+					</dict>
+					<key>ID</key>
+					<integer>202</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 252.689}</string>
+						<string>{348, 287.898}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>195</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>195</integer>
+					</dict>
+					<key>ID</key>
+					<integer>201</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 201.911}</string>
+						<string>{348, 222.117}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>194</integer>
+					</dict>
+					<key>ID</key>
+					<integer>200</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 150.748}</string>
+						<string>{348, 170.839}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+					</dict>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{348, 99.5}</string>
+						<string>{348, 120.176}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>192</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 351.341}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>197</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onResume()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 287.898}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>196</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStart()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 222.117}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>195</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onActivityCreated()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 170.839}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>194</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreateView()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 120.176}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>193</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{289, 68.428}, {118, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>192</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onAttach()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>169</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 53.048}</string>
+						<string>{454, 53.048}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>168</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 690.302}</string>
+						<string>{454, 690.302}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>170</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 524.465}</string>
+						<string>{454, 524.465}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>Pattern</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>171</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 459.302}</string>
+						<string>{454, 459.302}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>Pattern</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>172</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 396.302}</string>
+						<string>{454, 396.302}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>Pattern</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>153</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 333.434}</string>
+						<string>{454, 333.434}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>152</integer>
+					<key>Points</key>
+					<array>
+						<string>{126, 270.566}</string>
+						<string>{454, 270.566}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.630435</string>
+								<key>g</key>
+								<string>0.630435</string>
+								<key>r</key>
+								<string>0.630435</string>
+							</dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{157, 557.472}, {65, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>149</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwlEZXN0cm95ZWSG
+						hAJpSQEJkoSEhAxOU0RpY3Rpb25h
+						cnkAlIQBaQOShJaWB05TQ29sb3KG
+						koSEhAdOU0NvbG9yAJSEAWMDhAJm
+						ZgCDZmYmP4aShJaWBk5TRm9udIaS
+						hISEBk5TRm9udB6UmRyEBVsyOGNd
+						BgAAABQAAAD//kgAZQBsAHYAZQB0
+						AGkAYwBhAIQBZgybAJsBmwCbAIaS
+						hJaWEE5TUGFyYWdyYXBoU3R5bGWG
+						koSEhBBOU1BhcmFncmFwaFN0eWxl
+						AJSEBENDQFMCAISEhAdOU0FycmF5
+						AJSZDJKEhIQJTlNUZXh0VGFiAJSE
+						AkNmAByGkoSlpAA4hpKEpaQAVIaS
+						hKWkAHCGkoSlpACBjACGkoSlpACB
+						qACGkoSlpACBxACGkoSlpACB4ACG
+						koSlpACB/ACGkoSlpACBGAGGkoSl
+						pACBNAGGkoSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Destroyed}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{162, 487.604}, {55, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>148</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwdTdG9wcGVkhoQC
+						aUkBB5KEhIQMTlNEaWN0aW9uYXJ5
+						AJSEAWkDkoSWlgdOU0NvbG9yhpKE
+						hIQHTlNDb2xvcgCUhAFjA4QCZmYA
+						g2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+						hAZOU0ZvbnQelJkchAVbMjhjXQYA
+						AAAUAAAA//5IAGUAbAB2AGUAdABp
+						AGMAYQCEAWYMmwCbAZsAmwCGkoSW
+						lhBOU1BhcmFncmFwaFN0eWxlhpKE
+						hIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+						hARDQ0BTAgCEhIQHTlNBcnJheQCU
+						mQyShISECU5TVGV4dFRhYgCUhAJD
+						ZgAchpKEpaQAOIaShKWkAFSGkoSl
+						pABwhpKEpaQAgYwAhpKEpaQAgagA
+						hpKEpaQAgcQAhpKEpaQAgeAAhpKE
+						paQAgfwAhpKEpaQAgRgBhpKEpaQA
+						gTQBhpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Stopped}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{285.5, 27.96}, {125, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>144</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs24 \cf0 Fragment Callbacks}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{148, 27.96}, {87, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>143</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs24 \cf0 Activity State}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{158.5, 358.868}, {62, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>142</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwdSZXN1bWVkhoQC
+						aUkBB5KEhIQMTlNEaWN0aW9uYXJ5
+						AJSEAWkDkoSWlgdOU0NvbG9yhpKE
+						hIQHTlNDb2xvcgCUhAFjA4QCZmYA
+						g2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+						hAZOU0ZvbnQelJkchAVbMjhjXQYA
+						AAAUAAAA//5IAGUAbAB2AGUAdABp
+						AGMAYQCEAWYMmwCbAZsAmwCGkoSW
+						lhBOU1BhcmFncmFwaFN0eWxlhpKE
+						hIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+						hARDQ0BTAgCEhIQHTlNBcnJheQCU
+						mQyShISECU5TVGV4dFRhYgCUhAJD
+						ZgAchpKEpaQAOIaShKWkAFSGkoSl
+						pABwhpKEpaQAgYwAhpKEpaQAgagA
+						hpKEpaQAgcQAhpKEpaQAgeAAhpKE
+						paQAgfwAhpKEpaQAgRgBhpKEpaQA
+						gTQBhpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Resumed}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{164, 422.736}, {51, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>137</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwZQYXVzZWSGhAJp
+						SQEGkoSEhAxOU0RpY3Rpb25hcnkA
+						lIQBaQOShJaWB05TQ29sb3KGkoSE
+						hAdOU0NvbG9yAJSEAWMDhAJmZgCD
+						ZmYmP4aShJaWBk5TRm9udIaShISE
+						Bk5TRm9udB6UmRyEBVsyOGNdBgAA
+						ABQAAAD//kgAZQBsAHYAZQB0AGkA
+						YwBhAIQBZgybAJsBmwCbAIaShJaW
+						EE5TUGFyYWdyYXBoU3R5bGWGkoSE
+						hBBOU1BhcmFncmFwaFN0eWxlAJSE
+						BENDQFMCAISEhAdOU0FycmF5AJSZ
+						DJKEhIQJTlNUZXh0VGFiAJSEAkNm
+						AByGkoSlpAA4hpKEpaQAVIaShKWk
+						AHCGkoSlpACBjACGkoSlpACBqACG
+						koSlpACBxACGkoSlpACB4ACGkoSl
+						pACB/ACGkoSlpACBGAGGkoSlpACB
+						NAGGkoSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Paused}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{165, 297}, {49, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>136</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwdTdGFydGVkhoQC
+						aUkBB5KEhIQMTlNEaWN0aW9uYXJ5
+						AJSEAWkDkoSWlgdOU0NvbG9yhpKE
+						hIQHTlNDb2xvcgCUhAFjA4QCZmYA
+						g2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+						hAZOU0ZvbnQelJkchAVbMjhjXQYA
+						AAAUAAAA//5IAGUAbAB2AGUAdABp
+						AGMAYQCEAWYMmwCbAZsAmwCGkoSW
+						lhBOU1BhcmFncmFwaFN0eWxlhpKE
+						hIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+						hARDQ0BTAgCEhIQHTlNBcnJheQCU
+						mQyShISECU5TVGV4dFRhYgCUhAJD
+						ZgAchpKEpaQAOIaShKWkAFSGkoSl
+						pABwhpKEpaQAgYwAhpKEpaQAgagA
+						hpKEpaQAgcQAhpKEpaQAgeAAhpKE
+						paQAgfwAhpKEpaQAgRgBhpKEpaQA
+						gTQBhpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Started}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{163, 83.8081}, {53, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>135</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwdDcmVhdGVkhoQC
+						aUkBB5KEhIQMTlNEaWN0aW9uYXJ5
+						AJSEAWkDkoSWlgdOU0NvbG9yhpKE
+						hIQHTlNDb2xvcgCUhAFjA4QCZmYA
+						g2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+						hAZOU0ZvbnQelJkchAVbMjhjXQYA
+						AAAUAAAA//5IAGUAbAB2AGUAdABp
+						AGMAYQCEAWYMmwCbAZsAmwCGkoSW
+						lhBOU1BhcmFncmFwaFN0eWxlhpKE
+						hIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+						hARDQ0BTAgCEhIQHTlNBcnJheQCU
+						mQyShISECU5TVGV4dFRhYgCUhAJD
+						ZgAchpKEpaQAOIaShKWkAFSGkoSl
+						pABwhpKEpaQAgYwAhpKEpaQAgagA
+						hpKEpaQAgcQAhpKEpaQAgeAAhpKE
+						paQAgfwAhpKEpaQAgRgBhpKEpaQA
+						gTQBhpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Created}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>OutlineStyle</key>
+			<string>Basic</string>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>Canvas 4</string>
+			<key>UniqueID</key>
+			<integer>4</integer>
+			<key>VPages</key>
+			<integer>1</integer>
+		</dict>
+	</array>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>YES</string>
+	<key>UseEntirePage</key>
+	<true/>
+	<key>WindowInfo</key>
+	<dict>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>ExpandedCanvases</key>
+		<array/>
+		<key>Frame</key>
+		<string>{{284, -4}, {869, 866}}</string>
+		<key>ListView</key>
+		<false/>
+		<key>OutlineWidth</key>
+		<integer>142</integer>
+		<key>RightSidebar</key>
+		<false/>
+		<key>Sidebar</key>
+		<false/>
+		<key>SidebarWidth</key>
+		<integer>138</integer>
+		<key>VisibleRegion</key>
+		<string>{{-132, 11}, {855, 757}}</string>
+		<key>Zoom</key>
+		<real>1</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>1</real>
+				<real>1.0099999904632568</real>
+			</array>
+			<array>
+				<string>Canvas 3</string>
+				<real>1</real>
+				<real>1</real>
+			</array>
+			<array>
+				<string>Canvas 4</string>
+				<real>1</real>
+				<real>1</real>
+			</array>
+		</array>
+	</dict>
+	<key>saveQuickLookFiles</key>
+	<string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/activity_lifecycle.png b/docs/html/images/activity_lifecycle.png
index aafe493..357349c 100644
--- a/docs/html/images/activity_lifecycle.png
+++ b/docs/html/images/activity_lifecycle.png
Binary files differ
diff --git a/docs/html/images/fragment_lifecycle.png b/docs/html/images/fragment_lifecycle.png
index ce9d395..d207db4 100644
--- a/docs/html/images/fragment_lifecycle.png
+++ b/docs/html/images/fragment_lifecycle.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_backstack.png b/docs/html/images/fundamentals/diagram_backstack.png
index 2c6e33f..bdb6893 100644
--- a/docs/html/images/fundamentals/diagram_backstack.png
+++ b/docs/html/images/fundamentals/diagram_backstack.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png b/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png
index d6a21d7..aab324d 100644
--- a/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png
+++ b/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_multiple_instances.png b/docs/html/images/fundamentals/diagram_multiple_instances.png
index 380e7788..64b476f 100644
--- a/docs/html/images/fundamentals/diagram_multiple_instances.png
+++ b/docs/html/images/fundamentals/diagram_multiple_instances.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_multitasking.png b/docs/html/images/fundamentals/diagram_multitasking.png
index b8c7b45..e219599 100644
--- a/docs/html/images/fundamentals/diagram_multitasking.png
+++ b/docs/html/images/fundamentals/diagram_multitasking.png
Binary files differ
diff --git a/docs/html/images/fundamentals/restore_instance.graffle b/docs/html/images/fundamentals/restore_instance.graffle
new file mode 100644
index 0000000..7489aeb
--- /dev/null
+++ b/docs/html/images/fundamentals/restore_instance.graffle
@@ -0,0 +1,3096 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActiveLayerIndex</key>
+	<integer>0</integer>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGrafflePro</string>
+		<string>138.9.0.117994</string>
+	</array>
+	<key>AutoAdjust</key>
+	<true/>
+	<key>BackgroundGraphic</key>
+	<dict>
+		<key>Bounds</key>
+		<string>{{0, 0}, {1152, 733}}</string>
+		<key>Class</key>
+		<string>SolidGraphic</string>
+		<key>ID</key>
+		<integer>2</integer>
+		<key>Style</key>
+		<dict>
+			<key>shadow</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+			<key>stroke</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+		</dict>
+	</dict>
+	<key>CanvasOrigin</key>
+	<string>{0, 0}</string>
+	<key>ColumnAlign</key>
+	<integer>1</integer>
+	<key>ColumnSpacing</key>
+	<real>36</real>
+	<key>CreationDate</key>
+	<string>2010-09-28 12:06:26 -0700</string>
+	<key>Creator</key>
+	<string>Scott Main</string>
+	<key>DisplayScale</key>
+	<string>1 0/72 in = 1.0000 in</string>
+	<key>GraphDocumentVersion</key>
+	<integer>6</integer>
+	<key>GraphicsList</key>
+	<array>
+		<dict>
+			<key>Bounds</key>
+			<string>{{45.9963, 468.692}, {218, 36}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>296</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBK1MqQWN0aXZpdHkgaW5zdGFuY2UgaXMgZGVz
+				dHJveWVkLCBidXQgdGhlIApzdGF0ZSBmcm9tIG9uU2F2
+				ZUluc3RhbmNlU3RhdGUoKSBpcyBzYXZlZIaEAmlJAVOS
+				hISEDE5TRGljdGlvbmFyeQCUhAFpA5KElpYGTlNGb250
+				hpKEhIQGTlNGb250HpSZHIQFWzI4Y10GAAAAFAAAAP/+
+				SABlAGwAdgBlAHQAaQBjAGEAhAFmC4QBYwCdAZ0AnQCG
+				koSWlgdOU0NvbG9yhpKEhIQHTlNDb2xvcgCUnQOEAmZm
+				AINmZiY/hpKElpYQTlNQYXJhZ3JhcGhTdHlsZYaShISE
+				EE5TUGFyYWdyYXBoU3R5bGUAlIQEQ0NAUwIAhISEB05T
+				QXJyYXkAlJkMkoSEhAlOU1RleHRUYWIAlIQCQ2YAHIaS
+				hKWkADiGkoSlpABUhpKEpaQAcIaShKWkAIGMAIaShKWk
+				AIGoAIaShKWkAIHEAIaShKWkAIHgAIaShKWkAIH8AIaS
+				hKWkAIEYAYaShKWkAIE0AYaShKWkAIFQAYaGAIaGhg==
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs22 \cf2 *Activity instance is destroyed, but the \
+state from onSaveInstanceState() is saved}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>250</integer>
+				<key>Info</key>
+				<integer>8</integer>
+			</dict>
+			<key>ID</key>
+			<integer>295</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{116.49, 219.787}</string>
+				<string>{328.785, 192.997}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>292</integer>
+				<key>Info</key>
+				<integer>2</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{40.449, 219.787}, {152.083, 67.3685}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSansMono</string>
+				<key>NSKern</key>
+				<real>0.0</real>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>292</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.938075</string>
+						<key>g</key>
+						<string>0.938269</string>
+						<key>r</key>
+						<string>0.938154</string>
+					</dict>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.727869</string>
+						<key>g</key>
+						<string>0.728019</string>
+						<key>r</key>
+						<string>0.72793</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.45</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Fuzziness</key>
+					<real>0.0</real>
+					<key>ShadowVector</key>
+					<string>{0.5, 2}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.700224</string>
+						<key>g</key>
+						<string>0.700574</string>
+						<key>r</key>
+						<string>0.700377</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-LightOblique;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate() or\
+onRestoreInstanceState()\
+\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f1 \cf0 \kerning1\expnd0\expndtw0 Restore your activity state}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{64.4905, 349.815}, {104, 38}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>291</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>290</integer>
+				<key>Position</key>
+				<real>0.29431623220443726</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKx5Vc2VyIG5hdmlnYXRlcyB0bwp0aGUgYWN0
+				aXZpdHmGhAJpSQEekoSEhAxOU0RpY3Rpb25hcnkAlIQB
+				aQOShJaWB05TQ29sb3KGkoSEhAdOU0NvbG9yAJSEAWMD
+				hAJmZgCDZmYmP4aShJaWBk5TRm9udIaShISEBk5TRm9u
+				dB6UmRyEBVsyOGNdBgAAABQAAAD//kgAZQBsAHYAZQB0
+				AGkAYwBhAIQBZgybAJsBmwCbAIaShJaWEE5TUGFyYWdy
+				YXBoU3R5bGWGkoSEhBBOU1BhcmFncmFwaFN0eWxlAJSE
+				BENDQFMCAISEhAdOU0FycmF5AJSZDJKEhIQJTlNUZXh0
+				VGFiAJSEAkNmAByGkoSlpAA4hpKEpaQAVIaShKWkAHCG
+				koSlpACBjACGkoSlpACBqACGkoSlpACBxACGkoSlpACB
+				4ACGkoSlpACB/ACGkoSlpACBGAGGkoSlpACBNAGGkoSl
+				pACBUAGGhgCGhoY=
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 User navigates to\
+the activity}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>292</integer>
+				<key>Info</key>
+				<integer>1</integer>
+			</dict>
+			<key>ID</key>
+			<integer>290</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{116.49, 402.872}</string>
+				<string>{116.49, 287.155}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>289</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{56.4525, 403.372}, {120.076, 51.0524}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans-Bold</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>289</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>RoundRect</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.628571</string>
+						<key>g</key>
+						<string>0.768599</string>
+						<key>r</key>
+						<string>1</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.236788</string>
+						<key>g</key>
+						<string>0.532236</string>
+						<key>r</key>
+						<string>0.990271</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.131021</string>
+						<key>g</key>
+						<string>0.363196</string>
+						<key>r</key>
+						<string>0.725948</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 App process\
+killed*}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{213.242, 402.898}, {84, 52}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>288</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>287</integer>
+				<key>Position</key>
+				<real>0.48301887512207031</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKyZBcHBzIHdpdGggCmhpZ2hlciBwcmlvcml0
+				eQpuZWVkIG1lbW9yeYaEAmlJASaShISEDE5TRGljdGlv
+				bmFyeQCUhAFpA5KElpYHTlNDb2xvcoaShISEB05TQ29s
+				b3IAlIQBYwOEAmZmAINmZiY/hpKElpYGTlNGb250hpKE
+				hIQGTlNGb250HpSZHIQFWzI4Y10GAAAAFAAAAP/+SABl
+				AGwAdgBlAHQAaQBjAGEAhAFmDJsAmwGbAJsAhpKElpYQ
+				TlNQYXJhZ3JhcGhTdHlsZYaShISEEE5TUGFyYWdyYXBo
+				U3R5bGUAlIQEQ0NAUwIAhISEB05TQXJyYXkAlJkMkoSE
+				hAlOU1RleHRUYWIAlIQCQ2YAHIaShKWkADiGkoSlpABU
+				hpKEpaQAcIaShKWkAIGMAIaShKWkAIGoAIaShKWkAIHE
+				AIaShKWkAIHgAIaShKWkAIH8AIaShKWkAIEYAYaShKWk
+				AIE0AYaShKWkAIFQAYaGAIaGhg==
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Apps with \
+higher priority\
+need memory}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>289</integer>
+			</dict>
+			<key>ID</key>
+			<integer>287</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{328.785, 428.899}</string>
+				<string>{176.528, 428.898}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>155</integer>
+				<key>Info</key>
+				<integer>8</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{510.123, 297.165}, {115.508, 29.9264}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSansMono</string>
+				<key>NSKern</key>
+				<real>0.0</real>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>285</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.938075</string>
+						<key>g</key>
+						<string>0.938269</string>
+						<key>r</key>
+						<string>0.938154</string>
+					</dict>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.727869</string>
+						<key>g</key>
+						<string>0.728019</string>
+						<key>r</key>
+						<string>0.72793</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.45</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Fuzziness</key>
+					<real>0.0</real>
+					<key>ShadowVector</key>
+					<string>{0.5, 2}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.700224</string>
+						<key>g</key>
+						<string>0.700574</string>
+						<key>r</key>
+						<string>0.700377</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onRestart()}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{489.377, 233.692}, {157, 38}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>271</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>258</integer>
+				<key>Position</key>
+				<real>0.19835080206394196</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKzlBY3Rpdml0eSBpbnN0YW5jZSBpcyBpbnRh
+				Y3Q7Cm5vIG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGWG
+				hAJpSQE5koSEhAxOU0RpY3Rpb25hcnkAlIQBaQOShJaW
+				B05TQ29sb3KGkoSEhAdOU0NvbG9yAJSEAWMDhAJmZgCD
+				ZmYmP4aShJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyE
+				BVsyOGNdBgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBh
+				AIQBZgybAJsBmwCbAIaShJaWEE5TUGFyYWdyYXBoU3R5
+				bGWGkoSEhBBOU1BhcmFncmFwaFN0eWxlAJSEBENDQFMC
+				AISEhAdOU0FycmF5AJSZDJKEhIQJTlNUZXh0VGFiAJSE
+				AkNmAByGkoSlpAA4hpKEpaQAVIaShKWkAHCGkoSlpACB
+				jACGkoSlpACBqACGkoSlpACBxACGkoSlpACB4ACGkoSl
+				pACB/ACGkoSlpACBGAGGkoSlpACBNAGGkoSlpACBUAGG
+				hgCGhoY=
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Activity instance is intact;\
+no need to restore the state}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>250</integer>
+				<key>Info</key>
+				<integer>7</integer>
+			</dict>
+			<key>ID</key>
+			<integer>258</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{567.877, 297.165}</string>
+				<string>{446.785, 192.997}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>285</integer>
+				<key>Info</key>
+				<integer>2</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{514.377, 349.44}, {107, 38}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>256</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>255</integer>
+				<key>Position</key>
+				<real>0.8136177659034729</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKx9Vc2VyIG5hdmlnYXRlcyB0byAKdGhlIGFj
+				dGl2aXR5hoQCaUkBH5KEhIQMTlNEaWN0aW9uYXJ5AJSE
+				AWkDkoSWlgdOU0NvbG9yhpKEhIQHTlNDb2xvcgCUhAFj
+				A4QCZmYAg2ZmJj+GkoSWlgZOU0ZvbnSGkoSEhAZOU0Zv
+				bnQelJkchAVbMjhjXQYAAAAUAAAA//5IAGUAbAB2AGUA
+				dABpAGMAYQCEAWYMmwCbAZsAmwCGkoSWlhBOU1BhcmFn
+				cmFwaFN0eWxlhpKEhIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+				hARDQ0BTAgCEhIQHTlNBcnJheQCUmQyShISECU5TVGV4
+				dFRhYgCUhAJDZgAchpKEpaQAOIaShKWkAFSGkoSlpABw
+				hpKEpaQAgYwAhpKEpaQAgagAhpKEpaQAgcQAhpKEpaQA
+				geAAhpKEpaQAgfwAhpKEpaQAgRgBhpKEpaQAgTQBhpKE
+				paQAgVABhoYAhoaG
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 User navigates to \
+the activity}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>285</integer>
+				<key>Info</key>
+				<integer>1</integer>
+			</dict>
+			<key>ID</key>
+			<integer>255</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{446.785, 428.899}</string>
+				<string>{567.877, 327.091}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>155</integer>
+				<key>Info</key>
+				<integer>7</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>155</integer>
+			</dict>
+			<key>ID</key>
+			<integer>254</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{387.786, 353.684}</string>
+				<string>{387.785, 403.814}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>192</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{328.785, 403.814}, {118, 50.1697}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica-Bold</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>155</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>RoundRect</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.938075</string>
+						<key>g</key>
+						<string>0.938269</string>
+						<key>r</key>
+						<string>0.938154</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.727869</string>
+						<key>g</key>
+						<string>0.728019</string>
+						<key>r</key>
+						<string>0.72793</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.472997</string>
+						<key>g</key>
+						<string>0.473094</string>
+						<key>r</key>
+						<string>0.473036</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Activity is\
+not visible}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{322.285, 234.471}, {131, 38}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>199</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKypBbm90aGVyIGFjdGl2aXR5IGNvbWVzCmlu
+				dG8gdGhlIGZvcmVncm91bmSGhAJpSQEqkoSEhAxOU0Rp
+				Y3Rpb25hcnkAlIQBaQOShJaWB05TQ29sb3KGkoSEhAdO
+				U0NvbG9yAJSEAWMDhAJmZgCDZmYmP4aShJaWBk5TRm9u
+				dIaShISEBk5TRm9udB6UmRyEBVsyOGNdBgAAABQAAAD/
+				/kgAZQBsAHYAZQB0AGkAYwBhAIQBZgybAJsBmwCbAIaS
+				hJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1BhcmFn
+				cmFwaFN0eWxlAJSEBENDQFMCAISEhAdOU0FycmF5AJSZ
+				DJKEhIQJTlNUZXh0VGFiAJSEAkNmAByGkoSlpAA4hpKE
+				paQAVIaShKWkAHCGkoSlpACBjACGkoSlpACBqACGkoSl
+				pACBxACGkoSlpACB4ACGkoSlpACB/ACGkoSlpACBGAGG
+				koSlpACBNAGGkoSlpACBUAGGhgCGhoY=
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Another activity comes\
+into the foreground}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>DroidSans</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>192</integer>
+			</dict>
+			<key>ID</key>
+			<integer>196</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{387.785, 218.582}</string>
+				<string>{387.786, 297.165}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>250</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{318.17, 297.165}, {139.231, 56.5192}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>DroidSansMono</string>
+				<key>NSKern</key>
+				<real>0.0</real>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>192</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.938075</string>
+						<key>g</key>
+						<string>0.938269</string>
+						<key>r</key>
+						<string>0.938154</string>
+					</dict>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.727869</string>
+						<key>g</key>
+						<string>0.728019</string>
+						<key>r</key>
+						<string>0.72793</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.45</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Fuzziness</key>
+					<real>0.0</real>
+					<key>ShadowVector</key>
+					<string>{0.5, 2}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.700224</string>
+						<key>g</key>
+						<string>0.700574</string>
+						<key>r</key>
+						<string>0.700377</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-LightOblique;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onSaveInstanceState()\
+\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f1 \cf0 \kerning1\expnd0\expndtw0 Save your activity state}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{328.785, 167.912}, {118, 50.1697}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica-Bold</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>250</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>RoundRect</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.274119</string>
+						<key>g</key>
+						<string>0.950739</string>
+						<key>r</key>
+						<string>0.787494</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.223529</string>
+						<key>g</key>
+						<string>0.776471</string>
+						<key>r</key>
+						<string>0.643137</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.165602</string>
+						<key>g</key>
+						<string>0.586124</string>
+						<key>r</key>
+						<string>0.428309</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Activity\
+running}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+	</array>
+	<key>GridInfo</key>
+	<dict/>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>HPages</key>
+	<integer>2</integer>
+	<key>ImageCounter</key>
+	<integer>1</integer>
+	<key>KeepToScale</key>
+	<false/>
+	<key>Layers</key>
+	<array>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>Layer 1</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+	</array>
+	<key>LayoutInfo</key>
+	<dict>
+		<key>Animate</key>
+		<string>NO</string>
+		<key>circoMinDist</key>
+		<real>18</real>
+		<key>circoSeparation</key>
+		<real>0.0</real>
+		<key>layoutEngine</key>
+		<string>dot</string>
+		<key>neatoSeparation</key>
+		<real>0.0</real>
+		<key>twopiSeparation</key>
+		<real>0.0</real>
+	</dict>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2012-01-03 15:51:55 -0800</string>
+	<key>Modifier</key>
+	<string>Scott Main</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>Orientation</key>
+	<integer>2</integer>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>41</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+	</dict>
+	<key>PrintOnePage</key>
+	<false/>
+	<key>QuickLookPreview</key>
+	<data>
+	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
+	iADj3I8j6oXpNDXXRFXry7e5SjC72vhSL3Hiy6S+ZFtMl3po/cSWP3uaWSQ3+ckCA37r
+	zpSA8nqmFtbBdRs/lItEnX7apiufzG7z0dGqca8efV1l/597RhgNFol1eu5Ynxz9fH14
+	/IS894lXR7nD+mxBf5SNNFqlmuNRUSOxnFCqK9bcHjRYvj7AKHkuLLUFzDQ11h16Gynd
+	IAI/eIK9CMF1KNIL6TToUrimB8EWgqs5yohSkz1X3/ntE15Iy/jm3qEs0V4ycNXmKgK3
+	l6dTn86Gcq/kmF1ENi7cXDIoVK8iKi3d6fG9AzMh3JngcKXN6yUtx8UDHo/h9vpcO6E+
+	fsKrWJER9AvpDm4emELwZgL3DZDiiJ7ZrEk2unDIpPID4O9Yn79ZZwibV1n0BVqxt7a2
+	uhvTT9XWTqZrrqTFdjE6Uzv19WHRN7VIHf6HYvNcGY8K8p2APkJiFsYR9HHatNBFMWI7
+	T1udMXPN5owdasMRrxCQxGYzb8/41A2RB23xkTk+tKp7vucndXh6rnx4CUnpqb3cB+LN
+	t+78kgw1kWB1DdtGApW+iu+gE8mK3UFG5ThRuf30P91lQ1cKZW5kc3RyZWFtCmVuZG9i
+	ago2IDAgb2JqCjM4MzMKZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVu
+	dCA0IDAgUiAvUmVzb3VyY2VzIDcgMCBSIC9Db250ZW50cyA1IDAgUiAvTWVkaWFCb3gg
+	WzAgMCAxMTUyIDczM10KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERG
+	IC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2UgPDwgL0Nz
+	MiAxNiAwIFIKL0NzMSA4IDAgUiA+PiAvRXh0R1N0YXRlIDw8IC9HczUgMjMgMCBSIC9H
+	czMgMjQgMCBSIC9HczIgMjUgMCBSIC9HczEgMjYgMCBSCi9HczQgMjcgMCBSID4+IC9G
+	b250IDw8IC9GNC4wIDIyIDAgUiAvRjIuMCAxOCAwIFIgL0YzLjAgMTkgMCBSIC9GMS4w
+	IDE3IDAgUgo+PiAvWE9iamVjdCA8PCAvSW0yIDExIDAgUiAvSW0zIDEzIDAgUiAvSW0x
+	IDkgMCBSID4+IC9TaGFkaW5nIDw8IC9TaDEgMTUgMCBSCi9TaDMgMjEgMCBSIC9TaDIg
+	MjAgMCBSID4+ID4+CmVuZG9iagoxNSAwIG9iago8PCAvQ29sb3JTcGFjZSAyOCAwIFIg
+	L1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDU5LjUgLTI1LjU4NDg1IDU5LjQ5OTk4IDI1
+	LjU4NDg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9G
+	dW5jdGlvbiAyOSAwIFIgPj4KZW5kb2JqCjIxIDAgb2JqCjw8IC9Db2xvclNwYWNlIDI4
+	IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNjAuNTM4IC0yNi4wMjYyIDYwLjUz
+	Nzk4IDI2LjAyNjIyCl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxz
+	ZSBdIC9GdW5jdGlvbiAzMCAwIFIgPj4KZW5kb2JqCjIwIDAgb2JqCjw8IC9Db2xvclNw
+	YWNlIDI4IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTkuNSAtMjUuNTg0ODUg
+	NTkuNDk5OTggMjUuNTg0ODcKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNl
+	IGZhbHNlIF0gL0Z1bmN0aW9uIDMxIDAgUiA+PgplbmRvYmoKMTEgMCBvYmoKPDwgL0xl
+	bmd0aCAxMiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAy
+	NTggL0hlaWdodCAxMjIgL0ludGVycG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgMzIgMCBS
+	IC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDMzIDAgUiAvQml0c1BlckNvbXBvbmVu
+	dAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QgQAAAADDoPlTH+SF
+	UGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAED7wMDcOsAAQplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjQzNAplbmRvYmoKMTMg
+	MCBvYmoKPDwgL0xlbmd0aCAxNCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0lt
+	YWdlIC9XaWR0aCAyNjIgL0hlaWdodCAxMjQgL0ludGVycG9sYXRlCnRydWUgL0NvbG9y
+	U3BhY2UgMzIgMCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDM1IDAgUiAvQml0
+	c1BlckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3Q
+	AQ0AAADCoPdPbQ8HESgMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYeBgZ8xwABCmVuZHN0cmVhbQplbmRv
+	YmoKMTQgMCBvYmoKNDQ4CmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9U
+	eXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjU4IC9IZWlnaHQgMTIy
+	IC9JbnRlcnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDMyIDAgUiAvSW50ZW50IC9QZXJj
+	ZXB0dWFsIC9TTWFzayAzNyAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9G
+	bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABA+8DA3DrAAEKZW5k
+	c3RyZWFtCmVuZG9iagoxMCAwIG9iago0MzQKZW5kb2JqCjM1IDAgb2JqCjw8IC9MZW5n
+	dGggMzYgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjYy
+	IC9IZWlnaHQgMTI0IC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0
+	cnVlIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3Ry
+	ZWFtCngB7V1XWyJLEHXIOQeJSs5IRrJkkIyA7v//I7eqB5SsuPtwp6EfZGAXvukzVedU
+	V3dX393d2g2BGwI3BG4I3BD4SwQYhsfj8bnT4G4Z5i/7vPt1hscXCEUisUTKnSYRi4QC
+	/j9DAiEQSWRypUqt1eq40rQatUopl4qFgn8BBGAglMiUGp3RbLHZHQ4nN5rDYbNaTAad
+	WiETC8Eidm37wneAgUiqUOvNtgePPxiOxuLxJy60eDwWDQd8bqfVpFPJJUL+38DA8IVS
+	hdZoe/SFn9K5QqlcqXKlVcrF52wqHvI+WAxquVj4a3NgeAKxXGOye0JP2WKl3mx3ur0+
+	V1qv22k1XsrP6VjAZTWoZSLghwsdgfx3NASVweYOJ/OVRrs3GI4nk+mMK206GY+Gr91W
+	vZx7CroseqXkV+bA8EVy7f1jMJGvtnqD8XT+tlgulyuutOVysXibTUaDbqOSi/udJjCH
+	y9kBvEGpt3lj2UqzP5rOF8vV+/v7B7Q/XGh4o3C/q+XbfDLsNkrpiNuik18MA08gURmd
+	gWSx3h1O3xACrgDw+ZBYJFaL+WTQqeXjPrteIb7MGngCqdr0GM5UWoMJNzH48wdRQIsA
+	HMb9ZikZcBiUF8GAIJhd0VytO5otWDvgiCt8WgK5WOOwfJsO2pV0yGm8BAZGIFGb3dF8
+	vTeegzOQ39r9ec68Y3FYLWajTjUTfrgABoYvVplcAEIfvIFDlHji0aBbrJbzcbeWDTsN
+	ih9SJICgND6yIBBvOPHrXPkYzeH9ffkGMGRCDr38Z3EDT6QwOMM5sASgBPgFrvT2zH1u
+	YKimAzadTMj7PojkCWU6ezBT24BAAwqoF2gNnUrSZ1FLBN/G0gxforb4UpXu+I3lxTMQ
+	c+efWKeYj9qluNv0A6HgiZQmd7zUHtEEAjwu4hSzQfM54kRqOO8TjFCmd0byzcF8yZ14
+	+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
+	VksolT/qt6r5Jzw6QfqzStCEGjd/yCEaRrs3mim+tPvD8XQGJ0hAg0Mk/v8Nb/RtjsdH
+	9Fq1QirstsIxGr86TQQPVFFozU5fLF2owmEir4PhaAzniXChjcdwksigD0eJVPKpiNdu
+	UsPhET+LEzZW8PkKXiFV6u+d3nAiW6jUGs1Wu8OR1m63mvVa+TkTD3kcZq3ib44ZQnOQ
+	qXRmu8sXjiczuXyhWCyW/v8N7rKQz6YTMThiyGbSKqVgCN+MpT8f/bELgoNSYzDbnC6P
+	LxAMhTnRQqGg3+d5dFhNerVC+tvzhbYAARxEErlSrTMYzfcWi5UbzWIxm4x67T85eowF
+	gxxEJ5bKFUqVSs2RplIplQoZHkP3d76wZQ44zsRTCfFYQq40kUj4L48k/ESDgQaHPnKl
+	wd1+3vrt4obADYEbAjcEfoXAf13V5EoKZW5kc3RyZWFtCmVuZG9iagozNiAwIG9iagoy
+	NzczCmVuZG9iagozNyAwIG9iago8PCAvTGVuZ3RoIDM4IDAgUiAvVHlwZSAvWE9iamVj
+	dCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAvQ29sb3JTcGFj
+	ZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae1dZ1viQBA2IE2aAQGRDgIC
+	BkQ6iEjvHfT8/3/kZjaAAqHo3Qezsh8OVC5P5uWdtpmdOTs7rRMCJwROCJwQOCFwHAIM
+	I5FIpGJZEgnDHCfXcZ8C6aXnMrlCqVSJYykVCrnsXCr5TygwknOZQqXW6PSXLGsQw2LZ
+	S51Wc6GU/xcQGOm5QqXRs1fm6xub3eEUwXI47DarxWS81KoBhH8kAiOVKS50BtONw3Mb
+	DEe4aDT241c0yt1HQgGfy359dalR/RMGwH+Q33jt9N1x8VQ2/1R8FsUqPhVy6UQsEvDY
+	zKxWJZN+1x4AAVQ6o9UVuH/MPJUqtUaz1RbFajWb9Wr5OZ96CPscZlaj+J4qIAHUrMUV
+	4JKFUq3Z6fUHw9FoLIY1Gg0H/W67USlmHyM+u0l/If8GDRgJEODKfnufLJQbnf5wPJ3N
+	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
+	EkEbK5wSrQOBveks3mi+1uNbs4mdB2gDoDFb+yUVchj3hQIfMECOqLfePkB7PrE3aERD
+	DvITAMrpiAuakh3UAYID9qiEFo3QpHMBgWhpQDTgbdGj0m0+rkEjYoDW0AYQVLsjCA7B
+	HoozOkT5QQOgT2nrBVu1QsPeQ1ZwqQl8q1Z/LFdpDxadOsUXGfDyQzIw7jVKqciXAECH
+	IFOzNz4u89LsQb9q8dGAiE8aV0+GndpTIuT6cstmtAXXnkgSe1ZDz2ax6QLhPyjAdNRr
+	lnPxoMP0xZ7VhAUqvdkZfMiV6oDBdAnCzzcJC/aTvuXDXrtaTHG3NiN28F8q+ZGv0Lxf
+	qTXafJFE/qXe7g3HE0AB109vXk9ucga960eDbrP6nHm4c12z6iPd4Do4OL/g0uL0c4l8
+	qdpod2F+AQww+PETDOAWcXxBr9Oql4uZeNhru9J9d4wFzrDQGq6d/kg8XXguV+swxKL1
+	48dYwC02m41a9aWYS8ZCXrv5Uv3NGRZACNAEOcwxsTi8wfuHZDpXeCoWf/4okyKMMcln
+	U4/RsN9tM7Ea5ffnmPAYKC60rMlqd/sCofA9x8E4mx++OBhlEw76vU6bxaiHWTb/OtgJ
+	eaBS61ijyWLFgUYiWHa77cZqvjLotRcK2b/Kj7YRRnrJ5MoLjZYMtWJh/eC5Vnh7MNJK
+	r9OqLxT/Z6YVYoAgwFwzsQw2Uy7Hmv3jOCsi+sc/jIiG28EUvv882+4Dh9O7EwInBE4I
+	0IjAXxMa0M0KZW5kc3RyZWFtCmVuZG9iagozOCAwIG9iagoyNjI4CmVuZG9iagozMyAw
+	IG9iago8PCAvTGVuZ3RoIDM0IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1h
+	Z2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAv
+	SW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRl
+	RGVjb2RlID4+CnN0cmVhbQp4Ae1dZ1viQBA2IE2aAQGR3gUMiAgiVXrvoOf//yM3swEU
+	CEXvPpiV/XCgcnkyL++0zezM2dlpnRA4IXBC4ITACYHjEGAYiUQiFcuSSBjmOLmO+xRI
+	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
+	RXh0R1N0YXRlIC9DQSAxID4+CmVuZG9iagoyNCAwIG9iago8PCAvVHlwZSAvRXh0R1N0
+	YXRlIC9jYSAxID4+CmVuZG9iagoyNSAwIG9iago8PCAvVHlwZSAvRXh0R1N0YXRlIC9j
+	YSAwLjcgPj4KZW5kb2JqCjI2IDAgb2JqCjw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAu
+	NyA+PgplbmRvYmoKMjcgMCBvYmoKPDwgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMC42NSA+
+	PgplbmRvYmoKMzkgMCBvYmoKPDwgL0xlbmd0aCA0MCAwIFIgL04gMyAvQWx0ZXJuYXRl
+	IC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBhVTPaxNB
+	FP42bqnQIghaaw6yeJAiSVmraEXUNv0RYmsM2x+2RZBkM0nWbjbr7ia1pYjk4tEq3kXt
+	oQf/gB568GQvSoVaRSjeqyhioRct8c1uTLal6sDOfvPeN+99b3bfAA1y0jT1gATkDcdS
+	ohFpbHxCavyIAI6iCUE0JVXb7E4kBkGDc/l759h6D4FbVsN7+3eyd62a0raaB4T9QOBH
+	mtkqsO8XcQpZEgKIPN+hKcd0CN/j2PLsjzlOeXjBtQ8rPcRZInxANS3Of024U80l00CD
+	SDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cmu8zuq2KhnE72DpC9nfR+TrPePsIhwgsZrT9G
+	uI2e9YzVP+Jh4aTmxIY9HBg19PhgFbcaqfg1whRfEE0nolRx2S4N8Ziu/VbySoJwkDjK
+	ZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHheY8TZ97U3e9F2gKvMA4dDBoMmg1IUBBFBGGY
+	sFBAhjwaMTSycj8jqwYbk3sydSRqu3RiRLFBezbcPbdRpN08/igicZRDtQiS/EH+Kq/J
+	T+V5+ctcsNhW95Stm5q68uA7xeWZuRoe19PI43NNXnyV1HaTV0eWrHl6vJrsGj/sV5cx
+	5oI1j8RzsPvxLV+VzJcpjBTF41Xz6kuEdVoxN9+fbH87PeIuzy611nOtiYs3VpuXZ/1q
+	SPvuqryT5lX5T1718fxnzcRj4ikxJnaK5yGJl8Uu8ZLYS6sL4mBtxwidlYYp0m2R+iTV
+	YGCavPUvXT9beL1Gfwz1UZQZzNJUifd/wipkNJ25Dm/6j9vH/Bfk94rnnygCL2zgyJm6
+	bVNx7xChZaVuc64CF7/RffC2bmujfjj8BFg8qxatUjWfILwBHHaHeh7oKZjTlpbNOVKH
+	LJ+TuunKYlLMUNtDUlLXJddlSxazmVVi6XbYmdMdbhyhOUL3xKdKZZP6r/ERsP2wUvn5
+	rFLZfk4a1oGX+m/AvP1FCmVuZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKNzM3CmVuZG9i
+	ago4IDAgb2JqClsgL0lDQ0Jhc2VkIDM5IDAgUiBdCmVuZG9iago0MSAwIG9iago8PCAv
+	TGVuZ3RoIDQyIDAgUiAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9G
+	bGF0ZURlY29kZSA+PgpzdHJlYW0KeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2
+	/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3x
+	zW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQG
+	QYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY
+	8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1P
+	kKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAV
+	txqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndW
+	UeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7
+	dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5
+	Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPq
+	S4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEm
+	dornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ
+	93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+
+	OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZ
+	VWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UUKZW5kc3Ry
+	ZWFtCmVuZG9iago0MiAwIG9iago3MzcKZW5kb2JqCjI4IDAgb2JqClsgL0lDQ0Jhc2Vk
+	IDQxIDAgUiBdCmVuZG9iago0MyAwIG9iago8PCAvTGVuZ3RoIDQ0IDAgUiAvTiAzIC9B
+	bHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+	eAHVeWdYFMuzd89sXnaXnNOSc845gySJEpWcM0sOIiAgQUFAEQFFQUVEBVGiJFFQxIOI
+	ggoGgkgQFQOCgvIOes753/e59357v7z9PNv7m6rq6pqp7p6qGgA4V7yjosJgBgDCI2Jp
+	9maGVBdXNypuChABD6AHvEDR2zcmysDW1gr8r+3bBIB2mI9ldnT9r2L/M4PRzz/GFwDI
+	FmH7+MX4hiP4BgCwoW8ULRYA1AZCH02IjUIw+h6CWWiIgQh+sYMD/+DVHezzG2PQv2Uc
+	7Y0AwHAAgCd5e9MCASALI3RqvG8goodsDACWKcIvOAIAZhcE6/oGefsBwFmOyEiHh0fu
+	4DsIFvf5L3oC/wv29vb5V6e3d+C/+M+9ICORiY2DY6LCvJN+X/y/7MLD4pDn9bsxIT0p
+	Imz3jm/YkN+in7exJfLPg/x+RYX99hkiA3H5R+xxQGg7WDrCZ7fN31g3gGZqj2BkLGQb
+	FWu4g5FnBgVExdo6/k1PSw4y2o1gEkI/5h9j8o+eMyHeFjs+oyD0Zlqc/R4ECyO4Lybe
+	wQTByIqC3iQHOTr/LfPVz9/4bzoMBwSbmv+RgZmCY8135mJBfC4YGmm5YwMyF6wKLEEY
+	8AdxgIb0EUAGWAEjYPx3LwMCgDfCiUd4MSAUvEVwODIiEhkTiWDq33JG/41i+ntcIDLu
+	/9ZIBb6IbNy/c/6ZjYrM+Y/OYOCH4H/o3sgcO7wd62I8gzP/M+c/Ejv6flsj3yC/JL/1
+	j01oUbQiWgVtiNZB66I1ABXNhuYCMmhltDraAK2H1kJ4GsAUvEE0B/5j447+8OaA+PLI
+	JE2nIIS7c+8+/3CB02/p4H+v/5sFIHhkpW3lHwsAiPVPRPYBAEaRUUm04MCgWKoBsnP9
+	panmEb6y0lRFeQWFHfb/N23nzPpj7Bf732cRxPbwP7RI5GY0ds6Yg/+heX0AoC0E2aZM
+	/6GJtgFArwjA0AnfOFr8H33onT8MchrSIyuUE/ABISCOPGdFoAq0gD4wARbABjgCV+CB
+	rJ8gZA3SQAJIBRkgBxSAo+A4qADVoBZcBFdAM2gDXeAWGATDYBSMgykwDebBO7AKvoFN
+	CIJwEBlihjghfkgEkoIUIXVIFzKBrCB7yBXyggKhCCgOSoUOQgVQCVQBnYXqoWtQB3QL
+	GoIeQc+hGWgJ+gz9gFEwCWaBeWFRWA5Whw1gS9gR3gcHwtFwMpwFF8LlcA18GW6Fb8HD
+	8Dg8Db+D11AARYdiQwmgZFDqKCOUDcoNFYCiodJQ+agyVA3qKqoTdRf1GDWNWkF9R2PR
+	zGgqWgZZp7vQe9C+6Gh0GvowugJ9Ed2KvoN+jJ5Br6J/YcgYHowURhNjjnHBBGISMDmY
+	MswFTAtmADOOmcd8w2KxbFgxrBp2F9YVG4JNwR7GnsI2Yvuwj7Bz2DUcDseJk8Lp4Gxw
+	3rhYXA7uJO4yrhc3hpvHbeDp8Px4Rbwp3g0fgc/El+Ev4XvwY/gF/CaBgSBC0CTYEPwI
+	SYQiwjlCJ+EhYZ6wSWQkihF1iI7EEGIGsZx4lThAfEH8QkdHJ0inQWdHF0yXTldO10R3
+	j26G7juJiSRJMiLtJcWRCkl1pD7Sc9IXMpksStYnu5FjyYXkevJt8ivyBoWZIksxp/hR
+	DlAqKa2UMcoHegK9CL0BvQd9Mn0Z/XX6h/QrDAQGUQYjBm+GNIZKhg6GpwxrjMyMCow2
+	jOGMhxkvMQ4xLjLhmESZTJj8mLKYapluM80xo5iFmI2YfZkPMp9jHmCeZ8GyiLGYs4Sw
+	FLBcYRlhWWVlYlVmdWJNZK1k7WadZkOxibKZs4WxFbE1s02w/WDnZTdg92fPY7/KPsa+
+	zsHNoc/hz5HP0cgxzvGDk8ppwhnKWczZxvmSC80lyWXHlcB1mmuAa4WbhVuL25c7n7uZ
+	e5IH5pHksedJ4anlecCzxsvHa8YbxXuS9zbvCh8bnz5fCN8xvh6+JX5mfl3+YP5j/L38
+	y1RWqgE1jFpOvUNdFeAR2CUQJ3BWYERgU1BMcI9gpmCj4EshopC6UIDQMaF+oVVhfmFr
+	4VThBuFJEYKIukiQyAmRuyLromKizqKHRNtEF8U4xMzFksUaxF6Ik8X1xKPFa8SfSGAl
+	1CVCJU5JjErCkiqSQZKVkg+lYClVqWCpU1KPpDHSGtIR0jXST2VIMgYy8TINMjOybLJW
+	spmybbIf5ITl3OSK5e7K/ZJXkQ+TPyc/pcCkYKGQqdCp8FlRUtFXsVLxiRJZyVTpgFK7
+	0idlKWV/5dPKz1SYVaxVDqn0q/xUVVOlqV5VXVITVvNSq1J7qs6ibqt+WP2eBkbDUOOA
+	RpfGd01VzVjNZs2PWjJaoVqXtBa1xbT9tc9pz+kI6njrnNWZ1qXqeume0Z3WE9Dz1qvR
+	m9UX0vfTv6C/YCBhEGJw2eCDobwhzbDFcN1I02i/UZ8xytjMON94xITJZI9JhckrU0HT
+	QNMG01UzFbMUs75dmF2Wu4p3PTXnNfc1rzdftVCz2G9xx5Jk6WBZYTlrJWlFs+q0hq0t
+	rEutX+wW2R2xu80G2JjblNq8tBWzjba9aYe1s7WrtHtrr2Cfan/XgdnB0+GSwzdHQ8ci
+	x6k94nvi9vQ70Tvtdap3Wnc2di5xnnaRc9nvMuzK5Rrs2u6Gc3Nyu+C25m7iftx9fq/K
+	3py9E/vE9iXuG/Lg8gjz6Pak9/T2vO6F8XL2uuS15W3jXeO95mPuU+Wz6mvke8L3nZ++
+	3zG/JX8d/xL/hQCdgJKAxUCdwNLApSC9oLKglWCj4IrgTyG7QqpD1kNtQutCt8OcwxrD
+	8eFe4R0RTBGhEXci+SITIx9FSUXlRE1Ha0Yfj16lWdIuxEAx+2LaY1mQ4PBBnHhcdtxM
+	vG58ZfxGglPC9UTGxIjEB0mSSXlJC8mmyedT0Cm+Kf2pAqkZqTP7DfafTYPSfNL6Dwgd
+	yDown26WfjGDmBGa8VemfGZJ5teDzgc7s3iz0rPmss2yG3IoObScp4e0DlXnonODc0fy
+	lPJO5v3K98u/XyBfUFawddj38P0jCkfKj2wXBhSOFKkWnT6KPRpxdKJYr/hiCWNJcslc
+	qXVp6zHqsfxjX497Hh8qUy6rPkE8EXdiutyqvP2k8MmjJ7cqgirGKw0rG6t4qvKq1k/5
+	nRo7rX/6ajVvdUH1jzPBZ56dNTvbWiNaU1aLrY2vfXvO6dzd8+rn6y9wXSi48LMuom76
+	ov3FO/Vq9fWXeC4VNcANcQ1Ll/deHr1ifKX9qszVs41sjQVNoCmuafma17WJZsvm/uvq
+	16/eELlR1cLckt8KtSa1rrYFtU23u7Y/6rDo6O/U6my5KXuzrkugq7Kbtbuoh9iT1bPd
+	m9y71hfVt3Ir8NZcv2f/1G2X20/u2N0ZGbAcuDdoOnj7rsHd3ns697qGNIc67qvfbxtW
+	HW59oPKg5S+Vv1pGVEdaH6o9bB/VGO18pP2oZ0xv7NZj48eDT8yfDI/vHn80sWfi2dO9
+	T6ef+T1bfB72/NNk/OTmVPoLzIv8lwwvy17xvKp5LfG6cVp1unvGeObBrMPs1Jzv3Ls3
+	MW+25rPekt+WLfAv1C8qLnYtmS6NLrsvz7+Lere5kvOe8X3VB/EPNz7qf3yw6rI6/4n2
+	afvz4S+cX+q+Kn/tX7Nde/Ut/Nvmev4G58bF7+rf7/5w/rGwmbCF2yr/KfGz85flrxfb
+	4dvbUd4079+xAArp4YAAAD7XITmEK5I7jAJApPzJKX5LIOkKhMggGIdEChZIBDAHSSLv
+	7T6YE46FJ1HmqNtoM/QTTDiWEduPS8XrEnCEl8QOuipSEbmO8oKBgdGSKY95iJWRbS/7
+	ZU40lzd3Ny+V7zD/hoCf4KTwbpEhMTnxQol3UubS1TLf5IzkjyiMKpGVDVViVKvU+tSn
+	NX5qsWtL6WjomujZ6/saxBhmGZ0wbjDpNX1strRr24LVUtrKyNp9d7BNvG22XYl9tUOD
+	Yxuy64edx1yeu752m3Nf3Pt+36LHC88Rr17vRp/Tvkf8kv0DAuwCtYKEgynB30Jehw6G
+	1YcfiYiKdIhSi+aK3qK9iumLrY3Ljg9IME+USiImLSc/SGlKLd+flZZwIDqdlpGcmX/w
+	bFZ39utDhFztvKj82oKJI8RC7aLwo6eLR0p+HpM+7l6Wf6K1fLqCrlKlyvNU3unm6qmz
+	6BqZWqdzB85fvPCobqOeesmqIfVy85VPjZpNRdc+Xne/8bDVpu1Jh3Zn7M36rhc9dL1K
+	fU63ovuzbxffKRsoGyy+m3vv4NCh+0eGjzzI/it2xPmh7MPN0b5HKWOqY98eP33SMV4x
+	sf+p5zPD5yKThMn3U49etLyseLX/tde08YzELMPs97m3bybmh97eWri52LHUsXz+XeFK
+	/HuPDyYfpVYZVtc+TX7u+XL2a/Za0DfLdbkN5o317y9+9G3WbGX99P9lvC24vY34Hwu4
+	kOgwEQwgEZ0VdBR6DSshsdcXlCdqAomaXmKisBRsG84fz4WfJFQRA+kMSTpkR0oQfTrD
+	GcZbTEssrKzGbEnsjRwfuWS5aTxdfHT8TtRLAttCBsIZIr2iW+JqEiGSp6SGpT/Lssop
+	ye9ScFcMVIpWTlLZr5qsFqLurmGlqaMlry2ow6qL1/2h915/xmDc8L5Rj/F1kzrTcrPc
+	XQnmQRaulrus1K3FdrPaoG2+2s7aPbLvc2hyPL0n1ynG2cPF3FXJjdcd6/4BOem7PWo9
+	870ivR19lH1JvrN+Hf5FAQGB2kGMQW+Db4YUh/qHaYbTh89FtEXmRrlGSyHrYiTmTCwt
+	ziieNX4hoSPxcJJHsnwKnPI0tXF/QVr4gT3pxhmamRoHdbJ2ZbvkRBw6lHs+73b+TMGv
+	IzyFGkVOR2OKj5ZcLh069rYMPsFTrnrSriK8sqDq8qnR09/OCJ61rTlY23Hu0wXZuuiL
+	N+rXGzQup17paQRNBtcONg/cwLSYtea23e3AdZrczOzq7v7aK9rncCul//Ttm3fGB5YG
+	1++hh5jvCwzLPdD5y2rE7WHQaMKjnLHjj2ueNI53TQw9nXg2//zrFOoFy0uRV+qvraYD
+	Z2pnl96Izbu9zVm4tHh3aWZ5Y4XyXuSD3kf31fRPo1+UvpaufVm337jxg2Mze2vjV8Jv
+	/6MBI5AEu0E66EPiek0oFmqDYdgaPgNvojxQ99Ha6FaMOqYfa4udw6XgufF3CUeIvnTa
+	JG7SL/IsZZi+heE8YzlTIXMuSzZrDlsBeylHNWcDVzt3N083bw9fL38P9aZAi2CD0Cnh
+	ApE40b1i+uKCEkBiSrJNqkDaSYYqsyzbIpcub6nApjCj2KAUp6ynQlB5rHpKLUhdWX1D
+	o0czW8tSm0l7UqdGN0RPUW9Lf9Cg2HCfkaTRuvFtkyJTdzMxs8+7eszzLZwsBSzfWbVa
+	p++2smGzmbFtsIux13KAHe47luxxc6I6LThfdYlz1XKD3Ybci/Y67GPb99yj0nOfF6/X
+	S+9TPvt8eXwn/cr9nQKYAx4GFgSZBANkvcSHKoSuhNWF+0TwRDyNLI3aHY2PvkVLjlGK
+	WYk9H+cRzx7/MOFQol7iRlJTcnAKNeV56rH9jmmcafMH2tOPZSRlBhzcm+Wa7Z7jfygu
+	NzuvLP9CQevhwSPjhfNFX4tRJcylgsfkj2uWGZ2wKLc76VrhUxlZdeBU6enL1cNnPtaI
+	1CadG70gVpd2ceKSTEPW5amrCo25Ta+aVa8X3HjdqtR2qP1Fp9LN/K7ZHu3e8r5v/Y63
+	WwbEBs/dkxkaGA79S3hkZfTu2LUn9RNNz25NvnwJXsvP1L3JWchfbvtA/yl3jWOjZct5
+	x/9/aks77wSsKgDn5wBwOguAnTsAdVIAiFQiZROk3mFLBsBRA8CGRQB6fhJAZlf/fX+Q
+	gRiS5QeAQ0jmOATeQRRIAdoDJUOnoC5oCtpC8js92AfOgS/BD+GvKG6UASoIdRTVgZpF
+	0yH1Ay8kI2tHv8EwYfQwEZizmHEsEWuATcQ2Y1dw4rhAXB1uCS+Lj8P3EugIboTLRIjo
+	Qmymo9BF0I2R1ElnyHgyjfyKYkHpoBenr2AgM2QwrDNGIvmKL9NrZh/mBZZwlm+sGWwU
+	tlPscuy3Odw51jiLuRS4HnMn8PDyjPIe4jPkB/y3qNkC1oKcgotCN4WLRUJETcVExEni
+	axKzkmNSd6Q7Za7LNsk1yjcrtCv2KQ0rv1L5pIZWZ9UQ0pTRUtCW15HUpeox6cP6Hw2m
+	DHuNaoxzTSJNXcwMd8mZ81nQW6IsN6xWrZd3z9vM2s7YvbF/5/DF8acTwZndRcxVw83a
+	3Xdvyr7jHk3Ie+y9D8VXyc/V/0BAbeBA0Fzwz1CmMIFwyQjZSJkoiWhBGlsMIeZH7FI8
+	V4J1YlZSb/KvVJP9pWnv0q0zbh5UzurIMT80l3eoQODw1UL9ouni4lKX4zonzE8mVA6c
+	5j5DqYFrv5//XPehfqVh5crHxrVrP2/gW7nb5TqNu1x7gvvi+9PupA/uvxd/P+yB10jB
+	aPvY8rjA033Pq6fevlKYzpgdn5dayF1aWDH7cOkTw5eUtfcbAT8Wfkb9Pj/ogSywQ6pR
+	FaAXvIHokGqAO5SFZPzD0Ecku9eEveBcuAl+jkIhObsrKht1DfUaTUZOlVB0JfovJP9W
+	wPhhqhC/02OtsHnYezgizhpXgpvEi+Bp+H4CGyGMMEgUImYS5+ks6DpJUqRqMiv5MAVL
+	yaQH9BkMKIZcRgrjCSZBpkZmfeZxlnBWLGsNmwHbLHsOhwzHBGcGlzzXNHcpzy5eNG8/
+	30F+UyqJOiFQIxgjZCrMJ7whMiHaJnZG/IREsWShVKF0iUyF7AW5Fvl7Cq8U15VZVTRV
+	fdUK1bs1PmqJaHvqVOpO6fMZ+Bk2Gm2amJgWmA2bYyzULH2scqwv7L5lM2m7ao92YHOU
+	3KPv5Ooc41LketVtxP3TPjYPHc8Ar2LvHp8PfkL+LgFFgYNBP0OUQ4PDToc/ioSjFKO9
+	aIUxN2MX4+kT1BK9kgqS21MW9rOnmR/Yn96csXxQKGtfdkXOs1z2PNf80wVvjsgUJhYN
+	FnOURJY+OC5fVllOOZlXSao6flqs+u7Z4FrSueYLbhfR9U0NnlcYrt5uSmyWu77YUtcW
+	3CHT+bmrsyezz6qf/fbcQNPd1CGLYc4HoyN7Hs49Sn7M92RkouCZw6ToC+jl7OvBmYa5
+	onnagsMS93L1itj7ax91V0c+e375uJa+Tr9x8gffZvVPrl9Fv/3PDgxAFFI5egi2Ed8H
+	QCehAegLLAjbIzWcNngFqdW4IPt9CI1CaojJ6Db0GkYFE4/pxmKwNthK7DJOC3cUt4g3
+	xp8j4AlRhBdEK2IfnRriaUPSA7IreZmSRs9K38Rgw/CJsYxJl2mJ+RSLAyuZ9T5bHrsV
+	BxPHJOd5Lhq3AQ8zzzveQb5z/DnUUAFHQQMhRWExEX5RbjEucaqElKSGlKW0t0yqbIVc
+	t/wbRYqStjJN5arqR3UVjQzNMW1xnSzdt/pWBm1GUsbnTAXMas0lLFqsjK2f2UTZkeyb
+	HN2R/drtGu+uvHfDo8/riI+Hn2oAKfB5cEWoedhSRFLkVnQsbT7WNu56AmMiLelJimbq
+	2TS6A4npC5kuBx9kG+Z05irntRboHB4qdC16V5xWynispkzuRMdJ3YreKu1TrdWYM1Zn
+	j9e8Pid5PuHCwEXW+oBLnZcpV/yudjWxXotqHr4hjmQ+79vtOtpu8nXldH/ode671S91
+	+/id7cGQu0+G9O83PGD7K2bk/ij3o6Cxy4+Xx4UmnJ9mPrv4/P7k/NTWS4ZX/K+lplVm
+	NGd15/Tf6M/rvtVcUFtUWJJcFnxHebe00vE+4YPKh5WP51ddPxE/dX0O+MLwpf3r3jWw
+	VvPN8Nvs+oENno2O73u+r/44vCm22b/lsbXxs/SX3K+hbb8d/8cEKCF1SKRBJEOk/Phq
+	e/uLKJJUlADws3h7e7Nme/tnLZJsIN9A+sL+fK/YEcYiNfeqazvof2r/B7Twfo0KZW5k
+	c3RyZWFtCmVuZG9iago0NCAwIG9iago1OTYzCmVuZG9iagozMiAwIG9iagpbIC9JQ0NC
+	YXNlZCA0MyAwIFIgXQplbmRvYmoKNDUgMCBvYmoKPDwgL0xlbmd0aCA0NiAwIFIgL04g
+	MSAvQWx0ZXJuYXRlIC9EZXZpY2VHcmF5IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0
+	cmVhbQp4AYVST0gUURz+zTYShIhBhXiIdwoJlSmsrKDadnVZlW1bldKiGGffuqOzM9Ob
+	2TXFkwRdojx1D6JjdOzQoZuXosCsS9cgqSAIPHXo+83s6iiEb3k73/v9/X7fe0Rtnabv
+	OylBVHNDlSulp25OTYuDHylFHdROWKYV+OlicYyx67mSv7vX1mfS2LLex7V2+/Y9tZVl
+	YCHqLba3EPohkWYAH5mfKGWAs8Adlq/YPgE8WA6sGvAjogMPmrkw09GcdKWyLZFT5qIo
+	Kq9iO0mu+/m5xr6LtYmD/lyPZtaOvbPqqtFM1LT3RKG8D65EGc9fVPZsNRSnDeOcSEMa
+	KfKu1d8rTMcRkSsQSgZSNWS5n2pOnXXgdRi7XbqT4/j2EKU+yWCoibXpspkdhX0AdirL
+	7BDwBejxsmIP54F7Yf9bUcOTwCdhP2SHedatH/YXrlPge4Q9NeDOFK7F8dqKH14tAUP3
+	VCNojHNNxNPXOXOkiO8x1BmY90Y5pgsxd5aqEzeAO2EfWapmCrFd+67qJe57AnfT4zvR
+	mzkLXKAcSXKxFdkU0DwJWBR9i7BJDjw+zh5V4HeomMAcuYnczSj3HtURG2ejUoFWeo1X
+	xk/jufHF+GVsGM+Afqx213t8/+njFXXXtj48+Y163DmuvZ0bVWFWcWUL3f/HMoSP2Sc5
+	psHToVlYa9h25A+azEywDCjEfwU+l/qSE1Xc1e7tuEUSzFA+LGwluktUbinU6j2DSqwc
+	K9gAdnCSxCxaHLhTa7o5eHfYInpt+U1XsuuG/vr2evva8h5tyqgpKBPNs0RmlLFbo+Td
+	eNv9ZpERnzg6vue9ilrJ/klFED+FOVoq8hRV9FZQ1sRvZw5+G7Z+XD+l5/VB/TwJPa2f
+	0a/ooxG+DHRJz8JzUR+jSfCwaSHiEqCKgzPUTlRjjQPiKfHytFtkkf0PQBn9ZgplbmRz
+	dHJlYW0KZW5kb2JqCjQ2IDAgb2JqCjcwNAplbmRvYmoKMTYgMCBvYmoKWyAvSUNDQmFz
+	ZWQgNDUgMCBSIF0KZW5kb2JqCjQgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9NZWRpYUJv
+	eCBbMCAwIDYxMiA3OTJdIC9Db3VudCAxIC9LaWRzIFsgMyAwIFIgXSA+PgplbmRvYmoK
+	NDcgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL091dGxpbmVzIDIgMCBSIC9QYWdlcyA0
+	IDAgUiAvVmVyc2lvbiAvMS40ID4+CmVuZG9iagozMSAwIG9iago8PCAvTGVuZ3RoIDQ4
+	IDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1bmN0aW9uVHlwZSAwIC9C
+	aXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAxIF0gL0RvbWFpbiBbIDAg
+	MSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAxMzY1Cl0gL0ZpbHRlciAv
+	RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBrcEHAoEAAEDR+19JNFS0NYwW7TR1BXfgv7dt
+	P/psH87KWZZ1oczLzJmmeaKM08gZQO/hzelBXd9R2q7lNE3bUOqm5lRVXVHKquQUoFfx
+	4jxB+TOnZHnGSdMspSRpwonjJKY84gfnDrrdb5wrKLpGlDAKOUEQBhQ/8DkXkHfxOC7I
+	cR2ODbJsi2JaJsgwDcrZOHNOIP2kczSQqqmcI0g5KhRZkUGSLFFESeQcQPvDniOAdsLu
+	f1+q/kbMCmVuZHN0cmVhbQplbmRvYmoKNDggMCBvYmoKMTg4CmVuZG9iagozMCAwIG9i
+	ago8PCAvTGVuZ3RoIDQ5IDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1
+	bmN0aW9uVHlwZSAwIC9CaXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAx
+	IF0gL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAx
+	MzY1Cl0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBjcIJN1RxGAfgLyYS
+	iUQikZKSkpISiUQiGWPGrGYMY2bs+77vW1/r/b2d65jTveN/732f8/DfBNuM86VwjC9N
+	XsTYcIwvJKN8oXseZdOjfC45wmfCET4zeRphw2E+lQzzqe5JmE2H+ETwOMTHQ7JBPjZ5
+	FGTDAB8J+/ko+dDPpn18KHjg4wOvuIcPVPc9bDjI+8Ju3k/ec7NVF+9dx55LfdeF3QFx
+	J3ZVd5xI3Y8dSQd2rm47YLMP23a3+qD9I9uLLdXNXqT+jU3hHmz2YMN2NzbsrndD+0u2
+	C+uqa11I/RNrwp1Y68Sq7Q6s2l3pgPaHeDtWblxuR+rvWBZuw3IbliRbsWR5sRXab+It
+	WDReaIH6VyxINmOhGfOSTZi3PNeE618wJ9mIOePZRqh/xqzwJ8xINmDG8nQDrn/EtHA9
+	pnWn6qH+AVPC7zEpWYdJ8xN1+P8dJoRrMaE7Xgv1txgXfoOEcA0SipSoobj+a4oLV1Nc
+	N1ZNpl9RTPIljQlX0ZjJaBUZvqCoZCVFdUcryfRzGpUdeUaiFTRiMlJBhk8pIlxOkeTh
+	cjJdRsOC4TIKPxEvpbBqqJQMH1NIuIRCyUMlZLWYhuwGiyn4SLyIgqqBIjJ8SAHhQgok
+	+wvJagH57foKyPdAPJ98qt58Sn2fvJJ55L3qySObueSxO5hL2nuyOTSo6s6h1HfJLZxN
+	7mxy2c4il92BLNLeEc+kgRudmZT6NjmFM8iZQf2S6dRv2ZFO2lviaeRI+weKcwqcCmVu
+	ZHN0cmVhbQplbmRvYmoKNDkgMCBvYmoKNTcyCmVuZG9iagoyOSAwIG9iago8PCAvTGVu
+	Z3RoIDUwIDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1bmN0aW9uVHlw
+	ZSAwIC9CaXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAxIF0gL0RvbWFp
+	biBbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAxMzY1Cl0gL0Zp
+	bHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBtcKJVgFRAADQ7zL76kuzRZbIIJJ1
+	BqGUypItSynCF3Tq5DijMebNvHfPLW3spWOVjR342q4YLSprVXktHrkSZXiLK1H1Sywi
+	uhSLS7EAuVBY/l4IBa35hQDhp5A3NvcpgP0QchZmPwS9cyGrl8/OwWbm/O47n0H3jc+8
+	8dcozvjrw9Mz3nAuPft3yqVBXk05gBPuytrUhNM+5lIIJsfcz1fNbPIVxhGb3L4csTAP
+	2UvdiSFr/oBNAI4P2G0mPtDdZ+KWx/qMxh4TQ1PqMdILyl1G+ktLXToKd4eO6r7o0Ca3
+	6QvwkTZtaIuOAKcirf3hFqXxmQqjef5EIfxInauHHilom2To2GCTNPOBDJoaeCCPvycD
+	kPrvyf0N0m8o4W8AP7sjUL0lzrT6bgkI64TPWG+dMBb31rdruNfs0xqut4qfQu2p4rs3
+	uAfdCu6p4O6DMXfF7DLmPtBVxqwuYS7DnSUMrII5LXQo2LbNoajLNgfsJ7Ltb9F2AvIb
+	Cq+1owplbmRzdHJlYW0KZW5kb2JqCjUwIDAgb2JqCjM4NAplbmRvYmoKMiAwIG9iago8
+	PCAvTGFzdCA1MSAwIFIgL0ZpcnN0IDUyIDAgUiA+PgplbmRvYmoKNTIgMCBvYmoKPDwg
+	L1BhcmVudCA1MyAwIFIgL0NvdW50IDAgL0Rlc3QgWyAzIDAgUiAvWFlaIDAgNzMzIDAg
+	XSAvVGl0bGUgKENhbnZhcyAxKQo+PgplbmRvYmoKNTMgMCBvYmoKPDwgPj4KZW5kb2Jq
+	CjUxIDAgb2JqCjw8IC9QYXJlbnQgNTMgMCBSIC9Db3VudCAwIC9EZXN0IFsgMyAwIFIg
+	L1hZWiAwIDczMyAwIF0gL1RpdGxlIChDYW52YXMgMSkKPj4KZW5kb2JqCjU0IDAgb2Jq
+	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
+	EAL+1qjGwS8/ChZopN2CgsGCguhZx0jLLC/64Q/HFeBaNSzTyjAcV+CrOB77Xw0vORte
+	yaTf2k23ffcWIEQhfXgyfR3Gl1ju3wd+1q3fZDpoonnOyOVrKjV1moX8KnoVv0W3G+1i
+	d+t3GXYZe1GvQaxEU/UVxot6ppR9jaU2sgfQAXyQ7TWyiUmsSW80gC+gVypibYKKGHpD
+	HABD5DbqTUeVjxrA3r8TRRngqbpmgk5834+oaoC1yDKnm4qLigCsAgyjEdDo4fjVsFRj
+	NJpYjMkAmOAQR1xzXooEiDE5pFgmHZJlczTFU9LEzSFOZW7eBJwHSNC084JnXXPJvq59
+	Hl98erKYlS6yE1ThjjewHTPpC8Nbw1+9GG7t54TnYjinSdieyFQDXA8RWyv9Ii3w/czf
+	+4HqwVoYPUGOBQ8/BeWiUlSGyqUvcyZLX9+Qb4PIFziz0GxUh+rRXKkhDCfMWEpx5NR5
+	zvQpc2bd5a9sWdLZ0rFofhOUREtJlXagB4C2AO0Deh7oJSDiOV0F+groFtygBLICpQAV
+	AU0Dmgu0BOgBoC1A+4CeB3oJ6A2gq0BfAd2KDP2gLTSSxsgxhk8aw8O3m6PqJ4/hU8bw
+	E8fw4EyMur92DE+QuF2e5jH8/DH8gjG8NG639ad1THnbGH7RGF76Lve2+382pvy+Mfzy
+	MfyKMbz0ne1t7a0cU945hl9N+P8PRAt2rQplbmRzdHJlYW0KZW5kb2JqCjU1IDAgb2Jq
+	Cjc0MDYKZW5kb2JqCjU2IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNj
+	ZW50IDc3MCAvQ2FwSGVpZ2h0IDcxNyAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9u
+	dEJCb3ggWy05NTEgLTQ4MSAxNDQ1IDExMjJdIC9Gb250TmFtZSAvWlFKWlZVK0hlbHZl
+	dGljYSAvSXRhbGljQW5nbGUgMAovU3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdo
+	dCA2MzcgL0ZvbnRGaWxlMiA1NCAwIFIgPj4KZW5kb2JqCjU3IDAgb2JqClsgMjc4IDAg
+	MCAwIDAgMCAwIDAgMzMzIDMzMyAzODkgMCAyNzggMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDAKMCAwIDY2NyAwIDAgMCAwIDAgMCAwIDI3OCAwIDAgMCAwIDAg
+	MCAwIDAgMCA2NjcgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAo1NTYgNTU2IDUwMCA1
+	NTYgNTU2IDI3OCAwIDU1NiAyMjIgMCAwIDAgODMzIDU1NiA1NTYgMCAwIDMzMyA1MDAg
+	Mjc4IDU1NiA1MDAKMCAwIDUwMCBdCmVuZG9iagoyMiAwIG9iago8PCAvVHlwZSAvRm9u
+	dCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9aUUpaVlUrSGVsdmV0aWNhIC9G
+	b250RGVzY3JpcHRvcgo1NiAwIFIgL1dpZHRocyA1NyAwIFIgL0ZpcnN0Q2hhciAzMiAv
+	TGFzdENoYXIgMTIxIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZwo+PgplbmRvYmoK
+	NTggMCBvYmoKPDwgL0xlbmd0aCA1OSAwIFIgL0xlbmd0aDEgMTI2NjAgL0ZpbHRlciAv
+	RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBvXt5fFRFtn/V3XtJp/d9Tae70+mks5FASCBN
+	yAokBsKSIMEECASEkSUEcYQXFQQiouwIuKAOBFBpQkYaEB/DgIjjKC6AMujoiKPjM8+Z
+	99CZkaT7d+p2iJA3Mz//8DP3pva6dU9969Q5p07ftC5e2owSUDuiUc3UpoWzkXhlGBGi
+	ps1c0LQwXtakQfrmzLZWZ7zMpiBEz5+9cM6CeFnYgpDUNmf+8v7ntcMQMk9raW6aFW9H
+	vZDmtUBFvIyHQJrcsqD13nhZ3Q3pvfPvmdnfrvkblEcuaLq3//3oKpSdP2ta0BzvH7wO
+	afLCe5a09pe3QNq4cHFzf39cB/S9jTDU2tE9SILuRjyikBLuBoT4L6U2xEAraYdrVpps
+	812Jhd8ilSCW76p6TExfc71y6W/NvT7ZRuHvUCG52Z+knD/qR0iOob1HtnGgRXwOInsE
+	1QYiqBJCEYRcCIHAKCNqx3vR4xCegUCjufgRtBzCOghPQGAGcvuhdAw/0sUIoeN4OTLj
+	MSEZ45ioNTmMUpnj3Qjmup9yfGj87AQ2wep9ik1dCUgySoqfwU+jWciBf4E8+D5UgVLw
+	ziP++Y5GaNqPFkJoh0CLMcb7u+zZjldxGvIwGJ7xIjuDX3Z8kZXu+DwrQuEux2lfhIHk
+	V3YohRIdp2xPOf7TNsfxKoSD8aYDfujxsmO/bb5jsz2Cd3Y5NtkiGJ7ZGE+W2uDRlx0L
+	/Nscs7LE9nHbItTBLkc+tE8OyRx5w1yOXNs1R4YvImAop9vGOVKzfutIhgehmxMG9YRU
+	Dqtts2M4NNltpb7hEE7gA3gXSsW7ujxjHMchC9M9Uukfti2Cf36kIiXLE8H3hfIqUrb5
+	K3we/ziHx1/m80F+8uv8Kv5OfhSfzQf4FN7Lu3gLrxXUglJQCHJBKggCH8EvdBU5uBP4
+	ICoCWA4eETiBjeCXoJI5gV8UK188KjACJSBBG4l9AsyLkTaCD3YrSQ4yL3NijovgF4/E
+	q14MORiSY8QGJUXyEEGMKCxQaAwK40cjHFqtbysyFqlHqvLLSv5Z1Ci23IwD//wyYlt4
+	29jauvABW304m2Ritvqb3Y03M/80bV0KTc3FgcDYCcuPtC2cN7u02V3a6C5thtAYfqSt
+	xRhun+F0Hp63kDQ4w7S3ccbMFpI2NYcXuptLwvPcJc7DbeJzg5pnk+Y2d8lhNLt0Yt3h
+	2aHmkq62UFupu6mk/siM4sUNt71r3cC7Fhf/g3cVk8EWk3fNEJ8b9K4G0jyDvKuBvKuB
+	vGtGaIb4LjL50rm1xUtagTudpXPHOsMpteHK8VPrws6m+pII3guVJUsRewop2ZMohW1H
+	ZiYDORCKfQjhCkmjk2J/ZM8hZXRB7C90ASzqMRKoaFEhOoUeRbvQIcShTsinoOloBzqP
+	58Henoa60SVsR0GQvQyKoHHoTRyLvYNmo+ehfys6jbaiw0gOzyxAOmjdgD2x+6AcgvwM
+	tCr2LEpGw9DD6CTKh1E3oJ7Y/tgRaJ2AJqED6CA8/xvspg4zmthLsWtIQONhzFXQ8k5s
+	XOwQUqM0VIxqoHYVehV76CuxFmREBUDdbvQ02oN+hb7GD+LuWEusLXYh9imwqhFZUS3c
+	K3A3/pQ+xDwc2x37KhYFJFJQKry1EW1Gz8H4h+A+BaK1FN+NW/FmvJUKUQ9S3cxq1hDt
+	Axz8qBzuCpDKawGBY+gM+h/0d/wNZaSVdCt9NpYb+18kQ2NhlmQmzagN7jVwb4A5ncAc
+	zsSjcQ1egbfgrfg9KpWaRNVRy6h7qT/S1fQ0ejn9HrOE6WLXszs4WfTb2InYudhFZEA2
+	dCdajFbC7E6jC+g6+h7TMJYVe3ABLsbT4W7Hu6hjeA8+RtXgU/gCdQD/Hn+Gv8E3KJaS
+	UzoqQLVSm6mD1GnqLXouvZV+gv49/S0zkqXYPeznnIf/XXRGdF30rVhB7NPY30DECsgF
+	K1OMqtFdqAlmuxANQf8Bs3gR7kOwamfQWXRevD/DVtSD/gYoIKzGZpyNq+Cuxnfg2Xgu
+	fgofh/tVkZbvKFgISkKpKANlpWqpGdQCqp26SLXTFjqVHkNPpQ/B/Tp9ib5B32BYRsPo
+	mHKmEq1nFjA74d7LdDJdzNtsPjuSrWYns+3sOnY9PZN9h73EreQ2cF3cN9yfQSyO4+/h
+	18PqnAee/RXw8g8Xg5OB+mz0MzQTl+AZaBusxh7chDqAu2bhtYDXQpQSa6BX0uVUJnDD
+	q+jnwK070Qq0jp6G9sQ+oA+gy8Ap82HIdrSPKUY2djuszoMoE7io/w75U/0pPq8n2Z3k
+	coLIt1rMJqNBr9Nq1CplglwmlQg8xzI0hVFaqbus0Rn2NoYZr7uiIp2U3U1Q0XRLRSNs
+	ZWe47PY+YSd5rgmabusZgp6zB/UMxXuGBnpipbMQFaanOUvdzvBvS9zOCJ46vg7yj5a4
+	653hHjFfJeYfF/MJkHe54AFnqbGlxBnGjc7ScFlbS0dpY0l6Gj4WAjik6WlEcISQjAwc
+	RqObVoCARaNJj9Kw2V1SGja5IQ9ttKe0aVa4ZnxdaYnF5aqHOqiaUAfvSE+bGwY60SPy
+	We5Zj0RCaEYjyTVNqwvTTfVhqpGMpQqEDe6SsOG+z40/FG/mStff0himPGVNzR1l4VDj
+	IwAuKTaSUtN6KI2tdcKw1Or6ujBe3U8EoXEeUErIjesET+M8Z1jiLna3dMxrBHDRhLou
+	c8gsCt8wqqnrMoVMYiE97ZhxZYELZn8sfVT6KJIWuIwr4+kXD8Xr3z1FUuPKM59AOnbC
+	AACYIOCuBDrDzpniS9xA7DASNQ9DHTOHAU5w1WOY5lygZ3SYAp6hPWHWU9kUbq+9SUZL
+	SZy4xnklXRKTWVRCxfXQv7FDORxWCvor3c6Ob0FbN7p7vr69pqm/hvMov0WkkSz0AK+E
+	cdPNfBtRlh6YdYvR3ULWt01cUyi7jaW3VECZQENoDmtBgdfUucLOeqgAazJtbARJauoO
+	Y7yhPoJjqyOoxHYMbFT6runQnEZYbW4JvB8K6WlQkeqCXDDNWQZvLiO84uxwdlTO6nCW
+	OVuAmRiPmEJDc0d9BiBYWwc4oYnwxlC9ZSDbXF8/HMbJIOPAI9C9ox5GmNc/AqRiVUYf
+	dMpMA2VKe2vqxteF20ss4VBJPawCsO+pmrrwKeDc+nrolTVAKVC8Yq6xn+ZsoDkrFdpz
+	4qOA7dIOQ9R3dJAxa+vcrvCpjg5LB9lv8XIEo8EVof6KCCJdCOQR3F4Dz0LidlnENXC5
+	XUBWPcF0CLD0TY4Cm/1fI5w3QDc8ORSozRMRHvYTIZz/YxAe/qMQLhig9DaEC4HmAoLw
+	iH8fwiNvQ7joXyMcGqAbiBwF1IZEhIt/IoRH/xiES34UwqUDlN6GcBnQXEoQLv/3IVxx
+	G8KV/xrhMQN0A5FjgdoxIsLjfiKEq34MwtU/CuE7Bii9DeEaoPkOgvD4fx/CE25DuPZf
+	IzxxgG4gchJQO1FEePJPhPCUH4Nw3Y9CuH6A0tsQngo01xOE7xxAOGQJo1vlcPsgsYt+
+	csE87RbIwVJi1aiYyoeD8wG0AUIJ5D9jJyM7nMGmQv48pN1QboT0ALMETYCDdwGkwyBU
+	QLsV0hEQVuFzaBV3AK0ieQikTxuMtw76k/ENUG6HvAzGUUOqg1ff9BnJ4STzKpSdaCo5
+	wt92UWD9//8vGHDgYiHHDZTAQXVLPp4VQLODifh/6uMVMkjk4AdSoETwcKngdBe/NEgL
+	VOuhYIDzmwmZkQVOcQjsbXINgft+mEUvXksZqUzqOP0w/RazgzWzD3M13G6+hN/CnxZG
+	CjslaskqyRvSA9LvZRNlX8l3JAThaQrONoi5AGdiGugtivu7hAwwSiAIyghCFyCQMuTp
+	qxHEQECQ56+i4+IMJweOwygsmhzIzMpRuVQ+CMXMhkjvH9iT34+OMFU3wHcC6G6ITqea
+	2Iswl5EhiVYl0egNBrPkBN4NZywt3h1ShGCZxilNOv1fXfMnGCN89upAoPp6VY/5I3PP
+	+z3Vpc0lf0RFRVmZmOI5ldKg17iD2Of1eXOVQ/M01PQnM8rHZ29evqnMP0wvayg4wV6M
+	vv3476KfRj/+85boV9dWzt/SOeUOnPLFZuwR6SkBegxAjwblheSCCml0QA8zLlFDSAI3
+	IZAkEUxa3V9dRT8HJwuh5P2ej26hQ6MemqdS+rx0jh0b7Fin5Dm6/OlgGaFi5yhvpn96
+	wfHodJy34TJ2Ydeft2D9d0uaV1xfFP3gy63Rj0XsP4tewBHGBeutQfkhG3InSmcJmlQl
+	J0gJNfwQtXSWEgEV995vDFQrr1cVFvYVDpBQ1aMEkrIyDXlD83KHeH3u3Bydlud4VY7O
+	/VmZRYHxgouOIQ9evPhOQk1qNsvLr7xxd0WbgR0P7g4aPKqIHQHrTgE/ytCVUE0FrsMt
+	mF5Lb2d2SPdLI5KIlEuRYsRzHKYEiQQiKeJZvB7TjFMrlXrUUKdlWY8aOshkLC2RMhyL
+	ZRSmEWXnhQiuD0ngeMdJpDQLpc6QOiEBZsU+hZ+SmuQJe1zrpwOwpurrxqq+PpO4wGUl
+	RlRkKCwqrOqDmaryi7BKnZ8Pf6r8jDXBwArlWLBCmVOWMHOmfk3Q2F9BQwV9pj7Q33eN
+	srCQhwCs0tCAGrAMa3Kwm3bRbkxv+H3P6k8p3ZWtfSeefpN6nJpKretbRs/8fjSORCtE
+	NKbGrrCL2M+RDRA6HCqwsNvxNpZ2YAfzIF7DrtOwtQL9sE2l0nHDbbR8uE5ip+x2E51F
+	FSizVGanJMtkcjj3uObN7meaauV3VT3Xe9T5GcC9PUUko4RFG708NBxZDR6NV+GxeGV6
+	STZK0CqzsVqVqOStUGIRnY0xxdBSozwbJaohEsxcNmYwRMTfhZWFysJAIB6TigcacIOA
+	DbAt3ElIpVTnZA/NG5rD8ZzL6fOqYJe43IwdD1Gddp3t+jD67V++ubpkhP20edOh6OUY
+	eunzF47j8hT28+iVExv2Rt+Ono1Go/+5v37jl0+e3PVb/AIuvfAHcd+ch828CZCikYF4
+	w4+LgjMYAN8XERNURmaWJkflPn/+PNn+wF3gVmXvhf4S5ENbQmo+oRJXsPW4jp3LztLe
+	ywr6E+AMMiELtoaK3S6nt1G9SL1US6vtDq1VR7vsei3jVSd77EgisfB2GeW1WgSnR+fw
+	6OmsxLkWs1/wenxSU4r/kmtrHHPCPAT167A73u9BRYWFRX2AOjBUvsqQf5OjGoBbAoRF
+	cDbsHp/X7VLRrmzin+B4O3ZgvUFv0AGWGRhkDDS66fL1zy0eMTtqPkd1di54e8GMyVNY
+	npapg9elckbOz8q/L1pwjrYu3PRkvj0qpfZkTe9b1ZnjXtx+dqK/TOvSFE7+9vEsS18H
+	YNIYu8h8BzyWAf6SaGi6P9Hn9nrzFLmucu8M732KZcmSuwWjwuCh6hUtigNJtFQxPCk5
+	SUozVuPD2oyMgHW4lmaGBySZlFQhqJKTHCmZmSqjx1ApeFLM2Q6PqhJ5MkxZ2c+45q3r
+	Z8PrPT8woloFewrCLQypUhvyg305DYtEzqxKCaocSKC8lDfdw3nMXjoNBVB6UEzYVCGA
+	bRpHAFl0xgA2GXE6E0ASnyyAPTIchDzvh8iutkKjHiLgEmBTpcixYha4llwPPPAA7E7A
+	mTAqWQIR6twhyTnZjM5NUE/idFqDXlwLnZZxAxsPxdjOD5n5/cJpXWPHPXvu1+PXY/WN
+	L/DoE4lZd14J75xacOGtrePXR5/8r+h/79pFU1X4yorqTc6Rz9ybk+1JT8uddvS16O+/
+	bStasmXG/GxnZkZSwZwz199d/8h/M6B8KXQg9iGbAbxKtG1hyG1gfewwJS1FFDtcKdHT
+	er1W4pGbjdijNRmMz7i2Lrx1j9/c4YUNwFUqoFuclipHpeQpl5P2mkANtBbWv9d3Z9Yb
+	lQ9H10fXr66kRrMne1ufmffMi9Ofptf3nov+ZVP0OyzdhBPpfNhhE2JXRc9fIvh0C9FH
+	oWGpmViqlFnkVl9OhXKuZJ6SzxfUcgltyeaTJTal3FYQoIL+gqMFVEF2qket5FnB6ksy
+	WCO4A6Zjc/A+W1BG2XJlhXxhoVXL+1M7k80jLX7rmETfMNOIka/g7eDwPIa3odvY5lrf
+	mZuzAwkGIoywC9lAwZ5gD9lQsK9ExknJG6pLQtjkwXmJLmS0W1xI79SC+ktCQykXMtsM
+	LqxzQUR4AgTYD2zQkCziNQIrcCIGmaXDca3mTgKN5h6Jc8jWVGmhE7xCARIOVD9JvLlD
+	8oZqsGJx9V3121wt2QtmZNXi7pE6+UP3PVrgknayf33uZNtSg0duV6WmeRtS9ZKhb92/
+	9eTx7R1vT02r3LtRZ+UUCdaMOXi+kGZMn1Y7LrX2tV0VFTv6tluTaHq1nCt2hyrm/XLt
+	1uc1+BrhEfAM0xeYatEK2xfK2GfCO4ydwgEjPUZQ7dLStJazmfkEm1Zm4S0Wg9KnxrSP
+	UpltUp/BZIWfy/gjrsUrfuCbwqqe/Px/pB2GIJPgkeukXqTQKL1xvWCCEugFl6gXZPoE
+	L+gFiCRGzkv0gusf6AWyxRqQPq4VANY4gjkEOipXiXJ46tJnhkPKxStfGJO5dtPCh0yH
+	7H8+8e73WP2+lakOX575UOeCZ/ZcXbfs4lmc80dwaw9nAYNhsSt0D3sa7AYbWhbKHqoo
+	V0xR7GP2W1iPoKUSbWCz2Gy8RkrZDDI2qAkq/Sq12SHzmU12xxrX4uJbp9937RoCvQh/
+	KtDyIheZjVaJFGFslMHcrBAhE+VFUovghQnCnyg41IQVwOwhQgKBrIaN5s4l00K5Q9Q5
+	323as2LP3vvW7scdtZkjXny26IV7jkS//+ZjfNeXl8//5tcX3qCGDrGPpWzfj9w6sw6n
+	f/8VngL7rSJ2hTGDp90Kv8p4sDy0fLvwhHmfg2YVVCKr1SnUiTptSB7SCn4zHit7mT6H
+	X6PPWT4QPpRccnzg/tLwpVt2TnVOTU0TWFdy4k69LTmf43m9y2blpTa9zMNvt+6zHrVe
+	tjIefaLHypqkcl6l8CXafKzZlxzkfSaT1/e+a29DHKC+a6LMfr9PtIBEQyijYUBogz5T
+	9sDeEyErQ26GpeFnDMwynAO0vVqpUWqVDCf3JFmSvXDCsXmx3SYx8F4k0ym8OEHhNrug
+	ioVIMAJfJSghEkW1uC/FvZkaSH0AL2pAi8COIvpQr3PZYScSs0KBYV9yoqGBckQVmcTx
+	mOq+NCxPrez9hn18+6MTM7WH+TuyJiwfNeH16FfY+AfskKWMefH+Tha7mfK7J42fP+bZ
+	58425JUXbAzWWJXYDb/lULg46l1a9uCRDkw+FgDjAk46YKe/C2efqlCAt3FSG40Ttfn6
+	BE4tNYE5qUhQ+Q1qXp2ocCgoRa/WZDT1uuas7EewIf8MUfzKm8cHYhsUiVYzWO852aDi
+	g8AynA5MZhXcuTm5v3QXdauSDVaTbIKzq7tr61a2eMg0inqewpNe2tA7i969oRPootGI
+	aAH9JfCKA6XDr39HQ1V52kqhUlIn1EvWyvdbOm37fXsDxyyykEDrk/yKM9IkEL8M57eZ
+	pGqbNDHIB4OslQ7qg+l+1pwpV/gSRnp9VlNG5i0b5HpPPuGAvmvfwjr324+wU8Rlj697
+	mjvFbJepkj1Kr9vu9aIUM0QqmQLOFAp5gseW5MU+ix/khFztEle332q8qX7JzsnNUcGx
+	wZXk9eX0K2NRsiarQDwg2F/9UgN0NKbun56Tu7dwYfT8i18rjib4Rjz0dshL5+1Y8VL0
+	BuaP45Ln/+PVMs/m+0/fkRZ9hyke6R69pjf7zbYru35R4SvcNPmjCTV/xTacgIPRPae6
+	7tr5y5OHZq6i0sV1XgWgEpmiR7WhNNg1goE3CD7Gp1nKLxUETQKlgZO7ysbxOrk0wS8F
+	LazzIz3oYfiK4ohrRlym3DT9iNUnSpR8TDYIagCbFPRJXIm4VcTcg0VXuVd1h3KmPPin
+	2vRj9qw1C1/uZk/3XR3vyn+u/qm+8dRzbUPrdl7qe53wIQW/sCJcINq9PJwYrfznDDAn
+	R0slwIPAt36eBoEtOfADJWf6Cs8MsF1RFdj8xDAmh7NVR+FiUm9cYk++eXPunIcpR160
+	OlTAC7yCSzQIBoUh0Sf4QDxUmCbL5sjkbo/UbHObpBRj8LhsBlsCxyPOYvXQGmkKEKHy
+	w8cLuMvsJ99shEB+Bj2w8CZfSgQn3ArQNeX1nut9/ZTBWQsOWz0gR+KW8U20dP1oGW5q
+	XgCtH7Nb0OsKDalf1F6dllz4bPMH1akn7q6a98RRs3/h7H3dTMaOO5JHFCWXTa7dPXFD
+	31Dqy7trNuzt20idWJA99qm3CaoipnQP7CHi05geyjrKneMohtNyPm0b18qzWjmlNSpt
+	LEzTKJOaebMZyf0SsxUHjX4TMlnArLlt6ePiMr5TYF49YOL2Lz8GBtDdMhWy/iC/FBh4
+	AK86OO5Ay7WatKO2zJUh/5hh6ZZuvA/onz7h6SnPEj6YUTgrQV+cu2hu39tALOz9gtiH
+	jAtsALnoj3k8lLND2KZ8Qv8LplPYq9yvjwivC5eZzxV/0sqHC5zNyMttapmJN5l0lC/R
+	bJH4dCazJYIlYAn0S/q4cT6wx0WRngauK69MIwGprKK8mDdAjk2AnFQr9yKshEjQg+Kn
+	FRARQ0qMAqDwk9XigYZYz/ocNRwFKRdoRVHZf7I6c9zxX2zb9hx8tNAb/etH0V6s/oJr
+	xYl7t03f0tt18Bp9Jfp19Hq0L/oSDvSCMRYi+r4tOonxwNQVKAm1htL2C/sMVIrgtKoU
+	nE3HJ3IKm1WWpKB8RnOyNKgMuvxJiSZ38hrXyfj0YFdei6+NqLzIwvSrLaveglizl/Ei
+	C0yM1UOETQovog3inMQZkVNCcvyIJooiMKxxTpw/4YdkooPAFFS5qdf2ecqOnyj1QBwN
+	HsoL3fnzl6NHW3cun5BZ0L38vXfbpx0+MWvn/VP20oc3VKYURv8Ec3x221259sq+j4ie
+	WQcMuQn2oArdEfL6aG/CULqcYRSCklJIVBK5TyBsqJIKZg0m9gwyqTURXAobK65qyByr
+	lcRDVVV0pu8MyGvxpBmXPSLrDegalXvdQd3zd7NGm9KiXLsJtsqxvF0U/SpNHVrct4Ps
+	i+LYZfplZizolQwcDD02TLKD3aZ+QrtDtyOVS0n2+PJcZa7y5HLf5OQpvtnJc7zL5csT
+	liva3K3JrZ5W7157Z5qGBjXPpjNBDTLrLAarUZeuDaYkyubCaTnPQ3mSEqRMQGN8zWrT
+	8IwtuDMgy+AlCiXFowxXhtlh1Bt9hpEpXt6XYs5SOHzKkcgXNGVmdQ3YJiBC4ropXwk5
+	Mt38DIj7T5XklEBESvw4OQ6nU14dHCNdCocLSeBzLQwnSRdiUyFnU0OdRWt0YWdikgu5
+	khQJgk/qwl6PRAonSxd8oweRXWV1kdNk/OQQd3qIno8404vnCNQApi64FeOG4cBxUpT6
+	/P89TwLjeH34G8FT0jlrxwjfksfWjWr93bH/uXs0dYD1jnxi9tzSlOplp4vnfvjxN+d4
+	fBTXTM2cMuXO0mSw6pJSKx/Y8cqGqS0jssurQ2WpJo0tI610y2MXPnyG+jvwkiH2DSVh
+	p4J0mPDLhKD0lAJHcFHIw+jzDTSnkKrMIK7hyxU/0il0ibSDpuhevclkBrul/2TQd7vd
+	kkGENHj+lH3XRC1CrBXxgNl/FvLmEtOl8+WDB726rAS71jHat3Lqxo3s1OjFzX2lwzQy
+	TG2QCA/Moc5uFnVZe+wz+mPYz8SfPD00PKJ9XUtJNILWpDFpU7hl9GVQv4hVSBGXIGVB
+	dhl5oxGOG0GpXy4zm7GfEPvuTU1XRYQXYf8BG6UIHC1xRQLelVtPwu6hos0IPluVBw8z
+	Zz70Somn+wDlHjJn8+e16fgQk9GXP2FIY+fUJynFjXeeGpE68YkJ66gPzGR/wgGd/orJ
+	QKBrQ8FifBZTaA5qoVroOdwaZi27D3VSAnyRRJUyY9iHmXXsOeZ1VqhMWZJCPJEgakWT
+	ED6Bi8QWdoOR7GQi+KGjNL1ATWEKvgt8KGTnuAXgcscsx9AYsxTN0Qi+T5EKZLEOUccx
+	sQBWHcGHOFPcZ/nJJ/1eS/BZFoLXUi3ueHU+XxUMKKuvVfHxJDB2/PKQh/KraZpBfnCW
+	go1+2+Dg4zvEoh/Gzc/vy8+P+0MHRmZ5ZQD+wLMA5njDIo0Eg0sTX8V2HDgbnX8qupTJ
+	6N1Bt9x4BxDC5JcDdg/k5NgZWlnOHJDA8uMyvlK2hu4QVkvfoM7Qr/Hnhdek52Wy2fw8
+	oVk6V9bGLxfapMtlq/kOmZT0pcrpZehelp6Sok8B3cIU4ALmMfwYw0kYTMsomuXkLAJP
+	tYzmpQrAiGe5XQLNnJFSkjMyhHfJTQkEcxP4rcHBK04qHg9MDYwPQA08CQQhOQvY8PBl
+	mVoul7FrlAH4g+XqlsB3QtIIfiSkUcOxl+cYlnTkeIkgkcLKPhJSqBmGlslh2uKjeA3A
+	v0a54oyRJR5iYYXyrJhZs0J5ZqCG+P0WLVoEBxsLlWMhWMoAzstvvfPGu7/rjp4/ceW9
+	E9HfAKTd9LjeY3T5jXfoEb2/BkBBNuuilaLdT36JeSP0sw7dWuM+I81zBm6YukJdp57D
+	L6OX8eu1O9B2doduu367oRN16pUVaKyu3HBex5Swr7HUGnYv2ov3sZ0GNjmFNeoMerAl
+	dXJZok1QEENBbwFACU8YdMZD8sf0YC+8H+dgYL2qa8bbgIybDQBxtinDCN5OYMR8DNCF
+	1DpwZOkXqA0GIws/BgBXGMGJTqAhiQApoJCVuQgcBA04h6MpnhKFYi455OUNHYmHAjI0
+	7TrnfWhG8e723V6/PSNVmZ2hZEcqoq1vgpOUyZgT3Rj9+qXo7G5OeD6BcxmFLclMNbDi
+	gwQr8Yo1w/d//+iCXyDAlpKBFWWH87YXvmXMRXnwNWQJKhO/LayEz2nJF4Tk+8YJ8M3i
+	JDQZTUF1qB5+rZsmDkg4HYs5Dn4xQ8VjxpZXTApUNM9va26dO7MJWuKtpEs7hPUQyI87
+	L0B4BQKxvq9C+BpCL3SWQ7BCSINQCGEchGkQ5kO4H8J6CLshvADhFQhvQrgK4WsIvTBh
+	OQQrhDQIhRDGxfovGB8N5DFyDiqnDCr7B5XJ16i3Pj9qUHn0oDIYqbf1nzCoXDuoPGlQ
+	mSB36/tmDirPGlQW1/eW+c0e1D5nULllUHnuoLL4/wi3jPezQe33DCovHFRePKi8ZFBZ
+	/H+DW8ZfOqi9bVB52aDyclL+fzOk2I8KZW5kc3RyZWFtCmVuZG9iago1OSAwIG9iago4
+	NDE2CmVuZG9iago2MCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0FzY2Vu
+	dCA3NzAgL0NhcEhlaWdodCA3MTcgL0Rlc2NlbnQgLTIzMCAvRmxhZ3MgMzIKL0ZvbnRC
+	Qm94IFstOTUxIC00ODEgMTQ0NSAxMTIyXSAvRm9udE5hbWUgL0JKS0dIVStIZWx2ZXRp
+	Y2EgL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDAgL01heFdpZHRoIDE1MDAgL1hIZWlnaHQg
+	NjM3IC9Gb250RmlsZTIgNTggMCBSID4+CmVuZG9iago2MSAwIG9iagpbIDI3OCAwIDAg
+	MCAwIDAgMCAwIDMzMyAzMzMgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDI3OCAwIDAgMCAwCjAgNjY3IDAgNzIyIDAgMCAwIDAgMCAyNzggMCAwIDAgMCAwIDAg
+	MCAwIDcyMiA2NjcgMCA3MjIgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDU1NiAwIDUwMCA1
+	NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAwIDAgMCA4MzMgNTU2IDU1NiA1NTYgMCAzMzMg
+	NTAwIDI3OAo1NTYgNTAwIDcyMiAwIDUwMCBdCmVuZG9iagoxOCAwIG9iago8PCAvVHlw
+	ZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9CSktHSFUrSGVsdmV0
+	aWNhIC9Gb250RGVzY3JpcHRvcgo2MCAwIFIgL1dpZHRocyA2MSAwIFIgL0ZpcnN0Q2hh
+	ciAzMiAvTGFzdENoYXIgMTIxIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZwo+Pgpl
+	bmRvYmoKNjIgMCBvYmoKPDwgL0xlbmd0aCA2MyAwIFIgL0xlbmd0aDEgMzc2NCAvRmls
+	dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG1V1tsG1kZ/s8Ze8aOr8kkzsWxa3tq
+	O7ET3+vJxXHj2Lk6F6fZbe1sl643SZvQpi1t2YtgaVcqoop2VytRIVDhZeEp2gcjAUrS
+	Qise0CL1oQJW8LDaFwRaCdBKqyKhitr8ZzxJ3MI+Msmcyz9n/vP933+Z42tXvr4GRrgB
+	HIyubJYvg3JxP8Tu4cpr11z1OXmIvfPs5XOb6vzvAOTquQtvnq3PNbcA9PfW18qr9Tn8
+	G/vkOgrU9Qnsj65vXnujPudewT514dKK+lyzjnPXZvkNdX/4hM0vljfXsMfLfBObyOVL
+	V68pUzDnsB+9fGVNXU+KOL9ymj2krAGorcEaEBxY4JsgKCI2A2hiS8jVAwkRNq+ff/n7
+	Zyypf4Ke+4zJd6XPb7P+I/G9N2ul6ueak9zv8SX9vm6ml6O1Lmz/hc9/g88/g4/ZGweX
+	ZQcgCHu4kgINkj2kVxncx8FpmIZB6AV8H3TB+6CBxWckcB9fuwjLMAGxg0UUzjy7aA+0
+	+CcEcSPX+FsbHYyRVnxhCFLAxmItATrKg5nugUAfgQiAS/vyO6AvFH9KyHulHVL79g7k
+	HLtoGXfmK/07QPpcrvGNXIW8ghPah4KAG0dcn2uiwnknThSlkmvLtTW9uuWacK2XVysa
+	r9Ljg7WtUthVgaXiBrYvFN2V0ZL9YLhWKg2hHg3Tg6/g8q0SaviqqgF7RRR+iou0fXlX
+	hfMViovFyo2cvTKaK9ndbtd45UGhWHmQs7tLJVzFHyBFxMz6OmYBMfMBfK6ra1kqVkbt
+	FShtbTGdS0XJXbmxtWXfQjvU+Q48eE5A4HnBqCpAJlAHMjG+Q24UUBl2ktvOBJJbciPO
+	Ug731vfll4rjiNRd6gd6C24TG8bcHSjQFZijfZDFexnvInwKi9gvkDnIk8cwg+tWcb6G
+	4+t4s/gg+McuI/DwK+xdGBZ1iSL+vzUU4/TLLw0+0uLNq0vq+VWf6JROj3lmQNQmZWZW
+	2jEYg1+TEHlIXfRb9BeclStwFY1Gc1JzU/Mp6sOco7foPdyZx4g0YuYOspAdL2ITtu+i
+	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
+	dCAtMjMwIC9GbGFncyA5NgovRm9udEJCb3ggWy0xNjcgLTI3MyAxMTEwIDk3OV0gL0Zv
+	bnROYW1lIC9WTUZJUFArSGVsdmV0aWNhLUxpZ2h0T2JsaXF1ZSAvSXRhbGljQW5nbGUK
+	LTEyIC9TdGVtViAwIC9NYXhXaWR0aCAxMDE2IC9YSGVpZ2h0IDYyMyAvRm9udEZpbGUy
+	IDYyIDAgUiA+PgplbmRvYmoKNjUgMCBvYmoKWyAyNzggMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAow
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2NjcgNjExIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgNTU2IDAgNTU2CjAgNTU2IDAgMCAwIDIyMiAwIDAgMCAwIDAgNTU2
+	IDAgMCAzMzMgNTAwIDI3OCA1NTYgNTAwIDAgMCA1MDAgXQplbmRvYmoKMTkgMCBvYmoK
+	PDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvVk1GSVBQ
+	K0hlbHZldGljYS1MaWdodE9ibGlxdWUKL0ZvbnREZXNjcmlwdG9yIDY0IDAgUiAvV2lk
+	dGhzIDY1IDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjEgL0VuY29kaW5nCi9N
+	YWNSb21hbkVuY29kaW5nID4+CmVuZG9iago2NiAwIG9iago8PCAvTGVuZ3RoIDY3IDAg
+	UiAvTGVuZ3RoMSA5Njk2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ab1a
+	C1hTV7Ze+zyTkwSSQJ4QkpBAeAQCKMEoyhHDQwFFRAsKFUQs1kfVWnyNjlVbEO1r5voo
+	0xn7sDPW3nYCtjbW0evXsVP78Lt9Tmtr2+nUtraWvsY+leSuc4JUub39/L7bb87JPnuv
+	/Th77X+tvdbe+2TlipvaQQMbgYba2a3LFoB8uccAkH1tS1qXxeiEDIxfaOtc6YjRLNL0
+	rQuWXbckRitCAIL7usVrhtonYr34vR3trfNj5XARY38HZsRoMhpjd8eSlatjtP5VjOsX
+	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
+	L1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Bc2NlbnQgNzcwIC9DYXBIZWlnaHQgNzIwIC9E
+	ZXNjZW50IC0yMzAgL0ZsYWdzIDMyCi9Gb250QkJveCBbLTEwMTggLTQ4MSAxNDM2IDEx
+	NTldIC9Gb250TmFtZSAvTkRGRVFaK0hlbHZldGljYS1Cb2xkIC9JdGFsaWNBbmdsZQow
+	IC9TdGVtViAwIC9NYXhXaWR0aCAxNTAwIC9YSGVpZ2h0IDY0NCAvRm9udEZpbGUyIDY2
+	IDAgUiA+PgplbmRvYmoKNjkgMCBvYmoKWyAyNzggMCAwIDAgMCAwIDAgMCAwIDAgMzg5
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNzIyCjAg
+	MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCA2MTEgNTU2IDYxMQo1NTYgMCA2MTEgMCAyNzggMCA1NTYgMjc4IDAg
+	NjExIDYxMSA2MTEgMCAzODkgNTU2IDMzMyA2MTEgNTU2IDAgMCA1NTYgXQplbmRvYmoK
+	MTcgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9u
+	dCAvTkRGRVFaK0hlbHZldGljYS1Cb2xkIC9Gb250RGVzY3JpcHRvcgo2OCAwIFIgL1dp
+	ZHRocyA2OSAwIFIgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMTIxIC9FbmNvZGluZyAv
+	TWFjUm9tYW5FbmNvZGluZwo+PgplbmRvYmoKNzAgMCBvYmoKKFVudGl0bGVkKQplbmRv
+	YmoKNzEgMCBvYmoKKE1hYyBPUyBYIDEwLjYuOCBRdWFydHogUERGQ29udGV4dCkKZW5k
+	b2JqCjcyIDAgb2JqCihTY290dCBNYWluKQplbmRvYmoKNzMgMCBvYmoKKE9tbmlHcmFm
+	ZmxlIFByb2Zlc3Npb25hbCkKZW5kb2JqCjc0IDAgb2JqCihEOjIwMTIwMTAzMjM1MjI2
+	WjAwJzAwJykKZW5kb2JqCjEgMCBvYmoKPDwgL1RpdGxlIDcwIDAgUiAvQXV0aG9yIDcy
+	IDAgUiAvUHJvZHVjZXIgNzEgMCBSIC9DcmVhdG9yIDczIDAgUiAvQ3JlYXRpb25EYXRl
+	Cjc0IDAgUiAvTW9kRGF0ZSA3NCAwIFIgPj4KZW5kb2JqCnhyZWYKMCA3NQowMDAwMDAw
+	MDAwIDY1NTM1IGYgCjAwMDAwNTQ1ODYgMDAwMDAgbiAKMDAwMDAyNjYxMyAwMDAwMCBu
+	IAowMDAwMDAzOTQ5IDAwMDAwIG4gCjAwMDAwMjQ2MDEgMDAwMDAgbiAKMDAwMDAwMDAy
+	MiAwMDAwMCBuIAowMDAwMDAzOTI5IDAwMDAwIG4gCjAwMDAwMDQwNTQgMDAwMDAgbiAK
+	MDAwMDAxNjY3OSAwMDAwMCBuIAowMDAwMDA2MjQ1IDAwMDAwIG4gCjAwMDAwMDY4OTkg
+	MDAwMDAgbiAKMDAwMDAwNDg4MSAwMDAwMCBuIAowMDAwMDA1NTM2IDAwMDAwIG4gCjAw
+	MDAwMDU1NTYgMDAwMDAgbiAKMDAwMDAwNjIyNSAwMDAwMCBuIAowMDAwMDA0NDA2IDAw
+	MDAwIG4gCjAwMDAwMjQ1NjQgMDAwMDAgbiAKMDAwMDA1NDIxMyAwMDAwMCBuIAowMDAw
+	MDQ0MDQ4IDAwMDAwIG4gCjAwMDAwNDcyMTcgMDAwMDAgbiAKMDAwMDAwNDcyMyAwMDAw
+	MCBuIAowMDAwMDA0NTY0IDAwMDAwIG4gCjAwMDAwMzQ4NjIgMDAwMDAgbiAKMDAwMDAx
+	NTU4NyAwMDAwMCBuIAowMDAwMDE1NjMyIDAwMDAwIG4gCjAwMDAwMTU2NzcgMDAwMDAg
+	biAKMDAwMDAxNTcyNCAwMDAwMCBuIAowMDAwMDE1NzcxIDAwMDAwIG4gCjAwMDAwMTc1
+	NzUgMDAwMDAgbiAKMDAwMDAyNTk5NCAwMDAwMCBuIAowMDAwMDI1MTg3IDAwMDAwIG4g
+	CjAwMDAwMjQ3NjQgMDAwMDAgbiAKMDAwMDAyMzY5OSAwMDAwMCBuIAowMDAwMDEyNzQ2
+	IDAwMDAwIG4gCjAwMDAwMTU1NjYgMDAwMDAgbiAKMDAwMDAwNjkxOSAwMDAwMCBuIAow
+	MDAwMDA5ODg0IDAwMDAwIG4gCjAwMDAwMDk5MDUgMDAwMDAgbiAKMDAwMDAxMjcyNSAw
+	MDAwMCBuIAowMDAwMDE1ODE5IDAwMDAwIG4gCjAwMDAwMTY2NTkgMDAwMDAgbiAKMDAw
+	MDAxNjcxNSAwMDAwMCBuIAowMDAwMDE3NTU1IDAwMDAwIG4gCjAwMDAwMTc2MTIgMDAw
+	MDAgbiAKMDAwMDAyMzY3OCAwMDAwMCBuIAowMDAwMDIzNzM2IDAwMDAwIG4gCjAwMDAw
+	MjQ1NDQgMDAwMDAgbiAKMDAwMDAyNDY4NCAwMDAwMCBuIAowMDAwMDI1MTY3IDAwMDAw
+	IG4gCjAwMDAwMjU5NzQgMDAwMDAgbiAKMDAwMDAyNjU5MyAwMDAwMCBuIAowMDAwMDI2
+	Nzc2IDAwMDAwIG4gCjAwMDAwMjY2NjEgMDAwMDAgbiAKMDAwMDAyNjc1NCAwMDAwMCBu
+	IAowMDAwMDI2ODY5IDAwMDAwIG4gCjAwMDAwMzQzNjYgMDAwMDAgbiAKMDAwMDAzNDM4
+	NyAwMDAwMCBuIAowMDAwMDM0NjEyIDAwMDAwIG4gCjAwMDAwMzUwMzcgMDAwMDAgbiAK
+	MDAwMDA0MzU0NCAwMDAwMCBuIAowMDAwMDQzNTY1IDAwMDAwIG4gCjAwMDAwNDM3OTAg
+	MDAwMDAgbiAKMDAwMDA0NDIyMyAwMDAwMCBuIAowMDAwMDQ2NzI5IDAwMDAwIG4gCjAw
+	MDAwNDY3NTAgMDAwMDAgbiAKMDAwMDA0Njk4OSAwMDAwMCBuIAowMDAwMDQ3NDA1IDAw
+	MDAwIG4gCjAwMDAwNTM3MjEgMDAwMDAgbiAKMDAwMDA1Mzc0MiAwMDAwMCBuIAowMDAw
+	MDUzOTczIDAwMDAwIG4gCjAwMDAwNTQzOTMgMDAwMDAgbiAKMDAwMDA1NDQyMCAwMDAw
+	MCBuIAowMDAwMDU0NDcyIDAwMDAwIG4gCjAwMDAwNTQ1MDEgMDAwMDAgbiAKMDAwMDA1
+	NDU0NCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDc1IC9Sb290IDQ3IDAgUiAvSW5m
+	byAxIDAgUiAvSUQgWyA8M2QwYzRmYWZkYzk0MzkyYmU1MTE3YWY0MGNiMzE5OTA+Cjwz
+	ZDBjNGZhZmRjOTQzOTJiZTUxMTdhZjQwY2IzMTk5MD4gXSA+PgpzdGFydHhyZWYKNTQ3
+	MDYKJSVFT0YKMSAwIG9iago8PC9BdXRob3IgKFNjb3R0IE1haW4pL0NyZWF0aW9uRGF0
+	ZSAoRDoyMDEwMDkyODE5MDYwMFopL0NyZWF0b3IgKE9tbmlHcmFmZmxlIFByb2Zlc3Np
+	b25hbCA1LjIpL01vZERhdGUgKEQ6MjAxMjAxMDMyMzUxMDBaKS9Qcm9kdWNlciA3MSAw
+	IFIgL1RpdGxlIChyZXN0b3JlX2luc3RhbmNlKT4+CmVuZG9iagp4cmVmCjEgMQowMDAw
+	MDU2MzY0IDAwMDAwIG4gCnRyYWlsZXIKPDwvSUQgWzwzZDBjNGZhZmRjOTQzOTJiZTUx
+	MTdhZjQwY2IzMTk5MD4gPDNkMGM0ZmFmZGM5NDM5MmJlNTExN2FmNDBjYjMxOTkwPl0g
+	L0luZm8gMSAwIFIgL1ByZXYgNTQ3MDYgL1Jvb3QgNDcgMCBSIC9TaXplIDc1Pj4Kc3Rh
+	cnR4cmVmCjU2NTQ2CiUlRU9GCg==
+	</data>
+	<key>QuickLookThumbnail</key>
+	<data>
+	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
+	ZmlGSQAAABAAAAISaXRJVAAAABQAAAIia29LUgAAAAwAAAI2AEsAbABlAHUAcgBlAG4A
+	LQBMAEMARABMAEMARAAtAGYAYQByAHYAZQBzAGsA5gByAG0ASwBvAGwAbwByACAATABD
+	AEQAQwBvAGwAbwByACAATABDAEQARgBhAHIAZwBlAC0ATABDAEQATABDAEQAIABjAG8A
+	dQBsAGUAdQByAEwAQwBEACAAQwBvAGwAbwByAGkAZABvAEwAQwBEACAAYQAgAEMAbwBy
+	AGUAc19pgnIAIABMAEMARABMAEMARAAgAGMAbwBsAG8AcjCrMOkw/AAgAEwAQwBEBCYE
+	MgQ1BEIEPQQ+BDkAIAQWBBoALQQ0BDgEQQQ/BDsENQQ5AEYA5AByAGcALQBMAEMARF9p
+	gnJtsmZ2mG95OlZoAEYAYQByAGIALQBMAEMARABWAOQAcgBpAC0ATABDAEQATABDAEQA
+	IABjAG8AbABvAHIAac7st+wAIABMAEMARAAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUs
+	IEluYy4sIDIwMTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUgABAAAAARbP
+	WFlaIAAAAAAAAG8xAAA5YwAAAYNYWVogAAAAAAAAYO4AALdqAAAIElhZWiAAAAAAAAAm
+	twAADzIAAMmXY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA2ADsAQABF
+	AEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKMAqACtALIAtwC8AMEA
+	xgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZ
+	AWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0C
+	JgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMh
+	Ay0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUE
+	YwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXV
+	BeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YH
+	mQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmP
+	CaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL
+	4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5k
+	Dn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETER
+	TxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRq
+	FIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX
+	9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2Mbihuy
+	G9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f
+	6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRN
+	JHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYp
+	OClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5M
+	LoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz
+	8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8
+	Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JA
+	I0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0ar
+	RvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN
+	3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21Uo
+	VXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZd
+	J114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9
+	ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbblu
+	Em5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4
+	d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeA
+	qIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opk
+	isqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU
+	9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+L
+	n/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+r
+	Aqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5
+	tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C
+	28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83
+	z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXc
+	it0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ
+	6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4
+	Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9wYXJhAAAAAAADAAAAAmZmAADypwAA
+	DVkAABPQAAAKDnZjZ3QAAAAAAAAAAAADAQAAAgAAAAcAHgBKAIsA4wEqAW4BwAIZAnQC
+	2gNJA8MERwTUBW0GEQbCB3wIPgkHCd0KuQucDI8Npw7cEBARSxKJE8kVERZcF6wZBBph
+	G70dIB6MH/ghZCLaJE4lyScvKI4p6ytJLJ8t9i9DMI0x0DMNNEI1czacN8A44Dn9Oxc8
+	Kz05PkU/UkBjQXNChEOXRKtFv0bTR+lI/0oVSyxMQ01bTmlPdlCFUZJSn1OrVLdVwlbL
+	V9JY2VnfWuNb6FztXehe3F/OYL9hr2KeY41kemVmZlFnO2gkaQ5p9mrfa8ZsqW2NbnBv
+	U3A3cRpx/HLec8B0o3WFdmZ3SXgreQp56nrMe7B8mH2Efnd/cYBygXqCioOhhL2F34cJ
+	iDyJcIqji9aNCo48j22QnpHOkv2ULJVbloqXtpjgmgubNZxfnYmesp/boQSiLaNWpH+l
+	qKbRp/ipIKpMq3yssq3xrzqwj7Hvs1u0z7ZPt9S5PLp0u6m83L4LvzPAVsFxwoXDkcSW
+	xZbGkceIyIPJh8qNy43Mhc10zlfPLs/70MDRe9I20vbT19S51ZrWfddf2ELZJdoJ2u3b
+	0dy13Zrefd9g4EThKeIQ4vnj5uTW5cnmwee76Lnpueql647sdu1e7kXvK/AQ8PXx2vK+
+	86H0hfVo9kv3L/gT+Pf53PrA+6L8hP1l/kT/Iv//AAAABgAaAEAAeADFARMBTAGQAd8C
+	MwKOAvMDXwPWBFUE3QVwBg4GtwdlCBoI2gmcCmcLQgw9DVQOaA+AEKARwRLpFBUVRBZ5
+	F68Y7xouG3IcvB4LH1YgqiH/I0EkgSW/JvwoNylqKp0ryyzyLhUvMzBIMVsyZzNxNHk1
+	fTZ6N2o4WzlMOj07MDwiPRU+CD76P+1A4UHVQspDvkSzRadGmEeISHdJaEpZS0hMOE0n
+	ThVPBE/0UOJR0VLAU7BUnlWIVnNXXlhJWTNaHVsGW+5c1l29XqNfimBvYVRiNGMMY+Jk
+	uWWPZmZnPGgRaOZpu2qRa2VsOm0PbeNut2+IcFlxK3H8cs5zoHRydUN2FXbnd7l4jHle
+	ejB7AnvXfK99i35tf1WARIE6gjmDPYRIhViGboeHiKWJw4rhi/6NHI45j1aQc5GQkqyT
+	yZTmlgKXHJg2mVGabZuLnKyd0J72oCKhUKKDo7mk8aYup3GotKn3qzmsfK2+rwCwQbGD
+	ssW0BbVHtoi3x7kHukW7gry9vfS/JsBTwXvCnsO7xNXF6cb3yATJE8ohyy/MPc1MzlrP
+	aNB30YbSldOi1K/VvNbJ19bY5dn02wPcFN0l3jjfTOBn4aPi6eQn5Vrmhueq6Mfp4er4
+	7A7tJe4/71vwgPHQ8zP0k/Xz91L4tPoY+4X8+P53//8AAAAEABEAKgBOAIAAwAEHAToB
+	dAG3AgICTQKgAvsDXgPKBDwEtgU4BcIGUAbjB3sIGwjHCY0KYws8DBsM/g3iDssPtRCl
+	EZgSjhOIFIUVhhaLF5MYnxmrGrgbvRy9Hb4evx++ILshtSKrI50kiyV1JlwnQCgiKQAp
+	2yq3K4ssVi0gLeoutS+AMEsxFjHhMqszdTQ/NQk10zadN2g4NDj4Ob46hTtLPBI82j2i
+	Pmo/Mj/8QMZBkUJdQypD90TDRY9GW0cnR/JIvkmKSlZLIUvrTLZNgE5MTxZP4VCrUXNS
+	O1MCU8pUklVaViBW51euWHVZO1oCWslbj1xTXRZd2V6bX11gHWDdYZ1iXWMcY9pkmGVW
+	ZhNmz2eLaEVpAGm7anZrMWvsbKdtYm4cbtdvk3BOcQhxwXJ6czNz7HSldV52F3bPd4d4
+	P3j4ebB6aXsge9l8lH1Ufhl+5X+4gJSBeYJmg1yEWYVbhmWHdYiFiZaKpou2jMaN1Y7l
+	j/SRA5ITkyKUMJU6lkOXSphRmVmaYptvnH+dk56sn8ug76Ilo3mk0KYnp36o1qotq4Ss
+	264xr4iw3rI2s4u037Yzt4e43Lozu4q84r48v5jA9sJUw7XFJ8akyC3JxctrzSTO7NDH
+	0rHUqdaw2MHa3d0A3zDhp+SG54rqt+4P8Yj1GPi1/Ff//wAAbmRpbgAAAAAAAAY2AACl
+	4wAAVqEAAFFbAACnKwAAJZsAAA4UAABQDQAAVDkAAkKPAAHZmQABR64AAwEAAAIAAAAN
+	ACcARgBmAIcAqADJAOsBDgExAVUBegGdAbwB2wH8Ah0CPwJiAoYCqgLPAvQDGwNBA2gD
+	kAO5A+IECwQ1BGAEjAS4BOQFEgU/BW4FoQXVBgoGQQZ4BrIG7AcoB2cHpwfpCC4IdQi/
+	CQsJWgmsCgEKWAqyCw4LbgvSDDgMoA0IDXIN3g5KDrkPKA+aEA0QgRD3EW8R6BJjEt8T
+	YhPnFG0U9hWBFg4WnRcvF8MYWxj1GZEaMRrTG3ccHRzQHYceQh8AH8EghSFNIhki6CO7
+	JJElaiZGJyUoDCj1KeIq0ivELLotsy6wL68wsjG4MsAzyzTeNfE3BDgVOSM6LTsxPDA9
+	Kj4gPxJAAkDvQdtCv0OiRIhFb0ZYR0JIL0keSg9LA0v4TPBN6k7lT+JQ4VHkUutT81T9
+	VglXF1gnWTlaTVtjXHtdlV6wX85g7WIOYzNkWWV/ZqNnxWjjaf1rEmwhbSpuLm8tcClx
+	InIWcwlz+nTpdhp3TXiEeb96/nxFfZN+64BNgbuDNIS5hkmH44mHiyGMro5Aj+CRkZNY
+	lT2XSZl3m8WeG6AOogKj+aXyp+6p7Kvsre+v9bH9tAi2G7gvukS8Wb5pwHbCfsSAxn3I
+	dspszGDOi9C40urVIddd2Z/b5t4x4IHi1eUr54jp5+xH7qrxEPN79e34Zvrn/XD//wAA
+	AA8ALgBRAHUAmgC/AOQBCwEyAVsBhAGpAcsB7wIUAjoCYAKIArAC2QMDAy0DWQOFA7ED
+	3wQNBDwEawSbBM0E/gUxBWQFnAXVBg8GTAaJBsgHCgdNB5IH2gglCHIIwgkWCWwJxgoj
+	CoIK5QtKC7oMKwyfDRUNjA4GDoIPAA+BEAMQiBEOEZcSIhKvE0AT1RRtFQYVohZBFuIX
+	hhgtGNYZgRowGuAbkxxIHQQdwh6DH0YgDCDWIaIicyNGJB4k+CXWJrcnoCiXKZEqjiuO
+	LJItmi6mL7UwyDHeMvc0FTU6NmM3jji9Oe87JTxfPZs+20AeQWRCr0P7RUVGi0fLSQVK
+	N0tiTIZNpk7BT9pQ8FIEUxZUKlVAVllXc1iPWa5azlvxXRZePV9mYJFhvmLuZCNlWGaP
+	Z8Zo/Wo0a2lsnm3RbwJwMnFgco5zu3Todg93N3hgeYt6uHvnfRd+SX99gLKB6oMjhF2F
+	mobYiBeJWYqei+SNLY54j8aRGJJvk8yVMJabmA6ZiZsMnJWeJ5/HoWmjDKSyplqoBKmw
+	q1+tEK7DsHiyL7Potae3abktuvK8ur6CwEzCF8PjxbDHfMlKyxnM0M5Vz+PRetMe1M7W
+	i9hT2ibcAd3i38bhq+OP5XLnU+kb6p/sJ+2x7z7wzvJf8+/1gPcP+Jn6Hvuf/Rr+j///
+	AAAAFwBBAHAAnwDPAP8BMgFmAZkBxQHzAiICUgKEArcC7AMhA1gDkAPJBAMEPgR6BLcE
+	9QU1BXYFvQYFBk8GmwbqBzsHkAfoCEQIpAkICXAJ3ApMCsALNwu6DEIMzA1ZDeoOfg8V
+	D7AQTxDxEZYSPhLpE50UUxUNFcoWiRdMGBIY2hmlGnIbQRwTHOsdxh6kH4YgayFUIkEj
+	MiQnJR8mGycaKCApKyo5K0ssYS18LpovvTDkMg4zPDRyNa427zg1OYE60jwoPYQ+5kBM
+	QbdDK0SkRiFHo0kpSrVMRE3YT3BRDFKwVFtWCVe9WXZbNFz4XsBgjWJeZDZmDGfZaZpr
+	SWzpbnlv/HF0cuV0UHWzdxF4cnnUezp8oX4Lf3iA54JYg8yFQoa6iDSJtos9jMmOWY/r
+	kX6TEZSili+XuZk+mr+cPJ22nwWgTKGVot+kKqV3psWoFalmqrqsDq1krrywFbFwssu0
+	KLWKtu24Ubm3ux68hr3uv1fAwcIrw5XE/8Zqx9TJQMqrzBbNc87K0BvRaNKs0+rVI9ZX
+	14LYqNnK2uXb/N0Q3h/fK+A14TriPuNA5EDlPuY65zfoMekq6iLrDuvp7Lntd+417uzv
+	pfBZ8QrxvPJm8xDzuPRc9QD1ovZC9uL3f/gc+Ln5Vfnw+oz7J/vC/F78+P2T/i/+yf9k
+	//8AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui///9owAAA9wAAMBsbW1v
+	ZAAAAAAAAAYQAACcsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+	</data>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>RowAlign</key>
+	<integer>1</integer>
+	<key>RowSpacing</key>
+	<real>36</real>
+	<key>SheetTitle</key>
+	<string>Canvas 1</string>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>YES</string>
+	<key>UniqueID</key>
+	<integer>1</integer>
+	<key>UseEntirePage</key>
+	<false/>
+	<key>VPages</key>
+	<integer>1</integer>
+	<key>WindowInfo</key>
+	<dict>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>ExpandedCanvases</key>
+		<array>
+			<dict>
+				<key>name</key>
+				<string>Canvas 1</string>
+			</dict>
+		</array>
+		<key>Frame</key>
+		<string>{{241, 113}, {949, 760}}</string>
+		<key>ListView</key>
+		<true/>
+		<key>OutlineWidth</key>
+		<integer>142</integer>
+		<key>RightSidebar</key>
+		<false/>
+		<key>ShowRuler</key>
+		<true/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>120</integer>
+		<key>VisibleRegion</key>
+		<string>{{0, 17.8947}, {842.105, 622.105}}</string>
+		<key>Zoom</key>
+		<real>0.94999998807907104</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>0.94999998807907104</real>
+				<real>1.1299999952316284</real>
+			</array>
+		</array>
+	</dict>
+	<key>saveQuickLookFiles</key>
+	<string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/fundamentals/restore_instance.png b/docs/html/images/fundamentals/restore_instance.png
index fa428a7..57a95ec 100644
--- a/docs/html/images/fundamentals/restore_instance.png
+++ b/docs/html/images/fundamentals/restore_instance.png
Binary files differ
diff --git a/docs/html/images/fundamentals/service_binding_tree_lifecycle.png b/docs/html/images/fundamentals/service_binding_tree_lifecycle.png
index 46d2df5..5265216 100644
--- a/docs/html/images/fundamentals/service_binding_tree_lifecycle.png
+++ b/docs/html/images/fundamentals/service_binding_tree_lifecycle.png
Binary files differ
diff --git a/docs/html/images/fundamentals/service_lifecycle.graffle b/docs/html/images/fundamentals/service_lifecycle.graffle
new file mode 100644
index 0000000..73a17a2
--- /dev/null
+++ b/docs/html/images/fundamentals/service_lifecycle.graffle
@@ -0,0 +1,8595 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGrafflePro</string>
+		<string>138.9.0.117994</string>
+	</array>
+	<key>CreationDate</key>
+	<string>2010-10-05 15:40:27 -0700</string>
+	<key>Creator</key>
+	<string>Scott Main</string>
+	<key>GraphDocumentVersion</key>
+	<integer>6</integer>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>ImageCounter</key>
+	<integer>1</integer>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2011-12-29 10:02:33 -0800</string>
+	<key>Modifier</key>
+	<string>Scott Main</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>41</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+	</dict>
+	<key>QuickLookPreview</key>
+	<data>
+	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
+	H374+NuHH+8gaW+FBrEcVrGOS13l8OErAp3abz3/DO7Ybw2vJU32eFZ+aSuHRaT+LL/m
+	FfZStXDz7ZWdfOEibSdnPxV13Ml3/wcwYwWhCmVuZHN0cmVhbQplbmRvYmoKNiAwIG9i
+	ago2MDY5CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgNCAwIFIg
+	L1Jlc291cmNlcyA3IDAgUiAvQ29udGVudHMgNSAwIFIgL01lZGlhQm94IFswIDAgNTc2
+	IDczM10KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9J
+	bWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2UgPDwgL0NzMiAxNyAwIFIK
+	L0NzMSA4IDAgUiA+PiAvRXh0R1N0YXRlIDw8IC9HczUgMjQgMCBSIC9HczMgMjUgMCBS
+	IC9HczQgMjYgMCBSIC9HczEgMjcgMCBSCi9HczIgMjggMCBSID4+IC9Gb250IDw8IC9G
+	MS4wIDE1IDAgUiAvRjIuMCAxOCAwIFIgPj4gL1hPYmplY3QgPDwgL0ltMyAxMyAwIFIK
+	L0ltMiAxMSAwIFIgL0ltMSA5IDAgUiA+PiAvU2hhZGluZyA8PCAvU2gyIDE5IDAgUiAv
+	U2gzIDIwIDAgUiAvU2gxIDE2IDAgUgovU2g1IDIyIDAgUiAvU2g2IDIzIDAgUiAvU2g0
+	IDIxIDAgUiA+PiA+PgplbmRvYmoKMTkgMCBvYmoKPDwgL0NvbG9yU3BhY2UgMjkgMCBS
+	IC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA1OS41IC0yNS41ODQ4NSA1OS40OTk5OCAy
+	NS41ODQ4NwpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAv
+	RnVuY3Rpb24gMzAgMCBSID4+CmVuZG9iagoyMCAwIG9iago8PCAvQ29sb3JTcGFjZSAy
+	OSAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDU5LjUgLTI1LjU4NDg1IDU5LjQ5
+	OTk4IDI1LjU4NDg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxz
+	ZSBdIC9GdW5jdGlvbiAzMSAwIFIgPj4KZW5kb2JqCjE2IDAgb2JqCjw8IC9Db2xvclNw
+	YWNlIDI5IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTkuNSAtMjUuNTg0ODUg
+	NTkuNDk5OTggMjUuNTg0ODcKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNl
+	IGZhbHNlIF0gL0Z1bmN0aW9uIDMyIDAgUiA+PgplbmRvYmoKMjIgMCBvYmoKPDwgL0Nv
+	bG9yU3BhY2UgMjkgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA1OS41IC0yNS41
+	ODQ4NSA1OS40OTk5OCAyNS41ODQ4NwpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsg
+	ZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMzMgMCBSID4+CmVuZG9iagoyMyAwIG9iago8
+	PCAvQ29sb3JTcGFjZSAyOSAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDU5LjUg
+	LTI1LjU4NDg1IDU5LjQ5OTk4IDI1LjU4NDg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRl
+	bmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAzNCAwIFIgPj4KZW5kb2JqCjIxIDAg
+	b2JqCjw8IC9Db2xvclNwYWNlIDI5IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsg
+	NjAuNTM4MDkgLTI2LjAyNjIxIDYwLjUzODA4CjI2LjAyNjIzIF0gL0RvbWFpbiBbIDAg
+	MSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAzNSAwIFIgPj4KZW5k
+	b2JqCjEzIDAgb2JqCjw8IC9MZW5ndGggMTQgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0
+	eXBlIC9JbWFnZSAvV2lkdGggMjU4IC9IZWlnaHQgMTIyIC9JbnRlcnBvbGF0ZQp0cnVl
+	IC9Db2xvclNwYWNlIDM2IDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9TTWFzayAzNyAw
+	IFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJl
+	YW0KeAHt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABA+8DA3DrAAEKZW5kc3RyZWFtCmVuZG9iagoxNCAw
+	IG9iago0MzQKZW5kb2JqCjExIDAgb2JqCjw8IC9MZW5ndGggMTIgMCBSIC9UeXBlIC9Y
+	T2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjYyIC9IZWlnaHQgMTI0IC9JbnRl
+	cnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDM2IDAgUiAvSW50ZW50IC9QZXJjZXB0dWFs
+	IC9TTWFzayAzOSAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURl
+	Y29kZSA+PgpzdHJlYW0KeAHt0AENAAAAwqD3T20PBxEoDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGHgYG
+	fMcAAQplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjQ0OAplbmRvYmoKOSAwIG9iago8
+	PCAvTGVuZ3RoIDEwIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dp
+	ZHRoIDI1OCAvSGVpZ2h0IDEyMiAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFjZSAz
+	NiAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgNDEgMCBSIC9CaXRzUGVyQ29t
+	cG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dCBAAAAAMOg
+	+VMf5IVQYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQPvAwNw6wABCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKNDM0CmVuZG9i
+	ago0MSAwIG9iago8PCAvTGVuZ3RoIDQyIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlw
+	ZSAvSW1hZ2UgL1dpZHRoIDI1OCAvSGVpZ2h0IDEyMiAvQ29sb3JTcGFjZQovRGV2aWNl
+	R3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIg
+	L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae1dZ1viQBA2IE2aAQGRDgICBkQ6iEjvHfT8
+	/3/kZjaAAqHo3Qezsh8OVC5P5uWdtpmdOTs7rRMCJwROCJwQOCFwHAIMI5FIpGJZEgnD
+	HCfXcZ8C6aXnMrlCqVSJYykVCrnsXCr5TygwknOZQqXW6PSXLGsQw2LZS51Wc6GU/xcQ
+	GOm5QqXRs1fm6xub3eEUwXI47DarxWS81KoBhH8kAiOVKS50BtONw3MbDEe4aDT241c0
+	yt1HQgGfy359dalR/RMGwH+Q33jt9N1x8VQ2/1R8FsUqPhVy6UQsEvDYzKxWJZN+1x4A
+	AVQ6o9UVuH/MPJUqtUaz1RbFajWb9Wr5OZ96CPscZlaj+J4qIAHUrMUV4JKFUq3Z6fUH
+	w9FoLIY1Gg0H/W67USlmHyM+u0l/If8GDRgJEODKfnufLJQbnf5wPJ3N5vP5qxgW3Ods
+	OhkPeq1aKRsPeawGteLLEAAAF3qL6y6ee2l0B+MpiP729gfW+49feJd/3t5e57PJqN+u
+	FdOc336lVZ5Ljgt+Fp9ipHI1a/Xep4q1zmAyE430q69nAcJ03G9V8vE7p1n3NQgQAIPt
+	NpotN/vj2Zz/9sXw/a8QeH9fYjDs1ovJsNuiV32BBYwEAQg85KudIfAf2f/p0iJ5CzdN
+	lGE27jdL6XvPVyAAG4AAxAu17ohXAJEIvXGbPAav88mgXc5wXoteeX5kYABGkAUAnuq9
+	MQAA19m4snh+5Gkwnw4BAmCB7kiPwJyrLm/8CMCE1wDxIgDfFdGE6bADELhN2qMgYKQK
+	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
+	7g3HE0AB109vXk9ucga960eDbrP6nHm4c12z6iPd4Do4OL/g0uL0c4l8qdpod2F+AQww
+	+PETDOAWcXxBr9Oql4uZeNhru9J9d4wFzrDQGq6d/kg8XXguV+swxKL148dYwC02m41a
+	9aWYS8ZCXrv5Uv3NGRZACNAEOcwxsTi8wfuHZDpXeCoWf/4okyKMMclnU4/RsN9tM7Ea
+	5ffnmPAYKC60rMlqd/sCofA9x8E4mx++OBhlEw76vU6bxaiHWTb/OtgJeaBS61ijyWLF
+	gUYiWHa77cZqvjLotRcK2b/Kj7YRRnrJ5MoLjZYMtWJh/eC5Vnh7MNJKr9OqLxT/Z6YV
+	YoAgwFwzsQw2Uy7Hmv3jOCsi+sc/jIiG28EUvv882+4Dh9O7EwInBE4I0IjAXxMa0M0K
+	ZW5kc3RyZWFtCmVuZG9iago0MiAwIG9iagoyNjI4CmVuZG9iagozNyAwIG9iago8PCAv
+	TGVuZ3RoIDM4IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRo
+	IDI1OCAvSGVpZ2h0IDEyMiAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xh
+	dGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+
+	CnN0cmVhbQp4Ae1dZ1viQBA2IE2aAQGR3gUMiAgiVXrvoOf//yM3swEUCEXvPpiV/XCg
+	cnkyL++0zezM2dlpnRA4IXBC4ITACYHjEGAYiUQiFcuSSBjmOLmO+xRILz2XyRVKpUoc
+	S6lQyGXnUsl/QoGRnMsUKrVGp79kWYMYFste6rSaC6X8v4DASM8VKo2evTJf39jsDqcI
+	lsNht1ktJuOlVg0g/CMRGKlMcaEzmG4cHn8oEuVisfiPX7EYdxcNB30u+/XVpUb1TxgA
+	/0F+47XTd8slUplsvlAUxSrkc8/pZDwa9NjMrFYlk37XHgABVDqj1RW8e3jKlyq1RrPV
+	FsVqNZv1armYTd1HfA4zq1F8TxWQAGrW4gpyj7lSrdnp9QfD0WgshjUaDQf9brtRKWQe
+	oj67SX8h/wYNGAkQ4Mruv3vMlRud/nA8nc3m8/mrGBbc52w6GQ96rVopkwh7rAa14ssQ
+	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
+	zNZ+SYUdxn2hwAcMkCPqrf57aM8n9gaNaMhBfgJAOR11QVOygzpAcMAeldCiEZp0LiAQ
+	LQ2IBrwtelS6zcc1aEQM0BraAIJqdwTBIdhDcUaHKD9oAPQpbb1gq1Zo2HvICi41gW/V
+	Gog/V9qDRadO8UUGvPyQDIx7jWIq+iUA0CHI1OyNj3t6afagX7X4aEDEJ42rJ8NOLZ8M
+	u77cshltwbUn+og9q6Fns9h0gfAfFGA66jXLz4mQw/TFntWEBSq92Rm6fy7VAYPpEoSf
+	bxIW7Cd9y4e9drWQ4vw2I3bwXyr5ka/QvF+pNdp80WT2pd7uDccTQAHXT29eT25yBr3r
+	R4Nus1p8ur91XbPqI93gOjg4v+DS4gxwyWyp2mh3YX4BDDD48RMM4BZxfEGv06qXC0+J
+	iNd2pfvuGAucYaE1XDsD0UQ6VyxX6zDEovXjx1jALTabjVr1pfD8GA977eZL9TdnWAAh
+	QBPkMMfE4vCG7u4f08+5fKHw80eZFGCMSTaTeohFAm6bidUovz/HhMdAcaFlTVa72xcM
+	R+44DsbZ/PDFwSibSCjgddosRj3MsvnXwU7IA5VaxxpNFisONBLBstttN1bzlUGvvVDI
+	/lV+tI0w0ksmV15otGSoFQvrB8+1wtuDkVZ6nVZ9ofg/M60QAwQB5pqJZbCZcjnW7B/H
+	WRHRP/5hRDTcDqbw/efZdh84nN6dEDghcEKARgT+AgHb0MwKZW5kc3RyZWFtCmVuZG9i
+	agozOCAwIG9iagoyNjI4CmVuZG9iagozOSAwIG9iago8PCAvTGVuZ3RoIDQwIDAgUiAv
+	VHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDI2MiAvSGVpZ2h0IDEy
+	NCAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1Bl
+	ckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae1dV1si
+	SxB1yDkHiUrOSEayZJCMgO7//yO3qgeUrLj7cKehH2RgF77pM1XnVFd3V9/d3doNgRsC
+	NwRuCNwQ+EsEGIbH4/G50+BuGeYv+7z7dYbHFwhFIrFEyp0mEYuEAv4/QwIhEElkcqVK
+	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
+	SqVUKmR4DN3f+cKWOeA4E08lxGMJudJEIuG/PJLwEw0GGhz6yJUGd/t567eLGwI3BG4I
+	3BD4FQL/AZmG5E4KZW5kc3RyZWFtCmVuZG9iago0MCAwIG9iagoyNzcyCmVuZG9iagoy
+	NCAwIG9iago8PCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjY1ID4+CmVuZG9iagoyNSAw
+	IG9iago8PCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+CmVuZG9iagoyNiAwIG9iago8
+	PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxID4+CmVuZG9iagoyNyAwIG9iago8PCAvVHlw
+	ZSAvRXh0R1N0YXRlIC9DQSAwLjcgPj4KZW5kb2JqCjI4IDAgb2JqCjw8IC9UeXBlIC9F
+	eHRHU3RhdGUgL2NhIDAuNyA+PgplbmRvYmoKNDMgMCBvYmoKPDwgL0xlbmd0aCA0NCAw
+	IFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUg
+	Pj4Kc3RyZWFtCngB1XlnWBTLs3fPbF52l5zTknPOOYMkiRKVnDNLDiIgIEFBQBEBRUFF
+	RAVRoiRRUMSDiIIKBoJIEBUDgoLyDnrO+d/3ufd+e7+8/Tzb+5uq6uqaqe6eqhoAOFe8
+	o6LCYAYAwiNiafZmhlQXVzcqbgoQAQ+gB7xA0ds3JsrA1tYK/K/t2wSAdpiPZXZ0/a9i
+	/zOD0c8/xhcAyBZh+/jF+IYj+AYAsKFvFC0WANQGQh9NiI1CMPoeglloiIEIfrGDA//g
+	1R3s8xtj0L9lHO2NAMBwAIAneXvTAgEgCyN0arxvIKKHbAwAlinCLzgCAGYXBOv6Bnn7
+	AcBZjshIh4dH7uA7CBb3+S96Av8L9vb2+Vent3fgv/jPvSAjkYmNg2OiwryTfl/8v+zC
+	w+KQ5/W7MSE9KSJs945v2JDfop+3sSXyz4P8fkWF/fYZIgNx+UfscUBoO1g6wme3zd9Y
+	N4Bmao9gZCxkGxVruIORZwYFRMXaOv5NT0sOMtqNYBJCP+YfY/KPnjMh3hY7PqMg9GZa
+	nP0eBAsjuC8m3sEEwciKgt4kBzk6/y3z1c/f+G86DAcEm5r/kYGZgmPNd+ZiQXwuGBpp
+	uWMDMhesCixBGPAHcYCG9BFABlgBI2D8dy8DAoA3wolHeDEgFLxFcDgyIhIZE4lg6t9y
+	Rv+NYvp7XCAy7v/WSAW+iGzcv3P+mY2KzPmPzmDgh+B/6N7IHDu8HetiPIMz/zPnPxI7
+	+n5bI98gvyS/9Y9NaFG0IloFbYjWQeuiNQAVzYbmAjJoZbQ62gCth9ZCeBrAFLxBNAf+
+	Y+OO/vDmgPjyyCRNpyCEu3PvPv9wgdNv6eB/r/+bBSB4ZKVt5R8LAIj1T0T2AQBGkVFJ
+	tODAoFiqAbJz/aWp5hG+stJURXkFhR32/zdt58z6Y+wX+99nEcT28D+0SORmNHbOmIP/
+	oXl9AKAtBNmmTP+hibYBQK8IwNAJ3zha/B996J0/DHIa0iMrlBPwASEgjjxnRaAKtIA+
+	MAEWwAY4AlfggayfIGQN0kACSAUZIAcUgKPgOKgA1aAWXARXQDNoA13gFhgEw2AUjIMp
+	MA3mwTuwCr6BTQiCcBAZYoY4IX5IBJKCFCF1SBcygawge8gV8oICoQgoDkqFDkIFUAlU
+	AZ2F6qFrUAd0CxqCHkHPoRloCfoM/YBRMAlmgXlhUVgOVocNYEvYEd4HB8LRcDKcBRfC
+	5XANfBluhW/Bw/A4PA2/g9dQAEWHYkMJoGRQ6igjlA3KDRWAoqHSUPmoMlQN6iqqE3UX
+	9Rg1jVpBfUdj0cxoKloGWae70HvQvuhodBr6MLoCfRHdir6DfoyeQa+if2HIGB6MFEYT
+	Y45xwQRiEjA5mDLMBUwLZgAzjpnHfMNisWxYMawadhfWFRuCTcEexp7CNmL7sI+wc9g1
+	HA7HiZPC6eBscN64WFwO7iTuMq4XN4abx23g6fD8eEW8Kd4NH4HPxJfhL+F78GP4Bfwm
+	gYEgQtAk2BD8CEmEIsI5QifhIWGesElkJIoRdYiOxBBiBrGceJU4QHxB/EJHRydIp0Fn
+	RxdMl05XTtdEd49uhu47iYkkSTIi7SXFkQpJdaQ+0nPSFzKZLErWJ7uRY8mF5HrybfIr
+	8gaFmSJLMaf4UQ5QKimtlDHKB3oCvQi9Ab0HfTJ9Gf11+of0KwwEBlEGIwZvhjSGSoYO
+	hqcMa4zMjAqMNozhjIcZLzEOMS4y4ZhEmUyY/JiymGqZbjPNMaOYhZiNmH2ZDzKfYx5g
+	nmfBsoixmLOEsBSwXGEZYVllZWJVZnViTWStZO1mnWZDsYmymbOFsRWxNbNNsP1g52U3
+	YPdnz2O/yj7Gvs7BzaHP4c+Rz9HIMc7xg5PKacIZylnM2cb5kgvNJcllx5XAdZprgGuF
+	m4Vbi9uXO5+7mXuSB+aR5LHnSeGp5XnAs8bLx2vGG8V7kvc27wofG58+XwjfMb4eviV+
+	Zn5d/mD+Y/y9/MtUVqoBNYxaTr1DXRXgEdglECdwVmBEYFNQTHCPYKZgo+BLIaKQulCA
+	0DGhfqFVYX5ha+FU4QbhSRGCiLpIkMgJkbsi66Jios6ih0TbRBfFOMTMxZLFGsReiJPF
+	9cSjxWvEn0hgJdQlQiVOSYxKwpIqkkGSlZIPpWApValgqVNSj6Qx0hrSEdI10k9lSDIG
+	MvEyDTIzsmyyVrKZsm2yH+SE5dzkiuXuyv2SV5EPkz8nP6XApGChkKnQqfBZUVLRV7FS
+	8YkSWclU6YBSu9InZSllf+XTys9UmFWsVQ6p9Kv8VFVTpaleVV1SE1bzUqtSe6rOom6r
+	flj9ngZGw1DjgEaXxndNVc1YzWbNj1oyWqFal7QWtcW0/bXPac/pCOp465zVmdal6nrp
+	ntGd1hPQ89ar0ZvVF9L307+gv2AgYRBicNngg6G8Ic2wxXDdSNNov1GfMcrYzDjfeMSE
+	yWSPSYXJK1NB00DTBtNVMxWzFLO+XZhdlruKdz015zX3Na83X7VQs9hvcceSZOlgWWE5
+	ayVpRbPqtIatLaxLrV/sFtkdsbvNBtiY25TavLQVs422vWmHtbO1q7R7a69gn2p/14HZ
+	wdPhksM3R0PHIsepPeJ74vb0O9E77XWqd1p3NnYucZ52kXPZ7zLsyuUa7NruhnNzcrvg
+	tuZu4n7cfX6vyt6cvRP7xPYl7hvy4PII8+j2pPf09rzuhfFy9rrkteVt413jveZj7lPl
+	s+pr5HvC952fvt8xvyV/Hf8S/4UAnYCSgMVAncDSwKUgvaCyoJVgo+CK4E8hu0KqQ9ZD
+	bULrQrfDnMMaw/HhXuEdEUwRoRF3IvkiEyMfRUlF5URNR2tGH49epVnSLsRAMfti2mNZ
+	kODwQZx4XHbcTLxufGX8RoJTwvVExsSIxAdJkkl5SQvJpsnnU9Apvin9qQKpGakz+w32
+	n02D0nzS+g8IHcg6MJ9uln4xg5gRmvFXpnxmSebXg84HO7N4s9Kz5rLNshtyKDm0nKeH
+	tA5V56Jzg3NH8pTyTub9yvfLv18gX1BWsHXY9/D9IwpHyo9sFwYUjhSpFp0+ij0acXSi
+	WK/4YgljSXLJXKl1aesx6rH8Y1+Pex4fKlMuqz5BPBF3Yrrcqrz9pPDJoye3KoIqxisN
+	KxureKryqtZP+Z0aO61/+mo1b3VB9Y8zwWeenTU721ojWlNWi62Nr317zunc3fPq5+sv
+	cF0ouPCzLqJu+qL9xTv1avX1l3guFTXADXENS5f3Xh69Ynyl/arM1bONbI0FTaAprmn5
+	mte1iWbL5v7r6tev3hC5UdXC3JLfCrUmta62BbVNt7u2P+qw6Ojv1OpsuSl7s65LoKuy
+	m7W7qIfYk9Wz3Zvcu9YX1bdyK/DWXL9n/9Rtl9tP7tjdGRmwHLg3aDp4+67B3d57Ove6
+	hjSHOu6r328bVh1ufaDyoOUvlb9aRlRHWh+qPWwf1RjtfKT9qGdMb+zWY+PHg0/MnwyP
+	7x5/NLFn4tnTvU+nn/k9W3we9vzTZPzk5lT6C8yL/JcML8te8byqeS3xunFadbp7xnjm
+	wazD7NSc79y7NzFvtuaz3pLfli3wL9QvKi52LZkujS67L8+/i3q3uZLznvF91QfxDzc+
+	6n98sOqyOv+J9mn78+EvnF/qvip/7V+zXXv1Lfzb5nr+BufGxe/q3+/+cP6xsJmwhdsq
+	/ynxs/OX5a8X2+Hb21HeNO/fsQAK6eGAAAA+1yE5hCuSO4wCQKT8ySl+SyDpCoTIIBiH
+	RAoWSAQwB0ki7+0+mBOOhSdR5qjbaDP0E0w4lhHbj0vF6xJwhJfEDroqUhG5jvKCgYHR
+	kimPeYiVkW0v+2VONJc3dzcvle8w/4aAn+Ck8G6RITE58UKJd1Lm0tUy3+SM5I8ojCqR
+	lQ1VYlSr1PrUpzV+arFrS+lo6Jro2ev7GsQYZhmdMG4w6TV9bLa0a9uC1VLaysjafXew
+	Tbxttl2JfbVDg2MbsuuHncdcnru+dptzX9z7ft+ixwvPEa9e70af075H/JL9AwLsArWC
+	hIMpwd9CXocOhtWHH4mIinSIUovmit6ivYrpi62Ny44PSDBPlEoiJi0nP0hpSi3fn5WW
+	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
+	egJjIi3pSYpm6tk0ugOJ6QuZLgcfZBvmdOYq57UW6BweKnQtelecVsp4rKZM7kTHSd2K
+	3irtU63VmDNWZ4/XvD4neT7hwsBF1vqAS52XKVf8rnY1sV6Lah6+IY5kPu/b7TrabvJ1
+	5XR/6HXuu9Uvdfv4ne3BkLtPhvTvNzxg+ytm5P4o96OgscuPl8eFJpyfZj67+Pz+5PzU
+	1kuGV/yvpaZVZjRndef03+jP677VXFBbVFiSXBZ8R3m3tNLxPuGDyoeVj+dXXT8RP3V9
+	DvjC8KX96941sFbzzfDb7PqBDZ6Nju97vq/+OLwpttm/5bG18bP0l9yvoW2/Hf/HBCgh
+	dUikQSRDpPz4anv7iyiSVJQA8LN4e3uzZnv7Zy2SbCDfQPrC/nyv2BHGIjX3qms76H9q
+	/we08H6NCmVuZHN0cmVhbQplbmRvYmoKNDQgMCBvYmoKNTk2MwplbmRvYmoKMzYgMCBv
+	YmoKWyAvSUNDQmFzZWQgNDMgMCBSIF0KZW5kb2JqCjQ1IDAgb2JqCjw8IC9MZW5ndGgg
+	NDYgMCBSIC9OIDEgL0FsdGVybmF0ZSAvRGV2aWNlR3JheSAvRmlsdGVyIC9GbGF0ZURl
+	Y29kZSA+PgpzdHJlYW0KeAGFUk9IFFEc/s02EoSIQYV4iHcKCZUprKyg2nZ1WZVtW5XS
+	ohhn37qjszPTm9k1xZMEXaI8dQ+iY3Ts0KGbl6LArEvXIKkgCDx16PvN7OoohG95O9/7
+	/f1+33tEbZ2m7zspQVRzQ5UrpaduTk2Lgx8pRR3UTlimFfjpYnGMseu5kr+719Zn0tiy
+	3se1dvv2PbWVZWAh6i22txD6IZFmAB+ZnyhlgLPAHZav2D4BPFgOrBrwI6IDD5q5MNPR
+	nHSlsi2RU+aiKCqvYjtJrvv5uca+i7WJg/5cj2bWjr2z6qrRTNS090ShvA+uRBnPX1T2
+	bDUUpw3jnEhDGinyrtXfK0zHEZErEEoGUjVkuZ9qTp114HUYu126k+P49hClPslgqIm1
+	6bKZHYV9AHYqy+wQ8AXo8bJiD+eBe2H/W1HDk8AnYT9kh3nWrR/2F65T4HuEPTXgzhSu
+	xfHaih9eLQFD91QjaIxzTcTT1zlzpIjvMdQZmPdGOaYLMXeWqhM3gDthH1mqZgqxXfuu
+	6iXuewJ30+M70Zs5C1ygHElysRXZFNA8CVgUfYuwSQ48Ps4eVeB3qJjAHLmJ3M0o9x7V
+	ERtno1KBVnqNV8ZP47nxxfhlbBjPgH6sdtd7fP/p4xV117Y+PPmNetw5rr2dG1VhVnFl
+	C93/xzKEj9knOabB06FZWGvYduQPmsxMsAwoxH8FPpf6khNV3NXu7bhFEsxQPixsJbpL
+	VG4p1Oo9g0qsHCvYAHZwksQsWhy4U2u6OXh32CJ6bflNV7Lrhv769nr72vIebcqoKSgT
+	zbNEZpSxW6Pk3Xjb/WaREZ84Or7nvYpayf5JRRA/hTlaKvIUVfRWUNbEb2cOfhu2flw/
+	pef1Qf08CT2tn9Gv6KMRvgx0Sc/Cc1Efo0nwsGkh4hKgioMz1E5UY40D4inx8rRbZJH9
+	D0AZ/WYKZW5kc3RyZWFtCmVuZG9iago0NiAwIG9iago3MDQKZW5kb2JqCjE3IDAgb2Jq
+	ClsgL0lDQ0Jhc2VkIDQ1IDAgUiBdCmVuZG9iago0NyAwIG9iago8PCAvTGVuZ3RoIDQ4
+	IDAgUiAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29k
+	ZSA+PgpzdHJlYW0KeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZF
+	kGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+
+	8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoP
+	gVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1
+	Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGc
+	TvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8Q
+	TSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd
+	70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9
+	t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01e
+	fJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359s
+	fzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7x
+	kthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkO
+	b/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1S
+	NZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1u
+	HKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UUKZW5kc3RyZWFtCmVuZG9i
+	ago0OCAwIG9iago3MzcKZW5kb2JqCjI5IDAgb2JqClsgL0lDQ0Jhc2VkIDQ3IDAgUiBd
+	CmVuZG9iago0OSAwIG9iago8PCAvTGVuZ3RoIDUwIDAgUiAvTiAzIC9BbHRlcm5hdGUg
+	L0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGFVM9rE0EU
+	/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2h
+	B/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1Ki
+	EWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea
+	2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINI
+	OJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4
+	jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpk
+	YYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiw
+	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
+	LRrELM/Km+XtKUoL58bt2VZwM7wvJJVwsupqnOOjQ8E6V+ML3ydfT1g7HlgKBygFuVe5
+	H3xrzsPyZHoXSbgacrMyWXU/Hda7g9b7lXcRoSqygJ376YRW9wOlYQtp8w1db1ner/4O
+	Zyzu/gplbmRzdHJlYW0KZW5kb2JqCjUzIDAgb2JqCjQ4MDUKZW5kb2JqCjUxIDAgb2Jq
+	Cjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgNCAwIFIgL1Jlc291cmNlcyA1NCAwIFIgL0Nv
+	bnRlbnRzIDUyIDAgUiAvTWVkaWFCb3gKWzAgMCA1NzYgNzMzXSA+PgplbmRvYmoKNTQg
+	MCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1h
+	Z2VJIF0gL0NvbG9yU3BhY2UgPDwgL0NzMiAxNyAwIFIKL0NzMSA4IDAgUiA+PiAvRXh0
+	R1N0YXRlIDw8IC9HczUgMjQgMCBSIC9HczMgMjUgMCBSIC9HczEgMjcgMCBSIC9HczIg
+	MjggMCBSCj4+IC9Gb250IDw8IC9GMS4wIDE1IDAgUiAvRjIuMCAxOCAwIFIgPj4gL1hP
+	YmplY3QgPDwgL0ltMyAxMyAwIFIgL0ltNCA1NSAwIFIKL0ltNSA1NyAwIFIgPj4gL1No
+	YWRpbmcgPDwgL1NoNyA1OSAwIFIgL1NoOSA2MSAwIFIgL1NoOCA2MCAwIFIgPj4gPj4K
+	ZW5kb2JqCjU5IDAgb2JqCjw8IC9Db2xvclNwYWNlIDI5IDAgUiAvU2hhZGluZ1R5cGUg
+	MiAvQ29vcmRzIFsgNTkuNSAtMjUuNTg0ODUgNTkuNDk5OTggMjUuNTg0ODcKXSAvRG9t
+	YWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDYyIDAg
+	UiA+PgplbmRvYmoKNjEgMCBvYmoKPDwgL0NvbG9yU3BhY2UgMjkgMCBSIC9TaGFkaW5n
+	VHlwZSAyIC9Db29yZHMgWyA2NC4xNzQxIC0yNy41NzIxNSA2NC4xNzQwOQoyNy41NzIx
+	OCBdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rp
+	b24gNjMgMCBSID4+CmVuZG9iago2MCAwIG9iago8PCAvQ29sb3JTcGFjZSAyOSAwIFIg
+	L1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDY0LjMxNDEyIC0yNS41ODQ4NSA2NC4zMTQx
+	CjI1LjU4NDg4IF0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBd
+	IC9GdW5jdGlvbiA2NCAwIFIgPj4KZW5kb2JqCjU1IDAgb2JqCjw8IC9MZW5ndGggNTYg
+	MCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjc4IC9IZWln
+	aHQgMTIyIC9JbnRlcnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDM2IDAgUiAvSW50ZW50
+	IC9QZXJjZXB0dWFsIC9TTWFzayA2NSAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmls
+	dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0DEBAAAAwqD1T20KP4hAYcCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOA7MI2DAAEKZW5kc3RyZWFtCmVuZG9i
+	ago1NiAwIG9iago0NjcKZW5kb2JqCjU3IDAgb2JqCjw8IC9MZW5ndGggNTggMCBSIC9U
+	eXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjc4IC9IZWlnaHQgMTMw
+	IC9JbnRlcnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDM2IDAgUiAvSW50ZW50IC9QZXJj
+	ZXB0dWFsIC9TTWFzayA2NyAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9G
+	bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0DEBAAAAwqD1T20Hb4hAYcCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	gX9gp5MAAQplbmRzdHJlYW0KZW5kb2JqCjU4IDAgb2JqCjQ5NgplbmRvYmoKNjcgMCBv
+	YmoKPDwgL0xlbmd0aCA2OCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdl
+	IC9XaWR0aCAyNzggL0hlaWdodCAxMzAgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0lu
+	dGVycG9sYXRlIHRydWUgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURl
+	Y29kZSA+PgpzdHJlYW0KeAHtXWdDKksMld57ky5dehFBuvTei/r//8hLZgELi+364e0O
+	84WVK97dQ3JyJjOTXF1dxgWBCwIXBC4IXBD43yMgEAiFQhEXB9y3QCD4e4AFQpFYIpXK
+	5AouDrlMJpWIRcI/BQYhkcqVKo1WpzcYuTcMBp1Wo1YqpJK/A0YgBEhUGr3JYrM7XG63
+	h2vD7XY57TaLyaBVKaRi0V8YDGKiUOvNNqc3ELqNJZKpVJpbI5VKJuLRcODGZbcYNErZ
+	v+MCviNVaIxWpy8cT98VSpVqrc69UatWSsV8JhHxu69NWsDl3whGIJLINUabOxjL3Jdr
+	zXa31x8MuTcG/V6306xXCtlEyGs3aRXSf3EjcB6V3uoOxnMP9VZ3OJ7M5vPFkntjsZjP
+	puNhr90o55Nh77VR/XtzAUaRa0wOfyxXanQGk9litd5st9sd9wbc9Wa9Ws6no16zkk8E
+	XRadQvI7cxEIJQqd1RNJFxvd0XSx2mx3T09PzzBeuDXwlp+fnna7zXo5G/ea5VzUd21Q
+	/cqLBCKpymD3xfPV9nC6XCMk3APk9etjgNluVrNRt15IBp0mtezn1oKgGB3BVLHRmywQ
+	EwT89T/h4hUBZrtZTgetcjbiNmtk4h9KFwBFbXKFM+XWcLba2wnXUXl5QVx22/V83Kne
+	RT2Wn8LCgBLJVTvjxZrxHe5jgvZNCGaznPTq+ZgXYPmJEwmEUpXJFcnVupPlhnEejnvP
+	0eMZc1nN+o37n8IilCiNznCu1pui93CeUI6QEGNBc9muZwOAxWNWfz8SCcQKgyOUrSIo
+	nIzFb2E4vX6FJeo2qSTC76VdBCK57jqYqXQnDCinf5fj7xByWc/69buI06AUfwsWYFqN
+	1Zcsd/gKChOLwIl6tWzIrpN/i3GFEpXJEy+2xgzRctwuWG8fmPL5abuadsspv1XzHWpB
+	UnFG8o3hgkQf1r/K+TcRlaftctwuxj3foRaBSKaxBTK1/gx0Cj80Cut3CLDsNovhYz7i
+	0H/tQ+g/3kSJkAqPQSF6bgeMW02jD31BuBh/HJH842hJYjIrzDx5k1DLpP0QdxuVX0yI
+	hBK1xZeu9meMpOUJAKyPQahlMWzcha61MtFnokUgUhhc0WIbgzKv/QdwQsYFH+qWk16T
+	UvLZ7FkoVVsD2fpgvkFNywoxj95EH1qOm/dhu+4zYyGmEnvoTEn8oQCV56fNvF9N3ZhV
+	nzALsAqaynDBf/9Bk2e03Lh1H7FrZefDkEiudx5NhUeucvZRwIfAWCopYJazxiKQqCy+
+	zN5UeO8/BCog3NW4mQ9dn9csQhlolQIEIF6r2neGg8Yy65UTbqPizCRRIFaavKlqHwIQ
+	eNy7D/P3BwxDo0YuYFWfCc5CqcYWyjfHFJkKMu5uPe0Uow7dGb4lXFvqzmgyFYDlaTsf
+	1M7yLTiQ+SbNcC1/PebkyfZ8G7RpWF1IgA503yIOdPJZ/r5B+LZbijnZXUiIYmXvQPwF
+	4eTJUPYvBrU0u2QhEShdG1Cia4/oQLhFyXIXZI1CAlD7wTuMQPSEZQINGAtGoVtW1S+U
+	au23RZgYUjBZPhoKXqALgepPuA2K0yyLSG5wJSqMhHv3Kb7/AK6xXQ4bWZ9ZKT7JPaGw
+	hTkQZCap0bWH7xuJpZVnIxagFUuAoZXDL1PzCnOhaecB0gknWW1QK9fhQhtphRo0Dg+K
+	6YReJe7Uyz8mWXC+HCsTuX/4ZXpen1GxpDwwb/5ALIRsYb4MtEIPGocnfd7BvJmNbkVK
+	oxcmQcstdVwL0DB0G7CcZBPEKrMv9zhCDXdAkJ5X1HHtQtimkb5fACEhKI9TQzpR2cy6
+	JVC3H4KQQAITZkhOUqdsiUOQIFSOnWSeBFLtdQQWgiDjRI/jHJ8U1C0sCyVcH0MzzoKi
+	TBrh+Lv0XAAqEJqTJzMhIlcqPUxk0wPG8UnJTKiePhEsQpneGUe5QiPZYkobBEsGEk/v
+	ZRwk4lyJan9BMSqPWR+sIL4Tt0LIIyQxEUelrby87Fajx5wPFuHfoQL7Vtx0ozJu5vxs
+	qKTqNNsKpG7Po3LkZbouSEL7PCrU8so5W7nwykdeucQgthi01yuUqjhIsCxHj9mbE71C
+	tbZFVIZs2hbTttTOg15wRYhtHkT1nBlQYZ0z48JHBNZT6Zwzv+CaajVxsvQBuTjrPhdH
+	l3xjnpZsGWTJxeHSIZO3pQ8VZmPPA+Zt32ezr15z/FSisp60C6HTTWAihdHDrAfRiAqZ
+	BrGsB72uHVKJClk7/Cjirq4wcUtrOpvZGce2zow7KGFPAi4IUWcszHIQ7Ek42YiMJxvo
+	3b+CG+PY9q9c4V4nQreXvU5vcrewX90VZ2ZCdPkQ7haEWVDmZMaM4ODqIWp+6laaUcPh
+	HkqXQf5+NQhRebMxjq4sJaByllaugFiM3hSNe7PJcbI7Fg1HXEimo3gff8pr/LCcipig
+	C+GhKdrOfMAeZHSgh3PHpt4eb6BHyAEonxxuAGMRERfCI94UnW9gIlAVHYj97C5z6oOU
+	06AnCmGthGm7eHuy+4uwChKLGLIJyb2Qo0XJEQnXyPpPd5UeYBHKQMjdt+g6z7zD7ZPx
+	k81fB0wwCsGmWzhORtGBZjSV0eMdpOE+bCp9ReUKz+5i9RV+l3R6E2CRa2e9StJzjmsR
+	HKzU48/ANhY80vzmwzy9RK2CBVjyYdbTdQdzgapOjLGQ4++8xwW1CjEV9vOpB1T2xlKD
+	c3Y0FJAgpjJ6/MJUgG/RWG4LIPv5f9AO/Qe0Srec8HxSfYUYDJSLM/tSlR5TQ4/PPoSg
+	PEEdvXoOigGcD0AEFSgtqLOH77DeIrerh38ZIAjVrqDmYsxlULCL/SOxgMBVGj3xh31t
+	NB4bC/EfiMopn0X9hakAOlCFxepPV/c+9CXkXP0FBGUzhxp6UBbt6zqUSLg6B/gQKFwe
+	xyEEBaRKqxCDeovfKYeMRbPdsUJzxONSrsi029WkU05+y3/AhaDAutpykyi1x0tSSpyr
+	PvLJfTOgTLvVTABrUH7YnvFKsm+vIA5pbf4UlIhmYOGd+CegYIHoXNjxdfw5QAOJFr2d
+	lBPnISwQkZnS81hM3PU9UmGAAWohpeePTQo+sUau/RMDymrar+ex8Lz0B22nmDYF2Qo0
+	tIBIBBNonngRPgiG5NUUWlpEf9SkAOwFegepjM5QptwezQ8NYfig6BATAGU56dag/Ql0
+	hfke0x6pBRvlOIPpUnMwXR3Mhdu4EDtBmbKaj9qVHGmV8zNQcPYsVRrsgUSh3h0TcyFu
+	xGVHYpxnu15O+s2HdMj1u7ZKwC162000V2kNoK/SwV64Rq5YxHY/wHcAk+mwU7tPBBzG
+	X7bggr5kWos7lCrU2sPJfAX8cmhMxiVXYiCBjmo7aL+1mI66jYdMxGvTK7/TsuFAKG9e
+	oYedTG20+6KZYr3dH0/nS6aJHXSE49zYQA+7xWwy6DRKd/GA06xVSH4Qkt+AApdILjqL
+	0x/LFqvNTn80nmLDQ+6NObQ7nIwG3VbtIZcIuq161e/7HSIsaC56q8t/m7p7qDZaHWiO
+	2R9wbfSxNWbrsVa6T8eCbptR89tmh0ebgZ6h0FvW4vAGo8lsvlgqV6s1ro0qtlG9z6Vi
+	oRun1ahRSv+xjyoxFxH0IdaZrA63Lxi+jcUTiSS3RiIRj0UjQb/HaTPr1dCL+NeMcrQV
+	BheJTKnWGcxWaNDsdLo4N5wO+7XVbNRplPI/wgTxgYbvYolMoVRjM2+9gWtDr8dW3iqF
+	DFpW/4mdHG0GgGEav8vk3Buyfdv3v4Vkj40AoMEh4tYg9wz3fvyGLxcXBC4IXBC4IPA/
+	QeA/tQrR4gplbmRzdHJlYW0KZW5kb2JqCjY4IDAgb2JqCjI4NDgKZW5kb2JqCjY1IDAg
+	b2JqCjw8IC9MZW5ndGggNjYgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFn
+	ZSAvV2lkdGggMjc4IC9IZWlnaHQgMTIyIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9J
+	bnRlcnBvbGF0ZSB0cnVlIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVE
+	ZWNvZGUgPj4Kc3RyZWFtCngB7V1nQypLDGXpRTrSi4CAdKVKb9J7U+///yMvmQUu1Xb9
+	8HaH+cLqe3p3jycnmWwmEQiu64rAFYErAlcErgj87xFgGKFQKOLkghtnmN8HmBGKxBKp
+	TCZXcHLJZVKpRCwS/iYyAIlEKlfeqDVand7AwaXXaTVqlVIulfwWMAwjEksVKo3eeGux
+	OZwul5tzy+V02m2WW6NOo1JIxb9BGEYkkSk1+lub884fDEdj8UQiybGVSMRjkYeA3+O0
+	mvRqpUws+kdDQkxUWqPV5QvFHtO5QqlcqXJwVcqlQi6djAa9TotRA7j8C18YoViq1Jrs
+	d8FYKleqNlrtTrfX5+DqdTvtVqNazD1FAx4b4CL9ub4AURRqo+0ulMgWa61OfzieTKez
+	OQfXbDqdjIb9TqtazMSDHqtBLZf8kC5CkVSlt7iDiWy52RmMp/PFcrVer1+5t+Cu16vl
+	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
+	VtDMNRf1mL7WhxJgkWssvgS059x0ouQbKuh9SCvXfOzO/AVRYV0RuGetzQ+wECPCviM8
+	ogs+DbhkbPubj3stmq/2twVpwba/AEuTp72QX9eLCYLyjaa/wBfSYR2aiecbPdJgnUdk
+	Idazmo+7tVwM24l/o282C4vVF8tVO6MZX1pno+2gQwbrGbYrmcjdN0EhbFFoLXfhdLnV
+	n/Ch9zwLCWICROk1i6kH9y1oyofbn13Av7vAgRaaW1cw+VxrD8GMNuMsOOuOCE2QJ/PJ
+	oF3NJQJOk/oHIy1AcmU3Rrsvmi42Ors5H8QhccwjEZqwcz4Ws/GgXS+kwl6bQfV5nL/j
+	yN4FI5IqdWZXIJ4pNdr90WQGM2FwKAzXxsKQW17B5JMZzoSpF9Oxe+ftD2fCADzgiuRq
+	g80TjGeK1SbMDxrBAKEZLG5NEIIbhvFB49Gg125WC+lYwG3R34CkHBy83GPDZ5dk1pTG
+	aPMEok/ZYqXeeul0u70ex8ZNwQ3DqKmXZr1SyCYj926YqaSAWVOfPfwH/x1wgVltRovT
+	G4wmU9nnIgwmq3BsNBnccLlUzGdTiUjgzmE2wPytnxNlgxXM9ZMp1XqT1eHxBUI4xC4O
+	Y+y4tOCGY9Fw6N7ndlhMupvfmu0HM9sUKrXOYDJb7Q4nTDzk2nI6HDar2WTQqmEQ5D/z
+	ZGtaOC4UZmOqYDYmDMfExZn5mORuYTSmVnOjUsikvz80VMwOUuXgJFW5XCYjY1R/7He2
+	/DjzSWbucnLoLhm5+1NPfAaJ67euCFwRuCJwReBXEPgPyd1QdgplbmRzdHJlYW0KZW5k
+	b2JqCjY2IDAgb2JqCjI2NzMKZW5kb2JqCjcwIDAgb2JqCjw8IC9MZW5ndGggNzEgMCBS
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AaVbyZJdtw3d8yu4bFVFV5fT
+	HZaxnKTiVRIplUWchfMiWXa1PHTLTuXvc0ASB3zvvh6USOXq6yMOIA4IAiD7Z/9n/7Of
+	8besi19T8nfv/N/8D/7V6/vgT/c+1L/3J/9ynoqX/4aG7/2rP727O7376dMv39y6u+8w
+	VIh7HW5Bx5SnLeXNL2GfYtk3f/roX/3xY/Bf/linvdY25zwtJQXX2ia2TaGNGzFumtZ9
+	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
+	tq1ON/R+OHIUPtkDNxVNQJuvVsS70JxPquQds/mwH9i7RY7tlf5wrpEZtXxE48tUViTA
+	mBFPe5Hl4vcxOgbVkS3FEHRHsFUZHDCZT2ohFVdTrWy3tq7glz3qY7ChP85+xT5c7f24
+	1jgf5RDromwwElnXMB+oUszmQ6BPDVyLt00tON2mBRtNiiY4T47xtrsSbyfcOOCZE0wb
+	9+ZBeh8DoQVlsn1FRY7PcBAJPfIIdriJ7if9ozu4h4OygzWMsNezGkwz2Lzj3mdIpW3u
+	ftHQkqHLb8bIYjC0Zy0br+fWNCMuOD4C1CmR2re4lTNSPF3L/xwSnf26A0dBON9m/EYX
+	e/SKOvVjiQIeRFnM9TPY7GWP52gmFVxNwtRQlbsWWnZCj3LRWz8RPZsz748m/wuBvOJ2
+	CmVuZHN0cmVhbQplbmRvYmoKNzEgMCBvYmoKMzk0NgplbmRvYmoKNjkgMCBvYmoKPDwg
+	L1R5cGUgL1BhZ2UgL1BhcmVudCA0IDAgUiAvUmVzb3VyY2VzIDcyIDAgUiAvQ29udGVu
+	dHMgNzAgMCBSIC9NZWRpYUJveApbMCAwIDU3NiA3MzNdID4+CmVuZG9iago3MiAwIG9i
+	ago8PCAvUHJvY1NldCBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkg
+	XSAvQ29sb3JTcGFjZSA8PCAvQ3MyIDE3IDAgUgovQ3MxIDggMCBSID4+IC9FeHRHU3Rh
+	dGUgPDwgL0dzNSAyNCAwIFIgL0dzMyAyNSAwIFIgL0dzNCAyNiAwIFIgL0dzMSAyNyAw
+	IFIKL0dzMiAyOCAwIFIgPj4gL0ZvbnQgPDwgL0YxLjAgMTUgMCBSIC9GMi4wIDE4IDAg
+	UiA+PiAvWE9iamVjdCA8PCAvSW0zIDEzIDAgUgovSW02IDczIDAgUiAvSW0xIDkgMCBS
+	ID4+IC9TaGFkaW5nIDw8IC9TaDEwIDc1IDAgUiAvU2gxMiA3NyAwIFIgL1NoMTEgNzYg
+	MCBSCj4+ID4+CmVuZG9iago3NSAwIG9iago8PCAvQ29sb3JTcGFjZSAyOSAwIFIgL1No
+	YWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDU5LjUgLTI1LjU4NDg1IDU5LjQ5OTk4IDI1LjU4
+	NDg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5j
+	dGlvbiA3OCAwIFIgPj4KZW5kb2JqCjc3IDAgb2JqCjw8IC9Db2xvclNwYWNlIDI5IDAg
+	UiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNjAuNTM4IC0yNi4wMjYyIDYwLjUzNzk4
+	IDI2LjAyNjIyCl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBd
+	IC9GdW5jdGlvbiA3OSAwIFIgPj4KZW5kb2JqCjc2IDAgb2JqCjw8IC9Db2xvclNwYWNl
+	IDI5IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTkuNSAtMjUuNTg0ODUgNTku
+	NDk5OTggMjUuNTg0ODcKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZh
+	bHNlIF0gL0Z1bmN0aW9uIDgwIDAgUiA+PgplbmRvYmoKNzMgMCBvYmoKPDwgL0xlbmd0
+	aCA3NCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAyNjIg
+	L0hlaWdodCAxMjQgL0ludGVycG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgMzYgMCBSIC9J
+	bnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDgxIDAgUiAvQml0c1BlckNvbXBvbmVudAo4
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QAQ0AAADCoPdPbQ8HESgM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYeBgZ8xwABCmVuZHN0cmVhbQplbmRvYmoKNzQgMCBvYmoKNDQ4
+	CmVuZG9iago4MSAwIG9iago8PCAvTGVuZ3RoIDgyIDAgUiAvVHlwZSAvWE9iamVjdCAv
+	U3VidHlwZSAvSW1hZ2UgL1dpZHRoIDI2MiAvSGVpZ2h0IDEyNCAvQ29sb3JTcGFjZQov
+	RGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9G
+	aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae1dV1siSxB1yDkHiUrOSEayZJCM
+	gO7//yO3qgeUrLj7cKehH2RgF77pM1XnVFd3V9/d3doNgRsCNwRuCNwQ+EsEGIbH4/G5
+	0+BuGeYv+7z7dYbHFwhFIrFEyp0mEYuEAv4/QwIhEElkcqVKrdXquNK0GrVKKZeKhYJ/
+	AQRgIJTIlBqd0Wyx2R0OJzeaw2GzWkwGnVohEwvBInZt+8J3gIFIqlDrzbYHjz8Yjsbi
+	8ScutHg8Fg0HfG6n1aRTySVC/t/AwPCFUoXWaHv0hZ/SuUKpXKlypVXKxedsKh7yPlgM
+	arlY+GtzYHgCsVxjsntCT9lipd5sd7q9Pldar9tpNV7Kz+lYwGU1qGUi4IcLHYH8dzQE
+	lcHmDifzlUa7NxiOJ5PpjCttOhmPhq/dVr2cewq6LHql5FfmwPBFcu39YzCRr7Z6g/F0
+	/rZYLpcrrrTlcrF4m01Gg26jkov7nSYwh8vZAbxBqbd5Y9lKsz+azhfL1fv7+we0P1xo
+	eKNwv6vl23wy7DZK6YjbopNfDANPIFEZnYFksd4dTt8QAq4A8PmQWCRWi/lk0Knl4z67
+	XiG+zBp4Aqna9BjOVFqDCTcx+PMHUUCLABzG/WYpGXAYlBfBgCCYXdFcrTuaLVg74Igr
+	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
+	IKUNA+kqVPWjwxrgUaIlzIftUsL7o8KGaAxADXpHKAMwsE7BdXtgQZgN2+Wkzwqk8L0/
+	EJ/gY7VPhAG4getBJBoCqgOCkPL/sNInonBHKr8CDJXOcF0ImavkwGIAZT6ng1Yp6bdD
+	ffCfF81HGAzOYKrceiVFscmPcY8n1xiQstiN4pPPdmGRdIBBYbD7E4V6D+pir8shw49y
+	yCbYJ0dqxU+HUCI95rVeCAJxCoUOiuXnqu3XMeCwLhDOMRQIBrNRv1nORFz3WtnFZ4qs
+	D04IpQovHcABjk1YARLrcwNYnP/Hf8mdrlZLKJU/6req+Sc8OkH6s0rQhBo3f8ghGka7
+	N5opvrT7w/F0BidIQINDJP7/DW/0bY7HR/RatUIq7LbCMRq/Ok0ED1RRaM1OXyxdqMJh
+	Iq+D4WgM54lwoY3HcJLIoA9HiVTyqYjXblLD4RE/ixM2VvD5Cl4hVervnd5wIluo1BrN
+	VrvDkdZut5r1Wvk5Ew95HGat4m+OGUJzkKl0ZrvLF44nM7l8oVgslv7/De6ykM+mEzE4
+	Yshm0iqlYAjfjKU/H/2xC4KDUmMw25wujy8QDIU50UKhoN/neXRYTXq1Qvrb84W2AAEc
+	RBK5Uq0zGM33FouVG81iMZuMeu0/OXqMBYMcRCeWyhVKlUrNkaZSKZUKGR5D93e+sGUO
+	OM7EUwnxWEKuNJFI+C+PJPxEg4EGhz5ypcHdft767eKGwA2BGwI3BH6FwH9d1eRKCmVu
+	ZHN0cmVhbQplbmRvYmoKODIgMCBvYmoKMjc3MwplbmRvYmoKNCAwIG9iago8PCAvVHlw
+	ZSAvUGFnZXMgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0gL0NvdW50IDMgL0tpZHMgWyAz
+	IDAgUiA1MSAwIFIgNjkgMCBSCl0gPj4KZW5kb2JqCjgzIDAgb2JqCjw8IC9UeXBlIC9D
+	YXRhbG9nIC9PdXRsaW5lcyAyIDAgUiAvUGFnZXMgNCAwIFIgL1ZlcnNpb24gLzEuNCA+
+	PgplbmRvYmoKODAgMCBvYmoKPDwgL0xlbmd0aCA4NCAwIFIgL09yZGVyIDEgL0VuY29k
+	ZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNv
+	ZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAx
+	IDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVh
+	bQp4AbXCiVYBUQAA0O8y++pLs0WWyCCSdQahlMqSLUspwhd06uQ4ozHmzbx3zy1t7KVj
+	lY0d+NquGC0qa1V5LR65EmV4iytR9UssIroUi0uxALlQWP5eCAWt+YUA4aeQNzb3KYD9
+	EHIWZj8EvXMhq5fPzsFm5vzuO59B943PvPHXKM7468PTM95wLj37d8qlQV5NOYAT7sra
+	1ITTPuZSCCbH3M9XzWzyFcYRm9y+HLEwD9lL3Ykha/6ATQCOD9htJj7Q3Wfilsf6jMYe
+	E0NT6jHSC8pdRvpLS106CneHjuq+6NAmt+kL8JE2bWiLjgCnIq394Ral8ZkKo3n+RCH8
+	SJ2rhx4paJtk6NhgkzTzgQyaGnggj78nA5D678n9DdJvKOFvAD+7I1C9Jc60+m4JCOuE
+	z1hvnTAW99a3a7jX7NMarreKn0LtqeK7N7gH3QruqeDugzF3xewy5j7QVcasLmEuw50l
+	DKyCOS10KNi2zaGoyzYH7Cey7W/RdgLyGwqvtaMKZW5kc3RyZWFtCmVuZG9iago4NCAw
+	IG9iagozODQKZW5kb2JqCjc5IDAgb2JqCjw8IC9MZW5ndGggODUgMCBSIC9PcmRlciAx
+	IC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUK
+	OCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsg
+	MCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+	PgpzdHJlYW0KeAGNwgk3VHEYB+AvJhKJRCKRkpKSkhKJRCIZY8asZgxjZuz7vu9bX+v9
+	vZ3rmNO943/vfZ/z8N8E24zzpXCML01exNhwjC8ko3yhex5l06N8LjnCZ8IRPjN5GmHD
+	YT6VDPOp7kmYTYf4RPA4xMdDskE+NnkUZMMAHwn7+Sj50M+mfXwoeODjA6+4hw9U9z1s
+	OMj7wm7eT95zs1UX713Hnkt914XdAXEndlV3nEjdjx1JB3aubjtgsw/bdrf6oP0j24st
+	1c1epP6NTeEebPZgw3Y3Nuyud0P7S7YL66prXUj9E2vCnVjrxKrtDqzaXemA9od4O1Zu
+	XG5H6u9YFm7DchuWJFuxZHmxFdpv4i1YNF5ogfpXLEg2Y6EZ85JNmLc814TrXzAn2Yg5
+	49lGqH/GrPAnzEg2YMbydAOuf8S0cD2mdafqof4BU8LvMSlZh0nzE3X4/x0mhGsxoTte
+	C/W3GBd+g4RwDRKKlKihuP5rigtXU1w3Vk2mX1FM8iWNCVfRmMloFRm+oKhkJUV1RyvJ
+	9HMalR15RqIVNGIyUkGGTykiXE6R5OFyMl1Gw4LhMgo/ES+lsGqolAwfU0i4hELJQyVk
+	tZiG7AaLKfhIvIiCqoEiMnxIAeFCCiT7C8lqAfnt+grI90A8n3yq3nxKfZ+8knnkverJ
+	I5u55LE7mEvae7I5NKjqzqHUd8ktnE3ubHLZziKX3YEs0t4Rz6SBG52ZlPo2OYUzyJlB
+	/ZLp1G/ZkU7aW+Jp5Ej7B4pzCpwKZW5kc3RyZWFtCmVuZG9iago4NSAwIG9iago1NzIK
+	ZW5kb2JqCjc4IDAgb2JqCjw8IC9MZW5ndGggODYgMCBSIC9PcmRlciAxIC9FbmNvZGUg
+	WyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2Rl
+	IFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAw
+	IDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+	eAGlwoVSQlEAQMG/tru7u7HpBhUDA1uxA+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gL
+	j71h95WY7egrEl+IGkdeUJwjkiOsPZQj9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH
+	99N7j2bPHTrddxje4pa5eovlG1adrtwg9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXm
+	L5gX6LpA6Dkus3PnSD9jLn/2DK2nzOidPuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5
+	foj6DOMZxvSOZvh9wKj8kQNM7jMidngfh3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2
+	KL5Nn/DebRxu0Wu9ZwuJm/QYd2+iOEX3z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQn
+	afu3NYnKBK35LQl0NidojqtvimMYo0lmYwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMm
+	RGGQGsnVQSwHqHZaFUConyqzlX6k+6j8s8KHei/lesu8FHook1zqwbybUoElbr5+Al7l
+	iFUKZW5kc3RyZWFtCmVuZG9iago4NiAwIG9iago0MTAKZW5kb2JqCjY0IDAgb2JqCjw8
+	IC9MZW5ndGggODcgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rp
+	b25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAv
+	RG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUK
+	XSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG1wolWAVEAANDvMvvqS7NF
+	lsggknUGoZTKki1LKcIXdOrkOKMx5s28d88tbeylY5WNHfjarhgtKmtVeS0euRJleIsr
+	UfVLLCK6FItLsQC5UFj+XggFrfmFAOGnkDc29ymA/RByFmY/BL1zIauXz87BZub87juf
+	QfeNz7zx1yjO+OvD0zPecC49+3fKpUFeTTmAE+7K2tSE0z7mUggmx9zPV81s8hXGEZvc
+	vhyxMA/ZS92JIWv+gE0Ajg/YbSY+0N1n4pbH+ozGHhNDU+ox0gvKXUb6S0tdOgp3h47q
+	vujQJrfpC/CRNm1oi44ApyKt/eEWpfGZCqN5/kQh/Eidq4ceKWibZOjYYJM084EMmhp4
+	II+/JwOQ+u/J/Q3SbyjhbwA/uyNQvSXOtPpuCQjrhM9Yb50wFvfWt2u41+zTGq63ip9C
+	7aniuze4B90K7qng7oMxd8XsMuY+0FXGrC5hLsOdJQysgjktdCjYts2hqMs2B+wnsu1v
+	0XYC8hsKr7WjCmVuZHN0cmVhbQplbmRvYmoKODcgMCBvYmoKMzg0CmVuZG9iago2MyAw
+	IG9iago8PCAvTGVuZ3RoIDg4IDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0g
+	L0Z1bmN0aW9uVHlwZSAwIC9CaXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEg
+	MCAxIF0gL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUg
+	WyAxMzY1Cl0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBjcIJN1RxGAfg
+	LyYSiUQikZKSkpISiUQiGWPGrGYMY2bs+77vW1/r/b2d65jTveN/732f8/DfBNuM86Vw
+	jC9NXsTYcIwvJKN8oXseZdOjfC45wmfCET4zeRphw2E+lQzzqe5JmE2H+ETwOMTHQ7JB
+	PjZ5FGTDAB8J+/ko+dDPpn18KHjg4wOvuIcPVPc9bDjI+8Ju3k/ec7NVF+9dx55LfdeF
+	3QFxJ3ZVd5xI3Y8dSQd2rm47YLMP23a3+qD9I9uLLdXNXqT+jU3hHmz2YMN2NzbsrndD
+	+0u2C+uqa11I/RNrwp1Y68Sq7Q6s2l3pgPaHeDtWblxuR+rvWBZuw3IbliRbsWR5sRXa
+	b+ItWDReaIH6VyxINmOhGfOSTZi3PNeE618wJ9mIOePZRqh/xqzwJ8xINmDG8nQDrn/E
+	tHA9pnWn6qH+AVPC7zEpWYdJ8xN1+P8dJoRrMaE7Xgv1txgXfoOEcA0SipSoobj+a4oL
+	V1NcN1ZNpl9RTPIljQlX0ZjJaBUZvqCoZCVFdUcryfRzGpUdeUaiFTRiMlJBhk8pIlxO
+	keThcjJdRsOC4TIKPxEvpbBqqJQMH1NIuIRCyUMlZLWYhuwGiyn4SLyIgqqBIjJ8SAHh
+	Qgok+wvJagH57foKyPdAPJ98qt58Sn2fvJJ55L3qySObueSxO5hL2nuyOTSo6s6h1HfJ
+	LZxN7mxy2c4il92BLNLeEc+kgRudmZT6NjmFM8iZQf2S6dRv2ZFO2lviaeRI+weKcwqc
+	CmVuZHN0cmVhbQplbmRvYmoKODggMCBvYmoKNTcyCmVuZG9iago2MiAwIG9iago8PCAv
+	TGVuZ3RoIDg5IDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1bmN0aW9u
+	VHlwZSAwIC9CaXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAxIF0gL0Rv
+	bWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAxMzY1Cl0g
+	L0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBtcKJVgFRAADQ7zL76kuzRZbI
+	IJJ1BqGUypItSynCF3Tq5DijMebNvHfPLW3spWOVjR342q4YLSprVXktHrkSZXiLK1H1
+	SywiuhSLS7EAuVBY/l4IBa35hQDhp5A3NvcpgP0QchZmPwS9cyGrl8/OwWbm/O47n0H3
+	jc+88dcozvjrw9Mz3nAuPft3yqVBXk05gBPuytrUhNM+5lIIJsfcz1fNbPIVxhGb3L4c
+	sTAP2UvdiSFr/oBNAI4P2G0mPtDdZ+KWx/qMxh4TQ1PqMdILyl1G+ktLXToKd4eO6r7o
+	0Ca36QvwkTZtaIuOAKcirf3hFqXxmQqjef5EIfxInauHHilom2To2GCTNPOBDJoaeCCP
+	vycDkPrvyf0N0m8o4W8AP7sjUL0lzrT6bgkI64TPWG+dMBb31rdruNfs0xqut4qfQu2p
+	4rs3uAfdCu6p4O6DMXfF7DLmPtBVxqwuYS7DnSUMrII5LXQo2LbNoajLNgfsJ7Ltb9F2
+	AvIbCq+1owplbmRzdHJlYW0KZW5kb2JqCjg5IDAgb2JqCjM4NAplbmRvYmoKMzUgMCBv
+	YmoKPDwgL0xlbmd0aCA5MCAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9G
+	dW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAg
+	MSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsg
+	MTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AY3CCTdUcRgH4C8m
+	EolEIpGSkpKSEolEIhljxqxmDGNm7Pu+71tf6/29neuY073jf+99n/Pw3wTbjPOlcIwv
+	TV7E2HCMLySjfKF7HmXTo3wuOcJnwhE+M3kaYcNhPpUM86nuSZhNh/hE8DjEx0OyQT42
+	eRRkwwAfCfv5KPnQz6Z9fCh44OMDr7iHD1T3PWw4yPvCbt5P3nOzVRfvXceeS33Xhd0B
+	cSd2VXecSN2PHUkHdq5uO2CzD9t2t/qg/SPbiy3VzV6k/o1N4R5s9mDDdjc27K53Q/tL
+	tgvrqmtdSP0Ta8KdWOvEqu0OrNpd6YD2h3g7Vm5cbkfq71gWbsNyG5YkW7FkebEV2m/i
+	LVg0XmiB+lcsSDZjoRnzkk2YtzzXhOtfMCfZiDnj2Uaof8as8CfMSDZgxvJ0A65/xLRw
+	PaZ1p+qh/gFTwu8xKVmHSfMTdfj/HSaEazGhO14L9bcYF36DhHANEoqUqKG4/muKC1dT
+	XDdWTaZfUUzyJY0JV9GYyWgVGb6gqGQlRXVHK8n0cxqVHXlGohU0YjJSQYZPKSJcTpHk
+	4XIyXUbDguEyCj8RL6WwaqiUDB9TSLiEQslDJWS1mIbsBosp+Ei8iIKqgSIyfEgB4UIK
+	JPsLyWoB+e36Csj3QDyffKrefEp9n7ySeeS96skjm7nksTuYS9p7sjk0qOrOodR3yS2c
+	Te5sctnOIpfdgSzS3hHPpIEbnZmU+jY5hTPImUH9kunUb9mRTtpb4mnkSPsHinMKnApl
+	bmRzdHJlYW0KZW5kb2JqCjkwIDAgb2JqCjU3MgplbmRvYmoKMzQgMCBvYmoKPDwgL0xl
+	bmd0aCA5MSAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5
+	cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21h
+	aW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9G
+	aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AY3CCTdUcRgH4C8mEolEIpGSkpKS
+	EolEIhljxqxmDGNm7Pu+71tf6/29neuY073jf+99n/Pw3wTbjPOlcIwvTV7E2HCMLySj
+	fKF7HmXTo3wuOcJnwhE+M3kaYcNhPpUM86nuSZhNh/hE8DjEx0OyQT42eRRkwwAfCfv5
+	KPnQz6Z9fCh44OMDr7iHD1T3PWw4yPvCbt5P3nOzVRfvXceeS33Xhd0BcSd2VXecSN2P
+	HUkHdq5uO2CzD9t2t/qg/SPbiy3VzV6k/o1N4R5s9mDDdjc27K53Q/tLtgvrqmtdSP0T
+	a8KdWOvEqu0OrNpd6YD2h3g7Vm5cbkfq71gWbsNyG5YkW7FkebEV2m/iLVg0XmiB+lcs
+	SDZjoRnzkk2YtzzXhOtfMCfZiDnj2Uaof8as8CfMSDZgxvJ0A65/xLRwPaZ1p+qh/gFT
+	wu8xKVmHSfMTdfj/HSaEazGhO14L9bcYF36DhHANEoqUqKG4/muKC1dTXDdWTaZfUUzy
+	JY0JV9GYyWgVGb6gqGQlRXVHK8n0cxqVHXlGohU0YjJSQYZPKSJcTpHk4XIyXUbDguEy
+	Cj8RL6WwaqiUDB9TSLiEQslDJWS1mIbsBosp+Ei8iIKqgSIyfEgB4UIKJPsLyWoB+e36
+	Csj3QDyffKrefEp9n7ySeeS96skjm7nksTuYS9p7sjk0qOrOodR3yS2cTe5sctnOIpfd
+	gSzS3hHPpIEbnZmU+jY5hTPImUH9kunUb9mRTtpb4mnkSPsHinMKnAplbmRzdHJlYW0K
+	ZW5kb2JqCjkxIDAgb2JqCjU3MgplbmRvYmoKMzMgMCBvYmoKPDwgL0xlbmd0aCA5MiAw
+	IFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0
+	c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEg
+	XSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0Zs
+	YXRlRGVjb2RlID4+CnN0cmVhbQp4AbXCiVYBUQAA0O8y++pLs0WWyCCSdQahlMqSLUsp
+	whd06uQ4ozHmzbx3zy1t7KVjlY0d+NquGC0qa1V5LR65EmV4iytR9UssIroUi0uxALlQ
+	WP5eCAWt+YUA4aeQNzb3KYD9EHIWZj8EvXMhq5fPzsFm5vzuO59B943PvPHXKM7468PT
+	M95wLj37d8qlQV5NOYAT7sra1ITTPuZSCCbH3M9XzWzyFcYRm9y+HLEwD9lL3Ykha/6A
+	TQCOD9htJj7Q3Wfilsf6jMYeE0NT6jHSC8pdRvpLS106CneHjuq+6NAmt+kL8JE2bWiL
+	jgCnIq394Ral8ZkKo3n+RCH8SJ2rhx4paJtk6NhgkzTzgQyaGnggj78nA5D678n9DdJv
+	KOFvAD+7I1C9Jc60+m4JCOuEz1hvnTAW99a3a7jX7NMarreKn0LtqeK7N7gH3QruqeDu
+	gzF3xewy5j7QVcasLmEuw50lDKyCOS10KNi2zaGoyzYH7Cey7W/RdgLyGwqvtaMKZW5k
+	c3RyZWFtCmVuZG9iago5MiAwIG9iagozODQKZW5kb2JqCjMyIDAgb2JqCjw8IC9MZW5n
+	dGggOTMgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBl
+	IDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWlu
+	IFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmls
+	dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGlwoVSQlEAQMG/tru7u7HpBhUDA1ux
+	A+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h95WY7egrEl+IGkdeUJwjkiOsPZQj
+	9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH99N7j2bPHTrddxje4pa5eovlG1adrtwg
+	9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX6LpA6Dkus3PnSD9jLn/2DK2nzOid
+	PuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5foj6DOMZxvSOZvh9wKj8kQNM7jMidngf
+	h3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5Nn/DebRxu0Wu9ZwuJm/QYd2+iOEX3
+	z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQnafu3NYnKBK35LQl0NidojqtvimMYo0lm
+	YwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQGsnVQSwHqHZaFUConyqzlX6k+6j8
+	s8KHei/lesu8FHook1zqwbybUoElbr5+Al7liFUKZW5kc3RyZWFtCmVuZG9iago5MyAw
+	IG9iago0MTAKZW5kb2JqCjMxIDAgb2JqCjw8IC9MZW5ndGggOTQgMCBSIC9PcmRlciAx
+	IC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUK
+	OCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsg
+	MCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+	PgpzdHJlYW0KeAG1wolWAVEAANDvMvvqS7NFlsggknUGoZTKki1LKcIXdOrkOKMx5s28
+	d88tbeylY5WNHfjarhgtKmtVeS0euRJleIsrUfVLLCK6FItLsQC5UFj+XggFrfmFAOGn
+	kDc29ymA/RByFmY/BL1zIauXz87BZub87jufQfeNz7zx1yjO+OvD0zPecC49+3fKpUFe
+	TTmAE+7K2tSE0z7mUggmx9zPV81s8hXGEZvcvhyxMA/ZS92JIWv+gE0Ajg/YbSY+0N1n
+	4pbH+ozGHhNDU+ox0gvKXUb6S0tdOgp3h47qvujQJrfpC/CRNm1oi44ApyKt/eEWpfGZ
+	CqN5/kQh/Eidq4ceKWibZOjYYJM084EMmhp4II+/JwOQ+u/J/Q3SbyjhbwA/uyNQvSXO
+	tPpuCQjrhM9Yb50wFvfWt2u41+zTGq63ip9C7aniuze4B90K7qng7oMxd8XsMuY+0FXG
+	rC5hLsOdJQysgjktdCjYts2hqMs2B+wnsu1v0XYC8hsKr7WjCmVuZHN0cmVhbQplbmRv
+	YmoKOTQgMCBvYmoKMzg0CmVuZG9iagozMCAwIG9iago8PCAvTGVuZ3RoIDk1IDAgUiAv
+	T3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1bmN0aW9uVHlwZSAwIC9CaXRzUGVy
+	U2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAxIF0gL0RvbWFpbiBbIDAgMSBdIC9S
+	YW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAxMzY1Cl0gL0ZpbHRlciAvRmxhdGVE
+	ZWNvZGUgPj4Kc3RyZWFtCngBpcKFUkJRAEDBv7a7u7ux6QYVAwNbsQPrU44xMvjwxY2d
+	TX6QtJj44Pu74vg7xd+IC4+9YfeVmO3oKxJfiBpHXlCcI5IjrD2UI/SsPviM4RNBmYEn
+	7D4SsO1/RPQD/n99D6i8x/fTe49mzx063XcY3uKWuXqL5RtWna7cIPSaFbPL10i/Yjl/
+	6QrNi1l0LmQpvGRB8vwl5i+YF+i6QOg5LrNz50g/Yy5/9gytp8zonT7l9wnT8qdOMH/M
+	lMDJY5wfMWlx4gi5h0z8OX6I+gzjGcb0jmb4fcCo/JEDTO4zInZ4H4d7DFsf2kPiLkPG
+	g7uoTzOYZkBvf5rvO4r7dii+TZ/w3m0cbtFrvWcLiZv0GHdvojhF98+uFDo7U3RuqO/Y
+	oPg6HcLb17G7RrvttjVEJ2n7tzWJygSt+S0JdDYnaI6rb4pjGKNJZmMMy1EanTZEERqh
+	wWx9BJVh6vPrwuisDaGzJkRhkBrJ1UEsB6h2WhVAqJ8qs5V+pPuo/LPCh3ov5XrLvBR6
+	KJNc6sG8m1KBJW6+fgJe5YhVCmVuZHN0cmVhbQplbmRvYmoKOTUgMCBvYmoKNDEwCmVu
+	ZG9iagoyIDAgb2JqCjw8IC9MYXN0IDk2IDAgUiAvRmlyc3QgOTcgMCBSID4+CmVuZG9i
+	ago5NyAwIG9iago8PCAvUGFyZW50IDk4IDAgUiAvVGl0bGUgKENhbnZhcyAxKSAvQ291
+	bnQgMCAvRGVzdCBbIDMgMCBSIC9YWVogMCA3MzMgMCBdCi9OZXh0IDk5IDAgUiA+Pgpl
+	bmRvYmoKOTkgMCBvYmoKPDwgL1BhcmVudCAxMDAgMCBSIC9QcmV2IDEwMSAwIFIgL0Nv
+	dW50IDAgL1RpdGxlIChDYW52YXMgMykgL0Rlc3QgWyA1MSAwIFIKL1hZWiAwIDczMyAw
+	IF0gL05leHQgMTAyIDAgUiA+PgplbmRvYmoKMTAyIDAgb2JqCjw8IC9QYXJlbnQgMTAz
+	IDAgUiAvUHJldiAxMDQgMCBSIC9Db3VudCAwIC9EZXN0IFsgNjkgMCBSIC9YWVogMCA3
+	MzMgMCBdIC9UaXRsZQooQ2FudmFzIDIpID4+CmVuZG9iagoxMDQgMCBvYmoKPDwgL1Bh
+	cmVudCAxMDAgMCBSID4+CmVuZG9iagoxMDMgMCBvYmoKPDwgPj4KZW5kb2JqCjEwMSAw
+	IG9iago8PCAvUGFyZW50IDk4IDAgUiA+PgplbmRvYmoKMTAwIDAgb2JqCjw8ID4+CmVu
+	ZG9iago5OCAwIG9iago8PCA+PgplbmRvYmoKOTYgMCBvYmoKPDwgL1BhcmVudCAxMDMg
+	MCBSIC9QcmV2IDEwNCAwIFIgL0NvdW50IDAgL0Rlc3QgWyA2OSAwIFIgL1hZWiAwIDcz
+	MyAwIF0gL1RpdGxlCihDYW52YXMgMikgPj4KZW5kb2JqCjEwNSAwIG9iago8PCAvTGVu
+	Z3RoIDEwNiAwIFIgL0xlbmd0aDEgMTQwNTIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K
+	c3RyZWFtCngBvXt7fFTF9fjMfe/7/X5ns7vZvB/kRQJZQhISIBGIQoIEEyAQEGqAEMQK
+	34gggogC8hBQwQdPNUuIsoD4pRRE/NqKVlGpWq1oqTXV9of2W2F3v2fuhhjya/vxj356
+	N2dmzszcuWfOnDnnzLk3HYuWtCIF6kI0mjC1pX02Eq+8KwhR12cuaGlP4LrxkL85s7PD
+	ncDZFITo+bPb5yxI4MJjCEkdc+Yv679f34aQ8+u21pZZiXZ0HfKCNqhI4HgY5MltCzru
+	TuDaXsi3z79rZn+73gx43YKWu/ufjz4C3P2zlgWtif55ZyBPbr9rcUc/fivk7e2LWvv7
+	4wag7y2EodaP7kISdCfiEYXU8GtCiL8idSAGWkk7XLPSZZvvUJV+hzSCiN9R+4iYv+Z5
+	5eL/tl4PyDYKf4cKyY3+JOeCsSBCcgztfbKNAy3ifZD4I6g+LYJqAMoA8gHS0kaZURfe
+	ix4F2A1Ao7n4IbQMYC3A4wDMQOkAYMfwQz2MEDqOlyErHhuSMa5b9RaXWSpzvRPBXO+T
+	rg/Nn5/AFli9z7ClR4Eko6R4N34KzUIu/Bzy4XtQNUrBO44E57uaoekAagfoAqDFFOMD
+	Pc5c16s4HfkYDPf4kZPBL7v+kJPh+iInQuEe1+lAhIHsF07AQirXKceTrv92zHG9CnAo
+	0XQwCD1edh1wzHdtdkbwjh7XJkcEwz0bE9kSB9z6smtBcKtrVo7YPn5rhDrU4yqG9skh
+	maugyOPKd1x2ZQUiAgY8wzHelZrzK1cy3Ajd3DCoL6Rx2R2bXcOhyemoDAwHOIEP4p0o
+	Fe/s8Y11HYciTPdITbBoawT//Eh1So4vgu8JFVSnbA1WB3zB8S5fsCoQgPLk1/lV/O38
+	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
+	Obj/jCH4zCH4rCG4KI+D+Dt7SPucIXjbEHzuEHz+EFz8f7BB4/9sSPtdQ/D2IfiiIfji
+	IXjHEHzJEJx8aTKYP8sI/n8a+VX4CmVuZHN0cmVhbQplbmRvYmoKMTA2IDAgb2JqCjkz
+	OTgKZW5kb2JqCjEwNyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0FzY2Vu
+	dCA3NzAgL0NhcEhlaWdodCA3MTcgL0Rlc2NlbnQgLTIzMCAvRmxhZ3MgMzIKL0ZvbnRC
+	Qm94IFstOTUxIC00ODEgMTQ0NSAxMTIyXSAvRm9udE5hbWUgL01FWkFYUytIZWx2ZXRp
+	Y2EgL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDAgL01heFdpZHRoIDE1MDAgL1hIZWlnaHQg
+	NjM3IC9Gb250RmlsZTIgMTA1IDAgUiA+PgplbmRvYmoKMTA4IDAgb2JqClsgMjc4IDAg
+	MCAwIDAgMCAwIDAgMzMzIDMzMyAwIDAgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDU1NgowIDY2NyA2NjcgNzIyIDcyMiAwIDAgMCAwIDI3OCAwIDAg
+	NTU2IDAgNzIyIDAgMCAwIDcyMiA2NjcgNjExIDcyMiAwIDAgMCA2NjcKMCAwIDAgMCAw
+	IDAgMCA1NTYgNTU2IDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAwIDAgMjIyIDgz
+	MyA1NTYgNTU2IDU1NgowIDMzMyA1MDAgMjc4IDU1NiA1MDAgMCAwIDUwMCBdCmVuZG9i
+	agoxNSAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VG
+	b250IC9NRVpBWFMrSGVsdmV0aWNhIC9Gb250RGVzY3JpcHRvcgoxMDcgMCBSIC9XaWR0
+	aHMgMTA4IDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjEgL0VuY29kaW5nIC9N
+	YWNSb21hbkVuY29kaW5nCj4+CmVuZG9iagoxMDkgMCBvYmoKPDwgL0xlbmd0aCAxMTAg
+	MCBSIC9MZW5ndGgxIDEwMjM2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4
+	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
+	kvqdGaO6bQg2R4/LmFNvQj4Hk4v9X7ofK+iWTFnzkvvNvhU/C+DnRekM5zRPWdf2RVsB
+	+Ziril7VXTBzlbiQmXHuuZ18sbHc/0TPIebONMTOjnZiNn4XF+BX4nSf0CbMFx4SfoPf
+	4QSiY+qw6DpmJbuaE+rIZujnt/OP8E/xR9kPyVmiYp0c5zPwvMA48fRqwC4Ehsd/dRFY
+	Rq1k0GZFiHaQxUMx0R7gbIpeirdt1TTdsLU5Ggzin033B6tsXMrLDUG+Pz93na5xRsd1
+	nUf6862j8bjzhDsumkviMrJeUiytxiP2GiK+x1Wde46rOn8S54H3OoIL56GFIP2PHYgA
+	XxABJRIgsUjqgqdRLnhDg2r8NFrvCzHtSKywiLhS6BgaeSCmn7ge3kuypSPSW489Lr0h
+	/Rcp3ouDfcrqzz3H2s9/gPEv4muR/kKMfpH+V48NM1n5XscLmfgtvwy/rddALX7Hrsd/
+	EWnE7/3T8Yt2K34jnwWz8SaqE+ZgC4IeNZG7E/CsBLVNHVWNDbn1vYtX9a5cOC+UV3XV
+	4vm01oVnMUauRaL/T7UDaQ8SdXmPIr2BdBrpa2ygRLIiZSGVIdUjdSD1IV2LtBlpB9Ie
+	pAjSUaQ3kE7HRh7sB0bjBJxj0llj0vi/VpfUrxqTls3ZRf3NHFPePiYdGpOeOyY9b0wa
+	QbpkfFlGF4135ZjyvjHphWPSFOeL5790TPqqMekVY9JXj0nL/wd3ET/XjClfNSa9mqb/
+	BxUD7IcKZW5kc3RyZWFtCmVuZG9iagoxMTAgMCBvYmoKNjYzNgplbmRvYmoKMTExIDAg
+	b2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0
+	IDcyMCAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWy0xMDE4IC00ODEg
+	MTQzNiAxMTU5XSAvRm9udE5hbWUgL0ZMWEJLSStIZWx2ZXRpY2EtQm9sZCAvSXRhbGlj
+	QW5nbGUKMCAvU3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA2NDQgL0ZvbnRG
+	aWxlMiAxMDkgMCBSID4+CmVuZG9iagoxMTIgMCBvYmoKWyAyNzggMCAwIDAgMCAwIDAg
+	MCAzMzMgMzMzIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMAowIDcyMiA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjY3IDAg
+	NzIyIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYKNjExIDU1NiA2MTEgNTU2IDAgNjEx
+	IDYxMSAyNzggMCAwIDI3OCAwIDYxMSA2MTEgMCAwIDM4OSA1NTYgMzMzIDYxMSA1NTYg
+	Nzc4Cl0KZW5kb2JqCjE4IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVl
+	VHlwZSAvQmFzZUZvbnQgL0ZMWEJLSStIZWx2ZXRpY2EtQm9sZCAvRm9udERlc2NyaXB0
+	b3IKMTExIDAgUiAvV2lkdGhzIDExMiAwIFIgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIg
+	MTE5IC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZwo+PgplbmRvYmoKMTEzIDAgb2Jq
+	CihVbnRpdGxlZCkKZW5kb2JqCjExNCAwIG9iagooTWFjIE9TIFggMTAuNi44IFF1YXJ0
+	eiBQREZDb250ZXh0KQplbmRvYmoKMTE1IDAgb2JqCihTY290dCBNYWluKQplbmRvYmoK
+	MTE2IDAgb2JqCihPbW5pR3JhZmZsZSBQcm9mZXNzaW9uYWwpCmVuZG9iagoxMTcgMCBv
+	YmoKKEQ6MjAxMTEyMjkxODAyNDFaMDAnMDAnKQplbmRvYmoKMSAwIG9iago8PCAvVGl0
+	bGUgMTEzIDAgUiAvQXV0aG9yIDExNSAwIFIgL1Byb2R1Y2VyIDExNCAwIFIgL0NyZWF0
+	b3IgMTE2IDAgUiAvQ3JlYXRpb25EYXRlCjExNyAwIFIgL01vZERhdGUgMTE3IDAgUiA+
+	PgplbmRvYmoKeHJlZgowIDExOAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwNzYwMjYg
+	MDAwMDAgbiAKMDAwMDA1NzU4NCAwMDAwMCBuIAowMDAwMDA2MTg1IDAwMDAwIG4gCjAw
+	MDAwNDkxNDkgMDAwMDAgbiAKMDAwMDAwMDAyMiAwMDAwMCBuIAowMDAwMDA2MTY1IDAw
+	MDAwIG4gCjAwMDAwMDYyODkgMDAwMDAgbiAKMDAwMDAyNzI4NiAwMDAwMCBuIAowMDAw
+	MDA4OTY3IDAwMDAwIG4gCjAwMDAwMDk2MjEgMDAwMDAgbiAKMDAwMDAwODI3OCAwMDAw
+	MCBuIAowMDAwMDA4OTQ3IDAwMDAwIG4gCjAwMDAwMDc2MDMgMDAwMDAgbiAKMDAwMDAw
+	ODI1OCAwMDAwMCBuIAowMDAwMDY4MjQwIDAwMDAwIG4gCjAwMDAwMDY5NjcgMDAwMDAg
+	biAKMDAwMDAyNTQ5MiAwMDAwMCBuIAowMDAwMDc1NjQ2IDAwMDAwIG4gCjAwMDAwMDY2
+	NTEgMDAwMDAgbiAKMDAwMDAwNjgwOSAwMDAwMCBuIAowMDAwMDA3NDQxIDAwMDAwIG4g
+	CjAwMDAwMDcxMjUgMDAwMDAgbiAKMDAwMDAwNzI4MyAwMDAwMCBuIAowMDAwMDE4MzA4
+	IDAwMDAwIG4gCjAwMDAwMTgzNTYgMDAwMDAgbiAKMDAwMDAxODQwMSAwMDAwMCBuIAow
+	MDAwMDE4NDQ2IDAwMDAwIG4gCjAwMDAwMTg0OTMgMDAwMDAgbiAKMDAwMDAyNjM4OSAw
+	MDAwMCBuIAowMDAwMDU2OTM5IDAwMDAwIG4gCjAwMDAwNTYzMjAgMDAwMDAgbiAKMDAw
+	MDA1NTY3NSAwMDAwMCBuIAowMDAwMDU1MDU2IDAwMDAwIG4gCjAwMDAwNTQyNDkgMDAw
+	MDAgbiAKMDAwMDA1MzQ0MiAwMDAwMCBuIAowMDAwMDI0NjI3IDAwMDAwIG4gCjAwMDAw
+	MTI0ODIgMDAwMDAgbiAKMDAwMDAxNTMwMiAwMDAwMCBuIAowMDAwMDE1MzIzIDAwMDAw
+	IG4gCjAwMDAwMTgyODcgMDAwMDAgbiAKMDAwMDAwOTY0MSAwMDAwMCBuIAowMDAwMDEy
+	NDYxIDAwMDAwIG4gCjAwMDAwMTg1NDAgMDAwMDAgbiAKMDAwMDAyNDYwNiAwMDAwMCBu
+	IAowMDAwMDI0NjY0IDAwMDAwIG4gCjAwMDAwMjU0NzIgMDAwMDAgbiAKMDAwMDAyNTUy
+	OSAwMDAwMCBuIAowMDAwMDI2MzY5IDAwMDAwIG4gCjAwMDAwMjY0MjYgMDAwMDAgbiAK
+	MDAwMDAyNzI2NiAwMDAwMCBuIAowMDAwMDMyMjI0IDAwMDAwIG4gCjAwMDAwMjczMjIg
+	MDAwMDAgbiAKMDAwMDAzMjIwMyAwMDAwMCBuIAowMDAwMDMyMzMxIDAwMDAwIG4gCjAw
+	MDAwMzMxMjcgMDAwMDAgbiAKMDAwMDAzMzgxNSAwMDAwMCBuIAowMDAwMDMzODM1IDAw
+	MDAwIG4gCjAwMDAwMzQ1NTIgMDAwMDAgbiAKMDAwMDAzMjY0NyAwMDAwMCBuIAowMDAw
+	MDMyOTY2IDAwMDAwIG4gCjAwMDAwMzI4MDUgMDAwMDAgbiAKMDAwMDA1MjgyMyAwMDAw
+	MCBuIAowMDAwMDUyMDE2IDAwMDAwIG4gCjAwMDAwNTEzOTcgMDAwMDAgbiAKMDAwMDAz
+	NzYzMyAwMDAwMCBuIAowMDAwMDQwNDk4IDAwMDAwIG4gCjAwMDAwMzQ1NzIgMDAwMDAg
+	biAKMDAwMDAzNzYxMiAwMDAwMCBuIAowMDAwMDQ0NTYyIDAwMDAwIG4gCjAwMDAwNDA1
+	MTkgMDAwMDAgbiAKMDAwMDA0NDU0MSAwMDAwMCBuIAowMDAwMDQ0NjY5IDAwMDAwIG4g
+	CjAwMDAwNDU0NzQgMDAwMDAgbiAKMDAwMDA0NjE0MyAwMDAwMCBuIAowMDAwMDQ0OTk5
+	IDAwMDAwIG4gCjAwMDAwNDUzMTYgMDAwMDAgbiAKMDAwMDA0NTE1NyAwMDAwMCBuIAow
+	MDAwMDUwNzUyIDAwMDAwIG4gCjAwMDAwNDk5NDUgMDAwMDAgbiAKMDAwMDA0OTMyNiAw
+	MDAwMCBuIAowMDAwMDQ2MTYzIDAwMDAwIG4gCjAwMDAwNDkxMjggMDAwMDAgbiAKMDAw
+	MDA0OTI0NiAwMDAwMCBuIAowMDAwMDQ5OTI1IDAwMDAwIG4gCjAwMDAwNTA3MzIgMDAw
+	MDAgbiAKMDAwMDA1MTM3NyAwMDAwMCBuIAowMDAwMDUxOTk2IDAwMDAwIG4gCjAwMDAw
+	NTI4MDMgMDAwMDAgbiAKMDAwMDA1MzQyMiAwMDAwMCBuIAowMDAwMDU0MjI5IDAwMDAw
+	IG4gCjAwMDAwNTUwMzYgMDAwMDAgbiAKMDAwMDA1NTY1NSAwMDAwMCBuIAowMDAwMDU2
+	MzAwIDAwMDAwIG4gCjAwMDAwNTY5MTkgMDAwMDAgbiAKMDAwMDA1NzU2NCAwMDAwMCBu
+	IAowMDAwMDU4MTE2IDAwMDAwIG4gCjAwMDAwNTc2MzIgMDAwMDAgbiAKMDAwMDA1ODA5
+	NCAwMDAwMCBuIAowMDAwMDU3NzM4IDAwMDAwIG4gCjAwMDAwNTgwNzEgMDAwMDAgbiAK
+	MDAwMDA1ODAzMyAwMDAwMCBuIAowMDAwMDU3ODYxIDAwMDAwIG4gCjAwMDAwNTgwMTAg
+	MDAwMDAgbiAKMDAwMDA1Nzk3MSAwMDAwMCBuIAowMDAwMDU4MjI1IDAwMDAwIG4gCjAw
+	MDAwNjc3MTYgMDAwMDAgbiAKMDAwMDA2NzczOCAwMDAwMCBuIAowMDAwMDY3OTY1IDAw
+	MDAwIG4gCjAwMDAwNjg0MTcgMDAwMDAgbiAKMDAwMDA3NTE0NiAwMDAwMCBuIAowMDAw
+	MDc1MTY4IDAwMDAwIG4gCjAwMDAwNzU0MDEgMDAwMDAgbiAKMDAwMDA3NTgyOCAwMDAw
+	MCBuIAowMDAwMDc1ODU2IDAwMDAwIG4gCjAwMDAwNzU5MDkgMDAwMDAgbiAKMDAwMDA3
+	NTkzOSAwMDAwMCBuIAowMDAwMDc1OTgzIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUg
+	MTE4IC9Sb290IDgzIDAgUiAvSW5mbyAxIDAgUiAvSUQgWyA8NTQzYjhmY2IxYjc2NDM2
+	MzNmMDJhYTcxZDQyOWU2ODY+Cjw1NDNiOGZjYjFiNzY0MzYzM2YwMmFhNzFkNDI5ZTY4
+	Nj4gXSA+PgpzdGFydHhyZWYKNzYxNTIKJSVFT0YKMyAwIG9iago8PC9UeXBlIC9QYWdl
+	IC9Db250ZW50cyA1IDAgUiAvTWVkaWFCb3ggWzAgMCA1NzYgNzMzXSAvUGFyZW50IDQg
+	MCBSIC9SZXNvdXJjZXMgNyAwIFIgPj4KZW5kb2JqCjUxIDAgb2JqCjw8L1R5cGUgL1Bh
+	Z2UgL0NvbnRlbnRzIDUyIDAgUiAvTWVkaWFCb3ggWzAgMCA1NzYgNzMzXSAvUGFyZW50
+	IDQgMCBSIC9SZXNvdXJjZXMgNTQgMCBSID4+CmVuZG9iago2OSAwIG9iago8PC9UeXBl
+	IC9QYWdlIC9Db250ZW50cyA3MCAwIFIgL01lZGlhQm94IFswIDAgNTc2IDczM10gL1Bh
+	cmVudCA0IDAgUiAvUmVzb3VyY2VzIDcyIDAgUiA+PgplbmRvYmoKMSAwIG9iago8PC9B
+	dXRob3IgKFNjb3R0IE1haW4pL0NyZWF0aW9uRGF0ZSAoRDoyMDEwMTAwNTIyNDAwMFop
+	L0NyZWF0b3IgKE9tbmlHcmFmZmxlIFByb2Zlc3Npb25hbCA1LjIpL01vZERhdGUgKEQ6
+	MjAxMTEyMjkxODAyMDBaKS9Qcm9kdWNlciAxMTQgMCBSIC9UaXRsZSAoc2VydmljZV9s
+	aWZlY3ljbGUpPj4KZW5kb2JqCnhyZWYKMSAxCjAwMDAwNzg5ODcgMDAwMDAgbiAKMyAx
+	CjAwMDAwNzg2NzIgMDAwMDAgbiAKNTEgMQowMDAwMDc4Nzc1IDAwMDAwIG4gCjY5IDEK
+	MDAwMDA3ODg4MSAwMDAwMCBuIAp0cmFpbGVyCjw8L0lEIFs8NTQzYjhmY2IxYjc2NDM2
+	MzNmMDJhYTcxZDQyOWU2ODY+IDw1NDNiOGZjYjFiNzY0MzYzM2YwMmFhNzFkNDI5ZTY4
+	Nj5dIC9JbmZvIDEgMCBSIC9QcmV2IDc2MTUyIC9Sb290IDgzIDAgUiAvU2l6ZSAxMTg+
+	PgpzdGFydHhyZWYKNzkxNzEKJSVFT0YK
+	</data>
+	<key>QuickLookThumbnail</key>
+	<data>
+	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
+	cHQAAATIAAAAFHJYWVoAAATcAAAAFGdYWVoAAATwAAAAFGJYWVoAAAUEAAAAFHJUUkMA
+	AAUYAAAIDGFhcmcAAA0kAAAAIHZjZ3QAAA1EAAAGEm5kaW4AABNYAAAGPmNoYWQAABmY
+	AAAALG1tb2QAABnEAAAAKGJUUkMAAAUYAAAIDGdUUkMAAAUYAAAIDGFhYmcAAA0kAAAA
+	IGFhZ2cAAA0kAAAAIGRlc2MAAAAAAAAACERpc3BsYXkAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAABtbHVjAAAAAAAAABIAAAAMbmxOTAAAABYAAADoZGFESwAAABwAAAD+
+	cGxQTAAAABIAAAEaZW5VUwAAABIAAAEsbmJOTwAAABIAAAE+ZnJGUgAAABYAAAFQcHRC
+	UgAAABgAAAFmcHRQVAAAABYAAAF+emhDTgAAAAwAAAGUZXNFUwAAABIAAAGgamFKUAAA
+	AA4AAAGycnVSVQAAACQAAAHAc3ZTRQAAABAAAAHkemhUVwAAAA4AAAH0ZGVERQAAABAA
+	AAICZmlGSQAAABAAAAISaXRJVAAAABQAAAIia29LUgAAAAwAAAI2AEsAbABlAHUAcgBl
+	AG4ALQBMAEMARABMAEMARAAtAGYAYQByAHYAZQBzAGsA5gByAG0ASwBvAGwAbwByACAA
+	TABDAEQAQwBvAGwAbwByACAATABDAEQARgBhAHIAZwBlAC0ATABDAEQATABDAEQAIABj
+	AG8AdQBsAGUAdQByAEwAQwBEACAAQwBvAGwAbwByAGkAZABvAEwAQwBEACAAYQAgAEMA
+	bwByAGUAc19pgnIAIABMAEMARABMAEMARAAgAGMAbwBsAG8AcjCrMOkw/AAgAEwAQwBE
+	BCYEMgQ1BEIEPQQ+BDkAIAQWBBoALQQ0BDgEQQQ/BDsENQQ5AEYA5AByAGcALQBMAEMA
+	RF9pgnJtsmZ2mG95OlZoAEYAYQByAGIALQBMAEMARABWAOQAcgBpAC0ATABDAEQATABD
+	AEQAIABjAG8AbABvAHIAac7st+wAIABMAEMARAAAdGV4dAAAAABDb3B5cmlnaHQgQXBw
+	bGUsIEluYy4sIDIwMTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUgABAAAA
+	ARbPWFlaIAAAAAAAAG8xAAA5YwAAAYNYWVogAAAAAAAAYO4AALdqAAAIElhZWiAAAAAA
+	AAAmtwAADzIAAMmXY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA2ADsA
+	QABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKMAqACtALIAtwC8
+	AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwB
+	UgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIU
+	Ah0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsD
+	FgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRI
+	BFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUF
+	xQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0
+	B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJ
+	eQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuw
+	C8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4O
+	SQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RET
+	ETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcU
+	SRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReu
+	F9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2Mb
+	ihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+U
+	H78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/Ak
+	HyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijU
+	KQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEu
+	Fi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/
+	M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5
+	fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+i
+	P+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJG
+	Z0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1K
+	TZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U
+	21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyG
+	XNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk
+	6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1g
+	bbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52
+	m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/l
+	gEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ
+	/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQg
+	lIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6f
+	HZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaoc
+	qo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2
+	AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hj
+	wl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbO
+	ts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA
+	3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6Lzp
+	RunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb7
+	94r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9wYXJhAAAAAAADAAAAAmZmAADy
+	pwAADVkAABPQAAAKDnZjZ3QAAAAAAAAAAAADAQAAAgAAAAcAHgBKAIsA4wEqAW4BwAIZ
+	AnQC2gNJA8MERwTUBW0GEQbCB3wIPgkHCd0KuQucDI8Npw7cEBARSxKJE8kVERZcF6wZ
+	BBphG70dIB6MH/ghZCLaJE4lyScvKI4p6ytJLJ8t9i9DMI0x0DMNNEI1czacN8A44Dn9
+	Oxc8Kz05PkU/UkBjQXNChEOXRKtFv0bTR+lI/0oVSyxMQ01bTmlPdlCFUZJSn1OrVLdV
+	wlbLV9JY2VnfWuNb6FztXehe3F/OYL9hr2KeY41kemVmZlFnO2gkaQ5p9mrfa8ZsqW2N
+	bnBvU3A3cRpx/HLec8B0o3WFdmZ3SXgreQp56nrMe7B8mH2Efnd/cYBygXqCioOhhL2F
+	34cJiDyJcIqji9aNCo48j22QnpHOkv2ULJVbloqXtpjgmgubNZxfnYmesp/boQSiLaNW
+	pH+lqKbRp/ipIKpMq3yssq3xrzqwj7Hvs1u0z7ZPt9S5PLp0u6m83L4LvzPAVsFxwoXD
+	kcSWxZbGkceIyIPJh8qNy43Mhc10zlfPLs/70MDRe9I20vbT19S51ZrWfddf2ELZJdoJ
+	2u3b0dy13Zrefd9g4EThKeIQ4vnj5uTW5cnmwee76Lnpueql647sdu1e7kXvK/AQ8PXx
+	2vK+86H0hfVo9kv3L/gT+Pf53PrA+6L8hP1l/kT/Iv//AAAABgAaAEAAeADFARMBTAGQ
+	Ad8CMwKOAvMDXwPWBFUE3QVwBg4GtwdlCBoI2gmcCmcLQgw9DVQOaA+AEKARwRLpFBUV
+	RBZ5F68Y7xouG3IcvB4LH1YgqiH/I0EkgSW/JvwoNylqKp0ryyzyLhUvMzBIMVsyZzNx
+	NHk1fTZ6N2o4WzlMOj07MDwiPRU+CD76P+1A4UHVQspDvkSzRadGmEeISHdJaEpZS0hM
+	OE0nThVPBE/0UOJR0VLAU7BUnlWIVnNXXlhJWTNaHVsGW+5c1l29XqNfimBvYVRiNGMM
+	Y+JkuWWPZmZnPGgRaOZpu2qRa2VsOm0PbeNut2+IcFlxK3H8cs5zoHRydUN2FXbnd7l4
+	jHleejB7AnvXfK99i35tf1WARIE6gjmDPYRIhViGboeHiKWJw4rhi/6NHI45j1aQc5GQ
+	kqyTyZTmlgKXHJg2mVGabZuLnKyd0J72oCKhUKKDo7mk8aYup3GotKn3qzmsfK2+rwCw
+	QbGDssW0BbVHtoi3x7kHukW7gry9vfS/JsBTwXvCnsO7xNXF6cb3yATJE8ohyy/MPc1M
+	zlrPaNB30YbSldOi1K/VvNbJ19bY5dn02wPcFN0l3jjfTOBn4aPi6eQn5Vrmhueq6Mfp
+	4er47A7tJe4/71vwgPHQ8zP0k/Xz91L4tPoY+4X8+P53//8AAAAEABEAKgBOAIAAwAEH
+	AToBdAG3AgICTQKgAvsDXgPKBDwEtgU4BcIGUAbjB3sIGwjHCY0KYws8DBsM/g3iDssP
+	tRClEZgSjhOIFIUVhhaLF5MYnxmrGrgbvRy9Hb4evx++ILshtSKrI50kiyV1JlwnQCgi
+	KQAp2yq3K4ssVi0gLeoutS+AMEsxFjHhMqszdTQ/NQk10zadN2g4NDj4Ob46hTtLPBI8
+	2j2iPmo/Mj/8QMZBkUJdQypD90TDRY9GW0cnR/JIvkmKSlZLIUvrTLZNgE5MTxZP4VCr
+	UXNSO1MCU8pUklVaViBW51euWHVZO1oCWslbj1xTXRZd2V6bX11gHWDdYZ1iXWMcY9pk
+	mGVWZhNmz2eLaEVpAGm7anZrMWvsbKdtYm4cbtdvk3BOcQhxwXJ6czNz7HSldV52F3bP
+	d4d4P3j4ebB6aXsge9l8lH1Ufhl+5X+4gJSBeYJmg1yEWYVbhmWHdYiFiZaKpou2jMaN
+	1Y7lj/SRA5ITkyKUMJU6lkOXSphRmVmaYptvnH+dk56sn8ug76Ilo3mk0KYnp36o1qot
+	q4Ss264xr4iw3rI2s4u037Yzt4e43Lozu4q84r48v5jA9sJUw7XFJ8akyC3JxctrzSTO
+	7NDH0rHUqdaw2MHa3d0A3zDhp+SG54rqt+4P8Yj1GPi1/Ff//wAAbmRpbgAAAAAAAAY2
+	AACl4wAAVqEAAFFbAACnKwAAJZsAAA4UAABQDQAAVDkAAkKPAAHZmQABR64AAwEAAAIA
+	AAANACcARgBmAIcAqADJAOsBDgExAVUBegGdAbwB2wH8Ah0CPwJiAoYCqgLPAvQDGwNB
+	A2gDkAO5A+IECwQ1BGAEjAS4BOQFEgU/BW4FoQXVBgoGQQZ4BrIG7AcoB2cHpwfpCC4I
+	dQi/CQsJWgmsCgEKWAqyCw4LbgvSDDgMoA0IDXIN3g5KDrkPKA+aEA0QgRD3EW8R6BJj
+	Et8TYhPnFG0U9hWBFg4WnRcvF8MYWxj1GZEaMRrTG3ccHRzQHYceQh8AH8EghSFNIhki
+	6CO7JJElaiZGJyUoDCj1KeIq0ivELLotsy6wL68wsjG4MsAzyzTeNfE3BDgVOSM6LTsx
+	PDA9Kj4gPxJAAkDvQdtCv0OiRIhFb0ZYR0JIL0keSg9LA0v4TPBN6k7lT+JQ4VHkUutT
+	81T9VglXF1gnWTlaTVtjXHtdlV6wX85g7WIOYzNkWWV/ZqNnxWjjaf1rEmwhbSpuLm8t
+	cClxInIWcwlz+nTpdhp3TXiEeb96/nxFfZN+64BNgbuDNIS5hkmH44mHiyGMro5Aj+CR
+	kZNYlT2XSZl3m8WeG6AOogKj+aXyp+6p7Kvsre+v9bH9tAi2G7gvukS8Wb5pwHbCfsSA
+	xn3IdspszGDOi9C40urVIddd2Z/b5t4x4IHi1eUr54jp5+xH7qrxEPN79e34Zvrn/XD/
+	/wAAAA8ALgBRAHUAmgC/AOQBCwEyAVsBhAGpAcsB7wIUAjoCYAKIArAC2QMDAy0DWQOF
+	A7ED3wQNBDwEawSbBM0E/gUxBWQFnAXVBg8GTAaJBsgHCgdNB5IH2gglCHIIwgkWCWwJ
+	xgojCoIK5QtKC7oMKwyfDRUNjA4GDoIPAA+BEAMQiBEOEZcSIhKvE0AT1RRtFQYVohZB
+	FuIXhhgtGNYZgRowGuAbkxxIHQQdwh6DH0YgDCDWIaIicyNGJB4k+CXWJrcnoCiXKZEq
+	jiuOLJItmi6mL7UwyDHeMvc0FTU6NmM3jji9Oe87JTxfPZs+20AeQWRCr0P7RUVGi0fL
+	SQVKN0tiTIZNpk7BT9pQ8FIEUxZUKlVAVllXc1iPWa5azlvxXRZePV9mYJFhvmLuZCNl
+	WGaPZ8Zo/Wo0a2lsnm3RbwJwMnFgco5zu3Todg93N3hgeYt6uHvnfRd+SX99gLKB6oMj
+	hF2FmobYiBeJWYqei+SNLY54j8aRGJJvk8yVMJabmA6ZiZsMnJWeJ5/HoWmjDKSyplqo
+	BKmwq1+tEK7DsHiyL7Potae3abktuvK8ur6CwEzCF8PjxbDHfMlKyxnM0M5Vz+PRetMe
+	1M7Wi9hT2ibcAd3i38bhq+OP5XLnU+kb6p/sJ+2x7z7wzvJf8+/1gPcP+Jn6Hvuf/Rr+
+	j///AAAAFwBBAHAAnwDPAP8BMgFmAZkBxQHzAiICUgKEArcC7AMhA1gDkAPJBAMEPgR6
+	BLcE9QU1BXYFvQYFBk8GmwbqBzsHkAfoCEQIpAkICXAJ3ApMCsALNwu6DEIMzA1ZDeoO
+	fg8VD7AQTxDxEZYSPhLpE50UUxUNFcoWiRdMGBIY2hmlGnIbQRwTHOsdxh6kH4YgayFU
+	IkEjMiQnJR8mGycaKCApKyo5K0ssYS18LpovvTDkMg4zPDRyNa427zg1OYE60jwoPYQ+
+	5kBMQbdDK0SkRiFHo0kpSrVMRE3YT3BRDFKwVFtWCVe9WXZbNFz4XsBgjWJeZDZmDGfZ
+	aZprSWzpbnlv/HF0cuV0UHWzdxF4cnnUezp8oX4Lf3iA54JYg8yFQoa6iDSJtos9jMmO
+	WY/rkX6TEZSili+XuZk+mr+cPJ22nwWgTKGVot+kKqV3psWoFalmqrqsDq1krrywFbFw
+	ssu0KLWKtu24Ubm3ux68hr3uv1fAwcIrw5XE/8Zqx9TJQMqrzBbNc87K0BvRaNKs0+rV
+	I9ZX14LYqNnK2uXb/N0Q3h/fK+A14TriPuNA5EDlPuY65zfoMekq6iLrDuvp7Lntd+41
+	7uzvpfBZ8QrxvPJm8xDzuPRc9QD1ovZC9uL3f/gc+Ln5Vfnw+oz7J/vC/F78+P2T/i/+
+	yf9k//8AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui///9owAAA9wAAMBs
+	bW1vZAAAAAAAAAYQAACcsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+	</data>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>Sheets</key>
+	<array>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {576, 733}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Bounds</key>
+					<string>{{360.27, 518.028}, {62, 28}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>244</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKw9Cb3VuZGVkCnNl
+						cnZpY2WGhAJpSQEPkoSEhAxOU0Rp
+						Y3Rpb25hcnkAlIQBaQOShJaWB05T
+						Q29sb3KGkoSEhAdOU0NvbG9yAJSE
+						AWMDhAJmZgCDZmYmP4aShJaWEE5T
+						UGFyYWdyYXBoU3R5bGWGkoSEhBBO
+						U1BhcmFncmFwaFN0eWxlAJSEBEND
+						QFMCAISEhAdOU0FycmF5AJSZDJKE
+						hIQJTlNUZXh0VGFiAJSEAkNmAByG
+						koSioQA4hpKEoqEAVIaShKKhAHCG
+						koSioQCBjACGkoSioQCBqACGkoSi
+						oQCBxACGkoSioQCB4ACGkoSioQCB
+						/ACGkoSioQCBGAGGkoSioQCBNAGG
+						koSioQCBUAGGhgCGkoSWlgZOU0Zv
+						bnSGkoSEhAZOU0ZvbnQelJkohAVb
+						NDBjXQYAAAAeAAAA//5IAGUAbAB2
+						AGUAdABpAGMAYQAtAEIAbwBsAGQA
+						AACEAWYMmwCbAZsAmwCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs24 \cf2 Bounded\
+service}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{137.454, 518.028}, {77, 28}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>243</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>0</integer>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Join</key>
+							<integer>0</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKxFVbmJvdW5kZWQK
+						c2VydmljZYaEAmlJARGShISEDE5T
+						RGljdGlvbmFyeQCUhAFpA5KElpYH
+						TlNDb2xvcoaShISEB05TQ29sb3IA
+						lIQBYwOEAmZmAINmZiY/hpKElpYQ
+						TlNQYXJhZ3JhcGhTdHlsZYaShISE
+						EE5TUGFyYWdyYXBoU3R5bGUAlIQE
+						Q0NAUwIAhISEB05TQXJyYXkAlJkM
+						koSEhAlOU1RleHRUYWIAlIQCQ2YA
+						HIaShKKhADiGkoSioQBUhpKEoqEA
+						cIaShKKhAIGMAIaShKKhAIGoAIaS
+						hKKhAIHEAIaShKKhAIHgAIaShKKh
+						AIH8AIaShKKhAIEYAYaShKKhAIE0
+						AYaShKKhAIFQAYaGAIaShJaWBk5T
+						Rm9udIaShISEBk5TRm9udB6UmSiE
+						BVs0MGNdBgAAAB4AAAD//kgAZQBs
+						AHYAZQB0AGkAYwBhAC0AQgBvAGwA
+						ZAAAAIQBZgybAJsBmwCbAIaGhg==
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs24 \cf2 Unbounded\
+service}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{314.27, 287.204}, {154, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>242</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>239</integer>
+						<key>Position</key>
+						<real>0.42118796706199646</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.599538</string>
+								<key>g</key>
+								<string>0.933883</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKy1BbGwgY2xpZW50
+						cyB1bmJpbmQgYnkgY2FsbGluZwp1
+						bmJpbmRTZXJ2aWNlKCmGhAJpSQEt
+						koSEhAxOU0RpY3Rpb25hcnkAlIQB
+						aQOShJaWB05TQ29sb3KGkoSEhAdO
+						U0NvbG9yAJSEAWMDhAJmZgCDZmYm
+						P4aShJaWBk5TRm9udIaShISEBk5T
+						Rm9udB6UmRyEBVsyOGNdBgAAABQA
+						AAD//kgAZQBsAHYAZQB0AGkAYwBh
+						AIQBZgybAJsBmwCbAIaShJaWEE5T
+						UGFyYWdyYXBoU3R5bGWGkoSEhBBO
+						U1BhcmFncmFwaFN0eWxlAJSEBEND
+						QFMCAISEhAdOU0FycmF5AJSZDJKE
+						hIQJTlNUZXh0VGFiAJSEAkNmAByG
+						koSlpAA4hpKEpaQAVIaShKWkAHCG
+						koSlpACBjACGkoSlpACBqACGkoSl
+						pACBxACGkoSlpACB4ACGkoSlpACB
+						/ACGkoSlpACBGAGGkoSlpACBNAGG
+						koSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 All clients unbind by calling\
+unbindService()}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{110.362, 287.991}, {131, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>229</integer>
+						<key>Position</key>
+						<real>0.22845998406410217</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.599538</string>
+								<key>g</key>
+								<string>0.933883</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKyxUaGUgc2Vydmlj
+						ZSBpcyBzdG9wcGVkCmJ5IGl0c2Vs
+						ZiBvciBhIGNsaWVudIaEAmlJASyS
+						hISEDE5TRGljdGlvbmFyeQCUhAFp
+						A5KElpYHTlNDb2xvcoaShISEB05T
+						Q29sb3IAlIQBYwOEAmZmAINmZiY/
+						hpKElpYGTlNGb250hpKEhIQGTlNG
+						b250HpSZHIQFWzI4Y10GAAAAFAAA
+						AP/+SABlAGwAdgBlAHQAaQBjAGEA
+						hAFmDJsAmwGbAJsAhpKElpYQTlNQ
+						YXJhZ3JhcGhTdHlsZYaShISEEE5T
+						UGFyYWdyYXBoU3R5bGUAlIQEQ0NA
+						UwIAhISEB05TQXJyYXkAlJkMkoSE
+						hAlOU1RleHRUYWIAlIQCQ2YAHIaS
+						hKWkADiGkoSlpABUhpKEpaQAcIaS
+						hKWkAIGMAIaShKWkAIGoAIaShKWk
+						AIHEAIaShKWkAIHgAIaShKWkAIH8
+						AIaShKWkAIEYAYaShKWkAIE0AYaS
+						hKWkAIFQAYaGAIaGhg==
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 The service is stopped\
+by itself or a client}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>237</integer>
+					</dict>
+					<key>ID</key>
+					<integer>241</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{391.27, 373.425}</string>
+						<string>{391.27, 397.368}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>240</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.786, 342.353}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>240</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onUnbind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>240</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>239</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{391.27, 279.898}</string>
+						<string>{391.27, 342.353}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>232</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>233</integer>
+					</dict>
+					<key>ID</key>
+					<integer>238</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{391.27, 427.94}</string>
+						<string>{391.27, 448.542}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>237</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.786, 397.368}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>237</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>236</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{391.27, 102.976}</string>
+						<string>{391.27, 123.622}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>158</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>232</integer>
+					</dict>
+					<key>ID</key>
+					<integer>235</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{391.27, 208.991}</string>
+						<string>{391.27, 229.729}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>234</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.786, 178.419}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>234</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onBind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.27, 448.542}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>233</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service \
+shut down}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.27, 229.729}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>232</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Clients are bound to service}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>234</integer>
+					</dict>
+					<key>ID</key>
+					<integer>231</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{391.27, 154.194}</string>
+						<string>{391.27, 178.419}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.786, 123.622}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>230</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>227</integer>
+					</dict>
+					<key>ID</key>
+					<integer>229</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{175.845, 279.898}</string>
+						<string>{175.954, 398.488}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>201</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>222</integer>
+					</dict>
+					<key>ID</key>
+					<integer>228</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{175.954, 429.56}</string>
+						<string>{175.954, 448.704}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>227</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{117.47, 398.488}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>227</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>226</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{175.954, 103.476}</string>
+						<string>{175.954, 123.622}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>157</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>201</integer>
+					</dict>
+					<key>ID</key>
+					<integer>225</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{175.845, 209.316}</string>
+						<string>{175.845, 229.729}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>224</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{117.361, 178.244}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>224</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onStartCommand()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{115.916, 448.704}, {120.076, 51.0524}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>222</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service \
+shut down}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{116.845, 229.729}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>201</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service running}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>224</integer>
+					</dict>
+					<key>ID</key>
+					<integer>200</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{175.954, 154.194}</string>
+						<string>{175.845, 178.244}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>193</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{117.47, 123.622}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>193</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{332.27, 52.8065}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>158</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.874135</string>
+								<key>r</key>
+								<string>0.71718</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.662438</string>
+								<key>r</key>
+								<string>0.464468</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.93512</string>
+								<key>g</key>
+								<string>0.472602</string>
+								<key>r</key>
+								<string>0.333854</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Call to bindService()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{116.954, 52.8065}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>157</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.874135</string>
+								<key>r</key>
+								<string>0.71718</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.662438</string>
+								<key>r</key>
+								<string>0.464468</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.93512</string>
+								<key>g</key>
+								<string>0.472602</string>
+								<key>r</key>
+								<string>0.333854</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Call to startService()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{95.1479, 162.963}, {376.852, 216.667}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0.0748095</string>
+							<key>g</key>
+							<string>0.715745</string>
+							<key>r</key>
+							<string>0.753695</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>132</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.599538</string>
+								<key>g</key>
+								<string>0.933883</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Cap</key>
+							<integer>2</integer>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.24049</string>
+								<key>g</key>
+								<string>0.515772</string>
+								<key>r</key>
+								<string>0.742387</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>6</real>
+							<key>Pattern</key>
+							<integer>11</integer>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red192\green183\blue19;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Active\
+Lifetime}</string>
+					</dict>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>Canvas 1</string>
+			<key>UniqueID</key>
+			<integer>1</integer>
+			<key>VPages</key>
+			<integer>1</integer>
+		</dict>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {576, 733}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>FontInfo</key>
+				<dict>
+					<key>Font</key>
+					<string>Helvetica</string>
+					<key>Size</key>
+					<real>12</real>
+				</dict>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>fill</key>
+					<dict>
+						<key>GradientColor</key>
+						<dict>
+							<key>w</key>
+							<string>0.666667</string>
+						</dict>
+					</dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>254</integer>
+					</dict>
+					<key>ID</key>
+					<integer>278</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{119.458, 103.672}</string>
+						<string>{119.458, 230.326}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>277</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{51.4582, 51.6724}, {136, 52}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>277</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBK0BJbiBubyBwYXJ0
+						aWN1bGFyIG9yZGVyLApvblN0YXJ0
+						Q29tbWFuZCgpIGFuZApvbkJpbmQo
+						KSBhcmUgY2FsbGVkhoQCaUkBQJKE
+						hIQMTlNEaWN0aW9uYXJ5AJSEAWkD
+						koSWlgdOU0NvbG9yhpKEhIQHTlND
+						b2xvcgCUhAFjA4QCZmYAg2ZmJj+G
+						koSWlgZOU0ZvbnSGkoSEhAZOU0Zv
+						bnQelJkchAVbMjhjXQYAAAAUAAAA
+						//5IAGUAbAB2AGUAdABpAGMAYQCE
+						AWYMmwCbAZsAmwCGkoSWlhBOU1Bh
+						cmFncmFwaFN0eWxlhpKEhIQQTlNQ
+						YXJhZ3JhcGhTdHlsZQCUhARDQ0BT
+						AgCEhIQHTlNBcnJheQCUmQyShISE
+						CU5TVGV4dFRhYgCUhAJDZgAchpKE
+						paQAOIaShKWkAFSGkoSlpABwhpKE
+						paQAgYwAhpKEpaQAgagAhpKEpaQA
+						gcQAhpKEpaQAgeAAhpKEpaQAgfwA
+						hpKEpaQAgRgBhpKEpaQAgTQBhpKE
+						paQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 In no particular order,\
+onStartCommand() and\
+onBind() are called}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>222</integer>
+					</dict>
+					<key>ID</key>
+					<integer>276</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{119.458, 508.849}</string>
+						<string>{119.458, 530.75}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>251</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{55.7841, 530.75}, {127.348, 54.1443}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>222</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service \
+shut down}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{42.4582, 289.233}, {154, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>275</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKy1BbGwgY2xpZW50
+						cyB1bmJpbmQgYnkgY2FsbGluZwp1
+						bmJpbmRTZXJ2aWNlKCmGhAJpSQEt
+						koSEhAxOU0RpY3Rpb25hcnkAlIQB
+						aQOShJaWB05TQ29sb3KGkoSEhAdO
+						U0NvbG9yAJSEAWMDhAJmZgCDZmYm
+						P4aShJaWBk5TRm9udIaShISEBk5T
+						Rm9udB6UmRyEBVsyOGNdBgAAABQA
+						AAD//kgAZQBsAHYAZQB0AGkAYwBh
+						AIQBZgybAJsBmwCbAIaShJaWEE5T
+						UGFyYWdyYXBoU3R5bGWGkoSEhBBO
+						U1BhcmFncmFwaFN0eWxlAJSEBEND
+						QFMCAISEhAdOU0FycmF5AJSZDJKE
+						hIQJTlNUZXh0VGFiAJSEAkNmAByG
+						koSlpAA4hpKEpaQAVIaShKWkAHCG
+						koSlpACBjACGkoSlpACBqACGkoSl
+						pACBxACGkoSlpACB4ACGkoSlpACB
+						/ACGkoSlpACBGAGGkoSlpACBNAGG
+						koSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 All clients unbind by calling\
+unbindService()}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+					</dict>
+					<key>ID</key>
+					<integer>274</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{119.458, 280.495}</string>
+						<string>{119.458, 346.07}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>254</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{268.383, 65.6724}, {26, 24}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>273</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>264</integer>
+						<key>Position</key>
+						<real>0.14760473370552063</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwJOb4aEAmlJAQKS
+						hISEDE5TRGljdGlvbmFyeQCUhAFp
+						A5KElpYHTlNDb2xvcoaShISEB05T
+						Q29sb3IAlIQBYwOEAmZmAINmZiY/
+						hpKElpYGTlNGb250hpKEhIQGTlNG
+						b250HpSZHIQFWzI4Y10GAAAAFAAA
+						AP/+SABlAGwAdgBlAHQAaQBjAGEA
+						hAFmDJsAmwGbAJsAhpKElpYQTlNQ
+						YXJhZ3JhcGhTdHlsZYaShISEEE5T
+						UGFyYWdyYXBoU3R5bGUAlIQEQ0NA
+						UwIAhISEB05TQXJyYXkAlJkMkoSE
+						hAlOU1RleHRUYWIAlIQCQ2YAHIaS
+						hKWkADiGkoSlpABUhpKEpaQAcIaS
+						hKWkAIGMAIaShKWkAIGoAIaShKWk
+						AIHEAIaShKWkAIHgAIaShKWkAIH8
+						AIaShKWkAIEYAYaShKWkAIE0AYaS
+						hKWkAIFQAYaGAIaGhg==
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 No}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{350.249, 125.785}, {30, 24}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>272</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>262</integer>
+						<key>Position</key>
+						<real>0.37241667509078979</real>
+						<key>RotationType</key>
+						<integer>4</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Rotation</key>
+					<real>2.162055492401123</real>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwNZZXOGhAJpSQED
+						koSEhAxOU0RpY3Rpb25hcnkAlIQB
+						aQOShJaWB05TQ29sb3KGkoSEhAdO
+						U0NvbG9yAJSEAWMDhAJmZgCDZmYm
+						P4aShJaWBk5TRm9udIaShISEBk5T
+						Rm9udB6UmRyEBVsyOGNdBgAAABQA
+						AAD//kgAZQBsAHYAZQB0AGkAYwBh
+						AIQBZgybAJsBmwCbAIaShJaWEE5T
+						UGFyYWdyYXBoU3R5bGWGkoSEhBBO
+						U1BhcmFncmFwaFN0eWxlAJSEBEND
+						QFMCAISEhAdOU0FycmF5AJSZDJKE
+						hIQJTlNUZXh0VGFiAJSEAkNmAByG
+						koSlpAA4hpKEpaQAVIaShKWkAHCG
+						koSlpACBjACGkoSlpACBqACGkoSl
+						pACBxACGkoSlpACB4ACGkoSlpACB
+						/ACGkoSlpACBGAGGkoSlpACBNAGG
+						koSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Yes}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{245.015, 481.45}, {30.8841, 24}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>Vertical</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>271</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>258</integer>
+						<key>Position</key>
+						<real>0.2065550833940506</real>
+						<key>RotationType</key>
+						<integer>4</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwNZZXOGhAJpSQED
+						koSEhAxOU0RpY3Rpb25hcnkAlIQB
+						aQOShJaWB05TQ29sb3KGkoSEhAdO
+						U0NvbG9yAJSEAWMDhAJmZgCDZmYm
+						P4aShJaWBk5TRm9udIaShISEBk5T
+						Rm9udB6UmRyEBVsyOGNdBgAAABQA
+						AAD//kgAZQBsAHYAZQB0AGkAYwBh
+						AIQBZgybAJsBmwCbAIaShJaWEE5T
+						UGFyYWdyYXBoU3R5bGWGkoSEhBBO
+						U1BhcmFncmFwaFN0eWxlAJSEBEND
+						QFMCAISEhAdOU0FycmF5AJSZDJKE
+						hIQJTlNUZXh0VGFiAJSEAkNmAByG
+						koSlpAA4hpKEpaQAVIaShKWkAHCG
+						koSlpACBjACGkoSlpACBqACGkoSl
+						pACBxACGkoSlpACB4ACGkoSlpACB
+						/ACGkoSlpACBGAGGkoSlpACBNAGG
+						koSlpACBUAGGhgCGhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Yes}</string>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{371.094, 416.886}, {26, 24}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>270</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>255</integer>
+						<key>Position</key>
+						<real>0.10439391434192657</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKwJOb4aEAmlJAQKS
+						hISEDE5TRGljdGlvbmFyeQCUhAFp
+						A5KElpYHTlNDb2xvcoaShISEB05T
+						Q29sb3IAlIQBYwOEAmZmAINmZiY/
+						hpKElpYGTlNGb250hpKEhIQGTlNG
+						b250HpSZHIQFWzI4Y10GAAAAFAAA
+						AP/+SABlAGwAdgBlAHQAaQBjAGEA
+						hAFmDJsAmwGbAJsAhpKElpYQTlNQ
+						YXJhZ3JhcGhTdHlsZYaShISEEE5T
+						UGFyYWdyYXBoU3R5bGUAlIQEQ0NA
+						UwIAhISEB05TQXJyYXkAlJkMkoSE
+						hAlOU1RleHRUYWIAlIQCQ2YAHIaS
+						hKWkADiGkoSlpABUhpKEpaQAcIaS
+						hKWkAIGMAIaShKWkAIGoAIaShKWk
+						AIHEAIaShKWkAIHgAIaShKWkAIH8
+						AIaShKWkAIEYAYaShKWkAIE0AYaS
+						hKWkAIFQAYaGAIaGhg==
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 No}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{454.447, 166.593}, {81, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>268</integer>
+						<key>Position</key>
+						<real>0.20122452080249786</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKxxBIGNsaWVudCBj
+						YWxscwpiaW5kU2VydmljZSgphoQC
+						aUkBHJKEhIQMTlNEaWN0aW9uYXJ5
+						AJSEAWkDkoSWlgdOU0NvbG9yhpKE
+						hIQHTlNDb2xvcgCUhAFjA4QCZmYA
+						g2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+						hAZOU0ZvbnQelJkchAVbMjhjXQYA
+						AAAUAAAA//5IAGUAbAB2AGUAdABp
+						AGMAYQCEAWYMmwCbAZsAmwCGkoSW
+						lhBOU1BhcmFncmFwaFN0eWxlhpKE
+						hIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+						hARDQ0BTAgCEhIQHTlNBcnJheQCU
+						mQyShISECU5TVGV4dFRhYgCUhAJD
+						ZgAchpKEpaQAOIaShKWkAFSGkoSl
+						pABwhpKEpaQAgYwAhpKEpaQAgagA
+						hpKEpaQAgcQAhpKEpaQAgeAAhpKE
+						paQAgfwAhpKEpaQAgRgBhpKEpaQA
+						gTQBhpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 A client calls\
+bindService()}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>261</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>268</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<true/>
+					<key>OrthogonalBarPosition</key>
+					<real>-1</real>
+					<key>Points</key>
+					<array>
+						<string>{494.947, 230.326}</string>
+						<string>{424.249, 77.6724}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>250</integer>
+						<key>Info</key>
+						<integer>6</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>266</integer>
+						<key>Position</key>
+						<real>0.79816216230392456</real>
+					</dict>
+					<key>ID</key>
+					<integer>267</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{230.708, 199.334}</string>
+						<string>{231.109, 255.41}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>253</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>254</integer>
+						<key>Info</key>
+						<integer>7</integer>
+					</dict>
+					<key>ID</key>
+					<integer>266</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{365.249, 199.334}</string>
+						<string>{183.272, 255.41}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>252</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>253</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>264</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<true/>
+					<key>OrthogonalBarPosition</key>
+					<real>-1</real>
+					<key>Points</key>
+					<array>
+						<string>{305.749, 77.6724}</string>
+						<string>{230.708, 168.762}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>261</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>252</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>262</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<true/>
+					<key>OrthogonalBarPosition</key>
+					<real>-1</real>
+					<key>Points</key>
+					<array>
+						<string>{365.249, 119.403}</string>
+						<string>{365.249, 168.762}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>261</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{306.249, 35.9417}, {118, 83.4614}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>ID</key>
+					<integer>261</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Diamond</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKxlvblVuYmluZCgp
+						IHJldHVybmVkIHRydWU/hoQCaUkB
+						GZKEhIQMTlNEaWN0aW9uYXJ5AJSE
+						AWkDkoSWlgdOU0NvbG9yhpKEhIQH
+						TlNDb2xvcgCUhAFjA4QCZmYAg2Zm
+						Jj+GkoSWlgZOU0ZvbnSGkoSEhAZO
+						U0ZvbnQelJkchAVbMjhjXQYAAAAU
+						AAAA//5IAGUAbAB2AGUAdABpAGMA
+						YQCEAWYMmwCbAZsAmwCGkoSWlhBO
+						U1BhcmFncmFwaFN0eWxlhpKEhIQQ
+						TlNQYXJhZ3JhcGhTdHlsZQCUhARD
+						Q0BTAgCEhIQHTlNBcnJheQCUmQyS
+						hISECU5TVGV4dFRhYgCUhAJDZgAc
+						hpKEpaQAOIaShKWkAFSGkoSlpABw
+						hpKEpaQAgYwAhpKEpaQAgagAhpKE
+						paQAgcQAhpKEpaQAgeAAhpKEpaQA
+						gfwAhpKEpaQAgRgBhpKEpaQAgTQB
+						hpKEpaQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 onUnbind() returned true?}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>251</integer>
+					</dict>
+					<key>ID</key>
+					<integer>196</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{119.458, 376.642}</string>
+						<string>{119.458, 478.277}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>257</integer>
+						<key>Info</key>
+						<integer>2</integer>
+					</dict>
+					<key>ID</key>
+					<integer>260</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<true/>
+					<key>OrthogonalBarPosition</key>
+					<real>-1</real>
+					<key>Points</key>
+					<array>
+						<string>{177.942, 361.356}</string>
+						<string>{263.403, 383.86}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>251</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+					<key>ID</key>
+					<integer>258</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<true/>
+					<key>OrthogonalBarPosition</key>
+					<real>-1</real>
+					<key>Points</key>
+					<array>
+						<string>{263.403, 473.912}</string>
+						<string>{177.942, 493.563}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>257</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{172.807, 383.86}, {181.191, 90.0511}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>ID</key>
+					<integer>257</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Diamond</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKzhJcyBzZXJ2aWNl
+						IGFsc28Kc3RvcHBlZCB2aWEgc3Rv
+						cFNlbGYoKSBvciBzdG9wU2Vydmlj
+						ZSgpP4aEAmlJATiShISEDE5TRGlj
+						dGlvbmFyeQCUhAFpBJKElpYQTlNQ
+						YXJhZ3JhcGhTdHlsZYaShISEEE5T
+						UGFyYWdyYXBoU3R5bGUAlIQEQ0NA
+						UwIAhISEB05TQXJyYXkAlJkMkoSE
+						hAlOU1RleHRUYWIAlIQCQ2YAHIaS
+						hJ+eADiGkoSfngBUhpKEn54AcIaS
+						hJ+eAIGMAIaShJ+eAIGoAIaShJ+e
+						AIHEAIaShJ+eAIHgAIaShJ+eAIH8
+						AIaShJ+eAIEYAYaShJ+eAIE0AYaS
+						hJ+eAIFQAYaGAIaShJaWDk5TT3Jp
+						Z2luYWxGb250hpKEhIQGTlNGb250
+						HpSZHIQFWzI4Y10GAAAAFAAAAP/+
+						SABlAGwAdgBlAHQAaQBjAGEAhAFm
+						DIQBYwCiAaIAogCGkoSWlgZOU0Zv
+						bnSGkqyShJaWB05TQ29sb3KGkoSE
+						hAdOU0NvbG9yAJSiA4QCZmYAg2Zm
+						Jj+GhoY=
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Is service also\
+stopped via stopSelf() or stopService()?}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>250</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+					<key>ID</key>
+					<integer>255</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<true/>
+					<key>OrthogonalBarPosition</key>
+					<real>-1</real>
+					<key>Points</key>
+					<array>
+						<string>{353.998, 428.886}</string>
+						<string>{494.947, 280.495}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>257</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{55.6441, 230.326}, {127.628, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>254</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service running and clients are bound}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{172.224, 168.762}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>253</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onBind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{306.765, 168.762}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>252</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onRebind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{60.9742, 478.277}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>251</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{60.9742, 346.07}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>230</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onUnbind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{435.947, 230.326}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>250</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service running}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>Canvas 3</string>
+			<key>UniqueID</key>
+			<integer>3</integer>
+			<key>VPages</key>
+			<integer>1</integer>
+		</dict>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {576, 733}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>fill</key>
+					<dict>
+						<key>GradientColor</key>
+						<dict>
+							<key>w</key>
+							<string>0.666667</string>
+						</dict>
+					</dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Bounds</key>
+					<string>{{301.31, 333.832}, {138, 52}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>262</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>260</integer>
+						<key>Position</key>
+						<real>0.43316367268562317</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBK0BvblVuYmluZCgp
+						IHJldHVybnMgdHJ1ZSwKdGhlbiBh
+						IGNsaWVudCBhZ2FpbiBjYWxscwpi
+						aW5kU2VydmljZSgphoQCaUkBQJKE
+						hIQMTlNEaWN0aW9uYXJ5AJSEAWkD
+						koSWlgdOU0NvbG9yhpKEhIQHTlND
+						b2xvcgCUhAFjA4QCZmYAg2ZmJj+G
+						koSWlgZOU0ZvbnSGkoSEhAZOU0Zv
+						bnQelJkchAVbMjhjXQYAAAAUAAAA
+						//5IAGUAbAB2AGUAdABpAGMAYQCE
+						AWYMmwCbAZsAmwCGkoSWlhBOU1Bh
+						cmFncmFwaFN0eWxlhpKEhIQQTlNQ
+						YXJhZ3JhcGhTdHlsZQCUhARDQ0BT
+						AgCEhIQHTlNBcnJheQCUmQyShISE
+						CU5TVGV4dFRhYgCUhAJDZgAchpKE
+						paQAOIaShKWkAFSGkoSlpABwhpKE
+						paQAgYwAhpKEpaQAgagAhpKEpaQA
+						gcQAhpKEpaQAgeAAhpKEpaQAgfwA
+						hpKEpaQAgRgBhpKEpaQAgTQBhpKE
+						paQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 onUnbind() returns true,\
+then a client again calls\
+bindService()}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>231</integer>
+					</dict>
+					<key>ID</key>
+					<integer>261</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{312.71, 196.578}</string>
+						<string>{257.716, 196.578}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>259</integer>
+						<key>Info</key>
+						<integer>4</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>259</integer>
+					</dict>
+					<key>ID</key>
+					<integer>260</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{257.716, 361.323}</string>
+						<string>{371.194, 211.864}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>251</integer>
+						<key>Info</key>
+						<integer>3</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{312.71, 181.292}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>259</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onRebind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{144.732, 385.043}, {109, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>258</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>256</integer>
+						<key>Position</key>
+						<real>0.41964080929756165</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKyhTZXJ2aWNlIGlz
+						IHN0b3BwZWQKYnkgaXRzZWxmIG9y
+						IGEgY2xpZW50hoQCaUkBKJKEhIQM
+						TlNEaWN0aW9uYXJ5AJSEAWkDkoSW
+						lgdOU0NvbG9yhpKEhIQHTlNDb2xv
+						cgCUhAFjA4QCZmYAg2ZmJj+GkoSW
+						lgZOU0ZvbnSGkoSEhAZOU0ZvbnQe
+						lJkchAVbMjhjXQYAAAAUAAAA//5I
+						AGUAbAB2AGUAdABpAGMAYQCEAWYM
+						mwCbAZsAmwCGkoSWlhBOU1BhcmFn
+						cmFwaFN0eWxlhpKEhIQQTlNQYXJh
+						Z3JhcGhTdHlsZQCUhARDQ0BTAgCE
+						hIQHTlNBcnJheQCUmQyShISECU5T
+						VGV4dFRhYgCUhAJDZgAchpKEpaQA
+						OIaShKWkAFSGkoSlpABwhpKEpaQA
+						gYwAhpKEpaQAgagAhpKEpaQAgcQA
+						hpKEpaQAgeAAhpKEpaQAgfwAhpKE
+						paQAgRgBhpKEpaQAgTQBhpKEpaQA
+						gVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Service is stopped\
+by itself or a client}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{125.232, 290.499}, {148, 38}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>a</key>
+							<string>0.65</string>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>Line</key>
+					<dict>
+						<key>ID</key>
+						<integer>255</integer>
+						<key>Position</key>
+						<real>0.42571654915809631</real>
+						<key>RotationType</key>
+						<integer>0</integer>
+					</dict>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>RTFD</key>
+						<data>
+						BAtzdHJlYW10eXBlZIHoA4QBQISE
+						hBJOU0F0dHJpYnV0ZWRTdHJpbmcA
+						hIQITlNPYmplY3QAhZKEhIQITlNT
+						dHJpbmcBlIQBKytBIGNsaWVudCB1
+						bmJpbmRzIGJ5IGNhbGxpbmcKdW5i
+						aW5kU2VydmljZSgphoQCaUkBK5KE
+						hIQMTlNEaWN0aW9uYXJ5AJSEAWkD
+						koSWlgdOU0NvbG9yhpKEhIQHTlND
+						b2xvcgCUhAFjA4QCZmYAg2ZmJj+G
+						koSWlgZOU0ZvbnSGkoSEhAZOU0Zv
+						bnQelJkchAVbMjhjXQYAAAAUAAAA
+						//5IAGUAbAB2AGUAdABpAGMAYQCE
+						AWYMmwCbAZsAmwCGkoSWlhBOU1Bh
+						cmFncmFwaFN0eWxlhpKEhIQQTlNQ
+						YXJhZ3JhcGhTdHlsZQCUhARDQ0BT
+						AgCEhIQHTlNBcnJheQCUmQyShISE
+						CU5TVGV4dFRhYgCUhAJDZgAchpKE
+						paQAOIaShKWkAFSGkoSlpABwhpKE
+						paQAgYwAhpKEpaQAgagAhpKEpaQA
+						gcQAhpKEpaQAgeAAhpKEpaQAgfwA
+						hpKEpaQAgRgBhpKEpaQAgTQBhpKE
+						paQAgVABhoYAhoaG
+						</data>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 A client unbinds by calling\
+unbindService()}</string>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>222</integer>
+						<key>Info</key>
+						<integer>6</integer>
+					</dict>
+					<key>ID</key>
+					<integer>257</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{199.232, 471.865}</string>
+						<string>{199.232, 495.193}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>252</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{139.194, 495.193}, {120.076, 51.0524}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>222</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.628571</string>
+								<key>g</key>
+								<string>0.768599</string>
+								<key>r</key>
+								<string>1</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.236788</string>
+								<key>g</key>
+								<string>0.532236</string>
+								<key>r</key>
+								<string>0.990271</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.131021</string>
+								<key>g</key>
+								<string>0.363196</string>
+								<key>r</key>
+								<string>0.725948</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Service\
+shut down}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>252</integer>
+					</dict>
+					<key>ID</key>
+					<integer>256</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{199.232, 377.109}</string>
+						<string>{199.232, 441.293}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>251</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>251</integer>
+					</dict>
+					<key>ID</key>
+					<integer>255</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{199.232, 282.414}</string>
+						<string>{199.232, 346.037}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>250</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+					</dict>
+					<key>ID</key>
+					<integer>254</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{199.232, 107.307}</string>
+						<string>{199.232, 129.214}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>158</integer>
+						<key>Info</key>
+						<integer>5</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>231</integer>
+					</dict>
+					<key>ID</key>
+					<integer>253</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{199.232, 159.786}</string>
+						<string>{199.232, 181.292}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>230</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>DroidSans</string>
+						<key>Size</key>
+						<real>11</real>
+					</dict>
+					<key>Head</key>
+					<dict>
+						<key>ID</key>
+						<integer>250</integer>
+					</dict>
+					<key>ID</key>
+					<integer>196</integer>
+					<key>OrthogonalBarAutomatic</key>
+					<false/>
+					<key>OrthogonalBarPosition</key>
+					<real>4.1290435791015625</real>
+					<key>Points</key>
+					<array>
+						<string>{199.232, 211.864}</string>
+						<string>{199.232, 231.744}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.7</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>4</real>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>LineType</key>
+							<integer>2</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+						</dict>
+					</dict>
+					<key>Tail</key>
+					<dict>
+						<key>ID</key>
+						<integer>231</integer>
+						<key>Info</key>
+						<integer>1</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{140.748, 441.293}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>252</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onDestroy()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{140.748, 346.037}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>251</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onUnbind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{140.232, 231.744}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>250</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.274119</string>
+								<key>g</key>
+								<string>0.950739</string>
+								<key>r</key>
+								<string>0.787494</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.223529</string>
+								<key>g</key>
+								<string>0.776471</string>
+								<key>r</key>
+								<string>0.643137</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.165602</string>
+								<key>g</key>
+								<string>0.586124</string>
+								<key>r</key>
+								<string>0.428309</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Client(s) bound to service}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{140.748, 181.292}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>231</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onBind()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{140.748, 129.214}, {116.968, 30.572}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>w</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSansMono</string>
+						<key>NSKern</key>
+						<real>0.0</real>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>230</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+					</array>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.938075</string>
+								<key>g</key>
+								<string>0.938269</string>
+								<key>r</key>
+								<string>0.938154</string>
+							</dict>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>0.727869</string>
+								<key>g</key>
+								<string>0.728019</string>
+								<key>r</key>
+								<string>0.72793</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.45</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Draws</key>
+							<string>NO</string>
+							<key>Fuzziness</key>
+							<real>0.0</real>
+							<key>ShadowVector</key>
+							<string>{0.5, 2}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.700224</string>
+								<key>g</key>
+								<string>0.700574</string>
+								<key>r</key>
+								<string>0.700377</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+onCreate()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{140.232, 57.1374}, {118, 50.1697}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>0</string>
+						</dict>
+						<key>Font</key>
+						<string>DroidSans-Bold</string>
+						<key>Size</key>
+						<real>10</real>
+					</dict>
+					<key>ID</key>
+					<integer>158</integer>
+					<key>Magnets</key>
+					<array>
+						<string>{1, 1}</string>
+						<string>{1, -1}</string>
+						<string>{-1, -1}</string>
+						<string>{-1, 1}</string>
+						<string>{0, 1}</string>
+						<string>{0, -1}</string>
+						<string>{1, 0}</string>
+						<string>{-1, 0}</string>
+						<string>{-0.5, -0.233518}</string>
+						<string>{-0.491442, 0.260063}</string>
+						<string>{0.507118, -0.224086}</string>
+						<string>{0.507118, 0.267179}</string>
+						<string>{-0.27431, -0.474028}</string>
+						<string>{0.27978, -0.478478}</string>
+						<string>{0.293938, 0.543044}</string>
+						<string>{-0.286232, 0.553804}</string>
+					</array>
+					<key>Shape</key>
+					<string>RoundRect</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.874135</string>
+								<key>r</key>
+								<string>0.71718</string>
+							</dict>
+							<key>FillType</key>
+							<integer>2</integer>
+							<key>GradientAngle</key>
+							<real>90</real>
+							<key>GradientColor</key>
+							<dict>
+								<key>b</key>
+								<string>1</string>
+								<key>g</key>
+								<string>0.662438</string>
+								<key>r</key>
+								<string>0.464468</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>a</key>
+								<string>0.35</string>
+								<key>b</key>
+								<string>0</string>
+								<key>g</key>
+								<string>0</string>
+								<key>r</key>
+								<string>0</string>
+							</dict>
+							<key>Fuzziness</key>
+							<real>2.3972222805023193</real>
+							<key>ShadowVector</key>
+							<string>{0, 1}</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.93512</string>
+								<key>g</key>
+								<string>0.472602</string>
+								<key>r</key>
+								<string>0.333854</string>
+							</dict>
+							<key>CornerRadius</key>
+							<real>3</real>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Call to\
+bindService()}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>Canvas 2</string>
+			<key>UniqueID</key>
+			<integer>2</integer>
+			<key>VPages</key>
+			<integer>1</integer>
+		</dict>
+	</array>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>YES</string>
+	<key>UseEntirePage</key>
+	<false/>
+	<key>WindowInfo</key>
+	<dict>
+		<key>CurrentSheet</key>
+		<integer>1</integer>
+		<key>ExpandedCanvases</key>
+		<array>
+			<dict>
+				<key>name</key>
+				<string>Canvas 1</string>
+			</dict>
+		</array>
+		<key>Frame</key>
+		<string>{{221, 40}, {1085, 835}}</string>
+		<key>ListView</key>
+		<true/>
+		<key>OutlineWidth</key>
+		<integer>142</integer>
+		<key>RightSidebar</key>
+		<false/>
+		<key>ShowRuler</key>
+		<true/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>120</integer>
+		<key>VisibleRegion</key>
+		<string>{{-234, -7}, {1043.96, 748.352}}</string>
+		<key>Zoom</key>
+		<real>0.9100000262260437</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>1.0800000429153442</real>
+				<real>1.0499999523162842</real>
+			</array>
+			<array>
+				<string>Canvas 2</string>
+				<real>1.0399999618530273</real>
+				<real>1</real>
+			</array>
+			<array>
+				<string>Canvas 3</string>
+				<real>0.9100000262260437</real>
+				<real>0.93000000715255737</real>
+			</array>
+		</array>
+	</dict>
+	<key>saveQuickLookFiles</key>
+	<string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/home/android-design.png b/docs/html/images/home/android-design.png
new file mode 100644
index 0000000..e021401
--- /dev/null
+++ b/docs/html/images/home/android-design.png
Binary files differ
diff --git a/docs/html/images/resources/res-selection-flowchart.graffle b/docs/html/images/resources/res-selection-flowchart.graffle
new file mode 100644
index 0000000..2d64735
--- /dev/null
+++ b/docs/html/images/resources/res-selection-flowchart.graffle
@@ -0,0 +1,2629 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActiveLayerIndex</key>
+	<integer>0</integer>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGrafflePro</string>
+		<string>138.9.0.117994</string>
+	</array>
+	<key>AutoAdjust</key>
+	<true/>
+	<key>BackgroundGraphic</key>
+	<dict>
+		<key>Bounds</key>
+		<string>{{0, 0}, {576, 733}}</string>
+		<key>Class</key>
+		<string>SolidGraphic</string>
+		<key>ID</key>
+		<integer>2</integer>
+		<key>Style</key>
+		<dict>
+			<key>shadow</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+			<key>stroke</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+		</dict>
+	</dict>
+	<key>CanvasOrigin</key>
+	<string>{0, 0}</string>
+	<key>ColumnAlign</key>
+	<integer>1</integer>
+	<key>ColumnSpacing</key>
+	<real>36</real>
+	<key>CreationDate</key>
+	<string>2012-01-03 18:30:01 -0800</string>
+	<key>Creator</key>
+	<string>Scott Main</string>
+	<key>DisplayScale</key>
+	<string>1 0/72 in = 1 0/72 in</string>
+	<key>GraphDocumentVersion</key>
+	<integer>6</integer>
+	<key>GraphicsList</key>
+	<array>
+		<dict>
+			<key>Bounds</key>
+			<string>{{177.408, 457.685}, {248, 36}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>ID</key>
+			<integer>207</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBK2EqIElmIHRoZSBxdWFsaWZpZXIgaXMgc2Ny
+				ZWVuIGRlbnNpdHksIHRoZSBzeXN0ZW0Kc2VsZWN0cyB0
+				aGUgImJlc3QgbWF0Y2giIGFuZCB0aGUgcHJvY2VzcyBp
+				cyBkb25lhoQCaUkBYZKEhIQMTlNEaWN0aW9uYXJ5AJSE
+				AWkDkoSWlgdOU0NvbG9yhpKEhIQHTlNDb2xvcgCUhAFj
+				A4QCZmYAg2ZmJj+GkoSWlgZOU0ZvbnSGkoSEhAZOU0Zv
+				bnQelJkchAVbMjhjXQYAAAAUAAAA//5IAGUAbAB2AGUA
+				dABpAGMAYQCEAWYLmwCbAZsAmwCGkoSWlhBOU1BhcmFn
+				cmFwaFN0eWxlhpKEhIQQTlNQYXJhZ3JhcGhTdHlsZQCU
+				hARDQ0BTAgCEhIQHTlNBcnJheQCUmQyShISECU5TVGV4
+				dFRhYgCUhAJDZgAchpKEpaQAOIaShKWkAFSGkoSlpABw
+				hpKEpaQAgYwAhpKEpaQAgagAhpKEpaQAgcQAhpKEpaQA
+				geAAhpKEpaQAgfwAhpKEpaQAgRgBhpKEpaQAgTQBhpKE
+				paQAgVABhoYAhoaG
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs22 \cf2 * If the qualifier is screen density, the system\
+selects the "best match" and the process is done}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>158</integer>
+			</dict>
+			<key>ID</key>
+			<integer>206</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{301.407, 111}</string>
+				<string>{301.407, 138}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>157</integer>
+				<key>Info</key>
+				<integer>5</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>160</integer>
+			</dict>
+			<key>ID</key>
+			<integer>204</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{301.407, 203}</string>
+				<string>{301.408, 230.336}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>158</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{375.5, 303.315}, {131, 52}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>203</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>202</integer>
+				<key>Position</key>
+				<real>0.37667733430862427</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBK0Y1LiBDb250aW51ZSB1bnRpbCBvbmx5Cm9u
+				ZSBkaXJlY3RvcnkgZm9yIHRoZSAKZGVzaXJlZCByZXNv
+				dXJjZSBpcyBsZWZ0hoQCaUkBRpKEhIQMTlNEaWN0aW9u
+				YXJ5AJSEAWkDkoSWlgdOU0NvbG9yhpKEhIQHTlNDb2xv
+				cgCUhAFjA4QCZmYAg2ZmJj+GkoSWlgZOU0ZvbnSGkoSE
+				hAZOU0ZvbnQelJkchAVbMjhjXQYAAAAUAAAA//5IAGUA
+				bAB2AGUAdABpAGMAYQCEAWYMmwCbAZsAmwCGkoSWlhBO
+				U1BhcmFncmFwaFN0eWxlhpKEhIQQTlNQYXJhZ3JhcGhT
+				dHlsZQCUhARDQ0BTAgCEhIQHTlNBcnJheQCUmQyShISE
+				CU5TVGV4dFRhYgCUhAJDZgAchpKEpaQAOIaShKWkAFSG
+				koSlpABwhpKEpaQAgYwAhpKEpaQAgagAhpKEpaQAgcQA
+				hpKEpaQAgeAAhpKEpaQAgfwAhpKEpaQAgRgBhpKEpaQA
+				gTQBhpKEpaQAgVABhoYAhoaG
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 5. Continue until only\
+one directory for the \
+desired resource is left}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>158</integer>
+				<key>Info</key>
+				<integer>7</integer>
+			</dict>
+			<key>ID</key>
+			<integer>202</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{395, 407.5}</string>
+				<string>{441, 321}</string>
+				<string>{395, 170.5}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>159</integer>
+				<key>Info</key>
+				<integer>7</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{286.407, 331.842}, {30, 24}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>201</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>200</integer>
+				<key>Position</key>
+				<real>0.42656871676445007</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKwNZZXOGhAJpSQEDkoSEhAxOU0RpY3Rpb25h
+				cnkAlIQBaQOShJaWB05TQ29sb3KGkoSEhAdOU0NvbG9y
+				AJSEAWMDhAJmZgCDZmYmP4aShJaWBk5TRm9udIaShISE
+				Bk5TRm9udB6UmRyEBVsyOGNdBgAAABQAAAD//kgAZQBs
+				AHYAZQB0AGkAYwBhAIQBZgybAJsBmwCbAIaShJaWEE5T
+				UGFyYWdyYXBoU3R5bGWGkoSEhBBOU1BhcmFncmFwaFN0
+				eWxlAJSEBENDQFMCAISEhAdOU0FycmF5AJSZDJKEhIQJ
+				TlNUZXh0VGFiAJSEAkNmAByGkoSlpAA4hpKEpaQAVIaS
+				hKWkAHCGkoSlpACBjACGkoSlpACBqACGkoSlpACBxACG
+				koSlpACB4ACGkoSlpACB/ACGkoSlpACBGAGGkoSlpACB
+				NAGGkoSlpACBUAGGhgCGhoY=
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Yes}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>159</integer>
+				<key>Info</key>
+				<integer>6</integer>
+			</dict>
+			<key>ID</key>
+			<integer>200</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{301.408, 320.664}</string>
+				<string>{301.407, 375}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>160</integer>
+				<key>Info</key>
+				<integer>5</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{168.719, 263.5}, {26, 24}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>a</key>
+					<string>0.65</string>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>199</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>196</integer>
+				<key>Position</key>
+				<real>0.14238780736923218</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>RTFD</key>
+				<data>
+				BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+				ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+				bmcBlIQBKwJOb4aEAmlJAQKShISEDE5TRGljdGlvbmFy
+				eQCUhAFpA5KElpYHTlNDb2xvcoaShISEB05TQ29sb3IA
+				lIQBYwOEAmZmAINmZiY/hpKElpYGTlNGb250hpKEhIQG
+				TlNGb250HpSZHIQFWzI4Y10GAAAAFAAAAP/+SABlAGwA
+				dgBlAHQAaQBjAGEAhAFmDJsAmwGbAJsAhpKElpYQTlNQ
+				YXJhZ3JhcGhTdHlsZYaShISEEE5TUGFyYWdyYXBoU3R5
+				bGUAlIQEQ0NAUwIAhISEB05TQXJyYXkAlJkMkoSEhAlO
+				U1RleHRUYWIAlIQCQ2YAHIaShKWkADiGkoSlpABUhpKE
+				paQAcIaShKWkAIGMAIaShKWkAIGoAIaShKWkAIHEAIaS
+				hKWkAIHgAIaShKWkAIH8AIaShKWkAIEYAYaShKWkAIE0
+				AYaShKWkAIFQAYaGAIaGhg==
+				</data>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 No}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>11</real>
+			</dict>
+			<key>Head</key>
+			<dict>
+				<key>ID</key>
+				<integer>158</integer>
+				<key>Info</key>
+				<integer>8</integer>
+			</dict>
+			<key>ID</key>
+			<integer>196</integer>
+			<key>OrthogonalBarAutomatic</key>
+			<false/>
+			<key>OrthogonalBarPosition</key>
+			<real>4.1290435791015625</real>
+			<key>Points</key>
+			<array>
+				<string>{211.676, 275.5}</string>
+				<string>{156, 230}</string>
+				<string>{207.815, 170.5}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.7</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>4</real>
+					<key>HeadArrow</key>
+					<string>FilledArrow</string>
+					<key>LineType</key>
+					<integer>2</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+			<key>Tail</key>
+			<dict>
+				<key>ID</key>
+				<integer>160</integer>
+				<key>Info</key>
+				<integer>8</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{207.815, 230}, {187.185, 91}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>160</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>Diamond</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.874135</string>
+						<key>r</key>
+						<string>0.71718</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.662438</string>
+						<key>r</key>
+						<string>0.464468</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.93512</string>
+						<key>g</key>
+						<string>0.472602</string>
+						<key>r</key>
+						<string>0.333854</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 3. Do any resource directories use this qualifer?}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>TextRelativeArea</key>
+			<string>{{0.135, 0.165}, {0.75, 0.75}}</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{207.815, 375}, {187.185, 65}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>159</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.874135</string>
+						<key>r</key>
+						<string>0.71718</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.662438</string>
+						<key>r</key>
+						<string>0.464468</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.93512</string>
+						<key>g</key>
+						<string>0.472602</string>
+						<key>r</key>
+						<string>0.333854</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 4. Eliminate directories that do not include this qualifier *}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{207.815, 138}, {187.185, 65}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>158</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.874135</string>
+						<key>r</key>
+						<string>0.71718</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.662438</string>
+						<key>r</key>
+						<string>0.464468</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.93512</string>
+						<key>g</key>
+						<string>0.472602</string>
+						<key>r</key>
+						<string>0.333854</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 2. Identify the next qualifier in the table (MCC first, then MNC, then language, and so on)}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{207.815, 46}, {187.185, 65}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>b</key>
+					<string>0</string>
+					<key>g</key>
+					<string>0</string>
+					<key>r</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>157</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+				<string>{-0.5, -0.233518}</string>
+				<string>{-0.491442, 0.260063}</string>
+				<string>{0.507118, -0.224086}</string>
+				<string>{0.507118, 0.267179}</string>
+				<string>{-0.27431, -0.474028}</string>
+				<string>{0.27978, -0.478478}</string>
+				<string>{0.293938, 0.543044}</string>
+				<string>{-0.286232, 0.553804}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.874135</string>
+						<key>r</key>
+						<string>0.71718</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.662438</string>
+						<key>r</key>
+						<string>0.464468</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>a</key>
+						<string>0.35</string>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+					<key>Fuzziness</key>
+					<real>2.3972222805023193</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.93512</string>
+						<key>g</key>
+						<string>0.472602</string>
+						<key>r</key>
+						<string>0.333854</string>
+					</dict>
+					<key>CornerRadius</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 1. Eliminate qualifiers that contradict the device configuration}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+	</array>
+	<key>GridInfo</key>
+	<dict/>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>HPages</key>
+	<integer>1</integer>
+	<key>ImageCounter</key>
+	<integer>1</integer>
+	<key>KeepToScale</key>
+	<false/>
+	<key>Layers</key>
+	<array>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>Layer 1</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+	</array>
+	<key>LayoutInfo</key>
+	<dict>
+		<key>Animate</key>
+		<string>NO</string>
+		<key>circoMinDist</key>
+		<real>18</real>
+		<key>circoSeparation</key>
+		<real>0.0</real>
+		<key>layoutEngine</key>
+		<string>dot</string>
+		<key>neatoSeparation</key>
+		<real>0.0</real>
+		<key>twopiSeparation</key>
+		<real>0.0</real>
+	</dict>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2012-01-03 18:46:11 -0800</string>
+	<key>Modifier</key>
+	<string>Scott Main</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>Orientation</key>
+	<integer>2</integer>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>41</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+	</dict>
+	<key>PrintOnePage</key>
+	<false/>
+	<key>QuickLookPreview</key>
+	<data>
+	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
+	ywZIOs1zGROYoAwapVcwhffluUQuoQfhhwIkJPygOgOyb3pmBuziPR2vzWcBCIsYL/Xp
+	sflF+EBW0rvBuFqMrgASOv326fFw9/j5Wn/G771+erz/cqHYWj6B2Pw0Kiql80pUs4gw
+	6BDkCNnH8hlUEwRK5dc8ZJq5Ib6UnT+ij/wF7jY3nmXO7pDSflX3ef7C625KRUCOeOYv
+	eZHe4MVydaY6Gk60Ej3CIRIbN/SOcoyGRZUfhoV+oXp/hBOZxURWJvdPHGYhUioS2Mlm
+	PF/23PMIwpQFe1kkePVsoxMujDUKXXoHhNfIcwm0y98xWEOX7V4tBk53KfwujgVusfMu
+	cBILmKAiUhlbz1qOpBKa7AXHVfbiW6/S8z5ZZxNNyCYBSJG8mnghvEsifSierjiJOgZn
+	J34Co3X1y2hANiLnWVsYQ4k4ez28j1Wi5bxmrDmvrk4e9gxf7tOfZggB6FpL2mKKaADl
+	iGYACQFgpvjwQrfHWy3BpAgJf72SIBY5W3ajdUDI9XgxzYvOkg0ocURJcwZTwmcIafUM
+	WdSiJgWNOepCygtXDRHDc+AvmtBAAIpj8NreW3ohfT0Cq6pDBIY/jmFUa7wrg58h7IR+
+	4e5QoMxZGhJQgCNu/+Zb/e5GH26v9Sf8bdjdyed70Dk7DH9CU/AVR3jUgWxEbsY1UDkC
+	GCpQIAC3xALkVruKJzJfMJcRQ0BoPYUxK4FHelnBO+NRrHxJeA0/HnGQ9SinrSQGdpYv
+	OKfQumSDX/bsB4RwlHv/V+q2BkgUAsF5+TufVtp7OWKNr8Ud6Y1gcCW+/NWKrGaZf4Pn
+	xQVMF27qW+RDLRAXf7cT3/UNbyRzRK2iTp5SqZEjC1k843cm5lncZnU1e2FraWB68yv7
+	KFknZIDlqoof/wvJ11+UCmVuZHN0cmVhbQplbmRvYmoKNiAwIG9iagozMjAxCmVuZG9i
+	agozIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgNCAwIFIgL1Jlc291cmNlcyA3
+	IDAgUiAvQ29udGVudHMgNSAwIFIgL01lZGlhQm94IFswIDAgNTc2IDczM10KPj4KZW5k
+	b2JqCjcgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdl
+	QyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2UgPDwgL0NzMiAxNiAwIFIKL0NzMSA4IDAgUiA+
+	PiAvRXh0R1N0YXRlIDw8IC9HczQgMjMgMCBSIC9HczMgMjQgMCBSIC9HczIgMjUgMCBS
+	IC9HczEgMjYgMCBSCj4+IC9Gb250IDw8IC9GMS4wIDE3IDAgUiAvRjIuMCAyMSAwIFIg
+	L0YzLjAgMjIgMCBSID4+IC9YT2JqZWN0IDw8IC9JbTIgMTEgMCBSCi9JbTMgMTMgMCBS
+	IC9JbTEgOSAwIFIgPj4gL1NoYWRpbmcgPDwgL1NoMSAxNSAwIFIgL1NoMiAxOCAwIFIg
+	L1NoNCAyMCAwIFIKL1NoMyAxOSAwIFIgPj4gPj4KZW5kb2JqCjE1IDAgb2JqCjw8IC9D
+	b2xvclNwYWNlIDI3IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgOTQuMDkyNTkg
+	LTMzIDk0LjA5MjU4IDMzLjAwMDA0Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBm
+	YWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAyOCAwIFIgPj4KZW5kb2JqCjE4IDAgb2JqCjw8
+	IC9Db2xvclNwYWNlIDI3IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgOTQuMDky
+	NTkgLTMzIDk0LjA5MjU4IDMzLjAwMDA0Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQg
+	WyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAyOSAwIFIgPj4KZW5kb2JqCjIwIDAgb2Jq
+	Cjw8IC9Db2xvclNwYWNlIDI3IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgOTQu
+	MDkyNSAtNDYgOTQuMDkyNDggNDYuMDAwMDQKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVu
+	ZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDMwIDAgUiA+PgplbmRvYmoKMTkgMCBv
+	YmoKPDwgL0NvbG9yU3BhY2UgMjcgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5
+	NC4wOTI1IC0zMyA5NC4wOTI0OCAzMy4wMDAwNApdIC9Eb21haW4gWyAwIDEgXSAvRXh0
+	ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMzEgMCBSID4+CmVuZG9iagoxMSAw
+	IG9iago8PCAvTGVuZ3RoIDEyIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1h
+	Z2UgL1dpZHRoIDM5NiAvSGVpZ2h0IDE1MiAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JT
+	cGFjZSAzMiAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgMzMgMCBSIC9CaXRz
+	UGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dCB
+	AAAAAMOg+VMf5IVQYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMDAy8AAwX4AAQplbmRzdHJlYW0K
+	ZW5kb2JqCjEyIDAgb2JqCjgxMAplbmRvYmoKMTMgMCBvYmoKPDwgL0xlbmd0aCAxNCAw
+	IFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzOTYgL0hlaWdo
+	dCAyMDQgL0ludGVycG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgMzIgMCBSIC9JbnRlbnQg
+	L1BlcmNlcHR1YWwgL1NNYXNrIDM1IDAgUiAvQml0c1BlckNvbXBvbmVudAo4IC9GaWx0
+	ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVPbQo/iEBhwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMBrYLLdAAEKZW5kc3RyZWFtCmVuZG9i
+	agoxNCAwIG9iagoxMDgwCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9U
+	eXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMzk2IC9IZWlnaHQgMTUy
+	IC9JbnRlcnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDMyIDAgUiAvSW50ZW50IC9QZXJj
+	ZXB0dWFsIC9TTWFzayAzNyAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9G
+	bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwMDLwADBfgABCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKODEwCmVuZG9i
+	agozNyAwIG9iago8PCAvTGVuZ3RoIDM4IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlw
+	ZSAvSW1hZ2UgL1dpZHRoIDM5NiAvSGVpZ2h0IDE1MiAvQ29sb3JTcGFjZQovRGV2aWNl
+	R3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIg
+	L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae2WX1PaaBxGSUJCgGAMKVLQaLssSou+ztAq
+	iwItK8ifIoGaQPb7f5EF9qKA2puO7zw7fX4XXppnzuEQYjEeCZAACZAACZAACZDArxNQ
+	VFXjySKgqspLyhRV042EmeTJIWAmjLj2vA5F0810xnayPDkEHDuTNnXtmTZUzUjbbr54
+	5B3zZBDwjop5104bT2UoWsJyi+/KH8+FuOS9PgEhzj+UTwquldiVoWiG9cY7FVeNZqvN
+	k0Gg1Wx8FqfeG2u3DFVPu16ldtvp9QdDngwCg36vc1OreNmUrm79nNJMu3Baa/W+Tfzp
+	jCeDwNSfjLrN2mnBTmibLpR42n0nbnvjWRCGc54MAmEYzMbdG3HipuKbv6VUI5MvX3VG
+	s3CxiKLoH95rE1hSXizC2ajzuXyQMbZcJOzix0ZvEqxM0MVri1j//5WN4KHX+FC0E5sv
+	DM10js6bfT9kFVI8rB6ychH6/dvq4b655SLpeKI1mIaMQpqLlYxwOmhdeI65+fLWktlj
+	0R7Oli7kbeGTli6GbeFlk7suLulC9qfjpy7mstf85s+bz17ugi7kfjjWLo6f/46iC7qQ
+	SwDnaeyCLnAI4CxhF3SBQwBnCbugCxwCOEvYBV3gEMBZwi7oAocAzhJ2QRc4BHCWsAu6
+	wCGAs4Rd0AUOAZwl7IIucAjgLGEXdIFDAGcJu6ALHAI4S9gFXeAQwFnCLugChwDOEnZB
+	FzgEcJawC7rAIYCzhF3QBQ4BnCXsgi5wCOAsYRd0gUMAZwm7oAscAjhL2AVd4BDAWcIu
+	6AKHAM4SdkEXOARwlrALusAhgLOEXdAFDgGcJeyCLnAI4CxhF3SBQwBnCbugCxwCOEvY
+	BV3gEMBZwi7oAocAzhJ2QRc4BHCWsAu6wCGAs4Rd0AUOAZwl7IIucAjgLGEXdIFDAGcJ
+	u6ALHAI4S9gFXeAQwFnCLugChwDOEnZBFzgEcJawC7rAIYCzhF3QBQ4BnCXsgi5wCOAs
+	YRd0gUMAZwm7oAscAjhL2AVd4BDAWcIu6AKHAM4SdkEXOARwlrALusAhgLOEXdAFDgGc
+	JeyCLnAI4CxhF3SBQwBnCbugCxwCOEvYBV3gEMBZwi7oAocAzhJ2geMinA7bwssmtdiP
+	05LZ48v2cBZGODt/gyXRSy4EXcjWv3QxaAnP2enC8S5ag2kYMQx5QqIo9PvN8yPHVH98
+	RcVUc/+wenvvBwvKkOYiihbB5P6memgntlwk9gqVevfhcU4ZslwsVcwfx3f1s8KeselC
+	0a2DUu3L0A/mC54sAvPAH7RrpZylKxvfUUo8lfWq9b9H/vfHgCeHwOP3ybBTry5f3fFN
+	FzHVyORLotHpfxs/THgyCDyMR/edv8QfB5mtr6hYTIkn94t/Xlw3O3fdHk8Gge7d1+bV
+	Ramwv5NFLKbqKafwviI+XdcbPBkE6tefROV9wUnpm2/u1YtD0fSUnTs8KZXPKjwZBM7K
+	pZNizl6q2HpbrGWoumnZbi7/tsCTQeBtPufalvmMimUZatwwU1ZmjyeHQMZKmbr2tIr1
+	71tF1eK6wZNFQI+/ZOI/HYqiqDwZBJakn7wo1g74hwRIgARIgARI4H9C4F8GkUfiCmVu
+	ZHN0cmVhbQplbmRvYmoKMzggMCBvYmoKMTE5OAplbmRvYmoKMzMgMCBvYmoKPDwgL0xl
+	bmd0aCAzNCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAz
+	OTYgL0hlaWdodCAxNTIgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0ludGVycG9sYXRl
+	IHRydWUgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+	dHJlYW0KeAHtlltX2mgYRnMgIUAwBooIGm2HQWnRz7VolUGBGUaQQ5FDTSDz//9IA70o
+	oM7NLL/1zOrzXnhpnrU3m6AoPBIgARIgARIgARIggf9OQNU0nSeLgKaprylTNd0w41aC
+	J4eAFTdj+ss6VN2wUmnHzfDkEHCddMoy9Bfa0HQz5WTzxWPvhCeDgHdczGedlPlchqrH
+	7WzxffnThRBXvLcnIMTFx/JpIWvHd2Woumm/887EdaPZavNkEGg1G1/EmffO3i1DM1JZ
+	r1K76/T6gyFPBoFBv9e5rVW8TNLQtn5O6ZZTOKu1el8n09mcJ4PAbDoZdZu1s8JeXN90
+	ocZS2ffirjee+0Gw4MkgEAT+fNy9FafZZGzzt5RmpvPl685oHiyXYRj+w3trAhHl5TKY
+	jzpfygdpc8tF3Cl+avQm/soEXby1iPX/X9nwH3uNj0UnvvnC0C33+KLZnwasQoqH1UNW
+	LoJp/656tG9tuUi4nmgNZgGjkOZiJSOYDVqXnmttvrz1ROZEtIfzyIW8LXxS5GLYFl4m
+	seviii5kfzr+1cVC9ppf/HmL+etd0IXcD8faxcnL31F0QRdyCeA8jV3QBQ4BnCXsgi5w
+	COAsYRd0gUMAZwm7oAscAjhL2AVd4BDAWcIu6AKHAM4SdkEXOARwlrALusAhgLOEXdAF
+	DgGcJeyCLnAI4CxhF3SBQwBnCbugCxwCOEvYBV3gEMBZwi7oAocAzhJ2QRc4BHCWsAu6
+	wCGAs4Rd0AUOAZwl7IIucAjgLGEXdIFDAGcJu6ALHAI4S9gFXeAQwFnCLugChwDOEnZB
+	FzgEcJawC7rAIYCzhF3QBQ4BnCXsgi5wCOAsYRd0gUMAZwm7oAscAjhL2AVd4BDAWcIu
+	6AKHAM4SdkEXOARwlrALusAhgLOEXdAFDgGcJeyCLnAI4CxhF3SBQwBnCbugCxwCOEvY
+	BV3gEMBZwi7oAocAzhJ2QRc4BHCWsAu6wCGAs4Rd0AUOAZwl7IIucAjgLGEXdIFDAGcJ
+	u6ALHAI4S9gFXeAQwFnCLugChwDOEnZBFzgEcJawC7rAIYCzhF3QBQ4BnCXsgi5wCOAs
+	YRd0gUMAZwm7oAscAjhL2AVd4BDAWcIucFwEs2FbeJmErvw8PZE5uWoP50GIs/MXWBK+
+	5kLQhWz9kYtBS3juTheud9kazIKQYcgTEobBtN+8OHYt7edXlKJZ+0fVu4epv6QMaS7C
+	cOlPHm6rR058y0V8r1Cpdx+fFpQhy0WkYvE0vq+fF/bMTReqYR+Uan8Op/5iyZNFYOFP
+	B+1aKWcb6sZ3lBpLZrxq/e/R9NuTz5ND4OnbZNipV6NXd2zThaKZ6XxJNDr9r+PHCU8G
+	gcfx6KHzh/jtIL31FaUoaiyxX/z98qbZue/2eDIIdO//al5flgr7O1koimYk3cKHivh8
+	U2/wZBCo33wWlQ+HbtLYfHOvXhyqbiSd3NFpqXxe4ckgcF4unRZzTqRi622xlqEZlu1k
+	c/nDAk8GgcN8LuvY1gsqojK0mGkl7fQeTw6BtJ20DP15Fevft6qmxwyTJ4uAEXvNxA8d
+	qqpqPBkEItLPXhRrB/xDAiRAAiRAAiTwPyHwHSF9R+AKZW5kc3RyZWFtCmVuZG9iagoz
+	NCAwIG9iagoxMTk5CmVuZG9iagozNSAwIG9iago8PCAvTGVuZ3RoIDM2IDAgUiAvVHlw
+	ZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDM5NiAvSGVpZ2h0IDIwNCAv
+	Q29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNv
+	bXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae2de0PaPBSH
+	X1AQFBVR8YI6mU7nfbp5mYp3hvOC4m3b9/8i70matGmptS2nbVriP0KhoZyHcMnTX/Lf
+	f+pPVUBVQFVAVUBVQFVAVUBVQFVAVSDaCqTSPeQvnYr2MNSjA4hMNpfP53PZjMIR5esB
+	SGRzA0PFUqlUHBrIKRqRwUile7P5QnFssjI7N1uZHCsW8tle9VYVAQ9KYnCkXKkurW1s
+	bqwuVSvlEUUjQhIzC6vfdg+Pa8eHu1srCzPlkUHVN8LFofWJ0sTswur2Qe2i3rhu1C9q
+	+9urC7OKRqgoCIn+QSCxuLbz8+Tq+q75+PjYvLu+OjkgNCZKqm+ExANI9OkkTq9+3z8+
+	vby+vr48Pd7/vjr5ubO2SGj0q0/xwHlQEkOlybnF9Z2fp3Ug8fz69of8vb0+ExqnjMZQ
+	f5/6ThUkjlQP9Imh0cm5L+vfD0/rN/ctSuIv+eM06qc/v69/mZscVTQCRMFITH0iJM7M
+	JHQarfub+tmhQaNHDY3gI0n1ZPoGhkanPi1t/CAkmkKf+Pfvn9E3Wk1G49MU6RsZRQMZ
+	BiUxPEZJHJ3/spIAGBYa54c/NpYIjQFFA5NFipGYnoc+ASRum60X8olN+wLBwP5MfePX
+	+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
+	o3P5p+umx6fnl+cnqidkngRQ/sr6OUJz1uzq+vb+/v72GhJFXZHt8lOxIPeBoRGWNVvb
+	OaidX11dndfI1HPdke0KsrJ+2qY0aNZsdevH/sH+j63VBaXs/FQSYx8ybAjyr1yZX1xe
+	Xl6cr5TjMQkgxnOXrw1tELc4Wp6cmiyPkvVYwloZR75aRH9EhEauvzA4NFjozykSEQOB
+	oZHeTDabzfTGb+q5iEsXxMOnUul0Wp2eHERpVZuqAqoCqgKqAqoCqgKqAvGowP/fTSIY
+	CmVuZHN0cmVhbQplbmRvYmoKMzYgMCBvYmoKNDE0MQplbmRvYmoKMjMgMCBvYmoKPDwg
+	L1R5cGUgL0V4dEdTdGF0ZSAvY2EgMC42NSA+PgplbmRvYmoKMjQgMCBvYmoKPDwgL1R5
+	cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgplbmRvYmoKMjUgMCBvYmoKPDwgL1R5cGUgL0V4
+	dEdTdGF0ZSAvY2EgMC43ID4+CmVuZG9iagoyNiAwIG9iago8PCAvVHlwZSAvRXh0R1N0
+	YXRlIC9DQSAwLjcgPj4KZW5kb2JqCjM5IDAgb2JqCjw8IC9MZW5ndGggNDAgMCBSIC9O
+	IDEgL0FsdGVybmF0ZSAvRGV2aWNlR3JheSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+	dHJlYW0KeAGFUk9IFFEc/s02EoSIQYV4iHcKCZUprKyg2nZ1WZVtW5XSohhn37qjszPT
+	m9k1xZMEXaI8dQ+iY3Ts0KGbl6LArEvXIKkgCDx16PvN7OoohG95O9/7/f1+33tEbZ2m
+	7zspQVRzQ5UrpaduTk2Lgx8pRR3UTlimFfjpYnGMseu5kr+719Zn0tiy3se1dvv2PbWV
+	ZWAh6i22txD6IZFmAB+ZnyhlgLPAHZav2D4BPFgOrBrwI6IDD5q5MNPRnHSlsi2RU+ai
+	KCqvYjtJrvv5uca+i7WJg/5cj2bWjr2z6qrRTNS090ShvA+uRBnPX1T2bDUUpw3jnEhD
+	GinyrtXfK0zHEZErEEoGUjVkuZ9qTp114HUYu126k+P49hClPslgqIm16bKZHYV9AHYq
+	y+wQ8AXo8bJiD+eBe2H/W1HDk8AnYT9kh3nWrR/2F65T4HuEPTXgzhSuxfHaih9eLQFD
+	91QjaIxzTcTT1zlzpIjvMdQZmPdGOaYLMXeWqhM3gDthH1mqZgqxXfuu6iXuewJ30+M7
+	0Zs5C1ygHElysRXZFNA8CVgUfYuwSQ48Ps4eVeB3qJjAHLmJ3M0o9x7VERtno1KBVnqN
+	V8ZP47nxxfhlbBjPgH6sdtd7fP/p4xV117Y+PPmNetw5rr2dG1VhVnFlC93/xzKEj9kn
+	OabB06FZWGvYduQPmsxMsAwoxH8FPpf6khNV3NXu7bhFEsxQPixsJbpLVG4p1Oo9g0qs
+	HCvYAHZwksQsWhy4U2u6OXh32CJ6bflNV7Lrhv769nr72vIebcqoKSgTzbNEZpSxW6Pk
+	3Xjb/WaREZ84Or7nvYpayf5JRRA/hTlaKvIUVfRWUNbEb2cOfhu2flw/pef1Qf08CT2t
+	n9Gv6KMRvgx0Sc/Cc1Efo0nwsGkh4hKgioMz1E5UY40D4inx8rRbZJH9D0AZ/WYKZW5k
+	c3RyZWFtCmVuZG9iago0MCAwIG9iago3MDQKZW5kb2JqCjE2IDAgb2JqClsgL0lDQ0Jh
+	c2VkIDM5IDAgUiBdCmVuZG9iago0MSAwIG9iago8PCAvTGVuZ3RoIDQyIDAgUiAvTiAz
+	IC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJl
+	YW0KeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvu
+	JrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8A
+	DXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3
+	rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1
+	Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5O
+	s94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3x
+	mK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0M
+	GgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJx
+	lEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5as
+	eXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXW
+	c62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3H
+	CJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3
+	iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6
+	HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0pl
+	k/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UUKZW5kc3RyZWFtCmVuZG9iago0MiAwIG9i
+	ago3MzcKZW5kb2JqCjggMCBvYmoKWyAvSUNDQmFzZWQgNDEgMCBSIF0KZW5kb2JqCjQz
+	IDAgb2JqCjw8IC9MZW5ndGggNDQgMCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdC
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYVUz2sTQRT+Nm6p0CIIWmsO
+	sniQIklZq2hF1Db9EWJrDNsftkWQZDNJ1m426+4mtaWI5OLRKt5F7aEH/4AeevBkL0qF
+	WkUo3qsoYqEXLfHNbky2perAzn7z3jfvfW923wANctI09YAE5A3HUqIRaWx8Qmr8iACO
+	oglBNCVV2+xOJAZBg3P5e+fYeg+BW1bDe/t3snetmtK2mgeE/UDgR5rZKrDvF3EKWRIC
+	iDzfoSnHdAjf49jy7I85Tnl4wbUPKz3EWSJ8QDUtzn9NuFPNJdNAg0g4lPVxUj6c14uU
+	1x0HaW5mxsgQvU+QprvM7qtioZxO9g6QvZ30fk6z3j7CIcILGa0/RriNnvWM1T/iYeGk
+	5sSGPRwYNfT4YBW3Gqn4NcIUXxBNJ6JUcdkuDfGYrv1W8kqCcJA4ymRhgHNaSE/XTG74
+	uocFfSbXE6/id1ZR4XmPE2fe1N3vRdoCrzAOHQwaDJoNSFAQRQRhmLBQQIY8GjE0snI/
+	I6sGG5N7MnUkart0YkSxQXs23D23UaTdPP4oInGUQ7UIkvxB/iqvyU/lefnLXLDYVveU
+	rZuauvLgO8XlmbkaHtfTyONzTV58ldR2k1dHlqx5erya7Bo/7FeXMeaCNY/Ec7D78S1f
+	lcyXKYwUxeNV8+pLhHVaMTffn2x/Oz3iLs8utdZzrYmLN1abl2f9akj77qq8k+ZV+U9e
+	9fH8Z83EY+IpMSZ2iuchiZfFLvGS2EurC+JgbccInZWGKdJtkfok1WBgmrz1L10/W3i9
+	Rn8M9VGUGczSVIn3f8IqZDSduQ5v+o/bx/wX5PeK558oAi9s4MiZum1Tce8QoWWlbnOu
+	Ahe/0X3wtm5ro344/ARYPKsWrVI1nyC8ARx2h3oe6CmY05aWzTlShyyfk7rpymJSzFDb
+	Q1JS1yXXZUsWs5lVYul22JnTHW4coTlC98SnSmWT+q/xEbD9sFL5+axS2X5OGtaBl/pv
+	wLz9RQplbmRzdHJlYW0KZW5kb2JqCjQ0IDAgb2JqCjczNwplbmRvYmoKMjcgMCBvYmoK
+	WyAvSUNDQmFzZWQgNDMgMCBSIF0KZW5kb2JqCjQ1IDAgb2JqCjw8IC9MZW5ndGggNDYg
+	MCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+	ID4+CnN0cmVhbQp4AdV5Z1gUy7N3z2xedpec05JzzjmDJIkSlZwzSw4iICBBQUARAUVB
+	RUQFUaIkUVDEg4iCCgaCSBAVA4KC8g56zvnf97n3fnu/vP082/ubqurqmqnunqoaADhX
+	vKOiwmAGAMIjYmn2ZoZUF1c3Km4KEAEPoAe8QNHbNybKwNbWCvyv7dsEgHaYj2V2dP2v
+	Yv8zg9HPP8YXAMgWYfv4xfiGI/gGALChbxQtFgDUBkIfTYiNQjD6HoJZaIiBCH6xgwP/
+	4NUd7PMbY9C/ZRztjQDAcACAJ3l70wIBIAsjdGq8byCih2wMAJYpwi84AgBmFwTr+gZ5
+	+wHAWY7ISIeHR+7gOwgW9/kvegL/C/b29vlXp7d34L/4z70gI5GJjYNjosK8k35f/L/s
+	wsPikOf1uzEhPSkibPeOb9iQ36Kft7El8s+D/H5Fhf32GSIDcflH7HFAaDtYOsJnt83f
+	WDeAZmqPYGQsZBsVa7iDkWcGBUTF2jr+TU9LDjLajWASQj/mH2Pyj54zId4WOz6jIPRm
+	Wpz9HgQLI7gvJt7BBMHIioLeJAc5Ov8t89XP3/hvOgwHBJua/5GBmYJjzXfmYkF8Lhga
+	abljAzIXrAosQRjwB3GAhvQRQAZYASNg/HcvAwKAN8KJR3gxIBS8RXA4MiISGROJYOrf
+	ckb/jWL6e1wgMu7/1kgFvohs3L9z/pmNisz5j85g4Ifgf+jeyBw7vB3rYjyDM/8z5z8S
+	O/p+WyPfIL8kv/WPTWhRtCJaBW2I1kHrojUAFc2G5gIyaGW0OtoArYfWQngawBS8QTQH
+	/mPjjv7w5oD48sgkTacghLtz7z7/cIHTb+ngf6//mwUgeGSlbeUfCwCI9U9E9gEARpFR
+	SbTgwKBYqgGyc/2lqeYRvrLSVEV5BYUd9v83befM+mPsF/vfZxHE9vA/tEjkZjR2zpiD
+	/6F5fQCgLQTZpkz/oYm2AUCvCMDQCd84WvwffeidPwxyGtIjK5QT8AEhII48Z0WgCrSA
+	PjABFsAGOAJX4IGsnyBkDdJAAkgFGSAHFICj4DioANWgFlwEV0AzaANd4BYYBMNgFIyD
+	KTAN5sE7sAq+gU0IgnAQGWKGOCF+SASSghQhdUgXMoGsIHvIFfKCAqEIKA5KhQ5CBVAJ
+	VAGdheqha1AHdAsagh5Bz6EZaAn6DP2AUTAJZoF5YVFYDlaHDWBL2BHeBwfC0XAynAUX
+	wuVwDXwZboVvwcPwODwNv4PXUABFh2JDCaBkUOooI5QNyg0VgKKh0lD5qDJUDeoqqhN1
+	F/UYNY1aQX1HY9HMaCpaBlmnu9B70L7oaHQa+jC6An0R3Yq+g36MnkGvon9hyBgejBRG
+	E2OOccEEYhIwOZgyzAVMC2YAM46Zx3zDYrFsWDGsGnYX1hUbgk3BHsaewjZi+7CPsHPY
+	NRwOx4mTwungbHDeuFhcDu4k7jKuFzeGm8dt4Onw/HhFvCneDR+Bz8SX4S/he/Bj+AX8
+	JoGBIELQJNgQ/AhJhCLCOUIn4SFhnrBJZCSKEXWIjsQQYgaxnHiVOEB8QfxCR0cnSKdB
+	Z0cXTJdOV07XRHePbobuO4mJJEkyIu0lxZEKSXWkPtJz0hcymSxK1ie7kWPJheR68m3y
+	K/IGhZkiSzGn+FEOUCoprZQxygd6Ar0IvQG9B30yfRn9dfqH9CsMBAZRBiMGb4Y0hkqG
+	DoanDGuMzIwKjDaM4YyHGS8xDjEuMuGYRJlMmPyYsphqmW4zzTGjmIWYjZh9mQ8yn2Me
+	YJ5nwbKIsZizhLAUsFxhGWFZZWViVWZ1Yk1krWTtZp1mQ7GJspmzhbEVsTWzTbD9YOdl
+	N2D3Z89jv8o+xr7Owc2hz+HPkc/RyDHO8YOTymnCGcpZzNnG+ZILzSXJZceVwHWaa4Br
+	hZuFW4vblzufu5l7kgfmkeSx50nhqeV5wLPGy8drxhvFe5L3Nu8KHxufPl8I3zG+Hr4l
+	fmZ+Xf5g/mP8vfzLVFaqATWMWk69Q10V4BHYJRAncFZgRGBTUExwj2CmYKPgSyGikLpQ
+	gNAxoX6hVWF+YWvhVOEG4UkRgoi6SJDICZG7IuuiYqLOoodE20QXxTjEzMWSxRrEXoiT
+	xfXEo8VrxJ9IYCXUJUIlTkmMSsKSKpJBkpWSD6VgKVWpYKlTUo+kMdIa0hHSNdJPZUgy
+	BjLxMg0yM7JsslaymbJtsh/khOXc5Irl7sr9kleRD5M/Jz+lwKRgoZCp0KnwWVFS0Vex
+	UvGJElnJVOmAUrvSJ2UpZX/l08rPVJhVrFUOqfSr/FRVU6WpXlVdUhNW81KrUnuqzqJu
+	q35Y/Z4GRsNQ44BGl8Z3TVXNWM1mzY9aMlqhWpe0FrXFtP21z2nP6QjqeOuc1ZnWpep6
+	6Z7RndYT0PPWq9Gb1RfS99O/oL9gIGEQYnDZ4IOhvCHNsMVw3UjTaL9RnzHK2Mw433jE
+	hMlkj0mFyStTQdNA0wbTVTMVsxSzvl2YXZa7inc9Nec19zWvN1+1ULPYb3HHkmTpYFlh
+	OWslaUWz6rSGrS2sS61f7BbZHbG7zQbYmNuU2ry0FbONtr1ph7Wztau0e2uvYJ9qf9eB
+	2cHT4ZLDN0dDxyLHqT3ie+L29DvRO+11qndadzZ2LnGedpFz2e8y7MrlGuza7oZzc3K7
+	4LbmbuJ+3H1+r8renL0T+8T2Je4b8uDyCPPo9qT39Pa87oXxcva65LXlbeNd473mY+5T
+	5bPqa+R7wvedn77fMb8lfx3/Ev+FAJ2AkoDFQJ3A0sClIL2gsqCVYKPgiuBPIbtCqkPW
+	Q21C60K3w5zDGsPx4V7hHRFMEaERdyL5IhMjH0VJReVETUdrRh+PXqVZ0i7EQDH7Ytpj
+	WZDg8EGceFx23Ey8bnxl/EaCU8L1RMbEiMQHSZJJeUkLyabJ51PQKb4p/akCqRmpM/sN
+	9p9Ng9J80voPCB3IOjCfbpZ+MYOYEZrxV6Z8Zknm14POBzuzeLPSs+ayzbIbcig5tJyn
+	h7QOVeeic4NzR/KU8k7m/cr3y79fIF9QVrB12Pfw/SMKR8qPbBcGFI4UqRadPoo9GnF0
+	oliv+GIJY0lyyVypdWnrMeqx/GNfj3seHypTLqs+QTwRd2K63Kq8/aTwyaMntyqCKsYr
+	DSsbq3iq8qrWT/mdGjutf/pqNW91QfWPM8Fnnp01O9taI1pTVoutja99e87p3N3z6ufr
+	L3BdKLjwsy6ibvqi/cU79Wr19Zd4LhU1wA1xDUuX914evWJ8pf2qzNWzjWyNBU2gKa5p
+	+ZrXtYlmy+b+6+rXr94QuVHVwtyS3wq1JrWutgW1Tbe7tj/qsOjo79TqbLkpe7OuS6Cr
+	spu1u6iH2JPVs92b3LvWF9W3civw1ly/Z//UbZfbT+7Y3RkZsBy4N2g6ePuuwd3eezr3
+	uoY0hzruq99vG1Ydbn2g8qDlL5W/WkZUR1ofqj1sH9UY7Xyk/ahnTG/s1mPjx4NPzJ8M
+	j+8efzSxZ+LZ071Pp5/5PVt8Hvb802T85OZU+gvMi/yXDC/LXvG8qnkt8bpxWnW6e8Z4
+	5sGsw+zUnO/cuzcxb7bms96S35Yt8C/ULyoudi2ZLo0uuy/Pv4t6t7mS857xfdUH8Q83
+	Pup/fLDqsjr/ifZp+/PhL5xf6r4qf+1fs1179S382+Z6/gbnxsXv6t/v/nD+sbCZsIXb
+	Kv8p8bPzl+WvF9vh29tR3jTv37EACunhgAAAPtchOYQrkjuMAkCk/Mkpfksg6QqEyCAY
+	h0QKFkgEMAdJIu/tPpgTjoUnUeao22gz9BNMOJYR249LxesScISXxA66KlIRuY7ygoGB
+	0ZIpj3mIlZFtL/tlTjSXN3c3L5XvMP+GgJ/gpPBukSExOfFCiXdS5tLVMt/kjOSPKIwq
+	kZUNVWJUq9T61Kc1fmqxa0vpaOia6Nnr+xrEGGYZnTBuMOk1fWy2tGvbgtVS2srI2n13
+	sE28bbZdiX21Q4NjG7Lrh53HXJ67vnabc1/c+37foscLzxGvXu9Gn9O+R/yS/QMC7AK1
+	goSDKcHfQl6HDobVhx+JiIp0iFKL5oreor2K6YutjcuOD0gwT5RKIiYtJz9IaUot35+V
+	lnAgOp2WkZyZf/BsVnf260OEXO28qPzagokjxELtovCjp4tHSn4ekz7uXpZ/orV8uoKu
+	UqXK81Te6ebqqbPoGplap3MHzl+88Khuo556yaoh9XLzlU+Nmk1F1z5ed7/xsNWm7UmH
+	dmfszfquFz10vUp9Trei+7NvF98pGygbLL6be+/g0KH7R4aPPMj+K3bE+aHsw83Rvkcp
+	Y6pj3x4/fdIxXjGx/6nnM8PnIpOEyfdTj160vKx4tf+117TxjMQsw+z3ubdvJuaH3t5a
+	uLnYsdSxfP5d4Ur8e48PJh+lVhlW1z5Nfu75cvZr9lrQN8t1uQ3mjfXvL370bdZsZf30
+	/2W8Lbi9jfgfC7iQ6DARDCARnRV0FHoNKyGx1xeUJ2oCiZpeYqKwFGwbzh/PhZ8kVBED
+	6QxJOmRHShB9OsMZxltMSyysrMZsSeyNHB+5ZLlpPF18dPxO1EsC20IGwhkivaJb4moS
+	IZKnpIalP8uyyinJ71JwVwxUilZOUtmvmqwWou6uYaWpoyWvLajDqovX/aH3Xn/GYNzw
+	vlGP8XWTOtNys9xdCeZBFq6Wu6zUrcV2s9qgbb7azto9su9zaHI8vSfXKcbZw8XcVcmN
+	1x3r/gE56bs9aj3zvSK9HX2UfUm+s34d/kUBAYHaQYxBb4NvhhSH+odphtOHz0W0ReZG
+	uUZLIetiJOZMLC3OKJ41fiGhI/FwkkeyfAqc8jS1cX9BWviBPenGGZqZGgd1snZlu+RE
+	HDqUez7vdv5Mwa8jPIUaRU5HY4qPllwuHTr2tgw+wVOuetKuIryyoOryqdHT384InrWt
+	OVjbce7TBdm66Is36tcbNC6nXulpBE0G1w42D9zAtJi15rbd7cB1mtzM7Oru/tor2udw
+	K6X/9O2bd8YHlgbX76GHmO8LDMs90PnLasTtYdBowqOcseOPa540jndNDD2deDb//OsU
+	6gXLS5FX6q+tpgNnameX3ojNu73NWbi0eHdpZnljhfJe5IPeR/fV9E+jX5S+lq59Wbff
+	uPGDYzN7a+NXwm//owEjkAS7QTroQ+J6TSgWaoNh2Bo+A2+iPFD30droVow6ph9ri53D
+	peC58XcJR4i+dNokbtIv8ixlmL6F4TxjOVMhcy5LNmsOWwF7KUc1ZwNXO3c3TzdvD18v
+	fw/1pkCLYIPQKeECkTjRvWL64oISQGJKsk2qQNpJhiqzLNsily5vqcCmMKPYoBSnrKdC
+	UHmsekotSF1ZfUOjRzNby1KbSXtSp0Y3RE9Rb0t/0KDYcJ+RpNG68W2TIlN3MzGzz7t6
+	zPMtnCwFLN9ZtVqn77ayYbOZsW2wi7HXcoAd7juW7HFzojotOF91iXPVcoPdhtyL9jrs
+	Y9v33KPSc58Xr9dL71M++3x5fCf9yv2dApgDHgYWBJkEA2S9xIcqhK6E1YX7RPBEPI0s
+	jdodjY++RUuOUYpZiT0f5xHPHv8w4VCiXuJGUlNycAo15Xnqsf2OaZxp8wfa049lJGUG
+	HNyb5ZrtnuN/KC43O68s/0JB6+HBI+OF80Vfi1ElzKWCx+SPa5YZnbAotzvpWuFTGVl1
+	4FTp6cvVw2c+1ojUJp0bvSBWl3Zx4pJMQ9blqasKjblNr5pVrxfceN2q1Hao/UWn0s38
+	rtke7d7yvm/9jrdbBsQGz92TGRoYDv1LeGRl9O7YtSf1E03Pbk2+fAley8/UvclZyF9u
+	+0D/KXeNY6Nly3nH/39qSzvvBKwqAOfnAHA6C4CdOwB1UgCIVCJlE6TeYUsGwFEDwIZF
+	AHp+EkBmV/99f5CBGJLlB4BDSOY4BN5BFEgB2gMlQ6egLmgK2kLyOz3YB86BL8EP4a8o
+	bpQBKgh1FNWBmkXTIfUDLyQja0e/wTBh9DARmLOYcSwRa4BNxDZjV3DiuEBcHW4JL4uP
+	w/cS6AhuhMtEiOhCbKaj0EXQjZHUSWfIeDKN/IpiQemgF6evYCAzZDCsM0Yi+Yov02tm
+	H+YFlnCWb6wZbBS2U+xy7Lc53DnWOIu5FLgecyfw8PKM8h7iM+QH/Leo2QLWgpyCi0I3
+	hYtFQkRNxUTESeJrErOSY1J3pDtlrss2yTXKNyu0K/YpDSu/UvmkhlZn1RDSlNFS0JbX
+	kdSl6jHpw/ofDaYMe41qjHNNIk1dzAx3yZnzWdBboiw3rFatl3fP28zazti9sX/n8MXx
+	pxPBmd1FzFXDzdrdd2/KvuMeTch77L0PxVfJz9X/QEBt4EDQXPDPUKYwgXDJCNlImSiJ
+	aEEaWwwh5kfsUjxXgnViVlJv8q9Uk/2lae/SrTNuHlTO6sgxPzSXd6hA4PDVQv2i6eLi
+	UpfjOifMTyZUDpzmPkOpgWu/n/9c96F+pWHlysfGtWs/b+BbudvlOo27XHuC++L70+6k
+	D+6/F38/7IHXSMFo+9jyuMDTfc+rp96+UpjOmB2fl1rIXVpYMftw6RPDl5S19xsBPxZ+
+	Rv0+P+iBLLBDqlEVoBe8geiQaoA7lIVk/MPQRyS714S94Fy4CX6OQiE5uysqG3UN9RpN
+	Rk6VUHQl+i8k/1bA+GGqEL/TY62wedh7OCLOGleCm8SL4Gn4fgIbIYwwSBQiZhLn6Szo
+	OklSpGoyK/kwBUvJpAf0GQwohlxGCuMJJkGmRmZ95nGWcFYsaw2bAdssew6HDMcEZwaX
+	PNc0dynPLl40bz/fQX5TKok6IVAjGCNkKswnvCEyIdomdkb8hESxZKFUoXSJTIXsBbkW
+	+XsKrxTXlVlVNFV91QrVuzU+aoloe+pU6k7p8xn4GTYabZqYmBaYDZtjLNQsfaxyrC/s
+	vmUzabtqj3Zgc5Tco+/k6hzjUuR61W3E/dM+Ng8dzwCvYu8enw9+Qv4uAUWBg0E/Q5RD
+	g8NOhz+KhKMUo71ohTE3Yxfj6RPUEr2SCpLbUxb2s6eZH9if3pyxfFAoa192Rc6zXPY8
+	1/zTBW+OyBQmFg0Wc5RElj44Ll9WWU45mVdJqjp+Wqz67tngWtK55gtuF9H1TQ2eVxiu
+	3m5KbJa7vthS1xbcIdP5uauzJ7PPqp/99txA093UIYthzgejI3sezj1Kfsz3ZGSi4JnD
+	pOgL6OXs68GZhrmiedqCwxL3cvWK2PtrH3VXRz57fvm4lr5Ov3HyB99m9U+uX0W//c8O
+	DEAUUjl6CLYR3wdAJ6EB6AssCNsjNZw2eAWp1bgg+30IjUJqiMnoNvQaRgUTj+nGYrA2
+	2ErsMk4LdxS3iDfGnyPgCVGEF0QrYh+dGuJpQ9IDsit5mZJGz0rfxGDD8ImxjEmXaYn5
+	FIsDK5n1PlseuxUHE8ck53kuGrcBDzPPO95BvnP8OdRQAUdBAyFFYTERflFuMS5xqoSU
+	pIaUpbS3TKpshVy3/BtFipK2Mk3lqupHdRWNDM0xbXGdLN23+lYGbUZSxudMBcxqzSUs
+	WqyMrZ/ZRNmR7Jsc3ZH92u0a7668d8Ojz+uIj4efagAp8HlwRah52FJEUuRWdCxtPtY2
+	7noCYyIt6UmKZurZNLoDiekLmS4HH2Qb5nTmKue1FugcHip0LXpXnFbKeKymTO5Ex0nd
+	it4q7VOt1ZgzVmeP17w+J3k+4cLARdb6gEudlylX/K52NbFei2oeviGOZD7v2+062m7y
+	deV0f+h17rvVL3X7+J3twZC7T4b07zc8YPsrZuT+KPejoLHLj5fHhSacn2Y+u/j8/uT8
+	1NZLhlf8r6WmVWY0Z3Xn9N/oz+u+1VxQW1RYklwWfEd5t7TS8T7hg8qHlY/nV10/ET91
+	fQ74wvCl/eveNbBW883w2+z6gQ2ejY7ve76v/ji8KbbZv+WxtfGz9Jfcr6Ftvx3/xwQo
+	IXVIpEEkQ6T8+Gp7+4soklSUAPCzeHt7s2Z7+2ctkmwg30D6wv58r9gRxiI196prO+h/
+	av8HtPB+jQplbmRzdHJlYW0KZW5kb2JqCjQ2IDAgb2JqCjU5NjMKZW5kb2JqCjMyIDAg
+	b2JqClsgL0lDQ0Jhc2VkIDQ1IDAgUiBdCmVuZG9iago0IDAgb2JqCjw8IC9UeXBlIC9Q
+	YWdlcyAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvQ291bnQgMSAvS2lkcyBbIDMgMCBS
+	IF0gPj4KZW5kb2JqCjQ3IDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nIC9PdXRsaW5lcyAy
+	IDAgUiAvUGFnZXMgNCAwIFIgL1ZlcnNpb24gLzEuNCA+PgplbmRvYmoKMzEgMCBvYmoK
+	PDwgL0xlbmd0aCA0OCAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5j
+	dGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBd
+	IC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2
+	NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AaXChVJCUQBAwb+2u7u7
+	sekGFQMDW7ED61OOMTL48MWNnU1+kLSY+OD7u+L4O8XfiAuPvWH3lZjt6CsSX4gaR15Q
+	nCOSI6w9lCP0rD74jOETQZmBJ+w+ErDtf0T0A/5/fQ+ovMf303uPZs8dOt13GN7ilrl6
+	i+UbVp2u3CD0mhWzy9dIv2I5f+kKzYtZdC5kKbxkQfL8JeYvmBfoukDoOS6zc+dIP2Mu
+	f/YMrafM6J0+5fcJ0/KnTjB/zJTAyWOcHzFpceIIuYdM/Dl+iPoM4xnG9I5m+H3AqPyR
+	A0zuMyJ2eB+HewxbH9pD4i5DxoO7qE8zmGZAb3+a7zuK+3Yovk2f8N5tHG7Ra71nC4mb
+	9Bh3b6I4RffPrhQ6O1N0bqjv2KD4Oh3C29exu0a77bY1RCdp+7c1icoErfktCXQ2J2iO
+	q2+KYxijSWZjDMtRGp02RBEaocFsfQSVYerz68LorA2hsyZEYZAaydVBLAeodloVQKif
+	KrOVfqT7qPyzwod6L+V6y7wUeiiTXOrBvJtSgSVuvn4CXuWIVQplbmRzdHJlYW0KZW5k
+	b2JqCjQ4IDAgb2JqCjQxMAplbmRvYmoKMzAgMCBvYmoKPDwgL0xlbmd0aCA0OSAwIFIg
+	L09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1Bl
+	clNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAv
+	UmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRl
+	RGVjb2RlID4+CnN0cmVhbQp4AaXChVJCUQBAwb+2u7u7sekGFQMDW7ED61OOMTL48MWN
+	nU1+kLSY+OD7u+L4O8XfiAuPvWH3lZjt6CsSX4gaR15QnCOSI6w9lCP0rD74jOETQZmB
+	J+w+ErDtf0T0A/5/fQ+ovMf303uPZs8dOt13GN7ilrl6i+UbVp2u3CD0mhWzy9dIv2I5
+	f+kKzYtZdC5kKbxkQfL8JeYvmBfoukDoOS6zc+dIP2Muf/YMrafM6J0+5fcJ0/KnTjB/
+	zJTAyWOcHzFpceIIuYdM/Dl+iPoM4xnG9I5m+H3AqPyRA0zuMyJ2eB+HewxbH9pD4i5D
+	xoO7qE8zmGZAb3+a7zuK+3Yovk2f8N5tHG7Ra71nC4mb9Bh3b6I4RffPrhQ6O1N0bqjv
+	2KD4Oh3C29exu0a77bY1RCdp+7c1icoErfktCXQ2J2iOq2+KYxijSWZjDMtRGp02RBEa
+	ocFsfQSVYerz68LorA2hsyZEYZAaydVBLAeodloVQKifKrOVfqT7qPyzwod6L+V6y7wU
+	eiiTXOrBvJtSgSVuvn4CXuWIVQplbmRzdHJlYW0KZW5kb2JqCjQ5IDAgb2JqCjQxMApl
+	bmRvYmoKMjkgMCBvYmoKPDwgL0xlbmd0aCA1MCAwIFIgL09yZGVyIDEgL0VuY29kZSBb
+	IDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUg
+	WyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAg
+	MSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4
+	AaXChVJCUQBAwb+2u7u7sekGFQMDW7ED61OOMTL48MWNnU1+kLSY+OD7u+L4O8XfiAuP
+	vWH3lZjt6CsSX4gaR15QnCOSI6w9lCP0rD74jOETQZmBJ+w+ErDtf0T0A/5/fQ+ovMf3
+	03uPZs8dOt13GN7ilrl6i+UbVp2u3CD0mhWzy9dIv2I5f+kKzYtZdC5kKbxkQfL8JeYv
+	mBfoukDoOS6zc+dIP2Muf/YMrafM6J0+5fcJ0/KnTjB/zJTAyWOcHzFpceIIuYdM/Dl+
+	iPoM4xnG9I5m+H3AqPyRA0zuMyJ2eB+HewxbH9pD4i5DxoO7qE8zmGZAb3+a7zuK+3Yo
+	vk2f8N5tHG7Ra71nC4mb9Bh3b6I4RffPrhQ6O1N0bqjv2KD4Oh3C29exu0a77bY1RCdp
+	+7c1icoErfktCXQ2J2iOq2+KYxijSWZjDMtRGp02RBEaocFsfQSVYerz68LorA2hsyZE
+	YZAaydVBLAeodloVQKifKrOVfqT7qPyzwod6L+V6y7wUeiiTXOrBvJtSgSVuvn4CXuWI
+	VQplbmRzdHJlYW0KZW5kb2JqCjUwIDAgb2JqCjQxMAplbmRvYmoKMjggMCBvYmoKPDwg
+	L0xlbmd0aCA1MSAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlv
+	blR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9E
+	b21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpd
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AaXChVJCUQBAwb+2u7u7sekG
+	FQMDW7ED61OOMTL48MWNnU1+kLSY+OD7u+L4O8XfiAuPvWH3lZjt6CsSX4gaR15QnCOS
+	I6w9lCP0rD74jOETQZmBJ+w+ErDtf0T0A/5/fQ+ovMf303uPZs8dOt13GN7ilrl6i+Ub
+	Vp2u3CD0mhWzy9dIv2I5f+kKzYtZdC5kKbxkQfL8JeYvmBfoukDoOS6zc+dIP2Muf/YM
+	rafM6J0+5fcJ0/KnTjB/zJTAyWOcHzFpceIIuYdM/Dl+iPoM4xnG9I5m+H3AqPyRA0zu
+	MyJ2eB+HewxbH9pD4i5DxoO7qE8zmGZAb3+a7zuK+3Yovk2f8N5tHG7Ra71nC4mb9Bh3
+	b6I4RffPrhQ6O1N0bqjv2KD4Oh3C29exu0a77bY1RCdp+7c1icoErfktCXQ2J2iOq2+K
+	YxijSWZjDMtRGp02RBEaocFsfQSVYerz68LorA2hsyZEYZAaydVBLAeodloVQKifKrOV
+	fqT7qPyzwod6L+V6y7wUeiiTXOrBvJtSgSVuvn4CXuWIVQplbmRzdHJlYW0KZW5kb2Jq
+	CjUxIDAgb2JqCjQxMAplbmRvYmoKMiAwIG9iago8PCAvTGFzdCA1MiAwIFIgL0ZpcnN0
+	IDUzIDAgUiA+PgplbmRvYmoKNTMgMCBvYmoKPDwgL1BhcmVudCA1NCAwIFIgL0NvdW50
+	IDAgL0Rlc3QgWyAzIDAgUiAvWFlaIDAgNzMzIDAgXSAvVGl0bGUgKENhbnZhcyAxKQo+
+	PgplbmRvYmoKNTQgMCBvYmoKPDwgPj4KZW5kb2JqCjUyIDAgb2JqCjw8IC9QYXJlbnQg
+	NTQgMCBSIC9Db3VudCAwIC9EZXN0IFsgMyAwIFIgL1hZWiAwIDczMyAwIF0gL1RpdGxl
+	IChDYW52YXMgMSkKPj4KZW5kb2JqCjU1IDAgb2JqCjw8IC9MZW5ndGggNTYgMCBSIC9M
+	ZW5ndGgxIDEzODcyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ad17eXQU
+	Vdb4e7V2Vy/pfcvS3elOOmRfOwQCqYRskAQCCZBgIgkQBGRJMAYBwQhoIKCgo4LIjBs6
+	yoxOExxsRPz4MXHc4PeJ4jAq6ucYFZfo6ERQSFd/91WHCDlz5njOb8788evKrfdevVf1
+	7rv3vrtVpXP1zW1Ig7oRjWrntbYvRvIvR40Q7V24orU90jZ2IoQfWNjV6Yq02STov3Nx
+	+w0rIm1FACHBe8PytSP3m1sQitUtaWtdFOlHw1D6l8CFSBvnQuldsqLzlkjbcAbKR5av
+	WjjSb4b50awVrbeMzI/OQdu1snVFW2R89gCUSe2rbgK8yC+bjOtsX902Mh43AH7/jTBc
+	TULLkBItRwpEIR0cTQjx5wUvYqCX9AMUp81+ZH5U4Q9Ir4ALCD3mS+8m5Z/dL/508dyw
+	T7VRWQ7jlPJ40gH3cOOkcQipMfS/r9o42kN6yS8piGalBFElwGSAXIDklIMK8QW8C5ma
+	h0QldjJI5fyr/ZuXcDrQ/zP5HMDpolqDlAs3FzoXbt5cOa5YiatQPoORE5chr1yW9nl/
+	5wziyX1eDxSTIgXVlx8LLSQq873OUP4C53B+UIHFaOeP3l85LwJc8BY5f/BmOU/DuDfz
+	K5yniqG/z/lGcpCC4nVvkMFilPNV7+3OP+aPcz6XP9HZ54Nrfc6DxVAcdu7Pv935+Bb5
+	ymPJcvGoN4j39jkfIcVh58Pw/Ac2yx33R27cFCnat8gTrTokFysPBanfHXau8CY6F8CN
+	WFQ5m73LnU3eAmd9cRAn9DlryG2HndW+U84qMnWfU4xM5I88Pc8rY5wdmTbVe9SZFJkh
+	nowWjU6Xt9oZC89PfeQBZ6r3emdxchA/9XxlUrK30veAP4iH5DlIAYiSYmWkWOg7hn+L
+	KtA4PA8l4AcPVY4DnPGuPudmKPYeqkzKTwjS50WD85Cv0rcFwA+QADA7iOvFVH43v4if
+	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
+	MxxRHja8YtBG8VECJUSB16NArJanaIPA01o9orQKWmGCNVAM7aMMURqtL8punAVLmK4b
+	Ap/Prjt3zhYq1I1YxELw+8A7wLAFiaNAtl0HKMxmmYi5ftAH2GQxE3JiZgU+Kn1MSV9I
+	70hfUdLH+DhWEweR/jTloeTLKcw7yQ+lDEezJy6vJbQFWrCl7MtyNDFXzFBQcymK4njM
+	JxswpiheIdCYgjeWgoA5BeVjHWqQRaVdpT7uJsiChxpxUGtkjxFoDogWGgoKiN+i69nQ
+	L5teN/AAMIO/3XgKVYWd0snQk4DjAsDiMsNemsxYL38BSACHJ4Y/ZMYz88FXK0ATQPvO
+	mEjl+dfibZj5axxO/MdnyZ97tBoW3loZHSmQ+2cS0xPTk8kFJloVH21JneDkkwVVarZq
+	grEG1aRPyEuenOgodNREpylq8uwTC1/EdrDrlfhZ4usC8oNDsm4b0Bec+vRTebeDg31K
+	dsVgFUDviFuWEtn8YGujMOg3edf7831XNNyoSQbTBD5yHLaa3enYByM98Yl5uaAfjNSH
+	0fmZ4jxfycwJTQ/Rz8yIn9Q8ry05TpAGlRUd2Hho+3aKjomRXgfrMbGmqfO+//PQ7Cfa
+	KYPerFTrrL5ZU4uX7/xWiHLkT8nJTija2bSrouJlSZ07bXySJtk9IUFMy3v6odfmZZkx
+	+YAC+Lo+/Amzjz0OMu5CJWKC0qXSGtTI7jXwKsHlZVXmLZQjPtYpODU+ld0dv8ddO32E
+	m0MDIwpjEFRGkR5IQaTNQExuPJhcM3BSD+vOMUTsNLgjhBr00//4+9meWVkF0hc4xl9c
+	syZhXVzBgw9NiLv1Nmae9PoPktTnd9VuY4+HhqqTsoc7++7prN51V9WaHcEIvhXh95hc
+	4DuJL1eKZQ9anrJQPTF4qrnBsMRwi7DWEDS/YnzVrLBRHBP7FuONc/AWraDWPa/2mlRx
+	On+UE/njrLEOl8JvtTtdPe7KkfXI7NUXhIZkXT4I9rWgqHBQLglPO8DvkDU5WYbsfYAq
+	5zm3i8rTITBpVkzrFO7Mtl15MTE5dy2qV2KPUH+n9JP004/Y8N0pzNqkaOropKySndUb
+	b5m6dfmcTZ1HwQJjOx4f/ALvl3lRBDLdBrzQwepmiKnn1Rgmi6V0NLJ6dTwnxHoFlZl2
+	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
+	ORUKn0GpJFWNYFYDnTheiZxUqtGpizLxFqCRFt7hgIwcgg4BSlFtvFdhbzNbRmk2VDNg
+	Gwb6EIiQDsSmqGYgNAAOg5zZAM1EErMsCNCsW9a9nDMiQKRO0jMZV4TIiS0ka+2TqYMp
+	kgnw4YPe5GqHPYWR2vGkbz6G1xu9yzceS0xPx5tOU5Rg0C9XM6uHz9Hey29Kr9+Pac5E
+	7C68J2bmyjlcHqzZMrG4mqqma7RNVBPdrOVUTq1XcLowfRCGcSZ7U7SBs/BCPKyWdWIf
+	j0y9gkXvszpj7rWDjYOVjviwEEoUnhn4sDA0EBEReXtANAEeLSyXcJc4jyTejwQWJBU/
+	JrKgJ2IrCfilASnkjzUlRk+JoyJhRk3ZGfYNabj38p/Y0wx1HuNpM0wjwcazs2sjdoWc
+	UZh8efvPfvCfJbB2FbwZ14C/qB99Hx0Pb5t98N8cqRCjZMF3xWWoHL7hrURT4QP5Kvja
+	eQZ4fTPRLFQPXwnPQXPh295GdB18WXxcngSDH4nlGkdit+Lihil1lSmVbcu72jqXLmxN
+	K1m1fBHR81d+T0HlOYB+AJJaGQAYggEMADAHewFyAUoB6gEWAXQCbAG4D2A/wHMA/QBn
+	AAYAhsCoMgAmAC9ALkApQD3AIoBOgC0A9wHsB3gOoB/gDMAAwBAQhgEwhUd+gBMarWOQ
+	kWvbhJJX98P/q1zTTh7TTh3TlkPdq56fNaY/e0w7Z0w7d0y7aExbdjOuen7pmP6yMe2p
+	Y9o1Y9rTx7Rbx7QXjGkvHNNeNKYty+dV+C0e03/DmPaSMe2lY9rLx7Tl/5266vkrx/Sv
+	GtPuGNNePaZ905h255j2zWPaXWPa8v9iXYUPJIqvlpfL8u74X4s5Q8oKZW5kc3RyZWFt
+	CmVuZG9iago1NiAwIG9iago5MTc3CmVuZG9iago1NyAwIG9iago8PCAvVHlwZSAvRm9u
+	dERlc2NyaXB0b3IgL0FzY2VudCA3NzAgL0NhcEhlaWdodCA3MjAgL0Rlc2NlbnQgLTIz
+	MCAvRmxhZ3MgMzIKL0ZvbnRCQm94IFstMTAxOCAtNDgxIDE0MzYgMTE1OV0gL0ZvbnRO
+	YW1lIC9BQVhDU0grSGVsdmV0aWNhLUJvbGQgL0l0YWxpY0FuZ2xlCjAgL1N0ZW1WIDAg
+	L01heFdpZHRoIDE1MDAgL1hIZWlnaHQgNTQ5IC9Gb250RmlsZTIgNTUgMCBSID4+CmVu
+	ZG9iago1OCAwIG9iagpbIDI3OCAwIDAgMCAwIDAgMCAwIDMzMyAzMzMgMzg5IDAgMjc4
+	IDAgMjc4IDAgMCA1NTYgNTU2IDU1NiA1NTYgMCAwIDAgMCAwCjAgMCAwIDAgMCA2MTEg
+	MCAwIDAgNzIyIDcyMiA2NjcgMCAwIDAgMjc4IDAgMCAwIDgzMyA3MjIgMCAwIDAgMCAw
+	IDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDYxMSA1NTYgNjExIDU1NiAzMzMg
+	NjExIDYxMSAyNzggMCAwIDI3OCA4ODkgNjExIDYxMQowIDYxMSAzODkgNTU2IDMzMyA2
+	MTEgNTU2IDAgNTU2IDU1NiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAow
+	IDAgMCAwIDAgMCAwIDYxMSBdCmVuZG9iagoxNyAwIG9iago8PCAvVHlwZSAvRm9udCAv
+	U3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9BQVhDU0grSGVsdmV0aWNhLUJvbGQg
+	L0ZvbnREZXNjcmlwdG9yCjU3IDAgUiAvV2lkdGhzIDU4IDAgUiAvRmlyc3RDaGFyIDMy
+	IC9MYXN0Q2hhciAyMjIgL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nCj4+CmVuZG9i
+	ago1OSAwIG9iago8PCAvTGVuZ3RoIDYwIDAgUiAvTGVuZ3RoMSA5NzgwIC9GaWx0ZXIg
+	L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ab1ae3xTRfY/cx+5N0mb5p2bNGkS0iR9P+kL
+	Co2lLx7FQhFapNgChRZBEUsV9wdbFReoiCIKCKyKDyigNpQKQRaWZUF011V0EZT1t7uu
+	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
+	GKQJenlD+YxhfN4wnq7ENz4/eRhfP4yfO4yfN4yXcb1BnvnDyrEPQ97XOoyn56g3ynPX
+	MP7uYfzSYfy9w3j5/1Q3yLNsWPlyyv8/o7vjDAplbmRzdHJlYW0KZW5kb2JqCjYwIDAg
+	b2JqCjYyMjcKZW5kb2JqCjYxIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAv
+	QXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDcxNyAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgov
+	Rm9udEJCb3ggWy05NTEgLTQ4MSAxNDQ1IDExMjJdIC9Gb250TmFtZSAvRlJYVFVTK0hl
+	bHZldGljYSAvSXRhbGljQW5nbGUgMAovU3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhl
+	aWdodCA2MzcgL0ZvbnRGaWxlMiA1OSAwIFIgPj4KZW5kb2JqCjYyIDAgb2JqClsgMjc4
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjc4IDAgMCAwIDAgMCAwIDU1NiAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAKMCAwIDcyMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDcyMiAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDY2NyAwIDAgMCAwIDAgMCAwIDAgMAo1MDAgNTU2IDU1
+	NiAyNzggMCA1NTYgMjIyIDAgMCAyMjIgMCA1NTYgNTU2IDAgMCAzMzMgNTAwIDI3OCA1
+	NTYgMCAwIDAgNTAwCl0KZW5kb2JqCjIxIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0
+	eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0ZSWFRVUytIZWx2ZXRpY2EgL0ZvbnREZXNj
+	cmlwdG9yCjYxIDAgUiAvV2lkdGhzIDYyIDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hh
+	ciAxMjEgL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nCj4+CmVuZG9iago2MyAwIG9i
+	ago8PCAvTGVuZ3RoIDY0IDAgUiAvTGVuZ3RoMSAxMTEwMCAvRmlsdGVyIC9GbGF0ZURl
+	Y29kZSA+PgpzdHJlYW0KeAHVegt4lNW16Nr/ex6ZzEzm/cjMZDIzmbwf5GUCGUNePBJD
+	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
+	UAplbmRzdHJlYW0KZW5kb2JqCjY0IDAgb2JqCjY5NzMKZW5kb2JqCjY1IDAgb2JqCjw8
+	IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDcxNyAv
+	RGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWy05NTEgLTQ4MSAxNDQ1IDEx
+	MjJdIC9Gb250TmFtZSAvSkxVVFJPK0hlbHZldGljYSAvSXRhbGljQW5nbGUgMAovU3Rl
+	bVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA2MzcgL0ZvbnRGaWxlMiA2MyAwIFIg
+	Pj4KZW5kb2JqCjY2IDAgb2JqClsgMjc4IDAgMzU1IDAgMCAwIDAgMCAwIDAgMzg5IDAg
+	Mjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAw
+	IDAgMCAwIDAgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCA1NTYgNTU2CjUwMCA1NTYgNTU2IDI3OCAwIDU1NiAyMjIgMCAwIDIyMiA4
+	MzMgNTU2IDU1NiA1NTYgNTU2IDMzMyA1MDAgMjc4IDU1NiAwIDAKMCA1MDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MDAgXQplbmRv
+	YmoKMjIgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNl
+	Rm9udCAvSkxVVFJPK0hlbHZldGljYSAvRm9udERlc2NyaXB0b3IKNjUgMCBSIC9XaWR0
+	aHMgNjYgMCBSIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDIyMiAvRW5jb2RpbmcgL01h
+	Y1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjY3IDAgb2JqCihVbnRpdGxlZCkKZW5kb2Jq
+	CjY4IDAgb2JqCihNYWMgT1MgWCAxMC42LjggUXVhcnR6IFBERkNvbnRleHQpCmVuZG9i
+	ago2OSAwIG9iagooU2NvdHQgTWFpbikKZW5kb2JqCjcwIDAgb2JqCihPbW5pR3JhZmZs
+	ZSBQcm9mZXNzaW9uYWwpCmVuZG9iago3MSAwIG9iagooRDoyMDEyMDEwNDAyNDY1MVow
+	MCcwMCcpCmVuZG9iagoxIDAgb2JqCjw8IC9UaXRsZSA2NyAwIFIgL0F1dGhvciA2OSAw
+	IFIgL1Byb2R1Y2VyIDY4IDAgUiAvQ3JlYXRvciA3MCAwIFIgL0NyZWF0aW9uRGF0ZQo3
+	MSAwIFIgL01vZERhdGUgNzEgMCBSID4+CmVuZG9iagp4cmVmCjAgNzIKMDAwMDAwMDAw
+	MCA2NTUzNSBmIAowMDAwMDUyMjM4IDAwMDAwIG4gCjAwMDAwMjY2OTQgMDAwMDAgbiAK
+	MDAwMDAwMzMxNyAwMDAwMCBuIAowMDAwMDIzOTUxIDAwMDAwIG4gCjAwMDAwMDAwMjIg
+	MDAwMDAgbiAKMDAwMDAwMzI5NyAwMDAwMCBuIAowMDAwMDAzNDIxIDAwMDAwIG4gCjAw
+	MDAwMTY4OTQgMDAwMDAgbiAKMDAwMDAwNjc1NSAwMDAwMCBuIAowMDAwMDA3Nzg1IDAw
+	MDAwIG4gCjAwMDAwMDQzODIgMDAwMDAgbiAKMDAwMDAwNTQxMyAwMDAwMCBuIAowMDAw
+	MDA1NDMzIDAwMDAwIG4gCjAwMDAwMDY3MzQgMDAwMDAgbiAKMDAwMDAwMzc2MCAwMDAw
+	MCBuIAowMDAwMDE1OTk3IDAwMDAwIG4gCjAwMDAwMzY5NTAgMDAwMDAgbiAKMDAwMDAw
+	MzkxNiAwMDAwMCBuIAowMDAwMDA0MjI3IDAwMDAwIG4gCjAwMDAwMDQwNzIgMDAwMDAg
+	biAKMDAwMDA0MzkzMyAwMDAwMCBuIAowMDAwMDUxODcwIDAwMDAwIG4gCjAwMDAwMTQ5
+	ODIgMDAwMDAgbiAKMDAwMDAxNTAzMCAwMDAwMCBuIAowMDAwMDE1MDc1IDAwMDAwIG4g
+	CjAwMDAwMTUxMjIgMDAwMDAgbiAKMDAwMDAxNzc5MCAwMDAwMCBuIAowMDAwMDI2MDQ5
+	IDAwMDAwIG4gCjAwMDAwMjU0MDQgMDAwMDAgbiAKMDAwMDAyNDc1OSAwMDAwMCBuIAow
+	MDAwMDI0MTE0IDAwMDAwIG4gCjAwMDAwMjM5MTQgMDAwMDAgbiAKMDAwMDAwOTIxNiAw
+	MDAwMCBuIAowMDAwMDEwNjA3IDAwMDAwIG4gCjAwMDAwMTA2MjggMDAwMDAgbiAKMDAw
+	MDAxNDk2MSAwMDAwMCBuIAowMDAwMDA3ODA1IDAwMDAwIG4gCjAwMDAwMDkxOTUgMDAw
+	MDAgbiAKMDAwMDAxNTE2OSAwMDAwMCBuIAowMDAwMDE1OTc3IDAwMDAwIG4gCjAwMDAw
+	MTYwMzQgMDAwMDAgbiAKMDAwMDAxNjg3NCAwMDAwMCBuIAowMDAwMDE2OTMwIDAwMDAw
+	IG4gCjAwMDAwMTc3NzAgMDAwMDAgbiAKMDAwMDAxNzgyNyAwMDAwMCBuIAowMDAwMDIz
+	ODkzIDAwMDAwIG4gCjAwMDAwMjQwMzQgMDAwMDAgbiAKMDAwMDAyNDczOSAwMDAwMCBu
+	IAowMDAwMDI1Mzg0IDAwMDAwIG4gCjAwMDAwMjYwMjkgMDAwMDAgbiAKMDAwMDAyNjY3
+	NCAwMDAwMCBuIAowMDAwMDI2ODU3IDAwMDAwIG4gCjAwMDAwMjY3NDIgMDAwMDAgbiAK
+	MDAwMDAyNjgzNSAwMDAwMCBuIAowMDAwMDI2OTUwIDAwMDAwIG4gCjAwMDAwMzYyMTgg
+	MDAwMDAgbiAKMDAwMDAzNjIzOSAwMDAwMCBuIAowMDAwMDM2NDcwIDAwMDAwIG4gCjAw
+	MDAwMzcxMzAgMDAwMDAgbiAKMDAwMDA0MzQ0NyAwMDAwMCBuIAowMDAwMDQzNDY4IDAw
+	MDAwIG4gCjAwMDAwNDM2OTMgMDAwMDAgbiAKMDAwMDA0NDEwOCAwMDAwMCBuIAowMDAw
+	MDUxMTcyIDAwMDAwIG4gCjAwMDAwNTExOTMgMDAwMDAgbiAKMDAwMDA1MTQxOCAwMDAw
+	MCBuIAowMDAwMDUyMDQ1IDAwMDAwIG4gCjAwMDAwNTIwNzIgMDAwMDAgbiAKMDAwMDA1
+	MjEyNCAwMDAwMCBuIAowMDAwMDUyMTUzIDAwMDAwIG4gCjAwMDAwNTIxOTYgMDAwMDAg
+	biAKdHJhaWxlcgo8PCAvU2l6ZSA3MiAvUm9vdCA0NyAwIFIgL0luZm8gMSAwIFIgL0lE
+	IFsgPDFkN2Q2ZDY1ZDAyMjlhMTBiMmNhNDlmYjEyOWNiZDE0Pgo8MWQ3ZDZkNjVkMDIy
+	OWExMGIyY2E0OWZiMTI5Y2JkMTQ+IF0gPj4Kc3RhcnR4cmVmCjUyMzU4CiUlRU9GCjEg
+	MCBvYmoKPDwvQXV0aG9yIChTY290dCBNYWluKS9DcmVhdGlvbkRhdGUgKEQ6MjAxMjAx
+	MDQwMjMwMDBaKS9DcmVhdG9yIChPbW5pR3JhZmZsZSBQcm9mZXNzaW9uYWwgNS4yKS9N
+	b2REYXRlIChEOjIwMTIwMTA0MDI0NjAwWikvUHJvZHVjZXIgNjggMCBSIC9UaXRsZSA2
+	NyAwIFIgPj4KZW5kb2JqCnhyZWYKMSAxCjAwMDAwNTM5NTYgMDAwMDAgbiAKdHJhaWxl
+	cgo8PC9JRCBbPDFkN2Q2ZDY1ZDAyMjlhMTBiMmNhNDlmYjEyOWNiZDE0PiA8MWQ3ZDZk
+	NjVkMDIyOWExMGIyY2E0OWZiMTI5Y2JkMTQ+XSAvSW5mbyAxIDAgUiAvUHJldiA1MjM1
+	OCAvUm9vdCA0NyAwIFIgL1NpemUgNzI+PgpzdGFydHhyZWYKNTQxMjcKJSVFT0YK
+	</data>
+	<key>QuickLookThumbnail</key>
+	<data>
+	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
+	cHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR
+	ZGVzYwAAAVAAAABiZHNjbQAAAbQAAAJCY3BydAAAA/gAAADQd3RwdAAABMgAAAAUclhZ
+	WgAABNwAAAAUZ1hZWgAABPAAAAAUYlhZWgAABQQAAAAUclRSQwAABRgAAAgMYWFyZwAA
+	DSQAAAAgdmNndAAADUQAAAYSbmRpbgAAE1gAAAY+Y2hhZAAAGZgAAAAsbW1vZAAAGcQA
+	AAAoYlRSQwAABRgAAAgMZ1RSQwAABRgAAAgMYWFiZwAADSQAAAAgYWFnZwAADSQAAAAg
+	ZGVzYwAAAAAAAAAIRGlzcGxheQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1s
+	dWMAAAAAAAAAEgAAAAxubE5MAAAAFgAAAOhkYURLAAAAHAAAAP5wbFBMAAAAEgAAARpl
+	blVTAAAAEgAAASxuYk5PAAAAEgAAAT5mckZSAAAAFgAAAVBwdEJSAAAAGAAAAWZwdFBU
+	AAAAFgAAAX56aENOAAAADAAAAZRlc0VTAAAAEgAAAaBqYUpQAAAADgAAAbJydVJVAAAA
+	JAAAAcBzdlNFAAAAEAAAAeR6aFRXAAAADgAAAfRkZURFAAAAEAAAAgJmaUZJAAAAEAAA
+	AhJpdElUAAAAFAAAAiJrb0tSAAAADAAAAjYASwBsAGUAdQByAGUAbgAtAEwAQwBEAEwA
+	QwBEAC0AZgBhAHIAdgBlAHMAawDmAHIAbQBLAG8AbABvAHIAIABMAEMARABDAG8AbABv
+	AHIAIABMAEMARABGAGEAcgBnAGUALQBMAEMARABMAEMARAAgAGMAbwB1AGwAZQB1AHIA
+	TABDAEQAIABDAG8AbABvAHIAaQBkAG8ATABDAEQAIABhACAAQwBvAHIAZQBzX2mCcgAg
+	AEwAQwBEAEwAQwBEACAAYwBvAGwAbwByMKsw6TD8ACAATABDAEQEJgQyBDUEQgQ9BD4E
+	OQAgBBYEGgAtBDQEOARBBD8EOwQ1BDkARgDkAHIAZwAtAEwAQwBEX2mCcm2yZnaYb3k6
+	VmgARgBhAHIAYgAtAEwAQwBEAFYA5AByAGkALQBMAEMARABMAEMARAAgAGMAbwBsAG8A
+	cgBpzuy37AAgAEwAQwBEAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSwgSW5jLiwgMjAx
+	MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNSAAEAAAABFs9YWVogAAAAAAAA
+	bzEAADljAAABg1hZWiAAAAAAAABg7gAAt2oAAAgSWFlaIAAAAAAAACa3AAAPMgAAyZdj
+	dXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBe
+	AGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA
+	4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8
+	AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksC
+	VAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNa
+	A2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoE
+	qAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYn
+	BjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH
+	+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7
+	ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMM
+	XAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7u
+	DwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR
+	6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUS
+	FTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoY
+	rxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7
+	HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJgg
+	xCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4
+	JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIq
+	NSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9a
+	L5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1
+	EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrv
+	Oy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlB
+	akGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgF
+	SEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBP
+	SU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFap
+	VvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxe
+	vV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmbo
+	Zz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv
+	0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjM
+	eSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCC
+	koL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/Ixj
+	jMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X
+	Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2
+	oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCt
+	RK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjR
+	uUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7F
+	S8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+
+	0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLf
+	Kd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG
+	7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf6
+	5/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAAoO
+	dmNndAAAAAAAAAAAAAMBAAACAAAABwAeAEoAiwDjASoBbgHAAhkCdALaA0kDwwRHBNQF
+	bQYRBsIHfAg+CQcJ3Qq5C5wMjw2nDtwQEBFLEokTyRURFlwXrBkEGmEbvR0gHowf+CFk
+	ItokTiXJJy8ojinrK0ksny32L0MwjTHQMw00QjVzNpw3wDjgOf07FzwrPTk+RT9SQGNB
+	c0KEQ5dEq0W/RtNH6Uj/ShVLLExDTVtOaU92UIVRklKfU6tUt1XCVstX0ljZWd9a41vo
+	XO1d6F7cX85gv2GvYp5jjWR6ZWZmUWc7aCRpDmn2at9rxmypbY1ucG9TcDdxGnH8ct5z
+	wHSjdYV2ZndJeCt5Cnnqesx7sHyYfYR+d39xgHKBeoKKg6GEvYXfhwmIPIlwiqOL1o0K
+	jjyPbZCekc6S/ZQslVuWipe2mOCaC5s1nF+diZ6yn9uhBKIto1akf6WoptGn+Kkgqkyr
+	fKyyrfGvOrCPse+zW7TPtk+31Lk8unS7qbzcvgu/M8BWwXHChcORxJbFlsaRx4jIg8mH
+	yo3LjcyFzXTOV88uz/vQwNF70jbS9tPX1LnVmtZ911/YQtkl2gna7dvR3LXdmt5932Dg
+	ROEp4hDi+ePm5NblyebB57vouem56qXrjux27V7uRe8r8BDw9fHa8r7zofSF9Wj2S/cv
+	+BP49/nc+sD7ovyE/WX+RP8i//8AAAAGABoAQAB4AMUBEwFMAZAB3wIzAo4C8wNfA9YE
+	VQTdBXAGDga3B2UIGgjaCZwKZwtCDD0NVA5oD4AQoBHBEukUFRVEFnkXrxjvGi4bchy8
+	HgsfViCqIf8jQSSBJb8m/Cg3KWoqnSvLLPIuFS8zMEgxWzJnM3E0eTV9Nno3ajhbOUw6
+	PTswPCI9FT4IPvo/7UDhQdVCykO+RLNFp0aYR4hId0loSllLSEw4TSdOFU8ET/RQ4lHR
+	UsBTsFSeVYhWc1deWElZM1odWwZb7lzWXb1eo1+KYG9hVGI0Ywxj4mS5ZY9mZmc8aBFo
+	5mm7apFrZWw6bQ9t4263b4hwWXErcfxyznOgdHJ1Q3YVdud3uXiMeV56MHsCe9d8r32L
+	fm1/VYBEgTqCOYM9hEiFWIZuh4eIpYnDiuGL/o0cjjmPVpBzkZCSrJPJlOaWApccmDaZ
+	UZptm4ucrJ3QnvagIqFQooOjuaTxpi6ncai0qferOax8rb6vALBBsYOyxbQFtUe2iLfH
+	uQe6RbuCvL299L8mwFPBe8Kew7vE1cXpxvfIBMkTyiHLL8w9zUzOWs9o0HfRhtKV06LU
+	r9W81snX1tjl2fTbA9wU3SXeON9M4Gfho+Lp5CflWuaG56rox+nh6vjsDu0l7j/vW/CA
+	8dDzM/ST9fP3Uvi0+hj7hfz4/nf//wAAAAQAEQAqAE4AgADAAQcBOgF0AbcCAgJNAqAC
+	+wNeA8oEPAS2BTgFwgZQBuMHewgbCMcJjQpjCzwMGwz+DeIOyw+1EKURmBKOE4gUhRWG
+	FosXkxifGasauBu9HL0dvh6/H74guyG1IqsjnSSLJXUmXCdAKCIpACnbKrcriyxWLSAt
+	6i61L4AwSzEWMeEyqzN1ND81CTXTNp03aDg0OPg5vjqFO0s8EjzaPaI+aj8yP/xAxkGR
+	Ql1DKkP3RMNFj0ZbRydH8ki+SYpKVkshS+tMtk2ATkxPFk/hUKtRc1I7UwJTylSSVVpW
+	IFbnV65YdVk7WgJayVuPXFNdFl3ZXptfXWAdYN1hnWJdYxxj2mSYZVZmE2bPZ4toRWkA
+	abtqdmsxa+xsp21ibhxu12+TcE5xCHHBcnpzM3PsdKV1XnYXds93h3g/ePh5sHppeyB7
+	2XyUfVR+GX7lf7iAlIF5gmaDXIRZhVuGZYd1iIWJloqmi7aMxo3VjuWP9JEDkhOTIpQw
+	lTqWQ5dKmFGZWZpim2+cf52Tnqyfy6DvoiWjeaTQpienfqjWqi2rhKzbrjGviLDesjaz
+	i7TftjO3h7jcujO7irzivjy/mMD2wlTDtcUnxqTILcnFy2vNJM7s0MfSsdSp1rDYwdrd
+	3QDfMOGn5Ibniuq37g/xiPUY+LX8V///AABuZGluAAAAAAAABjYAAKXjAABWoQAAUVsA
+	AKcrAAAlmwAADhQAAFANAABUOQACQo8AAdmZAAFHrgADAQAAAgAAAA0AJwBGAGYAhwCo
+	AMkA6wEOATEBVQF6AZ0BvAHbAfwCHQI/AmIChgKqAs8C9AMbA0EDaAOQA7kD4gQLBDUE
+	YASMBLgE5AUSBT8FbgWhBdUGCgZBBngGsgbsBygHZwenB+kILgh1CL8JCwlaCawKAQpY
+	CrILDgtuC9IMOAygDQgNcg3eDkoOuQ8oD5oQDRCBEPcRbxHoEmMS3xNiE+cUbRT2FYEW
+	DhadFy8XwxhbGPUZkRoxGtMbdxwdHNAdhx5CHwAfwSCFIU0iGSLoI7skkSVqJkYnJSgM
+	KPUp4irSK8Qsui2zLrAvrzCyMbgywDPLNN418TcEOBU5IzotOzE8MD0qPiA/EkACQO9B
+	20K/Q6JEiEVvRlhHQkgvSR5KD0sDS/hM8E3qTuVP4lDhUeRS61PzVP1WCVcXWCdZOVpN
+	W2Nce12VXrBfzmDtYg5jM2RZZX9mo2fFaONp/WsSbCFtKm4uby1wKXEichZzCXP6dOl2
+	GndNeIR5v3r+fEV9k37rgE2Bu4M0hLmGSYfjiYeLIYyujkCP4JGRk1iVPZdJmXebxZ4b
+	oA6iAqP5pfKn7qnsq+yt76/1sf20CLYbuC+6RLxZvmnAdsJ+xIDGfch2ymzMYM6L0LjS
+	6tUh113Zn9vm3jHggeLV5SvniOnn7EfuqvEQ83v17fhm+uf9cP//AAAADwAuAFEAdQCa
+	AL8A5AELATIBWwGEAakBywHvAhQCOgJgAogCsALZAwMDLQNZA4UDsQPfBA0EPARrBJsE
+	zQT+BTEFZAWcBdUGDwZMBokGyAcKB00HkgfaCCUIcgjCCRYJbAnGCiMKggrlC0oLugwr
+	DJ8NFQ2MDgYOgg8AD4EQAxCIEQ4RlxIiEq8TQBPVFG0VBhWiFkEW4heGGC0Y1hmBGjAa
+	4BuTHEgdBB3CHoMfRiAMINYhoiJzI0YkHiT4JdYmtyegKJcpkSqOK44ski2aLqYvtTDI
+	Md4y9zQVNTo2YzeOOL057zslPF89mz7bQB5BZEKvQ/tFRUaLR8tJBUo3S2JMhk2mTsFP
+	2lDwUgRTFlQqVUBWWVdzWI9ZrlrOW/FdFl49X2ZgkWG+Yu5kI2VYZo9nxmj9ajRraWye
+	bdFvAnAycWByjnO7dOh2D3c3eGB5i3q4e+d9F35Jf32AsoHqgyOEXYWahtiIF4lZip6L
+	5I0tjniPxpEYkm+TzJUwlpuYDpmJmwyclZ4nn8ehaaMMpLKmWqgEqbCrX60QrsOweLIv
+	s+i1p7dpuS268ry6voLATMIXw+PFsMd8yUrLGczQzlXP49F60x7UztaL2FPaJtwB3eLf
+	xuGr44/lcudT6Rvqn+wn7bHvPvDO8l/z7/WA9w/4mfoe+5/9Gv6P//8AAAAXAEEAcACf
+	AM8A/wEyAWYBmQHFAfMCIgJSAoQCtwLsAyEDWAOQA8kEAwQ+BHoEtwT1BTUFdgW9BgUG
+	TwabBuoHOweQB+gIRAikCQgJcAncCkwKwAs3C7oMQgzMDVkN6g5+DxUPsBBPEPERlhI+
+	EukTnRRTFQ0VyhaJF0wYEhjaGaUachtBHBMc6x3GHqQfhiBrIVQiQSMyJCclHyYbJxoo
+	ICkrKjkrSyxhLXwumi+9MOQyDjM8NHI1rjbvODU5gTrSPCg9hD7mQExBt0MrRKRGIUej
+	SSlKtUxETdhPcFEMUrBUW1YJV71Zdls0XPhewGCNYl5kNmYMZ9lpmmtJbOlueW/8cXRy
+	5XRQdbN3EXhyedR7Onyhfgt/eIDngliDzIVChrqINIm2iz2MyY5Zj+uRfpMRlKKWL5e5
+	mT6av5w8nbafBaBMoZWi36QqpXemxagVqWaquqwOrWSuvLAVsXCyy7QotYq27bhRube7
+	HryGve6/V8DBwivDlcT/xmrH1MlAyqvMFs1zzsrQG9Fo0qzT6tUj1lfXgtio2cra5dv8
+	3RDeH98r4DXhOuI+40DkQOU+5jrnN+gx6SrqIusO6+nsue137jXu7O+l8FnxCvG88mbz
+	EPO49Fz1APWi9kL24vd/+Bz4uflV+fD6jPsn+8L8Xvz4/ZP+L/7J/2T//wAAc2YzMgAA
+	AAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAAwGxtbW9kAAAAAAAABhAA
+	AJyxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	</data>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>RowAlign</key>
+	<integer>1</integer>
+	<key>RowSpacing</key>
+	<real>36</real>
+	<key>SheetTitle</key>
+	<string>Canvas 1</string>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>YES</string>
+	<key>UniqueID</key>
+	<integer>1</integer>
+	<key>UseEntirePage</key>
+	<false/>
+	<key>VPages</key>
+	<integer>1</integer>
+	<key>WindowInfo</key>
+	<dict>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>ExpandedCanvases</key>
+		<array>
+			<dict>
+				<key>name</key>
+				<string>Canvas 1</string>
+			</dict>
+		</array>
+		<key>Frame</key>
+		<string>{{300, -1}, {710, 874}}</string>
+		<key>ListView</key>
+		<true/>
+		<key>OutlineWidth</key>
+		<integer>142</integer>
+		<key>RightSidebar</key>
+		<false/>
+		<key>ShowRuler</key>
+		<true/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>120</integer>
+		<key>VisibleRegion</key>
+		<string>{{4, 0}, {561, 705}}</string>
+		<key>Zoom</key>
+		<real>1</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>1</real>
+				<real>1</real>
+			</array>
+		</array>
+	</dict>
+	<key>saveQuickLookFiles</key>
+	<string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/resources/res-selection-flowchart.png b/docs/html/images/resources/res-selection-flowchart.png
index eb70074..5de7688 100644
--- a/docs/html/images/resources/res-selection-flowchart.png
+++ b/docs/html/images/resources/res-selection-flowchart.png
Binary files differ
diff --git a/docs/html/images/resources/resource_devices_diagram.graffle b/docs/html/images/resources/resource_devices_diagram.graffle
new file mode 100644
index 0000000..ab71dd1
--- /dev/null
+++ b/docs/html/images/resources/resource_devices_diagram.graffle
@@ -0,0 +1,4358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActiveLayerIndex</key>
+	<integer>5</integer>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGrafflePro</string>
+		<string>138.9.0.117994</string>
+	</array>
+	<key>AutoAdjust</key>
+	<true/>
+	<key>BackgroundGraphic</key>
+	<dict>
+		<key>Bounds</key>
+		<string>{{0, 0}, {578.8, 754.8}}</string>
+		<key>Class</key>
+		<string>SolidGraphic</string>
+		<key>FontInfo</key>
+		<dict>
+			<key>Font</key>
+			<string>Helvetica</string>
+			<key>Size</key>
+			<real>12</real>
+		</dict>
+		<key>ID</key>
+		<integer>2</integer>
+		<key>Style</key>
+		<dict>
+			<key>shadow</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+			<key>stroke</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+		</dict>
+	</dict>
+	<key>CanvasOrigin</key>
+	<string>{0, 0}</string>
+	<key>ColumnAlign</key>
+	<integer>1</integer>
+	<key>ColumnSpacing</key>
+	<real>36</real>
+	<key>CreationDate</key>
+	<string>2007-11-06 13:31:34 -0800</string>
+	<key>Creator</key>
+	<string>mcleron</string>
+	<key>DisplayScale</key>
+	<string>1 0/72 in = 1.0000 in</string>
+	<key>GraphDocumentVersion</key>
+	<integer>6</integer>
+	<key>GraphicsList</key>
+	<array>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ControlPoints</key>
+			<array>
+				<string>{-14.7983, -8.44159}</string>
+				<string>{27.0848, -19.9415}</string>
+			</array>
+			<key>ID</key>
+			<integer>224</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Points</key>
+			<array>
+				<string>{220.383, 373.377}</string>
+				<string>{149.489, 383.117}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Bezier</key>
+					<true/>
+					<key>HeadArrow</key>
+					<string>SharpArrow</string>
+					<key>HeadScale</key>
+					<real>2.0000002384185791</real>
+					<key>LineType</key>
+					<integer>1</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{210.846, 347.666}, {87, 12}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>305</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Join</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs20 \cf0 default resources}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{406.066, 448.914}, {88, 12}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>ID</key>
+			<integer>303</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Join</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs20 \cf0 Android Device B}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{94.337, 448.914}, {87, 12}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>ID</key>
+			<integer>302</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Join</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs20 \cf0 Android Device A}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{232.539, 363.643}, {20.2114, 20.2114}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>28</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.658730149269104</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{273.71, 364.425}, {19.429, 19.4289}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>198</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.72222220897674561</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+\
+\
+\
+}</string>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{314.098, 363.643}, {20.2114, 20.2114}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>197</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Rotation</key>
+			<real>180</real>
+			<key>Shape</key>
+			<string>VerticalTriangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.51587307453155518</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{130.583, 404.24}, {14.5085, 14.5085}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>285</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.658730149269104</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{130.843, 357.029}, {13.9886, 13.9886}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>288</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.72222220897674561</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+\
+\
+\
+}</string>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{130.025, 379.747}, {14.5085, 14.5085}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>281</integer>
+			<key>Layer</key>
+			<integer>0</integer>
+			<key>Rotation</key>
+			<real>180</real>
+			<key>Shape</key>
+			<string>VerticalTriangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.51587307453155518</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{439.584, 383.552}, {9.66876, 9.66877}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>1192</integer>
+			<key>Layer</key>
+			<integer>1</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.658730149269104</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{439.929, 355.759}, {9.45554, 9.45549}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>1191</integer>
+			<key>Layer</key>
+			<integer>1</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.72222220897674561</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+\
+\
+\
+}</string>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{439.691, 369.709}, {9.45554, 9.45554}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>1190</integer>
+			<key>Layer</key>
+			<integer>1</integer>
+			<key>Rotation</key>
+			<real>180</real>
+			<key>Shape</key>
+			<string>VerticalTriangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.51587307453155518</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ControlPoints</key>
+			<array>
+				<string>{22.3508, -10.3896}</string>
+				<string>{-22.3872, -12.3377}</string>
+			</array>
+			<key>ID</key>
+			<integer>284</integer>
+			<key>Layer</key>
+			<integer>1</integer>
+			<key>Points</key>
+			<array>
+				<string>{343.623, 375.974}</string>
+				<string>{418.231, 377.922}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Bezier</key>
+					<true/>
+					<key>HeadArrow</key>
+					<string>SharpArrow</string>
+					<key>HeadScale</key>
+					<real>2.0000002384185791</real>
+					<key>LineType</key>
+					<integer>1</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{250.417, 404.24}, {65, 12}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>ID</key>
+			<integer>304</integer>
+			<key>Layer</key>
+			<integer>1</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Join</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs20 \cf0 Android App}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{210.339, 344.24}, {145.157, 52.561}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>13</integer>
+			<key>Layer</key>
+			<integer>1</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.94898</string>
+						<key>g</key>
+						<string>0.94898</string>
+						<key>r</key>
+						<string>0.94898</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{463.897, 367.129}, {15.0187, 15.0187}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>223</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.14902</string>
+						<key>g</key>
+						<string>0.690196</string>
+						<key>r</key>
+						<string>0.482353</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.0726494</string>
+						<key>g</key>
+						<string>0.663043</string>
+						<key>r</key>
+						<string>0.201281</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{411.352, 367.129}, {14.4373, 14.4372}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>222</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.14902</string>
+						<key>g</key>
+						<string>0.690196</string>
+						<key>r</key>
+						<string>0.482353</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.0726494</string>
+						<key>g</key>
+						<string>0.663043</string>
+						<key>r</key>
+						<string>0.201281</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{437.624, 366.137}, {14.4373, 14.4373}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>221</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Rotation</key>
+			<real>180</real>
+			<key>Shape</key>
+			<string>VerticalTriangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.14902</string>
+						<key>g</key>
+						<string>0.690196</string>
+						<key>r</key>
+						<string>0.482353</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.0726494</string>
+						<key>g</key>
+						<string>0.663043</string>
+						<key>r</key>
+						<string>0.201281</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{249.852, 448.914}, {65, 12}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>ID</key>
+			<integer>307</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Join</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs20 \cf0 Android App}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{210.846, 393.24}, {113, 12}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>10</real>
+			</dict>
+			<key>ID</key>
+			<integer>306</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Draws</key>
+					<string>NO</string>
+					<key>Join</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs20 \cf0 alternative resources B}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ControlPoints</key>
+			<array>
+				<string>{25.974, 6.07614}</string>
+				<string>{-17.8177, 38.3117}</string>
+			</array>
+			<key>ID</key>
+			<integer>275</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Points</key>
+			<array>
+				<string>{343.247, 423.794}</string>
+				<string>{425.315, 385.714}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>Bezier</key>
+					<true/>
+					<key>HeadArrow</key>
+					<string>SharpArrow</string>
+					<key>HeadScale</key>
+					<real>2.0000002384185791</real>
+					<key>LineType</key>
+					<integer>1</integer>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{232.539, 409.334}, {20.2114, 20.2114}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>201</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.14902</string>
+						<key>g</key>
+						<string>0.690196</string>
+						<key>r</key>
+						<string>0.482353</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.0726494</string>
+						<key>g</key>
+						<string>0.663043</string>
+						<key>r</key>
+						<string>0.201281</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{273.71, 409.334}, {19.429, 19.4289}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>200</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.14902</string>
+						<key>g</key>
+						<string>0.690196</string>
+						<key>r</key>
+						<string>0.482353</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.0726494</string>
+						<key>g</key>
+						<string>0.663043</string>
+						<key>r</key>
+						<string>0.201281</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{314.098, 409.334}, {20.2114, 20.2114}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>199</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Rotation</key>
+			<real>180</real>
+			<key>Shape</key>
+			<string>VerticalTriangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.14902</string>
+						<key>g</key>
+						<string>0.690196</string>
+						<key>r</key>
+						<string>0.482353</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.0726494</string>
+						<key>g</key>
+						<string>0.663043</string>
+						<key>r</key>
+						<string>0.201281</string>
+					</dict>
+					<key>Width</key>
+					<real>3</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{210.846, 344.24}, {144.65, 96.4999}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>296</integer>
+			<key>Layer</key>
+			<integer>2</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.94898</string>
+						<key>g</key>
+						<string>0.94898</string>
+						<key>r</key>
+						<string>0.94898</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1189</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{402.118, 422.794}</string>
+				<string>{497.604, 422.794}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>AllowLabelDrop</key>
+			<false/>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1169</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{449.566, 409.334}</string>
+				<string>{449.566, 429.545}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{492.061, 377.855}, {6, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>35</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.26087</string>
+						<key>g</key>
+						<string>0.26087</string>
+						<key>r</key>
+						<string>0.26087</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{492.061, 365.017}, {6, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>34</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.26087</string>
+						<key>g</key>
+						<string>0.26087</string>
+						<key>r</key>
+						<string>0.26087</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{492.061, 390.801}, {6, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>33</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.26087</string>
+						<key>g</key>
+						<string>0.26087</string>
+						<key>r</key>
+						<string>0.26087</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{492.061, 352.179}, {6, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>32</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.26087</string>
+						<key>g</key>
+						<string>0.26087</string>
+						<key>r</key>
+						<string>0.26087</string>
+					</dict>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>58</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{441.483, 409.334}</string>
+				<string>{441.483, 429.545}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>57</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{457.656, 409.334}</string>
+				<string>{457.656, 429.004}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>54</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{402.118, 415.794}</string>
+				<string>{497.424, 415.794}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>53</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{402.118, 429.794}</string>
+				<string>{497.604, 429.794}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1184</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{489.983, 409.334}</string>
+				<string>{489.983, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1185</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{481.899, 409.334}</string>
+				<string>{481.899, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1187</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{465.732, 409.334}</string>
+				<string>{465.732, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>47</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{433.398, 409.334}</string>
+				<string>{433.398, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>46</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{417.231, 409.334}</string>
+				<string>{417.231, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1178</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{409.148, 409.334}</string>
+				<string>{409.148, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>44</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{425.315, 409.334}</string>
+				<string>{425.315, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>1186</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Points</key>
+			<array>
+				<string>{473.816, 409.334}</string>
+				<string>{473.816, 436.793}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{401.757, 408.794}, {95.8473, 28}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>1188</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.538043</string>
+						<key>g</key>
+						<string>0.538043</string>
+						<key>r</key>
+						<string>0.538043</string>
+					</dict>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{401.757, 350.24}, {85.4542, 48.5}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Copperplate-Bold</string>
+				<key>Size</key>
+				<real>36</real>
+			</dict>
+			<key>ID</key>
+			<integer>37</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>0.964211</string>
+						<key>r</key>
+						<string>0.859238</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>61</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.758265</string>
+						<key>g</key>
+						<string>0.768371</string>
+						<key>r</key>
+						<string>0.771739</string>
+					</dict>
+					<key>MiddleFraction</key>
+					<real>0.6428571343421936</real>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{396.214, 344.24}, {107.164, 61}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>36</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.695652</string>
+						<key>g</key>
+						<string>0.653375</string>
+						<key>r</key>
+						<string>0.591879</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{396.214, 379.74}, {107.164, 61}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>38</integer>
+			<key>Layer</key>
+			<integer>3</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.695652</string>
+						<key>g</key>
+						<string>0.653375</string>
+						<key>r</key>
+						<string>0.591879</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>69</integer>
+			<key>Layer</key>
+			<integer>4</integer>
+			<key>Points</key>
+			<array>
+				<string>{111.671, 427.852}</string>
+				<string>{162.888, 428.116}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>YES</string>
+					<key>Fuzziness</key>
+					<real>1.9227640628814697</real>
+					<key>ShadowVector</key>
+					<string>{0, 1}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>66</integer>
+			<key>Layer</key>
+			<integer>4</integer>
+			<key>Points</key>
+			<array>
+				<string>{124.664, 428.248}</string>
+				<string>{124.664, 434.529}</string>
+				<string>{125.058, 434.529}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>65</integer>
+			<key>Layer</key>
+			<integer>4</integer>
+			<key>Points</key>
+			<array>
+				<string>{149.489, 428.273}</string>
+				<string>{149.489, 434.553}</string>
+				<string>{149.883, 434.553}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>64</integer>
+			<key>Layer</key>
+			<integer>4</integer>
+			<key>Points</key>
+			<array>
+				<string>{137.077, 428.273}</string>
+				<string>{137.077, 434.553}</string>
+				<string>{137.471, 434.553}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>YES</string>
+					<key>ShadowVector</key>
+					<string>{0, 0}</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{95.118, 366.783}, {84.3242, 51.2171}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Copperplate-Bold</string>
+				<key>Size</key>
+				<real>36</real>
+			</dict>
+			<key>ID</key>
+			<integer>5</integer>
+			<key>Layer</key>
+			<integer>4</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Rotation</key>
+			<real>90</real>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.96285</string>
+						<key>g</key>
+						<string>1</string>
+						<key>r</key>
+						<string>0.928013</string>
+					</dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>320</real>
+					<key>GradientColor</key>
+					<dict>
+						<key>b</key>
+						<string>0.758265</string>
+						<key>g</key>
+						<string>0.768371</string>
+						<key>r</key>
+						<string>0.771739</string>
+					</dict>
+					<key>MiddleFraction</key>
+					<real>0.73809522390365601</real>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>AllowConnections</key>
+			<string>NO</string>
+			<key>Bounds</key>
+			<string>{{89.1621, 360.281}, {96.4999, 64.4173}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>4</integer>
+			<key>Layer</key>
+			<integer>4</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{0, 1}</string>
+				<string>{0, -1}</string>
+				<string>{1, 0}</string>
+				<string>{-1, 0}</string>
+			</array>
+			<key>Rotation</key>
+			<real>90</real>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.641335</string>
+						<key>g</key>
+						<string>0.695652</string>
+						<key>r</key>
+						<string>0.651805</string>
+					</dict>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>CornerRadius</key>
+					<real>5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{440.23, 353.676}, {11.832, 11.8319}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>1193</integer>
+			<key>Layer</key>
+			<integer>5</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>FillType</key>
+					<integer>2</integer>
+					<key>GradientAngle</key>
+					<real>90</real>
+					<key>MiddleFraction</key>
+					<real>0.72222220897674561</real>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Cap</key>
+					<integer>0</integer>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0.362245</string>
+						<key>g</key>
+						<string>0.362245</string>
+						<key>r</key>
+						<string>0.362245</string>
+					</dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 \
+\
+\
+\
+}</string>
+			</dict>
+		</dict>
+	</array>
+	<key>GridInfo</key>
+	<dict/>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>HPages</key>
+	<integer>1</integer>
+	<key>ImageCounter</key>
+	<integer>3</integer>
+	<key>KeepToScale</key>
+	<false/>
+	<key>Layers</key>
+	<array>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>Constants</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>defaults</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>alternates</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Lock</key>
+			<string>YES</string>
+			<key>Name</key>
+			<string>Device A</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+		<dict>
+			<key>Lock</key>
+			<string>YES</string>
+			<key>Name</key>
+			<string>Device B</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+		<dict>
+			<key>Lock</key>
+			<string>YES</string>
+			<key>Name</key>
+			<string>balance</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+	</array>
+	<key>LayoutInfo</key>
+	<dict>
+		<key>Animate</key>
+		<string>NO</string>
+		<key>circoMinDist</key>
+		<real>18</real>
+		<key>circoSeparation</key>
+		<real>0.0</real>
+		<key>layoutEngine</key>
+		<string>dot</string>
+		<key>neatoSeparation</key>
+		<real>0.0</real>
+		<key>twopiSeparation</key>
+		<real>0.0</real>
+	</dict>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2010-04-02 16:18:16 -0700</string>
+	<key>Modifier</key>
+	<string>Scott Main</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>Orientation</key>
+	<integer>2</integer>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>OutlineStyle</key>
+	<string>Basic</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>18.6</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>16.6</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>16.6</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18.6</string>
+		</array>
+	</dict>
+	<key>PrintOnePage</key>
+	<false/>
+	<key>QuickLookPreview</key>
+	<data>
+	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
+	S1IlKwmQEy/9rTBxdnpz/hu2vXgxwctqPIsJpRxZR5e//WbaCP4hLt9VL02no9IM9kKi
+	lXnoYK9N5nVTRxJnzHjlYC/UfCTcsqu0Q5riDW0wD0deaI8GtN2bvYzF0V5MGDgOwWOx
+	F11ZA5gndjQJyHsTl1aEuEN1dOEPT9PFyEXq7LrJbVobudhspI5cvn387e3D4+3JywV9
+	SWtn+nguJwa5iLkif3PwQihx0UE64RZTOL6m+AyON17kcitwRfLM8Tc3dwhcozLhYqZC
+	OeA59hXLsgF3rbQ6Vxv88Pj6+1/ffcJZP77/lb+5+9h34A+CGFXpHwTRAdx55B/4Uw/+
+	bksqjzxL5IyMY8rfZTkJbs50PPkik0paPLjskZMf53L58xHpw2X6gUPtgTV3BkqezsZx
+	kmEhVVIimNJP431wB8Tpj0dPVEHpeZWgPOkio4SdP3m7A5Pz6cZ5XEZcK6HEOk4LdRco
+	tl0+P1IyDOiQWDL27XwpD9DOlJyBLxGUw8wdWOOLYzcyybrOV9uFEq7l6r9z78ErCmVu
+	ZHN0cmVhbQplbmRvYmoKNiAwIG9iago0NjYyCmVuZG9iagozIDAgb2JqCjw8IC9UeXBl
+	IC9QYWdlIC9QYXJlbnQgNCAwIFIgL1Jlc291cmNlcyA3IDAgUiAvQ29udGVudHMgNSAw
+	IFIgL01lZGlhQm94IFswIDAgNTc5IDc1NV0KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1By
+	b2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9y
+	U3BhY2UgPDwgL0NzMSA4IDAgUgovQ3MyIDMwIDAgUiA+PiAvRm9udCA8PCAvRjEuMCAz
+	MSAwIFIgPj4gL1hPYmplY3QgPDwgL0ltOCAyNSAwIFIgL0ltNyAyMyAwIFIKL0ltMiAx
+	MiAwIFIgL0ltNCAxNiAwIFIgL0ltMSAxMCAwIFIgL0ltNSAxOSAwIFIgL0ltNiAyMSAw
+	IFIgL0ltOSAyOCAwIFIgL0ltMwoxNCAwIFIgPj4gL1NoYWRpbmcgPDwgL1NoMTAgMzgg
+	MCBSIC9TaDEgOSAwIFIgL1NoMiAxOCAwIFIgL1NoNSAzMyAwIFIgL1NoNAozMiAwIFIg
+	L1NoMyAyNyAwIFIgL1NoNiAzNCAwIFIgL1NoMTEgMzkgMCBSIC9TaDEyIDQwIDAgUiAv
+	U2g5IDM3IDAgUiAvU2g3CjM1IDAgUiAvU2g4IDM2IDAgUiA+PiA+PgplbmRvYmoKMzgg
+	MCBvYmoKPDwgL0NvbG9yU3BhY2UgOCAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBb
+	IDEwLjYwNTcgLTEwLjYwNTcgMTAuNjA1NjkgMTAuNjA1NwpdIC9Eb21haW4gWyAwIDEg
+	XSAvRXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gNDEgMCBSID4+CmVuZG9i
+	ago5IDAgb2JqCjw8IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29y
+	ZHMgWyA2LjQxNiAtNi40MTU5NSA2LjQxNTk5OSA2LjQxNTk1MgpdIC9Eb21haW4gWyAw
+	IDEgXSAvRXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gNDIgMCBSID4+CmVu
+	ZG9iagoxOCAwIG9iago8PCAvQ29sb3JTcGFjZSA4IDAgUiAvU2hhZGluZ1R5cGUgMiAv
+	Q29vcmRzIFsgLTQyLjY2MjEgMjYuMTA4NTUgMzMuMTIwMTEgLTM3LjQ4MDI2Cl0gL0Rv
+	bWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiA0MyAw
+	IFIgPj4KZW5kb2JqCjMzIDAgb2JqCjw8IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5n
+	VHlwZSAyIC9Db29yZHMgWyA1LjIyNzc2OCAtNS4yMjc3NDUgNS4yMjc3NjcKNS4yMjc3
+	NDYgXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0
+	aW9uIDQ0IDAgUiA+PgplbmRvYmoKMzIgMCBvYmoKPDwgL0NvbG9yU3BhY2UgOCAwIFIg
+	L1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDUuMjI3NzY4IC01LjIyNzc2OCA1LjIyNzc2
+	Ngo1LjIyNzc3IF0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBd
+	IC9GdW5jdGlvbiA0NSAwIFIgPj4KZW5kb2JqCjI3IDAgb2JqCjw8IC9Db2xvclNwYWNl
+	IDggMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyAtNDMuMjI3MSAtMjQuNzUgLTEu
+	OTE3NjkgNDkuNzc0MTYKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZh
+	bHNlIF0gL0Z1bmN0aW9uIDQ2IDAgUiA+PgplbmRvYmoKMzQgMCBvYmoKPDwgL0NvbG9y
+	U3BhY2UgOCAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDUuMzM0MzgxIC01LjMz
+	NDM4MyA1LjMzNDM3OAo1LjMzNDM4NSBdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsg
+	ZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gNDcgMCBSID4+CmVuZG9iagozOSAwIG9iago8
+	PCAvQ29sb3JTcGFjZSA4IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgMTAuMjE0
+	NSAtMTAuMjE0NDUgMTAuMjE0NSAxMC4yMTQ0NQpdIC9Eb21haW4gWyAwIDEgXSAvRXh0
+	ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gNDggMCBSID4+CmVuZG9iago0MCAw
+	IG9iago8PCAvQ29sb3JTcGFjZSA4IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsg
+	MTAuNjA1NyAtMTAuNjA1NyAxMC42MDU2OSAxMC42MDU3Cl0gL0RvbWFpbiBbIDAgMSBd
+	IC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiA0OSAwIFIgPj4KZW5kb2Jq
+	CjM3IDAgb2JqCjw8IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29y
+	ZHMgWyA3Ljc1NDI1IC03Ljc1NDI1IDcuNzU0MjQ2IDcuNzU0MjUzCl0gL0RvbWFpbiBb
+	IDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiA1MCAwIFIgPj4K
+	ZW5kb2JqCjM1IDAgb2JqCjw8IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5nVHlwZSAy
+	IC9Db29yZHMgWyA3Ljc1NDI1IC03Ljc1NDI1IDcuNzU0MjQ2IDcuNzU0MjUzCl0gL0Rv
+	bWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiA1MSAw
+	IFIgPj4KZW5kb2JqCjM2IDAgb2JqCjw8IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5n
+	VHlwZSAyIC9Db29yZHMgWyA3LjQ5NDMyNCAtNy40OTQzMjQgNy40OTQzMjEKNy40OTQz
+	MjcgXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0
+	aW9uIDUyIDAgUiA+PgplbmRvYmoKMjUgMCBvYmoKPDwgL0xlbmd0aCAyNiAwIFIgL1R5
+	cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAyMzYgL0hlaWdodCAxMDAg
+	L0NvbG9yU3BhY2UKNTMgMCBSIC9TTWFzayA1NCAwIFIgL0JpdHNQZXJDb21wb25lbnQg
+	OCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0DEBAAAAwqD1T20LL4hA
+	YcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YOA3MBSfAAEKZW5kc3RyZWFtCmVuZG9iagoyNiAwIG9iagozMzIKZW5kb2JqCjIzIDAg
+	b2JqCjw8IC9MZW5ndGggMjQgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFn
+	ZSAvV2lkdGggMjE2IC9IZWlnaHQgMTQyIC9Db2xvclNwYWNlCjU2IDAgUiAvU01hc2sg
+	NTcgMCBSIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K
+	c3RyZWFtCngB7dABDQAAAMKg909tDjeIQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgIGPgQFnfwABCmVuZHN0cmVhbQplbmRvYmoKMjQgMCBvYmoK
+	NDI1CmVuZG9iagoxMiAwIG9iago8PCAvTGVuZ3RoIDEzIDAgUiAvVHlwZSAvWE9iamVj
+	dCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDE0OCAvSGVpZ2h0IDIxNCAvQ29sb3JTcGFj
+	ZQo1OSAwIFIgL1NNYXNrIDYwIDAgUiAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIg
+	L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVPbQlPiEBhwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGPgMDHM3
+	AAEKZW5kc3RyZWFtCmVuZG9iagoxMyAwIG9iago0MzgKZW5kb2JqCjE2IDAgb2JqCjw8
+	IC9MZW5ndGggMTcgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lk
+	dGggMTI0IC9IZWlnaHQgMjIgL0NvbG9yU3BhY2UKNjIgMCBSIC9TTWFzayA2MyAwIFIg
+	L0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+	eAHt0AENAAAAwqD3T20ON4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DLwODB/4AAEKZW5kc3RyZWFtCmVuZG9iagoxNyAwIG9iago1OQplbmRvYmoKMTAgMCBv
+	YmoKPDwgL0xlbmd0aCAxMSAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdl
+	IC9XaWR0aCAxNzQgL0hlaWdodCAyMzggL0NvbG9yU3BhY2UKNjUgMCBSIC9TTWFzayA2
+	NiAwIFIgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+	dHJlYW0KeAHt0DEBAAAAwqD1T20ND4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgw8DIw5VsAAQplbmRzdHJlYW0KZW5kb2JqCjExIDAgb2JqCjU2NQplbmRvYmoKMTkg
+	MCBvYmoKPDwgL0xlbmd0aCAyMCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0lt
+	YWdlIC9XaWR0aCAyNjAgL0hlaWdodCAxNjYgL0NvbG9yU3BhY2UKNjggMCBSIC9TTWFz
+	ayA2OSAwIFIgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+	PgpzdHJlYW0KeAHt0AENAAAAwqD3T20PBxEoDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+	DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+	AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+	YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOB5YPnXAAEKZW5kc3RyZWFtCmVuZG9i
+	agoyMCAwIG9iago1ODcKZW5kb2JqCjIxIDAgb2JqCjw8IC9MZW5ndGggMjIgMCBSIC9U
+	eXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjYwIC9IZWlnaHQgMTY2
+	IC9Db2xvclNwYWNlCjY4IDAgUiAvU01hc2sgNzEgMCBSIC9CaXRzUGVyQ29tcG9uZW50
+	IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dABDQAAAMKg909tDwcR
+	KAwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+	gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+	MGDgeWD51wABCmVuZHN0cmVhbQplbmRvYmoKMjIgMCBvYmoKNTg3CmVuZG9iagoyOCAw
+	IG9iago8PCAvTGVuZ3RoIDI5IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1h
+	Z2UgL1dpZHRoIDMzNiAvSGVpZ2h0IDE1MCAvQ29sb3JTcGFjZQo3MyAwIFIgL1NNYXNr
+	IDc0IDAgUiAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+
+	CnN0cmVhbQp4Ae3QMQEAAADCoPVP7WkJiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+	AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+	wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+	GDBgwIABAwYMGDBgwIABAwYMGDBg4AMDTr4AAQplbmRzdHJlYW0KZW5kb2JqCjI5IDAg
+	b2JqCjY4MwplbmRvYmoKMTQgMCBvYmoKPDwgL0xlbmd0aCAxNSAwIFIgL1R5cGUgL1hP
+	YmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA0NiAvSGVpZ2h0IDU4IC9Db2xvclNw
+	YWNlCjc2IDAgUiAvU01hc2sgNzcgMCBSIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRl
+	ciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dABDQAAAMKg90/t7AERKAwYMGDAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgIEPDB9EAAEKZW5kc3RyZWFtCmVuZG9iagox
+	NSAwIG9iago1OAplbmRvYmoKNjAgMCBvYmoKPDwgL0xlbmd0aCA2MSAwIFIgL1R5cGUg
+	L1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAxNDggL0hlaWdodCAyMTQgL0Nv
+	bG9yU3BhY2UKL0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9G
+	bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHtnflXUlsfxrvVdRYVQRRBURTECTEUw1Bynsgc
+	KErFMQ0nckrL0jSnLDPHNKecTTNt0Mx61/3X3u8+QKcUTunh3vWu+57nh9qtvdg9fvb3
+	HPnpec6coUQRoAj87xH4w7oi8wMiJ2e/65wV9P2ws2fh7JN6M9oBH+fP/2llnT9//tw5
+	ZO9EvjA+YAfM2NjY2toZZU9KplNsbW1s4GAwZvD1W7iQI8yQDbixt3dwBDk5OTmTFhzi
+	BGc5ONjb2YEz8IVs/cYlYo6AEBhCdpycaTQXV1c3K8nV1cWFRnMGa8iXydUvUKGphkuz
+	sbNzcHSi0cAM3Z3BYDI9PFik5eHhwWQwGO50N1cXmjOyZXRFPO7o2sCRLThyBkPuDCaL
+	5clms705HA6XrDgcb28228uT5cFg0N1caE7gyga7QCJTRkt29uDIjc7wYHmxOVwfHs/P
+	359vDfn78Xi+PlxvtieL6Y5cOSBUMFWWTcEsASWA5ERzpTNYXt5cXx6fHygQBolEomCk
+	kFMK+3AwnBIkEATw/Xg+HLanB8PNxRlDRWTKaAlBAkccHx4/UCgKCQ0TiyMkEkkkScER
+	kghxeFhocJAgwJ/HZbOYdFfaL0zBzSFKjs4udKant49fgFAUKo6IlEbJZDEX5SbFnlim
+	T8rlF2Nk0dILEnFYSFAgn8f18nB3M5mycHuACR44zJIXl8cXBodLLkTHyC/FKZUJiUhJ
+	ZIQOSLisjFfEXpRJJeJQUaCfD5vFQKZs/zxvYaQQJhs7B6Dk4cX1CxSFSaQxsXGXE1NS
+	0zMys7JUqiukpFKpsrIy09NSkhKUCnl0pDhEyPf1xkzBoJ8zP+YIk629E43O9OL6C0LE
+	0phLysTUDFV2Tp5afe26hryuX1Pn5169kpmenBAnj5aEiQKQKVdnRzsbC6AwTI4w3mBJ
+	GCqRxSqT01U5as3NQm1JaVk5qIKE0OfLSkuKiwo06tzszJQERYxUDKbYLHcXJ7g9s6Aw
+	TA7OrgwWx08AlhSJaarcawXa0opKXXVtbV19vZ6U6uvr6mprdFW3yooLNfnZGclKOZji
+	+7CZMFIIlJkp/wNNkyONzvLmBYZIZHFJGVfVBcXlVdV1dxqbW+62tpFX692WpgZ9re5W
+	SaEmNysFTIUH+XM94fYcEKjjv/b+OPunrYMz3JwPXySOViRl5miKyqpq7zS13mvv6HzU
+	ZQU96ux40N7W0livqyi+mX8lVSmPDBXwvFl0AGX28mDCMUwcP2GYNDYxI0ejrajWN7c9
+	6Ozu6esfeDJIXk8G+nsfd3Xcv9tQW1lakK9KiZdFiPhcL4ark725y8OuzskVMAUES2KU
+	aVc12ls1Da3tj3r6B4eeD78YGRklq5GRF8NDTwd6uzramupvlxbkZSXGSsMAlIcbDS7v
+	+ECBJ3R1Ht48QZj0UrJKXVRR09jW8bj/6fDI+MTLqampaZKCI15OTowODz3pedTeUl9V
+	ciMnXSmTAChPdxfs8o4OFIwTXJ07i8sXRciU6bkFZdUNbR09T4ZGJ6ZmZufnFxYWXpPT
+	wsL8/NzM9OTY8NO+rvbmukqtWpUUK4WJYsPl2dkcH/I/0Di5MLx8A0MvxCaqrhVX6e92
+	9AwOj03NzC8uraysrq6ukRIcsLKyvLgwOz0x8qy/635jdfnNnLR4mTjIDy7PGQ3UUU5o
+	xJ3cmGyeMDw6LjXnZnltc3v3k+Hx6bnFlbWNN5ubm1skBUdsbqyvLM3PTI487e1o01dp
+	1ZkJckkwnwtPnoOtOU829jBOHH9RRIwyI19bpW971D80Nj2/tLaxtf1uZ2dnl6x2dt5t
+	v91cX1mYmXwx+Li9qaZMk518SRoa6OPFQG+DY0MOb0wHeGFy+cGR8sSs66XVTQ96no5O
+	zS2tbW7vvP/w0Tp6v7u9BaZejT/v72zV3yrISY2LCkcDhYbcjCdbB5q7p09gKDx12TfL
+	6+529j+fmFlc3dze/bi3j/SZlLAj9j6+39laX56fGhl8fL/xtjYfnjw0UEwYcrOeHGkw
+	4oKwKBinwso797oHR6bmVzbA0v7nL1bSwf6nD+821xZnxof6HrbUlFzLSrgoEflzYMjN
+	ekKPHYy4WBafnqvVNbb3PBubWVzb2vm4f/Dl69ev30gLDjn8sv9pd3tjeW5yeKCztbZc
+	o0o0DDk8eH+eO/pbGL2eXMFTkFgGI15S3fyw7/nE7BJg+vT5C2boPySF/UyHB/sAamV+
+	anSwq01fcSM7OfZCCDx4bjR7G/OemN5+ooiLlzPVpbUtHf3DL+dX3rz7sH9w+O0HO3+d
+	WD98+Nu3L/sfd7fWXr8afdp9/05lQXYKPHgBXE+6BU9Orkxvf5HkYkLWtbLau50DL2Cc
+	NsETYDIee2I73z9gPAA8ff60+3Z9cWbs2eP2hsqCqykK9DIATw5mOTlhrycJehWU17U+
+	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
+	QkqGKifvmqagsEirLS4uIafiYq22sODGdaiRAEdKKLdAlrCbs9QjYQCFbo/hyeEFQAVI
+	lFyhTEpNz7qSnZObl5efryan/Py83Nyr2VkZackJ8bGyC+IQAVjyoLtA240FTOAJgbI3
+	muILQ8SRUVBMokxISklJS09PzyCr9PS01JTkxMvxCrlMGoHKUsCSO1YBYnbCUby9ob8F
+	ineg5Ybt4xcYFAIFLlGyi7EKRVy80qTLJ5bpk0plfJwiVh5jqG8R8HkcLw86smS5vwWB
+	QqUyRlMcX39o3gkNF0sipdLoaJlJMSeW6ZMyWXQUtNxEiENDgsARlO8w6KgRiMASAgW3
+	B6YcoaKIyWJzff34gYIg1AgULraKoAwoNFgkxOqAvL2gpAhqphAls0UpxmYCoymocnJx
+	c2caipP8+AGBAoFAKAwiK6FQIAgM4PvzfLlYbRI0FGFlTqgizNyLwGAKFYMZK69o4Aor
+	mPLmcn18eZj8yAg7AcqlwA+ql2K4gaPfK73CZgruz97RVMQFpWCeXl7QxWUNQQkXCwrC
+	oB4M1XBB49Wve7hgpJApqFCDSjcoLHOG/jTUWAaVZUhMMjIc4U6nuwEhY12ZwRHBxeEz
+	hbn6XuwGzW40F5ArWcEZcBTW6obVzZlq3SzPktGSARVegIca8LAKPFSDR15Qfgctc+jO
+	TuAIs4ZuENnCegtRVSBeFmiq+zvV33CODdYSCI8/PGy/Vcj3nZWRFjKGrFmrVBGdBG4w
+	OyerU/zuDEoYMWLoJ7Km0LHf/xOyC3TYKUX2v6Y+TxGgCPwfEvgvhxVLsAplbmRzdHJl
+	YW0KZW5kb2JqCjYxIDAgb2JqCjQxNTMKZW5kb2JqCjU0IDAgb2JqCjw8IC9MZW5ndGgg
+	NTUgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjM2IC9I
+	ZWlnaHQgMTAwIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9CaXRzUGVyQ29tcG9uZW50
+	IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7ZzrVxJrFMa9IHe5yABy
+	EwQFERFHTRQzNTyahmkaaaVGUaaFcvLI0ZNlVhbFMm9lahey0kzLtCy76Tr/2tkzulYr
+	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
+	YiO5fvNZVVjbGU4bQ4YZZHiTHUwqwwaWbSliRsvhU9Y2Fw0E2/q2cbDwP7A/iECFB6J+
+	Q0WAigAVASoCvzgC/wHByW5/CmVuZHN0cmVhbQplbmRvYmoKNTUgMCBvYmoKMTg3MQpl
+	bmRvYmoKNjYgMCBvYmoKPDwgL0xlbmd0aCA2NyAwIFIgL1R5cGUgL1hPYmplY3QgL1N1
+	YnR5cGUgL0ltYWdlIC9XaWR0aCAxNzQgL0hlaWdodCAyMzggL0NvbG9yU3BhY2UKL0Rl
+	dmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+	PgpzdHJlYW0KeAHtnflXU9cWgBUhIfNABjJBQkxCIJiEwUAYjASlgaSANcBDGpmKNTIo
+	MvmogMoSsRVFS8Wn4lCwirVarVO1q//a2+cCigj1eMr1NW+d/YPrutbe+37rW/ucXH7a
+	mzbRoAaoAWrgYwxs/lTxMVCrcxFj3JvYwmq8eU1cHHrtapQP/H8JFAjj4xM+XcTHwxsR
+	+ccAM04BFDA5HC43cSl4bMXyC7hcDgfeCcj4wIiVQeUAJ4/HF0AIhUIRmwH90Wv4PF5i
+	IheI4zF5GVawCqgIVCgSiyVSqYz9kEokYrEIoPk8BIzFi84VjAAnMZEvEIrFgClPUiiU
+	SpVKzWaoVEqlQpEkl8kkiJi/zPvX84uGAFi5wCoC1CSFUq1O1mq1Or1eb2AvoLtOq9Uk
+	q9VKRZJMKhYhXpgHNL7r3wdLsIk8YJXJFSq1Rqs3pBiNprQ0M7uRZjIZU1MMeq1GrVLI
+	pWKhgJfIjMP6dmFmwSyIFYqlcoVaozOkGs1mi9WWbrfbM1BkbnwwfaF/us1qMacZUw0A
+	jHgZvTC968pdgkVigVWfYjRbbPZMR5bT6XK73dmsBTR3u5zOLEeG3WYxG1N0GpVCJhai
+	aYBhWAcX5gCZFYgkcmWyLsW01WZ3OF3ZuXkeT36BdzkKNzKWm3oL8j2evNxs1zaH3Wo2
+	GrRqhUwCuDAM6+GCWrgMGFiNwWi2ZWxz52zP9xaV+HylfhRl7ARqXbrTt6O4yJufl+PK
+	Qrz6ZKV8EXedWUBqOYl8MKvSGEwWe5Y7N7+wZKd/d3mgojIYDIU+ZytCoWCwsiJQvsvv
+	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
+	5mUwl/9ZwgW9wCuVJSmUanWyVqvV6fV6A3sB3XVarSZZrVYqkmRSsYgRi8Zg7ftgBe6i
+	XuAVigFYJk9SKJRKlUrNZqhUSqVCkSSXySRikRCxMmL/0ixChtlFuAkcbiKPLxAIRWKx
+	RArQrIdUIhEjUgGft8z6Qdhl3iXgRB5CBmihUMRmQH/0Gj6Pl4hQ0cDCEPzFyC7PwhJv
+	3BYEnMDhcLmJS8FjK5ZfwOVygBRQP4IVYW9GAwEjAciI+VNFPIAiUlyt7xheREbVDDh0
+	YisW38H8C6LwJmAF6spHVP9JYuVL6TM1QA1QA/93Bv4LHKClggplbmRzdHJlYW0KZW5k
+	b2JqCjY3IDAgb2JqCjM0NDUKZW5kb2JqCjYzIDAgb2JqCjw8IC9MZW5ndGggNjQgMCBS
+	IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMTI0IC9IZWlnaHQg
+	MjIgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmls
+	dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt1FlPwkAQB/B26c0NBWyxQggUkUPB
+	eARE0SIeMUFBv/9Xcbfdpd0BfeDN2N9bk24m/5nZFYRY3IH/0wEkqZpu+HRK20mFFEj+
+	mSQl0FZPkZIqVuxqwIYs5oCpAGWmRJlQkSjk0poMqoty0qy73f5g0Cd6EV3sZKMDHVNt
+	xgVaTBNr1Oy8LolcdKTl68OJt+A9MvOAF3og7n2z0J3vlphG3BATbHw16jhZlQ+OdNMd
+	L5ar9Xr9SX39iv2FD/hW0AfzTi2Jt/l1u2Qk+NxqzuldTmdBEj9UmNHzaG7WBr47+OuJ
+	eaZeoNfAYnbRMnU+tyjphWrDxbOD8+xsRk0G340sgr8ZeEOw04gzYhga+c4Dw17Tyih8
+	bQHJRrZYii4v22i24pYFt59di+oh40BHVI1y7HJWS/C7JggikmRFgXd35w3X2ANA3wPD
+	SEIpKs1kAumUoWyV5qa/34cIoV1g5v1qxafiDvydDnwD1WuWQwplbmRzdHJlYW0KZW5k
+	b2JqCjY0IDAgb2JqCjM2NwplbmRvYmoKNzcgMCBvYmoKPDwgL0xlbmd0aCA3OCAwIFIg
+	L1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA0NiAvSGVpZ2h0IDU4
+	IC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRl
+	ciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7ZRhloMgEIPZxVYU9f7HbZIB3LcO1AM4
+	f2qfHzEEZkJ46knAEvgpdSMPkb8oPYwXECFqxX8DvrExNr6LV90Yp+nkO7jBkezrRV4f
+	6Jgp8ESWhYc+3mCA73l+i+/ipGHC2JQKTzeeFyZX4JSWBbzkqe7ESGkowwTgdSVOXt4v
+	OKXNBuGchUvdE2/Sgret4RT3tGXElEELL1Zcmq5Net9P8Z626GXJeTsOiCMY7dN3okS0
+	xf04dlm5TcvKbfqbdjTfCBu+vzoxmsY3ZpLL6fcy4TYt792k02xH7+ZtoUj8jLt3lnZP
+	kqnnFQ/1Wl20Q7sod+4gabuyOn3tkLfENRLCv96pzcBErkZEl+6pfYlWAOzSDWdPqEY9
+	b16grnEixxT2lTmRbEiAx4I6rAaj8M8clC6VnS3WWYeXTLLWkDU3dQFXVpXBLzHWAHle
+	PQkME/gAuQYQYQplbmRzdHJlYW0KZW5kb2JqCjc4IDAgb2JqCjM0MgplbmRvYmoKNzEg
+	MCBvYmoKPDwgL0xlbmd0aCA3MiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0lt
+	YWdlIC9XaWR0aCAyNjAgL0hlaWdodCAxNjYgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkg
+	L0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+	eAHtnelXk1cXxRlC5oTMIRNkIBMJhEAkIQyGQRBIRLEoFUUQCsWCOCKKRbRUBEsRlApF
+	QSyDhRfR2qJWu/qvvec+SazGAMV+8crdH8CsBXjuj332vXlY656YGCJCgBAgBAgBQmA7
+	BGLx1naWGvm1aOVxbxWPod4WH4fWErm+rV6Hlg/rptESMBeNRouPRzi2xYH6/cPyYfF0
+	OoPBDImFlcJVMxh0OiwEQGwDAyJAAaDD6lksNgfE5XJ52AmK5kLtbDaLyWRQHIIYtmqC
+	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
+	UqlUqdVqDW5Sq1UqpVKRJJdJJCIgwKVMAFmwYSOEIyFkBaDA5QMGoUgskUilMpkcO8lk
+	MqlEIhGLhIJE6AI2C5lgawRUJqB+SKAzmCw2h8Pl8fmJAkCBpwSwej6fx0UAIAiCBGKD
+	v+7NPkIyxsWHMDBZCASg4HJ52AmK5kLtbLR+BgCgCMTF/gsEKBWAQhBDAp3OYDBDYmGl
+	cNUMBp1aP2oCAPDvCCCPwNfCdwCHeBr0Bd6i0WjxaP3bAhBqFOBAgUDfTuEAIngpWDn6
+	iNYSWtbHfUI/AGN93KLJdxEChAAhQAjsYAL/B5+bdSgKZW5kc3RyZWFtCmVuZG9iago3
+	MiAwIG9iagozMDQxCmVuZG9iago1NyAwIG9iago8PCAvTGVuZ3RoIDU4IDAgUiAvVHlw
+	ZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDIxNiAvSGVpZ2h0IDE0MiAv
+	Q29sb3JTcGFjZQovRGV2aWNlR3JheSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIg
+	L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae2d+VMT2RbHUZEsJCEJWciGgUgwLIYgGBZh
+	IkHZEhE1wEPJAOFBAQEUELBQtskYYQQEZIiDgPCA0fgQHyqIMOW/9s7tsMQGSpyZmm67
+	+vwg3Qrc87nf7z2dtm6fDgigg54BegboGaBn4GgzcIx8cbTED/4uRHN8N06QJHYTOn4c
+	JXhw6of+7TYSsAQGniRjBAZCbojxW9gwnQAJgIKCGAzmdrCIj51UGIygIMgO4DC0Q/Xx
+	/wdEhUEFARGLxQ6G4HA4XHIEZIISYrNYTCYD2AKPSIZRgVIAhZA4XB4vhM8XkCn4/BAe
+	jwt4bBZCw0T72kpDlQIMGMRksoM5PB4ACUNFIrFYIpGSIyQSsVgkChUKBHwejxPM9pGh
+	debvOfwxsiBQMYCKC1ChIrFUGiaXyxVKpVJFhoA8FHK5LEwqFYtCAY3rR4aH2TvfxmKy
+	gEogFEmkMrlSFa5WR0RGasgSkZERanW4SimXSSUioQDIWExkRpBsD+TLI1hboBaIxeHx
+	hSKpTKE6pdZoorTRZ3Q6XQyKWCIDywAyOROtjdJEqk+pFDKpSMjnIckQ2KFW3MZCYgGV
+	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
+	g9I+pH2IswQhp7QPaR8SYjzcoLQPaR/iLEHIKe1D2oeEGA83KO1D2oc4SxBy+q0+pOZ+
+	tu9tX+VR9x9+b1xo//y+fZVf2z9PnX2wAV/Rizw7K6FsfMO+5e+F62/fP08Swf4aF/We
+	T4HnpKj3PBFFn/+i6vN61Hy+MpCiz8MGMij6/DJVnzenaH8AqvZzoGj/DfQAGBX7pVC2
+	vw1l+xFBGzMK9o8KoGi/rwCq9mejbj89aFdJwf6HARTtVwkLjJr9RanaDxYTjIL9e4GL
+	mv2WkWC+RtLU6o8dQNV+5siJ2MsCKNZ/Hh6np+b7AjAwn2TUer8DgPkko9r7ONCWB0QG
+	ywyhUef9KQCGkfnQqPS+Gx8ZiIZko9T7iRAZUg05cicAkRSxkw98RQn6Uv1zf6KfJ1n8
+	ORD6p+gZoGeAngF6Big0A/8HKVU+WgplbmRzdHJlYW0KZW5kb2JqCjU4IDAgb2JqCjI0
+	OTgKZW5kb2JqCjY5IDAgb2JqCjw8IC9MZW5ndGggNzAgMCBSIC9UeXBlIC9YT2JqZWN0
+	IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjYwIC9IZWlnaHQgMTY2IC9Db2xvclNwYWNl
+	Ci9EZXZpY2VHcmF5IC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNv
+	ZGUgPj4Kc3RyZWFtCngB7Z3pV5NXF8UZQuaEzCETZCATCYRAJCEMhkEQSESxKBVFEArF
+	gjgiikW0VARLEZQKRUEsg4UX0dqiVrv6r73nPkmsxgDFfvHK3R/ArAV47o999r15WOue
+	mBgiQoAQIAQIAUJgOwRi8dZ2lhr5tWjlcW8Vj6HeFh+H1hK5vq1eh5YP66bREjAXjUaL
+	j0c4tsWB+v3D8mHxdDqDwQyJhZXCVTMYdDosBEBsAwMiQAGgw+pZLDYHxOVyedgJiuZC
+	7Ww2i8lkUByCGLZqghiKADgAAKDlc3l8fqJAIMRUAkEin8/ncTmIA2BAZtgyGVAKQhPQ
+	mUw2h8vnw+JFYolEKpXJ5NhJJpNJJRKJWCQEEjyEgRGisKkTUBsAAQYQ4AEAsUQqlycp
+	lUqVWq3W4Ca1WqVSKhVJcplEIhIm8rkcFniBssImEEIImCwgIBRJZHKFUq1J1mp1er0B
+	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
+	gEIQQwKdzmAwQ2JhpXDVDAadWj9qAgDw7wggj8DXwncAh3ga9AXeotFo8Wj92wIQahTg
+	QIFA307hACJ4KVg5+ojWElrWx31CPwBjfdyiyXcRAoQAIUAI7GAC/wefm3UoCmVuZHN0
+	cmVhbQplbmRvYmoKNzAgMCBvYmoKMzA0MQplbmRvYmoKNzQgMCBvYmoKPDwgL0xlbmd0
+	aCA3NSAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzMzYg
+	L0hlaWdodCAxNTAgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25l
+	bnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHtnedXU9vWxpUWUklC
+	CqRAQiAhEAihGHoLRbqCQAClF8EAgiIgShOlWBAUhYOCIIrCQfSoWI53nH/tnWuHIhLY
+	7sv75dy9ng8Kg8mW9fOZa62xGWM+J05gYQKYACaACWACmAD9CJzE2iFwnP989AynXTnT
+	XLsgnBAXqly3UQJDFxdXrF0CLi4uzs4ILSWmhC8BJTzGzY3BcN8Wk7baIcBguLkBFIBK
+	ASmiScB0A5JMJosN4nA4XFoLACAOLBbT3Z1BMLUjJW18giY4E2AilBwuj+fB5wuwBHy+
+	B4/H43LYiCkgRSYl3UnRCQSN7ubuzmJzeDwAKfQUicRiiURKa0kkErFIJPIUCoAqFyFl
+	bBM90qGo1YEmA2hyAaanSCyVeslkMrlCoVDSWQqFXC6TeXtJJYipB4/DZoJHCYseAXQb
+	pzsTaAqEIonUW6ZQ+qhUaj8/Dc3l56dWqXyVSrnMSyr2BKJsFrIo6vlDgcLeCe4Ec3J4
+	fKFI6i1X+qo0mgCtLlCv1wchBdNQxMIBQKBOq/XXqFVKhQwRha5HFj0K6DZOZE6gqfBR
+	aQJ0+mBDiNEYZjKZwmksWL4pzBhqCNYHajVqX6VMKhJ6kAGFbkfuZHM9hGIvuY/aX6c3
+	GMPCI6PM5uiY2B3F0Uo7q46NjYk2n4qMMBkNQYEBfr4Kb4knnwcORXvoIR0P9oSDncDp
+	rVRpdEGhpohT0bHxicnJqRakNJqKWHxqSnJiQlyMORKQBvqrwaLQ82wmw9XlkC0U2dPN
+	nQXulHgr1QH6EFNkdFxiiiUjMys7Jzc3Ly+ftsrLy8vNzck6nZGWmhQfcyrcGKTV+EDP
+	g0OJLdShQZE9GUwOTyj2Vvppg42R0fHJlszsvIKzRcXFJaVWWqu0tKS4qPBMfs7p9JSE
+	2CiTIVDjCw7lc1nQ8U5Ojo54wp5sOIoAp85gMsclp2flnS22lp+vrK6prQPV01Ro7bU1
+	1VUXKqzFhQXZGakJ0RGhenCoROiBOt7hDkrYk8Xli6QKtRZwJlhO5xWWVFTW1Dc2t9hs
+	rW1t7bRVW1urzXapuamhtqrCWlSQlZYUExkaqFF6i2ELRQZ10PAn0e7J5gmlclVAsMmc
+	mJZ9priiqq6ppfVy59Wua9099Fb3ta4rHe22i/XV50sLczOSYyNCdGolbKEcMKijhj/p
+	5MpgcaHbfTR646mEtJyz1gu1TbbLV7p7+/oHBodorsGB/hvXe7o6WpvrqsqKcjOSok3B
+	ASqZhDCoo4aH04iwp0KtC4mMs2SftVbWt7Rf7bkxMDxyZ3RsfILWGh8fG719a/Bmb1eH
+	rbG6vCg3PeGUUa9Reok8OO5uDhqeaHcOH+zpH2SKTj59xlrZcKmju29wZHTi/oPJh1NT
+	03TW1MPJyft3x24P3ey50tpUXVaYbYmNMGhVMrGAy4KGP7CBAk/U7hK5ShsSGZ+eV3yh
+	/lJnT/+t0buTU49nns7Ozs7RWLD8p08eT0/eHxsZuH61tbHKWpCZZEYGlXqiE8nZAU/U
+	7p5SpUYfZk7OKqyobeno6R8Zvz89Mzv/bGFhcXHxBX21uLiw8Hx+9sn05MTtwetXbA0X
+	inMtseGGAF9vER/xPHADPYm2Tw+Rt2+AISLOkldS1dR+rX9kYvLR7PzC0vLKyqtXr17T
+	VrD4lZWXS4vP5mYe3r0z0NPZXFN2JiMhKlSHGp7DhA301xs9Oo44ArFMpQs9lZh5trzO
+	drVveHzy8dzzpZXXb96ura2t01iw/LU3qytLC/MAdKT/WlvjhXPZydFheo1CKuSxHPJ0
+	Y8L2qfDTh0UnZ5+rbGrvGRy9/2huYfn1m/WNd5ubm+/prM3Ndxvra6svF+dnJseH+zqb
+	q0vzoOGD/ZVesIE6OJDgNs+Cy7xSExQea8ktrWm5cmPk7vTs8+XXaxubH/76iPXh/cb6
+	6srC3KP7d/qvtdaVQ8NHhmhhA/WADfTAAY+Od56nl0+AAU73gvK61msDow9m5pderW28
+	//h5C+kLbUUs//PHD+/WV5efP304PtR7ufFC4emkU0bYQA/lyebBcaQNiYLt83zj5d7h
+	ianZhZU3gHPryzesb1+3Pn14t/bqxR+P7o3cuNJcVZydbA4LVMvFfI5Df6LjHY4jozkp
+	q7CyubNv5N6j+aXX65sft75++/vvv3/QWgDg+9etj+83VpefzTwY7e+y1ZTkpsaY9H4K
+	iQB4HriAOsF1iQ88A41mOI6qW67evPNg5tky2PPTl28EzP/QWISXwKF/vVtbWZh9ODbY
+	3VpnRQdSENzoBdzDeIrlan1YTEpOcY2tq3908unCytt3f219/f7jJ5T/0Eo/LfzH39/A
+	oGuvFuemJoZ62uvL8tPiIoIJnkw3R/7k8MVyP70pJjW3pNZ2bWDsIWyfa8AT7Ln9WFqh
+	3F3s9uKB55eP79dfv/hjemK4t72hvCA9PtLgD/7kHcKTuH6a0HWprrV7cJzgCdvnDs/d
+	f4BmH/zE89P7P1eB591b1y83VhRkIJ4+XsIjeGqCgGce4jkEx/viq7U9njSjuG+5CCny
+	J+K5NA8HPOKJLqCGgN/haa1r6/mV577n0+6TX3n2dRyTJ+0I7l8w5rmfx3E/+//medyf
+	51///b/sn2T9Dr+Ng9d1EoX9PDq4f/7reRx3AcigP51HmOdxgf7znx/f9873/TxZbr++
+	oEev57mC7dd1eXZ/Ts+9eLUOb0O+wXX+2D/Nv/8BwPOr/b70+P5IX0dTxdnt+5KngxfK
+	wBNeJwPP4PC4tHxrfTvcl4Dna+D5BXj++2kcfwWI5+cPG3D/RDw7m86fzUyIQi9AgSfj
+	1194YJ6kwDFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBP
+	SrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhI
+	izFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFP
+	UkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSU
+	CjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBP
+	SrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhIizFPUkSUCjBPSrhI
+	izFPUkSUCv47nmgcdf7ufJudeSx4IMs/aF7Q188woHZnHot9vo3WBwZ8O5jHgudZkZkV
+	eFKYv4R5Hs2T4nywE5gnGc998z/3zwc7fD7tYfPraD8hjOI8QDJ/Yp7759Nifx7dzmRf
+	Pe78z9YD837pfWU6wPN35yfr9833/nkeNTyS7H/xf/PrsHCk3fPo9+d7E/PnY/fPn9+b
+	l05LnnaWOzwpzZ9nwzx/0nyE/00LHr6qfTy38xGmfy8fAeV3qIn8juKd/I6XbzY+fIYB
+	oKC9B9PxI0QABaLY8zvGfyO/w2U3XyY5q8ieL/N4fmmVyJf5Tvd4mR8/IF/m29an9xtv
+	lp89mfydfBmCpzekRe7lH01DgMfbjQ8osMeu77TU9uIh/wjiZSC+A8bT2vOPUsxh+sPz
+	j3bzuRIyCsrr27oHRichn+v12jt7Phdtw7nsC9/agnyuzfXVl8+fTk0MX+9o2svnQoGR
+	jvPOID/OPxhe2OVZay5dJfLjFpZXIfDsA0qP+0RjofX/9f7d+puVRbAn5Me11RPxHUfk
+	xzmjfEOpQqM3RadkF1c2XYZ8wwePUb7hW5RvSOdwQ7T2zc2NP9dWV15AvuHEcN+VlhqI
+	k4qLQPEyh+QbOrsR+ZtqnRHlb1bU2br6bk1MzswtLK2sQvwmEb75Jy1FLH1t7e3qq+XF
+	+SdTd2/3d7c3Vp7LTok2ocBdyN88MN77xImf8mEjYWJ6adXF9m6UD/t49tnC0ssVezjs
+	Kj2FcnEhIHbpxfO5mal7o4O9nS21ZWcyEyHeUC2XCLiO8mFR4MR2fjHEa0N+cV1LZ8/A
+	yMSD6Sez888XUHjxEm0Fi4cA4/m5p48m744O9V1tbahE+cURkF8sOyy/2MkVDnjI11br
+	QiMT0vNLKhtsnb39I2P3JqdnnsxCuvYfNNbcHARsz0w/vD9+e7Cvq62p2nrmdBLclo7K
+	13ZxY+7lv2edsVY12jp7bgyNjN29D/HvRPj7I1rKnns/Nfng3vid4f7eq20Xa8qLcixx
+	kSj/XSKA7fPgdenECRQIzYbEXQUyaLwlp9Ba1XDpclfvzcFbt0fHJiYm7tJYsPzx0Tsj
+	Q/3Xr3XammoqzuVlJBLx714iSDOFOOgD+e+IJ4PFFYi8fVACfGJ6bqG1su6iraOrp+9m
+	/+DQ0PDw8C2aCpY+NDQ4cLOvp6uzrbmhuvxcfmZyTDjYUy4R8oj494M8T0IiNGFQuUpr
+	MEUnpeecLamorr9oa++40tXd09MLuk5LoZX39HR3Xe1stzU31lywFuZlJsdGhuj8lMie
+	TIbrr2k9KAz+JGp4ZFAvpZ/OEB6daMnKL7JWVNU2NDXbbG3t27pMM+2su63V1nKxsa76
+	grW4ICcDcBr1Gh+ZWIDs6ajdYQN1ckUGFYi9AWhIuDk+JSM7v7DYWlFZXVNbV1/fQKiR
+	ZrKvur6+rq6muvJ8WUlRQW6mJTEGcPr7yqSeHnZ7Hmx3ZFAXVwaT4yGUyJQanSEsMiYh
+	Jf10Tv6ZwuKSUqu1rKyctiors1pLS4qLzhbkZmVYEmNPmUL0Gl+51JPPZSF7OqEG/1XQ
+	8LCDsrh8TwDqpw0KNUXFxCelpmVkZefm5uUX0Fr5ebm52VmZ6ZbkhFhzhNGgQzhFqNvR
+	7unInvYdlOHOtgNV+QcGG02R5pi4hKTkVIslLS2dzkqzWFJTkhPjY81R4UaDPsDPR0bg
+	hMMI7HkYT6LjAahQ7KXw9QsIDAoxmiKizOaY2Ni4uLh42goWHxsbE22OijSFhQbrtRqV
+	UibxBHcy3V0PtSdhULSFsrkeApFUpvRV+2sDgwwhRqPJZAqPoLXCw02mMGOoIUivDfAD
+	ml5iIR/hdAOch9gT8YQ7kyu0PIcn8BRLZQoflVoToNUF6vVBwSADXQVrD9Lr9TptgMZP
+	5QM0JSKBB5cMpx0oONSdhSzqKZJ6yeRKH1+V2k8D8qex0Pr91CpgqZB5S8UiAZ/HYcFR
+	dJQ70XmPHOoC11AgyvMQCEUiidTLWyaXK5S0l0IhlwFLgCkUePA4hDldjmh2+/UJgKKe
+	d3Nngkd5HnyB0FMkEkskUtpLIhGLRMASYHIRTTAnOU5wqN2iyKNMNpvD5QFUvgBJSGcR
+	BPgePMSSzXLfoXnoUfTT5Z6wqIsrMikwZbGBKofDBfFoK7R6LgdIsllMJsB0s3vT6aTj
+	i+dPMIkPkUdhHyWYMhhAFbjSXgQGBsMNWBKNDtek36OJkJ4kkDo526HCE8CttBaBAP5w
+	cXFxhkOIEsxtu24zRd/sjAUEEAkkAPP7ztyGufcX+m6sXQJ7YPBHmAAmgAlgApgAJoAJ
+	YAL/FYH/A0OweYAKZW5kc3RyZWFtCmVuZG9iago3NSAwIG9iago0MTU3CmVuZG9iago3
+	OSAwIG9iago8PCAvTGVuZ3RoIDgwIDAgUiAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJH
+	QiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtWHVYVN323hMMPQzdMIB0
+	I92tdLdSM3SNQ6NISEqJ1EeJIiCCUiKhopQgiogKiKCggIQgKIhiIPcM6Pf94rnP/efu
+	55mz3/3uFfvstc9Zsw4A9FweBEIgHAAQFBxGtD6ii3V0csaSTwEYIAfUgAFweOBCCTqW
+	lqaQyL9pXyYgaag9lyTZGjwh1Wu5kir+JogtVyXQOuvfKP2h0UTIIQAwCYhg8jnA2iTs
+	eYBtSTgyjBAGyfiSMM7XAw/hUxCWINpa60G4FsJonwPcQcKeB/gBCUfgfEi6kwCgGILx
+	fsEAkK9BWBPvFYqDpkl+8fhQXBCEzwEA1wwKCoHsY0YhXgRHIEK6mB0IHyLtC9RDLbgR
+	ABULyGbsP5zrawBudEG2X/zDiRoDwEgHwNDoP9yW9f5ewViehHoflts3B6PRBYBsZm9v
+	SwjSPw/Abu7e3o/Kvb3dywAgXgHQHYgLJ0bsy0JOYY8B+E/jg3v+rYGAgkMKsDp4BnOB
+	rcPTEaqIPeQEWR9qgHyS4guVELUrTT1ake4FfQwjD9N9FiIbH/srznxuK14W7AR/+SG8
+	kJTwuGi0OLtEg5SOdL+sntwNeQ6FKMVhZVaVY6qlamMaSE0ZLWftNJ1W3bf6aAN1Q58j
+	eUe7jVZNWEy1zfzN0yxqLPutZq2/2TLaidlrO1g74pxCneNcMo4VHi9zLXTLck/0CPf0
+	xTnhj3rJe2N9qHw++77y6/OvCzgXSAiyCpYJoQtZJwyfqCOmhnqGaYazh29FPI6sjUqI
+	doiROok6+fZUd2zl6fS4iHj/BHwi/ox/UlhyUkpRalvaRPp2BlPm4Syr7KCc9HOVuXfO
+	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
+	80QY8V2YZfiNSPooYvTYSdVTl05Tx0XFLyU6nhlO1k25lSaf3pahkTmU7ZSzmns6jz6/
+	slC6qLNYs+RemXp5WwXZRdNLBZWzVWLVkTX3a5mvetfduoa+jm+408TcTGh51Cpy82zb
+	hw6rzvbbPHdSutbvOXT39Ir3FfTvDfgPjg1pP6wfZnkcOvJwlPOp77Nrz9+PC0w4vEic
+	rH35cOrd9M/XmBneWfE3Cm9V5zTntRe032kuqi4pLcuuiL3nX0Wvrqx1fohcV1hf26j+
+	6PSJ6tOdTe8tzFbH52PbYLvyi+6Xua9xO1w7nd/svn38nvlD+EfvT9efO7t5v6R/De3h
+	SfE/qJdI+QNQ6YUEhhCxpnr6+8P/3iUoMByqyfYbA3SlCfY0h+osqAoFYJkQZkmqBVmg
+	3/fQCBsDqMdA5RDG28/Q6DfG4j30TSDMBfEyMb565hCmgbCpN9HQGsKQHZijv4exJYTR
+	EPb3Craz+c1HEQL3a1ySzFlCmC5Jng3CZV6hBn9kWmN8bR1+6w4Qw63tIHwIkhkLCDEh
+	yZN87eC99H+vDY4MDjQ3hXhozXAmvzAj0vqZICwG5VEPQAQ+wAtIAlOgB/R/X7EQj4XG
+	IdCsFwiF5Bb25f5I2e+P/f6PliSUlUn2IvZ1AsAihIPc/BKJkK0D60MAB3EeIPgPI1Mv
+	syLz889o32Pgvtc/GibQ6H8zB5YOVncw4wfwkNQfHvdHg+Q5qMU74q+QaFV7X6QQUg7K
+	/7pIqExEqgAskgXJASSR8khlpA5SC6kGzamMrLWv/b2Wg73x/PseTaB1eEF5h7QjwX+z
+	/88r8IO+YezX7tAuAxR0NsqaSeh+VGw8qf+fLcwrCqrrAdALIUQT/Xx8w7A60JcLLwms
+	UTBOSgIrJyMrA/4FJe1eNwplbmRzdHJlYW0KZW5kb2JqCjgwIDAgb2JqCjM5MTAKZW5k
+	b2JqCjUzIDAgb2JqClsgL0lDQ0Jhc2VkIDc5IDAgUiBdCmVuZG9iago4MSAwIG9iago8
+	PCAvTGVuZ3RoIDgyIDAgUiAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVy
+	IC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtWHVYVN323hMMPQzdMIB0I92tdLdSM3SN
+	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
+	B5YOVncw4wfwkNQfHvdHg+Q5qMU74q+QaFV7X6QQUg7K/7pIqExEqgAskgXJASSR8khl
+	pA5SC6kGzamMrLWv/b2Wg73x/PseTaB1eEF5h7QjwX+z/88r8IO+YezX7tAuAxR0Nsqa
+	Seh+VGw8qf+fLcwrCqrrAdALIUQT/Xx8w7A60JcLLwmsUTBOSgIrJyMrA/4FJe1eNwpl
+	bmRzdHJlYW0KZW5kb2JqCjg0IDAgb2JqCjM5MTAKZW5kb2JqCjY1IDAgb2JqClsgL0lD
+	Q0Jhc2VkIDgzIDAgUiBdCmVuZG9iago4NSAwIG9iago8PCAvTGVuZ3RoIDg2IDAgUiAv
+	TiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+	dHJlYW0KeAGtWHVYVN323hMMPQzdMIB0I92tdLdSM3SNQ6NISEqJ1EeJIiCCUiKhopQg
+	iogKiKCggIQgKIhiIPcM6Pf94rnP/efu55mz3/3uFfvstc9Zsw4A9FweBEIgHAAQFBxG
+	tD6ii3V0csaSTwEYIAfUgAFweOBCCTqWlqaQyL9pXyYgaag9lyTZGjwh1Wu5kir+Jogt
+	VyXQOuvfKP2h0UTIIQAwCYhg8jnA2iTseYBtSTgyjBAGyfiSMM7XAw/hUxCWINpa60G4
+	FsJonwPcQcKeB/gBCUfgfEi6kwCgGILxfsEAkK9BWBPvFYqDpkl+8fhQXBCEzwEA1wwK
+	CoHsY0YhXgRHIEK6mB0IHyLtC9RDLbgRABULyGbsP5zrawBudEG2X/zDiRoDwEgHwNDo
+	P9yW9f5ewViehHoflts3B6PRBYBsZm9vSwjSPw/Abu7e3o/Kvb3dywAgXgHQHYgLJ0bs
+	y0JOYY8B+E/jg3v+rYGAgkMKsDp4BnOBrcPTEaqIPeQEWR9qgHyS4guVELUrTT1ake4F
+	fQwjD9N9FiIbH/srznxuK14W7AR/+SG8kJTwuGi0OLtEg5SOdL+sntwNeQ6FKMVhZVaV
+	Y6qlamMaSE0ZLWftNJ1W3bf6aAN1Q58jeUe7jVZNWEy1zfzN0yxqLPutZq2/2TLaidlr
+	O1g74pxCneNcMo4VHi9zLXTLck/0CPf0xTnhj3rJe2N9qHw++77y6/OvCzgXSAiyCpYJ
+	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
+	0KC4oaygkqD6TF1EI0lzUdtUp11PXL/KkO/IZSNR45um+maTFgQrGusmWxfoee1yinCR
+	P7bj2u2e5emKV/Sm8XnpVxJgFLgSHB3y80QY8V2YZfiNSPooYvTYSdVTl05Tx0XFLyU6
+	nhlO1k25lSaf3pahkTmU7ZSzmns6jz6/slC6qLNYs+RemXp5WwXZRdNLBZWzVWLVkTX3
+	a5mvetfduoa+jm+408TcTGh51Cpy82zbhw6rzvbbPHdSutbvOXT39Ir3FfTvDfgPjg1p
+	P6wfZnkcOvJwlPOp77Nrz9+PC0w4vEicrH35cOrd9M/XmBneWfE3Cm9V5zTntRe032ku
+	qi4pLcuuiL3nX0Wvrqx1fohcV1hf26j+6PSJ6tOdTe8tzFbH52PbYLvyi+6Xua9xO1w7
+	nd/svn38nvlD+EfvT9efO7t5v6R/De3hSfE/qJdI+QNQ6YUEhhCxpnr6+8P/3iUoMByq
+	yfYbA3SlCfY0h+osqAoFYJkQZkmqBVmg3/fQCBsDqMdA5RDG28/Q6DfG4j30TSDMBfEy
+	Mb565hCmgbCpN9HQGsKQHZijv4exJYTREPb3Craz+c1HEQL3a1ySzFlCmC5Jng3CZV6h
+	Bn9kWmN8bR1+6w4Qw63tIHwIkhkLCDEhyZN87eC99H+vDY4MDjQ3hXhozXAmvzAj0vqZ
+	ICwG5VEPQAQ+wAtIAlOgB/R/X7EQj4XGIdCsFwiF5Bb25f5I2e+P/f6PliSUlUn2IvZ1
+	AsAihIPc/BKJkK0D60MAB3EeIPgPI1MvsyLz889o32Pgvtc/GibQ6H8zB5YOVncw4wfw
+	kNQfHvdHg+Q5qMU74q+QaFV7X6QQUg7K/7pIqExEqgAskgXJASSR8khlpA5SC6kGzamM
+	rLWv/b2Wg73x/PseTaB1eEF5h7QjwX+z/88r8IO+YezX7tAuAxR0NsqaSeh+VGw8qf+f
+	LcwrCqrrAdALIUQT/Xx8w7A60JcLLwmsUTBOSgIrJyMrA/4FJe1eNwplbmRzdHJlYW0K
+	ZW5kb2JqCjg2IDAgb2JqCjM5MTAKZW5kb2JqCjU5IDAgb2JqClsgL0lDQ0Jhc2VkIDg1
+	IDAgUiBdCmVuZG9iago4NyAwIG9iago8PCAvTGVuZ3RoIDg4IDAgUiAvTiAxIC9BbHRl
+	cm5hdGUgL0RldmljZUdyYXkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+	hVJPSBRRHP7NNhKEiEGFeIh3CgmVKaysoNp2dVmVbVuV0qIYZ9+6o7Mz05vZNcWTBF2i
+	PHUPomN07NChm5eiwKxL1yCpIAg8dej7zezqKIRveTvf+/39ft97RG2dpu87KUFUc0OV
+	K6Wnbk5Ni4MfKUUd1E5YphX46WJxjLHruZK/u9fWZ9LYst7HtXb79j21lWVgIeottrcQ
+	+iGRZgAfmZ8oZYCzwB2Wr9g+ATxYDqwa8COiAw+auTDT0Zx0pbItkVPmoigqr2I7Sa77
+	+bnGvou1iYP+XI9m1o69s+qq0UzUtPdEobwPrkQZz19U9mw1FKcN45xIQxop8q7V3ytM
+	xxGRKxBKBlI1ZLmfak6ddeB1GLtdupPj+PYQpT7JYKiJtemymR2FfQB2KsvsEPAF6PGy
+	Yg/ngXth/1tRw5PAJ2E/ZId51q0f9heuU+B7hD014M4UrsXx2oofXi0BQ/dUI2iMc03E
+	09c5c6SI7zHUGZj3RjmmCzF3lqoTN4A7YR9ZqmYKsV37ruol7nsCd9PjO9GbOQtcoBxJ
+	crEV2RTQPAlYFH2LsEkOPD7OHlXgd6iYwBy5idzNKPce1REbZ6NSgVZ6jVfGT+O58cX4
+	ZWwYz4B+rHbXe3z/6eMVdde2Pjz5jXrcOa69nRtVYVZxZQvd/8cyhI/ZJzmmwdOhWVhr
+	2HbkD5rMTLAMKMR/BT6X+pITVdzV7u24RRLMUD4sbCW6S1RuKdTqPYNKrBwr2AB2cJLE
+	LFocuFNrujl4d9giem35TVey64b++vZ6+9ryHm3KqCkoE82zRGaUsVuj5N142/1mkRGf
+	ODq+572KWsn+SUUQP4U5WiryFFX0VlDWxG9nDn4btn5cP6Xn9UH9PAk9rZ/Rr+ijEb4M
+	dEnPwnNRH6NJ8LBpIeISoIqDM9ROVGONA+Ip8fK0W2SR/Q9AGf1mCmVuZHN0cmVhbQpl
+	bmRvYmoKODggMCBvYmoKNzA0CmVuZG9iagozMCAwIG9iagpbIC9JQ0NCYXNlZCA4NyAw
+	IFIgXQplbmRvYmoKODkgMCBvYmoKPDwgL0xlbmd0aCA5MCAwIFIgL04gMyAvQWx0ZXJu
+	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
+	BZGil5KFMpBygEqAKpHqHbUx9S0acZoKWmbaTDQKnUgH6BIwCEwaPZq+iIGfoZFRm3Gc
+	KYgZxVzJosMyx5rCJsk2wZ7AIcPxhjOP6yg3kruX5wyvIZYGO8FXyR8qYHiI59CO4IRQ
+	u/BFkSLRXLFs8WyJ85IlUjXSN2UeyM7IfZVnVlBVxCllK3epbKgJqrtplGpOa/Po4HUb
+	9X4YGBhmHHlkRGasZOJpmmJWY95jMWX50Rppw2IrZqdt7+QQ6pjj1OA84vLpOIurhpu3
+	e67HXc91vICXo3eOz4Dvrr98gF/ghaCnIXCC3Al3Ynbo7bDlCLpIpSj36IyYjpNLsayn
+	jeJi41sS3p8RSDqeXJIymcaa7nT2QsZClmR2VM5ALtv5kLzhApnC0r/QxemlNGUFF4Qr
+	Bi/5XaapaqlxrkVebap3u45p6GuKapG+sXzzSrtfp+StzTu37iZ2m/ay9s3fbxo8NWT8
+	iH14dMTuyfzTmOc8YyMTGZM2U0KvYK/nZgfe1s/nvCMu2axwvq9YE/7QvKH5cWTTbWtj
+	O/4r3U7xd54fFbscv3L2488KdAABVIAnYA+KvTesGHYftgXnh1vDk+Dt8DUEH8IRet6H
+	kAikJjIG2Y7cJlMgiyDrQpGhLFClqPfkauTnyJcp9CmqKCkoCZSvqEypuqmVoEjr0gzT
+	OtG+R5+mY6ZrwlhgPtEXMmgyrDCWM9kw0zI/ZElnNWVjYJtir+YgcupwMXKtcg/wVPGm
+	YAP4bPl1BOQOCQvyCnEKc4hgRcXFVKBs5CF5SqpEuktmQQ59WF2eqNCguKGsoJKg+kxd
+	RCNJc1HbVKddT1y/ypDvyGUjUeObpvpmkxYEKxrrJlsX6HntcopwkT+249rtnuXpilf0
+	pvF56VcSYBS4Ehwd8vNEGPFdmGX4jUj6KGL02EnVU5dOU8dFxS8lOp4ZTtZNuZUmn96W
+	oZE5lO2Us5p7Oo8+v7JQuqizWLPkXpl6eVsF2UXTSwWVs1Vi1ZE192uZr3rX3bqGvo5v
+	uNPE3ExoedQqcvNs24cOq8722zx3UrrW7zl09/SK9xX07w34D44NaT+sH2Z5HDrycJTz
+	qe+za8/fjwtMOLxInKx9+XDq3fTP15gZ3lnxNwpvVec057UXtN9pLqouKS3Lroi9519F
+	r66sdX6IXFdYX9uo/uj0ierTnU3vLcxWx+dj22C78ovul7mvcTtcO53f7L59/J75Q/hH
+	70/Xnzu7eb+kfw3t4UnxP6iXSPkDUOmFBIYQsaZ6+vvD/94lKDAcqsn2GwN0pQn2NIfq
+	LKgKBWCZEGZJqgVZoN/30AgbA6jHQOUQxtvP0Og3xuI99E0gzAXxMjG+euYQpoGwqTfR
+	0BrCkB2Yo7+HsSWE0RD29wq2s/nNRxEC92tcksxZQpguSZ4NwmVeoQZ/ZFpjfG0dfusO
+	EMOt7SB8CJIZCwgxIcmTfO3gvfR/rw2ODA40N4V4aM1wJr8wI9L6mSAsBuVRD0AEPsAL
+	SAJToAf0f1+xEI+FxiHQrBcIheQW9uX+SNnvj/3+j5YklJVJ9iL2dQLAIoSD3PwSiZCt
+	A+tDAAdxHiD4DyNTL7Mi8/PPaN9j4L7XPxom0Oh/MweWDlZ3MOMH8JDUHx73R4PkOajF
+	O+KvkGhVe1+kEFIOyv+6SKhMRKoALJIFyQEkkfJIZaQOUgupBs2pjKy1r/29loO98fz7
+	Hk2gdXhBeYe0I8F/s//PK/CDvmHs1+7QLgMUdDbKmknoflRsPKn/ny3MKwqq6wHQCyFE
+	E/18fMOwOtCXCy8JrFEwTkoCKycjKwP+BSXtXjcKZW5kc3RyZWFtCmVuZG9iago5MCAw
+	IG9iagozOTEwCmVuZG9iago2OCAwIG9iagpbIC9JQ0NCYXNlZCA4OSAwIFIgXQplbmRv
+	YmoKOTEgMCBvYmoKPDwgL0xlbmd0aCA5MiAwIFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZp
+	Y2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBrVh1WFTd9t4TDD0M
+	3TCAdCPdrXS3UjN0jUOjSEhKidRHiSIgglIioaKUIIqICoigoICEICiIYiD3DOj3/eK5
+	z/3n7ueZs9/97hX77LXPWbMOAPRcHgRCIBwAEBQcRrQ+oot1dHLGkk8BGCAH1IABcHjg
+	Qgk6lpamkMi/aV8mIGmoPZck2Ro8IdVruZIq/iaILVcl0Drr3yj9odFEyCEAMAmIYPI5
+	wNok7HmAbUk4MowQBsn4kjDO1wMP4VMQliDaWutBuBbCaJ8D3EHCngf4AQlH4HxIupMA
+	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
+	KfZgY5reyklXZovg38Ivhv+lXmEL1zQ0+Q9NuLmMaQnfEdw2cIeU/8NfswMN3gplbmRz
+	dHJlYW0KZW5kb2JqCjk2IDAgb2JqCjc5MgplbmRvYmoKOCAwIG9iagpbIC9JQ0NCYXNl
+	ZCA5NSAwIFIgXQplbmRvYmoKOTcgMCBvYmoKPDwgL0xlbmd0aCA5OCAwIFIgL04gMyAv
+	QWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFt
+	CngBrVh1WFTd9t4TDD0M3TCAdCPdrXS3UjN0jUOjSEhKidRHiSIgglIioaKUIIqICoig
+	oICEICiIYiD3DOj3/eK5z/3n7ueZs9/97hX77LXPWbMOAPRcHgRCIBwAEBQcRrQ+oot1
+	dHLGkk8BGCAH1IABcHjgQgk6lpamkMi/aV8mIGmoPZck2Ro8IdVruZIq/iaILVcl0Drr
+	3yj9odFEyCEAMAmIYPI5wNok7HmAbUk4MowQBsn4kjDO1wMP4VMQliDaWutBuBbCaJ8D
+	3EHCngf4AQlH4HxIupMAoBiC8X7BAJCvQVgT7xWKg6ZJfvH4UFwQhM8BANcMCgqB7GNG
+	IV4ERyBCupgdCB8i7QvUQy24EQAVC8hm7D+c62sAbnRBtl/8w4kaA8BIB8DQ6D/clvX+
+	XsFYnoR6H5bbNwej0QWAbGZvb0sI0j8PwG7u3t6Pyr293csAIF4B0B2ICydG7MtCTmGP
+	AfhP44N7/q2BgIJDCrA6eAZzga3D0xGqiD3kBFkfaoB8kuILlRC1K009WpHuBX0MIw/T
+	fRYiGx/7K858biteFuwEf/khvJCU8LhotDi7RIOUjnS/rJ7cDXkOhSjFYWVWlWOqpWpj
+	GkhNGS1n7TSdVt23+mgDdUOfI3lHu41WTVhMtc38zdMsaiz7rWatv9ky2onZaztYO+Kc
+	Qp3jXDKOFR4vcy10y3JP9Aj39MU54Y96yXtjfah8Pvu+8uvzrws4F0gIsgqWCaELWScM
+	n6gjpoZ6hmmGs4dvRTyOrI1KiHaIkTqJOvn2VHds5en0uIh4/wR8Iv6Mf1JYclJKUWpb
+	2kT6dgZT5uEsq+ygnPRzlbl3zo/lrRUgCjmKpP/SKbYpwZeGlyWX51+4XNF88d6l4cqX
+	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
+	uZUmn96WoZE5lO2Us5p7Oo8+v7JQuqizWLPkXpl6eVsF2UXTSwWVs1Vi1ZE192uZr3rX
+	3bqGvo5vuNPE3ExoedQqcvNs24cOq8722zx3UrrW7zl09/SK9xX07w34D44NaT+sH2Z5
+	HDrycJTzqe+za8/fjwtMOLxInKx9+XDq3fTP15gZ3lnxNwpvVec057UXtN9pLqouKS3L
+	roi9519Fr66sdX6IXFdYX9uo/uj0ierTnU3vLcxWx+dj22C78ovul7mvcTtcO53f7L59
+	/J75Q/hH70/Xnzu7eb+kfw3t4UnxP6iXSPkDUOmFBIYQsaZ6+vvD/94lKDAcqsn2GwN0
+	pQn2NIfqLKgKBWCZEGZJqgVZoN/30AgbA6jHQOUQxtvP0Og3xuI99E0gzAXxMjG+euYQ
+	poGwqTfR0BrCkB2Yo7+HsSWE0RD29wq2s/nNRxEC92tcksxZQpguSZ4NwmVeoQZ/ZFpj
+	fG0dfusOEMOt7SB8CJIZCwgxIcmTfO3gvfR/rw2ODA40N4V4aM1wJr8wI9L6mSAsBuVR
+	D0AEPsALSAJToAf0f1+xEI+FxiHQrBcIheQW9uX+SNnvj/3+j5YklJVJ9iL2dQLAIoSD
+	3PwSiZCtA+tDAAdxHiD4DyNTL7Mi8/PPaN9j4L7XPxom0Oh/MweWDlZ3MOMH8JDUHx73
+	R4PkOajFO+KvkGhVe1+kEFIOyv+6SKhMRKoALJIFyQEkkfJIZaQOUgupBs2pjKy1r/29
+	loO98fz7Hk2gdXhBeYe0I8F/s//PK/CDvmHs1+7QLgMUdDbKmknoflRsPKn/ny3MKwqq
+	6wHQCyFEE/18fMOwOtCXCy8JrFEwTkoCKycjKwP+BSXtXjcKZW5kc3RyZWFtCmVuZG9i
+	ago5OCAwIG9iagozOTEwCmVuZG9iago3MyAwIG9iagpbIC9JQ0NCYXNlZCA5NyAwIFIg
+	XQplbmRvYmoKNCAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94IFswIDAgNjEy
+	IDc5Ml0gL0NvdW50IDEgL0tpZHMgWyAzIDAgUiBdID4+CmVuZG9iago5OSAwIG9iago8
+	PCAvVHlwZSAvQ2F0YWxvZyAvT3V0bGluZXMgMiAwIFIgL1BhZ2VzIDQgMCBSIC9WZXJz
+	aW9uIC8xLjQgPj4KZW5kb2JqCjUyIDAgb2JqCjw8IC9MZW5ndGggMTAwIDAgUiAvRnVu
+	Y3Rpb25UeXBlIDAgL1NpemUgWyAxMzY1IF0gL0JpdHNQZXJTYW1wbGUgOCAvT3JkZXIK
+	MSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvRW5jb2RlIFsg
+	MCAxMzY0IF0gL0RlY29kZSBbIDAgMQowIDEgMCAxIF0gL0ZpbHRlciAvRmxhdGVEZWNv
+	ZGUgPj4Kc3RyZWFtCngBrcHJNgIAAEDR//8VqUSKTElkKKRBRYakhGSoRFJri3ds3r3T
+	6f9+DRPDj2Rs+DZ8GUaGT8nQMDD0DR+Gd8Ob5NXQM7wYuoZnyZPh0dAxPBjahpbk3tA0
+	3BkahlvDjeTacGWoGy4NF5KaoWqoGM4NZUNJUmQFcMby7JSdsGOWY1l2xA7ZAdtnGbDH
+	dlma7bAU22ZJtsU22QZbZ2sgwVbZCouzGFtmUbbEFlmELYAwC7Egm2cBNvfXDFRB3u0K
+	ZW5kc3RyZWFtCmVuZG9iagoxMDAgMCBvYmoKMTkwCmVuZG9iago1MSAwIG9iago8PCAv
+	TGVuZ3RoIDEwMSAwIFIgL0Z1bmN0aW9uVHlwZSAwIC9TaXplIFsgMTM2NSBdIC9CaXRz
+	UGVyU2FtcGxlIDggL09yZGVyCjEgL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAw
+	IDEgMCAxIF0gL0VuY29kZSBbIDAgMTM2NCBdIC9EZWNvZGUgWyAwIDEKMCAxIDAgMSBd
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZXB10IBAAAAwP//lYoQkTQU
+	GVFpJxqUSjRUKBlf4OHuptO5Jmjs/tHI/blfNHQD1Hc/6Nt9oZ77dB/o3b2hruugV9dG
+	L+7ZPaGWe0QProka7h7duVt3g+quhq5dFV25S3eBzt0ZOkUn4hhVxBE6FAeoLEpoHxVF
+	AeVFDu2JLMqIXbQj0mhbbKFNtCFSaF0k0ZpIoLhYRTERRSsigsIoJJZRUATQklhEC3PM
+	AFgkUrwKZW5kc3RyZWFtCmVuZG9iagoxMDEgMCBvYmoKMTc3CmVuZG9iago1MCAwIG9i
+	ago8PCAvTGVuZ3RoIDEwMiAwIFIgL0Z1bmN0aW9uVHlwZSAwIC9TaXplIFsgMTM2NSBd
+	IC9CaXRzUGVyU2FtcGxlIDggL09yZGVyCjEgL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBb
+	IDAgMSAwIDEgMCAxIF0gL0VuY29kZSBbIDAgMTM2NCBdIC9EZWNvZGUgWyAwIDEKMCAx
+	IDAgMSBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AaXB5zoCAABA0fd/
+	FSRKMhIZDQ2VsiKREUUiQhoP4Pu6P+45kwkYOyPnzxlqv86P8+0MnC/n0+lrH86703Pe
+	nK7z6rxoHaftPDtPTst5dB60e+fOaTq3zo3TcK61unPlXDo158I5d860U+fEqToVckzK
+	pESK5IgUSJ7kSJYcksxMaZIiSXJA9ske2SUJskO2SZxskRjZJBtknayRKFklEbIyU5iE
+	yDJZIkGySAJkgcyTuX+mgvqzxwplbmRzdHJlYW0KZW5kb2JqCjEwMiAwIG9iagoxODUK
+	ZW5kb2JqCjQ5IDAgb2JqCjw8IC9MZW5ndGggMTAzIDAgUiAvRnVuY3Rpb25UeXBlIDAg
+	L1NpemUgWyAxMzY1IF0gL0JpdHNQZXJTYW1wbGUgOCAvT3JkZXIKMSAvRG9tYWluIFsg
+	MCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Rl
+	Y29kZSBbIDAgMQowIDEgMCAxIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFt
+	CngBpcHnOgIAAEDR938VJEoyEhkNDZWyIpERRSJCGg/g+7o/7jmTCRg7I+fPGWq/zo/z
+	7QycL+fT6WsfzrvTc96crvPqvGgdp+08O09Oy3l0HrR7585pOrfOjdNwrrW6c+VcOjXn
+	wjl3zrRT58SpOhVyTMqkRIrkiBRInuRIlhySzExpkiJJckD2yR7ZJQmyQ7ZJnGyRGNkk
+	G2SdrJEoWSURsjJTmITIMlkiQbJIAmSBzJO5f6aC+rPHCmVuZHN0cmVhbQplbmRvYmoK
+	MTAzIDAgb2JqCjE4NQplbmRvYmoKNDggMCBvYmoKPDwgL0xlbmd0aCAxMDQgMCBSIC9G
+	dW5jdGlvblR5cGUgMCAvU2l6ZSBbIDEzNjUgXSAvQml0c1BlclNhbXBsZSA4IC9PcmRl
+	cgoxIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9FbmNvZGUg
+	WyAwIDEzNjQgXSAvRGVjb2RlIFsgMCAxCjAgMSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURl
+	Y29kZSA+PgpzdHJlYW0KeAGtwck2AgAAQNH//xWpRIpMSWQopEFFhqSEZKhEUmuLd2ze
+	vdPp/34NE8OPZGz4NnwZRoZPydAwMPQNH4Z3w5vk1dAzvBi6hmfJk+HR0DE8GNqGluTe
+	0DTcGRqGW8ON5NpwZagbLg0XkpqhaqgYzg1lQ0lSZAVwxvLslJ2wY5ZjWXbEDtkB22cZ
+	sMd2WZrtsBTbZkm2xTbZBltnayDBVtkKi7MYW2ZRtsQWWYQtgDALsSCbZwE299cMVEHe
+	7QplbmRzdHJlYW0KZW5kb2JqCjEwNCAwIG9iagoxOTAKZW5kb2JqCjQ3IDAgb2JqCjw8
+	IC9MZW5ndGggMTA1IDAgUiAvRnVuY3Rpb25UeXBlIDAgL1NpemUgWyAxMzY1IF0gL0Jp
+	dHNQZXJTYW1wbGUgOCAvT3JkZXIKMSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAx
+	IDAgMSAwIDEgXSAvRW5jb2RlIFsgMCAxMzY0IF0gL0RlY29kZSBbIDAgMQowIDEgMCAx
+	IF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBpcHnOgIAAEDR938VJEoy
+	EhkNDZWyIpERRSJCGg/g+7o/7jmTCRg7I+fPGWq/zo/z7QycL+fT6WsfzrvTc96crvPq
+	vGgdp+08O09Oy3l0HrR7585pOrfOjdNwrrW6c+VcOjXnwjl3zrRT58SpOhVyTMqkRIrk
+	iBRInuRIlhySzExpkiJJckD2yR7ZJQmyQ7ZJnGyRGNkkG2SdrJEoWSURsjJTmITIMlki
+	QbJIAmSBzJO5f6aC+rPHCmVuZHN0cmVhbQplbmRvYmoKMTA1IDAgb2JqCjE4NQplbmRv
+	YmoKNDYgMCBvYmoKPDwgL0xlbmd0aCAxMDYgMCBSIC9GdW5jdGlvblR5cGUgMCAvU2l6
+	ZSBbIDEzNjUgXSAvQml0c1BlclNhbXBsZSA4IC9PcmRlcgoxIC9Eb21haW4gWyAwIDEg
+	XSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9FbmNvZGUgWyAwIDEzNjQgXSAvRGVjb2Rl
+	IFsgMCAxCjAgMSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG1
+	wod2qjAAAND//6zXJ2GFEQKE5RZx4cba2nX06KEISGLhnusfvn3KybeffDXw00/SXvLp
+	7Wv54e2r7j48tidv99TtySvqbk+X7+62ppt39/rN3dT+6G5u10eXpbM+ln911uVXr84z
+	D86K8fLgVE+cZXWyTCrGCUnvSdzEHYl3ZFHvLVnctxfb8/lfbuw59dnGprq2Z387XdvZ
+	1nTVyMnSqn9sTXKj2KJuRnHRhRlRHC9MhnNz/OxwbpaemSFVHM6ojmZ4NG3mBI9+HU5w
+	DSM8LGgMo/QgMpiPjQH7/th4NDT6Ne2FxvUI9Zo4RL3L7hDVdoC65TsDRFHvDHL7eodl
+	u69X7+ltxkFPv+7qQXEt6BbtaD7Ttubfem2teqB5adULrt1ALeirblXHV9Oe6rAkrsLW
+	Ucil7ShUiWLnWkTJhha5tKH1sGnDTAua1LEFsfmgjM1cLGMsG/QN2chGhlwayShTQiit
+	I+m+Lul0NV061xirkqqKDBVR/VVRxEehqJSEUMwWIBSgTFWWhWtJkFlKolCel8RcgZdu
+	RYGvyPNiUYHniwNeuA8EkMkDkOYATx1wALQY/wfgnONovnBcbuuFK/2Pa53/AM6GzbYK
+	ZW5kc3RyZWFtCmVuZG9iagoxMDYgMCBvYmoKNDYxCmVuZG9iago0NSAwIG9iago8PCAv
+	TGVuZ3RoIDEwNyAwIFIgL0Z1bmN0aW9uVHlwZSAwIC9TaXplIFsgMTM2NSBdIC9CaXRz
+	UGVyU2FtcGxlIDggL09yZGVyCjEgL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAw
+	IDEgMCAxIF0gL0VuY29kZSBbIDAgMTM2NCBdIC9EZWNvZGUgWyAwIDEKMCAxIDAgMSBd
+	IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZXB10IBAAAAwP//lYoQkTQU
+	GVFpJxqUSjRUKBlf4OHuptO5Jmjs/tHI/blfNHQD1Hc/6Nt9oZ77dB/o3b2hruugV9dG
+	L+7ZPaGWe0QProka7h7duVt3g+quhq5dFV25S3eBzt0ZOkUn4hhVxBE6FAeoLEpoHxVF
+	AeVFDu2JLMqIXbQj0mhbbKFNtCFSaF0k0ZpIoLhYRTERRSsigsIoJJZRUATQklhEC3PM
+	AFgkUrwKZW5kc3RyZWFtCmVuZG9iagoxMDcgMCBvYmoKMTc3CmVuZG9iago0NCAwIG9i
+	ago8PCAvTGVuZ3RoIDEwOCAwIFIgL0Z1bmN0aW9uVHlwZSAwIC9TaXplIFsgMTM2NSBd
+	IC9CaXRzUGVyU2FtcGxlIDggL09yZGVyCjEgL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBb
+	IDAgMSAwIDEgMCAxIF0gL0VuY29kZSBbIDAgMTM2NCBdIC9EZWNvZGUgWyAwIDEKMCAx
+	IDAgMSBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa3ByTYCAABA0f//
+	FalEikxJZCikQUWGpIRkqERSa4t3bN690+n/fg0Tw49kbPg2fBlGhk/J0DAw9A0fhnfD
+	m+TV0DO8GLqGZ8mT4dHQMTwY2oaW5N7QNNwZGoZbw43k2nBlqBsuDReSmqFqqBjODWVD
+	SVJkBXDG8uyUnbBjlmNZdsQO2QHbZxmwx3ZZmu2wFNtmSbbFNtkGW2drIMFW2QqLsxhb
+	ZlG2xBZZhC2AMAuxIJtnATb31wxUQd7tCmVuZHN0cmVhbQplbmRvYmoKMTA4IDAgb2Jq
+	CjE5MAplbmRvYmoKNDMgMCBvYmoKPDwgL0xlbmd0aCAxMDkgMCBSIC9GdW5jdGlvblR5
+	cGUgMCAvU2l6ZSBbIDEzNjUgXSAvQml0c1BlclNhbXBsZSA4IC9PcmRlcgoxIC9Eb21h
+	aW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9FbmNvZGUgWyAwIDEzNjQg
+	XSAvRGVjb2RlIFsgMCAxCjAgMSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+	dHJlYW0KeAG9wodaqmAAAND3f6xKFNl7T9lLUVGza+ODqyXCH+DofCf73GblzcX0c/Pb
+	j0166yL96PpepPXJe3HbdfLeeFgnN48Pa8BVfKj+W8V/8G0Vl5f/R2/Lh9wvo5Z5tO87
+	3OfdX/Ow4yJ8vfluEZ4Gu0WP82A3/HYeXD/zt/1uMv9uU38DWKR+1SvSu068on6deFd1
+	10nvsbv6k8vY+Rk5y8fMI6d96OTAszwcdhHOeg1mixvOA3tw354PnPn2wFbm13tW1jX1
+	rDt3rfSymbiP7JhJNXbMIY3YuWbkGOXZ4+rRrBxetPXwAQNb/62lB8daYF3ft7QBTc0f
+	UPXNY89Ur2yoXu+uofaouEZXXXHBHV25f01xNPn8TJMfXpXtWslW21uqZCmgoqWUze+y
+	aAIasngqGLJgSC11SbgsCvoxr4tlDVTgtVNV4E85VWjkObWq8Bwgq/CswpXlHiWWrTIS
+	CyyyTJlppkXmWGDoY5oWAHmarlI8XaUovpGjqJYkxZHkd5YkgQmSrTIEyRAEME4wOEG3
+	x2n8LIZTPZIYRqIdCRQrI+dRAqnFEfTnFMXbYlPkMoxg9SiMNE7RSS0ymQKPp0h1OoY7
+	QjDccgJDtZPRpPN4NC6/dIRexsfPY6gMNY+eodonaPT0BRw3KHwKZW5kc3RyZWFtCmVu
+	ZG9iagoxMDkgMCBvYmoKNDkxCmVuZG9iago0MiAwIG9iago8PCAvTGVuZ3RoIDExMCAw
+	IFIgL0Z1bmN0aW9uVHlwZSAwIC9TaXplIFsgMTM2NSBdIC9CaXRzUGVyU2FtcGxlIDgg
+	L09yZGVyCjEgL0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL0Vu
+	Y29kZSBbIDAgMTM2NCBdIC9EZWNvZGUgWyAwIDEKMCAxIDAgMSBdIC9GaWx0ZXIgL0Zs
+	YXRlRGVjb2RlID4+CnN0cmVhbQp4Aa3ByTYCAABA0f//FalEikxJZCikQUWGpIRkqERS
+	a4t3bN690+n/fg0Tw49kbPg2fBlGhk/J0DAw9A0fhnfDm+TV0DO8GLqGZ8mT4dHQMTwY
+	2oaW5N7QNNwZGoZbw43k2nBlqBsuDReSmqFqqBjODWVDSVJkBXDG8uyUnbBjlmNZdsQO
+	2QHbZxmwx3ZZmu2wFNtmSbbFNtkGW2drIMFW2QqLsxhbZlG2xBZZhC2AMAuxIJtnATb3
+	1wxUQd7tCmVuZHN0cmVhbQplbmRvYmoKMTEwIDAgb2JqCjE5MAplbmRvYmoKNDEgMCBv
+	YmoKPDwgL0xlbmd0aCAxMTEgMCBSIC9GdW5jdGlvblR5cGUgMCAvU2l6ZSBbIDEzNjUg
+	XSAvQml0c1BlclNhbXBsZSA4IC9PcmRlcgoxIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2Ug
+	WyAwIDEgMCAxIDAgMSBdIC9FbmNvZGUgWyAwIDEzNjQgXSAvRGVjb2RlIFsgMCAxCjAg
+	MSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGVwddCAQAAAMD/
+	/5WKEJE0FBlRaScalEo0VCgZX+Dh7qbTuSZo7P7RyP25XzR0A9R3P+jbfaGe+3Qf6N29
+	oa7roFfXRi/u2T2hlntED66JGu4e3blbd4PqroauXRVduUt3gc7dGTpFJ+IYVcQROhQH
+	qCxKaB8VRQHlRQ7tiSzKiF20I9JoW2yhTbQhUmhdJNGaSKC4WEUxEUUrIoLCKCSWUVAE
+	0JJYRAtzzABYJFK8CmVuZHN0cmVhbQplbmRvYmoKMTExIDAgb2JqCjE3NwplbmRvYmoK
+	MiAwIG9iago8PCAvTGFzdCAxMTIgMCBSIC9GaXJzdCAxMTMgMCBSID4+CmVuZG9iagox
+	MTMgMCBvYmoKPDwgL0NvdW50IDAgL0Rlc3QgWyAzIDAgUiAvWFlaIDAgNzU1IDAgXSAv
+	VGl0bGUgKENhbnZhcyAxKSA+PgplbmRvYmoKMTEyIDAgb2JqCjw8IC9Db3VudCAwIC9E
+	ZXN0IFsgMyAwIFIgL1hZWiAwIDc1NSAwIF0gL1RpdGxlIChDYW52YXMgMSkgPj4KZW5k
+	b2JqCjExNCAwIG9iago8PCAvTGVuZ3RoIDExNSAwIFIgL0xlbmd0aDEgOTUwNCAvRmls
+	dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9Wgt4U1W2XnufZ5I2TdKkeTRpkqZJ
+	mqbvQmlooaG0pTxaSyvQIoUWKBQErViKOAO3KggUxAfyEGZUfPAUCaUDAcTLOCg6L9FR
+	UEYdHNFx/KYfM3N1HkKSu85JqTDfXC/ffH7mdL/32Xutf6+91t5nFQgAJEAPMBCcs7it
+	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
+	bmiuJRX/Zq4KabAl0lyz5ff+Za4WqXm2NFeLNFeLNNfs4Gx5LgmCqgWNFXd3oXSiCxNd
+	iJmNofGTpzehp765Mkx2SX7NpfC/MYNZIAplbmRzdHJlYW0KZW5kb2JqCjExNSAwIG9i
+	ago2MjcxCmVuZG9iagoxMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9B
+	c2NlbnQgNzcwIC9DYXBIZWlnaHQgNjg0IC9EZXNjZW50IC0yMzAgL0ZsYWdzIDMyCi9G
+	b250QkJveCBbNSAtMjA4IDY3MyA3MjhdIC9Gb250TmFtZSAvSEdCSEFYK0hlbHZldGlj
+	YSAvSXRhbGljQW5nbGUgMCAvU3RlbVYKMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA1
+	MTMgL0ZvbnRGaWxlMiAxMTQgMCBSID4+CmVuZG9iagoxMTcgMCBvYmoKWyAyNzggMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwIDAgMCAwIDY2Nwo2NjcgMCA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgMCA1MDAKNTU2IDU1NiAyNzgg
+	MCAwIDIyMiAwIDAgMjIyIDAgNTU2IDU1NiA1NTYgMCAzMzMgNTAwIDI3OCA1NTYgNTAw
+	IF0KZW5kb2JqCjMxIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlw
+	ZSAvQmFzZUZvbnQgL0hHQkhBWCtIZWx2ZXRpY2EgL0ZvbnREZXNjcmlwdG9yCjExNiAw
+	IFIgL1dpZHRocyAxMTcgMCBSIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDExOCAvRW5j
+	b2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjEgMCBvYmoKPDwgL1RpdGxl
+	IChVbnRpdGxlZCkgL0F1dGhvciAoU2NvdHQgTWFpbikgL0NyZWF0b3IgKE9tbmlHcmFm
+	ZmxlIFByb2Zlc3Npb25hbCkKL1Byb2R1Y2VyIChNYWMgT1MgWCAxMC41LjggUXVhcnR6
+	IFBERkNvbnRleHQpIC9DcmVhdGlvbkRhdGUgKEQ6MjAxMDA0MDMyMjUyNTFaMDAnMDAn
+	KQovTW9kRGF0ZSAoRDoyMDEwMDQwMzIyNTI1MVowMCcwMCcpID4+CmVuZG9iagp4cmVm
+	CjAgMTE4CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDA4NDg0NyAwMDAwMCBuIAowMDAw
+	MDc3NjIyIDAwMDAwIG4gCjAwMDAwMDQ3NzggMDAwMDAgbiAKMDAwMDA3MTgxNyAwMDAw
+	MCBuIAowMDAwMDAwMDIyIDAwMDAwIG4gCjAwMDAwMDQ3NTggMDAwMDAgbiAKMDAwMDAw
+	NDg4MiAwMDAwMCBuIAowMDAwMDY3NzEwIDAwMDAwIG4gCjAwMDAwMDU0NTkgMDAwMDAg
+	biAKMDAwMDAwOTI3NiAwMDAwMCBuIAowMDAwMDEwMDI0IDAwMDAwIG4gCjAwMDAwMDgz
+	NzUgMDAwMDAgbiAKMDAwMDAwODk5NiAwMDAwMCBuIAowMDAwMDEyNTEwIDAwMDAwIG4g
+	CjAwMDAwMTI3NDkgMDAwMDAgbiAKMDAwMDAwOTAxNiAwMDAwMCBuIAowMDAwMDA5MjU3
+	IDAwMDAwIG4gCjAwMDAwMDU2MTUgMDAwMDAgbiAKMDAwMDAxMDA0NCAwMDAwMCBuIAow
+	MDAwMDEwODE0IDAwMDAwIG4gCjAwMDAwMTA4MzQgMDAwMDAgbiAKMDAwMDAxMTYwNCAw
+	MDAwMCBuIAowMDAwMDA3NzQ3IDAwMDAwIG4gCjAwMDAwMDgzNTUgMDAwMDAgbiAKMDAw
+	MDAwNzIxMiAwMDAwMCBuIAowMDAwMDA3NzI3IDAwMDAwIG4gCjAwMDAwMDYwOTcgMDAw
+	MDAgbiAKMDAwMDAxMTYyNCAwMDAwMCBuIAowMDAwMDEyNDkwIDAwMDAwIG4gCjAwMDAw
+	NTQ1NDUgMDAwMDAgbiAKMDAwMDA4NDY3MCAwMDAwMCBuIAowMDAwMDA1OTM3IDAwMDAw
+	IG4gCjAwMDAwMDU3NzYgMDAwMDAgbiAKMDAwMDAwNjI1NSAwMDAwMCBuIAowMDAwMDA2
+	ODkyIDAwMDAwIG4gCjAwMDAwMDcwNTEgMDAwMDAgbiAKMDAwMDAwNjczMyAwMDAwMCBu
+	IAowMDAwMDA1MzAxIDAwMDAwIG4gCjAwMDAwMDY0MTYgMDAwMDAgbiAKMDAwMDAwNjU3
+	NSAwMDAwMCBuIAowMDAwMDc3MjA4IDAwMDAwIG4gCjAwMDAwNzY3ODEgMDAwMDAgbiAK
+	MDAwMDA3NjA1MyAwMDAwMCBuIAowMDAwMDc1NjI2IDAwMDAwIG4gCjAwMDAwNzUyMTIg
+	MDAwMDAgbiAKMDAwMDA3NDUxNCAwMDAwMCBuIAowMDAwMDc0MDkyIDAwMDAwIG4gCjAw
+	MDAwNzM2NjUgMDAwMDAgbiAKMDAwMDA3MzI0MyAwMDAwMCBuIAowMDAwMDcyODIxIDAw
+	MDAwIG4gCjAwMDAwNzI0MDcgMDAwMDAgbiAKMDAwMDA3MTk4MCAwMDAwMCBuIAowMDAw
+	MDQxNDY3IDAwMDAwIG4gCjAwMDAwMTcxMTYgMDAwMDAgbiAKMDAwMDAxOTE2MSAwMDAw
+	MCBuIAowMDAwMDY2NzU4IDAwMDAwIG4gCjAwMDAwMjcxNTIgMDAwMDAgbiAKMDAwMDAy
+	OTgyNCAwMDAwMCBuIAowMDAwMDUzNjgwIDAwMDAwIG4gCjAwMDAwMTI3NjggMDAwMDAg
+	biAKMDAwMDAxNzA5NSAwMDAwMCBuIAowMDAwMDQ1NTM4IDAwMDAwIG4gCjAwMDAwMjI4
+	MjIgMDAwMDAgbiAKMDAwMDAyMzM2MiAwMDAwMCBuIAowMDAwMDQ5NjA5IDAwMDAwIG4g
+	CjAwMDAwMTkxODIgMDAwMDAgbiAKMDAwMDAyMjgwMSAwMDAwMCBuIAowMDAwMDU4NjE2
+	IDAwMDAwIG4gCjAwMDAwMjk4NDUgMDAwMDAgbiAKMDAwMDAzMzA2MCAwMDAwMCBuIAow
+	MDAwMDIzOTE2IDAwMDAwIG4gCjAwMDAwMjcxMzEgMDAwMDAgbiAKMDAwMDA3MTc4MCAw
+	MDAwMCBuIAowMDAwMDMzMDgxIDAwMDAwIG4gCjAwMDAwMzc0MTIgMDAwMDAgbiAKMDAw
+	MDA2MjY4NyAwMDAwMCBuIAowMDAwMDIzMzgyIDAwMDAwIG4gCjAwMDAwMjM4OTYgMDAw
+	MDAgbiAKMDAwMDAzNzQzMyAwMDAwMCBuIAowMDAwMDQxNDQ2IDAwMDAwIG4gCjAwMDAw
+	NDE1MDQgMDAwMDAgbiAKMDAwMDA0NTUxNyAwMDAwMCBuIAowMDAwMDQ1NTc1IDAwMDAw
+	IG4gCjAwMDAwNDk1ODggMDAwMDAgbiAKMDAwMDA0OTY0NiAwMDAwMCBuIAowMDAwMDUz
+	NjU5IDAwMDAwIG4gCjAwMDAwNTM3MTcgMDAwMDAgbiAKMDAwMDA1NDUyNSAwMDAwMCBu
+	IAowMDAwMDU0NTgyIDAwMDAwIG4gCjAwMDAwNTg1OTUgMDAwMDAgbiAKMDAwMDA1ODY1
+	MyAwMDAwMCBuIAowMDAwMDYyNjY2IDAwMDAwIG4gCjAwMDAwNjI3MjQgMDAwMDAgbiAK
+	MDAwMDA2NjczNyAwMDAwMCBuIAowMDAwMDY2Nzk1IDAwMDAwIG4gCjAwMDAwNjc2OTAg
+	MDAwMDAgbiAKMDAwMDA2Nzc0NiAwMDAwMCBuIAowMDAwMDcxNzU5IDAwMDAwIG4gCjAw
+	MDAwNzE5MDAgMDAwMDAgbiAKMDAwMDA3MjM4NiAwMDAwMCBuIAowMDAwMDcyODAwIDAw
+	MDAwIG4gCjAwMDAwNzMyMjIgMDAwMDAgbiAKMDAwMDA3MzY0NCAwMDAwMCBuIAowMDAw
+	MDc0MDcxIDAwMDAwIG4gCjAwMDAwNzQ0OTMgMDAwMDAgbiAKMDAwMDA3NTE5MSAwMDAw
+	MCBuIAowMDAwMDc1NjA1IDAwMDAwIG4gCjAwMDAwNzYwMzIgMDAwMDAgbiAKMDAwMDA3
+	Njc2MCAwMDAwMCBuIAowMDAwMDc3MTg3IDAwMDAwIG4gCjAwMDAwNzc2MDEgMDAwMDAg
+	biAKMDAwMDA3Nzc1MSAwMDAwMCBuIAowMDAwMDc3NjcyIDAwMDAwIG4gCjAwMDAwNzc4
+	MzAgMDAwMDAgbiAKMDAwMDA4NDE5MyAwMDAwMCBuIAowMDAwMDg0MjE1IDAwMDAwIG4g
+	CjAwMDAwODQ0MzcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAxMTggL1Jvb3QgOTkg
+	MCBSIC9JbmZvIDEgMCBSIC9JRCBbIDw4MjFlYjAwZjU5ODQ1N2ExYTFiNjU3MzAyNTI3
+	YzI1OT4KPDgyMWViMDBmNTk4NDU3YTFhMWI2NTczMDI1MjdjMjU5PiBdID4+CnN0YXJ0
+	eHJlZgo4NTA2NAolJUVPRgoxIDAgb2JqCjw8L0F1dGhvciAobWNsZXJvblxuU2NvdHQg
+	TWFpbikvQ3JlYXRpb25EYXRlIChEOjIwMDcxMTA2MjEzMTAwWikvQ3JlYXRvciAoT21u
+	aUdyYWZmbGUgUHJvZmVzc2lvbmFsIDUuMikvTW9kRGF0ZSAoRDoyMDEwMDQwMjIzMTgw
+	MFopL1Byb2R1Y2VyIChNYWMgT1MgWCAxMC41LjggUXVhcnR6IFBERkNvbnRleHQpL1Rp
+	dGxlIChyZXNvdXJjZV9kZXZpY2VzX2RpYWdyYW0pPj4KZW5kb2JqCnhyZWYKMSAxCjAw
+	MDAwODc1ODQgMDAwMDAgbiAKdHJhaWxlcgo8PC9JRCBbPDgyMWViMDBmNTk4NDU3YTFh
+	MWI2NTczMDI1MjdjMjU5PiA8ODIxZWIwMGY1OTg0NTdhMWExYjY1NzMwMjUyN2MyNTk+
+	XSAvSW5mbyAxIDAgUiAvUHJldiA4NTA2NCAvUm9vdCA5OSAwIFIgL1NpemUgMTE4Pj4K
+	c3RhcnR4cmVmCjg3ODExCiUlRU9GCg==
+	</data>
+	<key>QuickLookThumbnail</key>
+	<data>
+	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
+	QwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVzYwAADiwAAABkZHNjbQAA
+	DpAAAAI+bW1vZAAAENAAAAAoY3BydAAAEPgAAAAkWFlaIAAAAAAAAG6vAAA5TwAAAX1Y
+	WVogAAAAAAAAXt0AALO9AAAH11hZWiAAAAAAAAApSgAAEw8AAMnQWFlaIAAAAAAAAPNS
+	AAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADA
+	bGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZj
+	Z3QAAAAAAAAAAAADAQAAAgAAADwA0gFbAe4CiQM6A/8E1gXDBsYH2Aj2CiYLXgyrDjYP
+	1xF6Ex4UxRZyGCEZ3BuUHVEfFiDWIp0kZCYuJ9UpeSsZLK4uQS/EMUMyszQaNXg2zDgX
+	OVw6mzvUPQQ+MD9aQIhBtELhRA5FPEZnR5NIwEnrSxZMQE1qTohPplDEUd9S+VQTVSpW
+	QFdSWGNZc1p/W4tcll2cXpZfjWCCYXViaGNZZEhlNGYgZwpn9GjcacNqqmuQbHBtUW4w
+	bw9v7nDMcapyh3NidD51GXXzds13qHiBeVd6LnsGe+F8wH2ifol/doBqgWSCZINqhHSF
+	hIaXh7aI1on1ixSMM41Rjm2PiZCikbyS1JPslQOWGpcvmEGZU5pkm3WchZ2UnqOfsaC/
+	ocyi2aPmpPKl/qcJqBOpHqorqzusUK1qroyvtbDpsiWzarS0tgi3YLi9udC647v0vQK+
+	DL8SwBPBDcICwvDD2cS9xZzGd8dOyCfJBsnrys7Lq8yBzVDOF87Xz4rQN9Dg0YDSIdLB
+	037UQNUB1cLWhNdG2AfYydmL2k3bD9vR3JPdVd4W3tbfluBX4Rnh2+Kg42bkLuT55cbm
+	ledn6DvpEOnn6qnra+wu7O/tsO5w7zDv7/Ct8WvyKfLm86L0X/Ub9df2k/dP+Av4x/mD
+	+j/6+/u1/G79J/3e/pT/Sv//AAAANAC2ATsBuAJGAuQDlARXBSoGEQcLCAsJGwovC1wM
+	wA41D6oRKBKkFCgVsBc4GMkaWRvuHYkfHyC9Ilcj2CVYJs8oRCmuKxUscC3CLw4wTTGG
+	Mrcz5DULNi83OzhIOVM6XjtqPHQ9fT6GP45AlkGdQqVDq0SwRbRGtUeySLBJrUqpS6RM
+	n02XTo9Ph1B/UXRSa1NgVFZVRFYzVyJYEFj9Wela1Fu+XKZdjl5zX1lgPWEgYf9i1mOq
+	ZH1lT2YhZvNnxGiUaWNqMmsAa81sm21pbjVu/m/HcI9xWHIgcuhzr3R3dT12A3bKd5B4
+	VnkceeF6pntsfDV9AH3PfqJ/eoBZgT6CKYMahA+FCYYHhwiIDYkTihiLHYwijSaOKo8u
+	kDGRM5I1kzaUOJU4ljiXNpg0mTKaMZsxnDKdNp47n0SgT6Fcom2jgKSUpaumyKflqQOq
+	H6s7rFetcq6Nr6iwwbHbsvS0DbUltj23VLhquX+6lLunvLi9xr7Qv9XA18HVws7Dw8S2
+	xaTGjMdzyFvJQsopyxDL98zezcTOq8+R0HfRXdJD0yjUDNTv1dPWtteZ2H3ZYdpG2yvc
+	ENz13dzew9+q4JzhqOK548TkyeXG5r7nsOie6YjqcetY7D/tJ+4Q7vrv5vDf8gLzJvRJ
+	9Wv2i/et+ND59fse/E79gv69//8AAAAiAHcA9gFXAccCQwLJA18EBgS4BXkGRQcVB+8I
+	2gnyCxQMOw1nDpUPxBD6EjATahSoFekXLRh0GbsbAhw2HWoemx/JIPMiFiMzJEklVyZg
+	J2QoZClfKlcrSywvLQ8t8C7RL7EwjzFtMkszJzQBNNs1tDaNN2Y4PzkQOeI6szuEPFU9
+	Jz34Psg/mUBqQTxCDkLgQ7NEhUVURiNG8kfBSI9JXUoqSvZLwUyMTVZOIE7pT7NQe1FB
+	UgZSylOPVFNVFlXYVppXXFgcWN1ZnVpdWxxb2lyWXVFeC17EX31gNWDrYaJiWGMMY8Bk
+	c2UlZdhmiWc5Z+hol2lFafNqomtQa/xsqW1XbgNusG9ccAlwtHFfcghysXNbdAR0rHVV
+	dfx2pHdLd/J4mXk/eeZ6jHsxe9h8gH0rfdt+jX9IgAiAz4GcgnCDS4QrhQ+F+Ibmh9eI
+	x4m4iqeLl4yGjXWOY49RkD6RLJIZkwaT8pTalcGWp5eLmHCZVJo6myGcC5z4neie3J/T
+	oM6h0KLxpBelPqZkp4qor6nUqvmsHa1BrmSviLCrsc6y8LQQtTC2ULdvuI+5sLrRu/K9
+	FL43v1vAgMGmwszD9sUtxmvHsMkAylrLvM0tzqjQMNHB017VA9ay2GjaJNvm3a7fguGP
+	4+TmWejj65DuVfEu9Bn3DfoE/QD//wAAbmRpbgAAAAAAAAY2AACl4wAAVqEAAFFbAACn
+	KwAAJqUAABDlAABQDQAAVDkAAkKPAAHZmQABR64AAwEAAAIAAAANACcARgBmAIcAqADJ
+	AOsBDgExAVUBegGdAbwB2wH8Ah0CPwJiAoYCqgLPAvQDGwNBA2gDkAO5A+IECwQ1BGAE
+	jAS4BOQFEgU/BW4FoQXVBgoGQQZ4BrIG7AcoB2cHpwfpCC4IdQi/CQsJWgmsCgEKWAqy
+	Cw4LbgvSDDgMoA0IDXIN3g5KDrkPKA+aEA0QgRD3EW8R6BJjEt8TYhPnFG0U9hWBFg4W
+	nRcvF8MYWxj1GZEaMRrTG3ccHRzQHYceQh8AH8EghSFNIhki6CO7JJElaiZGJyUoDCj1
+	KeIq0ivELLotsy6wL68wsjG4MsAzyzTeNfE3BDgVOSM6LTsxPDA9Kj4gPxJAAkDvQdtC
+	v0OiRIhFb0ZYR0JIL0keSg9LA0v4TPBN6k7lT+JQ4VHkUutT81T9VglXF1gnWTlaTVtj
+	XHtdlV6wX85g7WIOYzNkWWV/ZqNnxWjjaf1rEmwhbSpuLm8tcClxInIWcwlz+nTpdhp3
+	TXiEeb96/nxFfZN+64BNgbuDNIS5hkmH44mHiyGMro5Aj+CRkZNYlT2XSZl3m8WeG6AO
+	ogKj+aXyp+6p7Kvsre+v9bH9tAi2G7gvukS8Wb5pwHbCfsSAxn3IdspszGDOi9C40urV
+	Iddd2Z/b5t4x4IHi1eUr54jp5+xH7qrxEPN79e34Zvrn/XD//wAAAA8ALgBRAHUAmgC/
+	AOQBCwEyAVsBhAGpAcsB7wIUAjoCYAKIArAC2QMDAy0DWQOFA7ED3wQNBDwEawSbBM0E
+	/gUxBWQFnAXVBg8GTAaJBsgHCgdNB5IH2gglCHIIwgkWCWwJxgojCoIK5QtKC7oMKwyf
+	DRUNjA4GDoIPAA+BEAMQiBEOEZcSIhKvE0AT1RRtFQYVohZBFuIXhhgtGNYZgRowGuAb
+	kxxIHQQdwh6DH0YgDCDWIaIicyNGJB4k+CXWJrcnoCiXKZEqjiuOLJItmi6mL7UwyDHe
+	Mvc0FTU6NmM3jji9Oe87JTxfPZs+20AeQWRCr0P7RUVGi0fLSQVKN0tiTIZNpk7BT9pQ
+	8FIEUxZUKlVAVllXc1iPWa5azlvxXRZePV9mYJFhvmLuZCNlWGaPZ8Zo/Wo0a2lsnm3R
+	bwJwMnFgco5zu3Todg93N3hgeYt6uHvnfRd+SX99gLKB6oMjhF2FmobYiBeJWYqei+SN
+	LY54j8aRGJJvk8yVMJabmA6ZiZsMnJWeJ5/HoWmjDKSyplqoBKmwq1+tEK7DsHiyL7Po
+	tae3abktuvK8ur6CwEzCF8PjxbDHfMlKyxnM0M5Vz+PRetMe1M7Wi9hT2ibcAd3i38bh
+	q+OP5XLnU+kb6p/sJ+2x7z7wzvJf8+/1gPcP+Jn6Hvuf/Rr+j///AAAAFwBBAHAAnwDP
+	AP8BMgFmAZkBxQHzAiICUgKEArcC7AMhA1gDkAPJBAMEPgR6BLcE9QU1BXYFvQYFBk8G
+	mwbqBzsHkAfoCEQIpAkICXAJ3ApMCsALNwu6DEIMzA1ZDeoOfg8VD7AQTxDxEZYSPhLp
+	E50UUxUNFcoWiRdMGBIY2hmlGnIbQRwTHOsdxh6kH4YgayFUIkEjMiQnJR8mGycaKCAp
+	Kyo5K0ssYS18LpovvTDkMg4zPDRyNa427zg1OYE60jwoPYQ+5kBMQbdDK0SkRiFHo0kp
+	SrVMRE3YT3BRDFKwVFtWCVe9WXZbNFz4XsBgjWJeZDZmDGfZaZprSWzpbnlv/HF0cuV0
+	UHWzdxF4cnnUezp8oX4Lf3iA54JYg8yFQoa6iDSJtos9jMmOWY/rkX6TEZSili+XuZk+
+	mr+cPJ22nwWgTKGVot+kKqV3psWoFalmqrqsDq1krrywFbFwssu0KLWKtu24Ubm3ux68
+	hr3uv1fAwcIrw5XE/8Zqx9TJQMqrzBbNc87K0BvRaNKs0+rVI9ZX14LYqNnK2uXb/N0Q
+	3h/fK+A14TriPuNA5EDlPuY65zfoMekq6iLrDuvp7Lntd+417uzvpfBZ8QrxvPJm8xDz
+	uPRc9QD1ovZC9uL3f/gc+Ln5Vfnw+oz7J/vC/F78+P2T/i/+yf9k//8AAGRlc2MAAAAA
+	AAAACkNvbG9yIExDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAA
+	ABIAAAAMbmJOTwAAABIAAADocHRQVAAAABYAAAD6c3ZTRQAAABAAAAEQZmlGSQAAABAA
+	AAEgZGFESwAAABwAAAEwemhDTgAAAAwAAAFMZnJGUgAAABIAAAFYamFKUAAAAA4AAAFq
+	ZW5VUwAAABIAAAF4cGxQTAAAABIAAAGKcHRCUgAAABgAAAGcZXNFUwAAABIAAAG0emhU
+	VwAAAA4AAAHGcnVSVQAAACQAAAHUa29LUgAAAAwAAAH4ZGVERQAAABAAAAIEbmxOTAAA
+	ABYAAAIUaXRJVAAAABQAAAIqAEYAYQByAGcAZQAtAEwAQwBEAEwAQwBEACAAYQAgAEMA
+	bwByAGUAcwBGAOQAcgBnAC0ATABDAEQAVgDkAHIAaQAtAEwAQwBEAEwAQwBEAC0AZgBh
+	AHIAdgBlAHMAawDmAHIAbV9pgnIAIABMAEMARADJAGMAcgBhAG4AIABMAEMARDCrMOkw
+	/AAgAEwAQwBEAEMAbwBsAG8AcgAgAEwAQwBEAEsAbwBsAG8AcgAgAEwAQwBEAEwAQwBE
+	ACAAQwBvAGwAbwByAGkAZABvAEwAQwBEACAAYwBvAGwAbwByX2mCcm2yZnaYb3k6VmgE
+	JgQyBDUEQgQ9BD4EOQAgBBYEGgAtBDQEOARBBD8EOwQ1BDnO7LfsACAATABDAEQARgBh
+	AHIAYgAtAEwAQwBEAEsAbABlAHUAcgBlAG4ALQBMAEMARABMAEMARAAgAGMAbwBsAG8A
+	cgBpAABtbW9kAAAAAAAABhAAAJyxAAAAAMV4fYAAAAAAAAAAAAAAAAAAAAAAdGV4dAAA
+	AABDb3B5cmlnaHQgQXBwbGUsIEluYy4sIDIwMTAA
+	</data>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>RowAlign</key>
+	<integer>1</integer>
+	<key>RowSpacing</key>
+	<real>36</real>
+	<key>SheetTitle</key>
+	<string>Canvas 1</string>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>YES</string>
+	<key>UniqueID</key>
+	<integer>1</integer>
+	<key>UseEntirePage</key>
+	<true/>
+	<key>VPages</key>
+	<integer>1</integer>
+	<key>WindowInfo</key>
+	<dict>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>ExpandedCanvases</key>
+		<array>
+			<dict>
+				<key>name</key>
+				<string>Canvas 1</string>
+			</dict>
+		</array>
+		<key>Frame</key>
+		<string>{{121, 142}, {1075, 694}}</string>
+		<key>ListView</key>
+		<false/>
+		<key>OutlineWidth</key>
+		<integer>142</integer>
+		<key>RightSidebar</key>
+		<false/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>138</integer>
+		<key>VisibleRegion</key>
+		<string>{{-13.3421, 180.263}, {606.579, 384.868}}</string>
+		<key>Zoom</key>
+		<real>1.5199999809265137</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>1.5199999809265137</real>
+				<real>3.0299999713897705</real>
+			</array>
+		</array>
+	</dict>
+	<key>saveQuickLookFiles</key>
+	<string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/resources/resource_devices_diagram1.png b/docs/html/images/resources/resource_devices_diagram1.png
index adbdab6..0b3c856 100644
--- a/docs/html/images/resources/resource_devices_diagram1.png
+++ b/docs/html/images/resources/resource_devices_diagram1.png
Binary files differ
diff --git a/docs/html/images/resources/resource_devices_diagram2.png b/docs/html/images/resources/resource_devices_diagram2.png
index 403dd4f..d32a781 100644
--- a/docs/html/images/resources/resource_devices_diagram2.png
+++ b/docs/html/images/resources/resource_devices_diagram2.png
Binary files differ
diff --git a/docs/html/images/service_lifecycle.png b/docs/html/images/service_lifecycle.png
index f9602f8..7ab96d7 100644
--- a/docs/html/images/service_lifecycle.png
+++ b/docs/html/images/service_lifecycle.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index 8624633..53c59e7 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -11,14 +11,13 @@
                             </div><!-- end homeTitle -->
                             <div id="announcement-block">
                             <!-- total max width is 520px -->
-                                  <img src="{@docRoot}images/home/market_icon.png"
-alt="Android Market" width="120px" style="padding:10px 53px 5px"/>
+                                  <img src="{@docRoot}images/home/android-design.png"
+alt="Android Design" width="160px" style="padding:10px 33px 5px"/>
                                   <div id="announcement" style="width:275px">
-    <p>We've completely redesigned Android Market for phones to make it easier to
-explore Android apps, games, and other content. Look for the new version coming to your
-Android phone!</p> <p><a
-href="http://android-developers.blogspot.com/2011/07/new-android-market-for-phones.html">Learn more
-&raquo;</a></p>
+    <p>Introducing <b>Android Design</b>: The place to learn about principles, building blocks, and patterns
+      for creating world-class Android user interfaces. Whether you're a UI professional or a developer
+      playing that role, these docs show you how to make good design decisions, big and small.</p>
+    <p><a href="{@docRoot}design/index.html">Android Design &raquo;</a></p>
                                 </div> <!-- end annoucement -->
                             </div> <!-- end annoucement-block -->
                         </div><!-- end topAnnouncement -->
diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd
index bf091e9..91eb57f4 100644
--- a/docs/html/sdk/RELEASENOTES.jd
+++ b/docs/html/sdk/RELEASENOTES.jd
@@ -657,8 +657,8 @@
 <p><strong>T-Mobile G1 Compatibility</strong></p>
 
 <p>This version of the SDK has been tested for compatibility with the first 
-Android-powered mobile device, the <a href="http://www.t-mobileg1.com">T-Mobile
-G1</a>. </p>
+Android-powered mobile device, the T-Mobile
+G1. </p>
 
 <p><strong>MapView API Key</strong></p>
 
diff --git a/docs/html/sdk/android-1.1.jd b/docs/html/sdk/android-1.1.jd
index 8123fa8..b61f186 100644
--- a/docs/html/sdk/android-1.1.jd
+++ b/docs/html/sdk/android-1.1.jd
@@ -106,7 +106,7 @@
 <p>The Android 1.1 system image was tested for compatability with the
 Android-powered devices listed below:</p>
 	<ul>
-	<li><a href="http://www.t-mobileg1.com">T-Mobile G1</a></li>
+	<li>T-Mobile G1</li>
 	</ul>
 
 <h2 id="apps">Built-in Applications</h2>
diff --git a/docs/html/sdk/android-3.0.jd b/docs/html/sdk/android-3.0.jd
index 7b04446..96b92d9 100644
--- a/docs/html/sdk/android-3.0.jd
+++ b/docs/html/sdk/android-3.0.jd
@@ -262,8 +262,8 @@
 
 <p>For more information, read the <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy
 and Paste</a> documentation. You can also see a simple implementation of copy and paste in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.
-html">API Demos</a> and a more complete implementation in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">API Demos</a>
+and a more complete implementation in the <a
 href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> application.</p>
 
 
@@ -386,7 +386,7 @@
 <p>For more information, read the <a
 href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> documentation. You can also see
 example code using loaders in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentListCursorLoader.html">FragmentListCursorLoader</a>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">LoaderCursor</a>
 and <a
 href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
 LoaderThrottle</a> samples.</p>
diff --git a/docs/html/sdk/android-3.1.jd b/docs/html/sdk/android-3.1.jd
index 0d2d7f8..78f265d 100644
--- a/docs/html/sdk/android-3.1.jd
+++ b/docs/html/sdk/android-3.1.jd
@@ -422,10 +422,9 @@
 
 <p class="note">To look at a sample application that uses joystick motion
 events, see <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/
-GameControllerInput.html">GameControllerInput</a> and <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/
-GameView.html">GameView</a>.</p>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html">GameControllerInput</a> 
+and <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html">GameView</a>.</p>
 
 <h3>RTP API</h3>
 
@@ -931,7 +930,7 @@
 href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
 &lt;uses-feature&gt;}</a> manifest elements. For more information about
 declaring features in an application manifest, read <a
-href="{docRoot}guide/appendix/market-filters.html">Android Market
+href="{@docRoot}guide/appendix/market-filters.html">Android Market
 Filters</a>.</p>
 
 
diff --git a/docs/html/sdk/android-4.0.jd b/docs/html/sdk/android-4.0.jd
index 7161b03..5f55947 100644
--- a/docs/html/sdk/android-4.0.jd
+++ b/docs/html/sdk/android-4.0.jd
@@ -1292,9 +1292,9 @@
 }
 </pre>
 
-<p>For an example using the {@link android.widget.ShareActionProvider}, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.html"
->ActionBarActionProviderActivity</a> class in ApiDemos.</p>
+<p>For an example using the {@link android.widget.ShareActionProvider}, see <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html"
+>ActionBarShareActionProviderActivity</a> in ApiDemos.</p>
 
 
 <h4>Collapsible action views</h4>
diff --git a/docs/html/training/id-auth/authenticate.jd b/docs/html/training/id-auth/authenticate.jd
index 4eba87b..592fe1c 100644
--- a/docs/html/training/id-auth/authenticate.jd
+++ b/docs/html/training/id-auth/authenticate.jd
@@ -63,8 +63,8 @@
 strings that identify your app to the service. You need to obtain these strings
 directly from the service owner. Google has a self-service system for obtaining
 client ids and secrets. The article <a
-href="http://code.google.com/apis/tasks/articles/oauth-and-tasks-on-android.
-html">Getting Started with the Tasks API and OAuth 2.0 on Android</a> explains
+href="http://code.google.com/apis/tasks/articles/oauth-and-tasks-on-android.html">Getting
+Started with the Tasks API and OAuth 2.0 on Android</a> explains
 how to use this system to obtain these values for use with the Google Tasks
 API.</li>
 </ul>
diff --git a/docs/html/training/monitoring-device-state/manifest-receivers.jd b/docs/html/training/monitoring-device-state/manifest-receivers.jd
index 556a733..0b79ce6 100644
--- a/docs/html/training/monitoring-device-state/manifest-receivers.jd
+++ b/docs/html/training/monitoring-device-state/manifest-receivers.jd
@@ -14,7 +14,7 @@
 
 <h2>This lesson teaches you to</h2>
 <ol>
-  <li><a href="ToggleReceivers">Toggle and Cascade State Change Receivers to Improve
+  <li><a href="#ToggleReceivers">Toggle and Cascade State Change Receivers to Improve
 Efficiency</a></li>
 </ol>
 
diff --git a/drm/common/ReadWriteUtils.cpp b/drm/common/ReadWriteUtils.cpp
index c16214e2..fd17e98 100644
--- a/drm/common/ReadWriteUtils.cpp
+++ b/drm/common/ReadWriteUtils.cpp
@@ -85,7 +85,7 @@
         int size = data.size();
         if (FAILURE != ftruncate(fd, size)) {
             if (size != write(fd, data.string(), size)) {
-                LOGE("Failed to write the data to: %s", filePath.string());
+                ALOGE("Failed to write the data to: %s", filePath.string());
             }
         }
         fclose(file);
@@ -101,7 +101,7 @@
 
         int size = data.size();
         if (size != write(fd, data.string(), size)) {
-            LOGE("Failed to write the data to: %s", filePath.string());
+            ALOGE("Failed to write the data to: %s", filePath.string());
         }
         fclose(file);
     }
diff --git a/drm/jni/android_drm_DrmManagerClient.cpp b/drm/jni/android_drm_DrmManagerClient.cpp
index e34046fe..dfc7fb2 100644
--- a/drm/jni/android_drm_DrmManagerClient.cpp
+++ b/drm/jni/android_drm_DrmManagerClient.cpp
@@ -169,7 +169,7 @@
     jclass clazz = env->GetObjectClass(thiz);
 
     if (clazz == NULL) {
-        LOGE("Can't find android/drm/DrmManagerClient");
+        ALOGE("Can't find android/drm/DrmManagerClient");
         jniThrowException(env, "java/lang/Exception", NULL);
         return;
     }
diff --git a/drm/libdrmframework/DrmManagerClientImpl.cpp b/drm/libdrmframework/DrmManagerClientImpl.cpp
index 67f58ca..b222b8f 100644
--- a/drm/libdrmframework/DrmManagerClientImpl.cpp
+++ b/drm/libdrmframework/DrmManagerClientImpl.cpp
@@ -54,7 +54,7 @@
             if (binder != 0) {
                 break;
             }
-            LOGW("DrmManagerService not published, waiting...");
+            ALOGW("DrmManagerService not published, waiting...");
             struct timespec reqt;
             reqt.tv_sec  = 0;
             reqt.tv_nsec = 500000000; //0.5 sec
@@ -342,6 +342,6 @@
 void DrmManagerClientImpl::DeathNotifier::binderDied(const wp<IBinder>& who) {
     Mutex::Autolock lock(sMutex);
     DrmManagerClientImpl::sDrmManagerService.clear();
-    LOGW("DrmManager server died!");
+    ALOGW("DrmManager server died!");
 }
 
diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
index 7799040..0273a4b 100644
--- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
+++ b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
@@ -92,12 +92,12 @@
         case FwdLockConv_Status_InvalidArgument:
         case FwdLockConv_Status_UnsupportedFileFormat:
         case FwdLockConv_Status_UnsupportedContentTransferEncoding:
-            LOGE("FwdLockEngine getConvertedStatus: file conversion Error %d. "
+            ALOGE("FwdLockEngine getConvertedStatus: file conversion Error %d. "
                   "Returning STATUS_INPUTDATA_ERROR", status);
             retStatus = DrmConvertedStatus::STATUS_INPUTDATA_ERROR;
             break;
         default:
-            LOGE("FwdLockEngine getConvertedStatus: file conversion Error %d. "
+            ALOGE("FwdLockEngine getConvertedStatus: file conversion Error %d. "
                   "Returning STATUS_ERROR", status);
             retStatus = DrmConvertedStatus::STATUS_ERROR;
             break;
@@ -139,7 +139,7 @@
     if (FwdLockGlue_InitializeKeyEncryption()) {
         LOG_VERBOSE("FwdLockEngine::onInitialize -- FwdLockGlue_InitializeKeyEncryption succeeded");
     } else {
-        LOGE("FwdLockEngine::onInitialize -- FwdLockGlue_InitializeKeyEncryption failed:"
+        ALOGE("FwdLockEngine::onInitialize -- FwdLockGlue_InitializeKeyEncryption failed:"
              "errno = %d", errno);
     }
 
@@ -351,7 +351,7 @@
             convertSessionMap.addValue(convertId, newSession);
             result = DRM_NO_ERROR;
         } else {
-            LOGE("FwdLockEngine::onOpenConvertSession -- FwdLockConv_OpenSession failed.");
+            ALOGE("FwdLockEngine::onOpenConvertSession -- FwdLockConv_OpenSession failed.");
             delete newSession;
         }
     }
@@ -448,7 +448,7 @@
         (!decodeSessionMap.isCreated(decryptHandle->decryptId))) {
         fileDesc = dup(fd);
     } else {
-        LOGE("FwdLockEngine::onOpenDecryptSession parameter error");
+        ALOGE("FwdLockEngine::onOpenDecryptSession parameter error");
         return result;
     }
 
@@ -550,13 +550,13 @@
                                                 DecryptHandle* decryptHandle,
                                                 int decryptUnitId,
                                                 const DrmBuffer* headerInfo) {
-    LOGE("FwdLockEngine::onInitializeDecryptUnit is not supported for this DRM scheme");
+    ALOGE("FwdLockEngine::onInitializeDecryptUnit is not supported for this DRM scheme");
     return DRM_ERROR_UNKNOWN;
 }
 
 status_t FwdLockEngine::onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
-    LOGE("FwdLockEngine::onDecrypt is not supported for this DRM scheme");
+    ALOGE("FwdLockEngine::onDecrypt is not supported for this DRM scheme");
     return DRM_ERROR_UNKNOWN;
 }
 
@@ -565,14 +565,14 @@
                                   int decryptUnitId,
                                   const DrmBuffer* encBuffer,
                                   DrmBuffer** decBuffer) {
-    LOGE("FwdLockEngine::onDecrypt is not supported for this DRM scheme");
+    ALOGE("FwdLockEngine::onDecrypt is not supported for this DRM scheme");
     return DRM_ERROR_UNKNOWN;
 }
 
 status_t FwdLockEngine::onFinalizeDecryptUnit(int uniqueId,
                                               DecryptHandle* decryptHandle,
                                               int decryptUnitId) {
-    LOGE("FwdLockEngine::onFinalizeDecryptUnit is not supported for this DRM scheme");
+    ALOGE("FwdLockEngine::onFinalizeDecryptUnit is not supported for this DRM scheme");
     return DRM_ERROR_UNKNOWN;
 }
 
@@ -650,11 +650,11 @@
         if (((off_t)-1) != decoderSession->offset) {
             bytesRead = onRead(uniqueId, decryptHandle, buffer, numBytes);
             if (bytesRead < 0) {
-                LOGE("FwdLockEngine::onPread error reading");
+                ALOGE("FwdLockEngine::onPread error reading");
             }
         }
     } else {
-        LOGE("FwdLockEngine::onPread decryptId not found");
+        ALOGE("FwdLockEngine::onPread decryptId not found");
     }
 
     return bytesRead;
diff --git a/graphics/java/android/graphics/PathMeasure.java b/graphics/java/android/graphics/PathMeasure.java
index 98f7821..7062824 100644
--- a/graphics/java/android/graphics/PathMeasure.java
+++ b/graphics/java/android/graphics/PathMeasure.java
@@ -17,6 +17,7 @@
 package android.graphics;
 
 public class PathMeasure {
+    private Path mPath;
 
     /**
      * Create an empty PathMeasure object. To uses this to measure the length
@@ -28,6 +29,7 @@
      * is used. If the path is modified, you must call setPath with the path.
      */
     public PathMeasure() {
+        mPath = null;
         native_instance = native_create(0, false);
     }
     
@@ -46,8 +48,8 @@
      *        even if its contour was not explicitly closed.
      */
     public PathMeasure(Path path, boolean forceClosed) {
-        // note: the native side makes a copy of path, so we don't need a java
-        // reference to it here, since it's fine if it gets GC'd
+        // The native implementation does not copy the path, prevent it from being GC'd
+        mPath = path;
         native_instance = native_create(path != null ? path.ni() : 0,
                                         forceClosed);
     }
@@ -56,8 +58,7 @@
      * Assign a new path, or null to have none.
      */
     public void setPath(Path path, boolean forceClosed) {
-        // note: the native side makes a copy of path, so we don't need a java
-        // reference to it here, since it's fine if it gets GC'd
+        mPath = path;
         native_setPath(native_instance,
                        path != null ? path.ni() : 0,
                        forceClosed);
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index c4ef993..bc1db4d 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -47,7 +47,7 @@
 #include <gui/SurfaceTextureClient.h>
 #include <android_runtime/android_graphics_SurfaceTexture.h>
 
-//#define LOG_API LOGE
+//#define LOG_API ALOGE
 #define LOG_API(...)
 
 using namespace android;
@@ -1333,13 +1333,13 @@
     jint result = -1;
 
     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
-        LOGE("ERROR: GetEnv failed\n");
+        ALOGE("ERROR: GetEnv failed\n");
         goto bail;
     }
     assert(env != NULL);
 
     if (registerFuncs(env) < 0) {
-        LOGE("ERROR: MediaPlayer native registration failed\n");
+        ALOGE("ERROR: MediaPlayer native registration failed\n");
         goto bail;
     }
 
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index b106042..98b2c70 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -445,6 +445,7 @@
             status_t setLoop_l(uint32_t loopStart, uint32_t loopEnd, int loopCount);
             audio_io_handle_t getOutput_l();
             status_t restoreTrack_l(audio_track_cblk_t*& cblk, bool fromStart);
+            bool stopped_l() const { return !mActive; }
 
     sp<IAudioTrack>         mAudioTrack;
     sp<IMemory>             mCblkMemory;
@@ -464,7 +465,7 @@
     status_t                mStatus;
     uint32_t                mLatency;
 
-    volatile int32_t        mActive;
+    bool                    mActive;                // protected by mLock
 
     callback_t              mCbf;
     void*                   mUserData;
@@ -481,7 +482,7 @@
     uint32_t                mFlags;
     int                     mSessionId;
     int                     mAuxEffectId;
-    Mutex                   mLock;
+    mutable Mutex           mLock;
     status_t                mRestoreStatus;
     int                     mPreviousPriority;          // before start()
     int                     mPreviousSchedulingGroup;
diff --git a/include/media/IAudioTrack.h b/include/media/IAudioTrack.h
index 3fa2bf8..b83e552 100644
--- a/include/media/IAudioTrack.h
+++ b/include/media/IAudioTrack.h
@@ -35,6 +35,9 @@
 public: 
     DECLARE_META_INTERFACE(AudioTrack);
 
+    /* Get this track's control block */
+    virtual sp<IMemory> getCblk() const = 0;
+
     /* After it's created the track is not active. Call start() to
      * make it active. If set, the callback will start being called.
      */
@@ -67,8 +70,6 @@
      */
     virtual status_t    attachAuxEffect(int effectId) = 0;
 
-    /* get this track's control block */
-    virtual sp<IMemory> getCblk() const = 0;    
 };
 
 // ----------------------------------------------------------------------------
diff --git a/include/utils/GenerationCache.h b/include/utils/GenerationCache.h
index da85a9a..40722d1 100644
--- a/include/utils/GenerationCache.h
+++ b/include/utils/GenerationCache.h
@@ -205,7 +205,7 @@
             removeAt(index);
             return true;
         }
-        LOGE("GenerationCache: removeOldest failed to find the item in the cache "
+        ALOGE("GenerationCache: removeOldest failed to find the item in the cache "
                 "with the given key, but we know it must be in there.  "
                 "Is the key comparator kaput?");
     }
diff --git a/include/utils/ResourceTypes.h b/include/utils/ResourceTypes.h
index e045b2c..46420c1 100644
--- a/include/utils/ResourceTypes.h
+++ b/include/utils/ResourceTypes.h
@@ -1278,7 +1278,7 @@
                     myDelta += requested->screenHeightDp - screenHeightDp;
                     otherDelta += requested->screenHeightDp - o.screenHeightDp;
                 }
-                //LOGI("Comparing this %dx%d to other %dx%d in %dx%d: myDelta=%d otherDelta=%d",
+                //ALOGI("Comparing this %dx%d to other %dx%d in %dx%d: myDelta=%d otherDelta=%d",
                 //    screenWidthDp, screenHeightDp, o.screenWidthDp, o.screenHeightDp,
                 //    requested->screenWidthDp, requested->screenHeightDp, myDelta, otherDelta);
                 return (myDelta <= otherDelta);
@@ -1507,11 +1507,11 @@
         }
         if (screenSizeDp != 0) {
             if (screenWidthDp != 0 && screenWidthDp > settings.screenWidthDp) {
-                //LOGI("Filtering out width %d in requested %d", screenWidthDp, settings.screenWidthDp);
+                //ALOGI("Filtering out width %d in requested %d", screenWidthDp, settings.screenWidthDp);
                 return false;
             }
             if (screenHeightDp != 0 && screenHeightDp > settings.screenHeightDp) {
-                //LOGI("Filtering out height %d in requested %d", screenHeightDp, settings.screenHeightDp);
+                //ALOGI("Filtering out height %d in requested %d", screenHeightDp, settings.screenHeightDp);
                 return false;
             }
         }
@@ -1531,9 +1531,9 @@
                 // For compatibility, we count a request for KEYSHIDDEN_NO as also
                 // matching the more recent KEYSHIDDEN_SOFT.  Basically
                 // KEYSHIDDEN_NO means there is some kind of keyboard available.
-                //LOGI("Matching keysHidden: have=%d, config=%d\n", keysHidden, setKeysHidden);
+                //ALOGI("Matching keysHidden: have=%d, config=%d\n", keysHidden, setKeysHidden);
                 if (keysHidden != KEYSHIDDEN_NO || setKeysHidden != KEYSHIDDEN_SOFT) {
-                    //LOGI("No match!");
+                    //ALOGI("No match!");
                     return false;
                 }
             }
diff --git a/libs/binder/Binder.cpp b/libs/binder/Binder.cpp
index 9945f91..e20d8a3 100644
--- a/libs/binder/Binder.cpp
+++ b/libs/binder/Binder.cpp
@@ -89,7 +89,7 @@
     // This is a local static rather than a global static,
     // to avoid static initializer ordering issues.
     static String16 sEmptyDescriptor;
-    LOGW("reached BBinder::getInterfaceDescriptor (this=%p)", this);
+    ALOGW("reached BBinder::getInterfaceDescriptor (this=%p)", this);
     return sEmptyDescriptor;
 }
 
diff --git a/libs/binder/BpBinder.cpp b/libs/binder/BpBinder.cpp
index e8fb1d9..47a62db 100644
--- a/libs/binder/BpBinder.cpp
+++ b/libs/binder/BpBinder.cpp
@@ -50,7 +50,7 @@
     e.func = func;
 
     if (mObjects.indexOfKey(objectID) >= 0) {
-        LOGE("Trying to attach object ID %p to binder ObjectManager %p with object %p, but object ID already in use",
+        ALOGE("Trying to attach object ID %p to binder ObjectManager %p with object %p, but object ID already in use",
                 objectID, this,  object);
         return;
     }
diff --git a/libs/binder/CursorWindow.cpp b/libs/binder/CursorWindow.cpp
index 0733378..a6e5f71 100644
--- a/libs/binder/CursorWindow.cpp
+++ b/libs/binder/CursorWindow.cpp
@@ -150,7 +150,7 @@
 
     uint32_t cur = mHeader->numColumns;
     if ((cur > 0 || mHeader->numRows > 0) && cur != numColumns) {
-        LOGE("Trying to go from %d columns to %d", cur, numColumns);
+        ALOGE("Trying to go from %d columns to %d", cur, numColumns);
         return INVALID_OPERATION;
     }
     mHeader->numColumns = numColumns;
@@ -209,7 +209,7 @@
     uint32_t offset = mHeader->freeOffset + padding;
     uint32_t nextFreeOffset = offset + size;
     if (nextFreeOffset > mSize) {
-        LOGW("Window is full: requested allocation %d bytes, "
+        ALOGW("Window is full: requested allocation %d bytes, "
                 "free space %d bytes, window size %d bytes",
                 size, freeSpace(), mSize);
         return 0;
@@ -255,14 +255,14 @@
 
 CursorWindow::FieldSlot* CursorWindow::getFieldSlot(uint32_t row, uint32_t column) {
     if (row >= mHeader->numRows || column >= mHeader->numColumns) {
-        LOGE("Failed to read row %d, column %d from a CursorWindow which "
+        ALOGE("Failed to read row %d, column %d from a CursorWindow which "
                 "has %d rows, %d columns.",
                 row, column, mHeader->numRows, mHeader->numColumns);
         return NULL;
     }
     RowSlot* rowSlot = getRowSlot(row);
     if (!rowSlot) {
-        LOGE("Failed to find rowSlot for row %d.", row);
+        ALOGE("Failed to find rowSlot for row %d.", row);
         return NULL;
     }
     FieldSlot* fieldDir = static_cast<FieldSlot*>(offsetToPtr(rowSlot->offset));
diff --git a/libs/binder/IMemory.cpp b/libs/binder/IMemory.cpp
index 2111fe8..cd2451a 100644
--- a/libs/binder/IMemory.cpp
+++ b/libs/binder/IMemory.cpp
@@ -298,11 +298,11 @@
         uint32_t flags = reply.readInt32();
         uint32_t offset = reply.readInt32();
 
-        LOGE_IF(err, "binder=%p transaction failed fd=%d, size=%ld, err=%d (%s)",
+        ALOGE_IF(err, "binder=%p transaction failed fd=%d, size=%ld, err=%d (%s)",
                 asBinder().get(), parcel_fd, size, err, strerror(-err));
 
         int fd = dup( parcel_fd );
-        LOGE_IF(fd==-1, "cannot dup fd=%d, size=%ld, err=%d (%s)",
+        ALOGE_IF(fd==-1, "cannot dup fd=%d, size=%ld, err=%d (%s)",
                 parcel_fd, size, err, strerror(errno));
 
         int access = PROT_READ;
@@ -315,7 +315,7 @@
             mRealHeap = true;
             mBase = mmap(0, size, access, MAP_SHARED, fd, offset);
             if (mBase == MAP_FAILED) {
-                LOGE("cannot map BpMemoryHeap (binder=%p), size=%ld, fd=%d (%s)",
+                ALOGE("cannot map BpMemoryHeap (binder=%p), size=%ld, fd=%d (%s)",
                         asBinder().get(), size, fd, strerror(errno));
                 close(fd);
             } else {
@@ -446,7 +446,7 @@
                 mHeapCache.removeItemsAt(i);
             }
         } else {
-            LOGE("free_heap binder=%p not found!!!", binder.unsafe_get());
+            ALOGE("free_heap binder=%p not found!!!", binder.unsafe_get());
         }
     }
 }
diff --git a/libs/binder/IPCThreadState.cpp b/libs/binder/IPCThreadState.cpp
index 641134a..629b899 100644
--- a/libs/binder/IPCThreadState.cpp
+++ b/libs/binder/IPCThreadState.cpp
@@ -493,7 +493,7 @@
 
 void IPCThreadState::stopProcess(bool immediate)
 {
-    //LOGI("**** STOPPING PROCESS");
+    //ALOGI("**** STOPPING PROCESS");
     flushCommands();
     int fd = mProcess->mDriverFD;
     mProcess->mDriverFD = -1;
@@ -530,9 +530,9 @@
     if ((flags & TF_ONE_WAY) == 0) {
         #if 0
         if (code == 4) { // relayout
-            LOGI(">>>>>> CALLING transaction 4");
+            ALOGI(">>>>>> CALLING transaction 4");
         } else {
-            LOGI(">>>>>> CALLING transaction %d", code);
+            ALOGI(">>>>>> CALLING transaction %d", code);
         }
         #endif
         if (reply) {
@@ -543,9 +543,9 @@
         }
         #if 0
         if (code == 4) { // relayout
-            LOGI("<<<<<< RETURNING transaction 4");
+            ALOGI("<<<<<< RETURNING transaction 4");
         } else {
-            LOGI("<<<<<< RETURNING transaction %d", code);
+            ALOGI("<<<<<< RETURNING transaction %d", code);
         }
         #endif
         
@@ -692,7 +692,7 @@
         
         case BR_ACQUIRE_RESULT:
             {
-                LOG_ASSERT(acquireResult != NULL, "Unexpected brACQUIRE_RESULT");
+                ALOG_ASSERT(acquireResult != NULL, "Unexpected brACQUIRE_RESULT");
                 const int32_t result = mIn.readInt32();
                 if (!acquireResult) continue;
                 *acquireResult = result ? NO_ERROR : INVALID_OPERATION;
@@ -703,7 +703,7 @@
             {
                 binder_transaction_data tr;
                 err = mIn.read(&tr, sizeof(tr));
-                LOG_ASSERT(err == NO_ERROR, "Not enough command data for brREPLY");
+                ALOG_ASSERT(err == NO_ERROR, "Not enough command data for brREPLY");
                 if (err != NO_ERROR) goto finish;
 
                 if (reply) {
@@ -752,7 +752,7 @@
 
 status_t IPCThreadState::talkWithDriver(bool doReceive)
 {
-    LOG_ASSERT(mProcess->mDriverFD >= 0, "Binder driver is not opened");
+    ALOG_ASSERT(mProcess->mDriverFD >= 0, "Binder driver is not opened");
     
     binder_write_read bwr;
     
@@ -905,7 +905,7 @@
     case BR_ACQUIRE:
         refs = (RefBase::weakref_type*)mIn.readInt32();
         obj = (BBinder*)mIn.readInt32();
-        LOG_ASSERT(refs->refBase() == obj,
+        ALOG_ASSERT(refs->refBase() == obj,
                    "BR_ACQUIRE: object %p does not match cookie %p (expected %p)",
                    refs, obj, refs->refBase());
         obj->incStrong(mProcess.get());
@@ -921,7 +921,7 @@
     case BR_RELEASE:
         refs = (RefBase::weakref_type*)mIn.readInt32();
         obj = (BBinder*)mIn.readInt32();
-        LOG_ASSERT(refs->refBase() == obj,
+        ALOG_ASSERT(refs->refBase() == obj,
                    "BR_RELEASE: object %p does not match cookie %p (expected %p)",
                    refs, obj, refs->refBase());
         IF_LOG_REMOTEREFS() {
@@ -946,7 +946,7 @@
         // NOTE: This assertion is not valid, because the object may no
         // longer exist (thus the (BBinder*)cast above resulting in a different
         // memory address).
-        //LOG_ASSERT(refs->refBase() == obj,
+        //ALOG_ASSERT(refs->refBase() == obj,
         //           "BR_DECREFS: object %p does not match cookie %p (expected %p)",
         //           refs, obj, refs->refBase());
         mPendingWeakDerefs.push(refs);
@@ -958,7 +958,7 @@
          
         {
             const bool success = refs->attemptIncStrong(mProcess.get());
-            LOG_ASSERT(success && refs->refBase() == obj,
+            ALOG_ASSERT(success && refs->refBase() == obj,
                        "BR_ATTEMPT_ACQUIRE: object %p does not match cookie %p (expected %p)",
                        refs, obj, refs->refBase());
             
@@ -971,7 +971,7 @@
         {
             binder_transaction_data tr;
             result = mIn.read(&tr, sizeof(tr));
-            LOG_ASSERT(result == NO_ERROR,
+            ALOG_ASSERT(result == NO_ERROR,
                 "Not enough command data for brTRANSACTION");
             if (result != NO_ERROR) break;
             
@@ -1009,7 +1009,7 @@
                 }
             }
 
-            //LOGI(">>>> TRANSACT from pid %d uid %d\n", mCallingPid, mCallingUid);
+            //ALOGI(">>>> TRANSACT from pid %d uid %d\n", mCallingPid, mCallingUid);
             
             Parcel reply;
             IF_LOG_TRANSACTIONS() {
@@ -1033,7 +1033,7 @@
                 if (error < NO_ERROR) reply.setError(error);
             }
             
-            //LOGI("<<<< TRANSACT from pid %d restore pid %d uid %d\n",
+            //ALOGI("<<<< TRANSACT from pid %d restore pid %d uid %d\n",
             //     mCallingPid, origPid, origUid);
             
             if ((tr.flags & TF_ONE_WAY) == 0) {
@@ -1110,11 +1110,11 @@
                                 const size_t* objects, size_t objectsSize,
                                 void* cookie)
 {
-    //LOGI("Freeing parcel %p", &parcel);
+    //ALOGI("Freeing parcel %p", &parcel);
     IF_LOG_COMMANDS() {
         alog << "Writing BC_FREE_BUFFER for " << data << endl;
     }
-    LOG_ASSERT(data != NULL, "Called with NULL data");
+    ALOG_ASSERT(data != NULL, "Called with NULL data");
     if (parcel != NULL) parcel->closeFileDescriptors();
     IPCThreadState* state = self();
     state->mOut.writeInt32(BC_FREE_BUFFER);
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp
index 1fa4c35..33b305d 100644
--- a/libs/binder/IServiceManager.cpp
+++ b/libs/binder/IServiceManager.cpp
@@ -78,7 +78,7 @@
             bool res = pc->checkPermission(permission, pid, uid);
             if (res) {
                 if (startTime != 0) {
-                    LOGI("Check passed after %d seconds for %s from uid=%d pid=%d",
+                    ALOGI("Check passed after %d seconds for %s from uid=%d pid=%d",
                             (int)((uptimeMillis()-startTime)/1000),
                             String8(permission).string(), uid, pid);
                 }
@@ -87,7 +87,7 @@
             
             // Is this a permission failure, or did the controller go away?
             if (pc->asBinder()->isBinderAlive()) {
-                LOGW("Permission failure: %s from uid=%d pid=%d",
+                ALOGW("Permission failure: %s from uid=%d pid=%d",
                         String8(permission).string(), uid, pid);
                 return false;
             }
@@ -106,7 +106,7 @@
             // Wait for the permission controller to come back...
             if (startTime == 0) {
                 startTime = uptimeMillis();
-                LOGI("Waiting to check permission %s from uid=%d pid=%d",
+                ALOGI("Waiting to check permission %s from uid=%d pid=%d",
                         String8(permission).string(), uid, pid);
             }
             sleep(1);
@@ -136,7 +136,7 @@
         for (n = 0; n < 5; n++){
             sp<IBinder> svc = checkService(name);
             if (svc != NULL) return svc;
-            LOGI("Waiting for service %s...\n", String8(name).string());
+            ALOGI("Waiting for service %s...\n", String8(name).string());
             sleep(1);
         }
         return NULL;
diff --git a/libs/binder/MemoryDealer.cpp b/libs/binder/MemoryDealer.cpp
index f299924..8d0e0a7 100644
--- a/libs/binder/MemoryDealer.cpp
+++ b/libs/binder/MemoryDealer.cpp
@@ -210,7 +210,7 @@
 #ifdef MADV_REMOVE
             if (size) {
                 int err = madvise(start_ptr, size, MADV_REMOVE);
-                LOGW_IF(err, "madvise(%p, %u, MADV_REMOVE) returned %s",
+                ALOGW_IF(err, "madvise(%p, %u, MADV_REMOVE) returned %s",
                         start_ptr, size, err<0 ? strerror(errno) : "Ok");
             }
 #endif
@@ -348,7 +348,7 @@
                 mList.insertBefore(free_chunk, split);
             }
 
-            LOGE_IF((flags&PAGE_ALIGNED) && 
+            ALOGE_IF((flags&PAGE_ALIGNED) && 
                     ((free_chunk->start*kMemoryAlign)&(pagesize-1)),
                     "PAGE_ALIGNED requested, but page is not aligned!!!");
 
diff --git a/libs/binder/MemoryHeapBase.cpp b/libs/binder/MemoryHeapBase.cpp
index e171374..d1cbf1c 100644
--- a/libs/binder/MemoryHeapBase.cpp
+++ b/libs/binder/MemoryHeapBase.cpp
@@ -53,7 +53,7 @@
     const size_t pagesize = getpagesize();
     size = ((size + pagesize-1) & ~(pagesize-1));
     int fd = ashmem_create_region(name == NULL ? "MemoryHeapBase" : name, size);
-    LOGE_IF(fd<0, "error creating ashmem region: %s", strerror(errno));
+    ALOGE_IF(fd<0, "error creating ashmem region: %s", strerror(errno));
     if (fd >= 0) {
         if (mapfd(fd, size) == NO_ERROR) {
             if (flags & READ_ONLY) {
@@ -72,7 +72,7 @@
         open_flags |= O_SYNC;
 
     int fd = open(device, open_flags);
-    LOGE_IF(fd<0, "error opening %s: %s", device, strerror(errno));
+    ALOGE_IF(fd<0, "error opening %s: %s", device, strerror(errno));
     if (fd >= 0) {
         const size_t pagesize = getpagesize();
         size = ((size + pagesize-1) & ~(pagesize-1));
@@ -127,7 +127,7 @@
         void* base = (uint8_t*)mmap(0, size,
                 PROT_READ|PROT_WRITE, MAP_SHARED, fd, offset);
         if (base == MAP_FAILED) {
-            LOGE("mmap(fd=%d, size=%u) failed (%s)",
+            ALOGE("mmap(fd=%d, size=%u) failed (%s)",
                     fd, uint32_t(size), strerror(errno));
             close(fd);
             return -errno;
diff --git a/libs/binder/MemoryHeapPmem.cpp b/libs/binder/MemoryHeapPmem.cpp
index 03322ea..66bcf4d 100644
--- a/libs/binder/MemoryHeapPmem.cpp
+++ b/libs/binder/MemoryHeapPmem.cpp
@@ -79,7 +79,7 @@
         int our_fd = heap->heapID();
         struct pmem_region sub = { offset, size };
         int err = ioctl(our_fd, PMEM_MAP, &sub);
-        LOGE_IF(err<0, "PMEM_MAP failed (%s), "
+        ALOGE_IF(err<0, "PMEM_MAP failed (%s), "
                 "mFD=%d, sub.offset=%lu, sub.size=%lu",
                 strerror(errno), our_fd, sub.offset, sub.len);
 }
@@ -115,7 +115,7 @@
         sub.offset = mOffset;
         sub.len = mSize;
         int err = ioctl(our_fd, PMEM_UNMAP, &sub);
-        LOGE_IF(err<0, "PMEM_UNMAP failed (%s), "
+        ALOGE_IF(err<0, "PMEM_UNMAP failed (%s), "
                 "mFD=%d, sub.offset=%lu, sub.size=%lu",
                 strerror(errno), our_fd, sub.offset, sub.len);
         mSize = 0;
@@ -133,11 +133,11 @@
 #ifdef HAVE_ANDROID_OS
     if (device) {
         int fd = open(device, O_RDWR | (flags & NO_CACHING ? O_SYNC : 0));
-        LOGE_IF(fd<0, "couldn't open %s (%s)", device, strerror(errno));
+        ALOGE_IF(fd<0, "couldn't open %s (%s)", device, strerror(errno));
         if (fd >= 0) {
             int err = ioctl(fd, PMEM_CONNECT, pmemHeap->heapID());
             if (err < 0) {
-                LOGE("PMEM_CONNECT failed (%s), mFD=%d, sub-fd=%d",
+                ALOGE("PMEM_CONNECT failed (%s), mFD=%d, sub-fd=%d",
                         strerror(errno), fd, pmemHeap->heapID());
                 close(fd);
             } else {
@@ -194,7 +194,7 @@
     int our_fd = getHeapID();
     struct pmem_region sub = { 0, size };
     int err = ioctl(our_fd, PMEM_MAP, &sub);
-    LOGE_IF(err<0, "PMEM_MAP failed (%s), "
+    ALOGE_IF(err<0, "PMEM_MAP failed (%s), "
             "mFD=%d, sub.offset=%lu, sub.size=%lu",
             strerror(errno), our_fd, sub.offset, sub.len);
     return -errno;
@@ -212,7 +212,7 @@
     int our_fd = getHeapID();
     struct pmem_region sub = { 0, size };
     int err = ioctl(our_fd, PMEM_UNMAP, &sub);
-    LOGE_IF(err<0, "PMEM_UNMAP failed (%s), "
+    ALOGE_IF(err<0, "PMEM_UNMAP failed (%s), "
             "mFD=%d, sub.offset=%lu, sub.size=%lu",
             strerror(errno), our_fd, sub.offset, sub.len);
     return -errno;
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index 4ec2243..dea14bb 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -139,7 +139,7 @@
         }
     }
 
-    LOGE("Invalid object type 0x%08lx", obj.type);
+    ALOGE("Invalid object type 0x%08lx", obj.type);
 }
 
 inline static status_t finish_flatten_binder(
@@ -159,7 +159,7 @@
         if (!local) {
             BpBinder *proxy = binder->remoteBinder();
             if (proxy == NULL) {
-                LOGE("null proxy");
+                ALOGE("null proxy");
             }
             const int32_t handle = proxy ? proxy->handle() : 0;
             obj.type = BINDER_TYPE_HANDLE;
@@ -192,7 +192,7 @@
             if (!local) {
                 BpBinder *proxy = real->remoteBinder();
                 if (proxy == NULL) {
-                    LOGE("null proxy");
+                    ALOGE("null proxy");
                 }
                 const int32_t handle = proxy ? proxy->handle() : 0;
                 obj.type = BINDER_TYPE_WEAK_HANDLE;
@@ -213,7 +213,7 @@
         // The OpenBinder implementation uses a dynamic_cast<> here,
         // but we can't do that with the different reference counting
         // implementation we are using.
-        LOGE("Unable to unflatten Binder weak reference!");
+        ALOGE("Unable to unflatten Binder weak reference!");
         obj.type = BINDER_TYPE_BINDER;
         obj.binder = NULL;
         obj.cookie = NULL;
@@ -504,7 +504,7 @@
     if (str == interface) {
         return true;
     } else {
-        LOGW("**** enforceInterface() expected '%s' but read '%s'\n",
+        ALOGW("**** enforceInterface() expected '%s' but read '%s'\n",
                 String8(interface).string(), String8(str).string());
         return false;
     }
@@ -1018,7 +1018,7 @@
     size_t len;
     const char16_t* str = readString16Inplace(&len);
     if (str) return String16(str, len);
-    LOGE("Reading a NULL string not supported here.");
+    ALOGE("Reading a NULL string not supported here.");
     return String16();
 }
 
@@ -1096,7 +1096,7 @@
     if (flat) {
         switch (flat->type) {
             case BINDER_TYPE_FD:
-                //LOGI("Returning file descriptor %ld from parcel %p\n", flat->handle, this);
+                //ALOGI("Returning file descriptor %ld from parcel %p\n", flat->handle, this);
                 return flat->handle;
         }        
     }
@@ -1216,7 +1216,7 @@
                 return obj;
             }
         }
-        LOGW("Attempt to read object from Parcel %p at offset %d that is not in the object list",
+        ALOGW("Attempt to read object from Parcel %p at offset %d that is not in the object list",
              this, DPOS);
     }
     return NULL;
@@ -1226,14 +1226,14 @@
 {
     size_t i = mObjectsSize;
     if (i > 0) {
-        //LOGI("Closing file descriptors for %d objects...", mObjectsSize);
+        //ALOGI("Closing file descriptors for %d objects...", mObjectsSize);
     }
     while (i > 0) {
         i--;
         const flat_binder_object* flat
             = reinterpret_cast<flat_binder_object*>(mData+mObjects[i]);
         if (flat->type == BINDER_TYPE_FD) {
-            //LOGI("Closing fd: %ld\n", flat->handle);
+            //ALOGI("Closing fd: %ld\n", flat->handle);
             close(flat->handle);
         }
     }
@@ -1266,7 +1266,7 @@
     mError = NO_ERROR;
     mData = const_cast<uint8_t*>(data);
     mDataSize = mDataCapacity = dataSize;
-    //LOGI("setDataReference Setting data size of %p to %lu (pid=%d)\n", this, mDataSize, getpid());
+    //ALOGI("setDataReference Setting data size of %p to %lu (pid=%d)\n", this, mDataSize, getpid());
     mDataPos = 0;
     ALOGV("setDataReference Setting data pos of %p to %d\n", this, mDataPos);
     mObjects = const_cast<size_t*>(objects);
@@ -1340,7 +1340,7 @@
 void Parcel::freeDataNoInit()
 {
     if (mOwner) {
-        //LOGI("Freeing data ref of %p (pid=%d)\n", this, getpid());
+        //ALOGI("Freeing data ref of %p (pid=%d)\n", this, getpid());
         mOwner(this, mData, mDataSize, mObjects, mObjectsSize, mOwnerCookie);
     } else {
         releaseObjects();
@@ -1446,7 +1446,7 @@
         if (objects && mObjects) {
             memcpy(objects, mObjects, objectsSize*sizeof(size_t));
         }
-        //LOGI("Freeing data ref of %p (pid=%d)\n", this, getpid());
+        //ALOGI("Freeing data ref of %p (pid=%d)\n", this, getpid());
         mOwner(this, mData, mDataSize, mObjects, mObjectsSize, mOwnerCookie);
         mOwner = NULL;
 
@@ -1511,7 +1511,7 @@
         
         if(!(mDataCapacity == 0 && mObjects == NULL
              && mObjectsCapacity == 0)) {
-            LOGE("continueWrite: %d/%p/%d/%d", mDataCapacity, mObjects, mObjectsCapacity, desired);
+            ALOGE("continueWrite: %d/%p/%d/%d", mDataCapacity, mObjects, mObjectsCapacity, desired);
         }
         
         mData = data;
diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp
index f06a59e..f96fe50 100644
--- a/libs/binder/ProcessState.cpp
+++ b/libs/binder/ProcessState.cpp
@@ -109,7 +109,7 @@
 
     // Don't attempt to retrieve contexts if we manage them
     if (mManagesContexts) {
-        LOGE("getContextObject(%s) failed, but we manage the contexts!\n",
+        ALOGE("getContextObject(%s) failed, but we manage the contexts!\n",
             String8(name).string());
         return NULL;
     }
@@ -160,7 +160,7 @@
         } else if (result == -1) {
             mBinderContextCheckFunc = NULL;
             mBinderContextUserData = NULL;
-            LOGE("Binder ioctl to become context manager failed: %s\n", strerror(errno));
+            ALOGE("Binder ioctl to become context manager failed: %s\n", strerror(errno));
         }
     }
     return mManagesContexts;
@@ -302,22 +302,22 @@
         int vers;
         status_t result = ioctl(fd, BINDER_VERSION, &vers);
         if (result == -1) {
-            LOGE("Binder ioctl to obtain version failed: %s", strerror(errno));
+            ALOGE("Binder ioctl to obtain version failed: %s", strerror(errno));
             close(fd);
             fd = -1;
         }
         if (result != 0 || vers != BINDER_CURRENT_PROTOCOL_VERSION) {
-            LOGE("Binder driver protocol does not match user space protocol!");
+            ALOGE("Binder driver protocol does not match user space protocol!");
             close(fd);
             fd = -1;
         }
         size_t maxThreads = 15;
         result = ioctl(fd, BINDER_SET_MAX_THREADS, &maxThreads);
         if (result == -1) {
-            LOGE("Binder ioctl to set max threads failed: %s", strerror(errno));
+            ALOGE("Binder ioctl to set max threads failed: %s", strerror(errno));
         }
     } else {
-        LOGW("Opening '/dev/binder' failed: %s\n", strerror(errno));
+        ALOGW("Opening '/dev/binder' failed: %s\n", strerror(errno));
     }
     return fd;
 }
@@ -340,7 +340,7 @@
         mVMStart = mmap(0, BINDER_VM_SIZE, PROT_READ, MAP_PRIVATE | MAP_NORESERVE, mDriverFD, 0);
         if (mVMStart == MAP_FAILED) {
             // *sigh*
-            LOGE("Using /dev/binder failed: unable to mmap transaction memory.\n");
+            ALOGE("Using /dev/binder failed: unable to mmap transaction memory.\n");
             close(mDriverFD);
             mDriverFD = -1;
         }
diff --git a/libs/camera/Camera.cpp b/libs/camera/Camera.cpp
index eef1dd2..ee458f1 100644
--- a/libs/camera/Camera.cpp
+++ b/libs/camera/Camera.cpp
@@ -47,7 +47,7 @@
             binder = sm->getService(String16("media.camera"));
             if (binder != 0)
                 break;
-            LOGW("CameraService not published, waiting...");
+            ALOGW("CameraService not published, waiting...");
             usleep(500000); // 0.5 s
         } while(true);
         if (mDeathNotifier == NULL) {
@@ -56,7 +56,7 @@
         binder->linkToDeath(mDeathNotifier);
         mCameraService = interface_cast<ICameraService>(binder);
     }
-    LOGE_IF(mCameraService==0, "no CameraService!?");
+    ALOGE_IF(mCameraService==0, "no CameraService!?");
     return mCameraService;
 }
 
@@ -72,7 +72,7 @@
 {
      ALOGV("create");
      if (camera == 0) {
-         LOGE("camera remote is a NULL pointer");
+         ALOGE("camera remote is a NULL pointer");
          return 0;
      }
 
@@ -397,13 +397,13 @@
     if (listener != NULL) {
         listener->postDataTimestamp(timestamp, msgType, dataPtr);
     } else {
-        LOGW("No listener was set. Drop a recording frame.");
+        ALOGW("No listener was set. Drop a recording frame.");
         releaseRecordingFrame(dataPtr);
     }
 }
 
 void Camera::binderDied(const wp<IBinder>& who) {
-    LOGW("ICamera died");
+    ALOGW("ICamera died");
     notifyCallback(CAMERA_MSG_ERROR, CAMERA_ERROR_SERVER_DIED, 0);
 }
 
@@ -411,7 +411,7 @@
     ALOGV("binderDied");
     Mutex::Autolock _l(Camera::mLock);
     Camera::mCameraService.clear();
-    LOGW("Camera server died!");
+    ALOGW("Camera server died!");
 }
 
 sp<ICameraRecordingProxy> Camera::getRecordingProxy() {
diff --git a/libs/camera/CameraParameters.cpp b/libs/camera/CameraParameters.cpp
index 209d84a..059a8a5 100644
--- a/libs/camera/CameraParameters.cpp
+++ b/libs/camera/CameraParameters.cpp
@@ -231,12 +231,12 @@
 {
     // XXX i think i can do this with strspn()
     if (strchr(key, '=') || strchr(key, ';')) {
-        //XXX LOGE("Key \"%s\"contains invalid character (= or ;)", key);
+        //XXX ALOGE("Key \"%s\"contains invalid character (= or ;)", key);
         return;
     }
 
     if (strchr(value, '=') || strchr(key, ';')) {
-        //XXX LOGE("Value \"%s\"contains invalid character (= or ;)", value);
+        //XXX ALOGE("Value \"%s\"contains invalid character (= or ;)", value);
         return;
     }
 
@@ -294,7 +294,7 @@
     int w = (int)strtol(str, &end, 10);
     // If a delimeter does not immediately follow, give up.
     if (*end != delim) {
-        LOGE("Cannot find delimeter (%c) in str=%s", delim, str);
+        ALOGE("Cannot find delimeter (%c) in str=%s", delim, str);
         return -1;
     }
 
@@ -324,7 +324,7 @@
         int success = parse_pair(sizeStartPtr, &width, &height, 'x',
                                  &sizeStartPtr);
         if (success == -1 || (*sizeStartPtr != ',' && *sizeStartPtr != '\0')) {
-            LOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr);
+            ALOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr);
             return;
         }
         sizes.push(Size(width, height));
diff --git a/libs/cpustats/ThreadCpuUsage.cpp b/libs/cpustats/ThreadCpuUsage.cpp
index 4bfbdf3..ffee039 100644
--- a/libs/cpustats/ThreadCpuUsage.cpp
+++ b/libs/cpustats/ThreadCpuUsage.cpp
@@ -31,7 +31,7 @@
         if (isEnabled) {
             rc = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &mPreviousTs);
             if (rc) {
-                LOGE("clock_gettime(CLOCK_THREAD_CPUTIME_ID) errno=%d", errno);
+                ALOGE("clock_gettime(CLOCK_THREAD_CPUTIME_ID) errno=%d", errno);
                 isEnabled = false;
             } else {
                 mWasEverEnabled = true;
@@ -39,7 +39,7 @@
                 if (!mMonotonicKnown) {
                     rc = clock_gettime(CLOCK_MONOTONIC, &mMonotonicTs);
                     if (rc) {
-                        LOGE("clock_gettime(CLOCK_MONOTONIC) errno=%d", errno);
+                        ALOGE("clock_gettime(CLOCK_MONOTONIC) errno=%d", errno);
                     } else {
                         mMonotonicKnown = true;
                     }
@@ -50,7 +50,7 @@
             struct timespec ts;
             rc = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
             if (rc) {
-                LOGE("clock_gettime(CLOCK_THREAD_CPUTIME_ID) errno=%d", errno);
+                ALOGE("clock_gettime(CLOCK_THREAD_CPUTIME_ID) errno=%d", errno);
             } else {
                 long long delta = (ts.tv_sec - mPreviousTs.tv_sec) * 1000000000LL +
                         (ts.tv_nsec - mPreviousTs.tv_nsec);
@@ -86,7 +86,7 @@
             int rc;
             rc = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
             if (rc) {
-                LOGE("clock_gettime(CLOCK_THREAD_CPUTIME_ID) errno=%d", errno);
+                ALOGE("clock_gettime(CLOCK_THREAD_CPUTIME_ID) errno=%d", errno);
             } else {
                 long long delta = (ts.tv_sec - mPreviousTs.tv_sec) * 1000000000LL +
                         (ts.tv_nsec - mPreviousTs.tv_nsec);
@@ -99,7 +99,7 @@
         mStatistics.sample((double) mAccumulator);
         mAccumulator = 0;
     } else {
-        LOGW("Can't add sample because measurements have never been enabled");
+        ALOGW("Can't add sample because measurements have never been enabled");
     }
 }
 
@@ -111,7 +111,7 @@
         int rc;
         rc = clock_gettime(CLOCK_MONOTONIC, &ts);
         if (rc) {
-            LOGE("clock_gettime(CLOCK_MONOTONIC) errno=%d", errno);
+            ALOGE("clock_gettime(CLOCK_MONOTONIC) errno=%d", errno);
             elapsed = 0;
         } else {
             // mMonotonicTs is updated only at first enable and resetStatistics
@@ -119,7 +119,7 @@
                     (ts.tv_nsec - mMonotonicTs.tv_nsec);
         }
     } else {
-        LOGW("Can't compute elapsed time because measurements have never been enabled");
+        ALOGW("Can't compute elapsed time because measurements have never been enabled");
         elapsed = 0;
     }
     return elapsed;
@@ -132,7 +132,7 @@
         int rc;
         rc = clock_gettime(CLOCK_MONOTONIC, &mMonotonicTs);
         if (rc) {
-            LOGE("clock_gettime(CLOCK_MONOTONIC) errno=%d", errno);
+            ALOGE("clock_gettime(CLOCK_MONOTONIC) errno=%d", errno);
             mMonotonicKnown = false;
         }
     }
diff --git a/libs/gui/BitTube.cpp b/libs/gui/BitTube.cpp
index fa8d0ea..785da39 100644
--- a/libs/gui/BitTube.cpp
+++ b/libs/gui/BitTube.cpp
@@ -40,7 +40,7 @@
         fcntl(mSendFd, F_SETFL, O_NONBLOCK);
     } else {
         mReceiveFd = -errno;
-        LOGE("BitTube: pipe creation failed (%s)", strerror(-mReceiveFd));
+        ALOGE("BitTube: pipe creation failed (%s)", strerror(-mReceiveFd));
     }
 }
 
@@ -52,7 +52,7 @@
         fcntl(mReceiveFd, F_SETFL, O_NONBLOCK);
     } else {
         mReceiveFd = -errno;
-        LOGE("BitTube(Parcel): can't dup filedescriptor (%s)",
+        ALOGE("BitTube(Parcel): can't dup filedescriptor (%s)",
                 strerror(-mReceiveFd));
     }
 }
diff --git a/libs/gui/DisplayEventReceiver.cpp b/libs/gui/DisplayEventReceiver.cpp
index fee1feb..3b3ccaa 100644
--- a/libs/gui/DisplayEventReceiver.cpp
+++ b/libs/gui/DisplayEventReceiver.cpp
@@ -81,7 +81,7 @@
 ssize_t DisplayEventReceiver::getEvents(DisplayEventReceiver::Event* events,
         size_t count) {
     ssize_t size = mDataChannel->read(events, sizeof(events[0])*count);
-    LOGE_IF(size<0,
+    ALOGE_IF(size<0,
             "DisplayEventReceiver::getEvents error (%s)",
             strerror(-size));
     if (size >= 0) {
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index ca7c8f8..95b2379 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -148,27 +148,27 @@
         err = data.writeInterfaceToken(
                 ISurfaceComposer::getInterfaceDescriptor());
         if (err != NO_ERROR) {
-            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
+            ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
                     "interface descriptor: %s (%d)", strerror(-err), -err);
             return false;
         }
         err = data.writeStrongBinder(surfaceTexture->asBinder());
         if (err != NO_ERROR) {
-            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
+            ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
                     "strong binder to parcel: %s (%d)", strerror(-err), -err);
             return false;
         }
         err = remote()->transact(BnSurfaceComposer::AUTHENTICATE_SURFACE, data,
                 &reply);
         if (err != NO_ERROR) {
-            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
+            ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
                     "performing transaction: %s (%d)", strerror(-err), -err);
             return false;
         }
         int32_t result = 0;
         err = reply.readInt32(&result);
         if (err != NO_ERROR) {
-            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
+            ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
                     "retrieving result: %s (%d)", strerror(-err), -err);
             return false;
         }
@@ -188,7 +188,7 @@
                 BnSurfaceComposer::CREATE_DISPLAY_EVENT_CONNECTION,
                 data, &reply);
         if (err != NO_ERROR) {
-            LOGE("ISurfaceComposer::createDisplayEventConnection: error performing "
+            ALOGE("ISurfaceComposer::createDisplayEventConnection: error performing "
                     "transaction: %s (%d)", strerror(-err), -err);
             return result;
         }
diff --git a/libs/gui/SensorEventQueue.cpp b/libs/gui/SensorEventQueue.cpp
index ee21c45..b95dd902 100644
--- a/libs/gui/SensorEventQueue.cpp
+++ b/libs/gui/SensorEventQueue.cpp
@@ -70,12 +70,12 @@
 ssize_t SensorEventQueue::read(ASensorEvent* events, size_t numEvents)
 {
     ssize_t size = mSensorChannel->read(events, numEvents*sizeof(events[0]));
-    LOGE_IF(size<0 && size!=-EAGAIN,
+    ALOGE_IF(size<0 && size!=-EAGAIN,
             "SensorChannel::read error (%s)", strerror(-size));
     if (size >= 0) {
         if (size % sizeof(events[0])) {
             // partial read!!! should never happen.
-            LOGE("SensorEventQueue partial read (event-size=%u, read=%d)",
+            ALOGE("SensorEventQueue partial read (event-size=%u, read=%d)",
                     sizeof(events[0]), int(size));
             return -EINVAL;
         }
@@ -104,7 +104,7 @@
     do {
         result = looper->pollOnce(-1);
         if (result == ALOOPER_EVENT_ERROR) {
-            LOGE("SensorEventQueue::waitForEvent error (errno=%d)", errno);
+            ALOGE("SensorEventQueue::waitForEvent error (errno=%d)", errno);
             result = -EPIPE; // unknown error, so we make up one
             break;
         }
diff --git a/libs/gui/SensorManager.cpp b/libs/gui/SensorManager.cpp
index dafcdea..b80da56 100644
--- a/libs/gui/SensorManager.cpp
+++ b/libs/gui/SensorManager.cpp
@@ -78,7 +78,7 @@
         class DeathObserver : public IBinder::DeathRecipient {
             SensorManager& mSensorManger;
             virtual void binderDied(const wp<IBinder>& who) {
-                LOGW("sensorservice died [%p]", who.unsafe_get());
+                ALOGW("sensorservice died [%p]", who.unsafe_get());
                 mSensorManger.sensorManagerDied();
             }
         public:
@@ -137,7 +137,7 @@
                 mSensorServer->createSensorEventConnection();
         if (connection == NULL) {
             // SensorService just died.
-            LOGE("createEventQueue: connection is NULL. SensorService died.");
+            ALOGE("createEventQueue: connection is NULL. SensorService died.");
             continue;
         }
         queue = new SensorEventQueue(connection);
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index ff45fa3..337950c 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -167,7 +167,7 @@
 status_t SurfaceControl::validate() const
 {
     if (mToken<0 || mClient==0) {
-        LOGE("invalid token (%d, identity=%u) or client (%p)", 
+        ALOGE("invalid token (%d, identity=%u) or client (%p)", 
                 mToken, mIdentity, mClient.get());
         return NO_INIT;
     }
@@ -254,7 +254,7 @@
     } else if (surface != 0 &&
             (surface->mSurface != NULL ||
              surface->getISurfaceTexture() != NULL)) {
-        LOGE("Parceling invalid surface with non-NULL ISurface/ISurfaceTexture as NULL: "
+        ALOGE("Parceling invalid surface with non-NULL ISurface/ISurfaceTexture as NULL: "
              "mSurface = %p, surfaceTexture = %p, mIdentity = %d, ",
              surface->mSurface.get(), surface->getISurfaceTexture().get(),
              surface->mIdentity);
@@ -304,7 +304,7 @@
 void Surface::init(const sp<ISurfaceTexture>& surfaceTexture)
 {
     if (mSurface != NULL || surfaceTexture != NULL) {
-        LOGE_IF(surfaceTexture==0, "got a NULL ISurfaceTexture from ISurface");
+        ALOGE_IF(surfaceTexture==0, "got a NULL ISurfaceTexture from ISurface");
         if (surfaceTexture != NULL) {
             setISurfaceTexture(surfaceTexture);
             setUsage(GraphicBuffer::USAGE_HW_RENDER);
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index fa0ee8c..3abe84a 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -64,9 +64,9 @@
 // Macros for including the SurfaceTexture name in log messages
 #define ST_LOGV(x, ...) ALOGV("[%s] "x, mName.string(), ##__VA_ARGS__)
 #define ST_LOGD(x, ...) ALOGD("[%s] "x, mName.string(), ##__VA_ARGS__)
-#define ST_LOGI(x, ...) LOGI("[%s] "x, mName.string(), ##__VA_ARGS__)
-#define ST_LOGW(x, ...) LOGW("[%s] "x, mName.string(), ##__VA_ARGS__)
-#define ST_LOGE(x, ...) LOGE("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGI(x, ...) ALOGI("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGW(x, ...) ALOGW("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGE(x, ...) ALOGE("[%s] "x, mName.string(), ##__VA_ARGS__)
 
 namespace android {
 
@@ -352,7 +352,7 @@
                 }
 
                 // if buffer is FREE it CANNOT be current
-                LOGW_IF((state == BufferSlot::FREE) && (mCurrentTexture==i),
+                ALOGW_IF((state == BufferSlot::FREE) && (mCurrentTexture==i),
                         "dequeueBuffer: buffer %d is both FREE and current!",
                         i);
 
@@ -493,9 +493,9 @@
         // synchronizing access to it.  It's too late at this point to abort the
         // dequeue operation.
         if (result == EGL_FALSE) {
-            LOGE("dequeueBuffer: error waiting for fence: %#x", eglGetError());
+            ALOGE("dequeueBuffer: error waiting for fence: %#x", eglGetError());
         } else if (result == EGL_TIMEOUT_EXPIRED_KHR) {
-            LOGE("dequeueBuffer: timeout waiting for fence");
+            ALOGE("dequeueBuffer: timeout waiting for fence");
         }
         eglDestroySyncKHR(dpy, fence);
     }
@@ -804,7 +804,7 @@
                 EGLSyncKHR fence = eglCreateSyncKHR(dpy, EGL_SYNC_FENCE_KHR,
                         NULL);
                 if (fence == EGL_NO_SYNC_KHR) {
-                    LOGE("updateTexImage: error creating fence: %#x",
+                    ALOGE("updateTexImage: error creating fence: %#x",
                             eglGetError());
                     return -EINVAL;
                 }
@@ -992,7 +992,7 @@
 }
 
 void SurfaceTexture::freeAllBuffersLocked() {
-    LOGW_IF(!mQueue.isEmpty(),
+    ALOGW_IF(!mQueue.isEmpty(),
             "freeAllBuffersLocked called but mQueue is not empty");
     mCurrentTexture = INVALID_BUFFER_SLOT;
     for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
@@ -1001,7 +1001,7 @@
 }
 
 void SurfaceTexture::freeAllBuffersExceptHeadLocked() {
-    LOGW_IF(!mQueue.isEmpty(),
+    ALOGW_IF(!mQueue.isEmpty(),
             "freeAllBuffersExceptCurrentLocked called but mQueue is not empty");
     int head = -1;
     if (!mQueue.empty()) {
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index b6f3c11..d0934ba 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -157,7 +157,7 @@
     if ((result & ISurfaceTexture::BUFFER_NEEDS_REALLOCATION) || gbuf == 0) {
         result = mSurfaceTexture->requestBuffer(buf, &gbuf);
         if (result != NO_ERROR) {
-            LOGE("dequeueBuffer: ISurfaceTexture::requestBuffer failed: %d",
+            ALOGE("dequeueBuffer: ISurfaceTexture::requestBuffer failed: %d",
                     result);
             return result;
         }
@@ -202,7 +202,7 @@
             return i;
         }
     }
-    LOGE("getSlotFromBufferLocked: unknown buffer: %p", buffer->handle);
+    ALOGE("getSlotFromBufferLocked: unknown buffer: %p", buffer->handle);
     return BAD_VALUE;
 }
 
@@ -230,7 +230,7 @@
     status_t err = mSurfaceTexture->queueBuffer(i, timestamp,
             &mDefaultWidth, &mDefaultHeight, &mTransformHint);
     if (err != OK)  {
-        LOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err);
+        ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err);
     }
     return err;
 }
@@ -452,7 +452,7 @@
     }
 
     status_t err = mSurfaceTexture->setCrop(*rect);
-    LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
+    ALOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
 
     return err;
 }
@@ -463,7 +463,7 @@
     Mutex::Autolock lock(mMutex);
 
     status_t err = mSurfaceTexture->setBufferCount(bufferCount);
-    LOGE_IF(err, "ISurfaceTexture::setBufferCount(%d) returned %s",
+    ALOGE_IF(err, "ISurfaceTexture::setBufferCount(%d) returned %s",
             bufferCount, strerror(-err));
 
     if (err == NO_ERROR) {
@@ -488,7 +488,7 @@
     mReqHeight = h;
 
     status_t err = mSurfaceTexture->setCrop(Rect(0, 0));
-    LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
+    ALOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
 
     return err;
 }
@@ -512,7 +512,7 @@
     Mutex::Autolock lock(mMutex);
     // mode is validated on the server
     status_t err = mSurfaceTexture->setScalingMode(mode);
-    LOGE_IF(err, "ISurfaceTexture::setScalingMode(%d) returned %s",
+    ALOGE_IF(err, "ISurfaceTexture::setScalingMode(%d) returned %s",
             mode, strerror(-err));
 
     return err;
@@ -553,11 +553,11 @@
     status_t err;
     uint8_t const * src_bits = NULL;
     err = src->lock(GRALLOC_USAGE_SW_READ_OFTEN, reg.bounds(), (void**)&src_bits);
-    LOGE_IF(err, "error locking src buffer %s", strerror(-err));
+    ALOGE_IF(err, "error locking src buffer %s", strerror(-err));
 
     uint8_t* dst_bits = NULL;
     err = dst->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, reg.bounds(), (void**)&dst_bits);
-    LOGE_IF(err, "error locking dst buffer %s", strerror(-err));
+    ALOGE_IF(err, "error locking dst buffer %s", strerror(-err));
 
     Region::const_iterator head(reg.begin());
     Region::const_iterator tail(reg.end());
@@ -600,7 +600,7 @@
         ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds)
 {
     if (mLockedBuffer != 0) {
-        LOGE("Surface::lock failed, already locked");
+        ALOGE("Surface::lock failed, already locked");
         return INVALID_OPERATION;
     }
 
@@ -615,11 +615,11 @@
 
     ANativeWindowBuffer* out;
     status_t err = dequeueBuffer(&out);
-    LOGE_IF(err, "dequeueBuffer failed (%s)", strerror(-err));
+    ALOGE_IF(err, "dequeueBuffer failed (%s)", strerror(-err));
     if (err == NO_ERROR) {
         sp<GraphicBuffer> backBuffer(GraphicBuffer::getSelf(out));
         err = lockBuffer(backBuffer.get());
-        LOGE_IF(err, "lockBuffer (handle=%p) failed (%s)",
+        ALOGE_IF(err, "lockBuffer (handle=%p) failed (%s)",
                 backBuffer->handle, strerror(-err));
         if (err == NO_ERROR) {
             const Rect bounds(backBuffer->width, backBuffer->height);
@@ -663,7 +663,7 @@
                     GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,
                     newDirtyRegion.bounds(), &vaddr);
 
-            LOGW_IF(res, "failed locking buffer (handle = %p)",
+            ALOGW_IF(res, "failed locking buffer (handle = %p)",
                     backBuffer->handle);
 
             mLockedBuffer = backBuffer;
@@ -680,15 +680,15 @@
 status_t SurfaceTextureClient::unlockAndPost()
 {
     if (mLockedBuffer == 0) {
-        LOGE("Surface::unlockAndPost failed, no locked buffer");
+        ALOGE("Surface::unlockAndPost failed, no locked buffer");
         return INVALID_OPERATION;
     }
 
     status_t err = mLockedBuffer->unlock();
-    LOGE_IF(err, "failed unlocking buffer (%p)", mLockedBuffer->handle);
+    ALOGE_IF(err, "failed unlocking buffer (%p)", mLockedBuffer->handle);
 
     err = queueBuffer(mLockedBuffer.get());
-    LOGE_IF(err, "queueBuffer (handle=%p) failed (%s)",
+    ALOGE_IF(err, "queueBuffer (handle=%p) failed (%s)",
             mLockedBuffer->handle, strerror(-err));
 
     mPostedBuffer = mLockedBuffer;
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index fa1e9b8..d1af1a3 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -50,7 +50,7 @@
     GLint maxTextureUnits;
     glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
     if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) {
-        LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT);
+        ALOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT);
     }
 
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index b8ba23d..656a384 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -1210,10 +1210,8 @@
     //       see if it matters.
     //       If we make a copy, then drawTextDecorations() should *not* make
     //       its own copy as it does right now.
+    // Beware: this needs Glyph encoding (already done on the Paint constructor)
     paint->setAntiAlias(true);
-#if RENDER_TEXT_AS_GLYPHS
-    paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-#endif
     addPaint(paint);
     addFloat(length < 0.0f ? paint->measureText(text, bytesCount) : length);
 }
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 8462307..790c143 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -150,7 +150,7 @@
     for (cacheX = glyph->mStartX, bX = nPenX; cacheX < endX; cacheX++, bX++) {
         for (cacheY = glyph->mStartY, bY = nPenY; cacheY < endY; cacheY++, bY++) {
             if (bX < 0 || bY < 0 || bX >= (int32_t) bitmapW || bY >= (int32_t) bitmapH) {
-                LOGE("Skipping invalid index");
+                ALOGE("Skipping invalid index");
                 continue;
             }
             uint8_t tempCol = cacheBuffer[cacheY * cacheWidth + cacheX];
@@ -191,7 +191,7 @@
 void Font::measure(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
         int numGlyphs, Rect *bounds) {
     if (bounds == NULL) {
-        LOGE("No return rectangle provided to measure text");
+        ALOGE("No return rectangle provided to measure text");
         return;
     }
     bounds->set(1e6, -1e6, -1e6, 1e6);
@@ -475,7 +475,7 @@
     cachedGlyph->mIsValid = false;
     // If the glyph is too tall, don't cache it
     if (glyph.fHeight + TEXTURE_BORDER_SIZE > mCacheLines[mCacheLines.size() - 1]->mMaxHeight) {
-        LOGE("Font size to large to fit in cache. width, height = %i, %i",
+        ALOGE("Font size to large to fit in cache. width, height = %i, %i",
                 (int) glyph.fWidth, (int) glyph.fHeight);
         return;
     }
@@ -871,7 +871,7 @@
     checkInit();
 
     if (!mCurrentFont) {
-        LOGE("No font set");
+        ALOGE("No font set");
         return false;
     }
 
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index a88a59a..3678788 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -154,7 +154,7 @@
 void GradientCache::generateTexture(SkBitmap* bitmap, Texture* texture) {
     SkAutoLockPixels autoLock(*bitmap);
     if (!bitmap->readyToDraw()) {
-        LOGE("Cannot generate texture from shader");
+        ALOGE("Cannot generate texture from shader");
         return;
     }
 
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index f122396..e320eb2 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -185,14 +185,14 @@
     Caches& caches = Caches::getInstance();
     GLuint fbo = caches.fboCache.get();
     if (!fbo) {
-        LOGW("Could not obtain an FBO");
+        ALOGW("Could not obtain an FBO");
         return NULL;
     }
 
     caches.activeTexture(0);
     Layer* layer = caches.layerCache.get(width, height);
     if (!layer) {
-        LOGW("Could not obtain a layer");
+        ALOGW("Could not obtain a layer");
         return NULL;
     }
 
@@ -360,7 +360,7 @@
 
         GLuint fbo = caches.fboCache.get();
         if (!fbo) {
-            LOGW("Could not obtain an FBO");
+            ALOGW("Could not obtain an FBO");
             return false;
         }
 
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 9101953..12ed205 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -172,7 +172,7 @@
         ALOGD("GL error from OpenGLRenderer: 0x%x", status);
         switch (status) {
             case GL_OUT_OF_MEMORY:
-                LOGE("  OpenGLRenderer is out of memory!");
+                ALOGE("  OpenGLRenderer is out of memory!");
                 break;
         }
     }
@@ -538,7 +538,7 @@
 #if DEBUG_LAYERS_AS_REGIONS
     GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
     if (status != GL_FRAMEBUFFER_COMPLETE) {
-        LOGE("Framebuffer incomplete (GL error code 0x%x)", status);
+        ALOGE("Framebuffer incomplete (GL error code 0x%x)", status);
 
         glBindFramebuffer(GL_FRAMEBUFFER, previousFbo);
         layer->deleteTexture();
@@ -569,7 +569,7 @@
  */
 void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
     if (!current->layer) {
-        LOGE("Attempting to compose a layer that does not exist");
+        ALOGE("Attempting to compose a layer that does not exist");
         return;
     }
 
diff --git a/libs/hwui/Program.cpp b/libs/hwui/Program.cpp
index 701314d..984461c 100644
--- a/libs/hwui/Program.cpp
+++ b/libs/hwui/Program.cpp
@@ -55,13 +55,13 @@
             GLint status;
             glGetProgramiv(mProgramId, GL_LINK_STATUS, &status);
             if (status != GL_TRUE) {
-                LOGE("Error while linking shaders:");
+                ALOGE("Error while linking shaders:");
                 GLint infoLen = 0;
                 glGetProgramiv(mProgramId, GL_INFO_LOG_LENGTH, &infoLen);
                 if (infoLen > 1) {
                     GLchar log[infoLen];
                     glGetProgramInfoLog(mProgramId, infoLen, 0, &log[0]);
-                    LOGE("%s", log);
+                    ALOGE("%s", log);
                 }
 
                 glDetachShader(mProgramId, mVertexShader);
@@ -142,7 +142,7 @@
         // use a fixed size instead
         GLchar log[512];
         glGetShaderInfoLog(shader, sizeof(log), 0, &log[0]);
-        LOGE("Error while compiling shader: %s", log);
+        ALOGE("Error while compiling shader: %s", log);
         glDeleteShader(shader);
         return 0;
     }
diff --git a/libs/hwui/ShapeCache.h b/libs/hwui/ShapeCache.h
index 2c0f3ab..30ce690 100644
--- a/libs/hwui/ShapeCache.h
+++ b/libs/hwui/ShapeCache.h
@@ -503,7 +503,7 @@
     const uint32_t height = uint32_t(pathHeight + offset * 2.0 + 0.5);
 
     if (width > mMaxTextureSize || height > mMaxTextureSize) {
-        LOGW("Shape %s too large to be rendered into a texture (%dx%d, max=%dx%d)",
+        ALOGW("Shape %s too large to be rendered into a texture (%dx%d, max=%dx%d)",
                 mName, width, height, mMaxTextureSize, mMaxTextureSize);
         return NULL;
     }
@@ -571,7 +571,7 @@
 void ShapeCache<Entry>::generateTexture(SkBitmap& bitmap, Texture* texture) {
     SkAutoLockPixels alp(bitmap);
     if (!bitmap.readyToDraw()) {
-        LOGE("Cannot generate texture from bitmap");
+        ALOGE("Cannot generate texture from bitmap");
         return;
     }
 
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index 237911b..cc09aae 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -125,7 +125,7 @@
 
     if (!texture) {
         if (bitmap->width() > mMaxTextureSize || bitmap->height() > mMaxTextureSize) {
-            LOGW("Bitmap too large to be uploaded into a texture (%dx%d, max=%dx%d)",
+            ALOGW("Bitmap too large to be uploaded into a texture (%dx%d, max=%dx%d)",
                     bitmap->width(), bitmap->height(), mMaxTextureSize, mMaxTextureSize);
             return NULL;
         }
@@ -202,7 +202,7 @@
     SkAutoLockPixels alp(*bitmap);
 
     if (!bitmap->readyToDraw()) {
-        LOGE("Cannot generate texture from bitmap");
+        ALOGE("Cannot generate texture from bitmap");
         return;
     }
 
@@ -249,7 +249,7 @@
         texture->blend = !bitmap->isOpaque();
         break;
     default:
-        LOGW("Unsupported bitmap config: %d", bitmap->getConfig());
+        ALOGW("Unsupported bitmap config: %d", bitmap->getConfig());
         break;
     }
 
diff --git a/libs/rs/driver/rsdAllocation.cpp b/libs/rs/driver/rsdAllocation.cpp
index e79cd0f..1f70e66 100644
--- a/libs/rs/driver/rsdAllocation.cpp
+++ b/libs/rs/driver/rsdAllocation.cpp
@@ -172,7 +172,7 @@
 
         if (!drv->renderTargetID) {
             // This should generally not happen
-            LOGE("allocateRenderTarget failed to gen mRenderTargetID");
+            ALOGE("allocateRenderTarget failed to gen mRenderTargetID");
             rsc->dumpDebug();
             return;
         }
@@ -195,7 +195,7 @@
         RSD_CALL_GL(glGenBuffers, 1, &drv->bufferID);
     }
     if (!drv->bufferID) {
-        LOGE("Upload to buffer object failed");
+        ALOGE("Upload to buffer object failed");
         drv->uploadDeferred = true;
         return;
     }
@@ -460,7 +460,7 @@
         uint8_t *srcPtr = getOffsetPtr(srcAlloc, srcXoff, srcYoff + i, srcLod, srcFace);
         memcpy(dstPtr, srcPtr, w * elementSize);
 
-        //LOGE("COPIED dstXoff(%u), dstYoff(%u), dstLod(%u), dstFace(%u), w(%u), h(%u), srcXoff(%u), srcYoff(%u), srcLod(%u), srcFace(%u)",
+        //ALOGE("COPIED dstXoff(%u), dstYoff(%u), dstLod(%u), dstFace(%u), w(%u), h(%u), srcXoff(%u), srcYoff(%u), srcLod(%u), srcFace(%u)",
         //     dstXoff, dstYoff, dstLod, dstFace, w, h, srcXoff, srcYoff, srcLod, srcFace);
     }
 }
diff --git a/libs/rs/driver/rsdBcc.cpp b/libs/rs/driver/rsdBcc.cpp
index 917b419..24bb288 100644
--- a/libs/rs/driver/rsdBcc.cpp
+++ b/libs/rs/driver/rsdBcc.cpp
@@ -69,7 +69,7 @@
                      uint8_t const *bitcode,
                      size_t bitcodeSize,
                      uint32_t flags) {
-    //LOGE("rsdScriptCreate %p %p %p %p %i %i %p", rsc, resName, cacheDir, bitcode, bitcodeSize, flags, lookupFunc);
+    //ALOGE("rsdScriptCreate %p %p %p %p %i %i %p", rsc, resName, cacheDir, bitcode, bitcodeSize, flags, lookupFunc);
 
     pthread_mutex_lock(&rsdgInitMutex);
 
@@ -93,14 +93,14 @@
     drv->ME = new bcinfo::MetadataExtractor((const char*)drv->mScriptText,
                                             drv->mScriptTextLength);
     if (!drv->ME->extract()) {
-      LOGE("bcinfo: failed to read script metadata");
+      ALOGE("bcinfo: failed to read script metadata");
       goto error;
     }
 
-    //LOGE("mBccScript %p", script->mBccScript);
+    //ALOGE("mBccScript %p", script->mBccScript);
 
     if (bccRegisterSymbolCallback(drv->mBccScript, &rsdLookupRuntimeStub, script) != 0) {
-        LOGE("bcc: FAILS to register symbol callback");
+        ALOGE("bcc: FAILS to register symbol callback");
         goto error;
     }
 
@@ -108,17 +108,17 @@
                   resName,
                   (char const *)drv->mScriptText,
                   drv->mScriptTextLength, 0) != 0) {
-        LOGE("bcc: FAILS to read bitcode");
+        ALOGE("bcc: FAILS to read bitcode");
         goto error;
     }
 
     if (bccLinkFile(drv->mBccScript, "/system/lib/libclcore.bc", 0) != 0) {
-        LOGE("bcc: FAILS to link bitcode");
+        ALOGE("bcc: FAILS to link bitcode");
         goto error;
     }
 
     if (bccPrepareExecutable(drv->mBccScript, cacheDir, resName, 0) != 0) {
-        LOGE("bcc: FAILS to prepare executable");
+        ALOGE("bcc: FAILS to prepare executable");
         goto error;
     }
 
@@ -234,8 +234,8 @@
             return;
         }
 
-        //LOGE("usr idx %i, x %i,%i  y %i,%i", idx, mtls->xStart, mtls->xEnd, yStart, yEnd);
-        //LOGE("usr ptr in %p,  out %p", mtls->ptrIn, mtls->ptrOut);
+        //ALOGE("usr idx %i, x %i,%i  y %i,%i", idx, mtls->xStart, mtls->xEnd, yStart, yEnd);
+        //ALOGE("usr ptr in %p,  out %p", mtls->ptrIn, mtls->ptrOut);
         for (p.y = yStart; p.y < yEnd; p.y++) {
             uint32_t offset = mtls->dimX * p.y;
             p.out = mtls->ptrOut + (mtls->eStrideOut * offset);
@@ -265,8 +265,8 @@
             return;
         }
 
-        //LOGE("usr slice %i idx %i, x %i,%i", slice, idx, xStart, xEnd);
-        //LOGE("usr ptr in %p,  out %p", mtls->ptrIn, mtls->ptrOut);
+        //ALOGE("usr slice %i idx %i, x %i,%i", slice, idx, xStart, xEnd);
+        //ALOGE("usr ptr in %p,  out %p", mtls->ptrIn, mtls->ptrOut);
 
         p.out = mtls->ptrOut + (mtls->eStrideOut * xStart);
         p.in = mtls->ptrIn + (mtls->eStrideIn * xStart);
@@ -372,7 +372,7 @@
             rsdLaunchThreads(mrsc, wc_x, &mtls);
         }
 
-        //LOGE("launch 1");
+        //ALOGE("launch 1");
     } else {
         RsForEachStubParamStruct p;
         memset(&p, 0, sizeof(p));
@@ -380,7 +380,7 @@
         p.usr_len = mtls.usrLen;
         uint32_t sig = mtls.sig;
 
-        //LOGE("launch 3");
+        //ALOGE("launch 3");
         outer_foreach_t fn = dc->mForEachLaunch[sig];
         for (p.ar[0] = mtls.arrayStart; p.ar[0] < mtls.arrayEnd; p.ar[0]++) {
             for (p.z = mtls.zStart; p.z < mtls.zEnd; p.z++) {
@@ -432,7 +432,7 @@
                             const void *params,
                             size_t paramLength) {
     DrvScript *drv = (DrvScript *)script->mHal.drv;
-    //LOGE("invoke %p %p %i %p %i", dc, script, slot, params, paramLength);
+    //ALOGE("invoke %p %p %i %p %i", dc, script, slot, params, paramLength);
 
     Script * oldTLS = setTLS(script);
     ((void (*)(const void *, uint32_t))
@@ -444,7 +444,7 @@
                            uint32_t slot, void *data, size_t dataLength) {
     DrvScript *drv = (DrvScript *)script->mHal.drv;
     //rsAssert(!script->mFieldIsObject[slot]);
-    //LOGE("setGlobalVar %p %p %i %p %i", dc, script, slot, data, dataLength);
+    //ALOGE("setGlobalVar %p %p %i %p %i", dc, script, slot, data, dataLength);
 
     int32_t *destPtr = ((int32_t **)drv->mFieldAddress)[slot];
     if (!destPtr) {
@@ -458,7 +458,7 @@
 void rsdScriptSetGlobalBind(const Context *dc, const Script *script, uint32_t slot, void *data) {
     DrvScript *drv = (DrvScript *)script->mHal.drv;
     //rsAssert(!script->mFieldIsObject[slot]);
-    //LOGE("setGlobalBind %p %p %i %p", dc, script, slot, data);
+    //ALOGE("setGlobalBind %p %p %i %p", dc, script, slot, data);
 
     int32_t *destPtr = ((int32_t **)drv->mFieldAddress)[slot];
     if (!destPtr) {
@@ -472,7 +472,7 @@
 void rsdScriptSetGlobalObj(const Context *dc, const Script *script, uint32_t slot, ObjectBase *data) {
     DrvScript *drv = (DrvScript *)script->mHal.drv;
     //rsAssert(script->mFieldIsObject[slot]);
-    //LOGE("setGlobalObj %p %p %i %p", dc, script, slot, data);
+    //ALOGE("setGlobalObj %p %p %i %p", dc, script, slot, data);
 
     int32_t *destPtr = ((int32_t **)drv->mFieldAddress)[slot];
     if (!destPtr) {
diff --git a/libs/rs/driver/rsdCore.cpp b/libs/rs/driver/rsdCore.cpp
index 9292fa1..b514e21 100644
--- a/libs/rs/driver/rsdCore.cpp
+++ b/libs/rs/driver/rsdCore.cpp
@@ -146,7 +146,7 @@
 
     int status = pthread_setspecific(rsdgThreadTLSKey, &dc->mTlsStruct);
     if (status) {
-        LOGE("pthread_setspecific %i", status);
+        ALOGE("pthread_setspecific %i", status);
     }
 
 #if 0
@@ -156,7 +156,7 @@
     cpuset.bits[idx / 64] |= 1ULL << (idx % 64);
     int ret = syscall(241, rsc->mWorkers.mNativeThreadId[idx],
               sizeof(cpuset), &cpuset);
-    LOGE("SETAFFINITY ret = %i %s", ret, EGLUtils::strerror(ret));
+    ALOGE("SETAFFINITY ret = %i %s", ret, EGLUtils::strerror(ret));
 #endif
 
     while (!dc->mExit) {
@@ -191,7 +191,7 @@
 
     RsdHal *dc = (RsdHal *)calloc(1, sizeof(RsdHal));
     if (!dc) {
-        LOGE("Calloc for driver hal failed.");
+        ALOGE("Calloc for driver hal failed.");
         return false;
     }
     rsc->mHal.drv = dc;
@@ -200,7 +200,7 @@
     if (!rsdgThreadTLSKeyCount) {
         int status = pthread_key_create(&rsdgThreadTLSKey, NULL);
         if (status) {
-            LOGE("Failed to init thread tls key.");
+            ALOGE("Failed to init thread tls key.");
             pthread_mutex_unlock(&rsdgInitMutex);
             return false;
         }
@@ -214,7 +214,7 @@
     dc->mTlsStruct.mScript = NULL;
     int status = pthread_setspecific(rsdgThreadTLSKey, &dc->mTlsStruct);
     if (status) {
-        LOGE("pthread_setspecific %i", status);
+        ALOGE("pthread_setspecific %i", status);
     }
 
 
@@ -236,7 +236,7 @@
     pthread_attr_t threadAttr;
     status = pthread_attr_init(&threadAttr);
     if (status) {
-        LOGE("Failed to init thread attribute.");
+        ALOGE("Failed to init thread attribute.");
         return false;
     }
 
@@ -244,7 +244,7 @@
         status = pthread_create(&dc->mWorkers.mThreadId[ct], &threadAttr, HelperThreadProc, rsc);
         if (status) {
             dc->mWorkers.mCount = ct;
-            LOGE("Created fewer than expected number of RS threads.");
+            ALOGE("Created fewer than expected number of RS threads.");
             break;
         }
     }
diff --git a/libs/rs/driver/rsdGL.cpp b/libs/rs/driver/rsdGL.cpp
index d4deefb..b53a68cf 100644
--- a/libs/rs/driver/rsdGL.cpp
+++ b/libs/rs/driver/rsdGL.cpp
@@ -107,14 +107,14 @@
 }
 
 static void DumpDebug(RsdHal *dc) {
-    LOGE(" EGL ver %i %i", dc->gl.egl.majorVersion, dc->gl.egl.minorVersion);
-    LOGE(" EGL context %p  surface %p,  Display=%p", dc->gl.egl.context, dc->gl.egl.surface,
+    ALOGE(" EGL ver %i %i", dc->gl.egl.majorVersion, dc->gl.egl.minorVersion);
+    ALOGE(" EGL context %p  surface %p,  Display=%p", dc->gl.egl.context, dc->gl.egl.surface,
          dc->gl.egl.display);
-    LOGE(" GL vendor: %s", dc->gl.gl.vendor);
-    LOGE(" GL renderer: %s", dc->gl.gl.renderer);
-    LOGE(" GL Version: %s", dc->gl.gl.version);
-    LOGE(" GL Extensions: %s", dc->gl.gl.extensions);
-    LOGE(" GL int Versions %i %i", dc->gl.gl.majorVersion, dc->gl.gl.minorVersion);
+    ALOGE(" GL vendor: %s", dc->gl.gl.vendor);
+    ALOGE(" GL renderer: %s", dc->gl.gl.renderer);
+    ALOGE(" GL Version: %s", dc->gl.gl.version);
+    ALOGE(" GL Extensions: %s", dc->gl.gl.extensions);
+    ALOGE(" GL int Versions %i %i", dc->gl.gl.majorVersion, dc->gl.gl.minorVersion);
 
     ALOGV("MAX Textures %i, %i  %i", dc->gl.gl.maxVertexTextureUnits,
          dc->gl.gl.maxFragmentTextureImageUnits, dc->gl.gl.maxTextureImageUnits);
@@ -223,7 +223,7 @@
                 configAttribs, configs, numConfigs, &n);
         if (!ret || !n) {
             checkEglError("eglChooseConfig", ret);
-            LOGE("%p, couldn't find an EGLConfig matching the screen format\n", rsc);
+            ALOGE("%p, couldn't find an EGLConfig matching the screen format\n", rsc);
         }
 
         // The first config is guaranteed to over-satisfy the constraints
@@ -268,7 +268,7 @@
                                           EGL_NO_CONTEXT, context_attribs2);
     checkEglError("eglCreateContext");
     if (dc->gl.egl.context == EGL_NO_CONTEXT) {
-        LOGE("%p, eglCreateContext returned EGL_NO_CONTEXT", rsc);
+        ALOGE("%p, eglCreateContext returned EGL_NO_CONTEXT", rsc);
         rsc->setWatchdogGL(NULL, 0, NULL);
         return false;
     }
@@ -281,7 +281,7 @@
                                                         pbuffer_attribs);
     checkEglError("eglCreatePbufferSurface");
     if (dc->gl.egl.surfaceDefault == EGL_NO_SURFACE) {
-        LOGE("eglCreatePbufferSurface returned EGL_NO_SURFACE");
+        ALOGE("eglCreatePbufferSurface returned EGL_NO_SURFACE");
         rsdGLShutdown(rsc);
         rsc->setWatchdogGL(NULL, 0, NULL);
         return false;
@@ -291,7 +291,7 @@
     ret = eglMakeCurrent(dc->gl.egl.display, dc->gl.egl.surfaceDefault,
                          dc->gl.egl.surfaceDefault, dc->gl.egl.context);
     if (ret == EGL_FALSE) {
-        LOGE("eglMakeCurrent returned EGL_FALSE");
+        ALOGE("eglMakeCurrent returned EGL_FALSE");
         checkEglError("eglMakeCurrent", ret);
         rsdGLShutdown(rsc);
         rsc->setWatchdogGL(NULL, 0, NULL);
@@ -320,7 +320,7 @@
     }
 
     if (!verptr) {
-        LOGE("Error, OpenGL ES Lite not supported");
+        ALOGE("Error, OpenGL ES Lite not supported");
         rsdGLShutdown(rsc);
         rsc->setWatchdogGL(NULL, 0, NULL);
         return false;
@@ -402,7 +402,7 @@
                                                     dc->gl.wndSurface, NULL);
         checkEglError("eglCreateWindowSurface");
         if (dc->gl.egl.surface == EGL_NO_SURFACE) {
-            LOGE("eglCreateWindowSurface returned EGL_NO_SURFACE");
+            ALOGE("eglCreateWindowSurface returned EGL_NO_SURFACE");
         }
 
         rsc->setWatchdogGL("eglMakeCurrent", __LINE__, __FILE__);
@@ -439,7 +439,7 @@
             }
         }
 
-        LOGE("%p, %s", rsc, buf);
+        ALOGE("%p, %s", rsc, buf);
     }
 
 }
diff --git a/libs/rs/driver/rsdMeshObj.cpp b/libs/rs/driver/rsdMeshObj.cpp
index 24a7183..99d79dc 100644
--- a/libs/rs/driver/rsdMeshObj.cpp
+++ b/libs/rs/driver/rsdMeshObj.cpp
@@ -133,7 +133,7 @@
 void RsdMeshObj::renderPrimitiveRange(const Context *rsc, uint32_t primIndex,
                                       uint32_t start, uint32_t len) const {
     if (len < 1 || primIndex >= mRSMesh->mHal.state.primitivesCount || mAttribCount == 0) {
-        LOGE("Invalid mesh or parameters");
+        ALOGE("Invalid mesh or parameters");
         return;
     }
 
diff --git a/libs/rs/driver/rsdProgramStore.cpp b/libs/rs/driver/rsdProgramStore.cpp
index af44b02..fca9ba9 100644
--- a/libs/rs/driver/rsdProgramStore.cpp
+++ b/libs/rs/driver/rsdProgramStore.cpp
@@ -70,7 +70,7 @@
         drv->depthFunc = GL_NOTEQUAL;
         break;
     default:
-        LOGE("Unknown depth function.");
+        ALOGE("Unknown depth function.");
         goto error;
     }
 
@@ -111,7 +111,7 @@
         drv->blendSrc = GL_SRC_ALPHA_SATURATE;
         break;
     default:
-        LOGE("Unknown blend src mode.");
+        ALOGE("Unknown blend src mode.");
         goto error;
     }
 
@@ -141,7 +141,7 @@
         drv->blendDst = GL_ONE_MINUS_DST_ALPHA;
         break;
     default:
-        LOGE("Unknown blend dst mode.");
+        ALOGE("Unknown blend dst mode.");
         goto error;
     }
 
diff --git a/libs/rs/driver/rsdRuntimeMath.cpp b/libs/rs/driver/rsdRuntimeMath.cpp
index b927ed2..e315539 100644
--- a/libs/rs/driver/rsdRuntimeMath.cpp
+++ b/libs/rs/driver/rsdRuntimeMath.cpp
@@ -122,7 +122,7 @@
 }
 
 static float SC_mix_f32(float start, float stop, float amount) {
-    //LOGE("lerpf %f  %f  %f", start, stop, amount);
+    //ALOGE("lerpf %f  %f  %f", start, stop, amount);
     return start + (stop - start) * amount;
 }
 
diff --git a/libs/rs/driver/rsdRuntimeStubs.cpp b/libs/rs/driver/rsdRuntimeStubs.cpp
index b457d8b..14c2970 100644
--- a/libs/rs/driver/rsdRuntimeStubs.cpp
+++ b/libs/rs/driver/rsdRuntimeStubs.cpp
@@ -686,7 +686,7 @@
         s->mHal.info.isThreadable &= sym->threadable;
         return sym->mPtr;
     }
-    LOGE("ScriptC sym lookup failed for %s", name);
+    ALOGE("ScriptC sym lookup failed for %s", name);
     return NULL;
 }
 
diff --git a/libs/rs/driver/rsdShader.cpp b/libs/rs/driver/rsdShader.cpp
index e9ce7c2..a10deb4 100644
--- a/libs/rs/driver/rsdShader.cpp
+++ b/libs/rs/driver/rsdShader.cpp
@@ -190,7 +190,7 @@
                 char* buf = (char*) malloc(infoLen);
                 if (buf) {
                     RSD_CALL_GL(glGetShaderInfoLog, mShaderID, infoLen, NULL, buf);
-                    LOGE("Could not compile shader \n%s\n", buf);
+                    ALOGE("Could not compile shader \n%s\n", buf);
                     free(buf);
                 }
                 RSD_CALL_GL(glDeleteShader, mShaderID);
@@ -287,9 +287,9 @@
                 rsAssert(0);
             }
         }
-        LOGE("Element size %u data=%p", elementSize, fd);
+        ALOGE("Element size %u data=%p", elementSize, fd);
         fd += elementSize;
-        LOGE("New data=%p", fd);
+        ALOGE("New data=%p", fd);
     }
 }
 
@@ -404,7 +404,7 @@
     uint32_t numTexturesToBind = mRSProgram->mHal.state.texturesCount;
     uint32_t numTexturesAvailable = dc->gl.gl.maxFragmentTextureImageUnits;
     if (numTexturesToBind >= numTexturesAvailable) {
-        LOGE("Attempting to bind %u textures on shader id %u, but only %u are available",
+        ALOGE("Attempting to bind %u textures on shader id %u, but only %u are available",
              mRSProgram->mHal.state.texturesCount, (uint32_t)this, numTexturesAvailable);
         rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind more textuers than available");
         numTexturesToBind = numTexturesAvailable;
@@ -422,7 +422,7 @@
 
         DrvAllocation *drvTex = (DrvAllocation *)mRSProgram->mHal.state.textures[ct]->mHal.drv;
         if (drvTex->glTarget != GL_TEXTURE_2D && drvTex->glTarget != GL_TEXTURE_CUBE_MAP) {
-            LOGE("Attempting to bind unknown texture to shader id %u, texture unit %u", (uint)this, ct);
+            ALOGE("Attempting to bind unknown texture to shader id %u, texture unit %u", (uint)this, ct);
             rsc->setError(RS_ERROR_BAD_SHADER, "Non-texture allocation bound to a shader");
         }
         RSD_CALL_GL(glBindTexture, drvTex->glTarget, drvTex->textureID);
@@ -450,7 +450,7 @@
     for (uint32_t ct=0; ct < mRSProgram->mHal.state.constantsCount; ct++) {
         Allocation *alloc = mRSProgram->mHal.state.constants[ct];
         if (!alloc) {
-            LOGE("Attempting to set constants on shader id %u, but alloc at slot %u is not set",
+            ALOGE("Attempting to set constants on shader id %u, but alloc at slot %u is not set",
                  (uint32_t)this, ct);
             rsc->setError(RS_ERROR_BAD_SHADER, "No constant allocation bound");
             continue;
diff --git a/libs/rs/driver/rsdShaderCache.cpp b/libs/rs/driver/rsdShaderCache.cpp
index 2871a12..f6236e7 100644
--- a/libs/rs/driver/rsdShaderCache.cpp
+++ b/libs/rs/driver/rsdShaderCache.cpp
@@ -135,7 +135,7 @@
     }
 
     //ALOGV("RsdShaderCache miss");
-    //LOGE("e0 %x", glGetError());
+    //ALOGE("e0 %x", glGetError());
     ProgramEntry *e = new ProgramEntry(vtx->getAttribCount(),
                                        vtx->getUniformCount(),
                                        frag->getUniformCount());
@@ -147,7 +147,7 @@
     if (e->program) {
         GLuint pgm = e->program;
         glAttachShader(pgm, vtx->getShaderID());
-        //LOGE("e1 %x", glGetError());
+        //ALOGE("e1 %x", glGetError());
         glAttachShader(pgm, frag->getShaderID());
 
         glBindAttribLocation(pgm, 0, "ATTRIB_position");
@@ -155,9 +155,9 @@
         glBindAttribLocation(pgm, 2, "ATTRIB_normal");
         glBindAttribLocation(pgm, 3, "ATTRIB_texture0");
 
-        //LOGE("e2 %x", glGetError());
+        //ALOGE("e2 %x", glGetError());
         glLinkProgram(pgm);
-        //LOGE("e3 %x", glGetError());
+        //ALOGE("e3 %x", glGetError());
         GLint linkStatus = GL_FALSE;
         glGetProgramiv(pgm, GL_LINK_STATUS, &linkStatus);
         if (linkStatus != GL_TRUE) {
@@ -167,7 +167,7 @@
                 char* buf = (char*) malloc(bufLength);
                 if (buf) {
                     glGetProgramInfoLog(pgm, bufLength, NULL, buf);
-                    LOGE("Could not link program:\n%s\n", buf);
+                    ALOGE("Could not link program:\n%s\n", buf);
                     free(buf);
                 }
             }
@@ -205,7 +205,7 @@
                     glGetActiveUniform(pgm, ct, maxNameLength, &uniformList[ct]->writtenLength,
                                        &uniformList[ct]->arraySize, &uniformList[ct]->type,
                                        uniformList[ct]->name);
-                    //LOGE("GL UNI idx=%u, arraySize=%u, name=%s", ct,
+                    //ALOGE("GL UNI idx=%u, arraySize=%u, name=%s", ct,
                     //     uniformList[ct]->arraySize, uniformList[ct]->name);
                 }
             }
diff --git a/libs/rs/rsAdapter.cpp b/libs/rs/rsAdapter.cpp
index 6e8ca70..177fb60 100644
--- a/libs/rs/rsAdapter.cpp
+++ b/libs/rs/rsAdapter.cpp
@@ -140,7 +140,7 @@
     rsAssert(mAllocation->getPtr());
     rsAssert(mAllocation->getType());
     if (mFace != 0 && !mAllocation->getType()->getDimFaces()) {
-        LOGE("Adapter wants cubemap face, but allocation has none");
+        ALOGE("Adapter wants cubemap face, but allocation has none");
         return NULL;
     }
 
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index c1192fe..2773d5c 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -75,7 +75,7 @@
     const uint32_t eSize = mHal.state.type->getElementSizeBytes();
 
     if ((count * eSize) != sizeBytes) {
-        LOGE("Allocation::subData called with mismatched size expected %i, got %i",
+        ALOGE("Allocation::subData called with mismatched size expected %i, got %i",
              (count * eSize), sizeBytes);
         mHal.state.type->dumpLOGV("type info");
         return;
@@ -90,10 +90,10 @@
     const uint32_t eSize = mHal.state.elementSizeBytes;
     const uint32_t lineSize = eSize * w;
 
-    //LOGE("data2d %p,  %i %i %i %i %i %i %p %i", this, xoff, yoff, lod, face, w, h, data, sizeBytes);
+    //ALOGE("data2d %p,  %i %i %i %i %i %i %p %i", this, xoff, yoff, lod, face, w, h, data, sizeBytes);
 
     if ((lineSize * h) != sizeBytes) {
-        LOGE("Allocation size mismatch, expected %i, got %i", (lineSize * h), sizeBytes);
+        ALOGE("Allocation size mismatch, expected %i, got %i", (lineSize * h), sizeBytes);
         rsAssert(!"Allocation::subData called with mismatched size");
         return;
     }
@@ -112,20 +112,20 @@
     uint32_t eSize = mHal.state.elementSizeBytes;
 
     if (cIdx >= mHal.state.type->getElement()->getFieldCount()) {
-        LOGE("Error Allocation::subElementData component %i out of range.", cIdx);
+        ALOGE("Error Allocation::subElementData component %i out of range.", cIdx);
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData component out of range.");
         return;
     }
 
     if (x >= mHal.state.dimensionX) {
-        LOGE("Error Allocation::subElementData X offset %i out of range.", x);
+        ALOGE("Error Allocation::subElementData X offset %i out of range.", x);
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData X offset out of range.");
         return;
     }
 
     const Element * e = mHal.state.type->getElement()->getField(cIdx);
     if (sizeBytes != e->getSizeBytes()) {
-        LOGE("Error Allocation::subElementData data size %i does not match field size %zu.", sizeBytes, e->getSizeBytes());
+        ALOGE("Error Allocation::subElementData data size %i does not match field size %zu.", sizeBytes, e->getSizeBytes());
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData bad size.");
         return;
     }
@@ -139,19 +139,19 @@
     uint32_t eSize = mHal.state.elementSizeBytes;
 
     if (x >= mHal.state.dimensionX) {
-        LOGE("Error Allocation::subElementData X offset %i out of range.", x);
+        ALOGE("Error Allocation::subElementData X offset %i out of range.", x);
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData X offset out of range.");
         return;
     }
 
     if (y >= mHal.state.dimensionY) {
-        LOGE("Error Allocation::subElementData X offset %i out of range.", x);
+        ALOGE("Error Allocation::subElementData X offset %i out of range.", x);
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData X offset out of range.");
         return;
     }
 
     if (cIdx >= mHal.state.type->getElement()->getFieldCount()) {
-        LOGE("Error Allocation::subElementData component %i out of range.", cIdx);
+        ALOGE("Error Allocation::subElementData component %i out of range.", cIdx);
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData component out of range.");
         return;
     }
@@ -159,7 +159,7 @@
     const Element * e = mHal.state.type->getElement()->getField(cIdx);
 
     if (sizeBytes != e->getSizeBytes()) {
-        LOGE("Error Allocation::subElementData data size %i does not match field size %zu.", sizeBytes, e->getSizeBytes());
+        ALOGE("Error Allocation::subElementData data size %i does not match field size %zu.", sizeBytes, e->getSizeBytes());
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData bad size.");
         return;
     }
@@ -299,7 +299,7 @@
     // First make sure we are reading the correct object
     RsA3DClassID classID = (RsA3DClassID)stream->loadU32();
     if (classID != RS_A3D_CLASS_ID_ALLOCATION) {
-        LOGE("allocation loading skipped due to invalid class id\n");
+        ALOGE("allocation loading skipped due to invalid class id\n");
         return NULL;
     }
 
@@ -321,7 +321,7 @@
     uint32_t packedSize = alloc->getPackedSize();
     if (dataSize != type->getSizeBytes() &&
         dataSize != packedSize) {
-        LOGE("failed to read allocation because numbytes written is not the same loaded type wants\n");
+        ALOGE("failed to read allocation because numbytes written is not the same loaded type wants\n");
         ObjectBase::checkDelete(alloc);
         ObjectBase::checkDelete(type);
         return NULL;
@@ -409,7 +409,7 @@
 }
 
 void Allocation::resize2D(Context *rsc, uint32_t dimX, uint32_t dimY) {
-    LOGE("not implemented");
+    ALOGE("not implemented");
 }
 
 /////////////////
@@ -587,7 +587,7 @@
     RsAllocation vTexAlloc = rsi_AllocationCreateTyped(rsc, vtype, mips, usages);
     Allocation *texAlloc = static_cast<Allocation *>(vTexAlloc);
     if (texAlloc == NULL) {
-        LOGE("Memory allocation failure");
+        ALOGE("Memory allocation failure");
         return NULL;
     }
 
@@ -611,7 +611,7 @@
     RsAllocation vTexAlloc = rsi_AllocationCreateTyped(rsc, vtype, mips, usages);
     Allocation *texAlloc = static_cast<Allocation *>(vTexAlloc);
     if (texAlloc == NULL) {
-        LOGE("Memory allocation failure");
+        ALOGE("Memory allocation failure");
         return NULL;
     }
 
diff --git a/libs/rs/rsAnimation.cpp b/libs/rs/rsAnimation.cpp
index 48b4f02..a4093d9 100644
--- a/libs/rs/rsAnimation.cpp
+++ b/libs/rs/rsAnimation.cpp
@@ -126,7 +126,7 @@
                                 RsAnimationInterpolation interp,
                                 RsAnimationEdge pre,
                                 RsAnimationEdge post) {
-    //LOGE("rsi_ElementCreate %i %i %i %i", dt, dk, norm, vecSize);
+    //ALOGE("rsi_ElementCreate %i %i %i %i", dt, dk, norm, vecSize);
     Animation *a = NULL;//Animation::create(rsc, inValues, outValues, valueCount, interp, pre, post);
     if (a != NULL) {
         a->incUserRef();
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index 293fc3a..ad2ff0f 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -40,7 +40,7 @@
 
     if (!mHal.funcs.initGraphics(this)) {
         pthread_mutex_unlock(&gInitMutex);
-        LOGE("%p initGraphics failed", this);
+        ALOGE("%p initGraphics failed", this);
         return false;
     }
 
@@ -219,7 +219,7 @@
 
     if (!rsdHalInit(rsc, 0, 0)) {
         rsc->setError(RS_ERROR_FATAL_DRIVER, "Failed initializing GL");
-        LOGE("Hal init failed");
+        ALOGE("Hal init failed");
         return NULL;
     }
     rsc->mHal.funcs.setPriority(rsc, rsc->mThreadPriority);
@@ -322,10 +322,10 @@
 void Context::printWatchdogInfo(void *ctx) {
     Context *rsc = (Context *)ctx;
     if (rsc->watchdog.command && rsc->watchdog.file) {
-        LOGE("RS watchdog timeout: %i  %s  line %i %s", rsc->watchdog.inRoot,
+        ALOGE("RS watchdog timeout: %i  %s  line %i %s", rsc->watchdog.inRoot,
              rsc->watchdog.command, rsc->watchdog.line, rsc->watchdog.file);
     } else {
-        LOGE("RS watchdog timeout: %i", rsc->watchdog.inRoot);
+        ALOGE("RS watchdog timeout: %i", rsc->watchdog.inRoot);
     }
 }
 
@@ -403,7 +403,7 @@
 
     status = pthread_attr_init(&threadAttr);
     if (status) {
-        LOGE("Failed to init thread attribute.");
+        ALOGE("Failed to init thread attribute.");
         return false;
     }
 
@@ -414,7 +414,7 @@
 
     status = pthread_create(&mThreadId, &threadAttr, threadProc, this);
     if (status) {
-        LOGE("Failed to start rs context thread.");
+        ALOGE("Failed to start rs context thread.");
         return false;
     }
     while (!mRunning && (mError == RS_ERROR_NONE)) {
@@ -422,7 +422,7 @@
     }
 
     if (mError != RS_ERROR_NONE) {
-        LOGE("Errors during thread init");
+        ALOGE("Errors during thread init");
         return false;
     }
 
@@ -602,12 +602,12 @@
 
 
 void Context::dumpDebug() const {
-    LOGE("RS Context debug %p", this);
-    LOGE("RS Context debug");
+    ALOGE("RS Context debug %p", this);
+    ALOGE("RS Context debug");
 
-    LOGE(" RS width %i, height %i", mWidth, mHeight);
-    LOGE(" RS running %i, exit %i, paused %i", mRunning, mExit, mPaused);
-    LOGE(" RS pThreadID %li, nativeThreadID %i", (long int)mThreadId, mNativeThreadId);
+    ALOGE(" RS width %i, height %i", mWidth, mHeight);
+    ALOGE(" RS running %i, exit %i, paused %i", mRunning, mExit, mPaused);
+    ALOGE(" RS pThreadID %li, nativeThreadID %i", (long int)mThreadId, mNativeThreadId);
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////
@@ -628,7 +628,7 @@
     Sampler *s = static_cast<Sampler *>(vs);
 
     if (slot > RS_MAX_SAMPLER_SLOT) {
-        LOGE("Invalid sampler slot");
+        ALOGE("Invalid sampler slot");
         return;
     }
 
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index c6582c9..61c29f9 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -50,13 +50,13 @@
 #define CHECK_OBJ(o) { \
     GET_TLS(); \
     if (!ObjectBase::isValid(rsc, (const ObjectBase *)o)) {  \
-        LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__);  \
+        ALOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__);  \
     } \
 }
 #define CHECK_OBJ_OR_NULL(o) { \
     GET_TLS(); \
     if (o && !ObjectBase::isValid(rsc, (const ObjectBase *)o)) {  \
-        LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__);  \
+        ALOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__);  \
     } \
 }
 #else
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index 56c31b6..dff9585 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -107,7 +107,7 @@
     // First make sure we are reading the correct object
     RsA3DClassID classID = (RsA3DClassID)stream->loadU32();
     if (classID != RS_A3D_CLASS_ID_ELEMENT) {
-        LOGE("element loading skipped due to invalid class id\n");
+        ALOGE("element loading skipped due to invalid class id\n");
         return NULL;
     }
 
diff --git a/libs/rs/rsFBOCache.cpp b/libs/rs/rsFBOCache.cpp
index f4a8bc6..d50f3e0 100644
--- a/libs/rs/rsFBOCache.cpp
+++ b/libs/rs/rsFBOCache.cpp
@@ -46,12 +46,12 @@
 
 void FBOCache::bindColorTarget(Context *rsc, Allocation *a, uint32_t slot) {
     if (slot >= mHal.state.colorTargetsCount) {
-        LOGE("Invalid render target index");
+        ALOGE("Invalid render target index");
         return;
     }
     if (a != NULL) {
         if (!a->getIsTexture()) {
-            LOGE("Invalid Color Target");
+            ALOGE("Invalid Color Target");
             return;
         }
     }
@@ -63,7 +63,7 @@
 void FBOCache::bindDepthTarget(Context *rsc, Allocation *a) {
     if (a != NULL) {
         if (!a->getIsRenderTarget()) {
-            LOGE("Invalid Depth Target");
+            ALOGE("Invalid Depth Target");
             return;
         }
     }
diff --git a/libs/rs/rsFifoSocket.cpp b/libs/rs/rsFifoSocket.cpp
index 8b8008d..163a44b 100644
--- a/libs/rs/rsFifoSocket.cpp
+++ b/libs/rs/rsFifoSocket.cpp
@@ -48,31 +48,31 @@
     if (bytes == 0) {
         return;
     }
-    //LOGE("writeAsync %p %i", data, bytes);
+    //ALOGE("writeAsync %p %i", data, bytes);
     size_t ret = ::send(sv[0], data, bytes, 0);
-    //LOGE("writeAsync ret %i", ret);
+    //ALOGE("writeAsync ret %i", ret);
     rsAssert(ret == bytes);
 }
 
 void FifoSocket::writeWaitReturn(void *retData, size_t retBytes) {
-    //LOGE("writeWaitReturn %p %i", retData, retBytes);
+    //ALOGE("writeWaitReturn %p %i", retData, retBytes);
     size_t ret = ::recv(sv[0], retData, retBytes, 0);
-    //LOGE("writeWaitReturn %i", ret);
+    //ALOGE("writeWaitReturn %i", ret);
     rsAssert(ret == retBytes);
 }
 
 size_t FifoSocket::read(void *data, size_t bytes) {
-    //LOGE("read %p %i", data, bytes);
+    //ALOGE("read %p %i", data, bytes);
     size_t ret = ::recv(sv[1], data, bytes, 0);
     rsAssert(ret == bytes);
-    //LOGE("read ret %i", ret);
+    //ALOGE("read ret %i", ret);
     return ret;
 }
 
 void FifoSocket::readReturn(const void *data, size_t bytes) {
-    LOGE("readReturn %p %Zu", data, bytes);
+    ALOGE("readReturn %p %Zu", data, bytes);
     size_t ret = ::send(sv[1], data, bytes, 0);
-    LOGE("readReturn %Zu", ret);
+    ALOGE("readReturn %Zu", ret);
     rsAssert(ret == bytes);
 }
 
diff --git a/libs/rs/rsFileA3D.cpp b/libs/rs/rsFileA3D.cpp
index 530e79e..ac658c8 100644
--- a/libs/rs/rsFileA3D.cpp
+++ b/libs/rs/rsFileA3D.cpp
@@ -278,17 +278,17 @@
 
 bool FileA3D::writeFile(const char *filename) {
     if (!mWriteStream) {
-        LOGE("No objects to write\n");
+        ALOGE("No objects to write\n");
         return false;
     }
     if (mWriteStream->getPos() == 0) {
-        LOGE("No objects to write\n");
+        ALOGE("No objects to write\n");
         return false;
     }
 
     FILE *writeHandle = fopen(filename, "wb");
     if (!writeHandle) {
-        LOGE("Couldn't open the file for writing\n");
+        ALOGE("Couldn't open the file for writing\n");
         return false;
     }
 
@@ -335,7 +335,7 @@
     int status = fclose(writeHandle);
 
     if (status != 0) {
-        LOGE("Couldn't close file\n");
+        ALOGE("Couldn't close file\n");
         return false;
     }
 
@@ -364,7 +364,7 @@
 RsObjectBase rsaFileA3DGetEntryByIndex(RsContext con, uint32_t index, RsFile file) {
     FileA3D *fa3d = static_cast<FileA3D *>(file);
     if (!fa3d) {
-        LOGE("Can't load entry. No valid file");
+        ALOGE("Can't load entry. No valid file");
         return NULL;
     }
 
@@ -389,13 +389,13 @@
     FileA3D *fa3d = static_cast<FileA3D *>(file);
 
     if (!fa3d) {
-        LOGE("Can't load index entries. No valid file");
+        ALOGE("Can't load index entries. No valid file");
         return;
     }
 
     uint32_t numFileEntries = fa3d->getNumIndexEntries();
     if (numFileEntries != numEntries || numEntries == 0 || fileEntries == NULL) {
-        LOGE("Can't load index entries. Invalid number requested");
+        ALOGE("Can't load index entries. Invalid number requested");
         return;
     }
 
@@ -408,7 +408,7 @@
 
 RsFile rsaFileA3DCreateFromMemory(RsContext con, const void *data, uint32_t len) {
     if (data == NULL) {
-        LOGE("File load failed. Asset stream is NULL");
+        ALOGE("File load failed. Asset stream is NULL");
         return NULL;
     }
 
@@ -432,7 +432,7 @@
 
 RsFile rsaFileA3DCreateFromFile(RsContext con, const char *path) {
     if (path == NULL) {
-        LOGE("File load failed. Path is NULL");
+        ALOGE("File load failed. Path is NULL");
         return NULL;
     }
 
@@ -446,7 +446,7 @@
         fa3d->load(f);
         fclose(f);
     } else {
-        LOGE("Could not open file %s", path);
+        ALOGE("Could not open file %s", path);
     }
 
     return fa3d;
diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp
index 7b3aa70..4f21b3b 100644
--- a/libs/rs/rsFont.cpp
+++ b/libs/rs/rsFont.cpp
@@ -39,7 +39,7 @@
 bool Font::init(const char *name, float fontSize, uint32_t dpi, const void *data, uint32_t dataLen) {
 #ifndef ANDROID_RS_SERIALIZE
     if (mInitialized) {
-        LOGE("Reinitialization of fonts not supported");
+        ALOGE("Reinitialization of fonts not supported");
         return false;
     }
 
@@ -51,7 +51,7 @@
     }
 
     if (error) {
-        LOGE("Unable to initialize font %s", name);
+        ALOGE("Unable to initialize font %s", name);
         return false;
     }
 
@@ -61,7 +61,7 @@
 
     error = FT_Set_Char_Size(mFace, (FT_F26Dot6)(fontSize * 64.0f), 0, dpi, 0);
     if (error) {
-        LOGE("Unable to set font size on %s", name);
+        ALOGE("Unable to set font size on %s", name);
         return false;
     }
 
@@ -124,7 +124,7 @@
     for (cacheX = glyph->mBitmapMinX, bX = nPenX; cacheX < endX; cacheX++, bX++) {
         for (cacheY = glyph->mBitmapMinY, bY = nPenY; cacheY < endY; cacheY++, bY++) {
             if (bX < 0 || bY < 0 || bX >= (int32_t) bitmapW || bY >= (int32_t) bitmapH) {
-                LOGE("Skipping invalid index");
+                ALOGE("Skipping invalid index");
                 continue;
             }
             uint8_t tempCol = cacheBuffer[cacheY * cacheWidth + cacheX];
@@ -165,7 +165,7 @@
 
     if (mode == Font::MEASURE) {
         if (bounds == NULL) {
-            LOGE("No return rectangle provided to measure text");
+            ALOGE("No return rectangle provided to measure text");
             return;
         }
         // Reset min and max of the bounding box to something large
@@ -237,7 +237,7 @@
 #ifndef ANDROID_RS_SERIALIZE
     FT_Error error = FT_Load_Glyph( mFace, glyph->mGlyphIndex, FT_LOAD_RENDER );
     if (error) {
-        LOGE("Couldn't load glyph.");
+        ALOGE("Couldn't load glyph.");
         return;
     }
 
@@ -378,7 +378,7 @@
     if (!mLibrary) {
         FT_Error error = FT_Init_FreeType(&mLibrary);
         if (error) {
-            LOGE("Unable to initialize freetype");
+            ALOGE("Unable to initialize freetype");
             return NULL;
         }
     }
@@ -409,7 +409,7 @@
 bool FontState::cacheBitmap(FT_Bitmap *bitmap, uint32_t *retOriginX, uint32_t *retOriginY) {
     // If the glyph is too tall, don't cache it
     if ((uint32_t)bitmap->rows > mCacheLines[mCacheLines.size()-1]->mMaxHeight) {
-        LOGE("Font size to large to fit in cache. width, height = %i, %i", (int)bitmap->width, (int)bitmap->rows);
+        ALOGE("Font size to large to fit in cache. width, height = %i, %i", (int)bitmap->width, (int)bitmap->rows);
         return false;
     }
 
@@ -439,7 +439,7 @@
 
         // if we still don't fit, something is wrong and we shouldn't draw
         if (!bitmapFit) {
-            LOGE("Bitmap doesn't fit in cache. width, height = %i, %i", (int)bitmap->width, (int)bitmap->rows);
+            ALOGE("Bitmap doesn't fit in cache. width, height = %i, %i", (int)bitmap->width, (int)bitmap->rows);
             return false;
         }
     }
@@ -471,7 +471,7 @@
 
     // Some debug code
     /*for (uint32_t i = 0; i < mCacheLines.size(); i ++) {
-        LOGE("Cache Line: H: %u Empty Space: %f",
+        ALOGE("Cache Line: H: %u Empty Space: %f",
              mCacheLines[i]->mMaxHeight,
               (1.0f - (float)mCacheLines[i]->mCurrentCol/(float)mCacheLines[i]->mMaxWidth)*100.0f);
 
@@ -659,9 +659,9 @@
     }
 
     /*LOGE("V0 x: %f y: %f z: %f", x1, y1, z1);
-    LOGE("V1 x: %f y: %f z: %f", x2, y2, z2);
-    LOGE("V2 x: %f y: %f z: %f", x3, y3, z3);
-    LOGE("V3 x: %f y: %f z: %f", x4, y4, z4);*/
+    ALOGE("V1 x: %f y: %f z: %f", x2, y2, z2);
+    ALOGE("V2 x: %f y: %f z: %f", x3, y3, z3);
+    ALOGE("V3 x: %f y: %f z: %f", x4, y4, z4);*/
 
     (*currentPos++) = x1;
     (*currentPos++) = y1;
@@ -742,7 +742,7 @@
         currentFont = mDefault.get();
     }
     if (!currentFont) {
-        LOGE("Unable to initialize any fonts");
+        ALOGE("Unable to initialize any fonts");
         return;
     }
 
diff --git a/libs/rs/rsLocklessFifo.cpp b/libs/rs/rsLocklessFifo.cpp
index ce69a60..0466d8b 100644
--- a/libs/rs/rsLocklessFifo.cpp
+++ b/libs/rs/rsLocklessFifo.cpp
@@ -45,12 +45,12 @@
     // Add room for a buffer reset command
     mBuffer = static_cast<uint8_t *>(malloc(sizeInBytes + 4));
     if (!mBuffer) {
-        LOGE("LocklessFifo allocation failure");
+        ALOGE("LocklessFifo allocation failure");
         return false;
     }
 
     if (!mSignalToControl.init() || !mSignalToWorker.init()) {
-        LOGE("Signal setup failed");
+        ALOGE("Signal setup failed");
         free(mBuffer);
         return false;
     }
diff --git a/libs/rs/rsMesh.cpp b/libs/rs/rsMesh.cpp
index bf9284f..67c7299 100644
--- a/libs/rs/rsMesh.cpp
+++ b/libs/rs/rsMesh.cpp
@@ -107,7 +107,7 @@
     // First make sure we are reading the correct object
     RsA3DClassID classID = (RsA3DClassID)stream->loadU32();
     if (classID != RS_A3D_CLASS_ID_MESH) {
-        LOGE("mesh loading skipped due to invalid class id");
+        ALOGE("mesh loading skipped due to invalid class id");
         return NULL;
     }
 
@@ -178,7 +178,7 @@
 
 void Mesh::renderPrimitive(Context *rsc, uint32_t primIndex) const {
     if (primIndex >= mHal.state.primitivesCount) {
-        LOGE("Invalid primitive index");
+        ALOGE("Invalid primitive index");
         return;
     }
 
@@ -192,7 +192,7 @@
 
 void Mesh::renderPrimitiveRange(Context *rsc, uint32_t primIndex, uint32_t start, uint32_t len) const {
     if (len < 1 || primIndex >= mHal.state.primitivesCount) {
-        LOGE("Invalid mesh or parameters");
+        ALOGE("Invalid mesh or parameters");
         return;
     }
 
@@ -241,7 +241,7 @@
     mBBoxMin[0] = mBBoxMin[1] = mBBoxMin[2] = 1e6;
     mBBoxMax[0] = mBBoxMax[1] = mBBoxMax[2] = -1e6;
     if (!posPtr) {
-        LOGE("Unable to compute bounding box");
+        ALOGE("Unable to compute bounding box");
         mBBoxMin[0] = mBBoxMin[1] = mBBoxMin[2] = 0.0f;
         mBBoxMax[0] = mBBoxMax[1] = mBBoxMax[2] = 0.0f;
         return;
diff --git a/libs/rs/rsMutex.cpp b/libs/rs/rsMutex.cpp
index 2105288..6512372 100644
--- a/libs/rs/rsMutex.cpp
+++ b/libs/rs/rsMutex.cpp
@@ -30,7 +30,7 @@
 bool Mutex::init() {
     int status = pthread_mutex_init(&mMutex, NULL);
     if (status) {
-        LOGE("Mutex::Mutex init failure");
+        ALOGE("Mutex::Mutex init failure");
         return false;
     }
     return true;
@@ -40,7 +40,7 @@
     int status;
     status = pthread_mutex_lock(&mMutex);
     if (status) {
-        LOGE("Mutex: error %i locking.", status);
+        ALOGE("Mutex: error %i locking.", status);
         return false;
     }
     return true;
@@ -50,7 +50,7 @@
     int status;
     status = pthread_mutex_unlock(&mMutex);
     if (status) {
-        LOGE("Mutex error %i unlocking.", status);
+        ALOGE("Mutex error %i unlocking.", status);
         return false;
     }
     return true;
diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp
index addf932..6a64582 100644
--- a/libs/rs/rsObjectBase.cpp
+++ b/libs/rs/rsObjectBase.cpp
@@ -204,14 +204,14 @@
     // This operation can be slow, only to be called during context cleanup.
     const ObjectBase * o = rsc->mObjHead;
     while (o) {
-        //LOGE("o %p", o);
+        //ALOGE("o %p", o);
         if (o->zeroUserRef()) {
             // deleted the object and possibly others, restart from head.
             o = rsc->mObjHead;
-            //LOGE("o head %p", o);
+            //ALOGE("o head %p", o);
         } else {
             o = o->mNext;
-            //LOGE("o next %p", o);
+            //ALOGE("o next %p", o);
         }
     }
 
diff --git a/libs/rs/rsProgram.cpp b/libs/rs/rsProgram.cpp
index a9fd877..8061515 100644
--- a/libs/rs/rsProgram.cpp
+++ b/libs/rs/rsProgram.cpp
@@ -139,13 +139,13 @@
 void Program::bindAllocation(Context *rsc, Allocation *alloc, uint32_t slot) {
     if (alloc != NULL) {
         if (slot >= mHal.state.constantsCount) {
-            LOGE("Attempt to bind alloc at slot %u, on shader id %u, but const count is %u",
+            ALOGE("Attempt to bind alloc at slot %u, on shader id %u, but const count is %u",
                  slot, (uint32_t)this, mHal.state.constantsCount);
             rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
             return;
         }
         if (alloc->getType() != mConstantTypes[slot].get()) {
-            LOGE("Attempt to bind alloc at slot %u, on shader id %u, but types mismatch",
+            ALOGE("Attempt to bind alloc at slot %u, on shader id %u, but types mismatch",
                  slot, (uint32_t)this);
             rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
             return;
@@ -167,13 +167,13 @@
 
 void Program::bindTexture(Context *rsc, uint32_t slot, Allocation *a) {
     if (slot >= mHal.state.texturesCount) {
-        LOGE("Attempt to bind texture to slot %u but tex count is %u", slot, mHal.state.texturesCount);
+        ALOGE("Attempt to bind texture to slot %u but tex count is %u", slot, mHal.state.texturesCount);
         rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind texture");
         return;
     }
 
     if (a && a->getType()->getDimFaces() && mHal.state.textureTargets[slot] != RS_TEXTURE_CUBE) {
-        LOGE("Attempt to bind cubemap to slot %u but 2d texture needed", slot);
+        ALOGE("Attempt to bind cubemap to slot %u but 2d texture needed", slot);
         rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind cubemap to 2d texture slot");
         return;
     }
@@ -186,7 +186,7 @@
 
 void Program::bindSampler(Context *rsc, uint32_t slot, Sampler *s) {
     if (slot >= mHal.state.texturesCount) {
-        LOGE("Attempt to bind sampler to slot %u but tex count is %u", slot, mHal.state.texturesCount);
+        ALOGE("Attempt to bind sampler to slot %u but tex count is %u", slot, mHal.state.texturesCount);
         rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind sampler");
         return;
     }
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 81eedc4..4e73ca6 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -38,12 +38,12 @@
 
 void ProgramFragment::setConstantColor(Context *rsc, float r, float g, float b, float a) {
     if (isUserProgram()) {
-        LOGE("Attempting to set fixed function emulation color on user program");
+        ALOGE("Attempting to set fixed function emulation color on user program");
         rsc->setError(RS_ERROR_BAD_SHADER, "Cannot  set fixed function emulation color on user program");
         return;
     }
     if (mHal.state.constants[0] == NULL) {
-        LOGE("Unable to set fixed function emulation color because allocation is missing");
+        ALOGE("Unable to set fixed function emulation color because allocation is missing");
         rsc->setError(RS_ERROR_BAD_SHADER, "Unable to set fixed function emulation color because allocation is missing");
         return;
     }
@@ -63,7 +63,7 @@
 
     for (uint32_t ct=0; ct < mHal.state.texturesCount; ct++) {
         if (!mHal.state.textures[ct]) {
-            LOGE("No texture bound for shader id %u, texture unit %u", (uint)this, ct);
+            ALOGE("No texture bound for shader id %u, texture unit %u", (uint)this, ct);
             rsc->setError(RS_ERROR_BAD_SHADER, "No texture bound");
             continue;
         }
@@ -131,7 +131,7 @@
                              size_t paramLength) {
     ProgramFragment *pf = new ProgramFragment(rsc, shaderText, shaderLength, params, paramLength);
     pf->incUserRef();
-    //LOGE("rsi_ProgramFragmentCreate %p", pf);
+    //ALOGE("rsi_ProgramFragmentCreate %p", pf);
     return pf;
 }
 
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index 7fc128e..357dbe3 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -41,9 +41,9 @@
 }
 
 void Script::setSlot(uint32_t slot, Allocation *a) {
-    //LOGE("setSlot %i %p", slot, a);
+    //ALOGE("setSlot %i %p", slot, a);
     if (slot >= mHal.info.exportedVariableCount) {
-        LOGE("Script::setSlot unable to set allocation, invalid slot index");
+        ALOGE("Script::setSlot unable to set allocation, invalid slot index");
         return;
     }
 
@@ -56,21 +56,21 @@
 }
 
 void Script::setVar(uint32_t slot, const void *val, size_t len) {
-    //LOGE("setVar %i %p %i", slot, val, len);
+    //ALOGE("setVar %i %p %i", slot, val, len);
     if (slot >= mHal.info.exportedVariableCount) {
-        LOGE("Script::setVar unable to set allocation, invalid slot index");
+        ALOGE("Script::setVar unable to set allocation, invalid slot index");
         return;
     }
     mRSC->mHal.funcs.script.setGlobalVar(mRSC, this, slot, (void *)val, len);
 }
 
 void Script::setVarObj(uint32_t slot, ObjectBase *val) {
-    //LOGE("setVarObj %i %p", slot, val);
+    //ALOGE("setVarObj %i %p", slot, val);
     if (slot >= mHal.info.exportedVariableCount) {
-        LOGE("Script::setVarObj unable to set allocation, invalid slot index");
+        ALOGE("Script::setVarObj unable to set allocation, invalid slot index");
         return;
     }
-    //LOGE("setvarobj  %i %p", slot, val);
+    //ALOGE("setvarobj  %i %p", slot, val);
     mRSC->mHal.funcs.script.setGlobalObj(mRSC, this, slot, val);
 }
 
@@ -87,7 +87,7 @@
     Script *s = static_cast<Script *>(vs);
     Allocation *a = static_cast<Allocation *>(va);
     s->setSlot(slot, a);
-    //LOGE("rsi_ScriptBindAllocation %i  %p  %p", slot, a, a->getPtr());
+    //ALOGE("rsi_ScriptBindAllocation %i  %p  %p", slot, a, a->getPtr());
 }
 
 void rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, size_t length) {
@@ -96,7 +96,7 @@
     // freeing/duplicating the actual string for the environment.
     char *tz = (char *) malloc(length + 1);
     if (!tz) {
-        LOGE("Couldn't allocate memory for timezone buffer");
+        ALOGE("Couldn't allocate memory for timezone buffer");
         return;
     }
     strncpy(tz, timeZone, length);
@@ -104,7 +104,7 @@
     if (setenv("TZ", tz, 1) == 0) {
         tzset();
     } else {
-        LOGE("Error setting timezone");
+        ALOGE("Error setting timezone");
     }
     free(tz);
 }
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index ce3c643..afc8ba0 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -72,7 +72,7 @@
 }
 
 const Allocation *ScriptC::ptrToAllocation(const void *ptr) const {
-    //LOGE("ptr to alloc %p", ptr);
+    //ALOGE("ptr to alloc %p", ptr);
     if (!ptr) {
         return NULL;
     }
@@ -83,7 +83,7 @@
             return mSlots[ct].get();
         }
     }
-    LOGE("ScriptC::ptrToAllocation, failed to find %p", ptr);
+    ALOGE("ScriptC::ptrToAllocation, failed to find %p", ptr);
     return NULL;
 }
 
@@ -181,7 +181,7 @@
         s->mHal.info.isThreadable &= sym->threadable;
         return sym->mPtr;
     }
-    LOGE("ScriptC sym lookup failed for %s", name);
+    ALOGE("ScriptC sym lookup failed for %s", name);
     return NULL;
 }
 */
@@ -197,12 +197,12 @@
                           const uint8_t *bitcode,
                           size_t bitcodeLen) {
 
-    //LOGE("runCompiler %p %p %p %p %p %i", rsc, this, resName, cacheDir, bitcode, bitcodeLen);
+    //ALOGE("runCompiler %p %p %p %p %p %i", rsc, this, resName, cacheDir, bitcode, bitcodeLen);
 #ifndef ANDROID_RS_SERIALIZE
     uint32_t sdkVersion = 0;
     bcinfo::BitcodeWrapper bcWrapper((const char *)bitcode, bitcodeLen);
     if (!bcWrapper.unwrap()) {
-        LOGE("Bitcode is not in proper container format (raw or wrapper)");
+        ALOGE("Bitcode is not in proper container format (raw or wrapper)");
         return false;
     }
 
@@ -223,7 +223,7 @@
     BT = new bcinfo::BitcodeTranslator((const char *)bitcode, bitcodeLen,
                                        sdkVersion);
     if (!BT->translate()) {
-        LOGE("Failed to translate bitcode from version: %u", sdkVersion);
+        ALOGE("Failed to translate bitcode from version: %u", sdkVersion);
         delete BT;
         BT = NULL;
         return false;
@@ -247,12 +247,12 @@
     for (size_t i=0; i < mHal.info.exportedPragmaCount; ++i) {
         const char * key = mHal.info.exportedPragmaKeyList[i];
         const char * value = mHal.info.exportedPragmaValueList[i];
-        //LOGE("pragma %s %s", keys[i], values[i]);
+        //ALOGE("pragma %s %s", keys[i], values[i]);
         if (!strcmp(key, "version")) {
             if (!strcmp(value, "1")) {
                 continue;
             }
-            LOGE("Invalid version pragma value: %s\n", value);
+            ALOGE("Invalid version pragma value: %s\n", value);
             return false;
         }
 
@@ -264,7 +264,7 @@
                 mEnviroment.mVertex.clear();
                 continue;
             }
-            LOGE("Unrecognized value %s passed to stateVertex", value);
+            ALOGE("Unrecognized value %s passed to stateVertex", value);
             return false;
         }
 
@@ -276,7 +276,7 @@
                 mEnviroment.mRaster.clear();
                 continue;
             }
-            LOGE("Unrecognized value %s passed to stateRaster", value);
+            ALOGE("Unrecognized value %s passed to stateRaster", value);
             return false;
         }
 
@@ -288,7 +288,7 @@
                 mEnviroment.mFragment.clear();
                 continue;
             }
-            LOGE("Unrecognized value %s passed to stateFragment", value);
+            ALOGE("Unrecognized value %s passed to stateFragment", value);
             return false;
         }
 
@@ -300,7 +300,7 @@
                 mEnviroment.mFragmentStore.clear();
                 continue;
             }
-            LOGE("Unrecognized value %s passed to stateStore", value);
+            ALOGE("Unrecognized value %s passed to stateStore", value);
             return false;
         }
     }
diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index ec15bc0..183e207 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -115,7 +115,7 @@
 //////////////////////////////////////////////////////////////////////////////
 
 void rsrSetObject(const Context *rsc, const Script *sc, ObjectBase **dst, ObjectBase * src) {
-    //LOGE("rsiSetObject  %p,%p  %p", vdst, *vdst, vsrc);
+    //ALOGE("rsiSetObject  %p,%p  %p", vdst, *vdst, vsrc);
     if (src) {
         CHECK_OBJ(src);
         src->incSysRef();
@@ -128,7 +128,7 @@
 }
 
 void rsrClearObject(const Context *rsc, const Script *sc, ObjectBase **dst) {
-    //LOGE("rsiClearObject  %p,%p", vdst, *vdst);
+    //ALOGE("rsiClearObject  %p,%p", vdst, *vdst);
     if (dst[0]) {
         CHECK_OBJ(dst[0]);
         dst[0]->decSysRef();
@@ -142,12 +142,12 @@
 
 
 uint32_t rsrToClient(Context *rsc, Script *sc, int cmdID, void *data, int len) {
-    //LOGE("SC_toClient %i %i %i", cmdID, len);
+    //ALOGE("SC_toClient %i %i %i", cmdID, len);
     return rsc->sendMessageToClient(data, RS_MESSAGE_TO_CLIENT_USER, cmdID, len, false);
 }
 
 uint32_t rsrToClientBlocking(Context *rsc, Script *sc, int cmdID, void *data, int len) {
-    //LOGE("SC_toClientBlocking %i %i", cmdID, len);
+    //ALOGE("SC_toClientBlocking %i %i", cmdID, len);
     return rsc->sendMessageToClient(data, RS_MESSAGE_TO_CLIENT_USER, cmdID, len, true);
 }
 
diff --git a/libs/rs/rsScriptC_LibGL.cpp b/libs/rs/rsScriptC_LibGL.cpp
index 26e2374..7964792 100644
--- a/libs/rs/rsScriptC_LibGL.cpp
+++ b/libs/rs/rsScriptC_LibGL.cpp
@@ -147,11 +147,11 @@
         return;
     }
 
-    //LOGE("Quad");
-    //LOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1);
-    //LOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2);
-    //LOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3);
-    //LOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4);
+    //ALOGE("Quad");
+    //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1);
+    //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2);
+    //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3);
+    //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4);
 
     float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4};
     const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4};
@@ -196,7 +196,7 @@
 }
 
 void rsrDrawRect(Context *rsc, Script *sc, float x1, float y1, float x2, float y2, float z) {
-    //LOGE("SC_drawRect %f,%f  %f,%f  %f", x1, y1, x2, y2, z);
+    //ALOGE("SC_drawRect %f,%f  %f,%f  %f", x1, y1, x2, y2, z);
     rsrDrawQuad(rsc, sc, x1, y2, z, x2, y2, z, x2, y1, z, x1, y1, z);
 }
 
diff --git a/libs/rs/rsSignal.cpp b/libs/rs/rsSignal.cpp
index 413ac2b..3f6a13c 100644
--- a/libs/rs/rsSignal.cpp
+++ b/libs/rs/rsSignal.cpp
@@ -32,13 +32,13 @@
 bool Signal::init() {
     int status = pthread_mutex_init(&mMutex, NULL);
     if (status) {
-        LOGE("LocklessFifo mutex init failure");
+        ALOGE("LocklessFifo mutex init failure");
         return false;
     }
 
     status = pthread_cond_init(&mCondition, NULL);
     if (status) {
-        LOGE("LocklessFifo condition init failure");
+        ALOGE("LocklessFifo condition init failure");
         pthread_mutex_destroy(&mMutex);
         return false;
     }
@@ -51,7 +51,7 @@
 
     status = pthread_mutex_lock(&mMutex);
     if (status) {
-        LOGE("LocklessCommandFifo: error %i locking for set condition.", status);
+        ALOGE("LocklessCommandFifo: error %i locking for set condition.", status);
         return;
     }
 
@@ -59,12 +59,12 @@
 
     status = pthread_cond_signal(&mCondition);
     if (status) {
-        LOGE("LocklessCommandFifo: error %i on set condition.", status);
+        ALOGE("LocklessCommandFifo: error %i on set condition.", status);
     }
 
     status = pthread_mutex_unlock(&mMutex);
     if (status) {
-        LOGE("LocklessCommandFifo: error %i unlocking for set condition.", status);
+        ALOGE("LocklessCommandFifo: error %i unlocking for set condition.", status);
     }
 }
 
@@ -74,7 +74,7 @@
 
     status = pthread_mutex_lock(&mMutex);
     if (status) {
-        LOGE("LocklessCommandFifo: error %i locking for condition.", status);
+        ALOGE("LocklessCommandFifo: error %i locking for condition.", status);
         return false;
     }
 
@@ -96,13 +96,13 @@
         ret = true;
     } else {
         if (status != ETIMEDOUT) {
-            LOGE("LocklessCommandFifo: error %i waiting for condition.", status);
+            ALOGE("LocklessCommandFifo: error %i waiting for condition.", status);
         }
     }
 
     status = pthread_mutex_unlock(&mMutex);
     if (status) {
-        LOGE("LocklessCommandFifo: error %i unlocking for condition.", status);
+        ALOGE("LocklessCommandFifo: error %i unlocking for condition.", status);
     }
 
     return ret;
diff --git a/libs/rs/rsThreadIO.cpp b/libs/rs/rsThreadIO.cpp
index 13e789d..8ba1a0e 100644
--- a/libs/rs/rsThreadIO.cpp
+++ b/libs/rs/rsThreadIO.cpp
@@ -40,22 +40,22 @@
 }
 
 void ThreadIO::shutdown() {
-    //LOGE("shutdown 1");
+    //ALOGE("shutdown 1");
     mToCore.shutdown();
-    //LOGE("shutdown 2");
+    //ALOGE("shutdown 2");
 }
 
 void ThreadIO::coreFlush() {
-    //LOGE("coreFlush 1");
+    //ALOGE("coreFlush 1");
     if (mUsingSocket) {
     } else {
         mToCore.flush();
     }
-    //LOGE("coreFlush 2");
+    //ALOGE("coreFlush 2");
 }
 
 void * ThreadIO::coreHeader(uint32_t cmdID, size_t dataLen) {
-    //LOGE("coreHeader %i %i", cmdID, dataLen);
+    //ALOGE("coreHeader %i %i", cmdID, dataLen);
     if (mUsingSocket) {
         CoreCmdHeader hdr;
         hdr.bytes = dataLen;
@@ -67,40 +67,40 @@
         mCoreDataPtr = (uint8_t *)mToCore.reserve(dataLen);
         mCoreDataBasePtr = mCoreDataPtr;
     }
-    //LOGE("coreHeader ret %p", mCoreDataPtr);
+    //ALOGE("coreHeader ret %p", mCoreDataPtr);
     return mCoreDataPtr;
 }
 
 void ThreadIO::coreData(const void *data, size_t dataLen) {
-    //LOGE("coreData %p %i", data, dataLen);
+    //ALOGE("coreData %p %i", data, dataLen);
     mToCoreSocket.writeAsync(data, dataLen);
-    //LOGE("coreData ret %p", mCoreDataPtr);
+    //ALOGE("coreData ret %p", mCoreDataPtr);
 }
 
 void ThreadIO::coreCommit() {
-    //LOGE("coreCommit %p %p %i", mCoreDataPtr, mCoreDataBasePtr, mCoreCommandSize);
+    //ALOGE("coreCommit %p %p %i", mCoreDataPtr, mCoreDataBasePtr, mCoreCommandSize);
     if (mUsingSocket) {
     } else {
         rsAssert((size_t)(mCoreDataPtr - mCoreDataBasePtr) <= mCoreCommandSize);
         mToCore.commit(mCoreCommandID, mCoreCommandSize);
     }
-    //LOGE("coreCommit ret");
+    //ALOGE("coreCommit ret");
 }
 
 void ThreadIO::coreCommitSync() {
-    //LOGE("coreCommitSync %p %p %i", mCoreDataPtr, mCoreDataBasePtr, mCoreCommandSize);
+    //ALOGE("coreCommitSync %p %p %i", mCoreDataPtr, mCoreDataBasePtr, mCoreCommandSize);
     if (mUsingSocket) {
     } else {
         rsAssert((size_t)(mCoreDataPtr - mCoreDataBasePtr) <= mCoreCommandSize);
         mToCore.commitSync(mCoreCommandID, mCoreCommandSize);
     }
-    //LOGE("coreCommitSync ret");
+    //ALOGE("coreCommitSync ret");
 }
 
 void ThreadIO::clientShutdown() {
-    //LOGE("coreShutdown 1");
+    //ALOGE("coreShutdown 1");
     mToClient.shutdown();
-    //LOGE("coreShutdown 2");
+    //ALOGE("coreShutdown 2");
 }
 
 void ThreadIO::coreSetReturn(const void *data, size_t dataLen) {
@@ -149,7 +149,7 @@
 
         if (cmdID >= (sizeof(gPlaybackFuncs) / sizeof(void *))) {
             rsAssert(cmdID < (sizeof(gPlaybackFuncs) / sizeof(void *)));
-            LOGE("playCoreCommands error con %p, cmd %i", con, cmdID);
+            ALOGE("playCoreCommands error con %p, cmd %i", con, cmdID);
             mToCore.printDebugData();
         }
         gPlaybackFuncs[cmdID](con, data, cmdSize << 2);
@@ -193,8 +193,8 @@
         uint32_t bytesData = 0;
         uint32_t commandID = 0;
         const uint32_t *d = (const uint32_t *)mToClient.get(&commandID, &bytesData);
-        //LOGE("getMessageToClient 3    %i  %i", commandID, bytesData);
-        //LOGE("getMessageToClient  %i %i", commandID, *subID);
+        //ALOGE("getMessageToClient 3    %i  %i", commandID, bytesData);
+        //ALOGE("getMessageToClient  %i %i", commandID, *subID);
         if (bufferLen >= receiveLen[0]) {
             memcpy(data, d+1, receiveLen[0]);
             mToClient.next();
@@ -224,14 +224,14 @@
             }
         }
 
-        //LOGE("sendMessageToClient 2");
+        //ALOGE("sendMessageToClient 2");
         uint32_t *p = (uint32_t *)mToClient.reserve(dataLen + sizeof(usrID));
         p[0] = usrID;
         if (dataLen > 0) {
             memcpy(p+1, data, dataLen);
         }
         mToClient.commit(cmdID, dataLen + sizeof(usrID));
-        //LOGE("sendMessageToClient 3");
+        //ALOGE("sendMessageToClient 3");
         return true;
     }
     return false;
diff --git a/libs/rs/rsType.cpp b/libs/rs/rsType.cpp
index 271c9e2..7966470 100644
--- a/libs/rs/rsType.cpp
+++ b/libs/rs/rsType.cpp
@@ -167,7 +167,7 @@
     // First make sure we are reading the correct object
     RsA3DClassID classID = (RsA3DClassID)stream->loadU32();
     if (classID != RS_A3D_CLASS_ID_TYPE) {
-        LOGE("type loading skipped due to invalid class id\n");
+        ALOGE("type loading skipped due to invalid class id\n");
         return NULL;
     }
 
diff --git a/libs/rs/rsUtils.h b/libs/rs/rsUtils.h
index 3a6c85a..db6f592 100644
--- a/libs/rs/rsUtils.h
+++ b/libs/rs/rsUtils.h
@@ -40,7 +40,7 @@
 namespace renderscript {
 
 #if 1
-#define rsAssert(v) do {if(!(v)) LOGE("rsAssert failed: %s, in %s at %i", #v, __FILE__, __LINE__);} while (0)
+#define rsAssert(v) do {if(!(v)) ALOGE("rsAssert failed: %s, in %s at %i", #v, __FILE__, __LINE__);} while (0)
 #else
 #define rsAssert(v) while (0)
 #endif
diff --git a/libs/rs/rsg_generator.c b/libs/rs/rsg_generator.c
index b3f6c55..6b84e56 100644
--- a/libs/rs/rsg_generator.c
+++ b/libs/rs/rsg_generator.c
@@ -235,7 +235,7 @@
                 }
             }
 
-            //fprintf(f, "    LOGE(\"add command %s\\n\");\n", api->name);
+            //fprintf(f, "    ALOGE(\"add command %s\\n\");\n", api->name);
             if (hasInlineDataPointers(api)) {
                 fprintf(f, "    RS_CMD_%s *cmd = NULL;\n", api->name);
                 fprintf(f, "    if (dataSize < 1024) {;\n");
@@ -441,7 +441,7 @@
 
         fprintf(f, "void rsp_%s(Context *con, const void *vp, size_t cmdSizeBytes) {\n", api->name);
 
-        //fprintf(f, "    LOGE(\"play command %s\\n\");\n", api->name);
+        //fprintf(f, "    ALOGE(\"play command %s\\n\");\n", api->name);
         fprintf(f, "    const RS_CMD_%s *cmd = static_cast<const RS_CMD_%s *>(vp);\n", api->name, api->name);
 
         fprintf(f, "    ");
@@ -469,7 +469,7 @@
 
         fprintf(f, "void rspr_%s(Context *con, Fifo *f, uint8_t *scratch, size_t scratchSize) {\n", api->name);
 
-        //fprintf(f, "    LOGE(\"play command %s\\n\");\n", api->name);
+        //fprintf(f, "    ALOGE(\"play command %s\\n\");\n", api->name);
         fprintf(f, "    RS_CMD_%s cmd;\n", api->name);
         fprintf(f, "    f->read(&cmd, sizeof(cmd));\n");
 
diff --git a/libs/ui/FramebufferNativeWindow.cpp b/libs/ui/FramebufferNativeWindow.cpp
index 8949730..f5ed981 100644
--- a/libs/ui/FramebufferNativeWindow.cpp
+++ b/libs/ui/FramebufferNativeWindow.cpp
@@ -85,10 +85,10 @@
         int err;
         int i;
         err = framebuffer_open(module, &fbDev);
-        LOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err));
+        ALOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err));
         
         err = gralloc_open(module, &grDev);
-        LOGE_IF(err, "couldn't open gralloc HAL (%s)", strerror(-err));
+        ALOGE_IF(err, "couldn't open gralloc HAL (%s)", strerror(-err));
 
         // bail out if we can't initialize the modules
         if (!fbDev || !grDev)
@@ -113,7 +113,7 @@
                         fbDev->width, fbDev->height, fbDev->format,
                         GRALLOC_USAGE_HW_FB, &buffers[i]->handle, &buffers[i]->stride);
 
-                LOGE_IF(err, "fb buffer %d allocation failed w=%d, h=%d, err=%s",
+                ALOGE_IF(err, "fb buffer %d allocation failed w=%d, h=%d, err=%s",
                         i, fbDev->width, fbDev->height, strerror(-err));
 
                 if (err)
@@ -133,7 +133,7 @@
         const_cast<int&>(ANativeWindow::maxSwapInterval) = 
             fbDev->maxSwapInterval;
     } else {
-        LOGE("Couldn't get gralloc module");
+        ALOGE("Couldn't get gralloc module");
     }
 
     ANativeWindow::setSwapInterval = setSwapInterval;
diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp
index 54a3ffa..f549a37 100644
--- a/libs/ui/GraphicBuffer.cpp
+++ b/libs/ui/GraphicBuffer.cpp
@@ -167,7 +167,7 @@
 {
     if (rect.left < 0 || rect.right  > this->width || 
         rect.top  < 0 || rect.bottom > this->height) {
-        LOGE("locking pixels (%d,%d,%d,%d) outside of buffer (w=%d, h=%d)",
+        ALOGE("locking pixels (%d,%d,%d,%d) outside of buffer (w=%d, h=%d)",
                 rect.left, rect.top, rect.right, rect.bottom, 
                 this->width, this->height);
         return BAD_VALUE;
diff --git a/libs/ui/GraphicBufferAllocator.cpp b/libs/ui/GraphicBufferAllocator.cpp
index b2b70c1..d344737 100644
--- a/libs/ui/GraphicBufferAllocator.cpp
+++ b/libs/ui/GraphicBufferAllocator.cpp
@@ -38,7 +38,7 @@
 {
     hw_module_t const* module;
     int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
-    LOGE_IF(err, "FATAL: can't find the %s module", GRALLOC_HARDWARE_MODULE_ID);
+    ALOGE_IF(err, "FATAL: can't find the %s module", GRALLOC_HARDWARE_MODULE_ID);
     if (err == 0) {
         gralloc_open(module, &mAllocDev);
     }
@@ -101,7 +101,7 @@
     
     err = mAllocDev->alloc(mAllocDev, w, h, format, usage, handle, stride);
 
-    LOGW_IF(err, "alloc(%u, %u, %d, %08x, ...) failed %d (%s)",
+    ALOGW_IF(err, "alloc(%u, %u, %d, %08x, ...) failed %d (%s)",
             w, h, format, usage, err, strerror(-err));
     
     if (err == NO_ERROR) {
@@ -132,7 +132,7 @@
 
     err = mAllocDev->free(mAllocDev, handle);
 
-    LOGW_IF(err, "free(...) failed %d (%s)", err, strerror(-err));
+    ALOGW_IF(err, "free(...) failed %d (%s)", err, strerror(-err));
     if (err == NO_ERROR) {
         Mutex::Autolock _l(sLock);
         KeyedVector<buffer_handle_t, alloc_rec_t>& list(sAllocList);
diff --git a/libs/ui/GraphicBufferMapper.cpp b/libs/ui/GraphicBufferMapper.cpp
index 07c0674..b173c85 100644
--- a/libs/ui/GraphicBufferMapper.cpp
+++ b/libs/ui/GraphicBufferMapper.cpp
@@ -38,7 +38,7 @@
 {
     hw_module_t const* module;
     int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
-    LOGE_IF(err, "FATAL: can't find the %s module", GRALLOC_HARDWARE_MODULE_ID);
+    ALOGE_IF(err, "FATAL: can't find the %s module", GRALLOC_HARDWARE_MODULE_ID);
     if (err == 0) {
         mAllocMod = (gralloc_module_t const *)module;
     }
@@ -50,7 +50,7 @@
 
     err = mAllocMod->registerBuffer(mAllocMod, handle);
 
-    LOGW_IF(err, "registerBuffer(%p) failed %d (%s)",
+    ALOGW_IF(err, "registerBuffer(%p) failed %d (%s)",
             handle, err, strerror(-err));
     return err;
 }
@@ -61,7 +61,7 @@
 
     err = mAllocMod->unregisterBuffer(mAllocMod, handle);
 
-    LOGW_IF(err, "unregisterBuffer(%p) failed %d (%s)",
+    ALOGW_IF(err, "unregisterBuffer(%p) failed %d (%s)",
             handle, err, strerror(-err));
     return err;
 }
@@ -75,7 +75,7 @@
             bounds.left, bounds.top, bounds.width(), bounds.height(),
             vaddr);
 
-    LOGW_IF(err, "lock(...) failed %d (%s)", err, strerror(-err));
+    ALOGW_IF(err, "lock(...) failed %d (%s)", err, strerror(-err));
     return err;
 }
 
@@ -85,7 +85,7 @@
 
     err = mAllocMod->unlock(mAllocMod, handle);
 
-    LOGW_IF(err, "unlock(...) failed %d (%s)", err, strerror(-err));
+    ALOGW_IF(err, "unlock(...) failed %d (%s)", err, strerror(-err));
     return err;
 }
 
diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp
index 267a9f7..263c8d9 100644
--- a/libs/ui/Input.cpp
+++ b/libs/ui/Input.cpp
@@ -345,7 +345,7 @@
 #endif
 
 void PointerCoords::tooManyAxes(int axis) {
-    LOGW("Could not set value for axis %d because the PointerCoords structure is full and "
+    ALOGW("Could not set value for axis %d because the PointerCoords structure is full and "
             "cannot contain more than %d axis values.", axis, int(MAX_AXES));
 }
 
diff --git a/libs/ui/InputTransport.cpp b/libs/ui/InputTransport.cpp
index 00716d7..09cbb31 100644
--- a/libs/ui/InputTransport.cpp
+++ b/libs/ui/InputTransport.cpp
@@ -88,12 +88,12 @@
     int serverAshmemFd = ashmem_create_region(ashmemName.string(), DEFAULT_MESSAGE_BUFFER_SIZE);
     if (serverAshmemFd < 0) {
         result = -errno;
-        LOGE("channel '%s' ~ Could not create shared memory region. errno=%d",
+        ALOGE("channel '%s' ~ Could not create shared memory region. errno=%d",
                 name.string(), errno);
     } else {
         result = ashmem_set_prot_region(serverAshmemFd, PROT_READ | PROT_WRITE);
         if (result < 0) {
-            LOGE("channel '%s' ~ Error %d trying to set protection of ashmem fd %d.",
+            ALOGE("channel '%s' ~ Error %d trying to set protection of ashmem fd %d.",
                     name.string(), result, serverAshmemFd);
         } else {
             // Dup the file descriptor because the server and client input channel objects that
@@ -102,19 +102,19 @@
             clientAshmemFd = dup(serverAshmemFd);
             if (clientAshmemFd < 0) {
                 result = -errno;
-                LOGE("channel '%s' ~ Could not dup() shared memory region fd. errno=%d",
+                ALOGE("channel '%s' ~ Could not dup() shared memory region fd. errno=%d",
                         name.string(), errno);
             } else {
                 int forward[2];
                 if (pipe(forward)) {
                     result = -errno;
-                    LOGE("channel '%s' ~ Could not create forward pipe.  errno=%d",
+                    ALOGE("channel '%s' ~ Could not create forward pipe.  errno=%d",
                             name.string(), errno);
                 } else {
                     int reverse[2];
                     if (pipe(reverse)) {
                         result = -errno;
-                        LOGE("channel '%s' ~ Could not create reverse pipe.  errno=%d",
+                        ALOGE("channel '%s' ~ Could not create reverse pipe.  errno=%d",
                                 name.string(), errno);
                     } else {
                         String8 serverChannelName = name;
@@ -220,7 +220,7 @@
     int ashmemFd = mChannel->getAshmemFd();
     int result = ashmem_get_size_region(ashmemFd);
     if (result < 0) {
-        LOGE("channel '%s' publisher ~ Error %d getting size of ashmem fd %d.",
+        ALOGE("channel '%s' publisher ~ Error %d getting size of ashmem fd %d.",
                 mChannel->getName().string(), result, ashmemFd);
         return UNKNOWN_ERROR;
     }
@@ -229,7 +229,7 @@
     mSharedMessage = static_cast<InputMessage*>(mmap(NULL, mAshmemSize,
             PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFd, 0));
     if (! mSharedMessage) {
-        LOGE("channel '%s' publisher ~ mmap failed on ashmem fd %d.",
+        ALOGE("channel '%s' publisher ~ mmap failed on ashmem fd %d.",
                 mChannel->getName().string(), ashmemFd);
         return NO_MEMORY;
     }
@@ -253,7 +253,7 @@
             if (mSharedMessage->consumed) {
                 result = sem_post(& mSharedMessage->semaphore);
                 if (result < 0) {
-                    LOGE("channel '%s' publisher ~ Error %d in sem_post.",
+                    ALOGE("channel '%s' publisher ~ Error %d in sem_post.",
                             mChannel->getName().string(), errno);
                     return UNKNOWN_ERROR;
                 }
@@ -261,7 +261,7 @@
 
             result = sem_destroy(& mSharedMessage->semaphore);
             if (result < 0) {
-                LOGE("channel '%s' publisher ~ Error %d in sem_destroy.",
+                ALOGE("channel '%s' publisher ~ Error %d in sem_destroy.",
                         mChannel->getName().string(), errno);
                 return UNKNOWN_ERROR;
             }
@@ -273,7 +273,7 @@
         int ashmemFd = mChannel->getAshmemFd();
         result = ashmem_unpin_region(ashmemFd, 0, 0);
         if (result < 0) {
-            LOGE("channel '%s' publisher ~ Error %d unpinning ashmem fd %d.",
+            ALOGE("channel '%s' publisher ~ Error %d unpinning ashmem fd %d.",
                     mChannel->getName().string(), result, ashmemFd);
             return UNKNOWN_ERROR;
         }
@@ -291,7 +291,7 @@
         int32_t deviceId,
         int32_t source) {
     if (mPinned) {
-        LOGE("channel '%s' publisher ~ Attempted to publish a new event but publisher has "
+        ALOGE("channel '%s' publisher ~ Attempted to publish a new event but publisher has "
                 "not yet been reset.", mChannel->getName().string());
         return INVALID_OPERATION;
     }
@@ -302,7 +302,7 @@
     int ashmemFd = mChannel->getAshmemFd();
     int result = ashmem_pin_region(ashmemFd, 0, 0);
     if (result < 0) {
-        LOGE("channel '%s' publisher ~ Error %d pinning ashmem fd %d.",
+        ALOGE("channel '%s' publisher ~ Error %d pinning ashmem fd %d.",
                 mChannel->getName().string(), result, ashmemFd);
         return UNKNOWN_ERROR;
     }
@@ -311,7 +311,7 @@
 
     result = sem_init(& mSharedMessage->semaphore, 1, 1);
     if (result < 0) {
-        LOGE("channel '%s' publisher ~ Error %d in sem_init.",
+        ALOGE("channel '%s' publisher ~ Error %d in sem_init.",
                 mChannel->getName().string(), errno);
         return UNKNOWN_ERROR;
     }
@@ -390,7 +390,7 @@
 #endif
 
     if (pointerCount > MAX_POINTERS || pointerCount < 1) {
-        LOGE("channel '%s' publisher ~ Invalid number of pointers provided: %d.",
+        ALOGE("channel '%s' publisher ~ Invalid number of pointers provided: %d.",
                 mChannel->getName().string(), pointerCount);
         return BAD_VALUE;
     }
@@ -444,7 +444,7 @@
 #endif
 
     if (! mPinned || ! mMotionEventSampleDataTail) {
-        LOGE("channel '%s' publisher ~ Cannot append motion sample because there is no current "
+        ALOGE("channel '%s' publisher ~ Cannot append motion sample because there is no current "
                 "AMOTION_EVENT_ACTION_MOVE or AMOTION_EVENT_ACTION_HOVER_MOVE event.",
                 mChannel->getName().string());
         return INVALID_OPERATION;
@@ -478,7 +478,7 @@
 #endif
                 return FAILED_TRANSACTION;
             } else {
-                LOGE("channel '%s' publisher ~ Error %d in sem_trywait.",
+                ALOGE("channel '%s' publisher ~ Error %d in sem_trywait.",
                         mChannel->getName().string(), errno);
                 return UNKNOWN_ERROR;
             }
@@ -496,7 +496,7 @@
     if (mWasDispatched) {
         result = sem_post(& mSharedMessage->semaphore);
         if (result < 0) {
-            LOGE("channel '%s' publisher ~ Error %d in sem_post.",
+            ALOGE("channel '%s' publisher ~ Error %d in sem_post.",
                     mChannel->getName().string(), errno);
             return UNKNOWN_ERROR;
         }
@@ -531,7 +531,7 @@
     } else if (signal == INPUT_SIGNAL_FINISHED_UNHANDLED) {
         *outHandled = false;
     } else {
-        LOGE("channel '%s' publisher ~ Received unexpected signal '%c' from consumer",
+        ALOGE("channel '%s' publisher ~ Received unexpected signal '%c' from consumer",
                 mChannel->getName().string(), signal);
         return UNKNOWN_ERROR;
     }
@@ -559,7 +559,7 @@
     int ashmemFd = mChannel->getAshmemFd();
     int result = ashmem_get_size_region(ashmemFd);
     if (result < 0) {
-        LOGE("channel '%s' consumer ~ Error %d getting size of ashmem fd %d.",
+        ALOGE("channel '%s' consumer ~ Error %d getting size of ashmem fd %d.",
                 mChannel->getName().string(), result, ashmemFd);
         return UNKNOWN_ERROR;
     }
@@ -569,7 +569,7 @@
     mSharedMessage = static_cast<InputMessage*>(mmap(NULL, mAshmemSize,
             PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFd, 0));
     if (! mSharedMessage) {
-        LOGE("channel '%s' consumer ~ mmap failed on ashmem fd %d.",
+        ALOGE("channel '%s' consumer ~ mmap failed on ashmem fd %d.",
                 mChannel->getName().string(), ashmemFd);
         return NO_MEMORY;
     }
@@ -589,19 +589,19 @@
     int result = ashmem_pin_region(ashmemFd, 0, 0);
     if (result != ASHMEM_NOT_PURGED) {
         if (result == ASHMEM_WAS_PURGED) {
-            LOGE("channel '%s' consumer ~ Error %d pinning ashmem fd %d because it was purged "
+            ALOGE("channel '%s' consumer ~ Error %d pinning ashmem fd %d because it was purged "
                     "which probably indicates that the publisher and consumer are out of sync.",
                     mChannel->getName().string(), result, ashmemFd);
             return INVALID_OPERATION;
         }
 
-        LOGE("channel '%s' consumer ~ Error %d pinning ashmem fd %d.",
+        ALOGE("channel '%s' consumer ~ Error %d pinning ashmem fd %d.",
                 mChannel->getName().string(), result, ashmemFd);
         return UNKNOWN_ERROR;
     }
 
     if (mSharedMessage->consumed) {
-        LOGE("channel '%s' consumer ~ The current message has already been consumed.",
+        ALOGE("channel '%s' consumer ~ The current message has already been consumed.",
                 mChannel->getName().string());
         return INVALID_OPERATION;
     }
@@ -611,7 +611,7 @@
     // consumed).  Eventually the publisher will reinitialize the semaphore for the next message.
     result = sem_wait(& mSharedMessage->semaphore);
     if (result < 0) {
-        LOGE("channel '%s' consumer ~ Error %d in sem_wait.",
+        ALOGE("channel '%s' consumer ~ Error %d in sem_wait.",
                 mChannel->getName().string(), errno);
         return UNKNOWN_ERROR;
     }
@@ -640,7 +640,7 @@
     }
 
     default:
-        LOGE("channel '%s' consumer ~ Received message of unknown type %d",
+        ALOGE("channel '%s' consumer ~ Received message of unknown type %d",
                 mChannel->getName().string(), mSharedMessage->type);
         return UNKNOWN_ERROR;
     }
@@ -671,7 +671,7 @@
         return result;
     }
     if (signal != INPUT_SIGNAL_DISPATCH) {
-        LOGE("channel '%s' consumer ~ Received unexpected signal '%c' from publisher",
+        ALOGE("channel '%s' consumer ~ Received unexpected signal '%c' from publisher",
                 mChannel->getName().string(), signal);
         return UNKNOWN_ERROR;
     }
diff --git a/libs/ui/KeyCharacterMap.cpp b/libs/ui/KeyCharacterMap.cpp
index e1d5e8b..485234c 100644
--- a/libs/ui/KeyCharacterMap.cpp
+++ b/libs/ui/KeyCharacterMap.cpp
@@ -95,11 +95,11 @@
     Tokenizer* tokenizer;
     status_t status = Tokenizer::open(filename, &tokenizer);
     if (status) {
-        LOGE("Error %d opening key character map file %s.", status, filename.string());
+        ALOGE("Error %d opening key character map file %s.", status, filename.string());
     } else {
         KeyCharacterMap* map = new KeyCharacterMap();
         if (!map) {
-            LOGE("Error allocating key character map.");
+            ALOGE("Error allocating key character map.");
             status = NO_MEMORY;
         } else {
 #if DEBUG_PARSER_PERFORMANCE
@@ -474,7 +474,7 @@
                     status_t status = parseKey();
                     if (status) return status;
                 } else {
-                    LOGE("%s: Expected keyword, got '%s'.", mTokenizer->getLocation().string(),
+                    ALOGE("%s: Expected keyword, got '%s'.", mTokenizer->getLocation().string(),
                             keywordToken.string());
                     return BAD_VALUE;
                 }
@@ -490,7 +490,7 @@
 
             mTokenizer->skipDelimiters(WHITESPACE);
             if (!mTokenizer->isEol()) {
-                LOGE("%s: Expected end of line, got '%s'.",
+                ALOGE("%s: Expected end of line, got '%s'.",
                         mTokenizer->getLocation().string(),
                         mTokenizer->peekRemainderOfLine().string());
                 return BAD_VALUE;
@@ -501,13 +501,13 @@
     }
 
     if (mState != STATE_TOP) {
-        LOGE("%s: Unterminated key description at end of file.",
+        ALOGE("%s: Unterminated key description at end of file.",
                 mTokenizer->getLocation().string());
         return BAD_VALUE;
     }
 
     if (mMap->mType == KEYBOARD_TYPE_UNKNOWN) {
-        LOGE("%s: Missing required keyboard 'type' declaration.",
+        ALOGE("%s: Missing required keyboard 'type' declaration.",
                 mTokenizer->getLocation().string());
         return BAD_VALUE;
     }
@@ -517,7 +517,7 @@
 
 status_t KeyCharacterMap::Parser::parseType() {
     if (mMap->mType != KEYBOARD_TYPE_UNKNOWN) {
-        LOGE("%s: Duplicate keyboard 'type' declaration.",
+        ALOGE("%s: Duplicate keyboard 'type' declaration.",
                 mTokenizer->getLocation().string());
         return BAD_VALUE;
     }
@@ -535,7 +535,7 @@
     } else if (typeToken == "SPECIAL_FUNCTION") {
         type = KEYBOARD_TYPE_SPECIAL_FUNCTION;
     } else {
-        LOGE("%s: Expected keyboard type label, got '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Expected keyboard type label, got '%s'.", mTokenizer->getLocation().string(),
                 typeToken.string());
         return BAD_VALUE;
     }
@@ -551,12 +551,12 @@
     String8 keyCodeToken = mTokenizer->nextToken(WHITESPACE);
     int32_t keyCode = getKeyCodeByLabel(keyCodeToken.string());
     if (!keyCode) {
-        LOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
                 keyCodeToken.string());
         return BAD_VALUE;
     }
     if (mMap->mKeys.indexOfKey(keyCode) >= 0) {
-        LOGE("%s: Duplicate entry for key code '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Duplicate entry for key code '%s'.", mTokenizer->getLocation().string(),
                 keyCodeToken.string());
         return BAD_VALUE;
     }
@@ -564,7 +564,7 @@
     mTokenizer->skipDelimiters(WHITESPACE);
     String8 openBraceToken = mTokenizer->nextToken(WHITESPACE);
     if (openBraceToken != "{") {
-        LOGE("%s: Expected '{' after key code label, got '%s'.",
+        ALOGE("%s: Expected '{' after key code label, got '%s'.",
                 mTokenizer->getLocation().string(), openBraceToken.string());
         return BAD_VALUE;
     }
@@ -597,7 +597,7 @@
             int32_t metaState;
             status_t status = parseModifier(token, &metaState);
             if (status) {
-                LOGE("%s: Expected a property name or modifier, got '%s'.",
+                ALOGE("%s: Expected a property name or modifier, got '%s'.",
                         mTokenizer->getLocation().string(), token.string());
                 return status;
             }
@@ -616,7 +616,7 @@
             }
         }
 
-        LOGE("%s: Expected ',' or ':' after property name.",
+        ALOGE("%s: Expected ',' or ':' after property name.",
                 mTokenizer->getLocation().string());
         return BAD_VALUE;
     }
@@ -634,12 +634,12 @@
             char16_t character;
             status_t status = parseCharacterLiteral(&character);
             if (status || !character) {
-                LOGE("%s: Invalid character literal for key.",
+                ALOGE("%s: Invalid character literal for key.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
             if (haveCharacter) {
-                LOGE("%s: Cannot combine multiple character literals or 'none'.",
+                ALOGE("%s: Cannot combine multiple character literals or 'none'.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
@@ -649,7 +649,7 @@
             token = mTokenizer->nextToken(WHITESPACE);
             if (token == "none") {
                 if (haveCharacter) {
-                    LOGE("%s: Cannot combine multiple character literals or 'none'.",
+                    ALOGE("%s: Cannot combine multiple character literals or 'none'.",
                             mTokenizer->getLocation().string());
                     return BAD_VALUE;
                 }
@@ -659,20 +659,20 @@
                 token = mTokenizer->nextToken(WHITESPACE);
                 int32_t keyCode = getKeyCodeByLabel(token.string());
                 if (!keyCode) {
-                    LOGE("%s: Invalid key code label for fallback behavior, got '%s'.",
+                    ALOGE("%s: Invalid key code label for fallback behavior, got '%s'.",
                             mTokenizer->getLocation().string(),
                             token.string());
                     return BAD_VALUE;
                 }
                 if (haveFallback) {
-                    LOGE("%s: Cannot combine multiple fallback key codes.",
+                    ALOGE("%s: Cannot combine multiple fallback key codes.",
                             mTokenizer->getLocation().string());
                     return BAD_VALUE;
                 }
                 behavior.fallbackKeyCode = keyCode;
                 haveFallback = true;
             } else {
-                LOGE("%s: Expected a key behavior after ':'.",
+                ALOGE("%s: Expected a key behavior after ':'.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
@@ -688,7 +688,7 @@
         switch (property.property) {
         case PROPERTY_LABEL:
             if (key->label) {
-                LOGE("%s: Duplicate label for key.",
+                ALOGE("%s: Duplicate label for key.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
@@ -699,7 +699,7 @@
             break;
         case PROPERTY_NUMBER:
             if (key->number) {
-                LOGE("%s: Duplicate number for key.",
+                ALOGE("%s: Duplicate number for key.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
@@ -711,7 +711,7 @@
         case PROPERTY_META: {
             for (Behavior* b = key->firstBehavior; b; b = b->next) {
                 if (b->metaState == property.metaState) {
-                    LOGE("%s: Duplicate key behavior for modifier.",
+                    ALOGE("%s: Duplicate key behavior for modifier.",
                             mTokenizer->getLocation().string());
                     return BAD_VALUE;
                 }
@@ -757,7 +757,7 @@
                 return BAD_VALUE;
             }
             if (combinedMeta & metaState) {
-                LOGE("%s: Duplicate modifier combination '%s'.",
+                ALOGE("%s: Duplicate modifier combination '%s'.",
                         mTokenizer->getLocation().string(), token.string());
                 return BAD_VALUE;
             }
@@ -831,7 +831,7 @@
     }
 
 Error:
-    LOGE("%s: Malformed character literal.", mTokenizer->getLocation().string());
+    ALOGE("%s: Malformed character literal.", mTokenizer->getLocation().string());
     return BAD_VALUE;
 }
 
diff --git a/libs/ui/KeyLayoutMap.cpp b/libs/ui/KeyLayoutMap.cpp
index 7ba654a57..44a9420 100644
--- a/libs/ui/KeyLayoutMap.cpp
+++ b/libs/ui/KeyLayoutMap.cpp
@@ -53,11 +53,11 @@
     Tokenizer* tokenizer;
     status_t status = Tokenizer::open(filename, &tokenizer);
     if (status) {
-        LOGE("Error %d opening key layout map file %s.", status, filename.string());
+        ALOGE("Error %d opening key layout map file %s.", status, filename.string());
     } else {
         KeyLayoutMap* map = new KeyLayoutMap();
         if (!map) {
-            LOGE("Error allocating key layout map.");
+            ALOGE("Error allocating key layout map.");
             status = NO_MEMORY;
         } else {
 #if DEBUG_PARSER_PERFORMANCE
@@ -164,14 +164,14 @@
                 status_t status = parseAxis();
                 if (status) return status;
             } else {
-                LOGE("%s: Expected keyword, got '%s'.", mTokenizer->getLocation().string(),
+                ALOGE("%s: Expected keyword, got '%s'.", mTokenizer->getLocation().string(),
                         keywordToken.string());
                 return BAD_VALUE;
             }
 
             mTokenizer->skipDelimiters(WHITESPACE);
             if (!mTokenizer->isEol()) {
-                LOGE("%s: Expected end of line, got '%s'.",
+                ALOGE("%s: Expected end of line, got '%s'.",
                         mTokenizer->getLocation().string(),
                         mTokenizer->peekRemainderOfLine().string());
                 return BAD_VALUE;
@@ -188,12 +188,12 @@
     char* end;
     int32_t scanCode = int32_t(strtol(scanCodeToken.string(), &end, 0));
     if (*end) {
-        LOGE("%s: Expected key scan code number, got '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Expected key scan code number, got '%s'.", mTokenizer->getLocation().string(),
                 scanCodeToken.string());
         return BAD_VALUE;
     }
     if (mMap->mKeys.indexOfKey(scanCode) >= 0) {
-        LOGE("%s: Duplicate entry for key scan code '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Duplicate entry for key scan code '%s'.", mTokenizer->getLocation().string(),
                 scanCodeToken.string());
         return BAD_VALUE;
     }
@@ -202,7 +202,7 @@
     String8 keyCodeToken = mTokenizer->nextToken(WHITESPACE);
     int32_t keyCode = getKeyCodeByLabel(keyCodeToken.string());
     if (!keyCode) {
-        LOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
                 keyCodeToken.string());
         return BAD_VALUE;
     }
@@ -215,12 +215,12 @@
         String8 flagToken = mTokenizer->nextToken(WHITESPACE);
         uint32_t flag = getKeyFlagByLabel(flagToken.string());
         if (!flag) {
-            LOGE("%s: Expected key flag label, got '%s'.", mTokenizer->getLocation().string(),
+            ALOGE("%s: Expected key flag label, got '%s'.", mTokenizer->getLocation().string(),
                     flagToken.string());
             return BAD_VALUE;
         }
         if (flags & flag) {
-            LOGE("%s: Duplicate key flag '%s'.", mTokenizer->getLocation().string(),
+            ALOGE("%s: Duplicate key flag '%s'.", mTokenizer->getLocation().string(),
                     flagToken.string());
             return BAD_VALUE;
         }
@@ -242,12 +242,12 @@
     char* end;
     int32_t scanCode = int32_t(strtol(scanCodeToken.string(), &end, 0));
     if (*end) {
-        LOGE("%s: Expected axis scan code number, got '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Expected axis scan code number, got '%s'.", mTokenizer->getLocation().string(),
                 scanCodeToken.string());
         return BAD_VALUE;
     }
     if (mMap->mAxes.indexOfKey(scanCode) >= 0) {
-        LOGE("%s: Duplicate entry for axis scan code '%s'.", mTokenizer->getLocation().string(),
+        ALOGE("%s: Duplicate entry for axis scan code '%s'.", mTokenizer->getLocation().string(),
                 scanCodeToken.string());
         return BAD_VALUE;
     }
@@ -263,7 +263,7 @@
         String8 axisToken = mTokenizer->nextToken(WHITESPACE);
         axisInfo.axis = getAxisByLabel(axisToken.string());
         if (axisInfo.axis < 0) {
-            LOGE("%s: Expected inverted axis label, got '%s'.",
+            ALOGE("%s: Expected inverted axis label, got '%s'.",
                     mTokenizer->getLocation().string(), axisToken.string());
             return BAD_VALUE;
         }
@@ -274,7 +274,7 @@
         String8 splitToken = mTokenizer->nextToken(WHITESPACE);
         axisInfo.splitValue = int32_t(strtol(splitToken.string(), &end, 0));
         if (*end) {
-            LOGE("%s: Expected split value, got '%s'.",
+            ALOGE("%s: Expected split value, got '%s'.",
                     mTokenizer->getLocation().string(), splitToken.string());
             return BAD_VALUE;
         }
@@ -283,7 +283,7 @@
         String8 lowAxisToken = mTokenizer->nextToken(WHITESPACE);
         axisInfo.axis = getAxisByLabel(lowAxisToken.string());
         if (axisInfo.axis < 0) {
-            LOGE("%s: Expected low axis label, got '%s'.",
+            ALOGE("%s: Expected low axis label, got '%s'.",
                     mTokenizer->getLocation().string(), lowAxisToken.string());
             return BAD_VALUE;
         }
@@ -292,14 +292,14 @@
         String8 highAxisToken = mTokenizer->nextToken(WHITESPACE);
         axisInfo.highAxis = getAxisByLabel(highAxisToken.string());
         if (axisInfo.highAxis < 0) {
-            LOGE("%s: Expected high axis label, got '%s'.",
+            ALOGE("%s: Expected high axis label, got '%s'.",
                     mTokenizer->getLocation().string(), highAxisToken.string());
             return BAD_VALUE;
         }
     } else {
         axisInfo.axis = getAxisByLabel(token.string());
         if (axisInfo.axis < 0) {
-            LOGE("%s: Expected axis label, 'split' or 'invert', got '%s'.",
+            ALOGE("%s: Expected axis label, 'split' or 'invert', got '%s'.",
                     mTokenizer->getLocation().string(), token.string());
             return BAD_VALUE;
         }
@@ -316,12 +316,12 @@
             String8 flatToken = mTokenizer->nextToken(WHITESPACE);
             axisInfo.flatOverride = int32_t(strtol(flatToken.string(), &end, 0));
             if (*end) {
-                LOGE("%s: Expected flat value, got '%s'.",
+                ALOGE("%s: Expected flat value, got '%s'.",
                         mTokenizer->getLocation().string(), flatToken.string());
                 return BAD_VALUE;
             }
         } else {
-            LOGE("%s: Expected keyword 'flat', got '%s'.",
+            ALOGE("%s: Expected keyword 'flat', got '%s'.",
                     mTokenizer->getLocation().string(), keywordToken.string());
             return BAD_VALUE;
         }
diff --git a/libs/ui/Keyboard.cpp b/libs/ui/Keyboard.cpp
index 10bb39c..e4611f7 100644
--- a/libs/ui/Keyboard.cpp
+++ b/libs/ui/Keyboard.cpp
@@ -50,7 +50,7 @@
                 keyLayoutName)) {
             status_t status = loadKeyLayout(deviceIdenfifier, keyLayoutName);
             if (status == NAME_NOT_FOUND) {
-                LOGE("Configuration for keyboard device '%s' requested keyboard layout '%s' but "
+                ALOGE("Configuration for keyboard device '%s' requested keyboard layout '%s' but "
                         "it was not found.",
                         deviceIdenfifier.name.string(), keyLayoutName.string());
             }
@@ -61,7 +61,7 @@
                 keyCharacterMapName)) {
             status_t status = loadKeyCharacterMap(deviceIdenfifier, keyCharacterMapName);
             if (status == NAME_NOT_FOUND) {
-                LOGE("Configuration for keyboard device '%s' requested keyboard character "
+                ALOGE("Configuration for keyboard device '%s' requested keyboard character "
                         "map '%s' but it was not found.",
                         deviceIdenfifier.name.string(), keyLayoutName.string());
             }
@@ -90,7 +90,7 @@
     }
 
     // Give up!
-    LOGE("Could not determine key map for device '%s' and no default key maps were found!",
+    ALOGE("Could not determine key map for device '%s' and no default key maps were found!",
             deviceIdenfifier.name.string());
     return NAME_NOT_FOUND;
 }
diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp
index d9ad863..8cd047a 100644
--- a/libs/ui/Region.cpp
+++ b/libs/ui/Region.cpp
@@ -69,7 +69,7 @@
 Region::Region(const void* buffer)
 {
     status_t err = read(buffer);
-    LOGE_IF(err<0, "error %s reading Region from buffer", strerror(err));
+    ALOGE_IF(err<0, "error %s reading Region from buffer", strerror(err));
 }
 
 Region::~Region()
@@ -338,15 +338,15 @@
         b.bottom = b.bottom > cur->bottom ? b.bottom : cur->bottom;
         if (cur->top == prev->top) {
             if (cur->bottom != prev->bottom) {
-                LOGE("%s: invalid span %p", name, cur);
+                ALOGE("%s: invalid span %p", name, cur);
                 result = false;
             } else if (cur->left < prev->right) {
-                LOGE("%s: spans overlap horizontally prev=%p, cur=%p",
+                ALOGE("%s: spans overlap horizontally prev=%p, cur=%p",
                         name, prev, cur);
                 result = false;
             }
         } else if (cur->top < prev->bottom) {
-            LOGE("%s: spans overlap vertically prev=%p, cur=%p",
+            ALOGE("%s: spans overlap vertically prev=%p, cur=%p",
                     name, prev, cur);
             result = false;
         }
@@ -355,7 +355,7 @@
     }
     if (b != reg.getBounds()) {
         result = false;
-        LOGE("%s: invalid bounds [%d,%d,%d,%d] vs. [%d,%d,%d,%d]", name,
+        ALOGE("%s: invalid bounds [%d,%d,%d,%d] vs. [%d,%d,%d,%d]", name,
                 b.left, b.top, b.right, b.bottom,
                 reg.getBounds().left, reg.getBounds().top, 
                 reg.getBounds().right, reg.getBounds().bottom);
@@ -480,7 +480,7 @@
         const Rect& rhs, int dx, int dy)
 {
     if (!rhs.isValid()) {
-        LOGE("Region::boolean_operation(op=%d) invalid Rect={%d,%d,%d,%d}",
+        ALOGE("Region::boolean_operation(op=%d) invalid Rect={%d,%d,%d,%d}",
                 op, rhs.left, rhs.top, rhs.right, rhs.bottom);
         return;
     }
diff --git a/libs/ui/VirtualKeyMap.cpp b/libs/ui/VirtualKeyMap.cpp
index 90c092d..62d5b59 100644
--- a/libs/ui/VirtualKeyMap.cpp
+++ b/libs/ui/VirtualKeyMap.cpp
@@ -51,11 +51,11 @@
     Tokenizer* tokenizer;
     status_t status = Tokenizer::open(filename, &tokenizer);
     if (status) {
-        LOGE("Error %d opening virtual key map file %s.", status, filename.string());
+        ALOGE("Error %d opening virtual key map file %s.", status, filename.string());
     } else {
         VirtualKeyMap* map = new VirtualKeyMap();
         if (!map) {
-            LOGE("Error allocating virtual key map.");
+            ALOGE("Error allocating virtual key map.");
             status = NO_MEMORY;
         } else {
 #if DEBUG_PARSER_PERFORMANCE
@@ -104,7 +104,7 @@
             do {
                 String8 token = mTokenizer->nextToken(WHITESPACE_OR_FIELD_DELIMITER);
                 if (token != "0x01") {
-                    LOGE("%s: Unknown virtual key type, expected 0x01.",
+                    ALOGE("%s: Unknown virtual key type, expected 0x01.",
                           mTokenizer->getLocation().string());
                     return BAD_VALUE;
                 }
@@ -116,7 +116,7 @@
                         && parseNextIntField(&defn.width)
                         && parseNextIntField(&defn.height);
                 if (!success) {
-                    LOGE("%s: Expected 5 colon-delimited integers in virtual key definition.",
+                    ALOGE("%s: Expected 5 colon-delimited integers in virtual key definition.",
                           mTokenizer->getLocation().string());
                     return BAD_VALUE;
                 }
@@ -130,7 +130,7 @@
             } while (consumeFieldDelimiterAndSkipWhitespace());
 
             if (!mTokenizer->isEol()) {
-                LOGE("%s: Expected end of line, got '%s'.",
+                ALOGE("%s: Expected end of line, got '%s'.",
                         mTokenizer->getLocation().string(),
                         mTokenizer->peekRemainderOfLine().string());
                 return BAD_VALUE;
@@ -162,7 +162,7 @@
     char* end;
     *outValue = strtol(token.string(), &end, 0);
     if (token.isEmpty() || *end != '\0') {
-        LOGE("Expected an integer, got '%s'.", token.string());
+        ALOGE("Expected an integer, got '%s'.", token.string());
         return false;
     }
     return true;
diff --git a/libs/utils/Asset.cpp b/libs/utils/Asset.cpp
index 7c34c6a..50e701a 100644
--- a/libs/utils/Asset.cpp
+++ b/libs/utils/Asset.cpp
@@ -89,7 +89,7 @@
   	    gTail->mNext = this;
   	    gTail = this;
   	}
-    //LOGI("Creating Asset %p #%d\n", this, gCount);
+    //ALOGI("Creating Asset %p #%d\n", this, gCount);
 }
 
 Asset::~Asset(void)
@@ -109,7 +109,7 @@
         mPrev->mNext = mNext;
     }
     mNext = mPrev = NULL;
-    //LOGI("Destroying Asset in %p #%d\n", this, gCount);
+    //ALOGI("Destroying Asset in %p #%d\n", this, gCount);
 }
 
 /*
@@ -327,14 +327,14 @@
         newOffset = maxPosn + offset;
         break;
     default:
-        LOGW("unexpected whence %d\n", whence);
+        ALOGW("unexpected whence %d\n", whence);
         // this was happening due to an off64_t size mismatch
         assert(false);
         return (off64_t) -1;
     }
 
     if (newOffset < 0 || newOffset > maxPosn) {
-        LOGW("seek out of range: want %ld, end=%ld\n",
+        ALOGW("seek out of range: want %ld, end=%ld\n",
             (long) newOffset, (long) maxPosn);
         return (off64_t) -1;
     }
@@ -473,7 +473,7 @@
         /* read from the file */
         //printf("file read\n");
         if (ftell(mFp) != mStart + mOffset) {
-            LOGE("Hosed: %ld != %ld+%ld\n",
+            ALOGE("Hosed: %ld != %ld+%ld\n",
                 ftell(mFp), (long) mStart, (long) mOffset);
             assert(false);
         }
@@ -581,7 +581,7 @@
 
         buf = new unsigned char[allocLen];
         if (buf == NULL) {
-            LOGE("alloc of %ld bytes failed\n", (long) allocLen);
+            ALOGE("alloc of %ld bytes failed\n", (long) allocLen);
             return NULL;
         }
 
@@ -590,7 +590,7 @@
             long oldPosn = ftell(mFp);
             fseek(mFp, mStart, SEEK_SET);
             if (fread(buf, 1, mLength, mFp) != (size_t) mLength) {
-                LOGE("failed reading %ld bytes\n", (long) mLength);
+                ALOGE("failed reading %ld bytes\n", (long) mLength);
                 delete[] buf;
                 return NULL;
             }
@@ -658,7 +658,7 @@
             getAssetSource(), (int)mLength);
     unsigned char* buf = new unsigned char[mLength];
     if (buf == NULL) {
-        LOGE("alloc of %ld bytes failed\n", (long) mLength);
+        ALOGE("alloc of %ld bytes failed\n", (long) mLength);
         return NULL;
     }
     memcpy(buf, data, mLength);
@@ -855,7 +855,7 @@
      */
     buf = new unsigned char[mUncompressedLen];
     if (buf == NULL) {
-        LOGW("alloc %ld bytes failed\n", (long) mUncompressedLen);
+        ALOGW("alloc %ld bytes failed\n", (long) mUncompressedLen);
         goto bail;
     }
 
diff --git a/libs/utils/AssetManager.cpp b/libs/utils/AssetManager.cpp
index e7c4d47..47a2b99 100644
--- a/libs/utils/AssetManager.cpp
+++ b/libs/utils/AssetManager.cpp
@@ -117,14 +117,14 @@
       mCacheMode(cacheMode), mCacheValid(false)
 {
     int count = android_atomic_inc(&gCount)+1;
-    //LOGI("Creating AssetManager %p #%d\n", this, count);
+    //ALOGI("Creating AssetManager %p #%d\n", this, count);
     memset(mConfig, 0, sizeof(ResTable_config));
 }
 
 AssetManager::~AssetManager(void)
 {
     int count = android_atomic_dec(&gCount);
-    //LOGI("Destroying AssetManager in %p #%d\n", this, count);
+    //ALOGI("Destroying AssetManager in %p #%d\n", this, count);
 
     delete mConfig;
     delete mResources;
@@ -151,7 +151,7 @@
         ap.path = path;
         ap.type = ::getFileType(path.string());
         if (ap.type != kFileTypeDirectory && ap.type != kFileTypeRegular) {
-            LOGW("Asset path %s is neither a directory nor file (type=%d).",
+            ALOGW("Asset path %s is neither a directory nor file (type=%d).",
                  path.string(), (int)ap.type);
             return false;
         }
@@ -200,7 +200,7 @@
             if (addOverlay) {
                 mAssetPaths.add(oap);
             } else {
-                LOGW("failed to add overlay package %s\n", overlayPath.string());
+                ALOGW("failed to add overlay package %s\n", overlayPath.string());
             }
         }
     }
@@ -216,17 +216,17 @@
         if (errno == ENOENT) {
             return true; // non-existing idmap is always stale
         } else {
-            LOGW("failed to stat file %s: %s\n", idmapPath.string(), strerror(errno));
+            ALOGW("failed to stat file %s: %s\n", idmapPath.string(), strerror(errno));
             return false;
         }
     }
     if (st.st_size < ResTable::IDMAP_HEADER_SIZE_BYTES) {
-        LOGW("file %s has unexpectedly small size=%zd\n", idmapPath.string(), (size_t)st.st_size);
+        ALOGW("file %s has unexpectedly small size=%zd\n", idmapPath.string(), (size_t)st.st_size);
         return false;
     }
     int fd = TEMP_FAILURE_RETRY(::open(idmapPath.string(), O_RDONLY));
     if (fd == -1) {
-        LOGW("failed to open file %s: %s\n", idmapPath.string(), strerror(errno));
+        ALOGW("failed to open file %s: %s\n", idmapPath.string(), strerror(errno));
         return false;
     }
     char buf[ResTable::IDMAP_HEADER_SIZE_BYTES];
@@ -300,24 +300,24 @@
         ap.path = *paths[i];
         Asset* ass = openNonAssetInPathLocked("resources.arsc", Asset::ACCESS_BUFFER, ap);
         if (ass == NULL) {
-            LOGW("failed to find resources.arsc in %s\n", ap.path.string());
+            ALOGW("failed to find resources.arsc in %s\n", ap.path.string());
             goto error;
         }
         tables[i].add(ass, (void*)1, false);
     }
 
     if (!getZipEntryCrcLocked(originalPath, "resources.arsc", &originalCrc)) {
-        LOGW("failed to retrieve crc for resources.arsc in %s\n", originalPath.string());
+        ALOGW("failed to retrieve crc for resources.arsc in %s\n", originalPath.string());
         goto error;
     }
     if (!getZipEntryCrcLocked(overlayPath, "resources.arsc", &overlayCrc)) {
-        LOGW("failed to retrieve crc for resources.arsc in %s\n", overlayPath.string());
+        ALOGW("failed to retrieve crc for resources.arsc in %s\n", overlayPath.string());
         goto error;
     }
 
     if (tables[0].createIdmap(tables[1], originalCrc, overlayCrc,
                               (void**)&data, &size) != NO_ERROR) {
-        LOGW("failed to generate idmap data for file %s\n", idmapPath.string());
+        ALOGW("failed to generate idmap data for file %s\n", idmapPath.string());
         goto error;
     }
 
@@ -326,13 +326,13 @@
     // installd).
     fd = TEMP_FAILURE_RETRY(::open(idmapPath.string(), O_WRONLY | O_CREAT | O_TRUNC, 0644));
     if (fd == -1) {
-        LOGW("failed to write idmap file %s (open: %s)\n", idmapPath.string(), strerror(errno));
+        ALOGW("failed to write idmap file %s (open: %s)\n", idmapPath.string(), strerror(errno));
         goto error_free;
     }
     for (;;) {
         ssize_t written = TEMP_FAILURE_RETRY(write(fd, data + offset, size));
         if (written < 0) {
-            LOGW("failed to write idmap file %s (write: %s)\n", idmapPath.string(),
+            ALOGW("failed to write idmap file %s (write: %s)\n", idmapPath.string(),
                  strerror(errno));
             goto error_close;
         }
@@ -686,7 +686,7 @@
         }
     }
 
-    if (required && !rt) LOGW("Unable to find resources file resources.arsc");
+    if (required && !rt) ALOGW("Unable to find resources file resources.arsc");
     if (!rt) {
         mResources = rt = new ResTable();
     }
@@ -727,7 +727,7 @@
         if (ass) {
             ALOGV("loading idmap %s\n", ap.idmap.string());
         } else {
-            LOGW("failed to load idmap %s\n", ap.idmap.string());
+            ALOGW("failed to load idmap %s\n", ap.idmap.string());
         }
     }
     return ass;
@@ -1074,13 +1074,13 @@
     if (!pZipFile->getEntryInfo(entry, &method, &uncompressedLen, NULL, NULL,
             NULL, NULL))
     {
-        LOGW("getEntryInfo failed\n");
+        ALOGW("getEntryInfo failed\n");
         return NULL;
     }
 
     FileMap* dataMap = pZipFile->createEntryFileMap(entry);
     if (dataMap == NULL) {
-        LOGW("create map from entry failed\n");
+        ALOGW("create map from entry failed\n");
         return NULL;
     }
 
@@ -1096,7 +1096,7 @@
     }
     if (pAsset == NULL) {
         /* unexpected */
-        LOGW("create from segment failed\n");
+        ALOGW("create from segment failed\n");
     }
 
     return pAsset;
@@ -1427,7 +1427,7 @@
 
     pZip = mZipSet.getZip(ap.path);
     if (pZip == NULL) {
-        LOGW("Failure opening zip %s\n", ap.path.string());
+        ALOGW("Failure opening zip %s\n", ap.path.string());
         return false;
     }
 
@@ -1461,7 +1461,7 @@
         entry = pZip->findEntryByIndex(i);
         if (pZip->getEntryFileName(entry, nameBuf, sizeof(nameBuf)) != 0) {
             // TODO: fix this if we expect to have long names
-            LOGE("ARGH: name too long?\n");
+            ALOGE("ARGH: name too long?\n");
             continue;
         }
         //printf("Comparing %s in %s?\n", nameBuf, dirName.string());
@@ -1780,7 +1780,7 @@
     : mPath(path), mZipFile(NULL), mModWhen(modWhen),
       mResourceTableAsset(NULL), mResourceTable(NULL)
 {
-    //LOGI("Creating SharedZip %p %s\n", this, (const char*)mPath);
+    //ALOGI("Creating SharedZip %p %s\n", this, (const char*)mPath);
     mZipFile = new ZipFileRO;
     ALOGV("+++ opening zip '%s'\n", mPath.string());
     if (mZipFile->open(mPath.string()) != NO_ERROR) {
@@ -1858,7 +1858,7 @@
 
 AssetManager::SharedZip::~SharedZip()
 {
-    //LOGI("Destroying SharedZip %p %s\n", this, (const char*)mPath);
+    //ALOGI("Destroying SharedZip %p %s\n", this, (const char*)mPath);
     if (mResourceTable != NULL) {
         delete mResourceTable;
     }
diff --git a/libs/utils/BackupData.cpp b/libs/utils/BackupData.cpp
index 5afe2dc0..f956306 100644
--- a/libs/utils/BackupData.cpp
+++ b/libs/utils/BackupData.cpp
@@ -78,7 +78,7 @@
     paddingSize = padding_extra(n);
     if (paddingSize > 0) {
         uint32_t padding = 0xbcbcbcbc;
-        if (DEBUG) LOGI("writing %d padding bytes for %d", paddingSize, n);
+        if (DEBUG) ALOGI("writing %d padding bytes for %d", paddingSize, n);
         amt = write(m_fd, &padding, paddingSize);
         if (amt != paddingSize) {
             m_status = errno;
@@ -125,7 +125,7 @@
     header.keyLen = tolel(keyLen);
     header.dataSize = tolel(dataSize);
 
-    if (DEBUG) LOGI("writing entity header, %d bytes", sizeof(entity_header_v1));
+    if (DEBUG) ALOGI("writing entity header, %d bytes", sizeof(entity_header_v1));
     amt = write(m_fd, &header, sizeof(entity_header_v1));
     if (amt != sizeof(entity_header_v1)) {
         m_status = errno;
@@ -133,7 +133,7 @@
     }
     m_pos += amt;
 
-    if (DEBUG) LOGI("writing entity header key, %d bytes", keyLen+1);
+    if (DEBUG) ALOGI("writing entity header key, %d bytes", keyLen+1);
     amt = write(m_fd, k.string(), keyLen+1);
     if (amt != keyLen+1) {
         m_status = errno;
diff --git a/libs/utils/BackupHelpers.cpp b/libs/utils/BackupHelpers.cpp
index aee7ff0..f77a891 100644
--- a/libs/utils/BackupHelpers.cpp
+++ b/libs/utils/BackupHelpers.cpp
@@ -100,7 +100,7 @@
     bytesRead += amt;
 
     if (header.magic0 != MAGIC0 || header.magic1 != MAGIC1) {
-        LOGW("read_snapshot_file header.magic0=0x%08x magic1=0x%08x", header.magic0, header.magic1);
+        ALOGW("read_snapshot_file header.magic0=0x%08x magic1=0x%08x", header.magic0, header.magic1);
         return 1;
     }
 
@@ -110,7 +110,7 @@
 
         amt = read(fd, &file, sizeof(FileState));
         if (amt != sizeof(FileState)) {
-            LOGW("read_snapshot_file FileState truncated/error with read at %d bytes\n", bytesRead);
+            ALOGW("read_snapshot_file FileState truncated/error with read at %d bytes\n", bytesRead);
             return 1;
         }
         bytesRead += amt;
@@ -129,13 +129,13 @@
             free(filename);
         }
         if (amt != nameBufSize) {
-            LOGW("read_snapshot_file filename truncated/error with read at %d bytes\n", bytesRead);
+            ALOGW("read_snapshot_file filename truncated/error with read at %d bytes\n", bytesRead);
             return 1;
         }
     }
 
     if (header.totalSize != bytesRead) {
-        LOGW("read_snapshot_file length mismatch: header.totalSize=%d bytesRead=%d\n",
+        ALOGW("read_snapshot_file length mismatch: header.totalSize=%d bytesRead=%d\n",
                 header.totalSize, bytesRead);
         return 1;
     }
@@ -166,7 +166,7 @@
 
     amt = write(fd, &header, sizeof(header));
     if (amt != sizeof(header)) {
-        LOGW("write_snapshot_file error writing header %s", strerror(errno));
+        ALOGW("write_snapshot_file error writing header %s", strerror(errno));
         return errno;
     }
 
@@ -178,14 +178,14 @@
 
             amt = write(fd, &r.s, sizeof(FileState));
             if (amt != sizeof(FileState)) {
-                LOGW("write_snapshot_file error writing header %s", strerror(errno));
+                ALOGW("write_snapshot_file error writing header %s", strerror(errno));
                 return 1;
             }
 
             // filename is not NULL terminated, but it is padded
             amt = write(fd, name.string(), nameLen);
             if (amt != nameLen) {
-                LOGW("write_snapshot_file error writing filename %s", strerror(errno));
+                ALOGW("write_snapshot_file error writing filename %s", strerror(errno));
                 return 1;
             }
             int paddingLen = ROUND_UP[nameLen % 4];
@@ -193,7 +193,7 @@
                 int padding = 0xabababab;
                 amt = write(fd, &padding, paddingLen);
                 if (amt != paddingLen) {
-                    LOGW("write_snapshot_file error writing %d bytes of filename padding %s",
+                    ALOGW("write_snapshot_file error writing %d bytes of filename padding %s",
                             paddingLen, strerror(errno));
                     return 1;
                 }
@@ -232,7 +232,7 @@
     lseek(fd, 0, SEEK_SET);
 
     if (sizeof(metadata) != 16) {
-        LOGE("ERROR: metadata block is the wrong size!");
+        ALOGE("ERROR: metadata block is the wrong size!");
     }
 
     bytesLeft = fileSize + sizeof(metadata);
@@ -280,7 +280,7 @@
                 }
             }
         }
-        LOGE("write_update_file size mismatch for %s. expected=%d actual=%d."
+        ALOGE("write_update_file size mismatch for %s. expected=%d actual=%d."
                 " You aren't doing proper locking!", realFilename, fileSize, fileSize-bytesLeft);
     }
 
@@ -525,7 +525,7 @@
     struct stat64 s;
     if (lstat64(filepath.string(), &s) != 0) {
         err = errno;
-        LOGE("Error %d (%s) from lstat64(%s)", err, strerror(err), filepath.string());
+        ALOGE("Error %d (%s) from lstat64(%s)", err, strerror(err), filepath.string());
         return err;
     }
 
@@ -540,7 +540,7 @@
     int fd = open(filepath.string(), O_RDONLY);
     if (fd < 0) {
         err = errno;
-        LOGE("Error %d (%s) from open(%s)", err, strerror(err), filepath.string());
+        ALOGE("Error %d (%s) from open(%s)", err, strerror(err), filepath.string());
         return err;
     }
 
@@ -551,7 +551,7 @@
     char* paxData = buf + 1024;
 
     if (buf == NULL) {
-        LOGE("Out of mem allocating transfer buffer");
+        ALOGE("Out of mem allocating transfer buffer");
         err = ENOMEM;
         goto cleanup;
     }
@@ -591,7 +591,7 @@
     } else if (S_ISREG(s.st_mode)) {
         type = '0';     // tar magic: '0' == normal file
     } else {
-        LOGW("Error: unknown file mode 0%o [%s]", s.st_mode, filepath.string());
+        ALOGW("Error: unknown file mode 0%o [%s]", s.st_mode, filepath.string());
         goto cleanup;
     }
     buf[156] = type;
@@ -628,7 +628,7 @@
 
     // [ 329 : 8 ] and [ 337 : 8 ] devmajor/devminor, not used
 
-    LOGI("   Name: %s", fullname.string());
+    ALOGI("   Name: %s", fullname.string());
 
     // If we're using a pax extended header, build & write that here; lengths are
     // already preflighted
@@ -688,11 +688,11 @@
             ssize_t nRead = read(fd, buf, toRead);
             if (nRead < 0) {
                 err = errno;
-                LOGE("Unable to read file [%s], err=%d (%s)", filepath.string(),
+                ALOGE("Unable to read file [%s], err=%d (%s)", filepath.string(),
                         err, strerror(err));
                 break;
             } else if (nRead == 0) {
-                LOGE("EOF but expect %lld more bytes in [%s]", (long long) toWrite,
+                ALOGE("EOF but expect %lld more bytes in [%s]", (long long) toWrite,
                         filepath.string());
                 err = EIO;
                 break;
@@ -759,7 +759,7 @@
     file_metadata_v1 metadata;
     amt = in->ReadEntityData(&metadata, sizeof(metadata));
     if (amt != sizeof(metadata)) {
-        LOGW("Could not read metadata for %s -- %ld / %s", filename.string(),
+        ALOGW("Could not read metadata for %s -- %ld / %s", filename.string(),
                 (long)amt, strerror(errno));
         return EIO;
     }
@@ -768,7 +768,7 @@
     if (metadata.version > CURRENT_METADATA_VERSION) {
         if (!m_loggedUnknownMetadata) {
             m_loggedUnknownMetadata = true;
-            LOGW("Restoring file with unsupported metadata version %d (currently %d)",
+            ALOGW("Restoring file with unsupported metadata version %d (currently %d)",
                     metadata.version, CURRENT_METADATA_VERSION);
         }
     }
@@ -778,7 +778,7 @@
     crc = crc32(0L, Z_NULL, 0);
     fd = open(filename.string(), O_CREAT|O_RDWR|O_TRUNC, mode);
     if (fd == -1) {
-        LOGW("Could not open file %s -- %s", filename.string(), strerror(errno));
+        ALOGW("Could not open file %s -- %s", filename.string(), strerror(errno));
         return errno;
     }
     
@@ -786,7 +786,7 @@
         err = write(fd, buf, amt);
         if (err != amt) {
             close(fd);
-            LOGW("Error '%s' writing '%s'", strerror(errno), filename.string());
+            ALOGW("Error '%s' writing '%s'", strerror(errno), filename.string());
             return errno;
         }
         crc = crc32(crc, (Bytef*)buf, amt);
@@ -797,7 +797,7 @@
     // Record for the snapshot
     err = stat(filename.string(), &st);
     if (err != 0) {
-        LOGW("Error stating file that we just created %s", filename.string());
+        ALOGW("Error stating file that we just created %s", filename.string());
         return errno;
     }
 
diff --git a/libs/utils/BlobCache.cpp b/libs/utils/BlobCache.cpp
index 4970828..e52cf2f 100644
--- a/libs/utils/BlobCache.cpp
+++ b/libs/utils/BlobCache.cpp
@@ -69,11 +69,11 @@
         return;
     }
     if (keySize == 0) {
-        LOGW("set: not caching because keySize is 0");
+        ALOGW("set: not caching because keySize is 0");
         return;
     }
     if (valueSize <= 0) {
-        LOGW("set: not caching because valueSize is 0");
+        ALOGW("set: not caching because valueSize is 0");
         return;
     }
 
@@ -183,13 +183,13 @@
 status_t BlobCache::flatten(void* buffer, size_t size, int fds[], size_t count)
         const {
     if (count != 0) {
-        LOGE("flatten: nonzero fd count: %d", count);
+        ALOGE("flatten: nonzero fd count: %d", count);
         return BAD_VALUE;
     }
 
     // Write the cache header
     if (size < sizeof(Header)) {
-        LOGE("flatten: not enough room for cache header");
+        ALOGE("flatten: not enough room for cache header");
         return BAD_VALUE;
     }
     Header* header = reinterpret_cast<Header*>(buffer);
@@ -210,7 +210,7 @@
 
         size_t entrySize = sizeof(EntryHeader) + keySize + valueSize;
         if (byteOffset + entrySize > size) {
-            LOGE("flatten: not enough room for cache entries");
+            ALOGE("flatten: not enough room for cache entries");
             return BAD_VALUE;
         }
 
@@ -234,18 +234,18 @@
     mCacheEntries.clear();
 
     if (count != 0) {
-        LOGE("unflatten: nonzero fd count: %d", count);
+        ALOGE("unflatten: nonzero fd count: %d", count);
         return BAD_VALUE;
     }
 
     // Read the cache header
     if (size < sizeof(Header)) {
-        LOGE("unflatten: not enough room for cache header");
+        ALOGE("unflatten: not enough room for cache header");
         return BAD_VALUE;
     }
     const Header* header = reinterpret_cast<const Header*>(buffer);
     if (header->mMagicNumber != blobCacheMagic) {
-        LOGE("unflatten: bad magic number: %d", header->mMagicNumber);
+        ALOGE("unflatten: bad magic number: %d", header->mMagicNumber);
         return BAD_VALUE;
     }
     if (header->mBlobCacheVersion != blobCacheVersion ||
@@ -261,7 +261,7 @@
     for (size_t i = 0; i < numEntries; i++) {
         if (byteOffset + sizeof(EntryHeader) > size) {
             mCacheEntries.clear();
-            LOGE("unflatten: not enough room for cache entry headers");
+            ALOGE("unflatten: not enough room for cache entry headers");
             return BAD_VALUE;
         }
 
@@ -273,7 +273,7 @@
 
         if (byteOffset + entrySize > size) {
             mCacheEntries.clear();
-            LOGE("unflatten: not enough room for cache entry headers");
+            ALOGE("unflatten: not enough room for cache entry headers");
             return BAD_VALUE;
         }
 
diff --git a/libs/utils/FileMap.cpp b/libs/utils/FileMap.cpp
index b2a61f1..9ce370e 100644
--- a/libs/utils/FileMap.cpp
+++ b/libs/utils/FileMap.cpp
@@ -108,7 +108,7 @@
     mFileHandle  = (HANDLE) _get_osfhandle(fd);
     mFileMapping = CreateFileMapping( mFileHandle, NULL, protect, 0, 0, NULL);
     if (mFileMapping == NULL) {
-        LOGE("CreateFileMapping(%p, %lx) failed with error %ld\n",
+        ALOGE("CreateFileMapping(%p, %lx) failed with error %ld\n",
               mFileHandle, protect, GetLastError() );
         return false;
     }
@@ -123,7 +123,7 @@
                               (DWORD)(adjOffset),
                               adjLength );
     if (mBasePtr == NULL) {
-        LOGE("MapViewOfFile(%ld, %ld) failed with error %ld\n",
+        ALOGE("MapViewOfFile(%ld, %ld) failed with error %ld\n",
               adjOffset, adjLength, GetLastError() );
         CloseHandle(mFileMapping);
         mFileMapping = INVALID_HANDLE_VALUE;
@@ -147,7 +147,7 @@
 #if NOT_USING_KLIBC
         mPageSize = sysconf(_SC_PAGESIZE);
         if (mPageSize == -1) {
-            LOGE("could not get _SC_PAGESIZE\n");
+            ALOGE("could not get _SC_PAGESIZE\n");
             return false;
         }
 #else
@@ -175,7 +175,7 @@
     		goto try_again;
     	}
     
-        LOGE("mmap(%ld,%ld) failed: %s\n",
+        ALOGE("mmap(%ld,%ld) failed: %s\n",
             (long) adjOffset, (long) adjLength, strerror(errno));
         return false;
     }
@@ -217,7 +217,7 @@
 
     cc = madvise(mBasePtr, mBaseLength, sysAdvice);
     if (cc != 0)
-        LOGW("madvise(%d) failed: %s\n", sysAdvice, strerror(errno));
+        ALOGW("madvise(%d) failed: %s\n", sysAdvice, strerror(errno));
     return cc;
 #else
 	return -1;
diff --git a/libs/utils/Looper.cpp b/libs/utils/Looper.cpp
index 1bc92cf..d1aa664 100644
--- a/libs/utils/Looper.cpp
+++ b/libs/utils/Looper.cpp
@@ -163,7 +163,7 @@
         Looper::setForThread(looper);
     }
     if (looper->getAllowNonCallbacks() != allowNonCallbacks) {
-        LOGW("Looper already prepared for this thread with a different value for the "
+        ALOGW("Looper already prepared for this thread with a different value for the "
                 "ALOOPER_PREPARE_ALLOW_NON_CALLBACKS option.");
     }
     return looper;
@@ -262,7 +262,7 @@
         if (errno == EINTR) {
             goto Done;
         }
-        LOGW("Poll failed with an unexpected error, errno=%d", errno);
+        ALOGW("Poll failed with an unexpected error, errno=%d", errno);
         result = ALOOPER_POLL_ERROR;
         goto Done;
     }
@@ -289,7 +289,7 @@
             if (epollEvents & EPOLLIN) {
                 awoken();
             } else {
-                LOGW("Ignoring unexpected epoll events 0x%x on wake read pipe.", epollEvents);
+                ALOGW("Ignoring unexpected epoll events 0x%x on wake read pipe.", epollEvents);
             }
         } else {
             ssize_t requestIndex = mRequests.indexOfKey(fd);
@@ -301,7 +301,7 @@
                 if (epollEvents & EPOLLHUP) events |= ALOOPER_EVENT_HANGUP;
                 pushResponse(events, mRequests.valueAt(requestIndex));
             } else {
-                LOGW("Ignoring unexpected epoll events 0x%x on fd %d that is "
+                ALOGW("Ignoring unexpected epoll events 0x%x on fd %d that is "
                         "no longer registered.", epollEvents, fd);
             }
         }
@@ -317,7 +317,7 @@
                 if (pollEvents & POLLIN) {
                     awoken();
                 } else {
-                    LOGW("Ignoring unexpected poll events 0x%x on wake read pipe.", pollEvents);
+                    ALOGW("Ignoring unexpected poll events 0x%x on wake read pipe.", pollEvents);
                 }
             } else {
                 int events = 0;
@@ -468,7 +468,7 @@
 
     if (nWrite != 1) {
         if (errno != EAGAIN) {
-            LOGW("Could not write wake signal, errno=%d", errno);
+            ALOGW("Could not write wake signal, errno=%d", errno);
         }
     }
 }
@@ -520,12 +520,12 @@
 
     if (! callback) {
         if (! mAllowNonCallbacks) {
-            LOGE("Invalid attempt to set NULL callback but not allowed for this looper.");
+            ALOGE("Invalid attempt to set NULL callback but not allowed for this looper.");
             return -1;
         }
 
         if (ident < 0) {
-            LOGE("Invalid attempt to set NULL callback with ident <= 0.");
+            ALOGE("Invalid attempt to set NULL callback with ident <= 0.");
             return -1;
         }
     }
@@ -553,14 +553,14 @@
         if (requestIndex < 0) {
             int epollResult = epoll_ctl(mEpollFd, EPOLL_CTL_ADD, fd, & eventItem);
             if (epollResult < 0) {
-                LOGE("Error adding epoll events for fd %d, errno=%d", fd, errno);
+                ALOGE("Error adding epoll events for fd %d, errno=%d", fd, errno);
                 return -1;
             }
             mRequests.add(fd, request);
         } else {
             int epollResult = epoll_ctl(mEpollFd, EPOLL_CTL_MOD, fd, & eventItem);
             if (epollResult < 0) {
-                LOGE("Error modifying epoll events for fd %d, errno=%d", fd, errno);
+                ALOGE("Error modifying epoll events for fd %d, errno=%d", fd, errno);
                 return -1;
             }
             mRequests.replaceValueAt(requestIndex, request);
@@ -611,7 +611,7 @@
 
         int epollResult = epoll_ctl(mEpollFd, EPOLL_CTL_DEL, fd, NULL);
         if (epollResult < 0) {
-            LOGE("Error removing epoll events for fd %d, errno=%d", fd, errno);
+            ALOGE("Error removing epoll events for fd %d, errno=%d", fd, errno);
             return -1;
         }
 
diff --git a/libs/utils/ObbFile.cpp b/libs/utils/ObbFile.cpp
index 2907b56..ddf5991 100644
--- a/libs/utils/ObbFile.cpp
+++ b/libs/utils/ObbFile.cpp
@@ -90,14 +90,14 @@
 
     fd = ::open(filename, O_RDONLY);
     if (fd < 0) {
-        LOGW("couldn't open file %s: %s", filename, strerror(errno));
+        ALOGW("couldn't open file %s: %s", filename, strerror(errno));
         goto out;
     }
     success = readFrom(fd);
     close(fd);
 
     if (!success) {
-        LOGW("failed to read from %s (fd=%d)\n", filename, fd);
+        ALOGW("failed to read from %s (fd=%d)\n", filename, fd);
     }
 
 out:
@@ -107,7 +107,7 @@
 bool ObbFile::readFrom(int fd)
 {
     if (fd < 0) {
-        LOGW("attempt to read from invalid fd\n");
+        ALOGW("attempt to read from invalid fd\n");
         return false;
     }
 
@@ -120,9 +120,9 @@
 
     if (fileLength < kFooterMinSize) {
         if (fileLength < 0) {
-            LOGW("error seeking in ObbFile: %s\n", strerror(errno));
+            ALOGW("error seeking in ObbFile: %s\n", strerror(errno));
         } else {
-            LOGW("file is only %lld (less than %d minimum)\n", fileLength, kFooterMinSize);
+            ALOGW("file is only %lld (less than %d minimum)\n", fileLength, kFooterMinSize);
         }
         return false;
     }
@@ -136,13 +136,13 @@
         char *footer = new char[kFooterTagSize];
         actual = TEMP_FAILURE_RETRY(read(fd, footer, kFooterTagSize));
         if (actual != kFooterTagSize) {
-            LOGW("couldn't read footer signature: %s\n", strerror(errno));
+            ALOGW("couldn't read footer signature: %s\n", strerror(errno));
             return false;
         }
 
         unsigned int fileSig = get4LE((unsigned char*)footer + sizeof(int32_t));
         if (fileSig != kSignature) {
-            LOGW("footer didn't match magic string (expected 0x%08x; got 0x%08x)\n",
+            ALOGW("footer didn't match magic string (expected 0x%08x; got 0x%08x)\n",
                     kSignature, fileSig);
             return false;
         }
@@ -150,13 +150,13 @@
         footerSize = get4LE((unsigned char*)footer);
         if (footerSize > (size_t)fileLength - kFooterTagSize
                 || footerSize > kMaxBufSize) {
-            LOGW("claimed footer size is too large (0x%08zx; file size is 0x%08llx)\n",
+            ALOGW("claimed footer size is too large (0x%08zx; file size is 0x%08llx)\n",
                     footerSize, fileLength);
             return false;
         }
 
         if (footerSize < (kFooterMinSize - kFooterTagSize)) {
-            LOGW("claimed footer size is too small (0x%zx; minimum size is 0x%x)\n",
+            ALOGW("claimed footer size is too small (0x%zx; minimum size is 0x%x)\n",
                     footerSize, kFooterMinSize - kFooterTagSize);
             return false;
         }
@@ -164,7 +164,7 @@
 
     off64_t fileOffset = fileLength - footerSize - kFooterTagSize;
     if (lseek64(fd, fileOffset, SEEK_SET) != fileOffset) {
-        LOGW("seek %lld failed: %s\n", fileOffset, strerror(errno));
+        ALOGW("seek %lld failed: %s\n", fileOffset, strerror(errno));
         return false;
     }
 
@@ -172,27 +172,27 @@
 
     char* scanBuf = (char*)malloc(footerSize);
     if (scanBuf == NULL) {
-        LOGW("couldn't allocate scanBuf: %s\n", strerror(errno));
+        ALOGW("couldn't allocate scanBuf: %s\n", strerror(errno));
         return false;
     }
 
     actual = TEMP_FAILURE_RETRY(read(fd, scanBuf, footerSize));
     // readAmount is guaranteed to be less than kMaxBufSize
     if (actual != (ssize_t)footerSize) {
-        LOGI("couldn't read ObbFile footer: %s\n", strerror(errno));
+        ALOGI("couldn't read ObbFile footer: %s\n", strerror(errno));
         free(scanBuf);
         return false;
     }
 
 #ifdef DEBUG
     for (int i = 0; i < footerSize; ++i) {
-        LOGI("char: 0x%02x\n", scanBuf[i]);
+        ALOGI("char: 0x%02x\n", scanBuf[i]);
     }
 #endif
 
     uint32_t sigVersion = get4LE((unsigned char*)scanBuf);
     if (sigVersion != kSigVersion) {
-        LOGW("Unsupported ObbFile version %d\n", sigVersion);
+        ALOGW("Unsupported ObbFile version %d\n", sigVersion);
         free(scanBuf);
         return false;
     }
@@ -205,7 +205,7 @@
     size_t packageNameLen = get4LE((unsigned char*)scanBuf + kPackageNameLenOffset);
     if (packageNameLen == 0
             || packageNameLen > (footerSize - kPackageNameOffset)) {
-        LOGW("bad ObbFile package name length (0x%04zx; 0x%04zx possible)\n",
+        ALOGW("bad ObbFile package name length (0x%04zx; 0x%04zx possible)\n",
                 packageNameLen, footerSize - kPackageNameOffset);
         free(scanBuf);
         return false;
@@ -217,7 +217,7 @@
     free(scanBuf);
 
 #ifdef DEBUG
-    LOGI("Obb scan succeeded: packageName=%s, version=%d\n", mPackageName.string(), mVersion);
+    ALOGI("Obb scan succeeded: packageName=%s, version=%d\n", mPackageName.string(), mVersion);
 #endif
 
     return true;
@@ -237,7 +237,7 @@
 
 out:
     if (!success) {
-        LOGW("failed to write to %s: %s\n", filename, strerror(errno));
+        ALOGW("failed to write to %s: %s\n", filename, strerror(errno));
     }
     return success;
 }
@@ -251,7 +251,7 @@
     lseek64(fd, 0, SEEK_END);
 
     if (mPackageName.size() == 0 || mVersion == -1) {
-        LOGW("tried to write uninitialized ObbFile data\n");
+        ALOGW("tried to write uninitialized ObbFile data\n");
         return false;
     }
 
@@ -260,48 +260,48 @@
 
     put4LE(intBuf, kSigVersion);
     if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
-        LOGW("couldn't write signature version: %s\n", strerror(errno));
+        ALOGW("couldn't write signature version: %s\n", strerror(errno));
         return false;
     }
 
     put4LE(intBuf, mVersion);
     if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
-        LOGW("couldn't write package version\n");
+        ALOGW("couldn't write package version\n");
         return false;
     }
 
     put4LE(intBuf, mFlags);
     if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
-        LOGW("couldn't write package version\n");
+        ALOGW("couldn't write package version\n");
         return false;
     }
 
     if (write(fd, mSalt, sizeof(mSalt)) != (ssize_t)sizeof(mSalt)) {
-        LOGW("couldn't write salt: %s\n", strerror(errno));
+        ALOGW("couldn't write salt: %s\n", strerror(errno));
         return false;
     }
 
     size_t packageNameLen = mPackageName.size();
     put4LE(intBuf, packageNameLen);
     if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
-        LOGW("couldn't write package name length: %s\n", strerror(errno));
+        ALOGW("couldn't write package name length: %s\n", strerror(errno));
         return false;
     }
 
     if (write(fd, mPackageName.string(), packageNameLen) != (ssize_t)packageNameLen) {
-        LOGW("couldn't write package name: %s\n", strerror(errno));
+        ALOGW("couldn't write package name: %s\n", strerror(errno));
         return false;
     }
 
     put4LE(intBuf, kPackageNameOffset + packageNameLen);
     if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
-        LOGW("couldn't write footer size: %s\n", strerror(errno));
+        ALOGW("couldn't write footer size: %s\n", strerror(errno));
         return false;
     }
 
     put4LE(intBuf, kSignature);
     if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
-        LOGW("couldn't write footer magic signature: %s\n", strerror(errno));
+        ALOGW("couldn't write footer magic signature: %s\n", strerror(errno));
         return false;
     }
 
@@ -322,7 +322,7 @@
 
 out:
     if (!success) {
-        LOGW("failed to remove signature from %s: %s\n", filename, strerror(errno));
+        ALOGW("failed to remove signature from %s: %s\n", filename, strerror(errno));
     }
     return success;
 }
diff --git a/libs/utils/PropertyMap.cpp b/libs/utils/PropertyMap.cpp
index 99603ab..5520702 100644
--- a/libs/utils/PropertyMap.cpp
+++ b/libs/utils/PropertyMap.cpp
@@ -84,7 +84,7 @@
     char* end;
     int value = strtol(stringValue.string(), & end, 10);
     if (*end != '\0') {
-        LOGW("Property key '%s' has invalid value '%s'.  Expected an integer.",
+        ALOGW("Property key '%s' has invalid value '%s'.  Expected an integer.",
                 key.string(), stringValue.string());
         return false;
     }
@@ -101,7 +101,7 @@
     char* end;
     float value = strtof(stringValue.string(), & end);
     if (*end != '\0') {
-        LOGW("Property key '%s' has invalid value '%s'.  Expected a float.",
+        ALOGW("Property key '%s' has invalid value '%s'.  Expected a float.",
                 key.string(), stringValue.string());
         return false;
     }
@@ -121,11 +121,11 @@
     Tokenizer* tokenizer;
     status_t status = Tokenizer::open(filename, &tokenizer);
     if (status) {
-        LOGE("Error %d opening property file %s.", status, filename.string());
+        ALOGE("Error %d opening property file %s.", status, filename.string());
     } else {
         PropertyMap* map = new PropertyMap();
         if (!map) {
-            LOGE("Error allocating property map.");
+            ALOGE("Error allocating property map.");
             status = NO_MEMORY;
         } else {
 #if DEBUG_PARSER_PERFORMANCE
@@ -172,14 +172,14 @@
         if (!mTokenizer->isEol() && mTokenizer->peekChar() != '#') {
             String8 keyToken = mTokenizer->nextToken(WHITESPACE_OR_PROPERTY_DELIMITER);
             if (keyToken.isEmpty()) {
-                LOGE("%s: Expected non-empty property key.", mTokenizer->getLocation().string());
+                ALOGE("%s: Expected non-empty property key.", mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
 
             mTokenizer->skipDelimiters(WHITESPACE);
 
             if (mTokenizer->nextChar() != '=') {
-                LOGE("%s: Expected '=' between property key and value.",
+                ALOGE("%s: Expected '=' between property key and value.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
@@ -188,21 +188,21 @@
 
             String8 valueToken = mTokenizer->nextToken(WHITESPACE);
             if (valueToken.find("\\", 0) >= 0 || valueToken.find("\"", 0) >= 0) {
-                LOGE("%s: Found reserved character '\\' or '\"' in property value.",
+                ALOGE("%s: Found reserved character '\\' or '\"' in property value.",
                         mTokenizer->getLocation().string());
                 return BAD_VALUE;
             }
 
             mTokenizer->skipDelimiters(WHITESPACE);
             if (!mTokenizer->isEol()) {
-                LOGE("%s: Expected end of line, got '%s'.",
+                ALOGE("%s: Expected end of line, got '%s'.",
                         mTokenizer->getLocation().string(),
                         mTokenizer->peekRemainderOfLine().string());
                 return BAD_VALUE;
             }
 
             if (mMap->hasProperty(keyToken)) {
-                LOGE("%s: Duplicate property value for key '%s'.",
+                ALOGE("%s: Duplicate property value for key '%s'.",
                         mTokenizer->getLocation().string(), keyToken.string());
                 return BAD_VALUE;
             }
diff --git a/libs/utils/RefBase.cpp b/libs/utils/RefBase.cpp
index 0b7dd92..e80a795 100644
--- a/libs/utils/RefBase.cpp
+++ b/libs/utils/RefBase.cpp
@@ -98,7 +98,7 @@
 #if DEBUG_REFS_FATAL_SANITY_CHECKS
             LOG_ALWAYS_FATAL("Strong references remain!");
 #else
-            LOGE("Strong references remain:");
+            ALOGE("Strong references remain:");
 #endif
             ref_entry* refs = mStrongRefs;
             while (refs) {
@@ -116,7 +116,7 @@
 #if DEBUG_REFS_FATAL_SANITY_CHECKS
             LOG_ALWAYS_FATAL("Weak references remain:");
 #else
-            LOGE("Weak references remain!");
+            ALOGE("Weak references remain!");
 #endif
             ref_entry* refs = mWeakRefs;
             while (refs) {
@@ -129,7 +129,7 @@
             }
         }
         if (dumpStack) {
-            LOGE("above errors at:");
+            ALOGE("above errors at:");
             CallStack stack;
             stack.update();
             stack.dump();
@@ -205,7 +205,7 @@
                 close(rc);
                 ALOGD("STACK TRACE for %p saved in %s", this, name);
             }
-            else LOGE("FAILED TO PRINT STACK TRACE for %p in %s: %s", this,
+            else ALOGE("FAILED TO PRINT STACK TRACE for %p in %s: %s", this,
                       name, strerror(errno));
         }
     }
@@ -263,7 +263,7 @@
                     id, mBase, this);
 #endif
 
-            LOGE("RefBase: removing id %p on RefBase %p"
+            ALOGE("RefBase: removing id %p on RefBase %p"
                     "(weakref_type %p) that doesn't exist!",
                     id, mBase, this);
 
@@ -332,7 +332,7 @@
     
     refs->addStrongRef(id);
     const int32_t c = android_atomic_inc(&refs->mStrong);
-    LOG_ASSERT(c > 0, "incStrong() called on %p after last strong ref", refs);
+    ALOG_ASSERT(c > 0, "incStrong() called on %p after last strong ref", refs);
 #if PRINT_REFS
     ALOGD("incStrong of %p from %p: cnt=%d\n", this, id, c);
 #endif
@@ -352,7 +352,7 @@
 #if PRINT_REFS
     ALOGD("decStrong of %p from %p: cnt=%d\n", this, id, c);
 #endif
-    LOG_ASSERT(c >= 1, "decStrong() called on %p too many times", refs);
+    ALOG_ASSERT(c >= 1, "decStrong() called on %p too many times", refs);
     if (c == 1) {
         refs->mBase->onLastStrongRef(id);
         if ((refs->mFlags&OBJECT_LIFETIME_MASK) == OBJECT_LIFETIME_STRONG) {
@@ -369,7 +369,7 @@
     
     refs->addStrongRef(id);
     const int32_t c = android_atomic_inc(&refs->mStrong);
-    LOG_ASSERT(c >= 0, "forceIncStrong called on %p after ref count underflow",
+    ALOG_ASSERT(c >= 0, "forceIncStrong called on %p after ref count underflow",
                refs);
 #if PRINT_REFS
     ALOGD("forceIncStrong of %p from %p: cnt=%d\n", this, id, c);
@@ -399,7 +399,7 @@
     weakref_impl* const impl = static_cast<weakref_impl*>(this);
     impl->addWeakRef(id);
     const int32_t c = android_atomic_inc(&impl->mWeak);
-    LOG_ASSERT(c >= 0, "incWeak called on %p after last weak ref", this);
+    ALOG_ASSERT(c >= 0, "incWeak called on %p after last weak ref", this);
 }
 
 
@@ -408,7 +408,7 @@
     weakref_impl* const impl = static_cast<weakref_impl*>(this);
     impl->removeWeakRef(id);
     const int32_t c = android_atomic_dec(&impl->mWeak);
-    LOG_ASSERT(c >= 1, "decWeak called on %p too many times", this);
+    ALOG_ASSERT(c >= 1, "decWeak called on %p too many times", this);
     if (c != 1) return;
 
     if ((impl->mFlags&OBJECT_LIFETIME_WEAK) == OBJECT_LIFETIME_STRONG) {
@@ -442,7 +442,7 @@
     weakref_impl* const impl = static_cast<weakref_impl*>(this);
     
     int32_t curCount = impl->mStrong;
-    LOG_ASSERT(curCount >= 0, "attemptIncStrong called on %p after underflow",
+    ALOG_ASSERT(curCount >= 0, "attemptIncStrong called on %p after underflow",
                this);
     while (curCount > 0 && curCount != INITIAL_STRONG_VALUE) {
         if (android_atomic_cmpxchg(curCount, curCount+1, &impl->mStrong) == 0) {
@@ -503,7 +503,7 @@
     weakref_impl* const impl = static_cast<weakref_impl*>(this);
 
     int32_t curCount = impl->mWeak;
-    LOG_ASSERT(curCount >= 0, "attemptIncWeak called on %p after underflow",
+    ALOG_ASSERT(curCount >= 0, "attemptIncWeak called on %p after underflow",
                this);
     while (curCount > 0) {
         if (android_atomic_cmpxchg(curCount, curCount+1, &impl->mWeak) == 0) {
diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp
index 559afd8..15b83bb 100644
--- a/libs/utils/ResourceTypes.cpp
+++ b/libs/utils/ResourceTypes.cpp
@@ -107,20 +107,20 @@
                 if ((ssize_t)size <= (dataEnd-((const uint8_t*)chunk))) {
                     return NO_ERROR;
                 }
-                LOGW("%s data size %p extends beyond resource end %p.",
+                ALOGW("%s data size %p extends beyond resource end %p.",
                      name, (void*)size,
                      (void*)(dataEnd-((const uint8_t*)chunk)));
                 return BAD_TYPE;
             }
-            LOGW("%s size 0x%x or headerSize 0x%x is not on an integer boundary.",
+            ALOGW("%s size 0x%x or headerSize 0x%x is not on an integer boundary.",
                  name, (int)size, (int)headerSize);
             return BAD_TYPE;
         }
-        LOGW("%s size %p is smaller than header size %p.",
+        ALOGW("%s size %p is smaller than header size %p.",
              name, (void*)size, (void*)(int)headerSize);
         return BAD_TYPE;
     }
-    LOGW("%s header size %p is too small.",
+    ALOGW("%s header size %p is too small.",
          name, (void*)(int)headerSize);
     return BAD_TYPE;
 }
@@ -221,11 +221,11 @@
 static bool assertIdmapHeader(const uint32_t* map, size_t sizeBytes)
 {
     if (sizeBytes < ResTable::IDMAP_HEADER_SIZE_BYTES) {
-        LOGW("idmap assertion failed: size=%d bytes\n", sizeBytes);
+        ALOGW("idmap assertion failed: size=%d bytes\n", sizeBytes);
         return false;
     }
     if (*map != htodl(IDMAP_MAGIC)) { // htodl: map data expected to be in correct endianess
-        LOGW("idmap assertion failed: invalid magic found (is 0x%08x, expected 0x%08x)\n",
+        ALOGW("idmap assertion failed: invalid magic found (is 0x%08x, expected 0x%08x)\n",
              *map, htodl(IDMAP_MAGIC));
         return false;
     }
@@ -246,11 +246,11 @@
     const uint32_t typeCount = *map;
 
     if (type > typeCount) {
-        LOGW("Resource ID map: type=%d exceeds number of types=%d\n", type, typeCount);
+        ALOGW("Resource ID map: type=%d exceeds number of types=%d\n", type, typeCount);
         return UNKNOWN_ERROR;
     }
     if (typeCount > size) {
-        LOGW("Resource ID map: number of types=%d exceeds size of map=%d\n", typeCount, size);
+        ALOGW("Resource ID map: number of types=%d exceeds size of map=%d\n", typeCount, size);
         return UNKNOWN_ERROR;
     }
     const uint32_t typeOffset = map[type];
@@ -259,7 +259,7 @@
         return NO_ERROR;
     }
     if (typeOffset + 1 > size) {
-        LOGW("Resource ID map: type offset=%d exceeds reasonable value, size of map=%d\n",
+        ALOGW("Resource ID map: type offset=%d exceeds reasonable value, size of map=%d\n",
              typeOffset, size);
         return UNKNOWN_ERROR;
     }
@@ -271,7 +271,7 @@
     }
     const uint32_t index = typeOffset + 2 + entry - entryOffset;
     if (index > size) {
-        LOGW("Resource ID map: entry index=%d exceeds size of map=%d\n", index, size);
+        ALOGW("Resource ID map: entry index=%d exceeds size of map=%d\n", index, size);
         *outValue = 0;
         return NO_ERROR;
     }
@@ -296,7 +296,7 @@
 Res_png_9patch* Res_png_9patch::deserialize(const void* inData)
 {
     if (sizeof(void*) != sizeof(int32_t)) {
-        LOGE("Cannot deserialize on non 32-bit system\n");
+        ALOGE("Cannot deserialize on non 32-bit system\n");
         return NULL;
     }
     deserializeInternal(inData, (Res_png_9patch*) inData);
@@ -358,7 +358,7 @@
 
     if (mHeader->header.headerSize > mHeader->header.size
             || mHeader->header.size > size) {
-        LOGW("Bad string block: header size %d or total size %d is larger than data size %d\n",
+        ALOGW("Bad string block: header size %d or total size %d is larger than data size %d\n",
                 (int)mHeader->header.headerSize, (int)mHeader->header.size, (int)size);
         return (mError=BAD_TYPE);
     }
@@ -370,7 +370,7 @@
         if ((mHeader->stringCount*sizeof(uint32_t) < mHeader->stringCount)  // uint32 overflow?
             || (mHeader->header.headerSize+(mHeader->stringCount*sizeof(uint32_t)))
                 > size) {
-            LOGW("Bad string block: entry of %d items extends past data size %d\n",
+            ALOGW("Bad string block: entry of %d items extends past data size %d\n",
                     (int)(mHeader->header.headerSize+(mHeader->stringCount*sizeof(uint32_t))),
                     (int)size);
             return (mError=BAD_TYPE);
@@ -388,7 +388,7 @@
         mStrings = (const void*)
             (((const uint8_t*)data)+mHeader->stringsStart);
         if (mHeader->stringsStart >= (mHeader->header.size-sizeof(uint16_t))) {
-            LOGW("Bad string block: string pool starts at %d, after total size %d\n",
+            ALOGW("Bad string block: string pool starts at %d, after total size %d\n",
                     (int)mHeader->stringsStart, (int)mHeader->header.size);
             return (mError=BAD_TYPE);
         }
@@ -398,13 +398,13 @@
         } else {
             // check invariant: styles starts before end of data
             if (mHeader->stylesStart >= (mHeader->header.size-sizeof(uint16_t))) {
-                LOGW("Bad style block: style block starts at %d past data size of %d\n",
+                ALOGW("Bad style block: style block starts at %d past data size of %d\n",
                     (int)mHeader->stylesStart, (int)mHeader->header.size);
                 return (mError=BAD_TYPE);
             }
             // check invariant: styles follow the strings
             if (mHeader->stylesStart <= mHeader->stringsStart) {
-                LOGW("Bad style block: style block starts at %d, before strings at %d\n",
+                ALOGW("Bad style block: style block starts at %d, before strings at %d\n",
                     (int)mHeader->stylesStart, (int)mHeader->stringsStart);
                 return (mError=BAD_TYPE);
             }
@@ -414,7 +414,7 @@
 
         // check invariant: stringCount > 0 requires a string pool to exist
         if (mStringPoolSize == 0) {
-            LOGW("Bad string block: stringCount is %d but pool size is 0\n", (int)mHeader->stringCount);
+            ALOGW("Bad string block: stringCount is %d but pool size is 0\n", (int)mHeader->stringCount);
             return (mError=BAD_TYPE);
         }
 
@@ -437,7 +437,7 @@
                 ((uint8_t*)mStrings)[mStringPoolSize-1] != 0) ||
                 (!mHeader->flags&ResStringPool_header::UTF8_FLAG &&
                 ((char16_t*)mStrings)[mStringPoolSize-1] != 0)) {
-            LOGW("Bad string block: last string is not 0-terminated\n");
+            ALOGW("Bad string block: last string is not 0-terminated\n");
             return (mError=BAD_TYPE);
         }
     } else {
@@ -449,12 +449,12 @@
         mEntryStyles = mEntries + mHeader->stringCount;
         // invariant: integer overflow in calculating mEntryStyles
         if (mEntryStyles < mEntries) {
-            LOGW("Bad string block: integer overflow finding styles\n");
+            ALOGW("Bad string block: integer overflow finding styles\n");
             return (mError=BAD_TYPE);
         }
 
         if (((const uint8_t*)mEntryStyles-(const uint8_t*)mHeader) > (int)size) {
-            LOGW("Bad string block: entry of %d styles extends past data size %d\n",
+            ALOGW("Bad string block: entry of %d styles extends past data size %d\n",
                     (int)((const uint8_t*)mEntryStyles-(const uint8_t*)mHeader),
                     (int)size);
             return (mError=BAD_TYPE);
@@ -462,7 +462,7 @@
         mStyles = (const uint32_t*)
             (((const uint8_t*)data)+mHeader->stylesStart);
         if (mHeader->stylesStart >= mHeader->header.size) {
-            LOGW("Bad string block: style pool starts %d, after total size %d\n",
+            ALOGW("Bad string block: style pool starts %d, after total size %d\n",
                     (int)mHeader->stylesStart, (int)mHeader->header.size);
             return (mError=BAD_TYPE);
         }
@@ -487,7 +487,7 @@
         };
         if (memcmp(&mStyles[mStylePoolSize-(sizeof(endSpan)/sizeof(uint32_t))],
                    &endSpan, sizeof(endSpan)) != 0) {
-            LOGW("Bad string block: last style is not 0xFFFFFFFF-terminated\n");
+            ALOGW("Bad string block: last style is not 0xFFFFFFFF-terminated\n");
             return (mError=BAD_TYPE);
         }
     } else {
@@ -581,7 +581,7 @@
                 if ((uint32_t)(str+*u16len-strings) < mStringPoolSize) {
                     return str;
                 } else {
-                    LOGW("Bad string block: string #%d extends to %d, past end at %d\n",
+                    ALOGW("Bad string block: string #%d extends to %d, past end at %d\n",
                             (int)idx, (int)(str+*u16len-strings), (int)mStringPoolSize);
                 }
             } else {
@@ -601,7 +601,7 @@
 
                     ssize_t actualLen = utf8_to_utf16_length(u8str, u8len);
                     if (actualLen < 0 || (size_t)actualLen != *u16len) {
-                        LOGW("Bad string block: string #%lld decoded length is not correct "
+                        ALOGW("Bad string block: string #%lld decoded length is not correct "
                                 "%lld vs %llu\n",
                                 (long long)idx, (long long)actualLen, (long long)*u16len);
                         return NULL;
@@ -609,7 +609,7 @@
 
                     char16_t *u16str = (char16_t *)calloc(*u16len+1, sizeof(char16_t));
                     if (!u16str) {
-                        LOGW("No memory when trying to allocate decode cache for string #%d\n",
+                        ALOGW("No memory when trying to allocate decode cache for string #%d\n",
                                 (int)idx);
                         return NULL;
                     }
@@ -618,13 +618,13 @@
                     mCache[idx] = u16str;
                     return u16str;
                 } else {
-                    LOGW("Bad string block: string #%lld extends to %lld, past end at %lld\n",
+                    ALOGW("Bad string block: string #%lld extends to %lld, past end at %lld\n",
                             (long long)idx, (long long)(u8str+u8len-strings),
                             (long long)mStringPoolSize);
                 }
             }
         } else {
-            LOGW("Bad string block: string #%d entry is at %d, past end at %d\n",
+            ALOGW("Bad string block: string #%d entry is at %d, past end at %d\n",
                     (int)idx, (int)(off*sizeof(uint16_t)),
                     (int)(mStringPoolSize*sizeof(uint16_t)));
         }
@@ -646,12 +646,12 @@
                 if ((uint32_t)(str+encLen-strings) < mStringPoolSize) {
                     return (const char*)str;
                 } else {
-                    LOGW("Bad string block: string #%d extends to %d, past end at %d\n",
+                    ALOGW("Bad string block: string #%d extends to %d, past end at %d\n",
                             (int)idx, (int)(str+encLen-strings), (int)mStringPoolSize);
                 }
             }
         } else {
-            LOGW("Bad string block: string #%d entry is at %d, past end at %d\n",
+            ALOGW("Bad string block: string #%d entry is at %d, past end at %d\n",
                     (int)idx, (int)(off*sizeof(uint16_t)),
                     (int)(mStringPoolSize*sizeof(uint16_t)));
         }
@@ -671,7 +671,7 @@
         if (off < mStylePoolSize) {
             return (const ResStringPool_span*)(mStyles+off);
         } else {
-            LOGW("Bad string block: style #%d entry is at %d, past end at %d\n",
+            ALOGW("Bad string block: style #%d entry is at %d, past end at %d\n",
                     (int)idx, (int)(off*sizeof(uint32_t)),
                     (int)(mStylePoolSize*sizeof(uint32_t)));
         }
@@ -1087,7 +1087,7 @@
     do {
         const ResXMLTree_node* next = (const ResXMLTree_node*)
             (((const uint8_t*)mCurNode) + dtohl(mCurNode->header.size));
-        //LOGW("Next node: prev=%p, next=%p\n", mCurNode, next);
+        //ALOGW("Next node: prev=%p, next=%p\n", mCurNode, next);
         
         if (((const uint8_t*)next) >= mTree.mDataEnd) {
             mCurNode = NULL;
@@ -1120,14 +1120,14 @@
                 minExtSize = sizeof(ResXMLTree_cdataExt);
                 break;
             default:
-                LOGW("Unknown XML block: header type %d in node at %d\n",
+                ALOGW("Unknown XML block: header type %d in node at %d\n",
                      (int)dtohs(next->header.type),
                      (int)(((const uint8_t*)next)-((const uint8_t*)mTree.mHeader)));
                 continue;
         }
         
         if ((totalSize-headerSize) < minExtSize) {
-            LOGW("Bad XML block: header type 0x%x in node at 0x%x has size %d, need %d\n",
+            ALOGW("Bad XML block: header type 0x%x in node at 0x%x has size %d, need %d\n",
                  (int)dtohs(next->header.type),
                  (int)(((const uint8_t*)next)-((const uint8_t*)mTree.mHeader)),
                  (int)(totalSize-headerSize), (int)minExtSize);
@@ -1164,7 +1164,7 @@
     : ResXMLParser(*this)
     , mError(NO_INIT), mOwnedData(NULL)
 {
-    //LOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1);
+    //ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1);
     restart();
 }
 
@@ -1172,13 +1172,13 @@
     : ResXMLParser(*this)
     , mError(NO_INIT), mOwnedData(NULL)
 {
-    //LOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1);
+    //ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1);
     setTo(data, size, copyData);
 }
 
 ResXMLTree::~ResXMLTree()
 {
-    //LOGI("Destroying ResXMLTree in %p #%d\n", this, android_atomic_dec(&gCount)-1);
+    //ALOGI("Destroying ResXMLTree in %p #%d\n", this, android_atomic_dec(&gCount)-1);
     uninit();
 }
 
@@ -1199,7 +1199,7 @@
     mHeader = (const ResXMLTree_header*)data;
     mSize = dtohl(mHeader->header.size);
     if (dtohs(mHeader->header.headerSize) > mSize || mSize > size) {
-        LOGW("Bad XML block: header size %d or total size %d is larger than data size %d\n",
+        ALOGW("Bad XML block: header size %d or total size %d is larger than data size %d\n",
              (int)dtohs(mHeader->header.headerSize),
              (int)dtohl(mHeader->header.size), (int)size);
         mError = BAD_TYPE;
@@ -1259,7 +1259,7 @@
     }
 
     if (mRootNode == NULL) {
-        LOGW("Bad XML block: no root element node found\n");
+        ALOGW("Bad XML block: no root element node found\n");
         mError = BAD_TYPE;
         goto done;
     }
@@ -1313,12 +1313,12 @@
             if ((dtohs(attrExt->attributeStart)+attrSize) <= (size-headerSize)) {
                 return NO_ERROR;
             }
-            LOGW("Bad XML block: node attributes use 0x%x bytes, only have 0x%x bytes\n",
+            ALOGW("Bad XML block: node attributes use 0x%x bytes, only have 0x%x bytes\n",
                     (unsigned int)(dtohs(attrExt->attributeStart)+attrSize),
                     (unsigned int)(size-headerSize));
         }
         else {
-            LOGW("Bad XML start block: node header size 0x%x, size 0x%x\n",
+            ALOGW("Bad XML start block: node header size 0x%x, size 0x%x\n",
                 (unsigned int)headerSize, (unsigned int)size);
         }
         return BAD_TYPE;
@@ -1342,21 +1342,21 @@
                         <= (size-headerSize)) {
                     return NO_ERROR;
                 }
-                LOGW("Bad XML block: node attributes use 0x%x bytes, only have 0x%x bytes\n",
+                ALOGW("Bad XML block: node attributes use 0x%x bytes, only have 0x%x bytes\n",
                         ((int)dtohs(node->attributeSize))*dtohs(node->attributeCount),
                         (int)(size-headerSize));
                 return BAD_TYPE;
             }
-            LOGW("Bad XML block: node at 0x%x extends beyond data end 0x%x\n",
+            ALOGW("Bad XML block: node at 0x%x extends beyond data end 0x%x\n",
                     (int)(((const uint8_t*)node)-((const uint8_t*)mHeader)), (int)mSize);
             return BAD_TYPE;
         }
-        LOGW("Bad XML block: node at 0x%x header size 0x%x smaller than total size 0x%x\n",
+        ALOGW("Bad XML block: node at 0x%x header size 0x%x smaller than total size 0x%x\n",
                 (int)(((const uint8_t*)node)-((const uint8_t*)mHeader)),
                 (int)headerSize, (int)size);
         return BAD_TYPE;
     }
-    LOGW("Bad XML block: node at 0x%x header size 0x%x too small\n",
+    ALOGW("Bad XML block: node at 0x%x header size 0x%x too small\n",
             (int)(((const uint8_t*)node)-((const uint8_t*)mHeader)),
             (int)headerSize);
     return BAD_TYPE;
@@ -1574,7 +1574,7 @@
         if (curPackage != p) {
             const ssize_t pidx = mTable.getResourcePackageIndex(attrRes);
             if (pidx < 0) {
-                LOGE("Style contains key with bad package: 0x%08x\n", attrRes);
+                ALOGE("Style contains key with bad package: 0x%08x\n", attrRes);
                 bag++;
                 continue;
             }
@@ -1594,7 +1594,7 @@
         }
         if (curType != t) {
             if (t >= curPI->numTypes) {
-                LOGE("Style contains key with bad type: 0x%08x\n", attrRes);
+                ALOGE("Style contains key with bad type: 0x%08x\n", attrRes);
                 bag++;
                 continue;
             }
@@ -1612,7 +1612,7 @@
             numEntries = curPI->types[t].numEntries;
         }
         if (e >= numEntries) {
-            LOGE("Style contains key with bad entry: 0x%08x\n", attrRes);
+            ALOGE("Style contains key with bad entry: 0x%08x\n", attrRes);
             bag++;
             continue;
         }
@@ -1631,7 +1631,7 @@
 
     mTable.unlock();
 
-    //LOGI("Applying style 0x%08x (force=%d)  theme %p...\n", resID, force, this);
+    //ALOGI("Applying style 0x%08x (force=%d)  theme %p...\n", resID, force, this);
     //dumpToLog();
     
     return NO_ERROR;
@@ -1639,7 +1639,7 @@
 
 status_t ResTable::Theme::setTo(const Theme& other)
 {
-    //LOGI("Setting theme %p from theme %p...\n", this, &other);
+    //ALOGI("Setting theme %p from theme %p...\n", this, &other);
     //dumpToLog();
     //other.dumpToLog();
     
@@ -1670,7 +1670,7 @@
         }
     }
 
-    //LOGI("Final theme:");
+    //ALOGI("Final theme:");
     //dumpToLog();
     
     return NO_ERROR;
@@ -1712,7 +1712,7 @@
                                 resID = te.value.data;
                                 continue;
                             }
-                            LOGW("Too many attribute references, stopped at: 0x%08x\n", resID);
+                            ALOGW("Too many attribute references, stopped at: 0x%08x\n", resID);
                             return BAD_INDEX;
                         } else if (type != Res_value::TYPE_NULL) {
                             *outValue = te.value;
@@ -1752,21 +1752,21 @@
 
 void ResTable::Theme::dumpToLog() const
 {
-    LOGI("Theme %p:\n", this);
+    ALOGI("Theme %p:\n", this);
     for (size_t i=0; i<Res_MAXPACKAGE; i++) {
         package_info* pi = mPackages[i];
         if (pi == NULL) continue;
         
-        LOGI("  Package #0x%02x:\n", (int)(i+1));
+        ALOGI("  Package #0x%02x:\n", (int)(i+1));
         for (size_t j=0; j<pi->numTypes; j++) {
             type_info& ti = pi->types[j];
             if (ti.numEntries == 0) continue;
             
-            LOGI("    Type #0x%02x:\n", (int)(j+1));
+            ALOGI("    Type #0x%02x:\n", (int)(j+1));
             for (size_t k=0; k<ti.numEntries; k++) {
                 theme_entry& te = ti.entries[k];
                 if (te.value.dataType == Res_value::TYPE_NULL) continue;
-                LOGI("      0x%08x: t=0x%x, d=0x%08x (block=%d)\n",
+                ALOGI("      0x%08x: t=0x%x, d=0x%08x (block=%d)\n",
                      (int)Res_MAKEID(i, j, k),
                      te.value.dataType, (int)te.value.data, (int)te.stringBlock);
             }
@@ -1779,7 +1779,7 @@
 {
     memset(&mParams, 0, sizeof(mParams));
     memset(mPackageMap, 0, sizeof(mPackageMap));
-    //LOGI("Creating ResTable %p\n", this);
+    //ALOGI("Creating ResTable %p\n", this);
 }
 
 ResTable::ResTable(const void* data, size_t size, void* cookie, bool copyData)
@@ -1789,12 +1789,12 @@
     memset(mPackageMap, 0, sizeof(mPackageMap));
     add(data, size, cookie, copyData);
     LOG_FATAL_IF(mError != NO_ERROR, "Error parsing resource table");
-    //LOGI("Creating ResTable %p\n", this);
+    //ALOGI("Creating ResTable %p\n", this);
 }
 
 ResTable::~ResTable()
 {
-    //LOGI("Destroying ResTable in %p\n", this);
+    //ALOGI("Destroying ResTable in %p\n", this);
     uninit();
 }
 
@@ -1813,7 +1813,7 @@
 {
     const void* data = asset->getBuffer(true);
     if (data == NULL) {
-        LOGW("Unable to get buffer of resource asset file");
+        ALOGW("Unable to get buffer of resource asset file");
         return UNKNOWN_ERROR;
     }
     size_t size = (size_t)asset->getLength();
@@ -1881,20 +1881,20 @@
 
     header->header = (const ResTable_header*)data;
     header->size = dtohl(header->header->header.size);
-    //LOGI("Got size 0x%x, again size 0x%x, raw size 0x%x\n", header->size,
+    //ALOGI("Got size 0x%x, again size 0x%x, raw size 0x%x\n", header->size,
     //     dtohl(header->header->header.size), header->header->header.size);
     LOAD_TABLE_NOISY(LOGV("Loading ResTable @%p:\n", header->header));
     LOAD_TABLE_NOISY(printHexData(2, header->header, header->size < 256 ? header->size : 256,
                                   16, 16, 0, false, printToLogFunc));
     if (dtohs(header->header->header.headerSize) > header->size
             || header->size > size) {
-        LOGW("Bad resource table: header size 0x%x or total size 0x%x is larger than data size 0x%x\n",
+        ALOGW("Bad resource table: header size 0x%x or total size 0x%x is larger than data size 0x%x\n",
              (int)dtohs(header->header->header.headerSize),
              (int)header->size, (int)size);
         return (mError=BAD_TYPE);
     }
     if (((dtohs(header->header->header.headerSize)|header->size)&0x3) != 0) {
-        LOGW("Bad resource table: header size 0x%x or total size 0x%x is not on an integer boundary\n",
+        ALOGW("Bad resource table: header size 0x%x or total size 0x%x is not on an integer boundary\n",
              (int)dtohs(header->header->header.headerSize),
              (int)header->size);
         return (mError=BAD_TYPE);
@@ -1927,11 +1927,11 @@
                     return (mError=err);
                 }
             } else {
-                LOGW("Multiple string chunks found in resource table.");
+                ALOGW("Multiple string chunks found in resource table.");
             }
         } else if (ctype == RES_TABLE_PACKAGE_TYPE) {
             if (curPackage >= dtohl(header->header->packageCount)) {
-                LOGW("More package chunks were found than the %d declared in the header.",
+                ALOGW("More package chunks were found than the %d declared in the header.",
                      dtohl(header->header->packageCount));
                 return (mError=BAD_TYPE);
             }
@@ -1949,7 +1949,7 @@
             }
             curPackage++;
         } else {
-            LOGW("Unknown chunk type %p in table at %p.\n",
+            ALOGW("Unknown chunk type %p in table at %p.\n",
                  (void*)(int)(ctype),
                  (void*)(((const uint8_t*)chunk) - ((const uint8_t*)header->header)));
         }
@@ -1958,13 +1958,13 @@
     }
 
     if (curPackage < dtohl(header->header->packageCount)) {
-        LOGW("Fewer package chunks (%d) were found than the %d declared in the header.",
+        ALOGW("Fewer package chunks (%d) were found than the %d declared in the header.",
              (int)curPackage, dtohl(header->header->packageCount));
         return (mError=BAD_TYPE);
     }
     mError = header->values.getError();
     if (mError != NO_ERROR) {
-        LOGW("No string values found in resource table!");
+        ALOGW("No string values found in resource table!");
     }
 
     TABLE_NOISY(LOGV("Returning from add with mError=%d\n", mError));
@@ -2011,20 +2011,20 @@
 
     if (p < 0) {
         if (Res_GETPACKAGE(resID)+1 == 0) {
-            LOGW("No package identifier when getting name for resource number 0x%08x", resID);
+            ALOGW("No package identifier when getting name for resource number 0x%08x", resID);
         } else {
-            LOGW("No known package when getting name for resource number 0x%08x", resID);
+            ALOGW("No known package when getting name for resource number 0x%08x", resID);
         }
         return false;
     }
     if (t < 0) {
-        LOGW("No type identifier when getting name for resource number 0x%08x", resID);
+        ALOGW("No type identifier when getting name for resource number 0x%08x", resID);
         return false;
     }
 
     const PackageGroup* const grp = mPackageGroups[p];
     if (grp == NULL) {
-        LOGW("Bad identifier when getting name for resource number 0x%08x", resID);
+        ALOGW("Bad identifier when getting name for resource number 0x%08x", resID);
         return false;
     }
     if (grp->packages.size() > 0) {
@@ -2067,14 +2067,14 @@
 
     if (p < 0) {
         if (Res_GETPACKAGE(resID)+1 == 0) {
-            LOGW("No package identifier when getting value for resource number 0x%08x", resID);
+            ALOGW("No package identifier when getting value for resource number 0x%08x", resID);
         } else {
-            LOGW("No known package when getting value for resource number 0x%08x", resID);
+            ALOGW("No known package when getting value for resource number 0x%08x", resID);
         }
         return BAD_INDEX;
     }
     if (t < 0) {
-        LOGW("No type identifier when getting value for resource number 0x%08x", resID);
+        ALOGW("No type identifier when getting value for resource number 0x%08x", resID);
         return BAD_INDEX;
     }
 
@@ -2089,7 +2089,7 @@
     // recently added.
     const PackageGroup* const grp = mPackageGroups[p];
     if (grp == NULL) {
-        LOGW("Bad identifier when getting value for resource number 0x%08x", resID);
+        ALOGW("Bad identifier when getting value for resource number 0x%08x", resID);
         return BAD_INDEX;
     }
 
@@ -2099,7 +2099,7 @@
     if (density > 0) {
         overrideConfig = (ResTable_config*) malloc(sizeof(ResTable_config));
         if (overrideConfig == NULL) {
-            LOGE("Couldn't malloc ResTable_config for overrides: %s", strerror(errno));
+            ALOGE("Couldn't malloc ResTable_config for overrides: %s", strerror(errno));
             return BAD_INDEX;
         }
         memcpy(overrideConfig, &mParams, sizeof(ResTable_config));
@@ -2141,7 +2141,7 @@
             // overlay package did not specify a default.
             // Non-overlay packages are still required to provide a default.
             if (offset < 0 && ip == 0) {
-                LOGW("Failure getting entry for 0x%08x (t=%d e=%d) in package %zd (error %d)\n",
+                ALOGW("Failure getting entry for 0x%08x (t=%d e=%d) in package %zd (error %d)\n",
                         resID, T, E, ip, (int)offset);
                 rc = offset;
                 goto out;
@@ -2151,7 +2151,7 @@
 
         if ((dtohs(entry->flags)&entry->FLAG_COMPLEX) != 0) {
             if (!mayBeBag) {
-                LOGW("Requesting resource %p failed because it is complex\n",
+                ALOGW("Requesting resource %p failed because it is complex\n",
                      (void*)resID);
             }
             continue;
@@ -2161,7 +2161,7 @@
               << HexDump(type, dtohl(type->header.size)) << endl);
 
         if ((size_t)offset > (dtohl(type->header.size)-sizeof(Res_value))) {
-            LOGW("ResTable_item at %d is beyond type chunk data %d",
+            ALOGW("ResTable_item at %d is beyond type chunk data %d",
                  (int)offset, dtohl(type->header.size));
             rc = BAD_TYPE;
             goto out;
@@ -2307,23 +2307,23 @@
     const int e = Res_GETENTRY(resID);
 
     if (p < 0) {
-        LOGW("Invalid package identifier when getting bag for resource number 0x%08x", resID);
+        ALOGW("Invalid package identifier when getting bag for resource number 0x%08x", resID);
         return BAD_INDEX;
     }
     if (t < 0) {
-        LOGW("No type identifier when getting bag for resource number 0x%08x", resID);
+        ALOGW("No type identifier when getting bag for resource number 0x%08x", resID);
         return BAD_INDEX;
     }
 
     //printf("Get bag: id=0x%08x, p=%d, t=%d\n", resID, p, t);
     PackageGroup* const grp = mPackageGroups[p];
     if (grp == NULL) {
-        LOGW("Bad identifier when getting bag for resource number 0x%08x", resID);
+        ALOGW("Bad identifier when getting bag for resource number 0x%08x", resID);
         return false;
     }
 
     if (t >= (int)grp->typeCount) {
-        LOGW("Type identifier 0x%x is larger than type count 0x%x",
+        ALOGW("Type identifier 0x%x is larger than type count 0x%x",
              t+1, (int)grp->typeCount);
         return BAD_INDEX;
     }
@@ -2334,7 +2334,7 @@
 
     const size_t NENTRY = typeConfigs->entryCount;
     if (e >= (int)NENTRY) {
-        LOGW("Entry identifier 0x%x is larger than entry count 0x%x",
+        ALOGW("Entry identifier 0x%x is larger than entry count 0x%x",
              e, (int)typeConfigs->entryCount);
         return BAD_INDEX;
     }
@@ -2350,10 +2350,10 @@
                         *outTypeSpecFlags = set->typeSpecFlags;
                     }
                     *outBag = (bag_entry*)(set+1);
-                    //LOGI("Found existing bag for: %p\n", (void*)resID);
+                    //ALOGI("Found existing bag for: %p\n", (void*)resID);
                     return set->numAttrs;
                 }
-                LOGW("Attempt to retrieve bag 0x%08x which is invalid or in a cycle.",
+                ALOGW("Attempt to retrieve bag 0x%08x which is invalid or in a cycle.",
                      resID);
                 return BAD_INDEX;
             }
@@ -2429,7 +2429,7 @@
         }
 
         if ((dtohs(entry->flags)&entry->FLAG_COMPLEX) == 0) {
-            LOGW("Skipping entry %p in package table %d because it is not complex!\n",
+            ALOGW("Skipping entry %p in package table %d because it is not complex!\n",
                  (void*)resID, (int)ip);
             continue;
         }
@@ -2505,7 +2505,7 @@
             TABLE_NOISY(printf("Now at %p\n", (void*)curOff));
 
             if ((size_t)curOff > (dtohl(type->header.size)-sizeof(ResTable_map))) {
-                LOGW("ResTable_map at %d is beyond type chunk data %d",
+                ALOGW("ResTable_map at %d is beyond type chunk data %d",
                      (int)curOff, dtohl(type->header.size));
                 return BAD_TYPE;
             }
@@ -2676,7 +2676,7 @@
                 && name[6] == '_') {
                 int index = atoi(String8(name + 7, nameLen - 7).string());
                 if (Res_CHECKID(index)) {
-                    LOGW("Array resource index: %d is too large.",
+                    ALOGW("Array resource index: %d is too large.",
                          index);
                     return 0;
                 }
@@ -2792,12 +2792,12 @@
                 offset += typeOffset;
                 
                 if (offset > (dtohl(ty->header.size)-sizeof(ResTable_entry))) {
-                    LOGW("ResTable_entry at %d is beyond type chunk data %d",
+                    ALOGW("ResTable_entry at %d is beyond type chunk data %d",
                          offset, dtohl(ty->header.size));
                     return 0;
                 }
                 if ((offset&0x3) != 0) {
-                    LOGW("ResTable_entry at %d (pkg=%d type=%d ent=%d) is not on an integer boundary when looking for %s:%s/%s",
+                    ALOGW("ResTable_entry at %d (pkg=%d type=%d ent=%d) is not on an integer boundary when looking for %s:%s/%s",
                          (int)offset, (int)group->id, (int)ti+1, (int)i,
                          String8(package, packageLen).string(),
                          String8(type, typeLen).string(),
@@ -2808,7 +2808,7 @@
                 const ResTable_entry* const entry = (const ResTable_entry*)
                     (((const uint8_t*)ty) + offset);
                 if (dtohs(entry->size) < sizeof(*entry)) {
-                    LOGW("ResTable_entry size %d is too small", dtohs(entry->size));
+                    ALOGW("ResTable_entry size %d is too small", dtohs(entry->size));
                     return BAD_TYPE;
                 }
 
@@ -3935,7 +3935,7 @@
     }
 
     if ((size_t)entryIndex >= allTypes->entryCount) {
-        LOGW("getEntry failing because entryIndex %d is beyond type entryCount %d",
+        ALOGW("getEntry failing because entryIndex %d is beyond type entryCount %d",
             entryIndex, (int)allTypes->entryCount);
         return BAD_TYPE;
     }
@@ -4039,12 +4039,12 @@
           << ", offset=" << (void*)offset << endl);
 
     if (offset > (dtohl(type->header.size)-sizeof(ResTable_entry))) {
-        LOGW("ResTable_entry at 0x%x is beyond type chunk data 0x%x",
+        ALOGW("ResTable_entry at 0x%x is beyond type chunk data 0x%x",
              offset, dtohl(type->header.size));
         return BAD_TYPE;
     }
     if ((offset&0x3) != 0) {
-        LOGW("ResTable_entry at 0x%x is not on an integer boundary",
+        ALOGW("ResTable_entry at 0x%x is not on an integer boundary",
              offset);
         return BAD_TYPE;
     }
@@ -4052,7 +4052,7 @@
     const ResTable_entry* const entry = (const ResTable_entry*)
         (((const uint8_t*)type) + offset);
     if (dtohs(entry->size) < sizeof(*entry)) {
-        LOGW("ResTable_entry size 0x%x is too small", dtohs(entry->size));
+        ALOGW("ResTable_entry size 0x%x is too small", dtohs(entry->size));
         return BAD_TYPE;
     }
 
@@ -4077,22 +4077,22 @@
     const size_t pkgSize = dtohl(pkg->header.size);
 
     if (dtohl(pkg->typeStrings) >= pkgSize) {
-        LOGW("ResTable_package type strings at %p are past chunk size %p.",
+        ALOGW("ResTable_package type strings at %p are past chunk size %p.",
              (void*)dtohl(pkg->typeStrings), (void*)pkgSize);
         return (mError=BAD_TYPE);
     }
     if ((dtohl(pkg->typeStrings)&0x3) != 0) {
-        LOGW("ResTable_package type strings at %p is not on an integer boundary.",
+        ALOGW("ResTable_package type strings at %p is not on an integer boundary.",
              (void*)dtohl(pkg->typeStrings));
         return (mError=BAD_TYPE);
     }
     if (dtohl(pkg->keyStrings) >= pkgSize) {
-        LOGW("ResTable_package key strings at %p are past chunk size %p.",
+        ALOGW("ResTable_package key strings at %p are past chunk size %p.",
              (void*)dtohl(pkg->keyStrings), (void*)pkgSize);
         return (mError=BAD_TYPE);
     }
     if ((dtohl(pkg->keyStrings)&0x3) != 0) {
-        LOGW("ResTable_package key strings at %p is not on an integer boundary.",
+        ALOGW("ResTable_package key strings at %p is not on an integer boundary.",
              (void*)dtohl(pkg->keyStrings));
         return (mError=BAD_TYPE);
     }
@@ -4195,7 +4195,7 @@
             if ((dtohl(typeSpec->entryCount) > (INT32_MAX/sizeof(uint32_t))
                     || dtohs(typeSpec->header.headerSize)+(sizeof(uint32_t)*dtohl(typeSpec->entryCount))
                     > typeSpecSize)) {
-                LOGW("ResTable_typeSpec entry index to %p extends beyond chunk end %p.",
+                ALOGW("ResTable_typeSpec entry index to %p extends beyond chunk end %p.",
                      (void*)(dtohs(typeSpec->header.headerSize)
                              +(sizeof(uint32_t)*dtohl(typeSpec->entryCount))),
                      (void*)typeSpecSize);
@@ -4203,7 +4203,7 @@
             }
             
             if (typeSpec->id == 0) {
-                LOGW("ResTable_type has an id of 0.");
+                ALOGW("ResTable_type has an id of 0.");
                 return (mError=BAD_TYPE);
             }
             
@@ -4215,7 +4215,7 @@
                 t = new Type(header, package, dtohl(typeSpec->entryCount));
                 package->types.editItemAt(typeSpec->id-1) = t;
             } else if (dtohl(typeSpec->entryCount) != t->entryCount) {
-                LOGW("ResTable_typeSpec entry count inconsistent: given %d, previously %d",
+                ALOGW("ResTable_typeSpec entry count inconsistent: given %d, previously %d",
                     (int)dtohl(typeSpec->entryCount), (int)t->entryCount);
                 return (mError=BAD_TYPE);
             }
@@ -4240,7 +4240,7 @@
                                     (void*)typeSize));
             if (dtohs(type->header.headerSize)+(sizeof(uint32_t)*dtohl(type->entryCount))
                 > typeSize) {
-                LOGW("ResTable_type entry index to %p extends beyond chunk end %p.",
+                ALOGW("ResTable_type entry index to %p extends beyond chunk end %p.",
                      (void*)(dtohs(type->header.headerSize)
                              +(sizeof(uint32_t)*dtohl(type->entryCount))),
                      (void*)typeSize);
@@ -4248,12 +4248,12 @@
             }
             if (dtohl(type->entryCount) != 0
                 && dtohl(type->entriesStart) > (typeSize-sizeof(ResTable_entry))) {
-                LOGW("ResTable_type entriesStart at %p extends beyond chunk end %p.",
+                ALOGW("ResTable_type entriesStart at %p extends beyond chunk end %p.",
                      (void*)dtohl(type->entriesStart), (void*)typeSize);
                 return (mError=BAD_TYPE);
             }
             if (type->id == 0) {
-                LOGW("ResTable_type has an id of 0.");
+                ALOGW("ResTable_type has an id of 0.");
                 return (mError=BAD_TYPE);
             }
             
@@ -4265,7 +4265,7 @@
                 t = new Type(header, package, dtohl(type->entryCount));
                 package->types.editItemAt(type->id-1) = t;
             } else if (dtohl(type->entryCount) != t->entryCount) {
-                LOGW("ResTable_type entry count inconsistent: given %d, previously %d",
+                ALOGW("ResTable_type entry count inconsistent: given %d, previously %d",
                     (int)dtohl(type->entryCount), (int)t->entryCount);
                 return (mError=BAD_TYPE);
             }
@@ -4273,7 +4273,7 @@
             TABLE_GETENTRY(
                 ResTable_config thisConfig;
                 thisConfig.copyFromDtoH(type->config);
-                LOGI("Adding config to type %d: imsi:%d/%d lang:%c%c cnt:%c%c "
+                ALOGI("Adding config to type %d: imsi:%d/%d lang:%c%c cnt:%c%c "
                      "orien:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d "
                      "swdp:%d wdp:%d hdp:%d\n",
                       type->id,
@@ -4346,7 +4346,7 @@
                 | (0x0000ffff & (entryIndex));
             resource_name resName;
             if (!this->getResourceName(resID, &resName)) {
-                LOGW("idmap: resource 0x%08x has spec but lacks values, skipping\n", resID);
+                ALOGW("idmap: resource 0x%08x has spec but lacks values, skipping\n", resID);
                 continue;
             }
 
diff --git a/libs/utils/Static.cpp b/libs/utils/Static.cpp
index ceca435..bfcb2da 100644
--- a/libs/utils/Static.cpp
+++ b/libs/utils/Static.cpp
@@ -57,8 +57,8 @@
     virtual status_t writeLines(const struct iovec& vec, size_t N)
     {
         //android_writevLog(&vec, N);       <-- this is now a no-op
-        if (N != 1) LOGI("WARNING: writeLines N=%d\n", N);
-        LOGI("%.*s", vec.iov_len, (const char*) vec.iov_base);
+        if (N != 1) ALOGI("WARNING: writeLines N=%d\n", N);
+        ALOGI("%.*s", vec.iov_len, (const char*) vec.iov_base);
         return NO_ERROR;
     }
 };
diff --git a/libs/utils/StreamingZipInflater.cpp b/libs/utils/StreamingZipInflater.cpp
index 59a46f9..8512170a 100644
--- a/libs/utils/StreamingZipInflater.cpp
+++ b/libs/utils/StreamingZipInflater.cpp
@@ -138,7 +138,7 @@
             if (mInflateState.avail_in == 0) {
                 int err = readNextChunk();
                 if (err < 0) {
-                    LOGE("Unable to access asset data: %d", err);
+                    ALOGE("Unable to access asset data: %d", err);
                     if (!mStreamNeedsInit) {
                         ::inflateEnd(&mInflateState);
                         initInflateState();
@@ -165,7 +165,7 @@
             if (result == Z_OK) result = ::inflate(&mInflateState, Z_SYNC_FLUSH);
             if (result < 0) {
                 // Whoops, inflation failed
-                LOGE("Error inflating asset: %d", result);
+                ALOGE("Error inflating asset: %d", result);
                 ::inflateEnd(&mInflateState);
                 initInflateState();
                 return -1;
@@ -195,7 +195,7 @@
             //ALOGV("Reading input chunk, size %08x didread %08x", toRead, didRead);
             if (didRead < 0) {
                 // TODO: error
-                LOGE("Error reading asset data");
+                ALOGE("Error reading asset data");
                 return didRead;
             } else {
                 mInNextChunkOffset += didRead;
diff --git a/libs/utils/String16.cpp b/libs/utils/String16.cpp
index 4ce1664..94e072f 100644
--- a/libs/utils/String16.cpp
+++ b/libs/utils/String16.cpp
@@ -112,7 +112,7 @@
 {
     size_t len = strlen16(o);
     SharedBuffer* buf = SharedBuffer::alloc((len+1)*sizeof(char16_t));
-    LOG_ASSERT(buf, "Unable to allocate shared buffer");
+    ALOG_ASSERT(buf, "Unable to allocate shared buffer");
     if (buf) {
         char16_t* str = (char16_t*)buf->data();
         strcpy16(str, o);
@@ -126,7 +126,7 @@
 String16::String16(const char16_t* o, size_t len)
 {
     SharedBuffer* buf = SharedBuffer::alloc((len+1)*sizeof(char16_t));
-    LOG_ASSERT(buf, "Unable to allocate shared buffer");
+    ALOG_ASSERT(buf, "Unable to allocate shared buffer");
     if (buf) {
         char16_t* str = (char16_t*)buf->data();
         memcpy(str, o, len*sizeof(char16_t));
diff --git a/libs/utils/String8.cpp b/libs/utils/String8.cpp
index 0bc5aff..562f026 100644
--- a/libs/utils/String8.cpp
+++ b/libs/utils/String8.cpp
@@ -80,7 +80,7 @@
 {
     if (len > 0) {
         SharedBuffer* buf = SharedBuffer::alloc(len+1);
-        LOG_ASSERT(buf, "Unable to allocate shared buffer");
+        ALOG_ASSERT(buf, "Unable to allocate shared buffer");
         if (buf) {
             char* str = (char*)buf->data();
             memcpy(str, in, len);
@@ -103,7 +103,7 @@
     }
 
     SharedBuffer* buf = SharedBuffer::alloc(bytes+1);
-    LOG_ASSERT(buf, "Unable to allocate shared buffer");
+    ALOG_ASSERT(buf, "Unable to allocate shared buffer");
     if (!buf) {
         return getEmptyString();
     }
@@ -125,7 +125,7 @@
     }
 
     SharedBuffer* buf = SharedBuffer::alloc(bytes+1);
-    LOG_ASSERT(buf, "Unable to allocate shared buffer");
+    ALOG_ASSERT(buf, "Unable to allocate shared buffer");
     if (!buf) {
         return getEmptyString();
     }
diff --git a/libs/utils/SystemClock.cpp b/libs/utils/SystemClock.cpp
index 89a052f..8b8ac10 100644
--- a/libs/utils/SystemClock.cpp
+++ b/libs/utils/SystemClock.cpp
@@ -69,20 +69,20 @@
 #ifdef HAVE_ANDROID_OS
     fd = open("/dev/alarm", O_RDWR);
     if(fd < 0) {
-        LOGW("Unable to open alarm driver: %s\n", strerror(errno));
+        ALOGW("Unable to open alarm driver: %s\n", strerror(errno));
         return -1;
     }
     ts.tv_sec = tv.tv_sec;
     ts.tv_nsec = tv.tv_usec * 1000;
     res = ioctl(fd, ANDROID_ALARM_SET_RTC, &ts);
     if(res < 0) {
-        LOGW("Unable to set rtc to %ld: %s\n", tv.tv_sec, strerror(errno));
+        ALOGW("Unable to set rtc to %ld: %s\n", tv.tv_sec, strerror(errno));
         ret = -1;
     }
     close(fd);
 #else
     if (settimeofday(&tv, NULL) != 0) {
-        LOGW("Unable to set clock to %d.%d: %s\n",
+        ALOGW("Unable to set clock to %d.%d: %s\n",
             (int) tv.tv_sec, (int) tv.tv_usec, strerror(errno));
         ret = -1;
     }
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index fe4b8e6..e343c62 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -163,7 +163,7 @@
                     (android_pthread_entry)entryFunction, userData);
     pthread_attr_destroy(&attr);
     if (result != 0) {
-        LOGE("androidCreateRawThreadEtc failed (entry=%p, res=%d, errno=%d)\n"
+        ALOGE("androidCreateRawThreadEtc failed (entry=%p, res=%d, errno=%d)\n"
              "(android threadPriority=%d)",
             entryFunction, result, errno, threadPriority);
         return 0;
@@ -870,7 +870,7 @@
 {
     Mutex::Autolock _l(mLock);
     if (mThread == getThreadId()) {
-        LOGW(
+        ALOGW(
         "Thread (this=%p): don't call waitForExit() from this "
         "Thread object's thread. It's a guaranteed deadlock!",
         this);
@@ -894,7 +894,7 @@
 {
     Mutex::Autolock _l(mLock);
     if (mThread == getThreadId()) {
-        LOGW(
+        ALOGW(
         "Thread (this=%p): don't call join() from this "
         "Thread object's thread. It's a guaranteed deadlock!",
         this);
diff --git a/libs/utils/Tokenizer.cpp b/libs/utils/Tokenizer.cpp
index 68752b4..efda2bf 100644
--- a/libs/utils/Tokenizer.cpp
+++ b/libs/utils/Tokenizer.cpp
@@ -55,12 +55,12 @@
     int fd = ::open(filename.string(), O_RDONLY);
     if (fd < 0) {
         result = -errno;
-        LOGE("Error opening file '%s', %s.", filename.string(), strerror(errno));
+        ALOGE("Error opening file '%s', %s.", filename.string(), strerror(errno));
     } else {
         struct stat stat;
         if (fstat(fd, &stat)) {
             result = -errno;
-            LOGE("Error getting size of file '%s', %s.", filename.string(), strerror(errno));
+            ALOGE("Error getting size of file '%s', %s.", filename.string(), strerror(errno));
         } else {
             size_t length = size_t(stat.st_size);
 
@@ -80,7 +80,7 @@
                 ssize_t nrd = read(fd, buffer, length);
                 if (nrd < 0) {
                     result = -errno;
-                    LOGE("Error reading file '%s', %s.", filename.string(), strerror(errno));
+                    ALOGE("Error reading file '%s', %s.", filename.string(), strerror(errno));
                     delete[] buffer;
                     buffer = NULL;
                 } else {
diff --git a/libs/utils/VectorImpl.cpp b/libs/utils/VectorImpl.cpp
index 4a9029671..220ae3e 100644
--- a/libs/utils/VectorImpl.cpp
+++ b/libs/utils/VectorImpl.cpp
@@ -56,7 +56,7 @@
 
 VectorImpl::~VectorImpl()
 {
-    LOG_ASSERT(!mCount,
+    ALOG_ASSERT(!mCount,
         "[%p] "
         "subclasses of VectorImpl must call finish_vector()"
         " in their destructor. Leaking %d bytes.",
@@ -66,7 +66,7 @@
 
 VectorImpl& VectorImpl::operator = (const VectorImpl& rhs)
 {
-    LOG_ASSERT(mItemSize == rhs.mItemSize,
+    ALOG_ASSERT(mItemSize == rhs.mItemSize,
         "Vector<> have different types (this=%p, rhs=%p)", this, &rhs);
     if (this != &rhs) {
         release_storage();
@@ -248,7 +248,7 @@
 
 ssize_t VectorImpl::replaceAt(const void* prototype, size_t index)
 {
-    LOG_ASSERT(index<size(),
+    ALOG_ASSERT(index<size(),
         "[%p] replace: index=%d, size=%d", this, (int)index, (int)size());
 
     void* item = editItemLocation(index);
@@ -267,7 +267,7 @@
 
 ssize_t VectorImpl::removeItemsAt(size_t index, size_t count)
 {
-    LOG_ASSERT((index+count)<=size(),
+    ALOG_ASSERT((index+count)<=size(),
         "[%p] remove: index=%d, count=%d, size=%d",
                this, (int)index, (int)count, (int)size());
 
@@ -291,7 +291,7 @@
 
 void* VectorImpl::editItemLocation(size_t index)
 {
-    LOG_ASSERT(index<capacity(),
+    ALOG_ASSERT(index<capacity(),
         "[%p] editItemLocation: index=%d, capacity=%d, count=%d",
         this, (int)index, (int)capacity(), (int)mCount);
             
@@ -303,7 +303,7 @@
 
 const void* VectorImpl::itemLocation(size_t index) const
 {
-    LOG_ASSERT(index<capacity(),
+    ALOG_ASSERT(index<capacity(),
         "[%p] itemLocation: index=%d, capacity=%d, count=%d",
         this, (int)index, (int)capacity(), (int)mCount);
 
@@ -349,7 +349,7 @@
 //    ALOGV("_grow(this=%p, where=%d, amount=%d) count=%d, capacity=%d",
 //        this, (int)where, (int)amount, (int)mCount, (int)capacity());
 
-    LOG_ASSERT(where <= mCount,
+    ALOG_ASSERT(where <= mCount,
             "[%p] _grow: where=%d, amount=%d, count=%d",
             this, (int)where, (int)amount, (int)mCount); // caller already checked
 
@@ -402,7 +402,7 @@
 //    ALOGV("_shrink(this=%p, where=%d, amount=%d) count=%d, capacity=%d",
 //        this, (int)where, (int)amount, (int)mCount, (int)capacity());
 
-    LOG_ASSERT(where + amount <= mCount,
+    ALOG_ASSERT(where + amount <= mCount,
             "[%p] _shrink: where=%d, amount=%d, count=%d",
             this, (int)where, (int)amount, (int)mCount); // caller already checked
 
diff --git a/libs/utils/ZipFileRO.cpp b/libs/utils/ZipFileRO.cpp
index 3069352..1498aac 100644
--- a/libs/utils/ZipFileRO.cpp
+++ b/libs/utils/ZipFileRO.cpp
@@ -120,7 +120,7 @@
 {
     long ent = ((long) entry) - kZipEntryAdj;
     if (ent < 0 || ent >= mHashTableSize || mHashTable[ent].name == NULL) {
-        LOGW("Invalid ZipEntryRO %p (%ld)\n", entry, ent);
+        ALOGW("Invalid ZipEntryRO %p (%ld)\n", entry, ent);
         return -1;
     }
     return ent;
@@ -142,7 +142,7 @@
      */
     fd = ::open(zipFileName, O_RDONLY | O_BINARY);
     if (fd < 0) {
-        LOGW("Unable to open zip '%s': %s\n", zipFileName, strerror(errno));
+        ALOGW("Unable to open zip '%s': %s\n", zipFileName, strerror(errno));
         return NAME_NOT_FOUND;
     }
 
@@ -194,7 +194,7 @@
 
     unsigned char* scanBuf = (unsigned char*) malloc(readAmount);
     if (scanBuf == NULL) {
-        LOGW("couldn't allocate scanBuf: %s", strerror(errno));
+        ALOGW("couldn't allocate scanBuf: %s", strerror(errno));
         free(scanBuf);
         return false;
     }
@@ -203,14 +203,14 @@
      * Make sure this is a Zip archive.
      */
     if (lseek64(mFd, 0, SEEK_SET) != 0) {
-        LOGW("seek to start failed: %s", strerror(errno));
+        ALOGW("seek to start failed: %s", strerror(errno));
         free(scanBuf);
         return false;
     }
 
     ssize_t actual = TEMP_FAILURE_RETRY(read(mFd, scanBuf, sizeof(int32_t)));
     if (actual != (ssize_t) sizeof(int32_t)) {
-        LOGI("couldn't read first signature from zip archive: %s", strerror(errno));
+        ALOGI("couldn't read first signature from zip archive: %s", strerror(errno));
         free(scanBuf);
         return false;
     }
@@ -218,7 +218,7 @@
     {
         unsigned int header = get4LE(scanBuf);
         if (header == kEOCDSignature) {
-            LOGI("Found Zip archive, but it looks empty\n");
+            ALOGI("Found Zip archive, but it looks empty\n");
             free(scanBuf);
             return false;
         } else if (header != kLFHSignature) {
@@ -243,13 +243,13 @@
     off64_t searchStart = mFileLength - readAmount;
 
     if (lseek64(mFd, searchStart, SEEK_SET) != searchStart) {
-        LOGW("seek %ld failed: %s\n",  (long) searchStart, strerror(errno));
+        ALOGW("seek %ld failed: %s\n",  (long) searchStart, strerror(errno));
         free(scanBuf);
         return false;
     }
     actual = TEMP_FAILURE_RETRY(read(mFd, scanBuf, readAmount));
     if (actual != (ssize_t) readAmount) {
-        LOGW("Zip: read " ZD ", expected " ZD ". Failed: %s\n",
+        ALOGW("Zip: read " ZD ", expected " ZD ". Failed: %s\n",
             (ZD_TYPE) actual, (ZD_TYPE) readAmount, strerror(errno));
         free(scanBuf);
         return false;
@@ -290,12 +290,12 @@
 
     // Verify that they look reasonable.
     if ((long long) dirOffset + (long long) dirSize > (long long) eocdOffset) {
-        LOGW("bad offsets (dir %ld, size %u, eocd %ld)\n",
+        ALOGW("bad offsets (dir %ld, size %u, eocd %ld)\n",
             (long) dirOffset, dirSize, (long) eocdOffset);
         return false;
     }
     if (numEntries == 0) {
-        LOGW("empty archive?\n");
+        ALOGW("empty archive?\n");
         return false;
     }
 
@@ -304,12 +304,12 @@
 
     mDirectoryMap = new FileMap();
     if (mDirectoryMap == NULL) {
-        LOGW("Unable to create directory map: %s", strerror(errno));
+        ALOGW("Unable to create directory map: %s", strerror(errno));
         return false;
     }
 
     if (!mDirectoryMap->create(mFileName, mFd, dirOffset, dirSize, true)) {
-        LOGW("Unable to map '%s' (" ZD " to " ZD "): %s\n", mFileName,
+        ALOGW("Unable to map '%s' (" ZD " to " ZD "): %s\n", mFileName,
                 (ZD_TYPE) dirOffset, (ZD_TYPE) (dirOffset + dirSize), strerror(errno));
         return false;
     }
@@ -341,17 +341,17 @@
     const unsigned char* ptr = cdPtr;
     for (int i = 0; i < numEntries; i++) {
         if (get4LE(ptr) != kCDESignature) {
-            LOGW("Missed a central dir sig (at %d)\n", i);
+            ALOGW("Missed a central dir sig (at %d)\n", i);
             goto bail;
         }
         if (ptr + kCDELen > cdPtr + cdLength) {
-            LOGW("Ran off the end (at %d)\n", i);
+            ALOGW("Ran off the end (at %d)\n", i);
             goto bail;
         }
 
         long localHdrOffset = (long) get4LE(ptr + kCDELocalOffset);
         if (localHdrOffset >= mDirectoryOffset) {
-            LOGW("bad LFH offset %ld at entry %d\n", localHdrOffset, i);
+            ALOGW("bad LFH offset %ld at entry %d\n", localHdrOffset, i);
             goto bail;
         }
 
@@ -367,7 +367,7 @@
 
         ptr += kCDELen + fileNameLen + extraLen + commentLen;
         if ((size_t)(ptr - cdPtr) > cdLength) {
-            LOGW("bad CD advance (%d vs " ZD ") at entry %d\n",
+            ALOGW("bad CD advance (%d vs " ZD ") at entry %d\n",
                 (int) (ptr - cdPtr), (ZD_TYPE) cdLength, i);
             goto bail;
         }
@@ -452,7 +452,7 @@
 ZipEntryRO ZipFileRO::findEntryByIndex(int idx) const
 {
     if (idx < 0 || idx >= mNumEntries) {
-        LOGW("Invalid index %d\n", idx);
+        ALOGW("Invalid index %d\n", idx);
         return NULL;
     }
 
@@ -527,7 +527,7 @@
     if (pOffset != NULL) {
         long localHdrOffset = get4LE(ptr + kCDELocalOffset);
         if (localHdrOffset + kLFHLen >= cdOffset) {
-            LOGE("ERROR: bad local hdr offset in zip\n");
+            ALOGE("ERROR: bad local hdr offset in zip\n");
             return false;
         }
 
@@ -544,12 +544,12 @@
                 TEMP_FAILURE_RETRY(pread64(mFd, lfhBuf, sizeof(lfhBuf), localHdrOffset));
 
         if (actual != sizeof(lfhBuf)) {
-            LOGW("failed reading lfh from offset %ld\n", localHdrOffset);
+            ALOGW("failed reading lfh from offset %ld\n", localHdrOffset);
             return false;
         }
 
         if (get4LE(lfhBuf) != kLFHSignature) {
-            LOGW("didn't find signature at start of lfh; wanted: offset=%ld data=0x%08x; "
+            ALOGW("didn't find signature at start of lfh; wanted: offset=%ld data=0x%08x; "
                     "got: data=0x%08lx\n",
                     localHdrOffset, kLFHSignature, get4LE(lfhBuf));
             return false;
@@ -567,20 +567,20 @@
             AutoMutex _l(mFdLock);
 
             if (lseek64(mFd, localHdrOffset, SEEK_SET) != localHdrOffset) {
-                LOGW("failed seeking to lfh at offset %ld\n", localHdrOffset);
+                ALOGW("failed seeking to lfh at offset %ld\n", localHdrOffset);
                 return false;
             }
 
             ssize_t actual =
                     TEMP_FAILURE_RETRY(read(mFd, lfhBuf, sizeof(lfhBuf)));
             if (actual != sizeof(lfhBuf)) {
-                LOGW("failed reading lfh from offset %ld\n", localHdrOffset);
+                ALOGW("failed reading lfh from offset %ld\n", localHdrOffset);
                 return false;
             }
 
             if (get4LE(lfhBuf) != kLFHSignature) {
                 off64_t actualOffset = lseek64(mFd, 0, SEEK_CUR);
-                LOGW("didn't find signature at start of lfh; wanted: offset=%ld data=0x%08x; "
+                ALOGW("didn't find signature at start of lfh; wanted: offset=%ld data=0x%08x; "
                         "got: offset=" ZD " data=0x%08lx\n",
                         localHdrOffset, kLFHSignature, (ZD_TYPE) actualOffset, get4LE(lfhBuf));
                 return false;
@@ -591,13 +591,13 @@
         off64_t dataOffset = localHdrOffset + kLFHLen
             + get2LE(lfhBuf + kLFHNameLen) + get2LE(lfhBuf + kLFHExtraLen);
         if (dataOffset >= cdOffset) {
-            LOGW("bad data offset %ld in zip\n", (long) dataOffset);
+            ALOGW("bad data offset %ld in zip\n", (long) dataOffset);
             return false;
         }
 
         /* check lengths */
         if ((off64_t)(dataOffset + compLen) > cdOffset) {
-            LOGW("bad compressed length in zip (%ld + " ZD " > %ld)\n",
+            ALOGW("bad compressed length in zip (%ld + " ZD " > %ld)\n",
                 (long) dataOffset, (ZD_TYPE) compLen, (long) cdOffset);
             return false;
         }
@@ -605,7 +605,7 @@
         if (method == kCompressStored &&
             (off64_t)(dataOffset + uncompLen) > cdOffset)
         {
-            LOGE("ERROR: bad uncompressed length in zip (%ld + " ZD " > %ld)\n",
+            ALOGE("ERROR: bad uncompressed length in zip (%ld + " ZD " > %ld)\n",
                 (long) dataOffset, (ZD_TYPE) uncompLen, (long) cdOffset);
             return false;
         }
@@ -754,14 +754,14 @@
     if (method == kCompressStored) {
         ssize_t actual = write(fd, ptr, uncompLen);
         if (actual < 0) {
-            LOGE("Write failed: %s\n", strerror(errno));
+            ALOGE("Write failed: %s\n", strerror(errno));
             goto unmap;
         } else if ((size_t) actual != uncompLen) {
-            LOGE("Partial write during uncompress (" ZD " of " ZD ")\n",
+            ALOGE("Partial write during uncompress (" ZD " of " ZD ")\n",
                 (ZD_TYPE) actual, (ZD_TYPE) uncompLen);
             goto unmap;
         } else {
-            LOGI("+++ successful write\n");
+            ALOGI("+++ successful write\n");
         }
     } else {
         if (!inflateBuffer(fd, ptr, uncompLen, compLen))
@@ -806,10 +806,10 @@
     zerr = inflateInit2(&zstream, -MAX_WBITS);
     if (zerr != Z_OK) {
         if (zerr == Z_VERSION_ERROR) {
-            LOGE("Installed zlib is not compatible with linked version (%s)\n",
+            ALOGE("Installed zlib is not compatible with linked version (%s)\n",
                 ZLIB_VERSION);
         } else {
-            LOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
+            ALOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
         }
         goto bail;
     }
@@ -819,7 +819,7 @@
      */
     zerr = inflate(&zstream, Z_FINISH);
     if (zerr != Z_STREAM_END) {
-        LOGW("Zip inflate failed, zerr=%d (nIn=%p aIn=%u nOut=%p aOut=%u)\n",
+        ALOGW("Zip inflate failed, zerr=%d (nIn=%p aIn=%u nOut=%p aOut=%u)\n",
             zerr, zstream.next_in, zstream.avail_in,
             zstream.next_out, zstream.avail_out);
         goto z_bail;
@@ -827,7 +827,7 @@
 
     /* paranoia */
     if (zstream.total_out != uncompLen) {
-        LOGW("Size mismatch on inflated file (%ld vs " ZD ")\n",
+        ALOGW("Size mismatch on inflated file (%ld vs " ZD ")\n",
             zstream.total_out, (ZD_TYPE) uncompLen);
         goto z_bail;
     }
@@ -873,10 +873,10 @@
     zerr = inflateInit2(&zstream, -MAX_WBITS);
     if (zerr != Z_OK) {
         if (zerr == Z_VERSION_ERROR) {
-            LOGE("Installed zlib is not compatible with linked version (%s)\n",
+            ALOGE("Installed zlib is not compatible with linked version (%s)\n",
                 ZLIB_VERSION);
         } else {
-            LOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
+            ALOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
         }
         goto bail;
     }
@@ -890,7 +890,7 @@
          */
         zerr = inflate(&zstream, Z_NO_FLUSH);
         if (zerr != Z_OK && zerr != Z_STREAM_END) {
-            LOGW("zlib inflate: zerr=%d (nIn=%p aIn=%u nOut=%p aOut=%u)\n",
+            ALOGW("zlib inflate: zerr=%d (nIn=%p aIn=%u nOut=%p aOut=%u)\n",
                 zerr, zstream.next_in, zstream.avail_in,
                 zstream.next_out, zstream.avail_out);
             goto z_bail;
@@ -903,7 +903,7 @@
             long writeSize = zstream.next_out - writeBuf;
             int cc = write(fd, writeBuf, writeSize);
             if (cc != (int) writeSize) {
-                LOGW("write failed in inflate (%d vs %ld)\n", cc, writeSize);
+                ALOGW("write failed in inflate (%d vs %ld)\n", cc, writeSize);
                 goto z_bail;
             }
 
@@ -916,7 +916,7 @@
 
     /* paranoia */
     if (zstream.total_out != uncompLen) {
-        LOGW("Size mismatch on inflated file (%ld vs " ZD ")\n",
+        ALOGW("Size mismatch on inflated file (%ld vs " ZD ")\n",
             zstream.total_out, (ZD_TYPE) uncompLen);
         goto z_bail;
     }
diff --git a/libs/utils/ZipUtils.cpp b/libs/utils/ZipUtils.cpp
index cc5c68a..2dbdc1d 100644
--- a/libs/utils/ZipUtils.cpp
+++ b/libs/utils/ZipUtils.cpp
@@ -77,10 +77,10 @@
     zerr = inflateInit2(&zstream, -MAX_WBITS);
     if (zerr != Z_OK) {
         if (zerr == Z_VERSION_ERROR) {
-            LOGE("Installed zlib is not compatible with linked version (%s)\n",
+            ALOGE("Installed zlib is not compatible with linked version (%s)\n",
                 ZLIB_VERSION);
         } else {
-            LOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
+            ALOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
         }
         goto bail;
     }
@@ -124,7 +124,7 @@
     assert(zerr == Z_STREAM_END);       /* other errors should've been caught */
 
     if ((long) zstream.total_out != uncompressedLen) {
-        LOGW("Size mismatch on inflated file (%ld vs %ld)\n",
+        ALOGW("Size mismatch on inflated file (%ld vs %ld)\n",
             zstream.total_out, uncompressedLen);
         goto z_bail;
     }
@@ -189,10 +189,10 @@
     zerr = inflateInit2(&zstream, -MAX_WBITS);
     if (zerr != Z_OK) {
         if (zerr == Z_VERSION_ERROR) {
-            LOGE("Installed zlib is not compatible with linked version (%s)\n",
+            ALOGE("Installed zlib is not compatible with linked version (%s)\n",
                 ZLIB_VERSION);
         } else {
-            LOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
+            ALOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
         }
         goto bail;
     }
@@ -236,7 +236,7 @@
     assert(zerr == Z_STREAM_END);       /* other errors should've been caught */
 
     if ((long) zstream.total_out != uncompressedLen) {
-        LOGW("Size mismatch on inflated file (%ld vs %ld)\n",
+        ALOGW("Size mismatch on inflated file (%ld vs %ld)\n",
             zstream.total_out, uncompressedLen);
         goto z_bail;
     }
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
index 8990fe5..49f498e 100644
--- a/media/java/android/media/AudioFormat.java
+++ b/media/java/android/media/AudioFormat.java
@@ -31,10 +31,11 @@
     public static final int ENCODING_INVALID = 0;
     /** Default audio data format */
     public static final int ENCODING_DEFAULT = 1;
+    // These two values must be kept in sync with JNI code for AudioTrack, AudioRecord
     /** Audio data format: PCM 16 bit per sample. Guaranteed to be supported by devices. */
-    public static final int ENCODING_PCM_16BIT = 2; // accessed by native code
+    public static final int ENCODING_PCM_16BIT = 2;
     /** Audio data format: PCM 8 bit per sample. Not guaranteed to be supported by devices. */
-    public static final int ENCODING_PCM_8BIT = 3;  // accessed by native code
+    public static final int ENCODING_PCM_8BIT = 3;
 
     /** Invalid audio channel configuration */
     /** @deprecated use CHANNEL_INVALID instead  */
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 093b108..72876d7 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -145,7 +145,8 @@
     private SettingsObserver mSettingsObserver;
 
     private int mMode;
-    private Object mSettingsLock = new Object();
+    // protects mRingerMode
+    private final Object mSettingsLock = new Object();
     private boolean mMediaServerOk;
 
     private SoundPool mSoundPool;
@@ -236,6 +237,7 @@
      * {@link AudioManager#RINGER_MODE_SILENT}, or
      * {@link AudioManager#RINGER_MODE_VIBRATE}.
      */
+    // protected by mSettingsLock
     private int mRingerMode;
 
     /** @see System#MODE_RINGER_STREAMS_AFFECTED */
@@ -442,12 +444,15 @@
     private void readPersistedSettings() {
         final ContentResolver cr = mContentResolver;
 
-        mRingerMode = System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
+        int ringerMode = System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
         // sanity check in case the settings are restored from a device with incompatible
         // ringer modes
-        if (!AudioManager.isValidRingerMode(mRingerMode)) {
-            mRingerMode = AudioManager.RINGER_MODE_NORMAL;
-            System.putInt(cr, System.MODE_RINGER, mRingerMode);
+        if (!AudioManager.isValidRingerMode(ringerMode)) {
+            ringerMode = AudioManager.RINGER_MODE_NORMAL;
+            System.putInt(cr, System.MODE_RINGER, ringerMode);
+        }
+        synchronized(mSettingsLock) {
+            mRingerMode = ringerMode;
         }
 
         mVibrateSetting = System.getInt(cr, System.VIBRATE_ON, 0);
@@ -473,7 +478,7 @@
         // Each stream will read its own persisted settings
 
         // Broadcast the sticky intent
-        broadcastRingerMode();
+        broadcastRingerMode(ringerMode);
 
         // Broadcast vibrate settings
         broadcastVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER);
@@ -538,8 +543,9 @@
         if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
                 streamTypeAlias == AudioSystem.STREAM_RING ||
                 (!mVoiceCapable && streamTypeAlias == AudioSystem.STREAM_MUSIC)) {
+            int ringerMode = getRingerMode();
             // do not vibrate if already in vibrate mode
-            if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
+            if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {
                 flags &= ~AudioManager.FLAG_VIBRATE;
             }
             // Check if the ringer mode changes with this volume adjustment. If
@@ -599,7 +605,7 @@
         // setting ring or notifications volume to 0 on voice capable devices enters silent mode
         if (mVoiceCapable && (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
                 (STREAM_VOLUME_ALIAS[streamType] == AudioSystem.STREAM_RING))) {
-            int newRingerMode = mRingerMode;
+            int newRingerMode;
             if (index == 0) {
                 newRingerMode = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1
                     ? AudioManager.RINGER_MODE_VIBRATE
@@ -608,9 +614,7 @@
             } else {
                 newRingerMode = AudioManager.RINGER_MODE_NORMAL;
             }
-            if (newRingerMode != mRingerMode) {
-                setRingerMode(newRingerMode);
-            }
+            setRingerMode(newRingerMode);
         }
 
         index = rescaleIndex(index * 10, streamType, STREAM_VOLUME_ALIAS[streamType]);
@@ -722,22 +726,31 @@
 
     /** @see AudioManager#getRingerMode() */
     public int getRingerMode() {
-        return mRingerMode;
+        synchronized(mSettingsLock) {
+            return mRingerMode;
+        }
+    }
+
+    private void ensureValidRingerMode(int ringerMode) {
+        if (!AudioManager.isValidRingerMode(ringerMode)) {
+            throw new IllegalArgumentException("Bad ringer mode " + ringerMode);
+        }
     }
 
     /** @see AudioManager#setRingerMode(int) */
     public void setRingerMode(int ringerMode) {
-        synchronized (mSettingsLock) {
-            if (ringerMode != mRingerMode) {
-                setRingerModeInt(ringerMode, true);
-                // Send sticky broadcast
-                broadcastRingerMode();
-            }
+        ensureValidRingerMode(ringerMode);
+        if (ringerMode != getRingerMode()) {
+            setRingerModeInt(ringerMode, true);
+            // Send sticky broadcast
+            broadcastRingerMode(ringerMode);
         }
     }
 
     private void setRingerModeInt(int ringerMode, boolean persist) {
-        mRingerMode = ringerMode;
+        synchronized(mSettingsLock) {
+            mRingerMode = ringerMode;
+        }
 
         // Mute stream if not previously muted by ringer mode and ringer mode
         // is not RINGER_MODE_NORMAL and stream is affected by ringer mode.
@@ -747,7 +760,7 @@
         for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
             if (isStreamMutedByRingerMode(streamType)) {
                 if (!isStreamAffectedByRingerMode(streamType) ||
-                    mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
+                    ringerMode == AudioManager.RINGER_MODE_NORMAL) {
                     // ring and notifications volume should never be 0 when not silenced
                     // on voice capable devices
                     if (mVoiceCapable &&
@@ -760,7 +773,7 @@
                 }
             } else {
                 if (isStreamAffectedByRingerMode(streamType) &&
-                    mRingerMode != AudioManager.RINGER_MODE_NORMAL) {
+                    ringerMode != AudioManager.RINGER_MODE_NORMAL) {
                    mStreamStates[streamType].mute(null, true);
                    mRingerModeMutedStreams |= (1 << streamType);
                }
@@ -780,10 +793,10 @@
         switch (getVibrateSetting(vibrateType)) {
 
             case AudioManager.VIBRATE_SETTING_ON:
-                return mRingerMode != AudioManager.RINGER_MODE_SILENT;
+                return getRingerMode() != AudioManager.RINGER_MODE_SILENT;
 
             case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
-                return mRingerMode == AudioManager.RINGER_MODE_VIBRATE;
+                return getRingerMode() == AudioManager.RINGER_MODE_VIBRATE;
 
             case AudioManager.VIBRATE_SETTING_OFF:
                 // return false, even for incoming calls
@@ -1035,7 +1048,7 @@
 
     /**
      * Loads samples into the soundpool.
-     * This method must be called at when sound effects are enabled
+     * This method must be called at first when sound effects are enabled
      */
     public boolean loadSoundEffects() {
         int status;
@@ -1688,11 +1701,12 @@
      */
     private boolean checkForRingerModeChange(int oldIndex, int direction, int streamType) {
         boolean adjustVolumeIndex = true;
-        int newRingerMode = mRingerMode;
+        int ringerMode = getRingerMode();
+        int newRingerMode = ringerMode;
         int uiIndex = (oldIndex + 5) / 10;
         boolean vibeInSilent = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1;
 
-        if (mRingerMode == RINGER_MODE_NORMAL) {
+        if (ringerMode == RINGER_MODE_NORMAL) {
             if ((direction == AudioManager.ADJUST_LOWER) && (uiIndex <= 1)) {
                 // enter silent mode if current index is the last audible one and not repeating a
                 // volume key down
@@ -1707,7 +1721,7 @@
                     adjustVolumeIndex = false;
                 }
             }
-        } else if (mRingerMode == RINGER_MODE_VIBRATE) {
+        } else if (ringerMode == RINGER_MODE_VIBRATE) {
             if ((direction == AudioManager.ADJUST_LOWER)) {
                 // Set it to silent, if it wasn't a long-press
                 if (mPrevVolDirection != AudioManager.ADJUST_LOWER) {
@@ -1726,9 +1740,7 @@
             adjustVolumeIndex = false;
         }
 
-        if (newRingerMode != mRingerMode) {
-            setRingerMode(newRingerMode);
-        }
+        setRingerMode(newRingerMode);
 
         mPrevVolDirection = direction;
 
@@ -1818,10 +1830,10 @@
         }
     }
 
-    private void broadcastRingerMode() {
+    private void broadcastRingerMode(int ringerMode) {
         // Send sticky broadcast
         Intent broadcast = new Intent(AudioManager.RINGER_MODE_CHANGED_ACTION);
-        broadcast.putExtra(AudioManager.EXTRA_RINGER_MODE, mRingerMode);
+        broadcast.putExtra(AudioManager.EXTRA_RINGER_MODE, ringerMode);
         broadcast.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
                 | Intent.FLAG_RECEIVER_REPLACE_PENDING);
         long origCallerIdentityToken = Binder.clearCallingIdentity();
@@ -2013,7 +2025,8 @@
                                 if (muteCount() == 0) {
                                     // If the stream is not muted any more, restore it's volume if
                                     // ringer mode allows it
-                                    if (!isStreamAffectedByRingerMode(mStreamType) || mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
+                                    if (!isStreamAffectedByRingerMode(mStreamType) ||
+                                            getRingerMode() == AudioManager.RINGER_MODE_NORMAL) {
                                         setIndex(mLastAudibleIndex, false);
                                         sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, SENDMSG_NOOP, 0, 0,
                                                 VolumeStreamState.this, 0);
@@ -2131,8 +2144,8 @@
             }
         }
 
-        private void persistRingerMode() {
-            System.putInt(mContentResolver, System.MODE_RINGER, mRingerMode);
+        private void persistRingerMode(int ringerMode) {
+            System.putInt(mContentResolver, System.MODE_RINGER, ringerMode);
         }
 
         private void persistVibrateSetting() {
@@ -2219,7 +2232,9 @@
                     break;
 
                 case MSG_PERSIST_RINGER_MODE:
-                    persistRingerMode();
+                    // note that the value persisted is the current ringer mode, not the
+                    // value of ringer mode as of the time the request was made to persist
+                    persistRingerMode(getRingerMode());
                     break;
 
                 case MSG_PERSIST_VIBRATE_SETTING:
@@ -2335,6 +2350,10 @@
         @Override
         public void onChange(boolean selfChange) {
             super.onChange(selfChange);
+            // FIXME This synchronized is not necessary if mSettingsLock only protects mRingerMode.
+            //       However there appear to be some missing locks around mRingerModeMutedStreams
+            //       and mRingerModeAffectedStreams, so will leave this synchronized for now.
+            //       mRingerModeMutedStreams and mMuteAffectedStreams are safe (only accessed once).
             synchronized (mSettingsLock) {
                 int ringerModeAffectedStreams = Settings.System.getInt(mContentResolver,
                        Settings.System.MODE_RINGER_STREAMS_AFFECTED,
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 95d93b2..474a842 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -27,7 +27,7 @@
  */
 public class AudioSystem
 {
-    /* FIXME: Need to finalize this and correlate with native layer */
+    /* These values must be kept in sync with AudioSystem.h */
     /*
      * If these are modified, please also update Settings.System.VOLUME_SETTINGS
      * and attrs.xml and AudioManager.java.
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index c5d17eb..7b2f1b7 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -29,7 +29,7 @@
 
 /**
  * The AudioTrack class manages and plays a single audio resource for Java applications.
- * It allows to stream PCM audio buffers to the audio hardware for playback. This is
+ * It allows streaming PCM audio buffers to the audio hardware for playback. This is
  * achieved by "pushing" the data to the AudioTrack object using one of the
  *  {@link #write(byte[], int, int)} and {@link #write(short[], int, int)} methods.
  *
@@ -46,7 +46,7 @@
  *   <li>received or generated while previously queued audio is playing.</li>
  * </ul>
  *
- * The static mode is to be chosen when dealing with short sounds that fit in memory and
+ * The static mode should be chosen when dealing with short sounds that fit in memory and
  * that need to be played with the smallest latency possible. The static mode will
  * therefore be preferred for UI and game sounds that are played often, and with the
  * smallest overhead possible.
@@ -57,7 +57,7 @@
  * For an AudioTrack using the static mode, this size is the maximum size of the sound that can
  * be played from it.<br>
  * For the streaming mode, data will be written to the hardware in chunks of
- * sizes inferior to the total buffer size.
+ * sizes less than or equal to the total buffer size.
  */
 public class AudioTrack
 {
@@ -76,6 +76,7 @@
     /** indicates AudioTrack state is playing */
     public static final int PLAYSTATE_PLAYING = 3;  // matches SL_PLAYSTATE_PLAYING
 
+    // keep these values in sync with android_media_AudioTrack.cpp
     /**
      * Creation mode where audio data is transferred from Java to the native layer
      * only once before the audio starts playing.
@@ -180,7 +181,7 @@
     /**
      * The audio data sampling rate in Hz.
      */
-    private int mSampleRate = 22050;
+    private int mSampleRate; // initialized by all constructors
     /**
      * The number of audio output channels (1 is mono, 2 is stereo).
      */
@@ -193,8 +194,9 @@
     /**
      * The type of the audio stream to play. See
      *   {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},
-     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC} and
-     *   {@link AudioManager#STREAM_ALARM}
+     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC},
+     *   {@link AudioManager#STREAM_ALARM}, {@link AudioManager#STREAM_NOTIFICATION}, and
+     *   {@link AudioManager#STREAM_DTMF}.
      */
     private int mStreamType = AudioManager.STREAM_MUSIC;
     /**
@@ -240,10 +242,9 @@
      * Class constructor.
      * @param streamType the type of the audio stream. See
      *   {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},
-     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC} and
-     *   {@link AudioManager#STREAM_ALARM}
-     * @param sampleRateInHz the sample rate expressed in Hertz. Examples of rates are (but
-     *   not limited to) 44100, 22050 and 11025.
+     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC},
+     *   {@link AudioManager#STREAM_ALARM}, and {@link AudioManager#STREAM_NOTIFICATION}.
+     * @param sampleRateInHz the sample rate expressed in Hertz.
      * @param channelConfig describes the configuration of the audio channels.
      *   See {@link AudioFormat#CHANNEL_OUT_MONO} and
      *   {@link AudioFormat#CHANNEL_OUT_STEREO}
@@ -275,14 +276,15 @@
      * and media players in the same session and not to the output mix.
      * When an AudioTrack is created without specifying a session, it will create its own session
      * which can be retreived by calling the {@link #getAudioSessionId()} method.
-     * If a session ID is provided, this AudioTrack will share effects attached to this session
-     * with all other media players or audio tracks in the same session.
+     * If a non-zero session ID is provided, this AudioTrack will share effects attached to this
+     * session
+     * with all other media players or audio tracks in the same session, otherwise a new session
+     * will be created for this track if none is supplied.
      * @param streamType the type of the audio stream. See
      *   {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},
-     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC} and
-     *   {@link AudioManager#STREAM_ALARM}
-     * @param sampleRateInHz the sample rate expressed in Hertz. Examples of rates are (but
-     *   not limited to) 44100, 22050 and 11025.
+     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC},
+     *   {@link AudioManager#STREAM_ALARM}, and {@link AudioManager#STREAM_NOTIFICATION}.
+     * @param sampleRateInHz the sample rate expressed in Hertz.
      * @param channelConfig describes the configuration of the audio channels.
      *   See {@link AudioFormat#CHANNEL_OUT_MONO} and
      *   {@link AudioFormat#CHANNEL_OUT_STEREO}
@@ -304,8 +306,8 @@
             int bufferSizeInBytes, int mode, int sessionId)
     throws IllegalArgumentException {
         mState = STATE_UNINITIALIZED;
-        
-        // remember which looper is associated with the AudioTrack instanciation
+
+        // remember which looper is associated with the AudioTrack instantiation
         if ((mInitializationLooper = Looper.myLooper()) == null) {
             mInitializationLooper = Looper.getMainLooper();
         }
@@ -365,7 +367,7 @@
         }
 
         //--------------
-        // sample rate
+        // sample rate, note these values are subject to change
         if ( (sampleRateInHz < 4000) || (sampleRateInHz > 48000) ) {
             throw (new IllegalArgumentException(sampleRateInHz
                     + "Hz is not a supported sample rate."));
@@ -508,7 +510,8 @@
      * Returns the type of audio stream this AudioTrack is configured for.
      * Compare the result against {@link AudioManager#STREAM_VOICE_CALL},
      * {@link AudioManager#STREAM_SYSTEM}, {@link AudioManager#STREAM_RING},
-     * {@link AudioManager#STREAM_MUSIC} or {@link AudioManager#STREAM_ALARM}
+     * {@link AudioManager#STREAM_MUSIC}, {@link AudioManager#STREAM_ALARM},
+     * {@link AudioManager#STREAM_NOTIFICATION}, or {@link AudioManager#STREAM_DTMF}.
      */
     public int getStreamType() {
         return mStreamType;
@@ -630,6 +633,7 @@
             return AudioTrack.ERROR_BAD_VALUE;
         }
 
+        // sample rate, note these values are subject to change
         if ( (sampleRateInHz < 4000) || (sampleRateInHz > 48000) ) {
             loge("getMinBufferSize(): " + sampleRateInHz +"Hz is not a supported sample rate.");
             return AudioTrack.ERROR_BAD_VALUE;
@@ -728,7 +732,7 @@
      * the audio data will be consumed and played back, not the original sampling rate of the
      * content. Setting it to half the sample rate of the content will cause the playback to
      * last twice as long, but will also result in a negative pitch shift.
-     * The valid sample rate range if from 1Hz to twice the value returned by
+     * The valid sample rate range is from 1Hz to twice the value returned by
      * {@link #getNativeOutputSampleRate(int)}.
      * @param sampleRateInHz the sample rate expressed in Hz
      * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
@@ -906,7 +910,7 @@
      *    the parameters don't resolve to valid data and indexes.
      */
 
-    public int write(byte[] audioData,int offsetInBytes, int sizeInBytes) {
+    public int write(byte[] audioData, int offsetInBytes, int sizeInBytes) {
         if ((mDataLoadMode == MODE_STATIC)
                 && (mState == STATE_NO_STATIC_DATA)
                 && (sizeInBytes > 0)) {
@@ -1012,8 +1016,8 @@
      * <p>Note that the passed level value is a raw scalar. UI controls should be scaled
      * logarithmically: the gain applied by audio framework ranges from -72dB to 0dB,
      * so an appropriate conversion from linear UI input x to level is:
-     * x == 0 -> level = 0
-     * 0 < x <= R -> level = 10^(72*(x-R)/20/R)
+     * x == 0 -&gt; level = 0
+     * 0 &lt; x &lt;= R -&gt; level = 10^(72*(x-R)/20/R)
      *
      * @param level send level scalar
      * @return error code or success, see {@link #SUCCESS},
@@ -1062,7 +1066,7 @@
     /**
      * Helper class to handle the forwarding of native events to the appropriate listener
      * (potentially) handled in a different thread
-     */  
+     */
     private class NativeEventHandlerDelegate {
         private final AudioTrack mAudioTrack;
         private final Handler mHandler;
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index 386986e..55074aa 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -396,6 +396,7 @@
         setDefaultRingtoneFileNames();
 
         mExternalStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();
+        //mClient.testGenreNameConverter();
     }
 
     private void setDefaultRingtoneFileNames() {
@@ -623,9 +624,37 @@
                 mCompilation = parseSubstring(value, 0, 0);
             } else if (name.equalsIgnoreCase("isdrm")) {
                 mIsDrm = (parseSubstring(value, 0, 0) == 1);
+            } else {
+                //Log.v(TAG, "unknown tag: " + name + " (" + mProcessGenres + ")");
             }
         }
 
+        private boolean convertGenreCode(String input, String expected) {
+            String output = getGenreName(input);
+            if (output.equals(expected)) {
+                return true;
+            } else {
+                Log.d(TAG, "'" + input + "' -> '" + output + "', expected '" + expected + "'");
+                return false;
+            }
+        }
+        private void testGenreNameConverter() {
+            convertGenreCode("2", "Country");
+            convertGenreCode("(2)", "Country");
+            convertGenreCode("(2", "(2");
+            convertGenreCode("2 Foo", "Country");
+            convertGenreCode("(2) Foo", "Country");
+            convertGenreCode("(2 Foo", "(2 Foo");
+            convertGenreCode("2Foo", "2Foo");
+            convertGenreCode("(2)Foo", "Country");
+            convertGenreCode("200 Foo", "Foo");
+            convertGenreCode("(200) Foo", "Foo");
+            convertGenreCode("200Foo", "200Foo");
+            convertGenreCode("(200)Foo", "Foo");
+            convertGenreCode("200)Foo", "200)Foo");
+            convertGenreCode("200) Foo", "200) Foo");
+        }
+
         public String getGenreName(String genreTagValue) {
 
             if (genreTagValue == null) {
@@ -633,18 +662,23 @@
             }
             final int length = genreTagValue.length();
 
-            if (length > 0 && genreTagValue.charAt(0) == '(') {
+            if (length > 0) {
+                boolean parenthesized = false;
                 StringBuffer number = new StringBuffer();
-                int i = 1;
-                for (; i < length - 1; ++i) {
+                int i = 0;
+                for (; i < length; ++i) {
                     char c = genreTagValue.charAt(i);
-                    if (Character.isDigit(c)) {
+                    if (i == 0 && c == '(') {
+                        parenthesized = true;
+                    } else if (Character.isDigit(c)) {
                         number.append(c);
                     } else {
                         break;
                     }
                 }
-                if (genreTagValue.charAt(i) == ')') {
+                char charAfterNumber = i < length ? genreTagValue.charAt(i) : ' ';
+                if ((parenthesized && charAfterNumber == ')')
+                        || !parenthesized && Character.isWhitespace(charAfterNumber)) {
                     try {
                         short genreIndex = Short.parseShort(number.toString());
                         if (genreIndex >= 0) {
@@ -655,7 +689,13 @@
                             } else if (genreIndex < 0xFF && (i + 1) < length) {
                                 // genre is valid but unknown,
                                 // if there is a string after the value we take it
-                                return genreTagValue.substring(i + 1);
+                                if (parenthesized && charAfterNumber == ')') {
+                                    i++;
+                                }
+                                String ret = genreTagValue.substring(i).trim();
+                                if (ret.length() != 0) {
+                                    return ret;
+                                }
                             } else {
                                 // else return the number, without parentheses
                                 return number.toString();
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index b320515..8eb9332 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -104,8 +104,10 @@
         }
 
         if (bitmap == null) {
+            FileInputStream stream = null;
             try {
-                FileDescriptor fd = new FileInputStream(filePath).getFD();
+                stream = new FileInputStream(filePath);
+                FileDescriptor fd = stream.getFD();
                 BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 1;
                 options.inJustDecodeBounds = true;
@@ -125,7 +127,16 @@
                 Log.e(TAG, "", ex);
             } catch (OutOfMemoryError oom) {
                 Log.e(TAG, "Unable to decode file " + filePath + ". OutOfMemoryError.", oom);
+            } finally {
+                try {
+                    if (stream != null) {
+                        stream.close();
+                    }
+                } catch (IOException ex) {
+                    Log.e(TAG, "", ex);
+                }
             }
+
         }
 
         if (kind == Images.Thumbnails.MICRO_KIND) {
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index f749d51..0dc3b65 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -153,13 +153,13 @@
     int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
     if (offset < 0 || length < 0 || fd < 0) {
         if (offset < 0) {
-            LOGE("negative offset (%lld)", offset);
+            ALOGE("negative offset (%lld)", offset);
         }
         if (length < 0) {
-            LOGE("negative length (%lld)", length);
+            ALOGE("negative length (%lld)", length);
         }
         if (fd < 0) {
-            LOGE("invalid file descriptor");
+            ALOGE("invalid file descriptor");
         }
         jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
         return;
@@ -238,7 +238,7 @@
         videoFrame = static_cast<VideoFrame *>(frameMemory->pointer());
     }
     if (videoFrame == NULL) {
-        LOGE("getFrameAtTime: videoFrame is a NULL pointer");
+        ALOGE("getFrameAtTime: videoFrame is a NULL pointer");
         return NULL;
     }
 
@@ -322,7 +322,7 @@
         mediaAlbumArt = static_cast<MediaAlbumArt *>(albumArtMemory->pointer());
     }
     if (mediaAlbumArt == NULL) {
-        LOGE("getEmbeddedPicture: Call to getEmbeddedPicture failed.");
+        ALOGE("getEmbeddedPicture: Call to getEmbeddedPicture failed.");
         return NULL;
     }
 
@@ -330,7 +330,7 @@
     char* data = (char*) mediaAlbumArt + sizeof(MediaAlbumArt);
     jbyteArray array = env->NewByteArray(len);
     if (!array) {  // OutOfMemoryError exception has already been thrown.
-        LOGE("getEmbeddedPicture: OutOfMemoryError is thrown.");
+        ALOGE("getEmbeddedPicture: OutOfMemoryError is thrown.");
     } else {
         jbyte* bytes = env->GetByteArrayElements(array, NULL);
         if (bytes != NULL) {
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 0272a03..39fd9a9 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -80,7 +80,7 @@
     // that posts events to the application thread.
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
-        LOGE("Can't find android/media/MediaPlayer");
+        ALOGE("Can't find android/media/MediaPlayer");
         jniThrowException(env, "java/lang/Exception", NULL);
         return;
     }
@@ -405,7 +405,7 @@
     }
     int w;
     if (0 != mp->getVideoWidth(&w)) {
-        LOGE("getVideoWidth failed");
+        ALOGE("getVideoWidth failed");
         w = 0;
     }
     ALOGV("getVideoWidth: %d", w);
@@ -422,7 +422,7 @@
     }
     int h;
     if (0 != mp->getVideoHeight(&h)) {
-        LOGE("getVideoHeight failed");
+        ALOGE("getVideoHeight failed");
         h = 0;
     }
     ALOGV("getVideoHeight: %d", h);
@@ -659,7 +659,7 @@
     ALOGV("native_finalize");
     sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
     if (mp != NULL) {
-        LOGW("MediaPlayer finalized without being released");
+        ALOGW("MediaPlayer finalized without being released");
     }
     android_media_MediaPlayer_release(env, thiz);
 }
@@ -826,58 +826,58 @@
     jint result = -1;
 
     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
-        LOGE("ERROR: GetEnv failed\n");
+        ALOGE("ERROR: GetEnv failed\n");
         goto bail;
     }
     assert(env != NULL);
 
     if (register_android_media_MediaPlayer(env) < 0) {
-        LOGE("ERROR: MediaPlayer native registration failed\n");
+        ALOGE("ERROR: MediaPlayer native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_MediaRecorder(env) < 0) {
-        LOGE("ERROR: MediaRecorder native registration failed\n");
+        ALOGE("ERROR: MediaRecorder native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_MediaScanner(env) < 0) {
-        LOGE("ERROR: MediaScanner native registration failed\n");
+        ALOGE("ERROR: MediaScanner native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_MediaMetadataRetriever(env) < 0) {
-        LOGE("ERROR: MediaMetadataRetriever native registration failed\n");
+        ALOGE("ERROR: MediaMetadataRetriever native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_AmrInputStream(env) < 0) {
-        LOGE("ERROR: AmrInputStream native registration failed\n");
+        ALOGE("ERROR: AmrInputStream native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_ResampleInputStream(env) < 0) {
-        LOGE("ERROR: ResampleInputStream native registration failed\n");
+        ALOGE("ERROR: ResampleInputStream native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_MediaProfiles(env) < 0) {
-        LOGE("ERROR: MediaProfiles native registration failed");
+        ALOGE("ERROR: MediaProfiles native registration failed");
         goto bail;
     }
 
     if (register_android_mtp_MtpDatabase(env) < 0) {
-        LOGE("ERROR: MtpDatabase native registration failed");
+        ALOGE("ERROR: MtpDatabase native registration failed");
         goto bail;
     }
 
     if (register_android_mtp_MtpDevice(env) < 0) {
-        LOGE("ERROR: MtpDevice native registration failed");
+        ALOGE("ERROR: MtpDevice native registration failed");
         goto bail;
     }
 
     if (register_android_mtp_MtpServer(env) < 0) {
-        LOGE("ERROR: MtpServer native registration failed");
+        ALOGE("ERROR: MtpServer native registration failed");
         goto bail;
     }
 
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 31ef046..acc65f1 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -77,7 +77,7 @@
     // that posts events to the application thread.
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
-        LOGE("Can't find android/media/MediaRecorder");
+        ALOGE("Can't find android/media/MediaRecorder");
         jniThrowException(env, "java/lang/Exception", NULL);
         return;
     }
@@ -229,7 +229,7 @@
     ALOGV("setParameter()");
     if (params == NULL)
     {
-        LOGE("Invalid or empty params string.  This parameter will be ignored.");
+        ALOGE("Invalid or empty params string.  This parameter will be ignored.");
         return;
     }
 
@@ -238,7 +238,7 @@
     const char* params8 = env->GetStringUTFChars(params, NULL);
     if (params8 == NULL)
     {
-        LOGE("Failed to covert jstring to String8.  This parameter will be ignored.");
+        ALOGE("Failed to covert jstring to String8.  This parameter will be ignored.");
         return;
     }
 
@@ -323,12 +323,12 @@
         // The application may misbehave and
         // the preview surface becomes unavailable
         if (native_surface.get() == 0) {
-            LOGE("Application lost the surface");
+            ALOGE("Application lost the surface");
             jniThrowException(env, "java/io/IOException", "invalid preview surface");
             return;
         }
 
-        LOGI("prepare: surface=%p (identity=%d)", native_surface.get(), native_surface->getIdentity());
+        ALOGI("prepare: surface=%p (identity=%d)", native_surface.get(), native_surface->getIdentity());
         if (process_media_recorder_call(env, mr->setPreviewSurface(native_surface), "java/lang/RuntimeException", "setPreviewSurface failed.")) {
             return;
         }
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
index 67c85cc..5d27966 100644
--- a/media/jni/android_media_MediaScanner.cpp
+++ b/media/jni/android_media_MediaScanner.cpp
@@ -48,7 +48,7 @@
 
 static status_t checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
         return UNKNOWN_ERROR;
@@ -118,7 +118,7 @@
                 env->FindClass(kClassMediaScannerClient);
 
         if (mediaScannerClientInterface == NULL) {
-            LOGE("Class %s not found", kClassMediaScannerClient);
+            ALOGE("Class %s not found", kClassMediaScannerClient);
         } else {
             mScanFileMethodID = env->GetMethodID(
                                     mediaScannerClientInterface,
@@ -257,7 +257,7 @@
     MyMediaScannerClient myClient(env, client);
     MediaScanResult result = mp->processDirectory(pathStr, myClient);
     if (result == MEDIA_SCAN_RESULT_ERROR) {
-        LOGE("An error occurred while scanning directory '%s'.", pathStr);
+        ALOGE("An error occurred while scanning directory '%s'.", pathStr);
     }
     env->ReleaseStringUTFChars(path, pathStr);
 }
@@ -297,7 +297,7 @@
     MyMediaScannerClient myClient(env, client);
     MediaScanResult result = mp->processFile(pathStr, mimeTypeStr, myClient);
     if (result == MEDIA_SCAN_RESULT_ERROR) {
-        LOGE("An error occurred while scanning file '%s'.", pathStr);
+        ALOGE("An error occurred while scanning file '%s'.", pathStr);
     }
     env->ReleaseStringUTFChars(path, pathStr);
     if (mimeType) {
diff --git a/media/jni/android_media_Utils.cpp b/media/jni/android_media_Utils.cpp
index 27e46a4..47963b1 100644
--- a/media/jni/android_media_Utils.cpp
+++ b/media/jni/android_media_Utils.cpp
@@ -39,7 +39,7 @@
     }
 
     if (failed) {
-        LOGE("keys and values arrays have different length");
+        ALOGE("keys and values arrays have different length");
         jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
         return false;
     }
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 4dbcb90..99e543b 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -174,7 +174,7 @@
 
 static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
     }
@@ -439,7 +439,7 @@
                 break;
              }
             default:
-                LOGE("unsupported type in getObjectPropertyValue\n");
+                ALOGE("unsupported type in getObjectPropertyValue\n");
                 result = MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT;
         }
 out:
@@ -508,7 +508,7 @@
             break;
          }
         default:
-            LOGE("unsupported type in getObjectPropertyValue\n");
+            ALOGE("unsupported type in getObjectPropertyValue\n");
             return MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT;
     }
 
@@ -579,7 +579,7 @@
             break;
          }
         default:
-            LOGE("unsupported type in getDevicePropertyValue\n");
+            ALOGE("unsupported type in getDevicePropertyValue\n");
             return MTP_RESPONSE_INVALID_DEVICE_PROP_FORMAT;
     }
 
@@ -631,7 +631,7 @@
             break;
          }
         default:
-            LOGE("unsupported type in setDevicePropertyValue\n");
+            ALOGE("unsupported type in setDevicePropertyValue\n");
             return MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT;
     }
 
@@ -724,7 +724,7 @@
                     break;
                 }
                 default:
-                    LOGE("bad or unsupported data type in MyMtpDatabase::getObjectPropertyList");
+                    ALOGE("bad or unsupported data type in MyMtpDatabase::getObjectPropertyList");
                     break;
             }
         }
@@ -957,7 +957,7 @@
     int count = references->size();
     jintArray array = env->NewIntArray(count);
     if (!array) {
-        LOGE("out of memory in setObjectReferences");
+        ALOGE("out of memory in setObjectReferences");
         return false;
     }
     jint* handles = env->GetIntArrayElements(array, 0);
@@ -1044,7 +1044,7 @@
                     result->setDefaultValue(str);
                 env->ReleaseCharArrayElements(mStringBuffer, str, 0);
             } else {
-                LOGE("unable to read device property, response: %04X", ret);
+                ALOGE("unable to read device property, response: %04X", ret);
             }
             break;
     }
@@ -1113,151 +1113,151 @@
 
     clazz = env->FindClass("android/mtp/MtpDatabase");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpDatabase");
+        ALOGE("Can't find android/mtp/MtpDatabase");
         return -1;
     }
     method_beginSendObject = env->GetMethodID(clazz, "beginSendObject", "(Ljava/lang/String;IIIJJ)I");
     if (method_beginSendObject == NULL) {
-        LOGE("Can't find beginSendObject");
+        ALOGE("Can't find beginSendObject");
         return -1;
     }
     method_endSendObject = env->GetMethodID(clazz, "endSendObject", "(Ljava/lang/String;IIZ)V");
     if (method_endSendObject == NULL) {
-        LOGE("Can't find endSendObject");
+        ALOGE("Can't find endSendObject");
         return -1;
     }
     method_getObjectList = env->GetMethodID(clazz, "getObjectList", "(III)[I");
     if (method_getObjectList == NULL) {
-        LOGE("Can't find getObjectList");
+        ALOGE("Can't find getObjectList");
         return -1;
     }
     method_getNumObjects = env->GetMethodID(clazz, "getNumObjects", "(III)I");
     if (method_getNumObjects == NULL) {
-        LOGE("Can't find getNumObjects");
+        ALOGE("Can't find getNumObjects");
         return -1;
     }
     method_getSupportedPlaybackFormats = env->GetMethodID(clazz, "getSupportedPlaybackFormats", "()[I");
     if (method_getSupportedPlaybackFormats == NULL) {
-        LOGE("Can't find getSupportedPlaybackFormats");
+        ALOGE("Can't find getSupportedPlaybackFormats");
         return -1;
     }
     method_getSupportedCaptureFormats = env->GetMethodID(clazz, "getSupportedCaptureFormats", "()[I");
     if (method_getSupportedCaptureFormats == NULL) {
-        LOGE("Can't find getSupportedCaptureFormats");
+        ALOGE("Can't find getSupportedCaptureFormats");
         return -1;
     }
     method_getSupportedObjectProperties = env->GetMethodID(clazz, "getSupportedObjectProperties", "(I)[I");
     if (method_getSupportedObjectProperties == NULL) {
-        LOGE("Can't find getSupportedObjectProperties");
+        ALOGE("Can't find getSupportedObjectProperties");
         return -1;
     }
     method_getSupportedDeviceProperties = env->GetMethodID(clazz, "getSupportedDeviceProperties", "()[I");
     if (method_getSupportedDeviceProperties == NULL) {
-        LOGE("Can't find getSupportedDeviceProperties");
+        ALOGE("Can't find getSupportedDeviceProperties");
         return -1;
     }
     method_setObjectProperty = env->GetMethodID(clazz, "setObjectProperty", "(IIJLjava/lang/String;)I");
     if (method_setObjectProperty == NULL) {
-        LOGE("Can't find setObjectProperty");
+        ALOGE("Can't find setObjectProperty");
         return -1;
     }
     method_getDeviceProperty = env->GetMethodID(clazz, "getDeviceProperty", "(I[J[C)I");
     if (method_getDeviceProperty == NULL) {
-        LOGE("Can't find getDeviceProperty");
+        ALOGE("Can't find getDeviceProperty");
         return -1;
     }
     method_setDeviceProperty = env->GetMethodID(clazz, "setDeviceProperty", "(IJLjava/lang/String;)I");
     if (method_setDeviceProperty == NULL) {
-        LOGE("Can't find setDeviceProperty");
+        ALOGE("Can't find setDeviceProperty");
         return -1;
     }
     method_getObjectPropertyList = env->GetMethodID(clazz, "getObjectPropertyList",
             "(JIJII)Landroid/mtp/MtpPropertyList;");
     if (method_getObjectPropertyList == NULL) {
-        LOGE("Can't find getObjectPropertyList");
+        ALOGE("Can't find getObjectPropertyList");
         return -1;
     }
     method_getObjectInfo = env->GetMethodID(clazz, "getObjectInfo", "(I[I[C[J)Z");
     if (method_getObjectInfo == NULL) {
-        LOGE("Can't find getObjectInfo");
+        ALOGE("Can't find getObjectInfo");
         return -1;
     }
     method_getObjectFilePath = env->GetMethodID(clazz, "getObjectFilePath", "(I[C[J)I");
     if (method_getObjectFilePath == NULL) {
-        LOGE("Can't find getObjectFilePath");
+        ALOGE("Can't find getObjectFilePath");
         return -1;
     }
     method_deleteFile = env->GetMethodID(clazz, "deleteFile", "(I)I");
     if (method_deleteFile == NULL) {
-        LOGE("Can't find deleteFile");
+        ALOGE("Can't find deleteFile");
         return -1;
     }
     method_getObjectReferences = env->GetMethodID(clazz, "getObjectReferences", "(I)[I");
     if (method_getObjectReferences == NULL) {
-        LOGE("Can't find getObjectReferences");
+        ALOGE("Can't find getObjectReferences");
         return -1;
     }
     method_setObjectReferences = env->GetMethodID(clazz, "setObjectReferences", "(I[I)I");
     if (method_setObjectReferences == NULL) {
-        LOGE("Can't find setObjectReferences");
+        ALOGE("Can't find setObjectReferences");
         return -1;
     }
     method_sessionStarted = env->GetMethodID(clazz, "sessionStarted", "()V");
     if (method_sessionStarted == NULL) {
-        LOGE("Can't find sessionStarted");
+        ALOGE("Can't find sessionStarted");
         return -1;
     }
     method_sessionEnded = env->GetMethodID(clazz, "sessionEnded", "()V");
     if (method_sessionEnded == NULL) {
-        LOGE("Can't find sessionEnded");
+        ALOGE("Can't find sessionEnded");
         return -1;
     }
 
     field_context = env->GetFieldID(clazz, "mNativeContext", "I");
     if (field_context == NULL) {
-        LOGE("Can't find MtpDatabase.mNativeContext");
+        ALOGE("Can't find MtpDatabase.mNativeContext");
         return -1;
     }
 
     // now set up fields for MtpPropertyList class
     clazz = env->FindClass("android/mtp/MtpPropertyList");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpPropertyList");
+        ALOGE("Can't find android/mtp/MtpPropertyList");
         return -1;
     }
     field_mCount = env->GetFieldID(clazz, "mCount", "I");
     if (field_mCount == NULL) {
-        LOGE("Can't find MtpPropertyList.mCount");
+        ALOGE("Can't find MtpPropertyList.mCount");
         return -1;
     }
     field_mResult = env->GetFieldID(clazz, "mResult", "I");
     if (field_mResult == NULL) {
-        LOGE("Can't find MtpPropertyList.mResult");
+        ALOGE("Can't find MtpPropertyList.mResult");
         return -1;
     }
     field_mObjectHandles = env->GetFieldID(clazz, "mObjectHandles", "[I");
     if (field_mObjectHandles == NULL) {
-        LOGE("Can't find MtpPropertyList.mObjectHandles");
+        ALOGE("Can't find MtpPropertyList.mObjectHandles");
         return -1;
     }
     field_mPropertyCodes = env->GetFieldID(clazz, "mPropertyCodes", "[I");
     if (field_mPropertyCodes == NULL) {
-        LOGE("Can't find MtpPropertyList.mPropertyCodes");
+        ALOGE("Can't find MtpPropertyList.mPropertyCodes");
         return -1;
     }
     field_mDataTypes = env->GetFieldID(clazz, "mDataTypes", "[I");
     if (field_mDataTypes == NULL) {
-        LOGE("Can't find MtpPropertyList.mDataTypes");
+        ALOGE("Can't find MtpPropertyList.mDataTypes");
         return -1;
     }
     field_mLongValues = env->GetFieldID(clazz, "mLongValues", "[J");
     if (field_mLongValues == NULL) {
-        LOGE("Can't find MtpPropertyList.mLongValues");
+        ALOGE("Can't find MtpPropertyList.mLongValues");
         return -1;
     }
     field_mStringValues = env->GetFieldID(clazz, "mStringValues", "[Ljava/lang/String;");
     if (field_mStringValues == NULL) {
-        LOGE("Can't find MtpPropertyList.mStringValues");
+        ALOGE("Can't find MtpPropertyList.mStringValues");
         return -1;
     }
 
diff --git a/media/jni/android_mtp_MtpDevice.cpp b/media/jni/android_mtp_MtpDevice.cpp
index c71410b..113784e 100644
--- a/media/jni/android_mtp_MtpDevice.cpp
+++ b/media/jni/android_mtp_MtpDevice.cpp
@@ -92,7 +92,7 @@
 
 static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
     }
@@ -142,7 +142,7 @@
     }
     jobject info = env->NewObject(clazz_deviceInfo, constructor_deviceInfo);
     if (info == NULL) {
-        LOGE("Could not create a MtpDeviceInfo object");
+        ALOGE("Could not create a MtpDeviceInfo object");
         delete deviceInfo;
         return NULL;
     }
@@ -195,7 +195,7 @@
 
     jobject info = env->NewObject(clazz_storageInfo, constructor_storageInfo);
     if (info == NULL) {
-        LOGE("Could not create a MtpStorageInfo object");
+        ALOGE("Could not create a MtpStorageInfo object");
         delete storageInfo;
         return NULL;
     }
@@ -248,7 +248,7 @@
         return NULL;
     jobject info = env->NewObject(clazz_objectInfo, constructor_objectInfo);
     if (info == NULL) {
-        LOGE("Could not create a MtpObjectInfo object");
+        ALOGE("Could not create a MtpObjectInfo object");
         delete objectInfo;
         return NULL;
     }
@@ -433,193 +433,193 @@
 
     clazz = env->FindClass("android/mtp/MtpDeviceInfo");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpDeviceInfo");
+        ALOGE("Can't find android/mtp/MtpDeviceInfo");
         return -1;
     }
     constructor_deviceInfo = env->GetMethodID(clazz, "<init>", "()V");
     if (constructor_deviceInfo == NULL) {
-        LOGE("Can't find android/mtp/MtpDeviceInfo constructor");
+        ALOGE("Can't find android/mtp/MtpDeviceInfo constructor");
         return -1;
     }
     field_deviceInfo_manufacturer = env->GetFieldID(clazz, "mManufacturer", "Ljava/lang/String;");
     if (field_deviceInfo_manufacturer == NULL) {
-        LOGE("Can't find MtpDeviceInfo.mManufacturer");
+        ALOGE("Can't find MtpDeviceInfo.mManufacturer");
         return -1;
     }
     field_deviceInfo_model = env->GetFieldID(clazz, "mModel", "Ljava/lang/String;");
     if (field_deviceInfo_model == NULL) {
-        LOGE("Can't find MtpDeviceInfo.mModel");
+        ALOGE("Can't find MtpDeviceInfo.mModel");
         return -1;
     }
     field_deviceInfo_version = env->GetFieldID(clazz, "mVersion", "Ljava/lang/String;");
     if (field_deviceInfo_version == NULL) {
-        LOGE("Can't find MtpDeviceInfo.mVersion");
+        ALOGE("Can't find MtpDeviceInfo.mVersion");
         return -1;
     }
     field_deviceInfo_serialNumber = env->GetFieldID(clazz, "mSerialNumber", "Ljava/lang/String;");
     if (field_deviceInfo_serialNumber == NULL) {
-        LOGE("Can't find MtpDeviceInfo.mSerialNumber");
+        ALOGE("Can't find MtpDeviceInfo.mSerialNumber");
         return -1;
     }
     clazz_deviceInfo = (jclass)env->NewGlobalRef(clazz);
 
     clazz = env->FindClass("android/mtp/MtpStorageInfo");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpStorageInfo");
+        ALOGE("Can't find android/mtp/MtpStorageInfo");
         return -1;
     }
     constructor_storageInfo = env->GetMethodID(clazz, "<init>", "()V");
     if (constructor_storageInfo == NULL) {
-        LOGE("Can't find android/mtp/MtpStorageInfo constructor");
+        ALOGE("Can't find android/mtp/MtpStorageInfo constructor");
         return -1;
     }
     field_storageInfo_storageId = env->GetFieldID(clazz, "mStorageId", "I");
     if (field_storageInfo_storageId == NULL) {
-        LOGE("Can't find MtpStorageInfo.mStorageId");
+        ALOGE("Can't find MtpStorageInfo.mStorageId");
         return -1;
     }
     field_storageInfo_maxCapacity = env->GetFieldID(clazz, "mMaxCapacity", "J");
     if (field_storageInfo_maxCapacity == NULL) {
-        LOGE("Can't find MtpStorageInfo.mMaxCapacity");
+        ALOGE("Can't find MtpStorageInfo.mMaxCapacity");
         return -1;
     }
     field_storageInfo_freeSpace = env->GetFieldID(clazz, "mFreeSpace", "J");
     if (field_storageInfo_freeSpace == NULL) {
-        LOGE("Can't find MtpStorageInfo.mFreeSpace");
+        ALOGE("Can't find MtpStorageInfo.mFreeSpace");
         return -1;
     }
     field_storageInfo_description = env->GetFieldID(clazz, "mDescription", "Ljava/lang/String;");
     if (field_storageInfo_description == NULL) {
-        LOGE("Can't find MtpStorageInfo.mDescription");
+        ALOGE("Can't find MtpStorageInfo.mDescription");
         return -1;
     }
     field_storageInfo_volumeIdentifier = env->GetFieldID(clazz, "mVolumeIdentifier", "Ljava/lang/String;");
     if (field_storageInfo_volumeIdentifier == NULL) {
-        LOGE("Can't find MtpStorageInfo.mVolumeIdentifier");
+        ALOGE("Can't find MtpStorageInfo.mVolumeIdentifier");
         return -1;
     }
     clazz_storageInfo = (jclass)env->NewGlobalRef(clazz);
 
     clazz = env->FindClass("android/mtp/MtpObjectInfo");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpObjectInfo");
+        ALOGE("Can't find android/mtp/MtpObjectInfo");
         return -1;
     }
     constructor_objectInfo = env->GetMethodID(clazz, "<init>", "()V");
     if (constructor_objectInfo == NULL) {
-        LOGE("Can't find android/mtp/MtpObjectInfo constructor");
+        ALOGE("Can't find android/mtp/MtpObjectInfo constructor");
         return -1;
     }
     field_objectInfo_handle = env->GetFieldID(clazz, "mHandle", "I");
     if (field_objectInfo_handle == NULL) {
-        LOGE("Can't find MtpObjectInfo.mHandle");
+        ALOGE("Can't find MtpObjectInfo.mHandle");
         return -1;
     }
     field_objectInfo_storageId = env->GetFieldID(clazz, "mStorageId", "I");
     if (field_objectInfo_storageId == NULL) {
-        LOGE("Can't find MtpObjectInfo.mStorageId");
+        ALOGE("Can't find MtpObjectInfo.mStorageId");
         return -1;
     }
     field_objectInfo_format = env->GetFieldID(clazz, "mFormat", "I");
     if (field_objectInfo_format == NULL) {
-        LOGE("Can't find MtpObjectInfo.mFormat");
+        ALOGE("Can't find MtpObjectInfo.mFormat");
         return -1;
     }
     field_objectInfo_protectionStatus = env->GetFieldID(clazz, "mProtectionStatus", "I");
     if (field_objectInfo_protectionStatus == NULL) {
-        LOGE("Can't find MtpObjectInfo.mProtectionStatus");
+        ALOGE("Can't find MtpObjectInfo.mProtectionStatus");
         return -1;
     }
     field_objectInfo_compressedSize = env->GetFieldID(clazz, "mCompressedSize", "I");
     if (field_objectInfo_compressedSize == NULL) {
-        LOGE("Can't find MtpObjectInfo.mCompressedSize");
+        ALOGE("Can't find MtpObjectInfo.mCompressedSize");
         return -1;
     }
     field_objectInfo_thumbFormat = env->GetFieldID(clazz, "mThumbFormat", "I");
     if (field_objectInfo_thumbFormat == NULL) {
-        LOGE("Can't find MtpObjectInfo.mThumbFormat");
+        ALOGE("Can't find MtpObjectInfo.mThumbFormat");
         return -1;
     }
     field_objectInfo_thumbCompressedSize = env->GetFieldID(clazz, "mThumbCompressedSize", "I");
     if (field_objectInfo_thumbCompressedSize == NULL) {
-        LOGE("Can't find MtpObjectInfo.mThumbCompressedSize");
+        ALOGE("Can't find MtpObjectInfo.mThumbCompressedSize");
         return -1;
     }
     field_objectInfo_thumbPixWidth = env->GetFieldID(clazz, "mThumbPixWidth", "I");
     if (field_objectInfo_thumbPixWidth == NULL) {
-        LOGE("Can't find MtpObjectInfo.mThumbPixWidth");
+        ALOGE("Can't find MtpObjectInfo.mThumbPixWidth");
         return -1;
     }
     field_objectInfo_thumbPixHeight = env->GetFieldID(clazz, "mThumbPixHeight", "I");
     if (field_objectInfo_thumbPixHeight == NULL) {
-        LOGE("Can't find MtpObjectInfo.mThumbPixHeight");
+        ALOGE("Can't find MtpObjectInfo.mThumbPixHeight");
         return -1;
     }
     field_objectInfo_imagePixWidth = env->GetFieldID(clazz, "mImagePixWidth", "I");
     if (field_objectInfo_imagePixWidth == NULL) {
-        LOGE("Can't find MtpObjectInfo.mImagePixWidth");
+        ALOGE("Can't find MtpObjectInfo.mImagePixWidth");
         return -1;
     }
     field_objectInfo_imagePixHeight = env->GetFieldID(clazz, "mImagePixHeight", "I");
     if (field_objectInfo_imagePixHeight == NULL) {
-        LOGE("Can't find MtpObjectInfo.mImagePixHeight");
+        ALOGE("Can't find MtpObjectInfo.mImagePixHeight");
         return -1;
     }
     field_objectInfo_imagePixDepth = env->GetFieldID(clazz, "mImagePixDepth", "I");
     if (field_objectInfo_imagePixDepth == NULL) {
-        LOGE("Can't find MtpObjectInfo.mImagePixDepth");
+        ALOGE("Can't find MtpObjectInfo.mImagePixDepth");
         return -1;
     }
     field_objectInfo_parent = env->GetFieldID(clazz, "mParent", "I");
     if (field_objectInfo_parent == NULL) {
-        LOGE("Can't find MtpObjectInfo.mParent");
+        ALOGE("Can't find MtpObjectInfo.mParent");
         return -1;
     }
     field_objectInfo_associationType = env->GetFieldID(clazz, "mAssociationType", "I");
     if (field_objectInfo_associationType == NULL) {
-        LOGE("Can't find MtpObjectInfo.mAssociationType");
+        ALOGE("Can't find MtpObjectInfo.mAssociationType");
         return -1;
     }
     field_objectInfo_associationDesc = env->GetFieldID(clazz, "mAssociationDesc", "I");
     if (field_objectInfo_associationDesc == NULL) {
-        LOGE("Can't find MtpObjectInfo.mAssociationDesc");
+        ALOGE("Can't find MtpObjectInfo.mAssociationDesc");
         return -1;
     }
     field_objectInfo_sequenceNumber = env->GetFieldID(clazz, "mSequenceNumber", "I");
     if (field_objectInfo_sequenceNumber == NULL) {
-        LOGE("Can't find MtpObjectInfo.mSequenceNumber");
+        ALOGE("Can't find MtpObjectInfo.mSequenceNumber");
         return -1;
     }
     field_objectInfo_name = env->GetFieldID(clazz, "mName", "Ljava/lang/String;");
     if (field_objectInfo_name == NULL) {
-        LOGE("Can't find MtpObjectInfo.mName");
+        ALOGE("Can't find MtpObjectInfo.mName");
         return -1;
     }
     field_objectInfo_dateCreated = env->GetFieldID(clazz, "mDateCreated", "J");
     if (field_objectInfo_dateCreated == NULL) {
-        LOGE("Can't find MtpObjectInfo.mDateCreated");
+        ALOGE("Can't find MtpObjectInfo.mDateCreated");
         return -1;
     }
     field_objectInfo_dateModified = env->GetFieldID(clazz, "mDateModified", "J");
     if (field_objectInfo_dateModified == NULL) {
-        LOGE("Can't find MtpObjectInfo.mDateModified");
+        ALOGE("Can't find MtpObjectInfo.mDateModified");
         return -1;
     }
     field_objectInfo_keywords = env->GetFieldID(clazz, "mKeywords", "Ljava/lang/String;");
     if (field_objectInfo_keywords == NULL) {
-        LOGE("Can't find MtpObjectInfo.mKeywords");
+        ALOGE("Can't find MtpObjectInfo.mKeywords");
         return -1;
     }
     clazz_objectInfo = (jclass)env->NewGlobalRef(clazz);
 
     clazz = env->FindClass("android/mtp/MtpDevice");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpDevice");
+        ALOGE("Can't find android/mtp/MtpDevice");
         return -1;
     }
     field_context = env->GetFieldID(clazz, "mNativeContext", "I");
     if (field_context == NULL) {
-        LOGE("Can't find MtpDevice.mNativeContext");
+        ALOGE("Can't find MtpDevice.mNativeContext");
         return -1;
     }
 
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index 107db08..5252a3a 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -65,7 +65,7 @@
                 usePtp, AID_MEDIA_RW, 0664, 0775);
         env->SetIntField(thiz, field_MtpServer_nativeContext, (int)server);
     } else {
-        LOGE("could not open MTP driver, errno: %d", errno);
+        ALOGE("could not open MTP driver, errno: %d", errno);
     }
 }
 
@@ -76,7 +76,7 @@
     if (server)
         server->run();
     else
-        LOGE("server is null in run");
+        ALOGE("server is null in run");
 }
 
 static void
@@ -89,7 +89,7 @@
         delete server;
         env->SetIntField(thiz, field_MtpServer_nativeContext, 0);
     } else {
-        LOGE("server is null in cleanup");
+        ALOGE("server is null in cleanup");
     }
 }
 
@@ -102,7 +102,7 @@
     if (server)
         server->sendObjectAdded(handle);
     else
-        LOGE("server is null in send_object_added");
+        ALOGE("server is null in send_object_added");
 }
 
 static void
@@ -114,7 +114,7 @@
     if (server)
         server->sendObjectRemoved(handle);
     else
-        LOGE("server is null in send_object_removed");
+        ALOGE("server is null in send_object_removed");
 }
 
 static void
@@ -145,7 +145,7 @@
             }
         }
     } else {
-        LOGE("server is null in add_storage");
+        ALOGE("server is null in add_storage");
     }
 }
 
@@ -162,7 +162,7 @@
             delete storage;
         }
     } else
-        LOGE("server is null in remove_storage");
+        ALOGE("server is null in remove_storage");
 }
 
 // ----------------------------------------------------------------------------
@@ -187,48 +187,48 @@
 
     clazz = env->FindClass("android/mtp/MtpStorage");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpStorage");
+        ALOGE("Can't find android/mtp/MtpStorage");
         return -1;
     }
     field_MtpStorage_storageId = env->GetFieldID(clazz, "mStorageId", "I");
     if (field_MtpStorage_storageId == NULL) {
-        LOGE("Can't find MtpStorage.mStorageId");
+        ALOGE("Can't find MtpStorage.mStorageId");
         return -1;
     }
     field_MtpStorage_path = env->GetFieldID(clazz, "mPath", "Ljava/lang/String;");
     if (field_MtpStorage_path == NULL) {
-        LOGE("Can't find MtpStorage.mPath");
+        ALOGE("Can't find MtpStorage.mPath");
         return -1;
     }
     field_MtpStorage_description = env->GetFieldID(clazz, "mDescription", "Ljava/lang/String;");
     if (field_MtpStorage_description == NULL) {
-        LOGE("Can't find MtpStorage.mDescription");
+        ALOGE("Can't find MtpStorage.mDescription");
         return -1;
     }
     field_MtpStorage_reserveSpace = env->GetFieldID(clazz, "mReserveSpace", "J");
     if (field_MtpStorage_reserveSpace == NULL) {
-        LOGE("Can't find MtpStorage.mReserveSpace");
+        ALOGE("Can't find MtpStorage.mReserveSpace");
         return -1;
     }
     field_MtpStorage_removable = env->GetFieldID(clazz, "mRemovable", "Z");
     if (field_MtpStorage_removable == NULL) {
-        LOGE("Can't find MtpStorage.mRemovable");
+        ALOGE("Can't find MtpStorage.mRemovable");
         return -1;
     }
     field_MtpStorage_maxFileSize = env->GetFieldID(clazz, "mMaxFileSize", "J");
     if (field_MtpStorage_maxFileSize == NULL) {
-        LOGE("Can't find MtpStorage.mMaxFileSize");
+        ALOGE("Can't find MtpStorage.mMaxFileSize");
         return -1;
     }
 
     clazz = env->FindClass("android/mtp/MtpServer");
     if (clazz == NULL) {
-        LOGE("Can't find android/mtp/MtpServer");
+        ALOGE("Can't find android/mtp/MtpServer");
         return -1;
     }
     field_MtpServer_nativeContext = env->GetFieldID(clazz, "mNativeContext", "I");
     if (field_MtpServer_nativeContext == NULL) {
-        LOGE("Can't find MtpServer.mNativeContext");
+        ALOGE("Can't find MtpServer.mNativeContext");
         return -1;
     }
 
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index d517a58..3b325b7 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -112,14 +112,14 @@
             callbackInfo->audioEffect_class);
 
     if (!user || !env) {
-        LOGW("effectCallback error user %p, env %p", user, env);
+        ALOGW("effectCallback error user %p, env %p", user, env);
         return;
     }
 
     switch (event) {
     case AudioEffect::EVENT_CONTROL_STATUS_CHANGED:
         if (info == 0) {
-            LOGW("EVENT_CONTROL_STATUS_CHANGED info == NULL");
+            ALOGW("EVENT_CONTROL_STATUS_CHANGED info == NULL");
             goto effectCallback_Exit;
         }
         param = *(bool *)info;
@@ -128,7 +128,7 @@
         break;
     case AudioEffect::EVENT_ENABLE_STATUS_CHANGED:
         if (info == 0) {
-            LOGW("EVENT_ENABLE_STATUS_CHANGED info == NULL");
+            ALOGW("EVENT_ENABLE_STATUS_CHANGED info == NULL");
             goto effectCallback_Exit;
         }
         param = *(bool *)info;
@@ -137,7 +137,7 @@
         break;
     case AudioEffect::EVENT_PARAMETER_CHANGED:
         if (info == 0) {
-            LOGW("EVENT_PARAMETER_CHANGED info == NULL");
+            ALOGW("EVENT_PARAMETER_CHANGED info == NULL");
             goto effectCallback_Exit;
         }
         p = (effect_param_t *)info;
@@ -149,7 +149,7 @@
         size = arg1 + p->vsize;
         array = env->NewByteArray(size);
         if (array == NULL) {
-            LOGE("effectCallback: Couldn't allocate byte array for parameter data");
+            ALOGE("effectCallback: Couldn't allocate byte array for parameter data");
             goto effectCallback_Exit;
         }
         bytes = env->GetByteArrayElements(array, NULL);
@@ -159,7 +159,7 @@
         ALOGV("EVENT_PARAMETER_CHANGED");
        break;
     case AudioEffect::EVENT_ERROR:
-        LOGW("EVENT_ERROR");
+        ALOGW("EVENT_ERROR");
         break;
     }
 
@@ -195,7 +195,7 @@
     // Get the AudioEffect class
     jclass clazz = env->FindClass(kClassPathName);
     if (clazz == NULL) {
-        LOGE("Can't find %s", kClassPathName);
+        ALOGE("Can't find %s", kClassPathName);
         return;
     }
 
@@ -206,7 +206,7 @@
             fields.clazzEffect,
             "postEventFromNative", "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (fields.midPostNativeEvent == NULL) {
-        LOGE("Can't find AudioEffect.%s", "postEventFromNative");
+        ALOGE("Can't find AudioEffect.%s", "postEventFromNative");
         return;
     }
 
@@ -216,7 +216,7 @@
             fields.clazzEffect,
             "mNativeAudioEffect", "I");
     if (fields.fidNativeAudioEffect == NULL) {
-        LOGE("Can't find AudioEffect.%s", "mNativeAudioEffect");
+        ALOGE("Can't find AudioEffect.%s", "mNativeAudioEffect");
         return;
     }
     //      fidJniData;
@@ -224,13 +224,13 @@
             fields.clazzEffect,
             "mJniData", "I");
     if (fields.fidJniData == NULL) {
-        LOGE("Can't find AudioEffect.%s", "mJniData");
+        ALOGE("Can't find AudioEffect.%s", "mJniData");
         return;
     }
 
     clazz = env->FindClass("android/media/audiofx/AudioEffect$Descriptor");
     if (clazz == NULL) {
-        LOGE("Can't find android/media/audiofx/AudioEffect$Descriptor class");
+        ALOGE("Can't find android/media/audiofx/AudioEffect$Descriptor class");
         return;
     }
     fields.clazzDesc = (jclass)env->NewGlobalRef(clazz);
@@ -241,7 +241,7 @@
                     "<init>",
                     "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
     if (fields.midDescCstor == NULL) {
-        LOGE("Can't find android/media/audiofx/AudioEffect$Descriptor class constructor");
+        ALOGE("Can't find android/media/audiofx/AudioEffect$Descriptor class constructor");
         return;
     }
 }
@@ -290,7 +290,7 @@
 
     lpJniStorage = new AudioEffectJniStorage();
     if (lpJniStorage == NULL) {
-        LOGE("setup: Error creating JNI Storage");
+        ALOGE("setup: Error creating JNI Storage");
         goto setup_failure;
     }
 
@@ -305,7 +305,7 @@
             &lpJniStorage->mCallbackData);
 
     if (jId == NULL) {
-        LOGE("setup: NULL java array for id pointer");
+        ALOGE("setup: NULL java array for id pointer");
         lStatus = AUDIOEFFECT_ERROR_BAD_VALUE;
         goto setup_failure;
     }
@@ -319,19 +319,19 @@
                                     sessionId,
                                     0);
     if (lpAudioEffect == NULL) {
-        LOGE("Error creating AudioEffect");
+        ALOGE("Error creating AudioEffect");
         goto setup_failure;
     }
 
     lStatus = translateError(lpAudioEffect->initCheck());
     if (lStatus != AUDIOEFFECT_SUCCESS && lStatus != AUDIOEFFECT_ERROR_ALREADY_EXISTS) {
-        LOGE("AudioEffect initCheck failed %d", lStatus);
+        ALOGE("AudioEffect initCheck failed %d", lStatus);
         goto setup_failure;
     }
 
     nId = (jint *) env->GetPrimitiveArrayCritical(jId, NULL);
     if (nId == NULL) {
-        LOGE("setup: Error retrieving id pointer");
+        ALOGE("setup: Error retrieving id pointer");
         lStatus = AUDIOEFFECT_ERROR_BAD_VALUE;
         goto setup_failure;
     }
@@ -382,7 +382,7 @@
     env->DeleteLocalRef(jdescName);
     env->DeleteLocalRef(jdescImplementor);
     if (jdesc == NULL) {
-        LOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
+        ALOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
         goto setup_failure;
     }
 
@@ -534,14 +534,14 @@
     // get the pointer for the param from the java array
     lpParam = (jbyte *) env->GetPrimitiveArrayCritical(pJavaParam, NULL);
     if (lpParam == NULL) {
-        LOGE("setParameter: Error retrieving param pointer");
+        ALOGE("setParameter: Error retrieving param pointer");
         goto setParameter_Exit;
     }
 
     // get the pointer for the value from the java array
     lpValue = (jbyte *) env->GetPrimitiveArrayCritical(pJavaValue, NULL);
     if (lpValue == NULL) {
-        LOGE("setParameter: Error retrieving value pointer");
+        ALOGE("setParameter: Error retrieving value pointer");
         goto setParameter_Exit;
     }
 
@@ -597,14 +597,14 @@
     // get the pointer for the param from the java array
     lpParam = (jbyte *) env->GetPrimitiveArrayCritical(pJavaParam, NULL);
     if (lpParam == NULL) {
-        LOGE("getParameter: Error retrieving param pointer");
+        ALOGE("getParameter: Error retrieving param pointer");
         goto getParameter_Exit;
     }
 
     // get the pointer for the value from the java array
     lpValue = (jbyte *) env->GetPrimitiveArrayCritical(pJavaValue, NULL);
     if (lpValue == NULL) {
-        LOGE("getParameter: Error retrieving value pointer");
+        ALOGE("getParameter: Error retrieving value pointer");
         goto getParameter_Exit;
     }
 
@@ -665,7 +665,7 @@
     if (cmdSize != 0) {
         pCmdData = (jbyte *) env->GetPrimitiveArrayCritical(jCmdData, NULL);
         if (pCmdData == NULL) {
-            LOGE("setParameter: Error retrieving command pointer");
+            ALOGE("setParameter: Error retrieving command pointer");
             goto command_Exit;
         }
     }
@@ -674,7 +674,7 @@
     if (replySize != 0 && jReplyData != NULL) {
         pReplyData = (jbyte *) env->GetPrimitiveArrayCritical(jReplyData, NULL);
         if (pReplyData == NULL) {
-            LOGE("setParameter: Error retrieving reply pointer");
+            ALOGE("setParameter: Error retrieving reply pointer");
             goto command_Exit;
         }
     }
@@ -759,7 +759,7 @@
         env->DeleteLocalRef(jdescName);
         env->DeleteLocalRef(jdescImplementor);
         if (jdesc == NULL) {
-            LOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
+            ALOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
             goto queryEffects_failure;
         }
 
@@ -847,7 +847,7 @@
         env->DeleteLocalRef(jdescName);
         env->DeleteLocalRef(jdescImplementor);
         if (jdesc == NULL) {
-            LOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
+            ALOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
             env->DeleteLocalRef(ret);
             return NULL;;
         }
@@ -895,18 +895,18 @@
     jint result = -1;
 
     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
-        LOGE("ERROR: GetEnv failed\n");
+        ALOGE("ERROR: GetEnv failed\n");
         goto bail;
     }
     assert(env != NULL);
 
     if (register_android_media_AudioEffect(env) < 0) {
-        LOGE("ERROR: AudioEffect native registration failed\n");
+        ALOGE("ERROR: AudioEffect native registration failed\n");
         goto bail;
     }
 
     if (register_android_media_visualizer(env) < 0) {
-        LOGE("ERROR: Visualizer native registration failed\n");
+        ALOGE("ERROR: Visualizer native registration failed\n");
         goto bail;
     }
 
diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp
index b64505c..ecd4d07 100644
--- a/media/jni/audioeffect/android_media_Visualizer.cpp
+++ b/media/jni/audioeffect/android_media_Visualizer.cpp
@@ -113,7 +113,7 @@
             callbackInfo->visualizer_class);
 
     if (!user || !env) {
-        LOGW("captureCallback error user %p, env %p", user, env);
+        ALOGW("captureCallback error user %p, env %p", user, env);
         return;
     }
 
@@ -185,7 +185,7 @@
     // Get the Visualizer class
     jclass clazz = env->FindClass(kClassPathName);
     if (clazz == NULL) {
-        LOGE("Can't find %s", kClassPathName);
+        ALOGE("Can't find %s", kClassPathName);
         return;
     }
 
@@ -196,7 +196,7 @@
             fields.clazzEffect,
             "postEventFromNative", "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (fields.midPostNativeEvent == NULL) {
-        LOGE("Can't find Visualizer.%s", "postEventFromNative");
+        ALOGE("Can't find Visualizer.%s", "postEventFromNative");
         return;
     }
 
@@ -206,7 +206,7 @@
             fields.clazzEffect,
             "mNativeVisualizer", "I");
     if (fields.fidNativeVisualizer == NULL) {
-        LOGE("Can't find Visualizer.%s", "mNativeVisualizer");
+        ALOGE("Can't find Visualizer.%s", "mNativeVisualizer");
         return;
     }
     //      fidJniData;
@@ -214,7 +214,7 @@
             fields.clazzEffect,
             "mJniData", "I");
     if (fields.fidJniData == NULL) {
-        LOGE("Can't find Visualizer.%s", "mJniData");
+        ALOGE("Can't find Visualizer.%s", "mJniData");
         return;
     }
 
@@ -233,7 +233,7 @@
 
     lpJniStorage = new visualizerJniStorage();
     if (lpJniStorage == NULL) {
-        LOGE("setup: Error creating JNI Storage");
+        ALOGE("setup: Error creating JNI Storage");
         goto setup_failure;
     }
 
@@ -248,7 +248,7 @@
             &lpJniStorage->mCallbackData);
 
     if (jId == NULL) {
-        LOGE("setup: NULL java array for id pointer");
+        ALOGE("setup: NULL java array for id pointer");
         lStatus = VISUALIZER_ERROR_BAD_VALUE;
         goto setup_failure;
     }
@@ -259,19 +259,19 @@
                                   NULL,
                                   sessionId);
     if (lpVisualizer == NULL) {
-        LOGE("Error creating Visualizer");
+        ALOGE("Error creating Visualizer");
         goto setup_failure;
     }
 
     lStatus = translateError(lpVisualizer->initCheck());
     if (lStatus != VISUALIZER_SUCCESS && lStatus != VISUALIZER_ERROR_ALREADY_EXISTS) {
-        LOGE("Visualizer initCheck failed %d", lStatus);
+        ALOGE("Visualizer initCheck failed %d", lStatus);
         goto setup_failure;
     }
 
     nId = (jint *) env->GetPrimitiveArrayCritical(jId, NULL);
     if (nId == NULL) {
-        LOGE("setup: Error retrieving id pointer");
+        ALOGE("setup: Error retrieving id pointer");
         lStatus = VISUALIZER_ERROR_BAD_VALUE;
         goto setup_failure;
     }
diff --git a/media/jni/mediaeditor/VideoEditorLogging.h b/media/jni/mediaeditor/VideoEditorLogging.h
index c13f6ff..479d8b6 100755
--- a/media/jni/mediaeditor/VideoEditorLogging.h
+++ b/media/jni/mediaeditor/VideoEditorLogging.h
@@ -29,7 +29,7 @@
 #define VIDEOEDIT_LOG_ALLOCATION                        __android_log_print
 #define VIDEOEDIT_LOG_API                               __android_log_print
 #define VIDEOEDIT_LOG_FUNCTION                          __android_log_print
-#define VIDEOEDIT_LOG_RESULT(x,y, ...)                     LOGI(y, __VA_ARGS__ )
+#define VIDEOEDIT_LOG_RESULT(x,y, ...)                     ALOGI(y, __VA_ARGS__ )
 #define VIDEOEDIT_LOG_SETTING                           __android_log_print
 #define VIDEOEDIT_LOG_EDIT_SETTINGS(m_settings)         videoEditClasses_logEditSettings\
                                                (m_settings, VIDEOEDIT_LOG_INDENTATION)
diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp
index 7083a91c..c84a883 100755
--- a/media/jni/mediaeditor/VideoEditorMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorMain.cpp
@@ -441,7 +441,7 @@
                 if (extPos != NULL) {
                     *extPos = '\0';
                 } else {
-                    LOGE("ERROR the overlay file is incorrect");
+                    ALOGE("ERROR the overlay file is incorrect");
                 }
 
                 strcat(pContext->mOverlayFileName, ".png");
@@ -518,7 +518,7 @@
              // For these case we do not check the profile and level
              return M4NO_ERROR;
         default :
-            LOGE("checkClipVideoProfileAndLevel unsupport Video format %ld", format);
+            ALOGE("checkClipVideoProfileAndLevel unsupport Video format %ld", format);
             break;
     }
 
@@ -971,7 +971,7 @@
         if (extPos != NULL) {
             *extPos = '\0';
         } else {
-            LOGE("ERROR the overlay file is incorrect");
+            ALOGE("ERROR the overlay file is incorrect");
         }
 
         strcat(tmpOverlayFilename, ".png");
@@ -1510,7 +1510,7 @@
 
     M4OSA_UInt8 *pTmpData = (M4OSA_UInt8*) M4OSA_32bitAlignedMalloc(frameSize_argb, M4VS, (M4OSA_Char*)"Image argb data");
     if (pTmpData == M4OSA_NULL) {
-        LOGE("Failed to allocate memory for Image clip");
+        ALOGE("Failed to allocate memory for Image clip");
         return M4ERR_ALLOC;
     }
 
@@ -1520,7 +1520,7 @@
 
     if ((lerr != M4NO_ERROR) || (lImageFileFp == M4OSA_NULL))
     {
-        LOGE("removeAlphafromRGB8888: Can not open the file ");
+        ALOGE("removeAlphafromRGB8888: Can not open the file ");
         free(pTmpData);
         return M4ERR_FILE_NOT_FOUND;
     }
@@ -1529,7 +1529,7 @@
     lerr = M4OSA_fileReadData(lImageFileFp, (M4OSA_MemAddr8)pTmpData, &frameSize_argb);
     if (lerr != M4NO_ERROR)
     {
-        LOGE("removeAlphafromRGB8888: can not read the data ");
+        ALOGE("removeAlphafromRGB8888: can not read the data ");
         M4OSA_fileReadClose(lImageFileFp);
         free(pTmpData);
         return lerr;
@@ -1545,7 +1545,7 @@
 
     if (pFramingCtx->FramingRgb == M4OSA_NULL)
     {
-        LOGE("Failed to allocate memory for Image clip");
+        ALOGE("Failed to allocate memory for Image clip");
         free(pTmpData);
         return M4ERR_ALLOC;
     }
@@ -2904,7 +2904,7 @@
                 // Other states are unexpected
                 else {
                     result = M4ERR_STATE;
-                    LOGE("videoEditor_processClip ITEM %d State ERROR 0x%x",
+                    ALOGE("videoEditor_processClip ITEM %d State ERROR 0x%x",
                         unuseditemID, (unsigned int) result);
                 }
             }
@@ -2916,13 +2916,13 @@
                 pContext->state = errorState;
 
                 // Log the result.
-                LOGE("videoEditor_processClip ITEM %d Processing ERROR 0x%x",
+                ALOGE("videoEditor_processClip ITEM %d Processing ERROR 0x%x",
                     unuseditemID, (unsigned int) result);
             }
     }
 
     // Return the error result
-    LOGE("videoEditor_processClip ITEM %d END 0x%x", unuseditemID, (unsigned int) result);
+    ALOGE("videoEditor_processClip ITEM %d END 0x%x", unuseditemID, (unsigned int) result);
     return result;
 }
 /*+ PROGRESS CB */
diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp
index 40db37f..14a5309 100644
--- a/media/jni/soundpool/SoundPool.cpp
+++ b/media/jni/soundpool/SoundPool.cpp
@@ -52,7 +52,7 @@
     else if (mMaxChannels > 32) {
         mMaxChannels = 32;
     }
-    LOGW_IF(maxChannels != mMaxChannels, "App requested %d channels", maxChannels);
+    ALOGW_IF(maxChannels != mMaxChannels, "App requested %d channels", maxChannels);
 
     mQuit = false;
     mDecodeThread = 0;
@@ -255,7 +255,7 @@
     // is sample ready?
     sample = findSample(sampleID);
     if ((sample == 0) || (sample->state() != Sample::READY)) {
-        LOGW("  sample %d not READY", sampleID);
+        ALOGW("  sample %d not READY", sampleID);
         return 0;
     }
 
@@ -508,19 +508,19 @@
         mFd = -1;
     }
     if (p == 0) {
-        LOGE("Unable to load sample: %s", mUrl);
+        ALOGE("Unable to load sample: %s", mUrl);
         return -1;
     }
     ALOGV("pointer = %p, size = %u, sampleRate = %u, numChannels = %d",
             p->pointer(), p->size(), sampleRate, numChannels);
 
     if (sampleRate > kMaxSampleRate) {
-       LOGE("Sample rate (%u) out of range", sampleRate);
+       ALOGE("Sample rate (%u) out of range", sampleRate);
        return - 1;
     }
 
     if ((numChannels < 1) || (numChannels > 2)) {
-        LOGE("Sample channel count (%d) out of range", numChannels);
+        ALOGE("Sample channel count (%d) out of range", numChannels);
         return - 1;
     }
 
@@ -616,7 +616,7 @@
         oldTrack = mAudioTrack;
         status = newTrack->initCheck();
         if (status != NO_ERROR) {
-            LOGE("Error creating AudioTrack");
+            ALOGE("Error creating AudioTrack");
             goto exit;
         }
         ALOGV("setVolume %p", newTrack);
diff --git a/media/jni/soundpool/SoundPoolThread.cpp b/media/jni/soundpool/SoundPoolThread.cpp
index bbb56ff..ba3b482 100644
--- a/media/jni/soundpool/SoundPoolThread.cpp
+++ b/media/jni/soundpool/SoundPoolThread.cpp
@@ -91,7 +91,7 @@
             doLoadSample(msg.mData);
             break;
         default:
-            LOGW("run: Unrecognized message %d\n",
+            ALOGW("run: Unrecognized message %d\n",
                     msg.mMessageType);
             break;
         }
diff --git a/media/jni/soundpool/android_media_SoundPool.cpp b/media/jni/soundpool/android_media_SoundPool.cpp
index f86892f..fe1c20a 100644
--- a/media/jni/soundpool/android_media_SoundPool.cpp
+++ b/media/jni/soundpool/android_media_SoundPool.cpp
@@ -288,27 +288,27 @@
     jclass clazz;
 
     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
-        LOGE("ERROR: GetEnv failed\n");
+        ALOGE("ERROR: GetEnv failed\n");
         goto bail;
     }
     assert(env != NULL);
 
     clazz = env->FindClass(kClassPathName);
     if (clazz == NULL) {
-        LOGE("Can't find %s", kClassPathName);
+        ALOGE("Can't find %s", kClassPathName);
         goto bail;
     }
 
     fields.mNativeContext = env->GetFieldID(clazz, "mNativeContext", "I");
     if (fields.mNativeContext == NULL) {
-        LOGE("Can't find SoundPool.mNativeContext");
+        ALOGE("Can't find SoundPool.mNativeContext");
         goto bail;
     }
 
     fields.mPostEvent = env->GetStaticMethodID(clazz, "postEventFromNative",
                                                "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (fields.mPostEvent == NULL) {
-        LOGE("Can't find android/media/SoundPool.postEventFromNative");
+        ALOGE("Can't find android/media/SoundPool.postEventFromNative");
         goto bail;
     }
 
diff --git a/media/libeffects/factory/EffectsFactory.c b/media/libeffects/factory/EffectsFactory.c
index ee2279a..9f6599f 100644
--- a/media/libeffects/factory/EffectsFactory.c
+++ b/media/libeffects/factory/EffectsFactory.c
@@ -279,7 +279,7 @@
     ret = init();
 
     if (ret < 0) {
-        LOGW("EffectCreate() init error: %d", ret);
+        ALOGW("EffectCreate() init error: %d", ret);
         return ret;
     }
 
@@ -293,7 +293,7 @@
     // create effect in library
     ret = l->desc->create_effect(uuid, sessionId, ioId, &itfe);
     if (ret != 0) {
-        LOGW("EffectCreate() library %s: could not create fx %s, error %d", l->name, d->name, ret);
+        ALOGW("EffectCreate() library %s: could not create fx %s, error %d", l->name, d->name, ret);
         goto exit;
     }
 
@@ -359,7 +359,7 @@
 
     // release effect in library
     if (fx->lib == NULL) {
-        LOGW("EffectRelease() fx %p library already unloaded", handle);
+        ALOGW("EffectRelease() fx %p library already unloaded", handle);
     } else {
         pthread_mutex_lock(&fx->lib->lock);
         fx->lib->desc->release_effect(fx->subItfe);
@@ -456,24 +456,24 @@
 
     hdl = dlopen(node->value, RTLD_NOW);
     if (hdl == NULL) {
-        LOGW("loadLibrary() failed to open %s", node->value);
+        ALOGW("loadLibrary() failed to open %s", node->value);
         goto error;
     }
 
     desc = (audio_effect_library_t *)dlsym(hdl, AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR);
     if (desc == NULL) {
-        LOGW("loadLibrary() could not find symbol %s", AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR);
+        ALOGW("loadLibrary() could not find symbol %s", AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR);
         goto error;
     }
 
     if (AUDIO_EFFECT_LIBRARY_TAG != desc->tag) {
-        LOGW("getLibrary() bad tag %08x in lib info struct", desc->tag);
+        ALOGW("getLibrary() bad tag %08x in lib info struct", desc->tag);
         goto error;
     }
 
     if (EFFECT_API_VERSION_MAJOR(desc->version) !=
             EFFECT_API_VERSION_MAJOR(EFFECT_LIBRARY_API_VERSION)) {
-        LOGW("loadLibrary() bad lib version %08x", desc->version);
+        ALOGW("loadLibrary() bad lib version %08x", desc->version);
         goto error;
     }
 
@@ -534,7 +534,7 @@
 
     l = getLibrary(node->value);
     if (l == NULL) {
-        LOGW("loadEffect() could not get library %s", node->value);
+        ALOGW("loadEffect() could not get library %s", node->value);
         return -EINVAL;
     }
 
@@ -543,7 +543,7 @@
         return -EINVAL;
     }
     if (stringToUuid(node->value, &uuid) != 0) {
-        LOGW("loadEffect() invalid uuid %s", node->value);
+        ALOGW("loadEffect() invalid uuid %s", node->value);
         return -EINVAL;
     }
 
@@ -551,7 +551,7 @@
     if (l->desc->get_descriptor(&uuid, d) != 0) {
         char s[40];
         uuidToString(&uuid, s, 40);
-        LOGW("Error querying effect %s on lib %s", s, l->name);
+        ALOGW("Error querying effect %s on lib %s", s, l->name);
         free(d);
         return -EINVAL;
     }
@@ -562,7 +562,7 @@
 #endif
     if (EFFECT_API_VERSION_MAJOR(d->apiVersion) !=
             EFFECT_API_VERSION_MAJOR(EFFECT_CONTROL_API_VERSION)) {
-        LOGW("Bad API version %08x on lib %s", d->apiVersion, l->name);
+        ALOGW("Bad API version %08x on lib %s", d->apiVersion, l->name);
         free(d);
         return -EINVAL;
     }
diff --git a/media/libeffects/preprocessing/PreProcessing.cpp b/media/libeffects/preprocessing/PreProcessing.cpp
index c99552b..e988e06 100755
--- a/media/libeffects/preprocessing/PreProcessing.cpp
+++ b/media/libeffects/preprocessing/PreProcessing.cpp
@@ -240,7 +240,7 @@
     webrtc::GainControl *agc = effect->session->apm->gain_control();
     ALOGV("AgcCreate got agc %p", agc);
     if (agc == NULL) {
-        LOGW("AgcCreate Error");
+        ALOGW("AgcCreate Error");
         return -ENOMEM;
     }
     effect->engine = static_cast<preproc_fx_handle_t>(agc);
@@ -280,7 +280,7 @@
         break;
 
     default:
-        LOGW("AgcGetParameter() unknown param %08x", param);
+        ALOGW("AgcGetParameter() unknown param %08x", param);
         status = -EINVAL;
         break;
     }
@@ -305,7 +305,7 @@
         pProperties->limiterEnabled = (bool)agc->is_limiter_enabled();
         break;
     default:
-        LOGW("AgcGetParameter() unknown param %d", param);
+        ALOGW("AgcGetParameter() unknown param %d", param);
         status = -EINVAL;
         break;
     }
@@ -344,7 +344,7 @@
         status = agc->enable_limiter(pProperties->limiterEnabled);
         break;
     default:
-        LOGW("AgcSetParameter() unknown param %08x value %08x", param, *(uint32_t *)pValue);
+        ALOGW("AgcSetParameter() unknown param %08x value %08x", param, *(uint32_t *)pValue);
         status = -EINVAL;
         break;
     }
@@ -403,7 +403,7 @@
     webrtc::EchoControlMobile *aec = effect->session->apm->echo_control_mobile();
     ALOGV("AecCreate got aec %p", aec);
     if (aec == NULL) {
-        LOGW("AgcCreate Error");
+        ALOGW("AgcCreate Error");
         return -ENOMEM;
     }
     effect->engine = static_cast<preproc_fx_handle_t>(aec);
@@ -429,7 +429,7 @@
         ALOGV("AecGetParameter() echo delay %d us", *(uint32_t *)pValue);
         break;
     default:
-        LOGW("AecGetParameter() unknown param %08x value %08x", param, *(uint32_t *)pValue);
+        ALOGW("AecGetParameter() unknown param %08x value %08x", param, *(uint32_t *)pValue);
         status = -EINVAL;
         break;
     }
@@ -449,7 +449,7 @@
         ALOGV("AecSetParameter() echo delay %d us, status %d", value, status);
         break;
     default:
-        LOGW("AecSetParameter() unknown param %08x value %08x", param, *(uint32_t *)pValue);
+        ALOGW("AecSetParameter() unknown param %08x value %08x", param, *(uint32_t *)pValue);
         status = -EINVAL;
         break;
     }
@@ -522,7 +522,7 @@
     webrtc::NoiseSuppression *ns = effect->session->apm->noise_suppression();
     ALOGV("NsCreate got ns %p", ns);
     if (ns == NULL) {
-        LOGW("AgcCreate Error");
+        ALOGW("AgcCreate Error");
         return -ENOMEM;
     }
     effect->engine = static_cast<preproc_fx_handle_t>(ns);
@@ -616,7 +616,7 @@
         case PREPROC_EFFECT_STATE_CREATED:
         case PREPROC_EFFECT_STATE_ACTIVE:
         case PREPROC_EFFECT_STATE_CONFIG:
-            LOGE("Effect_SetState invalid transition");
+            ALOGE("Effect_SetState invalid transition");
             status = -ENOSYS;
             break;
         default:
@@ -626,7 +626,7 @@
     case PREPROC_EFFECT_STATE_CONFIG:
         switch(effect->state) {
         case PREPROC_EFFECT_STATE_INIT:
-            LOGE("Effect_SetState invalid transition");
+            ALOGE("Effect_SetState invalid transition");
             status = -ENOSYS;
             break;
         case PREPROC_EFFECT_STATE_ACTIVE:
@@ -645,7 +645,7 @@
         case PREPROC_EFFECT_STATE_INIT:
         case PREPROC_EFFECT_STATE_CREATED:
         case PREPROC_EFFECT_STATE_ACTIVE:
-            LOGE("Effect_SetState invalid transition");
+            ALOGE("Effect_SetState invalid transition");
             status = -ENOSYS;
             break;
         case PREPROC_EFFECT_STATE_CONFIG:
@@ -730,7 +730,7 @@
     if (session->createdMsk == 0) {
         session->apm = webrtc::AudioProcessing::Create(session->io);
         if (session->apm == NULL) {
-            LOGW("Session_CreateEffect could not get apm engine");
+            ALOGW("Session_CreateEffect could not get apm engine");
             goto error;
         }
         session->apm->set_sample_rate_hz(kPreprocDefaultSr);
@@ -738,12 +738,12 @@
         session->apm->set_num_reverse_channels(kPreProcDefaultCnl);
         session->procFrame = new webrtc::AudioFrame();
         if (session->procFrame == NULL) {
-            LOGW("Session_CreateEffect could not allocate audio frame");
+            ALOGW("Session_CreateEffect could not allocate audio frame");
             goto error;
         }
         session->revFrame = new webrtc::AudioFrame();
         if (session->revFrame == NULL) {
-            LOGW("Session_CreateEffect could not allocate reverse audio frame");
+            ALOGW("Session_CreateEffect could not allocate reverse audio frame");
             goto error;
         }
         session->apmSamplingRate = kPreprocDefaultSr;
@@ -794,7 +794,7 @@
 int Session_ReleaseEffect(preproc_session_t *session,
                           preproc_effect_t *fx)
 {
-    LOGW_IF(Effect_Release(fx) != 0, " Effect_Release() failed for proc ID %d", fx->procId);
+    ALOGW_IF(Effect_Release(fx) != 0, " Effect_Release() failed for proc ID %d", fx->procId);
     session->createdMsk &= ~(1<<fx->procId);
     if (session->createdMsk == 0) {
         webrtc::AudioProcessing::Destroy(session->apm);
@@ -904,7 +904,7 @@
                                                     RESAMPLER_QUALITY,
                                                     &error);
         if (session->inResampler == NULL) {
-            LOGW("Session_SetConfig Cannot create speex resampler: %s",
+            ALOGW("Session_SetConfig Cannot create speex resampler: %s",
                  speex_resampler_strerror(error));
             return -EINVAL;
         }
@@ -914,7 +914,7 @@
                                                     RESAMPLER_QUALITY,
                                                     &error);
         if (session->outResampler == NULL) {
-            LOGW("Session_SetConfig Cannot create speex resampler: %s",
+            ALOGW("Session_SetConfig Cannot create speex resampler: %s",
                  speex_resampler_strerror(error));
             speex_resampler_destroy(session->inResampler);
             session->inResampler = NULL;
@@ -926,7 +926,7 @@
                                                     RESAMPLER_QUALITY,
                                                     &error);
         if (session->revResampler == NULL) {
-            LOGW("Session_SetConfig Cannot create speex resampler: %s",
+            ALOGW("Session_SetConfig Cannot create speex resampler: %s",
                  speex_resampler_strerror(error));
             speex_resampler_destroy(session->inResampler);
             session->inResampler = NULL;
@@ -1105,7 +1105,7 @@
 
     if (inBuffer == NULL  || inBuffer->raw == NULL  ||
             outBuffer == NULL || outBuffer->raw == NULL){
-        LOGW("PreProcessingFx_Process() ERROR bad pointer");
+        ALOGW("PreProcessingFx_Process() ERROR bad pointer");
         return -EINVAL;
     }
 
@@ -1443,13 +1443,13 @@
     int    status = 0;
 
     if (effect == NULL){
-        LOGW("PreProcessingFx_ProcessReverse() ERROR effect == NULL");
+        ALOGW("PreProcessingFx_ProcessReverse() ERROR effect == NULL");
         return -EINVAL;
     }
     preproc_session_t * session = (preproc_session_t *)effect->session;
 
     if (inBuffer == NULL  || inBuffer->raw == NULL){
-        LOGW("PreProcessingFx_ProcessReverse() ERROR bad pointer");
+        ALOGW("PreProcessingFx_ProcessReverse() ERROR bad pointer");
         return -EINVAL;
     }
 
@@ -1585,14 +1585,14 @@
     }
     desc =  PreProc_GetDescriptor(uuid);
     if (desc == NULL) {
-        LOGW("EffectCreate: fx not found uuid: %08x", uuid->timeLow);
+        ALOGW("EffectCreate: fx not found uuid: %08x", uuid->timeLow);
         return -EINVAL;
     }
     procId = UuidToProcId(&desc->type);
 
     session = PreProc_GetSession(procId, sessionId, ioId);
     if (session == NULL) {
-        LOGW("EffectCreate: no more session available");
+        ALOGW("EffectCreate: no more session available");
         return -EINVAL;
     }
 
diff --git a/media/libeffects/testlibs/EffectEqualizer.cpp b/media/libeffects/testlibs/EffectEqualizer.cpp
index 52fbf79..5241660 100644
--- a/media/libeffects/testlibs/EffectEqualizer.cpp
+++ b/media/libeffects/testlibs/EffectEqualizer.cpp
@@ -165,7 +165,7 @@
 
     ret = Equalizer_init(pContext);
     if (ret < 0) {
-        LOGW("EffectLibCreateEffect() init failed");
+        ALOGW("EffectLibCreateEffect() init failed");
         delete pContext;
         return ret;
     }
@@ -735,7 +735,7 @@
     case EFFECT_CMD_SET_AUDIO_MODE:
         break;
     default:
-        LOGW("Equalizer_command invalid command %d",cmdCode);
+        ALOGW("Equalizer_command invalid command %d",cmdCode);
         return -EINVAL;
     }
 
diff --git a/media/libeffects/testlibs/EffectReverb.c b/media/libeffects/testlibs/EffectReverb.c
index 419a41c..ebb72c1 100644
--- a/media/libeffects/testlibs/EffectReverb.c
+++ b/media/libeffects/testlibs/EffectReverb.c
@@ -154,7 +154,7 @@
     }
     ret = Reverb_Init(module, aux, preset);
     if (ret < 0) {
-        LOGW("EffectLibCreateEffect() init failed");
+        ALOGW("EffectLibCreateEffect() init failed");
         free(module);
         return ret;
     }
@@ -405,7 +405,7 @@
         ALOGV("Reverb_Command EFFECT_CMD_SET_AUDIO_MODE: %d", *(uint32_t *)pCmdData);
         break;
     default:
-        LOGW("Reverb_Command invalid command %d",cmdCode);
+        ALOGW("Reverb_Command invalid command %d",cmdCode);
         return -EINVAL;
     }
 
diff --git a/media/libeffects/visualizer/EffectVisualizer.cpp b/media/libeffects/visualizer/EffectVisualizer.cpp
index b2a7a35..5d70a9b 100644
--- a/media/libeffects/visualizer/EffectVisualizer.cpp
+++ b/media/libeffects/visualizer/EffectVisualizer.cpp
@@ -212,7 +212,7 @@
 
     ret = Visualizer_init(pContext);
     if (ret < 0) {
-        LOGW("VisualizerLib_Create() init failed");
+        ALOGW("VisualizerLib_Create() init failed");
         delete pContext;
         return ret;
     }
@@ -472,7 +472,7 @@
         break;
 
     default:
-        LOGW("Visualizer_command invalid command %d",cmdCode);
+        ALOGW("Visualizer_command invalid command %d",cmdCode);
         return -EINVAL;
     }
 
diff --git a/media/libmedia/AudioEffect.cpp b/media/libmedia/AudioEffect.cpp
index 6e53a15..6639d06 100644
--- a/media/libmedia/AudioEffect.cpp
+++ b/media/libmedia/AudioEffect.cpp
@@ -101,18 +101,18 @@
     ALOGV("set %p mUserData: %p uuid: %p timeLow %08x", this, user, type, type ? type->timeLow : 0);
 
     if (mIEffect != 0) {
-        LOGW("Effect already in use");
+        ALOGW("Effect already in use");
         return INVALID_OPERATION;
     }
 
     const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
     if (audioFlinger == 0) {
-        LOGE("set(): Could not get audioflinger");
+        ALOGE("set(): Could not get audioflinger");
         return NO_INIT;
     }
 
     if (type == NULL && uuid == NULL) {
-        LOGW("Must specify at least type or uuid");
+        ALOGW("Must specify at least type or uuid");
         return BAD_VALUE;
     }
 
@@ -138,7 +138,7 @@
             mIEffectClient, priority, io, mSessionId, &mStatus, &mId, &enabled);
 
     if (iEffect == 0 || (mStatus != NO_ERROR && mStatus != ALREADY_EXISTS)) {
-        LOGE("set(): AudioFlinger could not create effect, status: %d", mStatus);
+        ALOGE("set(): AudioFlinger could not create effect, status: %d", mStatus);
         return mStatus;
     }
 
@@ -148,7 +148,7 @@
     cblk = iEffect->getCblk();
     if (cblk == 0) {
         mStatus = NO_INIT;
-        LOGE("Could not get control block");
+        ALOGE("Could not get control block");
         return mStatus;
     }
 
@@ -340,7 +340,7 @@
 
 void AudioEffect::binderDied()
 {
-    LOGW("IEffect died");
+    ALOGW("IEffect died");
     mStatus = NO_INIT;
     if (mCbf) {
         status_t status = DEAD_OBJECT;
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index dd1c6a5..2674070 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -54,12 +54,12 @@
     size_t size = 0;
     if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &size)
             != NO_ERROR) {
-        LOGE("AudioSystem could not query the input buffer size.");
+        ALOGE("AudioSystem could not query the input buffer size.");
         return NO_INIT;
     }
 
     if (size == 0) {
-        LOGE("Unsupported configuration: sampleRate %d, format %d, channelCount %d",
+        ALOGE("Unsupported configuration: sampleRate %d, format %d, channelCount %d",
             sampleRate, format, channelCount);
         return BAD_VALUE;
     }
@@ -153,7 +153,7 @@
     }
     // validate parameters
     if (!audio_is_valid_format(format)) {
-        LOGE("Invalid format");
+        ALOGE("Invalid format");
         return BAD_VALUE;
     }
 
@@ -177,7 +177,7 @@
                                                     (audio_in_acoustics_t)flags,
                                                     mSessionId);
     if (input == 0) {
-        LOGE("Could not get audio input for record source %d", inputSource);
+        ALOGE("Could not get audio input for record source %d", inputSource);
         return BAD_VALUE;
     }
 
@@ -292,7 +292,7 @@
     if (t != 0) {
         if (t->exitPending()) {
             if (t->requestExitAndWait() == WOULD_BLOCK) {
-                LOGE("AudioRecord::start called from thread");
+                ALOGE("AudioRecord::start called from thread");
                 return WOULD_BLOCK;
             }
         }
@@ -472,12 +472,12 @@
                                                        &status);
 
     if (record == 0) {
-        LOGE("AudioFlinger could not create record track, status: %d", status);
+        ALOGE("AudioFlinger could not create record track, status: %d", status);
         return status;
     }
     sp<IMemory> cblk = record->getCblk();
     if (cblk == 0) {
-        LOGE("Could not get control block");
+        ALOGE("Could not get control block");
         return NO_INIT;
     }
     mAudioRecord.clear();
@@ -535,7 +535,7 @@
             if (CC_UNLIKELY(result != NO_ERROR)) {
                 cblk->waitTimeMs += waitTimeMs;
                 if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) {
-                    LOGW(   "obtainBuffer timed out (is the CPU pegged?) "
+                    ALOGW(   "obtainBuffer timed out (is the CPU pegged?) "
                             "user=%08x, server=%08x", cblk->user, cblk->server);
                     cblk->lock.unlock();
                     result = mAudioRecord->start();
@@ -546,7 +546,7 @@
                         result = AudioRecord::restoreRecord_l(cblk);
                     }
                     if (result != NO_ERROR) {
-                        LOGW("obtainBuffer create Track error %d", result);
+                        ALOGW("obtainBuffer create Track error %d", result);
                         cblk->lock.unlock();
                         return result;
                     }
@@ -626,7 +626,7 @@
 
     if (ssize_t(userSize) < 0) {
         // sanity-check. user is most-likely passing an error code.
-        LOGE("AudioRecord::read(buffer=%p, size=%u (%d)",
+        ALOGE("AudioRecord::read(buffer=%p, size=%u (%d)",
                 buffer, userSize, userSize);
         return BAD_VALUE;
     }
@@ -709,7 +709,7 @@
         status_t err = obtainBuffer(&audioBuffer, 1);
         if (err < NO_ERROR) {
             if (err != TIMED_OUT) {
-                LOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");
+                ALOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");
                 return false;
             }
             break;
@@ -764,7 +764,7 @@
     status_t result;
 
     if (!(android_atomic_or(CBLK_RESTORING_ON, &cblk->flags) & CBLK_RESTORING_MSK)) {
-        LOGW("dead IAudioRecord, creating a new one");
+        ALOGW("dead IAudioRecord, creating a new one");
         // signal old cblk condition so that other threads waiting for available buffers stop
         // waiting now
         cblk->cv.broadcast();
@@ -787,13 +787,13 @@
         cblk->cv.broadcast();
     } else {
         if (!(cblk->flags & CBLK_RESTORED_MSK)) {
-            LOGW("dead IAudioRecord, waiting for a new one to be created");
+            ALOGW("dead IAudioRecord, waiting for a new one to be created");
             mLock.unlock();
             result = cblk->cv.waitRelative(cblk->lock, milliseconds(RESTORE_TIMEOUT_MS));
             cblk->lock.unlock();
             mLock.lock();
         } else {
-            LOGW("dead IAudioRecord, already restored");
+            ALOGW("dead IAudioRecord, already restored");
             result = NO_ERROR;
             cblk->lock.unlock();
         }
@@ -810,7 +810,7 @@
     }
     cblk->lock.lock();
 
-    LOGW_IF(result != NO_ERROR, "restoreRecord_l() error %d", result);
+    ALOGW_IF(result != NO_ERROR, "restoreRecord_l() error %d", result);
 
     return result;
 }
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 61d0dad..f7f129c 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -56,7 +56,7 @@
             binder = sm->getService(String16("media.audio_flinger"));
             if (binder != 0)
                 break;
-            LOGW("AudioFlinger not published, waiting...");
+            ALOGW("AudioFlinger not published, waiting...");
             usleep(500000); // 0.5 s
         } while(true);
         if (gAudioFlingerClient == NULL) {
@@ -70,7 +70,7 @@
         gAudioFlinger = interface_cast<IAudioFlinger>(binder);
         gAudioFlinger->registerClient(gAudioFlingerClient);
     }
-    LOGE_IF(gAudioFlinger==0, "no AudioFlinger!?");
+    ALOGE_IF(gAudioFlinger==0, "no AudioFlinger!?");
 
     return gAudioFlinger;
 }
@@ -383,7 +383,7 @@
     if (gAudioErrorCallback) {
         gAudioErrorCallback(DEAD_OBJECT);
     }
-    LOGW("AudioFlinger server died!");
+    ALOGW("AudioFlinger server died!");
 }
 
 void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, int ioHandle, void *param2) {
@@ -419,7 +419,7 @@
         } break;
     case OUTPUT_CLOSED: {
         if (gOutputs.indexOfKey(ioHandle) < 0) {
-            LOGW("ioConfigChanged() closing unknow output! %d", ioHandle);
+            ALOGW("ioConfigChanged() closing unknow output! %d", ioHandle);
             break;
         }
         ALOGV("ioConfigChanged() output %d closed", ioHandle);
@@ -435,7 +435,7 @@
     case OUTPUT_CONFIG_CHANGED: {
         int index = gOutputs.indexOfKey(ioHandle);
         if (index < 0) {
-            LOGW("ioConfigChanged() modifying unknow output! %d", ioHandle);
+            ALOGW("ioConfigChanged() modifying unknow output! %d", ioHandle);
             break;
         }
         if (param2 == 0) break;
@@ -491,7 +491,7 @@
             binder = sm->getService(String16("media.audio_policy"));
             if (binder != 0)
                 break;
-            LOGW("AudioPolicyService not published, waiting...");
+            ALOGW("AudioPolicyService not published, waiting...");
             usleep(500000); // 0.5 s
         } while(true);
         if (gAudioPolicyServiceClient == NULL) {
@@ -747,7 +747,7 @@
     Mutex::Autolock _l(AudioSystem::gLock);
     AudioSystem::gAudioPolicyService.clear();
 
-    LOGW("AudioPolicyService server died!");
+    ALOGW("AudioPolicyService server died!");
 }
 
 }; // namespace android
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index e0c6ca5..191fbaf 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -158,7 +158,7 @@
 
     AutoMutex lock(mLock);
     if (mAudioTrack != 0) {
-        LOGE("Track already in use");
+        ALOGE("Track already in use");
         return INVALID_OPERATION;
     }
 
@@ -188,7 +188,7 @@
 
     // validate parameters
     if (!audio_is_valid_format(format)) {
-        LOGE("Invalid format");
+        ALOGE("Invalid format");
         return BAD_VALUE;
     }
 
@@ -198,7 +198,7 @@
     }
 
     if (!audio_is_output_channel(channelMask)) {
-        LOGE("Invalid channel mask");
+        ALOGE("Invalid channel mask");
         return BAD_VALUE;
     }
     uint32_t channelCount = popcount(channelMask);
@@ -209,7 +209,7 @@
                                     (audio_policy_output_flags_t)flags);
 
     if (output == 0) {
-        LOGE("Could not get audio output for stream type %d", streamType);
+        ALOGE("Could not get audio output for stream type %d", streamType);
         return BAD_VALUE;
     }
 
@@ -239,7 +239,7 @@
     if (cbf != 0) {
         mAudioTrackThread = new AudioTrackThread(*this, threadCanCallJava);
         if (mAudioTrackThread == 0) {
-          LOGE("Could not create callback thread");
+          ALOGE("Could not create callback thread");
           return NO_INIT;
         }
     }
@@ -252,7 +252,7 @@
     mChannelCount = channelCount;
     mSharedBuffer = sharedBuffer;
     mMuted = false;
-    mActive = 0;
+    mActive = false;
     mCbf = cbf;
     mUserData = user;
     mLoopCount = 0;
@@ -324,7 +324,7 @@
     if (t != 0) {
         if (t->exitPending()) {
             if (t->requestExitAndWait() == WOULD_BLOCK) {
-                LOGE("AudioTrack::start called from thread");
+                ALOGE("AudioTrack::start called from thread");
                 return;
             }
         }
@@ -338,9 +338,9 @@
     sp <IMemory> iMem = mCblkMemory;
     audio_track_cblk_t* cblk = mCblk;
 
-    if (mActive == 0) {
+    if (!mActive) {
         mFlushed = false;
-        mActive = 1;
+        mActive = true;
         mNewPosition = cblk->server + mUpdatePeriod;
         cblk->lock.lock();
         cblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS;
@@ -369,7 +369,7 @@
         cblk->lock.unlock();
         if (status != NO_ERROR) {
             ALOGV("start() failed");
-            mActive = 0;
+            mActive = false;
             if (t != 0) {
                 t->requestExit();
             } else {
@@ -394,8 +394,8 @@
     }
 
     AutoMutex lock(mLock);
-    if (mActive == 1) {
-        mActive = 0;
+    if (mActive) {
+        mActive = false;
         mCblk->cv.signal();
         mAudioTrack->stop();
         // Cancel loops (If we are in the middle of a loop, playback
@@ -424,7 +424,8 @@
 
 bool AudioTrack::stopped() const
 {
-    return !mActive;
+    AutoMutex lock(mLock);
+    return stopped_l();
 }
 
 void AudioTrack::flush()
@@ -456,8 +457,8 @@
 {
     ALOGV("pause");
     AutoMutex lock(mLock);
-    if (mActive == 1) {
-        mActive = 0;
+    if (mActive) {
+        mActive = false;
         mAudioTrack->pause();
     }
 }
@@ -566,12 +567,12 @@
     if (loopStart >= loopEnd ||
         loopEnd - loopStart > cblk->frameCount ||
         cblk->server > loopStart) {
-        LOGE("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, cblk->frameCount, cblk->user);
+        ALOGE("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, cblk->frameCount, cblk->user);
         return BAD_VALUE;
     }
 
     if ((mSharedBuffer != 0) && (loopEnd > cblk->frameCount)) {
-        LOGE("setLoop invalid value: loop markers beyond data: loopStart %d, loopEnd %d, framecount %d",
+        ALOGE("setLoop invalid value: loop markers beyond data: loopStart %d, loopEnd %d, framecount %d",
             loopStart, loopEnd, cblk->frameCount);
         return BAD_VALUE;
     }
@@ -647,9 +648,10 @@
 status_t AudioTrack::setPosition(uint32_t position)
 {
     AutoMutex lock(mLock);
-    Mutex::Autolock _l(mCblk->lock);
 
-    if (!stopped()) return INVALID_OPERATION;
+    if (!stopped_l()) return INVALID_OPERATION;
+
+    Mutex::Autolock _l(mCblk->lock);
 
     if (position > mCblk->user) return BAD_VALUE;
 
@@ -672,7 +674,7 @@
 {
     AutoMutex lock(mLock);
 
-    if (!stopped()) return INVALID_OPERATION;
+    if (!stopped_l()) return INVALID_OPERATION;
 
     flush_l();
 
@@ -726,7 +728,7 @@
     status_t status;
     const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
     if (audioFlinger == 0) {
-       LOGE("Could not get audioflinger");
+       ALOGE("Could not get audioflinger");
        return NO_INIT;
     }
 
@@ -769,7 +771,7 @@
             }
             if (frameCount < minFrameCount) {
                 if (enforceFrameCount) {
-                    LOGE("Invalid buffer size: minFrameCount %d, frameCount %d", minFrameCount, frameCount);
+                    ALOGE("Invalid buffer size: minFrameCount %d, frameCount %d", minFrameCount, frameCount);
                     return BAD_VALUE;
                 } else {
                     frameCount = minFrameCount;
@@ -779,7 +781,7 @@
             // Ensure that buffer alignment matches channelcount
             int channelCount = popcount(channelMask);
             if (((uint32_t)sharedBuffer->pointer() & (channelCount | 1)) != 0) {
-                LOGE("Invalid buffer alignement: address %p, channelCount %d", sharedBuffer->pointer(), channelCount);
+                ALOGE("Invalid buffer alignement: address %p, channelCount %d", sharedBuffer->pointer(), channelCount);
                 return BAD_VALUE;
             }
             frameCount = sharedBuffer->size()/channelCount/sizeof(int16_t);
@@ -799,12 +801,12 @@
                                                       &status);
 
     if (track == 0) {
-        LOGE("AudioFlinger could not create track, status: %d", status);
+        ALOGE("AudioFlinger could not create track, status: %d", status);
         return status;
     }
     sp<IMemory> cblk = track->getCblk();
     if (cblk == 0) {
-        LOGE("Could not get control block");
+        ALOGE("Could not get control block");
         return NO_INIT;
     }
     mAudioTrack = track;
@@ -832,7 +834,7 @@
 status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount)
 {
     AutoMutex lock(mLock);
-    int active;
+    bool active;
     status_t result = NO_ERROR;
     audio_track_cblk_t* cblk = mCblk;
     uint32_t framesReq = audioBuffer->frameCount;
@@ -868,7 +870,7 @@
                 result = cblk->cv.waitRelative(cblk->lock, milliseconds(waitTimeMs));
                 cblk->lock.unlock();
                 mLock.lock();
-                if (mActive == 0) {
+                if (!mActive) {
                     return status_t(STOPPED);
                 }
                 cblk->lock.lock();
@@ -883,7 +885,7 @@
                     // timing out when a loop has been set and we have already written upto loop end
                     // is a normal condition: no need to wake AudioFlinger up.
                     if (cblk->user < cblk->loopEnd) {
-                        LOGW(   "obtainBuffer timed out (is the CPU pegged?) %p "
+                        ALOGW(   "obtainBuffer timed out (is the CPU pegged?) %p "
                                 "user=%08x, server=%08x", this, cblk->user, cblk->server);
                         //unlock cblk mutex before calling mAudioTrack->start() (see issue #1617140)
                         cblk->lock.unlock();
@@ -895,7 +897,7 @@
                             result = restoreTrack_l(cblk, false);
                         }
                         if (result != NO_ERROR) {
-                            LOGW("obtainBuffer create Track error %d", result);
+                            ALOGW("obtainBuffer create Track error %d", result);
                             cblk->lock.unlock();
                             return result;
                         }
@@ -918,7 +920,7 @@
     // restart track if it was disabled by audioflinger due to previous underrun
     if (mActive && (cblk->flags & CBLK_DISABLED_MSK)) {
         android_atomic_and(~CBLK_DISABLED_ON, &cblk->flags);
-        LOGW("obtainBuffer() track %p disabled, restarting", this);
+        ALOGW("obtainBuffer() track %p disabled, restarting", this);
         mAudioTrack->start();
     }
 
@@ -964,7 +966,7 @@
 
     if (ssize_t(userSize) < 0) {
         // sanity-check. user is most-likely passing an error code.
-        LOGE("AudioTrack::write(buffer=%p, size=%u (%d)",
+        ALOGE("AudioTrack::write(buffer=%p, size=%u (%d)",
                 buffer, userSize, userSize);
         return BAD_VALUE;
     }
@@ -1035,10 +1037,11 @@
     sp <IAudioTrack> audioTrack = mAudioTrack;
     sp <IMemory> iMem = mCblkMemory;
     audio_track_cblk_t* cblk = mCblk;
+    bool active = mActive;
     mLock.unlock();
 
     // Manage underrun callback
-    if (mActive && (cblk->framesAvailable() == cblk->frameCount)) {
+    if (active && (cblk->framesAvailable() == cblk->frameCount)) {
         ALOGV("Underrun user: %x, server: %x, flags %04x", cblk->user, cblk->server, cblk->flags);
         if (!(android_atomic_or(CBLK_UNDERRUN_ON, &cblk->flags) & CBLK_UNDERRUN_MSK)) {
             mCbf(EVENT_UNDERRUN, mUserData, 0);
@@ -1096,7 +1099,7 @@
         status_t err = obtainBuffer(&audioBuffer, waitCount);
         if (err < NO_ERROR) {
             if (err != TIMED_OUT) {
-                LOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");
+                ALOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");
                 return false;
             }
             break;
@@ -1164,7 +1167,7 @@
     status_t result;
 
     if (!(android_atomic_or(CBLK_RESTORING_ON, &cblk->flags) & CBLK_RESTORING_MSK)) {
-        LOGW("dead IAudioTrack, creating a new one from %s TID %d",
+        ALOGW("dead IAudioTrack, creating a new one from %s TID %d",
              fromStart ? "start()" : "obtainBuffer()", gettid());
 
         // signal old cblk condition so that other threads waiting for available buffers stop
@@ -1220,7 +1223,7 @@
             }
             if (mActive) {
                 result = mAudioTrack->start();
-                LOGW_IF(result != NO_ERROR, "restoreTrack_l() start() failed status %d", result);
+                ALOGW_IF(result != NO_ERROR, "restoreTrack_l() start() failed status %d", result);
             }
             if (fromStart && result == NO_ERROR) {
                 mNewPosition = mCblk->server + mUpdatePeriod;
@@ -1228,7 +1231,7 @@
         }
         if (result != NO_ERROR) {
             android_atomic_and(~CBLK_RESTORING_ON, &cblk->flags);
-            LOGW_IF(result != NO_ERROR, "restoreTrack_l() failed status %d", result);
+            ALOGW_IF(result != NO_ERROR, "restoreTrack_l() failed status %d", result);
         }
         mRestoreStatus = result;
         // signal old cblk condition for other threads waiting for restore completion
@@ -1236,7 +1239,7 @@
         cblk->cv.broadcast();
     } else {
         if (!(cblk->flags & CBLK_RESTORED_MSK)) {
-            LOGW("dead IAudioTrack, waiting for a new one TID %d", gettid());
+            ALOGW("dead IAudioTrack, waiting for a new one TID %d", gettid());
             mLock.unlock();
             result = cblk->cv.waitRelative(cblk->lock, milliseconds(RESTORE_TIMEOUT_MS));
             if (result == NO_ERROR) {
@@ -1245,7 +1248,7 @@
             cblk->lock.unlock();
             mLock.lock();
         } else {
-            LOGW("dead IAudioTrack, already restored TID %d", gettid());
+            ALOGW("dead IAudioTrack, already restored TID %d", gettid());
             result = mRestoreStatus;
             cblk->lock.unlock();
         }
@@ -1259,7 +1262,7 @@
     }
     cblk->lock.lock();
 
-    LOGW_IF(result != NO_ERROR, "restoreTrack_l() error %d TID %d", result, gettid());
+    ALOGW_IF(result != NO_ERROR, "restoreTrack_l() error %d TID %d", result, gettid());
 
     return result;
 }
@@ -1328,7 +1331,7 @@
             bufferTimeoutMs = MAX_RUN_TIMEOUT_MS;
         }
     } else if (u > server) {
-        LOGW("stepServer occurred after track reset");
+        ALOGW("stepServer occurred after track reset");
         u = server;
     }
 
@@ -1349,7 +1352,7 @@
 bool audio_track_cblk_t::stepServer(uint32_t frameCount)
 {
     if (!tryLock()) {
-        LOGW("stepServer() could not lock cblk");
+        ALOGW("stepServer() could not lock cblk");
         return false;
     }
 
@@ -1367,13 +1370,13 @@
         // stepServer() is called After the flush() has reset u & s and
         // we have s > u
         if (s > user) {
-            LOGW("stepServer occurred after track reset");
+            ALOGW("stepServer occurred after track reset");
             s = user;
         }
     }
 
     if (s >= loopEnd) {
-        LOGW_IF(s > loopEnd, "stepServer: s %u > loopEnd %u", s, loopEnd);
+        ALOGW_IF(s > loopEnd, "stepServer: s %u > loopEnd %u", s, loopEnd);
         s = loopStart;
         if (--loopCount == 0) {
             loopEnd = UINT_MAX;
@@ -1428,7 +1431,7 @@
         } else {
             // do not block on mutex shared with client on AudioFlinger side
             if (!tryLock()) {
-                LOGW("framesReady() could not lock cblk");
+                ALOGW("framesReady() could not lock cblk");
                 return 0;
             }
             uint32_t frames = UINT_MAX;
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index bedf8d3..abd491f 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -112,7 +112,7 @@
         data.writeInt32(lSessionId);
         status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply);
         if (lStatus != NO_ERROR) {
-            LOGE("createTrack error: %s", strerror(-lStatus));
+            ALOGE("createTrack error: %s", strerror(-lStatus));
         } else {
             lSessionId = reply.readInt32();
             if (sessionId != NULL) {
@@ -155,7 +155,7 @@
         data.writeInt32(lSessionId);
         status_t lStatus = remote()->transact(OPEN_RECORD, data, &reply);
         if (lStatus != NO_ERROR) {
-            LOGE("openRecord error: %s", strerror(-lStatus));
+            ALOGE("openRecord error: %s", strerror(-lStatus));
         } else {
             lSessionId = reply.readInt32();
             if (sessionId != NULL) {
@@ -632,7 +632,7 @@
 
         status_t lStatus = remote()->transact(CREATE_EFFECT, data, &reply);
         if (lStatus != NO_ERROR) {
-            LOGE("createEffect error: %s", strerror(-lStatus));
+            ALOGE("createEffect error: %s", strerror(-lStatus));
         } else {
             lStatus = reply.readInt32();
             int tmp = reply.readInt32();
diff --git a/media/libmedia/IAudioRecord.cpp b/media/libmedia/IAudioRecord.cpp
index ba0d55b..8c7a960 100644
--- a/media/libmedia/IAudioRecord.cpp
+++ b/media/libmedia/IAudioRecord.cpp
@@ -50,7 +50,7 @@
         if (status == NO_ERROR) {
             status = reply.readInt32();
         } else {
-            LOGW("start() error: %s", strerror(-status));
+            ALOGW("start() error: %s", strerror(-status));
         }
         return status;
     }
diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp
index bc8ff34..e618619 100644
--- a/media/libmedia/IAudioTrack.cpp
+++ b/media/libmedia/IAudioTrack.cpp
@@ -46,6 +46,18 @@
     {
     }
     
+    virtual sp<IMemory> getCblk() const
+    {
+        Parcel data, reply;
+        sp<IMemory> cblk;
+        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
+        status_t status = remote()->transact(GET_CBLK, data, &reply);
+        if (status == NO_ERROR) {
+            cblk = interface_cast<IMemory>(reply.readStrongBinder());
+        }
+        return cblk;
+    }
+
     virtual status_t start()
     {
         Parcel data, reply;
@@ -54,7 +66,7 @@
         if (status == NO_ERROR) {
             status = reply.readInt32();
         } else {
-            LOGW("start() error: %s", strerror(-status));
+            ALOGW("start() error: %s", strerror(-status));
         }
         return status;
     }
@@ -88,18 +100,6 @@
         remote()->transact(PAUSE, data, &reply);
     }
     
-    virtual sp<IMemory> getCblk() const
-    {
-        Parcel data, reply;
-        sp<IMemory> cblk;
-        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
-        status_t status = remote()->transact(GET_CBLK, data, &reply);
-        if (status == NO_ERROR) {
-            cblk = interface_cast<IMemory>(reply.readStrongBinder());
-        }
-        return cblk;
-    }
-
     virtual status_t attachAuxEffect(int effectId)
     {
         Parcel data, reply;
@@ -109,7 +109,7 @@
         if (status == NO_ERROR) {
             status = reply.readInt32();
         } else {
-            LOGW("attachAuxEffect() error: %s", strerror(-status));
+            ALOGW("attachAuxEffect() error: %s", strerror(-status));
         }
         return status;
     }
diff --git a/media/libmedia/IMediaDeathNotifier.cpp b/media/libmedia/IMediaDeathNotifier.cpp
index da33edb..8525482 100644
--- a/media/libmedia/IMediaDeathNotifier.cpp
+++ b/media/libmedia/IMediaDeathNotifier.cpp
@@ -44,7 +44,7 @@
             if (binder != 0) {
                 break;
              }
-             LOGW("Media player service not published, waiting...");
+             ALOGW("Media player service not published, waiting...");
              usleep(500000); // 0.5 s
         } while(true);
 
@@ -54,7 +54,7 @@
     binder->linkToDeath(sDeathNotifier);
     sMediaPlayerService = interface_cast<IMediaPlayerService>(binder);
     }
-    LOGE_IF(sMediaPlayerService == 0, "no media player service!?");
+    ALOGE_IF(sMediaPlayerService == 0, "no media player service!?");
     return sMediaPlayerService;
 }
 
@@ -76,7 +76,7 @@
 
 void
 IMediaDeathNotifier::DeathNotifier::binderDied(const wp<IBinder>& who) {
-    LOGW("media server died");
+    ALOGW("media server died");
 
     // Need to do this with the lock held
     SortedVector< wp<IMediaDeathNotifier> > list;
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index 7d2fbce..d2f5f71 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -407,7 +407,7 @@
 
 #define CHECK_INTERFACE(interface, data, reply) \
         do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
-            LOGW("Call incorrectly routed to " #interface); \
+            ALOGW("Call incorrectly routed to " #interface); \
             return PERMISSION_DENIED; \
         } } while (0)
 
diff --git a/media/libmedia/JetPlayer.cpp b/media/libmedia/JetPlayer.cpp
index afa84b7..188e582 100644
--- a/media/libmedia/JetPlayer.cpp
+++ b/media/libmedia/JetPlayer.cpp
@@ -68,21 +68,21 @@
     if (pLibConfig == NULL)
         pLibConfig = EAS_Config();
     if (pLibConfig == NULL) {
-        LOGE("JetPlayer::init(): EAS library configuration could not be retrieved, aborting.");
+        ALOGE("JetPlayer::init(): EAS library configuration could not be retrieved, aborting.");
         return EAS_FAILURE;
     }
 
     // init the EAS library
     result = EAS_Init(&mEasData);
     if( result != EAS_SUCCESS) {
-        LOGE("JetPlayer::init(): Error initializing Sonivox EAS library, aborting.");
+        ALOGE("JetPlayer::init(): Error initializing Sonivox EAS library, aborting.");
         mState = EAS_STATE_ERROR;
         return result;
     }
     // init the JET library with the default app event controller range
     result = JET_Init(mEasData, NULL, sizeof(S_JET_CONFIG));
     if( result != EAS_SUCCESS) {
-        LOGE("JetPlayer::init(): Error initializing JET library, aborting.");
+        ALOGE("JetPlayer::init(): Error initializing JET library, aborting.");
         mState = EAS_STATE_ERROR;
         return result;
     }
@@ -109,7 +109,7 @@
         ALOGV("JetPlayer::init(): render thread(%d) successfully started.", mTid);
         mState = EAS_STATE_READY;
     } else {
-        LOGE("JetPlayer::init(): failed to start render thread.");
+        ALOGE("JetPlayer::init(): failed to start render thread.");
         mState = EAS_STATE_ERROR;
         return EAS_FAILURE;
     }
@@ -169,7 +169,7 @@
     mAudioBuffer = 
         new EAS_PCM[pLibConfig->mixBufferSize * pLibConfig->numChannels * MIX_NUM_BUFFERS];
     if (!mAudioBuffer) {
-        LOGE("JetPlayer::render(): mAudioBuffer allocate failed");
+        ALOGE("JetPlayer::render(): mAudioBuffer allocate failed");
         goto threadExit;
     }
 
@@ -210,7 +210,7 @@
         for (int i = 0; i < MIX_NUM_BUFFERS; i++) {
             result = EAS_Render(mEasData, p, pLibConfig->mixBufferSize, &count);
             if (result != EAS_SUCCESS) {
-                LOGE("JetPlayer::render(): EAS_Render returned error %ld", result);
+                ALOGE("JetPlayer::render(): EAS_Render returned error %ld", result);
             }
             p += count * pLibConfig->numChannels;
             num_output += count * pLibConfig->numChannels * sizeof(EAS_PCM);
@@ -229,14 +229,14 @@
 
         // check audio output track
         if (mAudioTrack == NULL) {
-            LOGE("JetPlayer::render(): output AudioTrack was not created");
+            ALOGE("JetPlayer::render(): output AudioTrack was not created");
             goto threadExit;
         }
 
         // Write data to the audio hardware
         //ALOGV("JetPlayer::render(): writing to audio output");
         if ((temp = mAudioTrack->write(mAudioBuffer, num_output)) < 0) {
-            LOGE("JetPlayer::render(): Error in writing:%d",temp);
+            ALOGE("JetPlayer::render(): Error in writing:%d",temp);
             return temp;
         }
 
@@ -469,7 +469,7 @@
 //-------------------------------------------------------------------------------------------------
 void JetPlayer::dump()
 {
-    LOGE("JetPlayer dump: JET file=%s", mEasJetFileLoc->path);
+    ALOGE("JetPlayer dump: JET file=%s", mEasJetFileLoc->path);
 }
 
 void JetPlayer::dumpJetStatus(S_JET_STATUS* pJetStatus)
@@ -479,7 +479,7 @@
                 pJetStatus->currentUserID, pJetStatus->segmentRepeatCount,
                 pJetStatus->numQueuedSegments, pJetStatus->paused);
     else
-        LOGE(">> JET player status is NULL");
+        ALOGE(">> JET player status is NULL");
 }
 
 
diff --git a/media/libmedia/MediaProfiles.cpp b/media/libmedia/MediaProfiles.cpp
index 109f294..c905762 100644
--- a/media/libmedia/MediaProfiles.cpp
+++ b/media/libmedia/MediaProfiles.cpp
@@ -620,7 +620,7 @@
             const char *defaultXmlFile = "/etc/media_profiles.xml";
             FILE *fp = fopen(defaultXmlFile, "r");
             if (fp == NULL) {
-                LOGW("could not find media config xml file");
+                ALOGW("could not find media config xml file");
                 sInstance = createDefaultInstance();
             } else {
                 fclose(fp);  // close the file first.
@@ -903,7 +903,7 @@
       expat is not compiled with -DXML_DTD. We don't have DTD parsing support.
 
       if (!::XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS)) {
-          LOGE("failed to enable DTD support in the xml file");
+          ALOGE("failed to enable DTD support in the xml file");
           return UNKNOWN_ERROR;
       }
 
@@ -913,7 +913,7 @@
     for (;;) {
         void *buff = ::XML_GetBuffer(parser, BUFF_SIZE);
         if (buff == NULL) {
-            LOGE("failed to in call to XML_GetBuffer()");
+            ALOGE("failed to in call to XML_GetBuffer()");
             delete profiles;
             profiles = NULL;
             goto exit;
@@ -921,7 +921,7 @@
 
         int bytes_read = ::fread(buff, 1, BUFF_SIZE, fp);
         if (bytes_read < 0) {
-            LOGE("failed in call to read");
+            ALOGE("failed in call to read");
             delete profiles;
             profiles = NULL;
             goto exit;
@@ -963,7 +963,7 @@
         }
     }
     if (index == -1) {
-        LOGE("The given video encoder %d is not found", codec);
+        ALOGE("The given video encoder %d is not found", codec);
         return -1;
     }
 
@@ -976,7 +976,7 @@
     if (!strcmp("enc.vid.fps.min", name)) return mVideoEncoders[index]->mMinFrameRate;
     if (!strcmp("enc.vid.fps.max", name)) return mVideoEncoders[index]->mMaxFrameRate;
 
-    LOGE("The given video encoder param name %s is not found", name);
+    ALOGE("The given video encoder param name %s is not found", name);
     return -1;
 }
 int MediaProfiles::getVideoEditorExportParamByName(
@@ -993,7 +993,7 @@
         }
     }
     if (index == -1) {
-        LOGE("The given video decoder %d is not found", codec);
+        ALOGE("The given video decoder %d is not found", codec);
         return -1;
     }
     if (!strcmp("videoeditor.export.profile", name))
@@ -1001,7 +1001,7 @@
     if (!strcmp("videoeditor.export.level", name))
         return exportProfile->mLevel;
 
-    LOGE("The given video editor export param name %s is not found", name);
+    ALOGE("The given video editor export param name %s is not found", name);
     return -1;
 }
 int MediaProfiles::getVideoEditorCapParamByName(const char *name) const
@@ -1009,7 +1009,7 @@
     ALOGV("getVideoEditorCapParamByName: %s", name);
 
     if (mVideoEditorCap == NULL) {
-        LOGE("The mVideoEditorCap is not created, then create default cap.");
+        ALOGE("The mVideoEditorCap is not created, then create default cap.");
         createDefaultVideoEditorCap(sInstance);
     }
 
@@ -1024,7 +1024,7 @@
     if (!strcmp("maxPrefetchYUVFrames", name))
         return mVideoEditorCap->mMaxPrefetchYUVFrames;
 
-    LOGE("The given video editor param name %s is not found", name);
+    ALOGE("The given video editor param name %s is not found", name);
     return -1;
 }
 
@@ -1048,7 +1048,7 @@
         }
     }
     if (index == -1) {
-        LOGE("The given audio encoder %d is not found", codec);
+        ALOGE("The given audio encoder %d is not found", codec);
         return -1;
     }
 
@@ -1059,7 +1059,7 @@
     if (!strcmp("enc.aud.hz.min", name)) return mAudioEncoders[index]->mMinSampleRate;
     if (!strcmp("enc.aud.hz.max", name)) return mAudioEncoders[index]->mMaxSampleRate;
 
-    LOGE("The given audio encoder param name %s is not found", name);
+    ALOGE("The given audio encoder param name %s is not found", name);
     return -1;
 }
 
@@ -1103,7 +1103,7 @@
 
     int index = getCamcorderProfileIndex(cameraId, quality);
     if (index == -1) {
-        LOGE("The given camcorder profile camera %d quality %d is not found",
+        ALOGE("The given camcorder profile camera %d quality %d is not found",
              cameraId, quality);
         return -1;
     }
@@ -1120,7 +1120,7 @@
     if (!strcmp("aud.ch", name)) return mCamcorderProfiles[index]->mAudioCodec->mChannels;
     if (!strcmp("aud.hz", name)) return mCamcorderProfiles[index]->mAudioCodec->mSampleRate;
 
-    LOGE("The given camcorder profile param id %d name %s is not found", cameraId, name);
+    ALOGE("The given camcorder profile param id %d name %s is not found", cameraId, name);
     return -1;
 }
 
diff --git a/media/libmedia/MediaScanner.cpp b/media/libmedia/MediaScanner.cpp
index cda185f..79cab74 100644
--- a/media/libmedia/MediaScanner.cpp
+++ b/media/libmedia/MediaScanner.cpp
@@ -153,7 +153,7 @@
 
     DIR* dir = opendir(path);
     if (!dir) {
-        LOGW("Error opening directory '%s', skipping: %s.", path, strerror(errno));
+        ALOGW("Error opening directory '%s', skipping: %s.", path, strerror(errno));
         return MEDIA_SCAN_RESULT_SKIPPED;
     }
 
diff --git a/media/libmedia/MediaScannerClient.cpp b/media/libmedia/MediaScannerClient.cpp
index 629b165..40b8188 100644
--- a/media/libmedia/MediaScannerClient.cpp
+++ b/media/libmedia/MediaScannerClient.cpp
@@ -142,12 +142,12 @@
 
         UConverter *conv = ucnv_open(enc, &status);
         if (U_FAILURE(status)) {
-            LOGE("could not create UConverter for %s\n", enc);
+            ALOGE("could not create UConverter for %s\n", enc);
             return;
         }
         UConverter *utf8Conv = ucnv_open("UTF-8", &status);
         if (U_FAILURE(status)) {
-            LOGE("could not create UConverter for UTF-8\n");
+            ALOGE("could not create UConverter for UTF-8\n");
             ucnv_close(conv);
             return;
         }
@@ -180,7 +180,7 @@
             ucnv_convertEx(utf8Conv, conv, &target, target + targetLength,
                     &source, (const char *)dest, NULL, NULL, NULL, NULL, TRUE, TRUE, &status);
             if (U_FAILURE(status)) {
-                LOGE("ucnv_convertEx failed: %d\n", status);
+                ALOGE("ucnv_convertEx failed: %d\n", status);
                 mValues->setEntry(i, "???");
             } else {
                 // zero terminate
diff --git a/media/libmedia/Metadata.cpp b/media/libmedia/Metadata.cpp
index 8eeebbb..546a9b0 100644
--- a/media/libmedia/Metadata.cpp
+++ b/media/libmedia/Metadata.cpp
@@ -135,7 +135,7 @@
 {
     if (key < FIRST_SYSTEM_ID ||
         (LAST_SYSTEM_ID < key && key < FIRST_CUSTOM_ID)) {
-        LOGE("Bad key %d", key);
+        ALOGE("Bad key %d", key);
         return false;
     }
     size_t curr = mData->dataPosition();
@@ -152,7 +152,7 @@
             break;
         }
         if (mData->readInt32() == key) {
-            LOGE("Key exists already %d", key);
+            ALOGE("Key exists already %d", key);
             error = true;
             break;
         }
diff --git a/media/libmedia/ToneGenerator.cpp b/media/libmedia/ToneGenerator.cpp
index 28b54b5..35dfbb8 100644
--- a/media/libmedia/ToneGenerator.cpp
+++ b/media/libmedia/ToneGenerator.cpp
@@ -805,7 +805,7 @@
     mState = TONE_IDLE;
 
     if (AudioSystem::getOutputSamplingRate(&mSamplingRate, streamType) != NO_ERROR) {
-        LOGE("Unable to marshal AudioFlinger");
+        ALOGE("Unable to marshal AudioFlinger");
         return;
     }
     mThreadCanCallJava = threadCanCallJava;
@@ -906,7 +906,7 @@
         ALOGV("Start waiting for previous tone to stop");
         lStatus = mWaitCbkCond.waitRelative(mLock, seconds(3));
         if (lStatus != NO_ERROR) {
-            LOGE("--- start wait for stop timed out, status %d", lStatus);
+            ALOGE("--- start wait for stop timed out, status %d", lStatus);
             mState = TONE_IDLE;
             mLock.unlock();
             return lResult;
@@ -925,7 +925,7 @@
                 ALOGV("Wait for start callback");
                 lStatus = mWaitCbkCond.waitRelative(mLock, seconds(3));
                 if (lStatus != NO_ERROR) {
-                    LOGE("--- Immediate start timed out, status %d", lStatus);
+                    ALOGE("--- Immediate start timed out, status %d", lStatus);
                     mState = TONE_IDLE;
                     lResult = false;
                 }
@@ -943,14 +943,14 @@
             }
             ALOGV("cond received");
         } else {
-            LOGE("--- Delayed start timed out, status %d", lStatus);
+            ALOGE("--- Delayed start timed out, status %d", lStatus);
             mState = TONE_IDLE;
         }
     }
     mLock.unlock();
 
     ALOGV_IF(lResult, "Tone started, time %d\n", (unsigned int)(systemTime()/1000000));
-    LOGW_IF(!lResult, "Tone start failed!!!, time %d\n", (unsigned int)(systemTime()/1000000));
+    ALOGW_IF(!lResult, "Tone start failed!!!, time %d\n", (unsigned int)(systemTime()/1000000));
 
     return lResult;
 }
@@ -979,7 +979,7 @@
         if (lStatus == NO_ERROR) {
             ALOGV("track stop complete, time %d", (unsigned int)(systemTime()/1000000));
         } else {
-            LOGE("--- Stop timed out");
+            ALOGE("--- Stop timed out");
             mState = TONE_IDLE;
             mpAudioTrack->stop();
         }
@@ -1018,7 +1018,7 @@
    // Open audio track in mono, PCM 16bit, default sampling rate, default buffer size
     mpAudioTrack = new AudioTrack();
     if (mpAudioTrack == 0) {
-        LOGE("AudioTrack allocation failed");
+        ALOGE("AudioTrack allocation failed");
         goto initAudioTrack_exit;
     }
     ALOGV("Create Track: %p\n", mpAudioTrack);
@@ -1036,7 +1036,7 @@
                       mThreadCanCallJava);
 
     if (mpAudioTrack->initCheck() != NO_ERROR) {
-        LOGE("AudioTrack->initCheck failed");
+        ALOGE("AudioTrack->initCheck failed");
         goto initAudioTrack_exit;
     }
 
@@ -1261,7 +1261,7 @@
                 // must reload lpToneDesc as prepareWave() may change mpToneDesc
                 lpToneDesc = lpToneGen->mpToneDesc;
             } else {
-                LOGW("Cbk restarting prepareWave() failed\n");
+                ALOGW("Cbk restarting prepareWave() failed\n");
                 lpToneGen->mState = TONE_IDLE;
                 lpToneGen->mpAudioTrack->stop();
                 // Force loop exit
diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp
index de40f98..d08ffa5 100644
--- a/media/libmedia/Visualizer.cpp
+++ b/media/libmedia/Visualizer.cpp
@@ -61,7 +61,7 @@
         if (enabled) {
             if (t->exitPending()) {
                 if (t->requestExitAndWait() == WOULD_BLOCK) {
-                    LOGE("Visualizer::enable() called from thread");
+                    ALOGE("Visualizer::enable() called from thread");
                     return INVALID_OPERATION;
                 }
             }
@@ -116,7 +116,7 @@
     if (cbk != NULL) {
         mCaptureThread = new CaptureThread(*this, rate, ((flags & CAPTURE_CALL_JAVA) != 0));
         if (mCaptureThread == 0) {
-            LOGE("Could not create callback thread");
+            ALOGE("Could not create callback thread");
             return NO_INIT;
         }
     }
diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp
index fd8c065..88e269f 100644
--- a/media/libmedia/mediametadataretriever.cpp
+++ b/media/libmedia/mediametadataretriever.cpp
@@ -43,7 +43,7 @@
             if (binder != 0) {
                 break;
             }
-            LOGW("MediaPlayerService not published, waiting...");
+            ALOGW("MediaPlayerService not published, waiting...");
             usleep(500000); // 0.5 s
         } while(true);
         if (sDeathNotifier == NULL) {
@@ -52,7 +52,7 @@
         binder->linkToDeath(sDeathNotifier);
         sService = interface_cast<IMediaPlayerService>(binder);
     }
-    LOGE_IF(sService == 0, "no MediaPlayerService!?");
+    ALOGE_IF(sService == 0, "no MediaPlayerService!?");
     return sService;
 }
 
@@ -61,12 +61,12 @@
     ALOGV("constructor");
     const sp<IMediaPlayerService>& service(getService());
     if (service == 0) {
-        LOGE("failed to obtain MediaMetadataRetrieverService");
+        ALOGE("failed to obtain MediaMetadataRetrieverService");
         return;
     }
     sp<IMediaMetadataRetriever> retriever(service->createMetadataRetriever(getpid()));
     if (retriever == 0) {
-        LOGE("failed to create IMediaMetadataRetriever object from server");
+        ALOGE("failed to create IMediaMetadataRetriever object from server");
     }
     mRetriever = retriever;
 }
@@ -98,11 +98,11 @@
     ALOGV("setDataSource");
     Mutex::Autolock _l(mLock);
     if (mRetriever == 0) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return INVALID_OPERATION;
     }
     if (srcUrl == NULL) {
-        LOGE("data source is a null pointer");
+        ALOGE("data source is a null pointer");
         return UNKNOWN_ERROR;
     }
     ALOGV("data source (%s)", srcUrl);
@@ -114,11 +114,11 @@
     ALOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
     Mutex::Autolock _l(mLock);
     if (mRetriever == 0) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return INVALID_OPERATION;
     }
     if (fd < 0 || offset < 0 || length < 0) {
-        LOGE("Invalid negative argument");
+        ALOGE("Invalid negative argument");
         return UNKNOWN_ERROR;
     }
     return mRetriever->setDataSource(fd, offset, length);
@@ -129,7 +129,7 @@
     ALOGV("getFrameAtTime: time(%lld us) option(%d)", timeUs, option);
     Mutex::Autolock _l(mLock);
     if (mRetriever == 0) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return NULL;
     }
     return mRetriever->getFrameAtTime(timeUs, option);
@@ -140,7 +140,7 @@
     ALOGV("extractMetadata(%d)", keyCode);
     Mutex::Autolock _l(mLock);
     if (mRetriever == 0) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return NULL;
     }
     return mRetriever->extractMetadata(keyCode);
@@ -151,7 +151,7 @@
     ALOGV("extractAlbumArt");
     Mutex::Autolock _l(mLock);
     if (mRetriever == 0) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return NULL;
     }
     return mRetriever->extractAlbumArt();
@@ -160,7 +160,7 @@
 void MediaMetadataRetriever::DeathNotifier::binderDied(const wp<IBinder>& who) {
     Mutex::Autolock lock(MediaMetadataRetriever::sServiceLock);
     MediaMetadataRetriever::sService.clear();
-    LOGW("MediaMetadataRetriever server died!");
+    ALOGW("MediaMetadataRetriever server died!");
 }
 
 MediaMetadataRetriever::DeathNotifier::~DeathNotifier()
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
index 695c4a8..2284927 100644
--- a/media/libmedia/mediaplayer.cpp
+++ b/media/libmedia/mediaplayer.cpp
@@ -115,7 +115,7 @@
 
         if ( !( (mCurrentState & MEDIA_PLAYER_IDLE) ||
                 (mCurrentState == MEDIA_PLAYER_STATE_ERROR ) ) ) {
-            LOGE("attachNewPlayer called in state %d", mCurrentState);
+            ALOGE("attachNewPlayer called in state %d", mCurrentState);
             return INVALID_OPERATION;
         }
 
@@ -126,7 +126,7 @@
             mCurrentState = MEDIA_PLAYER_INITIALIZED;
             err = NO_ERROR;
         } else {
-            LOGE("Unable to to create media player");
+            ALOGE("Unable to to create media player");
         }
     }
 
@@ -195,7 +195,7 @@
          ALOGV("invoke %d", request.dataSize());
          return  mPlayer->invoke(request, reply);
     }
-    LOGE("invoke failed: wrong state %X", mCurrentState);
+    ALOGE("invoke failed: wrong state %X", mCurrentState);
     return INVALID_OPERATION;
 }
 
@@ -236,7 +236,7 @@
         mCurrentState = MEDIA_PLAYER_PREPARING;
         return mPlayer->prepareAsync();
     }
-    LOGE("prepareAsync called in state %d", mCurrentState);
+    ALOGE("prepareAsync called in state %d", mCurrentState);
     return INVALID_OPERATION;
 }
 
@@ -298,7 +298,7 @@
         }
         return ret;
     }
-    LOGE("start called in state %d", mCurrentState);
+    ALOGE("start called in state %d", mCurrentState);
     return INVALID_OPERATION;
 }
 
@@ -317,7 +317,7 @@
         }
         return ret;
     }
-    LOGE("stop called in state %d", mCurrentState);
+    ALOGE("stop called in state %d", mCurrentState);
     return INVALID_OPERATION;
 }
 
@@ -336,7 +336,7 @@
         }
         return ret;
     }
-    LOGE("pause called in state %d", mCurrentState);
+    ALOGE("pause called in state %d", mCurrentState);
     return INVALID_OPERATION;
 }
 
@@ -348,7 +348,7 @@
         mPlayer->isPlaying(&temp);
         ALOGV("isPlaying: %d", temp);
         if ((mCurrentState & MEDIA_PLAYER_STARTED) && ! temp) {
-            LOGE("internal/external state mismatch corrected");
+            ALOGE("internal/external state mismatch corrected");
             mCurrentState = MEDIA_PLAYER_PAUSED;
         }
         return temp;
@@ -402,7 +402,7 @@
             *msec = mDuration;
         return ret;
     }
-    LOGE("Attempt to call getDuration without a valid mediaplayer");
+    ALOGE("Attempt to call getDuration without a valid mediaplayer");
     return INVALID_OPERATION;
 }
 
@@ -417,10 +417,10 @@
     ALOGV("seekTo %d", msec);
     if ((mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_STARTED | MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_PAUSED |  MEDIA_PLAYER_PLAYBACK_COMPLETE) ) ) {
         if ( msec < 0 ) {
-            LOGW("Attempt to seek to invalid position: %d", msec);
+            ALOGW("Attempt to seek to invalid position: %d", msec);
             msec = 0;
         } else if ((mDuration > 0) && (msec > mDuration)) {
-            LOGW("Attempt to seek to past end of file: request = %d, EOF = %d", msec, mDuration);
+            ALOGW("Attempt to seek to past end of file: request = %d, EOF = %d", msec, mDuration);
             msec = mDuration;
         }
         // cache duration
@@ -435,7 +435,7 @@
             return NO_ERROR;
         }
     }
-    LOGE("Attempt to perform seekTo in wrong state: mPlayer=%p, mCurrentState=%u", mPlayer.get(), mCurrentState);
+    ALOGE("Attempt to perform seekTo in wrong state: mPlayer=%p, mCurrentState=%u", mPlayer.get(), mCurrentState);
     return INVALID_OPERATION;
 }
 
@@ -457,7 +457,7 @@
     if (mPlayer != 0) {
         status_t ret = mPlayer->reset();
         if (ret != NO_ERROR) {
-            LOGE("reset() failed with return code (%d)", ret);
+            ALOGE("reset() failed with return code (%d)", ret);
             mCurrentState = MEDIA_PLAYER_STATE_ERROR;
         } else {
             mCurrentState = MEDIA_PLAYER_IDLE;
@@ -486,7 +486,7 @@
     if (mCurrentState & ( MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_STARTED |
                 MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_PLAYBACK_COMPLETE ) ) {
         // Can't change the stream type after prepare
-        LOGE("setAudioStream called in state %d", mCurrentState);
+        ALOGE("setAudioStream called in state %d", mCurrentState);
         return INVALID_OPERATION;
     }
     // cache
@@ -532,7 +532,7 @@
     ALOGV("MediaPlayer::setAudioSessionId(%d)", sessionId);
     Mutex::Autolock _l(mLock);
     if (!(mCurrentState & MEDIA_PLAYER_IDLE)) {
-        LOGE("setAudioSessionId called in state %d", mCurrentState);
+        ALOGE("setAudioSessionId called in state %d", mCurrentState);
         return INVALID_OPERATION;
     }
     if (sessionId < 0) {
@@ -570,7 +570,7 @@
     if (mPlayer == 0 ||
         (mCurrentState & MEDIA_PLAYER_IDLE) ||
         (mCurrentState == MEDIA_PLAYER_STATE_ERROR )) {
-        LOGE("attachAuxEffect called in state %d", mCurrentState);
+        ALOGE("attachAuxEffect called in state %d", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -641,7 +641,7 @@
     case MEDIA_PLAYBACK_COMPLETE:
         ALOGV("playback complete");
         if (mCurrentState == MEDIA_PLAYER_IDLE) {
-            LOGE("playback complete in idle state");
+            ALOGE("playback complete in idle state");
         }
         if (!mLoop) {
             mCurrentState = MEDIA_PLAYER_PLAYBACK_COMPLETE;
@@ -651,7 +651,7 @@
         // Always log errors.
         // ext1: Media framework error code.
         // ext2: Implementation dependant error code.
-        LOGE("error (%d, %d)", ext1, ext2);
+        ALOGE("error (%d, %d)", ext1, ext2);
         mCurrentState = MEDIA_PLAYER_STATE_ERROR;
         if (mPrepareSync)
         {
@@ -666,7 +666,7 @@
         // ext1: Media framework error code.
         // ext2: Implementation dependant error code.
         if (ext1 != MEDIA_INFO_VIDEO_TRACK_LAGGING) {
-            LOGW("info/warning (%d, %d)", ext1, ext2);
+            ALOGW("info/warning (%d, %d)", ext1, ext2);
         }
         break;
     case MEDIA_SEEK_COMPLETE:
@@ -717,7 +717,7 @@
     if (service != 0) {
         p = service->decode(url, pSampleRate, pNumChannels, pFormat);
     } else {
-        LOGE("Unable to locate media service");
+        ALOGE("Unable to locate media service");
     }
     return p;
 
@@ -737,7 +737,7 @@
     if (service != 0) {
         p = service->decode(fd, offset, length, pSampleRate, pNumChannels, pFormat);
     } else {
-        LOGE("Unable to locate media service");
+        ALOGE("Unable to locate media service");
     }
     return p;
 
diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp
index ec62978..8d947d8 100644
--- a/media/libmedia/mediarecorder.cpp
+++ b/media/libmedia/mediarecorder.cpp
@@ -33,11 +33,11 @@
 {
     ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_IDLE)) {
-        LOGE("setCamera called in an invalid state(%d)", mCurrentState);
+        ALOGE("setCamera called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -54,15 +54,15 @@
 {
     ALOGV("setPreviewSurface(%p)", surface.get());
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setPreviewSurface called in an invalid state(%d)", mCurrentState);
+        ALOGE("setPreviewSurface called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
     if (!mIsVideoSourceSet) {
-        LOGE("try to set preview surface without setting the video source first");
+        ALOGE("try to set preview surface without setting the video source first");
         return INVALID_OPERATION;
     }
 
@@ -79,11 +79,11 @@
 {
     ALOGV("init");
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_IDLE)) {
-        LOGE("init called in an invalid state(%d)", mCurrentState);
+        ALOGE("init called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -109,11 +109,11 @@
 {
     ALOGV("setVideoSource(%d)", vs);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (mIsVideoSourceSet) {
-        LOGE("video source has already been set");
+        ALOGE("video source has already been set");
         return INVALID_OPERATION;
     }
     if (mCurrentState & MEDIA_RECORDER_IDLE) {
@@ -124,7 +124,7 @@
         }
     }
     if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
-        LOGE("setVideoSource called in an invalid state(%d)", mCurrentState);
+        ALOGE("setVideoSource called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -144,7 +144,7 @@
 {
     ALOGV("setAudioSource(%d)", as);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (mCurrentState & MEDIA_RECORDER_IDLE) {
@@ -155,11 +155,11 @@
         }
     }
     if (mIsAudioSourceSet) {
-        LOGE("audio source has already been set");
+        ALOGE("audio source has already been set");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
-        LOGE("setAudioSource called in an invalid state(%d)", mCurrentState);
+        ALOGE("setAudioSource called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -177,21 +177,21 @@
 {
     ALOGV("setOutputFormat(%d)", of);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
-        LOGE("setOutputFormat called in an invalid state: %d", mCurrentState);
+        ALOGE("setOutputFormat called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
     if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_AUDIO_ONLY_START && of != OUTPUT_FORMAT_RTP_AVP && of != OUTPUT_FORMAT_MPEG2TS) { //first non-video output format
-        LOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of);
+        ALOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of);
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->setOutputFormat(of);
     if (OK != ret) {
-        LOGE("setOutputFormat failed: %d", ret);
+        ALOGE("setOutputFormat failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -203,19 +203,19 @@
 {
     ALOGV("setVideoEncoder(%d)", ve);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!mIsVideoSourceSet) {
-        LOGE("try to set the video encoder without setting the video source first");
+        ALOGE("try to set the video encoder without setting the video source first");
         return INVALID_OPERATION;
     }
     if (mIsVideoEncoderSet) {
-        LOGE("video encoder has already been set");
+        ALOGE("video encoder has already been set");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setVideoEncoder called in an invalid state(%d)", mCurrentState);
+        ALOGE("setVideoEncoder called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -233,19 +233,19 @@
 {
     ALOGV("setAudioEncoder(%d)", ae);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!mIsAudioSourceSet) {
-        LOGE("try to set the audio encoder without setting the audio source first");
+        ALOGE("try to set the audio encoder without setting the audio source first");
         return INVALID_OPERATION;
     }
     if (mIsAudioEncoderSet) {
-        LOGE("audio encoder has already been set");
+        ALOGE("audio encoder has already been set");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setAudioEncoder called in an invalid state(%d)", mCurrentState);
+        ALOGE("setAudioEncoder called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -263,15 +263,15 @@
 {
     ALOGV("setOutputFile(%s)", path);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (mIsOutputFileSet) {
-        LOGE("output file has already been set");
+        ALOGE("output file has already been set");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setOutputFile called in an invalid state(%d)", mCurrentState);
+        ALOGE("setOutputFile called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -289,15 +289,15 @@
 {
     ALOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (mIsOutputFileSet) {
-        LOGE("output file has already been set");
+        ALOGE("output file has already been set");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setOutputFile called in an invalid state(%d)", mCurrentState);
+        ALOGE("setOutputFile called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
 
@@ -308,7 +308,7 @@
     // this issue by checking the file descriptor first before passing
     // it through binder call.
     if (fd < 0) {
-        LOGE("Invalid file descriptor: %d", fd);
+        ALOGE("Invalid file descriptor: %d", fd);
         return BAD_VALUE;
     }
 
@@ -326,21 +326,21 @@
 {
     ALOGV("setVideoSize(%d, %d)", width, height);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setVideoSize called in an invalid state: %d", mCurrentState);
+        ALOGE("setVideoSize called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
     if (!mIsVideoSourceSet) {
-        LOGE("Cannot set video size without setting video source first");
+        ALOGE("Cannot set video size without setting video source first");
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->setVideoSize(width, height);
     if (OK != ret) {
-        LOGE("setVideoSize failed: %d", ret);
+        ALOGE("setVideoSize failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -358,7 +358,7 @@
     mSurfaceMediaSource =
             mMediaRecorder->querySurfaceMediaSource();
     if (mSurfaceMediaSource == NULL) {
-        LOGE("SurfaceMediaSource could not be initialized!");
+        ALOGE("SurfaceMediaSource could not be initialized!");
     }
     return mSurfaceMediaSource;
 }
@@ -369,21 +369,21 @@
 {
     ALOGV("setVideoFrameRate(%d)", frames_per_second);
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("setVideoFrameRate called in an invalid state: %d", mCurrentState);
+        ALOGE("setVideoFrameRate called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
     if (!mIsVideoSourceSet) {
-        LOGE("Cannot set video frame rate without setting video source first");
+        ALOGE("Cannot set video frame rate without setting video source first");
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->setVideoFrameRate(frames_per_second);
     if (OK != ret) {
-        LOGE("setVideoFrameRate failed: %d", ret);
+        ALOGE("setVideoFrameRate failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -393,7 +393,7 @@
 status_t MediaRecorder::setParameters(const String8& params) {
     ALOGV("setParameters(%s)", params.string());
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
 
@@ -402,13 +402,13 @@
                             MEDIA_RECORDER_RECORDING |
                             MEDIA_RECORDER_ERROR));
     if (isInvalidState) {
-        LOGE("setParameters is called in an invalid state: %d", mCurrentState);
+        ALOGE("setParameters is called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->setParameters(params);
     if (OK != ret) {
-        LOGE("setParameters(%s) failed: %d", params.string(), ret);
+        ALOGE("setParameters(%s) failed: %d", params.string(), ret);
         // Do not change our current state to MEDIA_RECORDER_ERROR, failures
         // of the only currently supported parameters, "max-duration" and
         // "max-filesize" are _not_ fatal.
@@ -421,34 +421,34 @@
 {
     ALOGV("prepare");
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
-        LOGE("prepare called in an invalid state: %d", mCurrentState);
+        ALOGE("prepare called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
     if (mIsAudioSourceSet != mIsAudioEncoderSet) {
         if (mIsAudioSourceSet) {
-            LOGE("audio source is set, but audio encoder is not set");
+            ALOGE("audio source is set, but audio encoder is not set");
         } else {  // must not happen, since setAudioEncoder checks this already
-            LOGE("audio encoder is set, but audio source is not set");
+            ALOGE("audio encoder is set, but audio source is not set");
         }
         return INVALID_OPERATION;
     }
 
     if (mIsVideoSourceSet != mIsVideoEncoderSet) {
         if (mIsVideoSourceSet) {
-            LOGE("video source is set, but video encoder is not set");
+            ALOGE("video source is set, but video encoder is not set");
         } else {  // must not happen, since setVideoEncoder checks this already
-            LOGE("video encoder is set, but video source is not set");
+            ALOGE("video encoder is set, but video source is not set");
         }
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->prepare();
     if (OK != ret) {
-        LOGE("prepare failed: %d", ret);
+        ALOGE("prepare failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -460,17 +460,17 @@
 {
     ALOGV("getMaxAmplitude");
     if(mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (mCurrentState & MEDIA_RECORDER_ERROR) {
-        LOGE("getMaxAmplitude called in an invalid state: %d", mCurrentState);
+        ALOGE("getMaxAmplitude called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->getMaxAmplitude(max);
     if (OK != ret) {
-        LOGE("getMaxAmplitude failed: %d", ret);
+        ALOGE("getMaxAmplitude failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -481,17 +481,17 @@
 {
     ALOGV("start");
     if (mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_PREPARED)) {
-        LOGE("start called in an invalid state: %d", mCurrentState);
+        ALOGE("start called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->start();
     if (OK != ret) {
-        LOGE("start failed: %d", ret);
+        ALOGE("start failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -503,17 +503,17 @@
 {
     ALOGV("stop");
     if (mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
     if (!(mCurrentState & MEDIA_RECORDER_RECORDING)) {
-        LOGE("stop called in an invalid state: %d", mCurrentState);
+        ALOGE("stop called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
 
     status_t ret = mMediaRecorder->stop();
     if (OK != ret) {
-        LOGE("stop failed: %d", ret);
+        ALOGE("stop failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     }
@@ -531,7 +531,7 @@
 {
     ALOGV("reset");
     if (mMediaRecorder == NULL) {
-        LOGE("media recorder is not initialized yet");
+        ALOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
 
@@ -556,7 +556,7 @@
             break;
 
         default: {
-            LOGE("Unexpected non-existing state: %d", mCurrentState);
+            ALOGE("Unexpected non-existing state: %d", mCurrentState);
             break;
         }
     }
@@ -567,12 +567,12 @@
 {
     ALOGV("close");
     if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
-        LOGE("close called in an invalid state: %d", mCurrentState);
+        ALOGE("close called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
     status_t ret = mMediaRecorder->close();
     if (OK != ret) {
-        LOGE("close failed: %d", ret);
+        ALOGE("close failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return UNKNOWN_ERROR;
     } else {
@@ -586,7 +586,7 @@
     ALOGV("doReset");
     status_t ret = mMediaRecorder->reset();
     if (OK != ret) {
-        LOGE("doReset failed: %d", ret);
+        ALOGE("doReset failed: %d", ret);
         mCurrentState = MEDIA_RECORDER_ERROR;
         return ret;
     } else {
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 487c433..f5cb019 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -112,14 +112,14 @@
     int32_t val;
     if (p.readInt32(&val) != OK)
     {
-        LOGE("Failed to read filter's length");
+        ALOGE("Failed to read filter's length");
         *status = NOT_ENOUGH_DATA;
         return false;
     }
 
     if( val > kMaxFilterSize || val < 0)
     {
-        LOGE("Invalid filter len %d", val);
+        ALOGE("Invalid filter len %d", val);
         *status = BAD_VALUE;
         return false;
     }
@@ -134,7 +134,7 @@
 
     if (p.dataAvail() < size)
     {
-        LOGE("Filter too short expected %d but got %d", size, p.dataAvail());
+        ALOGE("Filter too short expected %d but got %d", size, p.dataAvail());
         *status = NOT_ENOUGH_DATA;
         return false;
     }
@@ -144,7 +144,7 @@
 
     if (NULL == data)
     {
-        LOGE("Filter had no data");
+        ALOGE("Filter had no data");
         *status = BAD_VALUE;
         return false;
     }
@@ -184,7 +184,7 @@
 #endif
     if (getpid() == IPCThreadState::self()->getCallingPid()) return true;
     bool ok = checkCallingPermission(String16(permissionString));
-    if (!ok) LOGE("Request requires %s", permissionString);
+    if (!ok) ALOGE("Request requires %s", permissionString);
     return ok;
 }
 
@@ -630,7 +630,7 @@
             p = new TestPlayerStub();
             break;
         default:
-            LOGE("Unknown player type: %d", playerType);
+            ALOGE("Unknown player type: %d", playerType);
             return NULL;
     }
     if (p != NULL) {
@@ -641,7 +641,7 @@
         }
     }
     if (p == NULL) {
-        LOGE("Failed to create player object");
+        ALOGE("Failed to create player object");
     }
     return p;
 }
@@ -688,7 +688,7 @@
         int fd = android::openContentProviderFile(url16);
         if (fd < 0)
         {
-            LOGE("Couldn't open fd for %s", url);
+            ALOGE("Couldn't open fd for %s", url);
             return UNKNOWN_ERROR;
         }
         setDataSource(fd, 0, 0x7fffffffffLL); // this sets mStatus
@@ -713,7 +713,7 @@
         if (mStatus == NO_ERROR) {
             mPlayer = p;
         } else {
-            LOGE("  error: %d", mStatus);
+            ALOGE("  error: %d", mStatus);
         }
         return mStatus;
     }
@@ -725,7 +725,7 @@
     struct stat sb;
     int ret = fstat(fd, &sb);
     if (ret != 0) {
-        LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno));
+        ALOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno));
         return UNKNOWN_ERROR;
     }
 
@@ -736,7 +736,7 @@
     ALOGV("st_size = %llu", sb.st_size);
 
     if (offset >= sb.st_size) {
-        LOGE("offset error");
+        ALOGE("offset error");
         ::close(fd);
         return UNKNOWN_ERROR;
     }
@@ -794,7 +794,7 @@
                 NATIVE_WINDOW_API_MEDIA);
 
         if (err != OK) {
-            LOGW("native_window_api_disconnect returned an error: %s (%d)",
+            ALOGW("native_window_api_disconnect returned an error: %s (%d)",
                     strerror(-err), err);
         }
     }
@@ -821,7 +821,7 @@
                 NATIVE_WINDOW_API_MEDIA);
 
         if (err != OK) {
-            LOGE("setVideoSurfaceTexture failed: %d", err);
+            ALOGE("setVideoSurfaceTexture failed: %d", err);
             // Note that we must do the reset before disconnecting from the ANW.
             // Otherwise queue/dequeue calls could be made on the disconnected
             // ANW, which may result in errors.
@@ -905,7 +905,7 @@
 
     if (status != OK) {
         metadata.resetParcel();
-        LOGE("getMetadata failed %d", status);
+        ALOGE("getMetadata failed %d", status);
         return status;
     }
 
@@ -975,7 +975,7 @@
     if (ret == NO_ERROR) {
         ALOGV("[%d] getCurrentPosition = %d", mConnId, *msec);
     } else {
-        LOGE("getCurrentPosition returned %d", ret);
+        ALOGE("getCurrentPosition returned %d", ret);
     }
     return ret;
 }
@@ -989,7 +989,7 @@
     if (ret == NO_ERROR) {
         ALOGV("[%d] getDuration = %d", mConnId, *msec);
     } else {
-        LOGE("getDuration returned %d", ret);
+        ALOGE("getDuration returned %d", ret);
     }
     return ret;
 }
@@ -1394,7 +1394,7 @@
     }
 
     if ((t == 0) || (t->initCheck() != NO_ERROR)) {
-        LOGE("Unable to create audio track");
+        ALOGE("Unable to create audio track");
         delete t;
         return NO_INIT;
     }
@@ -1652,7 +1652,7 @@
     p += mSize;
     ALOGV("memcpy(%p, %p, %u)", p, buffer, size);
     if (mSize + size > mHeap->getSize()) {
-        LOGE("Heap size overflow! req size: %d, max size: %d", (mSize + size), mHeap->getSize());
+        ALOGE("Heap size overflow! req size: %d, max size: %d", (mSize + size), mHeap->getSize());
         size = mHeap->getSize() - mSize;
     }
     memcpy(p, buffer, size);
@@ -1687,7 +1687,7 @@
     switch (msg)
     {
     case MEDIA_ERROR:
-        LOGE("Error %d, %d occurred", ext1, ext2);
+        ALOGE("Error %d, %d occurred", ext1, ext2);
         p->mError = ext1;
         break;
     case MEDIA_PREPARED:
@@ -1772,7 +1772,7 @@
 
     } else if (params & kBatteryDataAudioFlingerStop) {
         if (mBatteryAudio.refCount <= 0) {
-            LOGW("Battery track warning: refCount is <= 0");
+            ALOGW("Battery track warning: refCount is <= 0");
             return;
         }
 
@@ -1807,7 +1807,7 @@
         info.refCount = 0;
 
         if (mBatteryData.add(uid, info) == NO_MEMORY) {
-            LOGE("Battery track error: no memory for new app");
+            ALOGE("Battery track error: no memory for new app");
             return;
         }
     }
@@ -1825,10 +1825,10 @@
         }
     } else {
         if (info.refCount == 0) {
-            LOGW("Battery track warning: refCount is already 0");
+            ALOGW("Battery track warning: refCount is already 0");
             return;
         } else if (info.refCount < 0) {
-            LOGE("Battery track error: refCount < 0");
+            ALOGE("Battery track error: refCount < 0");
             mBatteryData.removeItem(uid);
             return;
         }
diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp
index ca92c77..d219fc2 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.cpp
+++ b/media/libmediaplayerservice/MediaRecorderClient.cpp
@@ -54,7 +54,7 @@
 #endif
     if (getpid() == IPCThreadState::self()->getCallingPid()) return true;
     bool ok = checkCallingPermission(String16(permissionString));
-    if (!ok) LOGE("Request requires %s", permissionString);
+    if (!ok) ALOGE("Request requires %s", permissionString);
     return ok;
 }
 
@@ -64,7 +64,7 @@
     ALOGV("Query SurfaceMediaSource");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NULL;
     }
     return mRecorder->querySurfaceMediaSource();
@@ -78,7 +78,7 @@
     ALOGV("setCamera");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setCamera(camera, proxy);
@@ -89,7 +89,7 @@
     ALOGV("setPreviewSurface");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setPreviewSurface(surface);
@@ -103,7 +103,7 @@
     }
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL)	{
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setVideoSource((video_source)vs);
@@ -117,7 +117,7 @@
     }
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL)  {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setAudioSource((audio_source_t)as);
@@ -128,7 +128,7 @@
     ALOGV("setOutputFormat(%d)", of);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setOutputFormat((output_format)of);
@@ -139,7 +139,7 @@
     ALOGV("setVideoEncoder(%d)", ve);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setVideoEncoder((video_encoder)ve);
@@ -150,7 +150,7 @@
     ALOGV("setAudioEncoder(%d)", ae);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setAudioEncoder((audio_encoder)ae);
@@ -161,7 +161,7 @@
     ALOGV("setOutputFile(%s)", path);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setOutputFile(path);
@@ -172,7 +172,7 @@
     ALOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setOutputFile(fd, offset, length);
@@ -183,7 +183,7 @@
     ALOGV("setVideoSize(%dx%d)", width, height);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setVideoSize(width, height);
@@ -194,7 +194,7 @@
     ALOGV("setVideoFrameRate(%d)", frames_per_second);
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setVideoFrameRate(frames_per_second);
@@ -204,7 +204,7 @@
     ALOGV("setParameters(%s)", params.string());
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setParameters(params);
@@ -215,7 +215,7 @@
     ALOGV("prepare");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->prepare();
@@ -227,7 +227,7 @@
     ALOGV("getMaxAmplitude");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->getMaxAmplitude(max);
@@ -238,7 +238,7 @@
     ALOGV("start");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->start();
@@ -250,7 +250,7 @@
     ALOGV("stop");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->stop();
@@ -261,7 +261,7 @@
     ALOGV("init");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->init();
@@ -272,7 +272,7 @@
     ALOGV("close");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->close();
@@ -284,7 +284,7 @@
     ALOGV("reset");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->reset();
@@ -322,7 +322,7 @@
     ALOGV("setListener");
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL) {
-        LOGE("recorder is not initialized");
+        ALOGE("recorder is not initialized");
         return NO_INIT;
     }
     return mRecorder->setListener(listener);
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
index f945c6a3..7dbb57f 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
@@ -98,11 +98,11 @@
         default:
             // TODO:
             // support for TEST_PLAYER
-            LOGE("player type %d is not supported",  playerType);
+            ALOGE("player type %d is not supported",  playerType);
             break;
     }
     if (p == NULL) {
-        LOGE("failed to create a retriever object");
+        ALOGE("failed to create a retriever object");
     }
     return p;
 }
@@ -131,7 +131,7 @@
     struct stat sb;
     int ret = fstat(fd, &sb);
     if (ret != 0) {
-        LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno));
+        ALOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno));
         return BAD_VALUE;
     }
     ALOGV("st_dev  = %llu", sb.st_dev);
@@ -141,7 +141,7 @@
     ALOGV("st_size = %llu", sb.st_size);
 
     if (offset >= sb.st_size) {
-        LOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size);
+        ALOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size);
         ::close(fd);
         return BAD_VALUE;
     }
@@ -169,24 +169,24 @@
     Mutex::Autolock lock(mLock);
     mThumbnail.clear();
     if (mRetriever == NULL) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return NULL;
     }
     VideoFrame *frame = mRetriever->getFrameAtTime(timeUs, option);
     if (frame == NULL) {
-        LOGE("failed to capture a video frame");
+        ALOGE("failed to capture a video frame");
         return NULL;
     }
     size_t size = sizeof(VideoFrame) + frame->mSize;
     sp<MemoryHeapBase> heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient");
     if (heap == NULL) {
-        LOGE("failed to create MemoryDealer");
+        ALOGE("failed to create MemoryDealer");
         delete frame;
         return NULL;
     }
     mThumbnail = new MemoryBase(heap, 0, size);
     if (mThumbnail == NULL) {
-        LOGE("not enough memory for VideoFrame size=%u", size);
+        ALOGE("not enough memory for VideoFrame size=%u", size);
         delete frame;
         return NULL;
     }
@@ -210,24 +210,24 @@
     Mutex::Autolock lock(mLock);
     mAlbumArt.clear();
     if (mRetriever == NULL) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return NULL;
     }
     MediaAlbumArt *albumArt = mRetriever->extractAlbumArt();
     if (albumArt == NULL) {
-        LOGE("failed to extract an album art");
+        ALOGE("failed to extract an album art");
         return NULL;
     }
     size_t size = sizeof(MediaAlbumArt) + albumArt->mSize;
     sp<MemoryHeapBase> heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient");
     if (heap == NULL) {
-        LOGE("failed to create MemoryDealer object");
+        ALOGE("failed to create MemoryDealer object");
         delete albumArt;
         return NULL;
     }
     mAlbumArt = new MemoryBase(heap, 0, size);
     if (mAlbumArt == NULL) {
-        LOGE("not enough memory for MediaAlbumArt size=%u", size);
+        ALOGE("not enough memory for MediaAlbumArt size=%u", size);
         delete albumArt;
         return NULL;
     }
@@ -244,7 +244,7 @@
     ALOGV("extractMetadata");
     Mutex::Autolock lock(mLock);
     if (mRetriever == NULL) {
-        LOGE("retriever is not initialized");
+        ALOGE("retriever is not initialized");
         return NULL;
     }
     return mRetriever->extractMetadata(keyCode);
diff --git a/media/libmediaplayerservice/MidiFile.cpp b/media/libmediaplayerservice/MidiFile.cpp
index 4946956..7cb8c29 100644
--- a/media/libmediaplayerservice/MidiFile.cpp
+++ b/media/libmediaplayerservice/MidiFile.cpp
@@ -69,13 +69,13 @@
     if (pLibConfig == NULL)
         pLibConfig = EAS_Config();
     if ((pLibConfig == NULL) || (LIB_VERSION != pLibConfig->libVersion)) {
-        LOGE("EAS library/header mismatch");
+        ALOGE("EAS library/header mismatch");
         goto Failed;
     }
 
     // initialize EAS library
     if (EAS_Init(&mEasData) != EAS_SUCCESS) {
-        LOGE("EAS_Init failed");
+        ALOGE("EAS_Init failed");
         goto Failed;
     }
 
@@ -134,7 +134,7 @@
     }
 
     if (result != EAS_SUCCESS) {
-        LOGE("EAS_OpenFile failed: [%d]", (int)result);
+        ALOGE("EAS_OpenFile failed: [%d]", (int)result);
         mState = EAS_STATE_ERROR;
         return ERROR_OPEN_FAILED;
     }
@@ -162,7 +162,7 @@
     updateState();
 
     if (result != EAS_SUCCESS) {
-        LOGE("EAS_OpenFile failed: [%d]", (int)result);
+        ALOGE("EAS_OpenFile failed: [%d]", (int)result);
         mState = EAS_STATE_ERROR;
         return ERROR_OPEN_FAILED;
     }
@@ -181,7 +181,7 @@
     }
     EAS_RESULT result;
     if ((result = EAS_Prepare(mEasData, mEasHandle)) != EAS_SUCCESS) {
-        LOGE("EAS_Prepare failed: [%ld]", result);
+        ALOGE("EAS_Prepare failed: [%ld]", result);
         return ERROR_EAS_FAILURE;
     }
     updateState();
@@ -237,7 +237,7 @@
     if (!mPaused && (mState != EAS_STATE_STOPPED)) {
         EAS_RESULT result = EAS_Pause(mEasData, mEasHandle);
         if (result != EAS_SUCCESS) {
-            LOGE("EAS_Pause returned error %ld", result);
+            ALOGE("EAS_Pause returned error %ld", result);
             return ERROR_EAS_FAILURE;
         }
     }
@@ -258,7 +258,7 @@
         if ((result = EAS_Locate(mEasData, mEasHandle, position, false))
                 != EAS_SUCCESS)
         {
-            LOGE("EAS_Locate returned %ld", result);
+            ALOGE("EAS_Locate returned %ld", result);
             return ERROR_EAS_FAILURE;
         }
         EAS_GetLocation(mEasData, mEasHandle, &mPlayTime);
@@ -293,11 +293,11 @@
 {
     ALOGV("MidiFile::getCurrentPosition");
     if (!mEasHandle) {
-        LOGE("getCurrentPosition(): file not open");
+        ALOGE("getCurrentPosition(): file not open");
         return ERROR_NOT_OPEN;
     }
     if (mPlayTime < 0) {
-        LOGE("getCurrentPosition(): mPlayTime = %ld", mPlayTime);
+        ALOGE("getCurrentPosition(): mPlayTime = %ld", mPlayTime);
         return ERROR_EAS_FAILURE;
     }
     *position = mPlayTime;
@@ -422,7 +422,7 @@
 
 status_t MidiFile::createOutputTrack() {
     if (mAudioSink->open(pLibConfig->sampleRate, pLibConfig->numChannels, AUDIO_FORMAT_PCM_16_BIT, 2) != NO_ERROR) {
-        LOGE("mAudioSink open failed");
+        ALOGE("mAudioSink open failed");
         return ERROR_OPEN_FAILED;
     }
     return NO_ERROR;
@@ -439,7 +439,7 @@
     // allocate render buffer
     mAudioBuffer = new EAS_PCM[pLibConfig->mixBufferSize * pLibConfig->numChannels * NUM_BUFFERS];
     if (!mAudioBuffer) {
-        LOGE("mAudioBuffer allocate failed");
+        ALOGE("mAudioBuffer allocate failed");
         goto threadExit;
     }
 
@@ -473,7 +473,7 @@
         for (int i = 0; i < NUM_BUFFERS; i++) {
             result = EAS_Render(mEasData, p, pLibConfig->mixBufferSize, &count);
             if (result != EAS_SUCCESS) {
-                LOGE("EAS_Render returned %ld", result);
+                ALOGE("EAS_Render returned %ld", result);
             }
             p += count * pLibConfig->numChannels;
             num_output += count * pLibConfig->numChannels * sizeof(EAS_PCM);
@@ -495,7 +495,7 @@
         // Write data to the audio hardware
         // ALOGV("MidiFile::render - writing to audio output");
         if ((temp = mAudioSink->write(mAudioBuffer, num_output)) < 0) {
-            LOGE("Error in writing:%d",temp);
+            ALOGE("Error in writing:%d",temp);
             return temp;
         }
 
@@ -519,7 +519,7 @@
             }
             case EAS_STATE_ERROR:
             {
-                LOGE("MidiFile::render - error");
+                ALOGE("MidiFile::render - error");
                 sendEvent(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN);
                 break;
             }
diff --git a/media/libmediaplayerservice/MidiMetadataRetriever.cpp b/media/libmediaplayerservice/MidiMetadataRetriever.cpp
index bb65ed4..465209f 100644
--- a/media/libmediaplayerservice/MidiMetadataRetriever.cpp
+++ b/media/libmediaplayerservice/MidiMetadataRetriever.cpp
@@ -63,7 +63,7 @@
     ALOGV("extractMetdata: key(%d)", keyCode);
     Mutex::Autolock lock(mLock);
     if (mMidiPlayer == 0 || mMidiPlayer->initCheck() != NO_ERROR) {
-        LOGE("Midi player is not initialized yet");
+        ALOGE("Midi player is not initialized yet");
         return NULL;
     }
     switch (keyCode) {
@@ -72,7 +72,7 @@
             if (mMetadataValues[0][0] == '\0') {
                 int duration = -1;
                 if (mMidiPlayer->getDuration(&duration) != NO_ERROR) {
-                    LOGE("failed to get duration");
+                    ALOGE("failed to get duration");
                     return NULL;
                 }
                 snprintf(mMetadataValues[0], MAX_METADATA_STRING_LENGTH, "%d", duration);
@@ -82,7 +82,7 @@
             return mMetadataValues[0];
         }
     default:
-        LOGE("Unsupported key code (%d)", keyCode);
+        ALOGE("Unsupported key code (%d)", keyCode);
         return NULL;
     }
     return NULL;
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index c0ba091..4632016 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -97,7 +97,7 @@
     ALOGV("setAudioSource: %d", as);
     if (as < AUDIO_SOURCE_DEFAULT ||
         as >= AUDIO_SOURCE_CNT) {
-        LOGE("Invalid audio source: %d", as);
+        ALOGE("Invalid audio source: %d", as);
         return BAD_VALUE;
     }
 
@@ -114,7 +114,7 @@
     ALOGV("setVideoSource: %d", vs);
     if (vs < VIDEO_SOURCE_DEFAULT ||
         vs >= VIDEO_SOURCE_LIST_END) {
-        LOGE("Invalid video source: %d", vs);
+        ALOGE("Invalid video source: %d", vs);
         return BAD_VALUE;
     }
 
@@ -131,7 +131,7 @@
     ALOGV("setOutputFormat: %d", of);
     if (of < OUTPUT_FORMAT_DEFAULT ||
         of >= OUTPUT_FORMAT_LIST_END) {
-        LOGE("Invalid output format: %d", of);
+        ALOGE("Invalid output format: %d", of);
         return BAD_VALUE;
     }
 
@@ -148,7 +148,7 @@
     ALOGV("setAudioEncoder: %d", ae);
     if (ae < AUDIO_ENCODER_DEFAULT ||
         ae >= AUDIO_ENCODER_LIST_END) {
-        LOGE("Invalid audio encoder: %d", ae);
+        ALOGE("Invalid audio encoder: %d", ae);
         return BAD_VALUE;
     }
 
@@ -165,7 +165,7 @@
     ALOGV("setVideoEncoder: %d", ve);
     if (ve < VIDEO_ENCODER_DEFAULT ||
         ve >= VIDEO_ENCODER_LIST_END) {
-        LOGE("Invalid video encoder: %d", ve);
+        ALOGE("Invalid video encoder: %d", ve);
         return BAD_VALUE;
     }
 
@@ -181,7 +181,7 @@
 status_t StagefrightRecorder::setVideoSize(int width, int height) {
     ALOGV("setVideoSize: %dx%d", width, height);
     if (width <= 0 || height <= 0) {
-        LOGE("Invalid video size: %dx%d", width, height);
+        ALOGE("Invalid video size: %dx%d", width, height);
         return BAD_VALUE;
     }
 
@@ -196,7 +196,7 @@
     ALOGV("setVideoFrameRate: %d", frames_per_second);
     if ((frames_per_second <= 0 && frames_per_second != -1) ||
         frames_per_second > 120) {
-        LOGE("Invalid video frame rate: %d", frames_per_second);
+        ALOGE("Invalid video frame rate: %d", frames_per_second);
         return BAD_VALUE;
     }
 
@@ -210,11 +210,11 @@
                                         const sp<ICameraRecordingProxy> &proxy) {
     ALOGV("setCamera");
     if (camera == 0) {
-        LOGE("camera is NULL");
+        ALOGE("camera is NULL");
         return BAD_VALUE;
     }
     if (proxy == 0) {
-        LOGE("camera proxy is NULL");
+        ALOGE("camera proxy is NULL");
         return BAD_VALUE;
     }
 
@@ -231,7 +231,7 @@
 }
 
 status_t StagefrightRecorder::setOutputFile(const char *path) {
-    LOGE("setOutputFile(const char*) must not be called");
+    ALOGE("setOutputFile(const char*) must not be called");
     // We don't actually support this at all, as the media_server process
     // no longer has permissions to create files.
 
@@ -245,7 +245,7 @@
     CHECK_EQ(length, 0);
 
     if (fd < 0) {
-        LOGE("Invalid file descriptor: %d", fd);
+        ALOGE("Invalid file descriptor: %d", fd);
         return -EBADF;
     }
 
@@ -315,7 +315,7 @@
 status_t StagefrightRecorder::setParamAudioSamplingRate(int32_t sampleRate) {
     ALOGV("setParamAudioSamplingRate: %d", sampleRate);
     if (sampleRate <= 0) {
-        LOGE("Invalid audio sampling rate: %d", sampleRate);
+        ALOGE("Invalid audio sampling rate: %d", sampleRate);
         return BAD_VALUE;
     }
 
@@ -327,7 +327,7 @@
 status_t StagefrightRecorder::setParamAudioNumberOfChannels(int32_t channels) {
     ALOGV("setParamAudioNumberOfChannels: %d", channels);
     if (channels <= 0 || channels >= 3) {
-        LOGE("Invalid number of audio channels: %d", channels);
+        ALOGE("Invalid number of audio channels: %d", channels);
         return BAD_VALUE;
     }
 
@@ -339,7 +339,7 @@
 status_t StagefrightRecorder::setParamAudioEncodingBitRate(int32_t bitRate) {
     ALOGV("setParamAudioEncodingBitRate: %d", bitRate);
     if (bitRate <= 0) {
-        LOGE("Invalid audio encoding bit rate: %d", bitRate);
+        ALOGE("Invalid audio encoding bit rate: %d", bitRate);
         return BAD_VALUE;
     }
 
@@ -354,7 +354,7 @@
 status_t StagefrightRecorder::setParamVideoEncodingBitRate(int32_t bitRate) {
     ALOGV("setParamVideoEncodingBitRate: %d", bitRate);
     if (bitRate <= 0) {
-        LOGE("Invalid video encoding bit rate: %d", bitRate);
+        ALOGE("Invalid video encoding bit rate: %d", bitRate);
         return BAD_VALUE;
     }
 
@@ -370,7 +370,7 @@
 status_t StagefrightRecorder::setParamVideoRotation(int32_t degrees) {
     ALOGV("setParamVideoRotation: %d", degrees);
     if (degrees < 0 || degrees % 90 != 0) {
-        LOGE("Unsupported video rotation angle: %d", degrees);
+        ALOGE("Unsupported video rotation angle: %d", degrees);
         return BAD_VALUE;
     }
     mRotationDegrees = degrees % 360;
@@ -382,15 +382,15 @@
 
     // This is meant for backward compatibility for MediaRecorder.java
     if (timeUs <= 0) {
-        LOGW("Max file duration is not positive: %lld us. Disabling duration limit.", timeUs);
+        ALOGW("Max file duration is not positive: %lld us. Disabling duration limit.", timeUs);
         timeUs = 0; // Disable the duration limit for zero or negative values.
     } else if (timeUs <= 100000LL) {  // XXX: 100 milli-seconds
-        LOGE("Max file duration is too short: %lld us", timeUs);
+        ALOGE("Max file duration is too short: %lld us", timeUs);
         return BAD_VALUE;
     }
 
     if (timeUs <= 15 * 1000000LL) {
-        LOGW("Target duration (%lld us) too short to be respected", timeUs);
+        ALOGW("Target duration (%lld us) too short to be respected", timeUs);
     }
     mMaxFileDurationUs = timeUs;
     return OK;
@@ -401,16 +401,16 @@
 
     // This is meant for backward compatibility for MediaRecorder.java
     if (bytes <= 0) {
-        LOGW("Max file size is not positive: %lld bytes. "
+        ALOGW("Max file size is not positive: %lld bytes. "
              "Disabling file size limit.", bytes);
         bytes = 0; // Disable the file size limit for zero or negative values.
     } else if (bytes <= 1024) {  // XXX: 1 kB
-        LOGE("Max file size is too small: %lld bytes", bytes);
+        ALOGE("Max file size is too small: %lld bytes", bytes);
         return BAD_VALUE;
     }
 
     if (bytes <= 100 * 1024) {
-        LOGW("Target file size (%lld bytes) is too small to be respected", bytes);
+        ALOGW("Target file size (%lld bytes) is too small to be respected", bytes);
     }
 
     mMaxFileSizeBytes = bytes;
@@ -423,13 +423,13 @@
         // If interleave duration is too small, it is very inefficient to do
         // interleaving since the metadata overhead will count for a significant
         // portion of the saved contents
-        LOGE("Audio/video interleave duration is too small: %d us", durationUs);
+        ALOGE("Audio/video interleave duration is too small: %d us", durationUs);
         return BAD_VALUE;
     } else if (durationUs >= 10000000) {  // 10 seconds
         // If interleaving duration is too large, it can cause the recording
         // session to use too much memory since we have to save the output
         // data before we write them out
-        LOGE("Audio/video interleave duration is too large: %d us", durationUs);
+        ALOGE("Audio/video interleave duration is too large: %d us", durationUs);
         return BAD_VALUE;
     }
     mInterleaveDurationUs = durationUs;
@@ -464,7 +464,7 @@
 status_t StagefrightRecorder::setParamTrackTimeStatus(int64_t timeDurationUs) {
     ALOGV("setParamTrackTimeStatus: %lld", timeDurationUs);
     if (timeDurationUs < 20000) {  // Infeasible if shorter than 20 ms?
-        LOGE("Tracking time duration too short: %lld us", timeDurationUs);
+        ALOGE("Tracking time duration too short: %lld us", timeDurationUs);
         return BAD_VALUE;
     }
     mTrackEveryTimeDurationUs = timeDurationUs;
@@ -495,7 +495,7 @@
     // The range is set to be the same as the audio's time scale range
     // since audio's time scale has a wider range.
     if (timeScale < 600 || timeScale > 96000) {
-        LOGE("Time scale (%d) for movie is out of range [600, 96000]", timeScale);
+        ALOGE("Time scale (%d) for movie is out of range [600, 96000]", timeScale);
         return BAD_VALUE;
     }
     mMovieTimeScale = timeScale;
@@ -508,7 +508,7 @@
     // 60000 is chosen to make sure that each video frame from a 60-fps
     // video has 1000 ticks.
     if (timeScale < 600 || timeScale > 60000) {
-        LOGE("Time scale (%d) for video is out of range [600, 60000]", timeScale);
+        ALOGE("Time scale (%d) for video is out of range [600, 60000]", timeScale);
         return BAD_VALUE;
     }
     mVideoTimeScale = timeScale;
@@ -520,7 +520,7 @@
 
     // 96000 Hz is the highest sampling rate support in AAC.
     if (timeScale < 600 || timeScale > 96000) {
-        LOGE("Time scale (%d) for audio is out of range [600, 96000]", timeScale);
+        ALOGE("Time scale (%d) for audio is out of range [600, 96000]", timeScale);
         return BAD_VALUE;
     }
     mAudioTimeScale = timeScale;
@@ -545,7 +545,7 @@
 
     // Not allowing time more than a day
     if (timeUs <= 0 || timeUs > 86400*1E6) {
-        LOGE("Time between time lapse frame capture (%lld) is out of range [0, 1 Day]", timeUs);
+        ALOGE("Time between time lapse frame capture (%lld) is out of range [0, 1 Day]", timeUs);
         return BAD_VALUE;
     }
 
@@ -683,7 +683,7 @@
                     1000LL * timeBetweenTimeLapseFrameCaptureMs);
         }
     } else {
-        LOGE("setParameter: failed to find key %s", key.string());
+        ALOGE("setParameter: failed to find key %s", key.string());
     }
     return BAD_VALUE;
 }
@@ -695,13 +695,13 @@
     for (;;) {
         const char *equal_pos = strchr(key_start, '=');
         if (equal_pos == NULL) {
-            LOGE("Parameters %s miss a value", cparams);
+            ALOGE("Parameters %s miss a value", cparams);
             return BAD_VALUE;
         }
         String8 key(key_start, equal_pos - key_start);
         TrimString(&key);
         if (key.length() == 0) {
-            LOGE("Parameters %s contains an empty key", cparams);
+            ALOGE("Parameters %s contains an empty key", cparams);
             return BAD_VALUE;
         }
         const char *value_start = equal_pos + 1;
@@ -737,7 +737,7 @@
     CHECK(mOutputFd >= 0);
 
     if (mWriter != NULL) {
-        LOGE("File writer is not avaialble");
+        ALOGE("File writer is not avaialble");
         return UNKNOWN_ERROR;
     }
 
@@ -769,7 +769,7 @@
             break;
 
         default:
-            LOGE("Unsupported output file format: %d", mOutputFormat);
+            ALOGE("Unsupported output file format: %d", mOutputFormat);
             status = UNKNOWN_ERROR;
             break;
     }
@@ -801,7 +801,7 @@
     status_t err = audioSource->initCheck();
 
     if (err != OK) {
-        LOGE("audio source is not initialized");
+        ALOGE("audio source is not initialized");
         return NULL;
     }
 
@@ -819,7 +819,7 @@
             mime = MEDIA_MIMETYPE_AUDIO_AAC;
             break;
         default:
-            LOGE("Unknown audio encoder: %d", mAudioEncoder);
+            ALOGE("Unknown audio encoder: %d", mAudioEncoder);
             return NULL;
     }
     encMeta->setCString(kKeyMIMEType, mime);
@@ -872,13 +872,13 @@
     if (mOutputFormat == OUTPUT_FORMAT_AMR_NB) {
         if (mAudioEncoder != AUDIO_ENCODER_DEFAULT &&
             mAudioEncoder != AUDIO_ENCODER_AMR_NB) {
-            LOGE("Invalid encoder %d used for AMRNB recording",
+            ALOGE("Invalid encoder %d used for AMRNB recording",
                     mAudioEncoder);
             return BAD_VALUE;
         }
     } else {  // mOutputFormat must be OUTPUT_FORMAT_AMR_WB
         if (mAudioEncoder != AUDIO_ENCODER_AMR_WB) {
-            LOGE("Invlaid encoder %d used for AMRWB recording",
+            ALOGE("Invlaid encoder %d used for AMRWB recording",
                     mAudioEncoder);
             return BAD_VALUE;
         }
@@ -895,7 +895,7 @@
 
 status_t StagefrightRecorder::startRawAudioRecording() {
     if (mAudioSource >= AUDIO_SOURCE_CNT) {
-        LOGE("Invalid audio source: %d", mAudioSource);
+        ALOGE("Invalid audio source: %d", mAudioSource);
         return BAD_VALUE;
     }
 
@@ -1022,11 +1022,11 @@
     int maxFrameRate = mEncoderProfiles->getVideoEncoderParamByName(
                         "enc.vid.fps.max", mVideoEncoder);
     if (mFrameRate < minFrameRate && mFrameRate != -1) {
-        LOGW("Intended video encoding frame rate (%d fps) is too small"
+        ALOGW("Intended video encoding frame rate (%d fps) is too small"
              " and will be set to (%d fps)", mFrameRate, minFrameRate);
         mFrameRate = minFrameRate;
     } else if (mFrameRate > maxFrameRate) {
-        LOGW("Intended video encoding frame rate (%d fps) is too large"
+        ALOGW("Intended video encoding frame rate (%d fps) is too large"
              " and will be set to (%d fps)", mFrameRate, maxFrameRate);
         mFrameRate = maxFrameRate;
     }
@@ -1039,11 +1039,11 @@
     int maxBitRate = mEncoderProfiles->getVideoEncoderParamByName(
                         "enc.vid.bps.max", mVideoEncoder);
     if (mVideoBitRate < minBitRate) {
-        LOGW("Intended video encoding bit rate (%d bps) is too small"
+        ALOGW("Intended video encoding bit rate (%d bps) is too small"
              " and will be set to (%d bps)", mVideoBitRate, minBitRate);
         mVideoBitRate = minBitRate;
     } else if (mVideoBitRate > maxBitRate) {
-        LOGW("Intended video encoding bit rate (%d bps) is too large"
+        ALOGW("Intended video encoding bit rate (%d bps) is too large"
              " and will be set to (%d bps)", mVideoBitRate, maxBitRate);
         mVideoBitRate = maxBitRate;
     }
@@ -1056,11 +1056,11 @@
     int maxFrameWidth = mEncoderProfiles->getVideoEncoderParamByName(
                         "enc.vid.width.max", mVideoEncoder);
     if (mVideoWidth < minFrameWidth) {
-        LOGW("Intended video encoding frame width (%d) is too small"
+        ALOGW("Intended video encoding frame width (%d) is too small"
              " and will be set to (%d)", mVideoWidth, minFrameWidth);
         mVideoWidth = minFrameWidth;
     } else if (mVideoWidth > maxFrameWidth) {
-        LOGW("Intended video encoding frame width (%d) is too large"
+        ALOGW("Intended video encoding frame width (%d) is too large"
              " and will be set to (%d)", mVideoWidth, maxFrameWidth);
         mVideoWidth = maxFrameWidth;
     }
@@ -1131,7 +1131,7 @@
         audioSampleRate == mSampleRate &&
         audioChannels == mAudioChannels) {
         if (videoCodec == VIDEO_ENCODER_H264) {
-            LOGI("Force to use AVC baseline profile");
+            ALOGI("Force to use AVC baseline profile");
             setParamVideoEncoderProfile(OMX_VIDEO_AVCProfileBaseline);
         }
     }
@@ -1151,7 +1151,7 @@
             mEncoderProfiles->getAudioEncoderParamByName(
                 "enc.aud.bps.min", mAudioEncoder);
     if (mAudioBitRate < minAudioBitRate) {
-        LOGW("Intended audio encoding bit rate (%d) is too small"
+        ALOGW("Intended audio encoding bit rate (%d) is too small"
             " and will be set to (%d)", mAudioBitRate, minAudioBitRate);
         mAudioBitRate = minAudioBitRate;
     }
@@ -1160,7 +1160,7 @@
             mEncoderProfiles->getAudioEncoderParamByName(
                 "enc.aud.bps.max", mAudioEncoder);
     if (mAudioBitRate > maxAudioBitRate) {
-        LOGW("Intended audio encoding bit rate (%d) is too large"
+        ALOGW("Intended audio encoding bit rate (%d) is too large"
             " and will be set to (%d)", mAudioBitRate, maxAudioBitRate);
         mAudioBitRate = maxAudioBitRate;
     }
@@ -1173,7 +1173,7 @@
             mEncoderProfiles->getAudioEncoderParamByName(
                 "enc.aud.hz.min", mAudioEncoder);
     if (mSampleRate < minSampleRate) {
-        LOGW("Intended audio sample rate (%d) is too small"
+        ALOGW("Intended audio sample rate (%d) is too small"
             " and will be set to (%d)", mSampleRate, minSampleRate);
         mSampleRate = minSampleRate;
     }
@@ -1182,7 +1182,7 @@
             mEncoderProfiles->getAudioEncoderParamByName(
                 "enc.aud.hz.max", mAudioEncoder);
     if (mSampleRate > maxSampleRate) {
-        LOGW("Intended audio sample rate (%d) is too large"
+        ALOGW("Intended audio sample rate (%d) is too large"
             " and will be set to (%d)", mSampleRate, maxSampleRate);
         mSampleRate = maxSampleRate;
     }
@@ -1195,7 +1195,7 @@
             mEncoderProfiles->getAudioEncoderParamByName(
                 "enc.aud.ch.min", mAudioEncoder);
     if (mAudioChannels < minChannels) {
-        LOGW("Intended number of audio channels (%d) is too small"
+        ALOGW("Intended number of audio channels (%d) is too small"
             " and will be set to (%d)", mAudioChannels, minChannels);
         mAudioChannels = minChannels;
     }
@@ -1204,7 +1204,7 @@
             mEncoderProfiles->getAudioEncoderParamByName(
                 "enc.aud.ch.max", mAudioEncoder);
     if (mAudioChannels > maxChannels) {
-        LOGW("Intended number of audio channels (%d) is too large"
+        ALOGW("Intended number of audio channels (%d) is too large"
             " and will be set to (%d)", mAudioChannels, maxChannels);
         mAudioChannels = maxChannels;
     }
@@ -1217,11 +1217,11 @@
     int maxFrameHeight = mEncoderProfiles->getVideoEncoderParamByName(
                         "enc.vid.height.max", mVideoEncoder);
     if (mVideoHeight < minFrameHeight) {
-        LOGW("Intended video encoding frame height (%d) is too small"
+        ALOGW("Intended video encoding frame height (%d) is too small"
              " and will be set to (%d)", mVideoHeight, minFrameHeight);
         mVideoHeight = minFrameHeight;
     } else if (mVideoHeight > maxFrameHeight) {
-        LOGW("Intended video encoding frame height (%d) is too large"
+        ALOGW("Intended video encoding frame height (%d) is too large"
              " and will be set to (%d)", mVideoHeight, maxFrameHeight);
         mVideoHeight = maxFrameHeight;
     }
@@ -1268,7 +1268,7 @@
         int32_t frameRate = 0;
         CHECK (mSurfaceMediaSource->getFormat()->findInt32(
                                         kKeyFrameRate, &frameRate));
-        LOGI("Frame rate is not explicitly set. Use the current frame "
+        ALOGI("Frame rate is not explicitly set. Use the current frame "
              "rate (%d fps)", frameRate);
         mFrameRate = frameRate;
     } else {
@@ -1319,7 +1319,7 @@
         int32_t frameRate = 0;
         CHECK ((*cameraSource)->getFormat()->findInt32(
                     kKeyFrameRate, &frameRate));
-        LOGI("Frame rate is not explicitly set. Use the current frame "
+        ALOGI("Frame rate is not explicitly set. Use the current frame "
              "rate (%d fps)", frameRate);
         mFrameRate = frameRate;
     }
@@ -1406,7 +1406,7 @@
             true /* createEncoder */, cameraSource,
             NULL, encoder_flags);
     if (encoder == NULL) {
-        LOGW("Failed to create the encoder");
+        ALOGW("Failed to create the encoder");
         // When the encoder fails to be created, we need
         // release the camera source due to the camera's lock
         // and unlock mechanism.
@@ -1432,7 +1432,7 @@
             break;
 
         default:
-            LOGE("Unsupported audio encoder: %d", mAudioEncoder);
+            ALOGE("Unsupported audio encoder: %d", mAudioEncoder);
             return UNKNOWN_ERROR;
     }
 
@@ -1667,7 +1667,7 @@
     ALOGV("getMaxAmplitude");
 
     if (max == NULL) {
-        LOGE("Null pointer argument");
+        ALOGE("Null pointer argument");
         return BAD_VALUE;
     }
 
diff --git a/media/libmediaplayerservice/TestPlayerStub.cpp b/media/libmediaplayerservice/TestPlayerStub.cpp
index 169e49a..5d9728a 100644
--- a/media/libmediaplayerservice/TestPlayerStub.cpp
+++ b/media/libmediaplayerservice/TestPlayerStub.cpp
@@ -134,7 +134,7 @@
     // None of the entry points should be NULL.
     mHandle = ::dlopen(mFilename, RTLD_NOW | RTLD_GLOBAL);
     if (!mHandle) {
-        LOGE("dlopen failed: %s", ::dlerror());
+        ALOGE("dlopen failed: %s", ::dlerror());
         resetInternal();
         return UNKNOWN_ERROR;
     }
@@ -147,7 +147,7 @@
     if (err || mNewPlayer == NULL) {
         // if err is NULL the string <null> is inserted in the logs =>
         // mNewPlayer was NULL.
-        LOGE("dlsym for newPlayer failed %s", err);
+        ALOGE("dlsym for newPlayer failed %s", err);
         resetInternal();
         return UNKNOWN_ERROR;
     }
@@ -156,7 +156,7 @@
                                                           "deletePlayer"));
     err = ::dlerror();
     if (err || mDeletePlayer == NULL) {
-        LOGE("dlsym for deletePlayer failed %s", err);
+        ALOGE("dlsym for deletePlayer failed %s", err);
         resetInternal();
         return UNKNOWN_ERROR;
     }
@@ -176,7 +176,7 @@
     mContentUrl = NULL;
 
     if (mPlayer) {
-        LOG_ASSERT(mDeletePlayer != NULL, "mDeletePlayer is null");
+        ALOG_ASSERT(mDeletePlayer != NULL, "mDeletePlayer is null");
         (*mDeletePlayer)(mPlayer);
         mPlayer = NULL;
     }
diff --git a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
index 079f6fa..22b8847 100644
--- a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
@@ -111,9 +111,9 @@
             break;
         } else if (n < 0) {
             if (n != ERROR_END_OF_STREAM) {
-                LOGI("input data EOS reached, error %ld", n);
+                ALOGI("input data EOS reached, error %ld", n);
             } else {
-                LOGI("input data EOS reached.");
+                ALOGI("input data EOS reached.");
             }
             mTSParser->signalEOS(n);
             mFinalResult = n;
@@ -131,7 +131,7 @@
                 status_t err = mTSParser->feedTSPacket(buffer, sizeof(buffer));
 
                 if (err != OK) {
-                    LOGE("TS Parser returned error %d", err);
+                    ALOGE("TS Parser returned error %d", err);
                     mTSParser->signalEOS(err);
                     mFinalResult = err;
                     break;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 03aa42e..b731d0f 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -383,7 +383,7 @@
 
                 finishFlushIfPossible();
             } else if (what == ACodec::kWhatError) {
-                LOGE("Received error from %s decoder, aborting playback.",
+                ALOGE("Received error from %s decoder, aborting playback.",
                      audio ? "audio" : "video");
 
                 mRenderer->queueEOS(audio, UNKNOWN_ERROR);
@@ -417,7 +417,7 @@
                 if (finalResult == ERROR_END_OF_STREAM) {
                     ALOGV("reached %s EOS", audio ? "audio" : "video");
                 } else {
-                    LOGE("%s track encountered an error (%d)",
+                    ALOGE("%s track encountered an error (%d)",
                          audio ? "audio" : "video", finalResult);
 
                     notifyListener(
@@ -689,7 +689,7 @@
 
                 bool timeChange = (type & ATSParser::DISCONTINUITY_TIME) != 0;
 
-                LOGI("%s discontinuity (formatChange=%d, time=%d)",
+                ALOGI("%s discontinuity (formatChange=%d, time=%d)",
                      audio ? "audio" : "video", formatChange, timeChange);
 
                 if (audio) {
@@ -705,7 +705,7 @@
                         int64_t resumeAtMediaTimeUs;
                         if (extra->findInt64(
                                     "resume-at-mediatimeUs", &resumeAtMediaTimeUs)) {
-                            LOGI("suppressing rendering of %s until %lld us",
+                            ALOGI("suppressing rendering of %s until %lld us",
                                     audio ? "audio" : "video", resumeAtMediaTimeUs);
 
                             if (audio) {
@@ -838,7 +838,7 @@
 
 void NuPlayer::flushDecoder(bool audio, bool needShutdown) {
     if ((audio && mAudioDecoder == NULL) || (!audio && mVideoDecoder == NULL)) {
-        LOGI("flushDecoder %s without decoder present",
+        ALOGI("flushDecoder %s without decoder present",
              audio ? "audio" : "video");
     }
 
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 3539e3f..15259cb 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -228,7 +228,7 @@
 
 #if 0
     if (numFramesAvailableToWrite == mAudioSink->frameCount()) {
-        LOGI("audio sink underrun");
+        ALOGI("audio sink underrun");
     } else {
         ALOGV("audio queue has %d frames left to play",
              mAudioSink->frameCount() - numFramesAvailableToWrite);
@@ -270,7 +270,7 @@
                     + numFramesPendingPlayout
                         * mAudioSink->msecsPerFrame()) * 1000ll;
 
-            // LOGI("realTimeOffsetUs = %lld us", realTimeOffsetUs);
+            // ALOGI("realTimeOffsetUs = %lld us", realTimeOffsetUs);
 
             mAnchorTimeRealUs =
                 ALooper::GetNowUs() + realTimeOffsetUs;
diff --git a/media/libmediaplayerservice/nuplayer/RTSPSource.cpp b/media/libmediaplayerservice/nuplayer/RTSPSource.cpp
index 6d28298..6eb0d07 100644
--- a/media/libmediaplayerservice/nuplayer/RTSPSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/RTSPSource.cpp
@@ -226,7 +226,7 @@
             int32_t damaged;
             if (accessUnit->meta()->findInt32("damaged", &damaged)
                     && damaged) {
-                LOGI("dropping damaged access unit.");
+                ALOGI("dropping damaged access unit.");
                 break;
             }
 
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
index 2e63b3b..7c9bc5e 100644
--- a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
@@ -58,7 +58,7 @@
         ssize_t n = mStreamListener->read(buffer, sizeof(buffer), &extra);
 
         if (n == 0) {
-            LOGI("input data EOS reached.");
+            ALOGI("input data EOS reached.");
             mTSParser->signalEOS(ERROR_END_OF_STREAM);
             mFinalResult = ERROR_END_OF_STREAM;
             break;
@@ -70,7 +70,7 @@
                     && extra->findInt32(
                         IStreamListener::kKeyDiscontinuityMask, &mask)) {
                 if (mask == 0) {
-                    LOGE("Client specified an illegal discontinuity type.");
+                    ALOGE("Client specified an illegal discontinuity type.");
                     return ERROR_UNSUPPORTED;
                 }
 
@@ -94,7 +94,7 @@
                 status_t err = mTSParser->feedTSPacket(buffer, sizeof(buffer));
 
                 if (err != OK) {
-                    LOGE("TS Parser returned error %d", err);
+                    ALOGE("TS Parser returned error %d", err);
 
                     mTSParser->signalEOS(err);
                     mFinalResult = err;
diff --git a/media/libstagefright/AACWriter.cpp b/media/libstagefright/AACWriter.cpp
index 03fb33b..1673ccd 100644
--- a/media/libstagefright/AACWriter.cpp
+++ b/media/libstagefright/AACWriter.cpp
@@ -84,7 +84,7 @@
     }
 
     if (mSource != NULL) {
-        LOGE("AAC files only support a single track of audio.");
+        ALOGE("AAC files only support a single track of audio.");
         return UNKNOWN_ERROR;
     }
 
@@ -216,7 +216,7 @@
         }
     }
 
-    LOGE("Sampling rate %d bps is not supported", sampleRate);
+    ALOGE("Sampling rate %d bps is not supported", sampleRate);
     return false;
 }
 
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index ebf5fab..ca44ea3 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -394,7 +394,7 @@
             if (portIndex == kPortIndexInput && i == 0) {
                 // Only log this warning once per allocation round.
 
-                LOGW("OMX.TI.DUCATI1.VIDEO.DECODER requires the use of "
+                ALOGW("OMX.TI.DUCATI1.VIDEO.DECODER requires the use of "
                      "OMX_AllocateBuffer instead of the preferred "
                      "OMX_UseBuffer. Vendor must fix this.");
             }
@@ -445,7 +445,7 @@
             def.format.video.eColorFormat);
 
     if (err != 0) {
-        LOGE("native_window_set_buffers_geometry failed: %s (%d)",
+        ALOGE("native_window_set_buffers_geometry failed: %s (%d)",
                 strerror(-err), -err);
         return err;
     }
@@ -454,7 +454,7 @@
     OMX_U32 usage = 0;
     err = mOMX->getGraphicBufferUsage(mNode, kPortIndexOutput, &usage);
     if (err != 0) {
-        LOGW("querying usage flags from OMX IL component failed: %d", err);
+        ALOGW("querying usage flags from OMX IL component failed: %d", err);
         // XXX: Currently this error is logged, but not fatal.
         usage = 0;
     }
@@ -464,7 +464,7 @@
             usage | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP);
 
     if (err != 0) {
-        LOGE("native_window_set_usage failed: %s (%d)", strerror(-err), -err);
+        ALOGE("native_window_set_usage failed: %s (%d)", strerror(-err), -err);
         return err;
     }
 
@@ -474,7 +474,7 @@
             &minUndequeuedBufs);
 
     if (err != 0) {
-        LOGE("NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: %s (%d)",
+        ALOGE("NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: %s (%d)",
                 strerror(-err), -err);
         return err;
     }
@@ -489,7 +489,7 @@
                 mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
 
         if (err != OK) {
-            LOGE("[%s] setting nBufferCountActual to %lu failed: %d",
+            ALOGE("[%s] setting nBufferCountActual to %lu failed: %d",
                     mComponentName.c_str(), newBufferCount, err);
             return err;
         }
@@ -499,7 +499,7 @@
             mNativeWindow.get(), def.nBufferCountActual);
 
     if (err != 0) {
-        LOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err),
+        ALOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err),
                 -err);
         return err;
     }
@@ -513,7 +513,7 @@
         ANativeWindowBuffer *buf;
         err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf);
         if (err != 0) {
-            LOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err);
+            ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err);
             break;
         }
 
@@ -528,7 +528,7 @@
         err = mOMX->useGraphicBuffer(mNode, kPortIndexOutput, graphicBuffer,
                 &bufferId);
         if (err != 0) {
-            LOGE("registering GraphicBuffer %lu with OMX IL component failed: "
+            ALOGE("registering GraphicBuffer %lu with OMX IL component failed: "
                  "%d", i, err);
             break;
         }
@@ -581,7 +581,7 @@
 ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() {
     ANativeWindowBuffer *buf;
     if (mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf) != 0) {
-        LOGE("dequeueBuffer failed.");
+        ALOGE("dequeueBuffer failed.");
         return NULL;
     }
 
@@ -734,7 +734,7 @@
                 &roleParams, sizeof(roleParams));
 
         if (err != OK) {
-            LOGW("[%s] Failed to set standard component role '%s'.",
+            ALOGW("[%s] Failed to set standard component role '%s'.",
                  mComponentName.c_str(), role);
         }
     }
@@ -1367,7 +1367,7 @@
         return false;
     }
 
-    LOGE("[%s] ERROR(0x%08lx)", mCodec->mComponentName.c_str(), data1);
+    ALOGE("[%s] ERROR(0x%08lx)", mCodec->mComponentName.c_str(), data1);
 
     mCodec->signalError((OMX_ERRORTYPE)data1);
 
@@ -1826,7 +1826,7 @@
     }
 
     if (node == NULL) {
-        LOGE("Unable to instantiate a decoder for type '%s'.", mime.c_str());
+        ALOGE("Unable to instantiate a decoder for type '%s'.", mime.c_str());
 
         mCodec->signalError(OMX_ErrorComponentNotFound);
         return;
@@ -1874,7 +1874,7 @@
 
     status_t err;
     if ((err = allocateBuffers()) != OK) {
-        LOGE("Failed to allocate buffers after transitioning to IDLE state "
+        ALOGE("Failed to allocate buffers after transitioning to IDLE state "
              "(error 0x%08x)",
              err);
 
@@ -2198,7 +2198,7 @@
                 status_t err;
                 if ((err = mCodec->allocateBuffersOnPort(
                                 kPortIndexOutput)) != OK) {
-                    LOGE("Failed to allocate output port buffers after "
+                    ALOGE("Failed to allocate output port buffers after "
                          "port reconfiguration (error 0x%08x)",
                          err);
 
diff --git a/media/libstagefright/AMRExtractor.cpp b/media/libstagefright/AMRExtractor.cpp
index 7eca5e4..5a28347 100644
--- a/media/libstagefright/AMRExtractor.cpp
+++ b/media/libstagefright/AMRExtractor.cpp
@@ -85,7 +85,7 @@
     };
 
     if (FT > 15 || (isWide && FT > 9 && FT < 14) || (!isWide && FT > 11 && FT < 15)) {
-        LOGE("illegal AMR frame type %d", FT);
+        ALOGE("illegal AMR frame type %d", FT);
         return 0;
     }
 
@@ -285,7 +285,7 @@
     if (header & 0x83) {
         // Padding bits must be 0.
 
-        LOGE("padding bits must be 0, header is 0x%02x", header);
+        ALOGE("padding bits must be 0, header is 0x%02x", header);
 
         return ERROR_MALFORMED;
     }
diff --git a/media/libstagefright/AVIExtractor.cpp b/media/libstagefright/AVIExtractor.cpp
index 142fa5b..a3187b7 100644
--- a/media/libstagefright/AVIExtractor.cpp
+++ b/media/libstagefright/AVIExtractor.cpp
@@ -625,7 +625,7 @@
         }
 
         if (mime == NULL) {
-            LOGW("Unsupported video format '%c%c%c%c'",
+            ALOGW("Unsupported video format '%c%c%c%c'",
                  (char)(handler >> 24),
                  (char)((handler >> 16) & 0xff),
                  (char)((handler >> 8) & 0xff),
@@ -705,7 +705,7 @@
         if (format == 0x55) {
             track->mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
         } else {
-            LOGW("Unsupported audio format = 0x%04x", format);
+            ALOGW("Unsupported audio format = 0x%04x", format);
         }
 
         uint32_t numChannels = U16LE_AT(&data[2]);
@@ -1080,7 +1080,7 @@
     sp<MetaData> meta = MakeAVCCodecSpecificData(buffer);
 
     if (meta == NULL) {
-        LOGE("Unable to extract AVC codec specific data");
+        ALOGE("Unable to extract AVC codec specific data");
         return ERROR_MALFORMED;
     }
 
diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp
index 3fae957..2172cc0 100644
--- a/media/libstagefright/AudioSource.cpp
+++ b/media/libstagefright/AudioSource.cpp
@@ -37,7 +37,7 @@
             break;
         }
         case AudioRecord::EVENT_OVERRUN: {
-            LOGW("AudioRecord reported overrun!");
+            ALOGW("AudioRecord reported overrun!");
             break;
         }
         default:
@@ -259,7 +259,7 @@
     ALOGV("dataCallbackTimestamp: %lld us", timeUs);
     Mutex::Autolock autoLock(mLock);
     if (!mStarted) {
-        LOGW("Spurious callback from AudioRecord. Drop the audio data.");
+        ALOGW("Spurious callback from AudioRecord. Drop the audio data.");
         return OK;
     }
 
@@ -301,7 +301,7 @@
                     audioBuffer.i16, audioBuffer.size);
     } else {
         if (audioBuffer.size == 0) {
-            LOGW("Nothing is available from AudioRecord callback buffer");
+            ALOGW("Nothing is available from AudioRecord callback buffer");
             buffer->release();
             return OK;
         }
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 6fb16f5..7a2d7b3 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -132,7 +132,7 @@
         status_t err = mNativeWindow->queueBuffer(
                 mNativeWindow.get(), buffer->graphicBuffer().get());
         if (err != 0) {
-            LOGE("queueBuffer failed with error %s (%d)", strerror(-err),
+            ALOGE("queueBuffer failed with error %s (%d)", strerror(-err),
                     -err);
             return;
         }
@@ -280,9 +280,9 @@
     }
 
     if (!(mFlags & INCOGNITO)) {
-        LOGI("setDataSource_l('%s')", mUri.string());
+        ALOGI("setDataSource_l('%s')", mUri.string());
     } else {
-        LOGI("setDataSource_l(URL suppressed)");
+        ALOGI("setDataSource_l(URL suppressed)");
     }
 
     // The actual work will be done during preparation in the call to
@@ -483,7 +483,7 @@
     if (mFlags & PREPARING) {
         modifyFlags(PREPARE_CANCELLED, SET);
         if (mConnectingDataSource != NULL) {
-            LOGI("interrupting the connection process");
+            ALOGI("interrupting the connection process");
             mConnectingDataSource->disconnect();
         }
 
@@ -686,7 +686,7 @@
 
                 if ((mFlags & PLAYING) && !eos
                         && (cachedDataRemaining < kLowWaterMarkBytes)) {
-                    LOGI("cache is running low (< %d) , pausing.",
+                    ALOGI("cache is running low (< %d) , pausing.",
                          kLowWaterMarkBytes);
                     modifyFlags(CACHE_UNDERRUN, SET);
                     pause_l();
@@ -695,7 +695,7 @@
                     notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START);
                 } else if (eos || cachedDataRemaining > kHighWaterMarkBytes) {
                     if (mFlags & CACHE_UNDERRUN) {
-                        LOGI("cache has filled up (> %d), resuming.",
+                        ALOGI("cache has filled up (> %d), resuming.",
                              kHighWaterMarkBytes);
                         modifyFlags(CACHE_UNDERRUN, CLEAR);
                         play_l();
@@ -742,7 +742,7 @@
 
         if ((mFlags & PLAYING) && !eos
                 && (cachedDurationUs < kLowWaterMarkUs)) {
-            LOGI("cache is running low (%.2f secs) , pausing.",
+            ALOGI("cache is running low (%.2f secs) , pausing.",
                  cachedDurationUs / 1E6);
             modifyFlags(CACHE_UNDERRUN, SET);
             pause_l();
@@ -751,7 +751,7 @@
             notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START);
         } else if (eos || cachedDurationUs > kHighWaterMarkUs) {
             if (mFlags & CACHE_UNDERRUN) {
-                LOGI("cache has filled up (%.2f secs), resuming.",
+                ALOGI("cache has filled up (%.2f secs), resuming.",
                      cachedDurationUs / 1E6);
                 modifyFlags(CACHE_UNDERRUN, CLEAR);
                 play_l();
@@ -1192,7 +1192,7 @@
     status_t err = initVideoDecoder();
 
     if (err != OK) {
-        LOGE("failed to reinstantiate video decoder after surface change.");
+        ALOGE("failed to reinstantiate video decoder after surface change.");
         return err;
     }
 
@@ -1667,7 +1667,7 @@
 
     if (mSeeking == SEEK_VIDEO_ONLY) {
         if (mSeekTimeUs > timeUs) {
-            LOGI("XXX mSeekTimeUs = %lld us, timeUs = %lld us",
+            ALOGI("XXX mSeekTimeUs = %lld us, timeUs = %lld us",
                  mSeekTimeUs, timeUs);
         }
     }
@@ -1683,7 +1683,7 @@
     if (mAudioPlayer != NULL && !(mFlags & (AUDIO_RUNNING | SEEK_PREVIEW))) {
         status_t err = startAudioPlayer_l();
         if (err != OK) {
-            LOGE("Starting the audio player failed w/ err %d", err);
+            ALOGE("Starting the audio player failed w/ err %d", err);
             return;
         }
     }
@@ -1715,7 +1715,7 @@
         int64_t latenessUs = nowUs - timeUs;
 
         if (latenessUs > 0) {
-            LOGI("after SEEK_VIDEO_ONLY we're late by %.2f secs", latenessUs / 1E6);
+            ALOGI("after SEEK_VIDEO_ONLY we're late by %.2f secs", latenessUs / 1E6);
         }
     }
 
@@ -1730,7 +1730,7 @@
                 && mAudioPlayer != NULL
                 && mAudioPlayer->getMediaTimeMapping(
                     &realTimeUs, &mediaTimeUs)) {
-            LOGI("we're much too late (%.2f secs), video skipping ahead",
+            ALOGI("we're much too late (%.2f secs), video skipping ahead",
                  latenessUs / 1E6);
 
             mVideoBuffer->release();
@@ -1975,7 +1975,7 @@
         if (err != OK) {
             mConnectingDataSource.clear();
 
-            LOGI("mConnectingDataSource->connect() returned %d", err);
+            ALOGI("mConnectingDataSource->connect() returned %d", err);
             return err;
         }
 
@@ -2073,7 +2073,7 @@
             }
 
             if (mFlags & PREPARE_CANCELLED) {
-                LOGI("Prepare cancelled while waiting for initial cache fill.");
+                ALOGI("Prepare cancelled while waiting for initial cache fill.");
                 return UNKNOWN_ERROR;
             }
         }
@@ -2155,7 +2155,7 @@
     Mutex::Autolock autoLock(mLock);
 
     if (mFlags & PREPARE_CANCELLED) {
-        LOGI("prepare was cancelled before doing anything");
+        ALOGI("prepare was cancelled before doing anything");
         abortPrepare(UNKNOWN_ERROR);
         return;
     }
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index 080faa6..1850c9c 100755
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -111,7 +111,7 @@
        return OMX_TI_COLOR_FormatYUV420PackedSemiPlanar;
     }
 
-    LOGE("Uknown color format (%s), please add it to "
+    ALOGE("Uknown color format (%s), please add it to "
          "CameraSource::getColorFormat", colorFormat);
 
     CHECK_EQ(0, "Unknown color format");
@@ -301,7 +301,7 @@
     bool isCameraParamChanged = false;
     if (width != -1 && height != -1) {
         if (!isVideoSizeSupported(width, height, sizes)) {
-            LOGE("Video dimension (%dx%d) is unsupported", width, height);
+            ALOGE("Video dimension (%dx%d) is unsupported", width, height);
             return BAD_VALUE;
         }
         if (isSetVideoSizeSupportedByCamera) {
@@ -314,7 +314,7 @@
                (width != -1 && height == -1)) {
         // If one and only one of the width and height is -1
         // we reject such a request.
-        LOGE("Requested video size (%dx%d) is not supported", width, height);
+        ALOGE("Requested video size (%dx%d) is not supported", width, height);
         return BAD_VALUE;
     } else {  // width == -1 && height == -1
         // Do not configure the camera.
@@ -330,7 +330,7 @@
         char buf[4];
         snprintf(buf, 4, "%d", frameRate);
         if (strstr(supportedFrameRates, buf) == NULL) {
-            LOGE("Requested frame rate (%d) is not supported: %s",
+            ALOGE("Requested frame rate (%d) is not supported: %s",
                 frameRate, supportedFrameRates);
             return BAD_VALUE;
         }
@@ -347,7 +347,7 @@
         // Either frame rate or frame size needs to be changed.
         String8 s = params->flatten();
         if (OK != mCamera->setParameters(s)) {
-            LOGE("Could not change settings."
+            ALOGE("Could not change settings."
                  " Someone else is using camera %p?", mCamera.get());
             return -EBUSY;
         }
@@ -387,7 +387,7 @@
         params.getVideoSize(&frameWidthActual, &frameHeightActual);
     }
     if (frameWidthActual < 0 || frameHeightActual < 0) {
-        LOGE("Failed to retrieve video frame size (%dx%d)",
+        ALOGE("Failed to retrieve video frame size (%dx%d)",
                 frameWidthActual, frameHeightActual);
         return UNKNOWN_ERROR;
     }
@@ -396,7 +396,7 @@
     // video frame size.
     if (width != -1 && height != -1) {
         if (frameWidthActual != width || frameHeightActual != height) {
-            LOGE("Failed to set video frame size to %dx%d. "
+            ALOGE("Failed to set video frame size to %dx%d. "
                     "The actual video size is %dx%d ", width, height,
                     frameWidthActual, frameHeightActual);
             return UNKNOWN_ERROR;
@@ -425,14 +425,14 @@
     ALOGV("checkFrameRate");
     int32_t frameRateActual = params.getPreviewFrameRate();
     if (frameRateActual < 0) {
-        LOGE("Failed to retrieve preview frame rate (%d)", frameRateActual);
+        ALOGE("Failed to retrieve preview frame rate (%d)", frameRateActual);
         return UNKNOWN_ERROR;
     }
 
     // Check the actual video frame rate against the target/requested
     // video frame rate.
     if (frameRate != -1 && (frameRateActual - frameRate) != 0) {
-        LOGE("Failed to set preview frame rate to %d fps. The actual "
+        ALOGE("Failed to set preview frame rate to %d fps. The actual "
                 "frame rate is %d", frameRate, frameRateActual);
         return UNKNOWN_ERROR;
     }
@@ -489,7 +489,7 @@
     status_t err = OK;
 
     if ((err = isCameraAvailable(camera, proxy, cameraId)) != OK) {
-        LOGE("Camera connection could not be established.");
+        ALOGE("Camera connection could not be established.");
         return err;
     }
     CameraParameters params(mCamera->getParameters());
@@ -579,7 +579,7 @@
     ALOGV("start");
     CHECK(!mStarted);
     if (mInitCheck != OK) {
-        LOGE("CameraSource is not initialized yet");
+        ALOGE("CameraSource is not initialized yet");
         return mInitCheck;
     }
 
@@ -649,7 +649,7 @@
         if (NO_ERROR !=
             mFrameCompleteCondition.waitRelative(mLock,
                     mTimeBetweenFrameCaptureUs * 1000LL + CAMERA_SOURCE_TIMEOUT_NS)) {
-            LOGW("Timed out waiting for outstanding frames being encoded: %d",
+            ALOGW("Timed out waiting for outstanding frames being encoded: %d",
                 mFramesBeingEncoded.size());
         }
     }
@@ -660,13 +660,13 @@
     }
 
     if (mCollectStats) {
-        LOGI("Frames received/encoded/dropped: %d/%d/%d in %lld us",
+        ALOGI("Frames received/encoded/dropped: %d/%d/%d in %lld us",
                 mNumFramesReceived, mNumFramesEncoded, mNumFramesDropped,
                 mLastFrameTimestampUs - mFirstFrameTimeUs);
     }
 
     if (mNumGlitches > 0) {
-        LOGW("%d long delays between neighboring video frames", mNumGlitches);
+        ALOGW("%d long delays between neighboring video frames", mNumGlitches);
     }
 
     CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped);
@@ -744,10 +744,10 @@
                     mTimeBetweenFrameCaptureUs * 1000LL + CAMERA_SOURCE_TIMEOUT_NS)) {
                 if (mCameraRecordingProxy != 0 &&
                     !mCameraRecordingProxy->asBinder()->isBinderAlive()) {
-                    LOGW("camera recording proxy is gone");
+                    ALOGW("camera recording proxy is gone");
                     return ERROR_END_OF_STREAM;
                 }
-                LOGW("Timed out waiting for incoming camera video frames: %lld us",
+                ALOGW("Timed out waiting for incoming camera video frames: %lld us",
                     mLastFrameTimestampUs);
             }
         }
@@ -832,7 +832,7 @@
 }
 
 void CameraSource::DeathNotifier::binderDied(const wp<IBinder>& who) {
-    LOGI("Camera recording proxy died");
+    ALOGI("Camera recording proxy died");
 }
 
 }  // namespace android
diff --git a/media/libstagefright/CameraSourceTimeLapse.cpp b/media/libstagefright/CameraSourceTimeLapse.cpp
index 22c3182..263ab50 100644
--- a/media/libstagefright/CameraSourceTimeLapse.cpp
+++ b/media/libstagefright/CameraSourceTimeLapse.cpp
@@ -140,7 +140,7 @@
         if (mCamera->setParameters(params.flatten()) == OK) {
             isSuccessful = true;
         } else {
-            LOGE("Failed to set preview size to %dx%d", width, height);
+            ALOGE("Failed to set preview size to %dx%d", width, height);
             isSuccessful = false;
         }
     }
@@ -260,7 +260,7 @@
 
             // Really make sure that this video recording frame will not be dropped.
             if (*timestampUs < mStartTimeUs) {
-                LOGI("set timestampUs to start time stamp %lld us", mStartTimeUs);
+                ALOGI("set timestampUs to start time stamp %lld us", mStartTimeUs);
                 *timestampUs = mStartTimeUs;
             }
             return false;
diff --git a/media/libstagefright/DRMExtractor.cpp b/media/libstagefright/DRMExtractor.cpp
index 1f3d581..9452ab1 100644
--- a/media/libstagefright/DRMExtractor.cpp
+++ b/media/libstagefright/DRMExtractor.cpp
@@ -286,7 +286,7 @@
             *mimeType = String8("drm+es_based+") + decryptHandle->mimeType;
         } else if (decryptHandle->decryptApiType == DecryptApiType::WV_BASED) {
             *mimeType = MEDIA_MIMETYPE_CONTAINER_WVM;
-            LOGW("SniffWVM: found match\n");
+            ALOGW("SniffWVM: found match\n");
         }
         *confidence = 10.0f;
 
diff --git a/media/libstagefright/ESDS.cpp b/media/libstagefright/ESDS.cpp
index 1b225fa..4a0c35c 100644
--- a/media/libstagefright/ESDS.cpp
+++ b/media/libstagefright/ESDS.cpp
@@ -162,7 +162,7 @@
             offset -= 2;
             size += 2;
 
-            LOGW("Found malformed 'esds' atom, ignoring missing OCR_ES_Id.");
+            ALOGW("Found malformed 'esds' atom, ignoring missing OCR_ES_Id.");
         }
     }
 
diff --git a/media/libstagefright/FLACExtractor.cpp b/media/libstagefright/FLACExtractor.cpp
index a0c08e2..668d7f7 100644
--- a/media/libstagefright/FLACExtractor.cpp
+++ b/media/libstagefright/FLACExtractor.cpp
@@ -327,7 +327,7 @@
         mWriteCompleted = true;
         return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
     } else {
-        LOGE("FLACParser::writeCallback unexpected");
+        ALOGE("FLACParser::writeCallback unexpected");
         return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
     }
 }
@@ -340,7 +340,7 @@
             mStreamInfo = metadata->data.stream_info;
             mStreamInfoValid = true;
         } else {
-            LOGE("FLACParser::metadataCallback unexpected STREAMINFO");
+            ALOGE("FLACParser::metadataCallback unexpected STREAMINFO");
         }
         break;
     case FLAC__METADATA_TYPE_VORBIS_COMMENT:
@@ -366,14 +366,14 @@
         }
         break;
     default:
-        LOGW("FLACParser::metadataCallback unexpected type %u", metadata->type);
+        ALOGW("FLACParser::metadataCallback unexpected type %u", metadata->type);
         break;
     }
 }
 
 void FLACParser::errorCallback(FLAC__StreamDecoderErrorStatus status)
 {
-    LOGE("FLACParser::errorCallback status=%d", status);
+    ALOGE("FLACParser::errorCallback status=%d", status);
     mErrorStatus = status;
 }
 
@@ -477,7 +477,7 @@
         // The new should succeed, since probably all it does is a malloc
         // that always succeeds in Android.  But to avoid dependence on the
         // libFLAC internals, we check and log here.
-        LOGE("new failed");
+        ALOGE("new failed");
         return NO_INIT;
     }
     FLAC__stream_decoder_set_md5_checking(mDecoder, false);
@@ -497,12 +497,12 @@
     if (initStatus != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
         // A failure here probably indicates a programming error and so is
         // unlikely to happen. But we check and log here similarly to above.
-        LOGE("init_stream failed %d", initStatus);
+        ALOGE("init_stream failed %d", initStatus);
         return NO_INIT;
     }
     // parse all metadata
     if (!FLAC__stream_decoder_process_until_end_of_metadata(mDecoder)) {
-        LOGE("end_of_metadata failed");
+        ALOGE("end_of_metadata failed");
         return NO_INIT;
     }
     if (mStreamInfoValid) {
@@ -512,7 +512,7 @@
         case 2:
             break;
         default:
-            LOGE("unsupported channel count %u", getChannels());
+            ALOGE("unsupported channel count %u", getChannels());
             return NO_INIT;
         }
         // check bit depth
@@ -522,7 +522,7 @@
         case 24:
             break;
         default:
-            LOGE("unsupported bits per sample %u", getBitsPerSample());
+            ALOGE("unsupported bits per sample %u", getBitsPerSample());
             return NO_INIT;
         }
         // check sample rate
@@ -539,7 +539,7 @@
             break;
         default:
             // 96000 would require a proper downsampler in AudioFlinger
-            LOGE("unsupported sample rate %u", getSampleRate());
+            ALOGE("unsupported sample rate %u", getSampleRate());
             return NO_INIT;
         }
         // configure the appropriate copy function, defaulting to trespass
@@ -572,7 +572,7 @@
                     (getTotalSamples() * 1000000LL) / getSampleRate());
         }
     } else {
-        LOGE("missing STREAMINFO");
+        ALOGE("missing STREAMINFO");
         return NO_INIT;
     }
     if (mFileMetadata != 0) {
@@ -603,13 +603,13 @@
     if (doSeek) {
         // We implement the seek callback, so this works without explicit flush
         if (!FLAC__stream_decoder_seek_absolute(mDecoder, sample)) {
-            LOGE("FLACParser::readBuffer seek to sample %llu failed", sample);
+            ALOGE("FLACParser::readBuffer seek to sample %llu failed", sample);
             return NULL;
         }
         ALOGV("FLACParser::readBuffer seek to sample %llu succeeded", sample);
     } else {
         if (!FLAC__stream_decoder_process_single(mDecoder)) {
-            LOGE("FLACParser::readBuffer process_single failed");
+            ALOGE("FLACParser::readBuffer process_single failed");
             return NULL;
         }
     }
@@ -620,13 +620,13 @@
     // verify that block header keeps the promises made by STREAMINFO
     unsigned blocksize = mWriteHeader.blocksize;
     if (blocksize == 0 || blocksize > getMaxBlockSize()) {
-        LOGE("FLACParser::readBuffer write invalid blocksize %u", blocksize);
+        ALOGE("FLACParser::readBuffer write invalid blocksize %u", blocksize);
         return NULL;
     }
     if (mWriteHeader.sample_rate != getSampleRate() ||
         mWriteHeader.channels != getChannels() ||
         mWriteHeader.bits_per_sample != getBitsPerSample()) {
-        LOGE("FLACParser::readBuffer write changed parameters mid-stream");
+        ALOGE("FLACParser::readBuffer write changed parameters mid-stream");
     }
     // acquire a media buffer
     CHECK(mGroup != NULL);
diff --git a/media/libstagefright/FileSource.cpp b/media/libstagefright/FileSource.cpp
index 0794f57..73cb48c 100644
--- a/media/libstagefright/FileSource.cpp
+++ b/media/libstagefright/FileSource.cpp
@@ -101,7 +101,7 @@
    } else {
         off64_t result = lseek64(mFd, offset + mOffset, SEEK_SET);
         if (result == -1) {
-            LOGE("seek to %lld failed", offset + mOffset);
+            ALOGE("seek to %lld failed", offset + mOffset);
             return UNKNOWN_ERROR;
         }
 
diff --git a/media/libstagefright/HTTPBase.cpp b/media/libstagefright/HTTPBase.cpp
index 3c5a8a5..d7eea3f 100644
--- a/media/libstagefright/HTTPBase.cpp
+++ b/media/libstagefright/HTTPBase.cpp
@@ -111,11 +111,11 @@
     if (freqMs < kMinBandwidthCollectFreqMs
             || freqMs > kMaxBandwidthCollectFreqMs) {
 
-        LOGE("frequency (%d ms) is out of range [1000, 60000]", freqMs);
+        ALOGE("frequency (%d ms) is out of range [1000, 60000]", freqMs);
         return BAD_VALUE;
     }
 
-    LOGI("frequency set to %d ms", freqMs);
+    ALOGI("frequency set to %d ms", freqMs);
     mBandWidthCollectFreqMs = freqMs;
     return OK;
 }
@@ -139,7 +139,7 @@
 void HTTPBase::RegisterSocketUserTag(int sockfd, uid_t uid, uint32_t kTag) {
     int res = qtaguid_tagSocket(sockfd, kTag, uid);
     if (res != 0) {
-        LOGE("Failed tagging socket %d for uid %d (My UID=%d)", sockfd, uid, geteuid());
+        ALOGE("Failed tagging socket %d for uid %d (My UID=%d)", sockfd, uid, geteuid());
     }
 }
 
@@ -147,7 +147,7 @@
 void HTTPBase::UnRegisterSocketUserTag(int sockfd) {
     int res = qtaguid_untagSocket(sockfd);
     if (res != 0) {
-        LOGE("Failed untagging socket %d (My UID=%d)", sockfd, geteuid());
+        ALOGE("Failed untagging socket %d (My UID=%d)", sockfd, geteuid());
     }
 }
 
diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp
index ab1dc5c..2215c07 100644
--- a/media/libstagefright/MP3Extractor.cpp
+++ b/media/libstagefright/MP3Extractor.cpp
@@ -431,7 +431,7 @@
             int32_t bitrate;
             if (!mMeta->findInt32(kKeyBitRate, &bitrate)) {
                 // bitrate is in bits/sec.
-                LOGI("no bitrate");
+                ALOGI("no bitrate");
 
                 return ERROR_UNSUPPORTED;
             }
@@ -487,7 +487,7 @@
 
         off64_t pos = mCurrentPos;
         if (!Resync(mDataSource, mFixedHeader, &pos, NULL, NULL)) {
-            LOGE("Unable to resync. Signalling end of stream.");
+            ALOGE("Unable to resync. Signalling end of stream.");
 
             buffer->release();
             buffer = NULL;
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 0a69df4..bc88015 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -1250,7 +1250,7 @@
             char buffer[23];
             if (chunk_data_size != 7 &&
                 chunk_data_size != 23) {
-                LOGE("Incorrect D263 box size %lld", chunk_data_size);
+                ALOGE("Incorrect D263 box size %lld", chunk_data_size);
                 return ERROR_MALFORMED;
             }
 
@@ -1500,9 +1500,9 @@
     int32_t dy = U32_AT(&buffer[matrixOffset + 20]);
 
 #if 0
-    LOGI("x' = %.2f * x + %.2f * y + %.2f",
+    ALOGI("x' = %.2f * x + %.2f * y + %.2f",
          a00 / 65536.0f, a01 / 65536.0f, dx / 65536.0f);
-    LOGI("y' = %.2f * x + %.2f * y + %.2f",
+    ALOGI("y' = %.2f * x + %.2f * y + %.2f",
          a10 / 65536.0f, a11 / 65536.0f, dy / 65536.0f);
 #endif
 
@@ -1519,7 +1519,7 @@
     } else if (a00 == -kFixedOne && a01 == 0 && a10 == 0 && a11 == -kFixedOne) {
         rotationDegrees = 180;
     } else {
-        LOGW("We only support 0,90,180,270 degree rotation matrices");
+        ALOGW("We only support 0,90,180,270 degree rotation matrices");
         rotationDegrees = 0;
     }
 
@@ -1751,7 +1751,7 @@
         // The media subtype is MP3 audio
         // Our software MP3 audio decoder may not be able to handle
         // packetized MP3 audio; for now, lets just return ERROR_UNSUPPORTED
-        LOGE("MP3 track in MP4/3GPP file is not supported");
+        ALOGE("MP3 track in MP4/3GPP file is not supported");
         return ERROR_UNSUPPORTED;
     }
 
@@ -2036,7 +2036,7 @@
         CHECK_EQ(OK, mSampleTable->getMetaDataForSample(
                     syncSampleIndex, NULL, NULL, &syncSampleTime));
 
-        LOGI("seek to time %lld us => sample at time %lld us, "
+        ALOGI("seek to time %lld us => sample at time %lld us, "
              "sync sample at time %lld us",
              seekTimeUs,
              sampleTime * 1000000ll / mTimescale,
@@ -2123,7 +2123,7 @@
 
         size_t nal_size = parseNALSize(src);
         if (mBuffer->range_length() < mNALLengthSize + nal_size) {
-            LOGE("incomplete NAL unit.");
+            ALOGE("incomplete NAL unit.");
 
             mBuffer->release();
             mBuffer = NULL;
@@ -2187,7 +2187,7 @@
                 }
 
                 if (isMalFormed) {
-                    LOGE("Video is malformed");
+                    ALOGE("Video is malformed");
                     mBuffer->release();
                     mBuffer = NULL;
                     return ERROR_MALFORMED;
@@ -2422,7 +2422,7 @@
     }
 
     if (LegacySniffMPEG4(source, mimeType, confidence)) {
-        LOGW("Identified supported mpeg4 through LegacySniffMPEG4.");
+        ALOGW("Identified supported mpeg4 through LegacySniffMPEG4.");
         return true;
     }
 
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index a368e0a..06dd875 100755
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -327,7 +327,7 @@
 status_t MPEG4Writer::addSource(const sp<MediaSource> &source) {
     Mutex::Autolock l(mLock);
     if (mStarted) {
-        LOGE("Attempt to add source AFTER recording is started");
+        ALOGE("Attempt to add source AFTER recording is started");
         return UNKNOWN_ERROR;
     }
     Track *track = new Track(this, source, mTracks.size());
@@ -406,7 +406,7 @@
         size = MAX_MOOV_BOX_SIZE;
     }
 
-    LOGI("limits: %lld/%lld bytes/us, bit rate: %d bps and the estimated"
+    ALOGI("limits: %lld/%lld bytes/us, bit rate: %d bps and the estimated"
          " moov size %lld bytes",
          mMaxFileSizeLimitBytes, mMaxFileDurationLimitUs, bitRate, size);
     return factor * size;
@@ -443,7 +443,7 @@
         // If file size is set to be larger than the 32 bit file
         // size limit, treat it as an error.
         if (mMaxFileSizeLimitBytes > kMax32BitFileSize) {
-            LOGW("32-bit file size limit (%lld bytes) too big. "
+            ALOGW("32-bit file size limit (%lld bytes) too big. "
                  "It is changed to %lld bytes",
                 mMaxFileSizeLimitBytes, kMax32BitFileSize);
             mMaxFileSizeLimitBytes = kMax32BitFileSize;
@@ -701,7 +701,7 @@
         mMoovBoxBuffer = NULL;
         mMoovBoxBufferOffset = 0;
     } else {
-        LOGI("The mp4 file will not be streamable.");
+        ALOGI("The mp4 file will not be streamable.");
     }
 
     CHECK(mBoxes.empty());
@@ -1084,12 +1084,12 @@
 }
 
 void MPEG4Writer::setStartTimestampUs(int64_t timeUs) {
-    LOGI("setStartTimestampUs: %lld", timeUs);
+    ALOGI("setStartTimestampUs: %lld", timeUs);
     CHECK(timeUs >= 0);
     Mutex::Autolock autoLock(mLock);
     if (mStartTimestampUs < 0 || mStartTimestampUs > timeUs) {
         mStartTimestampUs = timeUs;
-        LOGI("Earliest track starting time: %lld", mStartTimestampUs);
+        ALOGI("Earliest track starting time: %lld", mStartTimestampUs);
     }
 }
 
@@ -1173,7 +1173,7 @@
         size_t sampleCount, int32_t duration) {
 
     if (duration == 0) {
-        LOGW("0-duration samples found: %d", sampleCount);
+        ALOGW("0-duration samples found: %d", sampleCount);
     }
     SttsTableEntry sttsEntry(sampleCount, duration);
     mSttsTableEntries.push_back(sttsEntry);
@@ -1481,7 +1481,7 @@
             startTimeOffsetUs = kInitialDelayTimeUs;
         }
         startTimeUs += startTimeOffsetUs;
-        LOGI("Start time offset: %lld us", startTimeOffsetUs);
+        ALOGI("Start time offset: %lld us", startTimeOffsetUs);
     }
 
     meta->setInt64(kKeyTime, startTimeUs);
@@ -1525,7 +1525,7 @@
 status_t MPEG4Writer::Track::stop() {
     ALOGD("Stopping %s track", mIsAudio? "Audio": "Video");
     if (!mStarted) {
-        LOGE("Stop() called but track is not started");
+        ALOGE("Stop() called but track is not started");
         return ERROR_END_OF_STREAM;
     }
 
@@ -1596,14 +1596,14 @@
     const uint8_t *nextStartCode = findNextStartCode(data, length);
     *paramSetLen = nextStartCode - data;
     if (*paramSetLen == 0) {
-        LOGE("Param set is malformed, since its length is 0");
+        ALOGE("Param set is malformed, since its length is 0");
         return NULL;
     }
 
     AVCParamSet paramSet(*paramSetLen, data);
     if (type == kNalUnitTypeSeqParamSet) {
         if (*paramSetLen < 4) {
-            LOGE("Seq parameter set malformed");
+            ALOGE("Seq parameter set malformed");
             return NULL;
         }
         if (mSeqParamSets.empty()) {
@@ -1614,7 +1614,7 @@
             if (mProfileIdc != data[1] ||
                 mProfileCompatible != data[2] ||
                 mLevelIdc != data[3]) {
-                LOGE("Inconsistent profile/level found in seq parameter sets");
+                ALOGE("Inconsistent profile/level found in seq parameter sets");
                 return NULL;
             }
         }
@@ -1632,7 +1632,7 @@
     // 2 bytes for each of the parameter set length field
     // plus the 7 bytes for the header
     if (size < 4 + 7) {
-        LOGE("Codec specific data length too short: %d", size);
+        ALOGE("Codec specific data length too short: %d", size);
         return ERROR_MALFORMED;
     }
 
@@ -1661,7 +1661,7 @@
         getNalUnitType(*(tmp + 4), &type);
         if (type == kNalUnitTypeSeqParamSet) {
             if (gotPps) {
-                LOGE("SPS must come before PPS");
+                ALOGE("SPS must come before PPS");
                 return ERROR_MALFORMED;
             }
             if (!gotSps) {
@@ -1670,7 +1670,7 @@
             nextStartCode = parseParamSet(tmp + 4, bytesLeft - 4, type, &paramSetLen);
         } else if (type == kNalUnitTypePicParamSet) {
             if (!gotSps) {
-                LOGE("SPS must come before PPS");
+                ALOGE("SPS must come before PPS");
                 return ERROR_MALFORMED;
             }
             if (!gotPps) {
@@ -1678,7 +1678,7 @@
             }
             nextStartCode = parseParamSet(tmp + 4, bytesLeft - 4, type, &paramSetLen);
         } else {
-            LOGE("Only SPS and PPS Nal units are expected");
+            ALOGE("Only SPS and PPS Nal units are expected");
             return ERROR_MALFORMED;
         }
 
@@ -1696,12 +1696,12 @@
         // Check on the number of seq parameter sets
         size_t nSeqParamSets = mSeqParamSets.size();
         if (nSeqParamSets == 0) {
-            LOGE("Cound not find sequence parameter set");
+            ALOGE("Cound not find sequence parameter set");
             return ERROR_MALFORMED;
         }
 
         if (nSeqParamSets > 0x1F) {
-            LOGE("Too many seq parameter sets (%d) found", nSeqParamSets);
+            ALOGE("Too many seq parameter sets (%d) found", nSeqParamSets);
             return ERROR_MALFORMED;
         }
     }
@@ -1710,11 +1710,11 @@
         // Check on the number of pic parameter sets
         size_t nPicParamSets = mPicParamSets.size();
         if (nPicParamSets == 0) {
-            LOGE("Cound not find picture parameter set");
+            ALOGE("Cound not find picture parameter set");
             return ERROR_MALFORMED;
         }
         if (nPicParamSets > 0xFF) {
-            LOGE("Too many pic parameter sets (%d) found", nPicParamSets);
+            ALOGE("Too many pic parameter sets (%d) found", nPicParamSets);
             return ERROR_MALFORMED;
         }
     }
@@ -1727,7 +1727,7 @@
         // These profiles requires additional parameter set extensions
         if (mProfileIdc == 100 || mProfileIdc == 110 ||
             mProfileIdc == 122 || mProfileIdc == 144) {
-            LOGE("Sorry, no support for profile_idc: %d!", mProfileIdc);
+            ALOGE("Sorry, no support for profile_idc: %d!", mProfileIdc);
             return BAD_VALUE;
         }
     }
@@ -1739,12 +1739,12 @@
         const uint8_t *data, size_t size) {
 
     if (mCodecSpecificData != NULL) {
-        LOGE("Already have codec specific data");
+        ALOGE("Already have codec specific data");
         return ERROR_MALFORMED;
     }
 
     if (size < 4) {
-        LOGE("Codec specific data length too short: %d", size);
+        ALOGE("Codec specific data length too short: %d", size);
         return ERROR_MALFORMED;
     }
 
@@ -2146,10 +2146,10 @@
 
     sendTrackSummary(hasMultipleTracks);
 
-    LOGI("Received total/0-length (%d/%d) buffers and encoded %d frames. - %s",
+    ALOGI("Received total/0-length (%d/%d) buffers and encoded %d frames. - %s",
             count, nZeroLengthFrames, mNumSamples, mIsAudio? "audio": "video");
     if (mIsAudio) {
-        LOGI("Audio track drift time: %lld us", mOwner->getDriftTimeUs());
+        ALOGI("Audio track drift time: %lld us", mOwner->getDriftTimeUs());
     }
 
     if (err == ERROR_END_OF_STREAM) {
@@ -2160,12 +2160,12 @@
 
 bool MPEG4Writer::Track::isTrackMalFormed() const {
     if (mSampleSizes.empty()) {                      // no samples written
-        LOGE("The number of recorded samples is 0");
+        ALOGE("The number of recorded samples is 0");
         return true;
     }
 
     if (!mIsAudio && mNumStssTableEntries == 0) {  // no sync frames for video
-        LOGE("There are no sync frames for video track");
+        ALOGE("There are no sync frames for video track");
         return true;
     }
 
@@ -2308,13 +2308,13 @@
         !strcasecmp(MEDIA_MIMETYPE_VIDEO_AVC, mime)) {
         if (!mCodecSpecificData ||
             mCodecSpecificDataSize <= 0) {
-            LOGE("Missing codec specific data");
+            ALOGE("Missing codec specific data");
             return ERROR_MALFORMED;
         }
     } else {
         if (mCodecSpecificData ||
             mCodecSpecificDataSize > 0) {
-            LOGE("Unexepected codec specific data found");
+            ALOGE("Unexepected codec specific data found");
             return ERROR_MALFORMED;
         }
     }
@@ -2378,7 +2378,7 @@
     } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_AVC, mime)) {
         mOwner->beginBox("avc1");
     } else {
-        LOGE("Unknown mime type '%s'.", mime);
+        ALOGE("Unknown mime type '%s'.", mime);
         CHECK(!"should not be here, unknown mime type.");
     }
 
@@ -2432,7 +2432,7 @@
     } else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_AAC, mime)) {
         fourcc = "mp4a";
     } else {
-        LOGE("Unknown mime type '%s'.", mime);
+        ALOGE("Unknown mime type '%s'.", mime);
         CHECK(!"should not be here, unknown mime type.");
     }
 
diff --git a/media/libstagefright/MediaBuffer.cpp b/media/libstagefright/MediaBuffer.cpp
index 0b14f1e..96271e4 100644
--- a/media/libstagefright/MediaBuffer.cpp
+++ b/media/libstagefright/MediaBuffer.cpp
@@ -135,7 +135,7 @@
 
 void MediaBuffer::set_range(size_t offset, size_t length) {
     if ((mGraphicBuffer == NULL) && (offset + length > mSize)) {
-        LOGE("offset = %d, length = %d, mSize = %d", offset, length, mSize);
+        ALOGE("offset = %d, length = %d, mSize = %d", offset, length, mSize);
     }
     CHECK((mGraphicBuffer != NULL) || (offset + length <= mSize));
 
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index 20d0632..249c298 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -302,7 +302,7 @@
             mNumRetriesLeft = 0;
             return;
         } else if (err != OK) {
-            LOGI("The attempt to reconnect failed, %d retries remaining",
+            ALOGI("The attempt to reconnect failed, %d retries remaining",
                  mNumRetriesLeft);
 
             return;
@@ -317,11 +317,11 @@
     Mutex::Autolock autoLock(mLock);
 
     if (n < 0) {
-        LOGE("source returned error %ld, %d retries left", n, mNumRetriesLeft);
+        ALOGE("source returned error %ld, %d retries left", n, mNumRetriesLeft);
         mFinalStatus = n;
         mCache->releasePage(page);
     } else if (n == 0) {
-        LOGI("ERROR_END_OF_STREAM");
+        ALOGI("ERROR_END_OF_STREAM");
 
         mNumRetriesLeft = 0;
         mFinalStatus = ERROR_END_OF_STREAM;
@@ -329,7 +329,7 @@
         mCache->releasePage(page);
     } else {
         if (mFinalStatus != OK) {
-            LOGI("retrying a previously failed read succeeded.");
+            ALOGI("retrying a previously failed read succeeded.");
         }
         mNumRetriesLeft = kMaxNumRetries;
         mFinalStatus = OK;
@@ -355,7 +355,7 @@
 
     if (mFetching || keepAlive) {
         if (keepAlive) {
-            LOGI("Keep alive");
+            ALOGI("Keep alive");
         }
 
         fetchInternal();
@@ -363,7 +363,7 @@
         mLastFetchTimeUs = ALooper::GetNowUs();
 
         if (mFetching && mCache->totalSize() >= mHighwaterThresholdBytes) {
-            LOGI("Cache full, done prefetching for now");
+            ALOGI("Cache full, done prefetching for now");
             mFetching = false;
 
             if (mDisconnectAtHighwatermark
@@ -448,7 +448,7 @@
     size_t actualBytes = mCache->releaseFromStart(maxBytes);
     mCacheOffset += actualBytes;
 
-    LOGI("restarting prefetcher, totalSize = %d", mCache->totalSize());
+    ALOGI("restarting prefetcher, totalSize = %d", mCache->totalSize());
     mFetching = true;
 }
 
@@ -584,7 +584,7 @@
         return OK;
     }
 
-    LOGI("new range: offset= %lld", offset);
+    ALOGI("new range: offset= %lld", offset);
 
     mCacheOffset = offset;
 
@@ -634,7 +634,7 @@
 
     if (sscanf(s, "%ld/%ld/%d",
                &lowwaterMarkKb, &highwaterMarkKb, &keepAliveSecs) != 3) {
-        LOGE("Failed to parse cache parameters from '%s'.", s);
+        ALOGE("Failed to parse cache parameters from '%s'.", s);
         return;
     }
 
@@ -651,7 +651,7 @@
     }
 
     if (mLowwaterThresholdBytes >= mHighwaterThresholdBytes) {
-        LOGE("Illegal low/highwater marks specified, reverting to defaults.");
+        ALOGE("Illegal low/highwater marks specified, reverting to defaults.");
 
         mLowwaterThresholdBytes = kDefaultLowWaterThreshold;
         mHighwaterThresholdBytes = kDefaultHighWaterThreshold;
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index f9f92d2..60d9bb7 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -179,9 +179,9 @@
 
 #undef OPTIONAL
 
-#define CODEC_LOGI(x, ...) LOGI("[%s] "x, mComponentName, ##__VA_ARGS__)
+#define CODEC_LOGI(x, ...) ALOGI("[%s] "x, mComponentName, ##__VA_ARGS__)
 #define CODEC_LOGV(x, ...) ALOGV("[%s] "x, mComponentName, ##__VA_ARGS__)
-#define CODEC_LOGE(x, ...) LOGE("[%s] "x, mComponentName, ##__VA_ARGS__)
+#define CODEC_LOGE(x, ...) ALOGE("[%s] "x, mComponentName, ##__VA_ARGS__)
 
 struct OMXCodecObserver : public BnOMXObserver {
     OMXCodecObserver() {
@@ -484,7 +484,7 @@
                 // For OMX.SEC.* decoders we can enable a special mode that
                 // gives the client access to the framebuffer contents.
 
-                LOGW("Component '%s' does not give the client access to "
+                ALOGW("Component '%s' does not give the client access to "
                      "the framebuffer contents. Skipping.",
                      componentName);
 
@@ -625,7 +625,7 @@
             status_t err;
             if ((err = parseAVCCodecSpecificData(
                             data, size, &profile, &level)) != OK) {
-                LOGE("Malformed AVC codec specific data.");
+                ALOGE("Malformed AVC codec specific data.");
                 return err;
             }
 
@@ -639,7 +639,7 @@
                 // does not handle this gracefully and would clobber the heap
                 // and wreak havoc instead...
 
-                LOGE("Profile and/or level exceed the decoder's capabilities.");
+                ALOGE("Profile and/or level exceed the decoder's capabilities.");
                 return ERROR_UNSUPPORTED;
             }
         } else if (meta->findData(kKeyVorbisInfo, &type, &data, &size)) {
@@ -981,7 +981,7 @@
     } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_H263, mime)) {
         compressionFormat = OMX_VIDEO_CodingH263;
     } else {
-        LOGE("Not a supported video mime type: %s", mime);
+        ALOGE("Not a supported video mime type: %s", mime);
         CHECK(!"Should not be here. Not a supported video mime type.");
     }
 
@@ -1093,7 +1093,7 @@
             mNode, OMX_IndexParamVideoErrorCorrection,
             &errorCorrectionType, sizeof(errorCorrectionType));
     if (err != OK) {
-        LOGW("Error correction param query is not supported");
+        ALOGW("Error correction param query is not supported");
         return OK;  // Optional feature. Ignore this failure
     }
 
@@ -1107,7 +1107,7 @@
             mNode, OMX_IndexParamVideoErrorCorrection,
             &errorCorrectionType, sizeof(errorCorrectionType));
     if (err != OK) {
-        LOGW("Error correction param configuration is not supported");
+        ALOGW("Error correction param configuration is not supported");
     }
 
     // Optional feature. Ignore the failure.
@@ -1375,7 +1375,7 @@
     } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_MPEG2, mime)) {
         compressionFormat = OMX_VIDEO_CodingMPEG2;
     } else {
-        LOGE("Not a supported video mime type: %s", mime);
+        ALOGE("Not a supported video mime type: %s", mime);
         CHECK(!"Should not be here. Not a supported video mime type.");
     }
 
@@ -1579,7 +1579,7 @@
                 &roleParams, sizeof(roleParams));
 
         if (err != OK) {
-            LOGW("Failed to set standard component role '%s'.", role);
+            ALOGW("Failed to set standard component role '%s'.", role);
         }
     }
 }
@@ -1664,7 +1664,7 @@
     }
 
     if ((mFlags & kEnableGrallocUsageProtected) && portIndex == kPortIndexOutput) {
-        LOGE("protected output buffers must be stent to an ANativeWindow");
+        ALOGE("protected output buffers must be stent to an ANativeWindow");
         return PERMISSION_DENIED;
     }
 
@@ -1673,7 +1673,7 @@
             && portIndex == kPortIndexInput) {
         err = mOMX->storeMetaDataInBuffers(mNode, kPortIndexInput, OMX_TRUE);
         if (err != OK) {
-            LOGE("Storing meta data in video buffers is not supported");
+            ALOGE("Storing meta data in video buffers is not supported");
             return err;
         }
     }
@@ -1735,7 +1735,7 @@
         }
 
         if (err != OK) {
-            LOGE("allocate_buffer_with_backup failed");
+            ALOGE("allocate_buffer_with_backup failed");
             return err;
         }
 
@@ -1849,7 +1849,7 @@
             def.format.video.eColorFormat);
 
     if (err != 0) {
-        LOGE("native_window_set_buffers_geometry failed: %s (%d)",
+        ALOGE("native_window_set_buffers_geometry failed: %s (%d)",
                 strerror(-err), -err);
         return err;
     }
@@ -1863,7 +1863,7 @@
     OMX_U32 usage = 0;
     err = mOMX->getGraphicBufferUsage(mNode, kPortIndexOutput, &usage);
     if (err != 0) {
-        LOGW("querying usage flags from OMX IL component failed: %d", err);
+        ALOGW("querying usage flags from OMX IL component failed: %d", err);
         // XXX: Currently this error is logged, but not fatal.
         usage = 0;
     }
@@ -1881,11 +1881,11 @@
                 mNativeWindow.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER,
                 &queuesToNativeWindow);
         if (err != 0) {
-            LOGE("error authenticating native window: %d", err);
+            ALOGE("error authenticating native window: %d", err);
             return err;
         }
         if (queuesToNativeWindow != 1) {
-            LOGE("native window could not be authenticated");
+            ALOGE("native window could not be authenticated");
             return PERMISSION_DENIED;
         }
     }
@@ -1894,7 +1894,7 @@
     err = native_window_set_usage(
             mNativeWindow.get(), usage | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP);
     if (err != 0) {
-        LOGE("native_window_set_usage failed: %s (%d)", strerror(-err), -err);
+        ALOGE("native_window_set_usage failed: %s (%d)", strerror(-err), -err);
         return err;
     }
 
@@ -1902,7 +1902,7 @@
     err = mNativeWindow->query(mNativeWindow.get(),
             NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS, &minUndequeuedBufs);
     if (err != 0) {
-        LOGE("NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: %s (%d)",
+        ALOGE("NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: %s (%d)",
                 strerror(-err), -err);
         return err;
     }
@@ -1925,7 +1925,7 @@
     err = native_window_set_buffer_count(
             mNativeWindow.get(), def.nBufferCountActual);
     if (err != 0) {
-        LOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err),
+        ALOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err),
                 -err);
         return err;
     }
@@ -1938,7 +1938,7 @@
         ANativeWindowBuffer* buf;
         err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf);
         if (err != 0) {
-            LOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err);
+            ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err);
             break;
         }
 
@@ -2052,7 +2052,7 @@
     err = native_window_api_disconnect(mNativeWindow.get(),
             NATIVE_WINDOW_API_MEDIA);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: api_disconnect failed: %s (%d)",
+        ALOGE("error pushing blank frames: api_disconnect failed: %s (%d)",
                 strerror(-err), -err);
         return err;
     }
@@ -2060,7 +2060,7 @@
     err = native_window_api_connect(mNativeWindow.get(),
             NATIVE_WINDOW_API_CPU);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: api_connect failed: %s (%d)",
+        ALOGE("error pushing blank frames: api_connect failed: %s (%d)",
                 strerror(-err), -err);
         return err;
     }
@@ -2068,7 +2068,7 @@
     err = native_window_set_scaling_mode(mNativeWindow.get(),
             NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: set_buffers_geometry failed: %s (%d)",
+        ALOGE("error pushing blank frames: set_buffers_geometry failed: %s (%d)",
                 strerror(-err), -err);
         goto error;
     }
@@ -2076,7 +2076,7 @@
     err = native_window_set_buffers_geometry(mNativeWindow.get(), 1, 1,
             HAL_PIXEL_FORMAT_RGBX_8888);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: set_buffers_geometry failed: %s (%d)",
+        ALOGE("error pushing blank frames: set_buffers_geometry failed: %s (%d)",
                 strerror(-err), -err);
         goto error;
     }
@@ -2084,7 +2084,7 @@
     err = native_window_set_usage(mNativeWindow.get(),
             GRALLOC_USAGE_SW_WRITE_OFTEN);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: set_usage failed: %s (%d)",
+        ALOGE("error pushing blank frames: set_usage failed: %s (%d)",
                 strerror(-err), -err);
         goto error;
     }
@@ -2092,7 +2092,7 @@
     err = mNativeWindow->query(mNativeWindow.get(),
             NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS, &minUndequeuedBufs);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: MIN_UNDEQUEUED_BUFFERS query "
+        ALOGE("error pushing blank frames: MIN_UNDEQUEUED_BUFFERS query "
                 "failed: %s (%d)", strerror(-err), -err);
         goto error;
     }
@@ -2100,7 +2100,7 @@
     numBufs = minUndequeuedBufs + 1;
     err = native_window_set_buffer_count(mNativeWindow.get(), numBufs);
     if (err != NO_ERROR) {
-        LOGE("error pushing blank frames: set_buffer_count failed: %s (%d)",
+        ALOGE("error pushing blank frames: set_buffer_count failed: %s (%d)",
                 strerror(-err), -err);
         goto error;
     }
@@ -2112,7 +2112,7 @@
     for (int i = 0; i < numBufs + 1; i++) {
         err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &anb);
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: dequeueBuffer failed: %s (%d)",
+            ALOGE("error pushing blank frames: dequeueBuffer failed: %s (%d)",
                     strerror(-err), -err);
             goto error;
         }
@@ -2121,7 +2121,7 @@
         err = mNativeWindow->lockBuffer(mNativeWindow.get(),
                 buf->getNativeBuffer());
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: lockBuffer failed: %s (%d)",
+            ALOGE("error pushing blank frames: lockBuffer failed: %s (%d)",
                     strerror(-err), -err);
             goto error;
         }
@@ -2130,7 +2130,7 @@
         uint32_t* img = NULL;
         err = buf->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, (void**)(&img));
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: lock failed: %s (%d)",
+            ALOGE("error pushing blank frames: lock failed: %s (%d)",
                     strerror(-err), -err);
             goto error;
         }
@@ -2139,7 +2139,7 @@
 
         err = buf->unlock();
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: unlock failed: %s (%d)",
+            ALOGE("error pushing blank frames: unlock failed: %s (%d)",
                     strerror(-err), -err);
             goto error;
         }
@@ -2147,7 +2147,7 @@
         err = mNativeWindow->queueBuffer(mNativeWindow.get(),
                 buf->getNativeBuffer());
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: queueBuffer failed: %s (%d)",
+            ALOGE("error pushing blank frames: queueBuffer failed: %s (%d)",
                     strerror(-err), -err);
             goto error;
         }
@@ -2174,7 +2174,7 @@
         err = native_window_api_disconnect(mNativeWindow.get(),
                 NATIVE_WINDOW_API_CPU);
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: api_disconnect failed: %s (%d)",
+            ALOGE("error pushing blank frames: api_disconnect failed: %s (%d)",
                     strerror(-err), -err);
             return err;
         }
@@ -2182,7 +2182,7 @@
         err = native_window_api_connect(mNativeWindow.get(),
                 NATIVE_WINDOW_API_MEDIA);
         if (err != NO_ERROR) {
-            LOGE("error pushing blank frames: api_connect failed: %s (%d)",
+            ALOGE("error pushing blank frames: api_connect failed: %s (%d)",
                     strerror(-err), -err);
             return err;
         }
@@ -2214,7 +2214,7 @@
 
 void OMXCodec::on_message(const omx_message &msg) {
     if (mState == ERROR) {
-        LOGW("Dropping OMX message - we're in ERROR state.");
+        ALOGW("Dropping OMX message - we're in ERROR state.");
         return;
     }
 
@@ -2242,7 +2242,7 @@
 
             CHECK(i < buffers->size());
             if ((*buffers)[i].mStatus != OWNED_BY_COMPONENT) {
-                LOGW("We already own input buffer %p, yet received "
+                ALOGW("We already own input buffer %p, yet received "
                      "an EMPTY_BUFFER_DONE.", buffer);
             }
 
@@ -2302,7 +2302,7 @@
             BufferInfo *info = &buffers->editItemAt(i);
 
             if (info->mStatus != OWNED_BY_COMPONENT) {
-                LOGW("We already own output buffer %p, yet received "
+                ALOGW("We already own output buffer %p, yet received "
                      "a FILL_BUFFER_DONE.", buffer);
             }
 
@@ -3556,7 +3556,7 @@
 
 status_t OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate) {
     if (numChannels > 2)
-        LOGW("Number of channels: (%d) \n", numChannels);
+        ALOGW("Number of channels: (%d) \n", numChannels);
 
     if (mIsEncoder) {
         //////////////// input port ////////////////////
diff --git a/media/libstagefright/OggExtractor.cpp b/media/libstagefright/OggExtractor.cpp
index 5a68d79..73efc27 100644
--- a/media/libstagefright/OggExtractor.cpp
+++ b/media/libstagefright/OggExtractor.cpp
@@ -189,9 +189,9 @@
 #if 0
     int64_t timeUs;
     if (packet->meta_data()->findInt64(kKeyTime, &timeUs)) {
-        LOGI("found time = %lld us", timeUs);
+        ALOGI("found time = %lld us", timeUs);
     } else {
-        LOGI("NO time");
+        ALOGI("NO time");
     }
 #endif
 
@@ -777,7 +777,7 @@
         const char *comment = mVc.user_comments[i];
         size_t commentLength = mVc.comment_lengths[i];
         parseVorbisComment(mFileMeta, comment, commentLength);
-        //LOGI("comment #%d: '%s'", i + 1, mVc.user_comments[i]);
+        //ALOGI("comment #%d: '%s'", i + 1, mVc.user_comments[i]);
     }
 }
 
@@ -899,7 +899,7 @@
     uint8_t *flac = DecodeBase64((const char *)data, size, &flacSize);
 
     if (flac == NULL) {
-        LOGE("malformed base64 encoded data.");
+        ALOGE("malformed base64 encoded data.");
         return;
     }
 
diff --git a/media/libstagefright/SampleIterator.cpp b/media/libstagefright/SampleIterator.cpp
index 7b8e008..81ec5c1 100644
--- a/media/libstagefright/SampleIterator.cpp
+++ b/media/libstagefright/SampleIterator.cpp
@@ -77,7 +77,7 @@
     if (sampleIndex >= mStopChunkSampleIndex) {
         status_t err;
         if ((err = findChunkRange(sampleIndex)) != OK) {
-            LOGE("findChunkRange failed");
+            ALOGE("findChunkRange failed");
             return err;
         }
     }
@@ -93,7 +93,7 @@
 
         status_t err;
         if ((err = getChunkOffset(chunk, &mCurrentChunkOffset)) != OK) {
-            LOGE("getChunkOffset return error");
+            ALOGE("getChunkOffset return error");
             return err;
         }
 
@@ -107,7 +107,7 @@
             size_t sampleSize;
             if ((err = getSampleSizeDirect(
                             firstChunkSampleIndex + i, &sampleSize)) != OK) {
-                LOGE("getSampleSizeDirect return error");
+                ALOGE("getSampleSizeDirect return error");
                 return err;
             }
 
@@ -134,7 +134,7 @@
 
     status_t err;
     if ((err = findSampleTime(sampleIndex, &mCurrentSampleTime)) != OK) {
-        LOGE("findSampleTime return error");
+        ALOGE("findSampleTime return error");
         return err;
     }
 
diff --git a/media/libstagefright/SampleTable.cpp b/media/libstagefright/SampleTable.cpp
index 3e287fa..d9858d76 100644
--- a/media/libstagefright/SampleTable.cpp
+++ b/media/libstagefright/SampleTable.cpp
@@ -347,7 +347,7 @@
 
 status_t SampleTable::setCompositionTimeToSampleParams(
         off64_t data_offset, size_t data_size) {
-    LOGI("There are reordered frames present.");
+    ALOGI("There are reordered frames present.");
 
     if (mCompositionTimeDeltaEntries != NULL || data_size < 8) {
         return ERROR_MALFORMED;
@@ -634,7 +634,7 @@
     }
     if (left == mNumSyncSamples) {
         if (flags == kFlagAfter) {
-            LOGE("tried to find a sync frame after the last one: %d", left);
+            ALOGE("tried to find a sync frame after the last one: %d", left);
             return ERROR_OUT_OF_RANGE;
         }
         left = left - 1;
diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp
index 4345184..bd7a226 100644
--- a/media/libstagefright/StagefrightMediaScanner.cpp
+++ b/media/libstagefright/StagefrightMediaScanner.cpp
@@ -57,7 +57,7 @@
     // get the library configuration and do sanity check
     const S_EAS_LIB_CONFIG* pLibConfig = EAS_Config();
     if ((pLibConfig == NULL) || (LIB_VERSION != pLibConfig->libVersion)) {
-        LOGE("EAS library/header mismatch\n");
+        ALOGE("EAS library/header mismatch\n");
         return MEDIA_SCAN_RESULT_ERROR;
     }
     EAS_I32 temp;
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index 2634da0..43bfd9e 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -127,7 +127,7 @@
 
     status_t err = decoder->start();
     if (err != OK) {
-        LOGW("OMXCodec::start returned error %d (0x%08x)\n", err, err);
+        ALOGW("OMXCodec::start returned error %d (0x%08x)\n", err, err);
         return NULL;
     }
 
@@ -138,7 +138,7 @@
     if (seekMode < MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC ||
         seekMode > MediaSource::ReadOptions::SEEK_CLOSEST) {
 
-        LOGE("Unknown seek mode: %d", seekMode);
+        ALOGE("Unknown seek mode: %d", seekMode);
         return NULL;
     }
 
@@ -264,7 +264,7 @@
     decoder->stop();
 
     if (err != OK) {
-        LOGE("Colorconverter failed to convert frame.");
+        ALOGE("Colorconverter failed to convert frame.");
 
         delete frame;
         frame = NULL;
@@ -292,7 +292,7 @@
 
     int32_t drm = 0;
     if (fileMeta->findInt32(kKeyIsDRM, &drm) && drm != 0) {
-        LOGE("frame grab not allowed.");
+        ALOGE("frame grab not allowed.");
         return NULL;
     }
 
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp
index 2f807d0..2233d1b 100644
--- a/media/libstagefright/SurfaceMediaSource.cpp
+++ b/media/libstagefright/SurfaceMediaSource.cpp
@@ -112,7 +112,7 @@
 status_t SurfaceMediaSource::setBufferCount(int bufferCount) {
     ALOGV("SurfaceMediaSource::setBufferCount");
     if (bufferCount > NUM_BUFFER_SLOTS) {
-        LOGE("setBufferCount: bufferCount is larger than the number of buffer slots");
+        ALOGE("setBufferCount: bufferCount is larger than the number of buffer slots");
         return BAD_VALUE;
     }
 
@@ -120,7 +120,7 @@
     // Error out if the user has dequeued buffers
     for (int i = 0 ; i < mBufferCount ; i++) {
         if (mSlots[i].mBufferState == BufferSlot::DEQUEUED) {
-            LOGE("setBufferCount: client owns some buffers");
+            ALOGE("setBufferCount: client owns some buffers");
             return INVALID_OPERATION;
         }
     }
@@ -155,7 +155,7 @@
     ALOGV("SurfaceMediaSource::requestBuffer");
     Mutex::Autolock lock(mMutex);
     if (slot < 0 || mBufferCount <= slot) {
-        LOGE("requestBuffer: slot index out of range [0, %d]: %d",
+        ALOGE("requestBuffer: slot index out of range [0, %d]: %d",
                 mBufferCount, slot);
         return BAD_VALUE;
     }
@@ -183,7 +183,7 @@
     // we might declare mHeight and mWidth and check against those here.
     if ((w != 0) || (h != 0)) {
         if ((w != mDefaultWidth) || (h != mDefaultHeight)) {
-            LOGE("dequeuebuffer: invalid buffer size! Req: %dx%d, Found: %dx%d",
+            ALOGE("dequeuebuffer: invalid buffer size! Req: %dx%d, Found: %dx%d",
                     mDefaultWidth, mDefaultHeight, w, h);
             return BAD_VALUE;
         }
@@ -284,7 +284,7 @@
             // than allowed.
             const int avail = mBufferCount - (dequeuedCount+1);
             if (avail < (MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode))) {
-                LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded (dequeued=%d)",
+                ALOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded (dequeued=%d)",
                         MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode),
                         dequeuedCount);
                 return -EBUSY;
@@ -346,7 +346,7 @@
                     mGraphicBufferAlloc->createGraphicBuffer(
                                     w, h, format, usage, &error));
             if (graphicBuffer == 0) {
-                LOGE("dequeueBuffer: SurfaceComposer::createGraphicBuffer failed");
+                ALOGE("dequeueBuffer: SurfaceComposer::createGraphicBuffer failed");
                 return error;
             }
             if (updateFormat) {
@@ -363,13 +363,13 @@
 status_t SurfaceMediaSource::setSynchronousMode(bool enabled) {
     Mutex::Autolock lock(mMutex);
     if (mStopped) {
-        LOGE("setSynchronousMode: SurfaceMediaSource has been stopped!");
+        ALOGE("setSynchronousMode: SurfaceMediaSource has been stopped!");
         return NO_INIT;
     }
 
     if (!enabled) {
         // Async mode is not allowed
-        LOGE("SurfaceMediaSource can be used only synchronous mode!");
+        ALOGE("SurfaceMediaSource can be used only synchronous mode!");
         return INVALID_OPERATION;
     }
 
@@ -390,7 +390,7 @@
     Mutex::Autolock lock(mMutex);
 
     if (mStopped) {
-        LOGE("Connect: SurfaceMediaSource has been stopped!");
+        ALOGE("Connect: SurfaceMediaSource has been stopped!");
         return NO_INIT;
     }
 
@@ -431,7 +431,7 @@
     Mutex::Autolock lock(mMutex);
 
     if (mStopped) {
-        LOGE("disconnect: SurfaceMediaSoource is already stopped!");
+        ALOGE("disconnect: SurfaceMediaSoource is already stopped!");
         return NO_INIT;
     }
 
@@ -467,15 +467,15 @@
     *outTransform = 0;
 
     if (bufIndex < 0 || bufIndex >= mBufferCount) {
-        LOGE("queueBuffer: slot index out of range [0, %d]: %d",
+        ALOGE("queueBuffer: slot index out of range [0, %d]: %d",
                 mBufferCount, bufIndex);
         return -EINVAL;
     } else if (mSlots[bufIndex].mBufferState != BufferSlot::DEQUEUED) {
-        LOGE("queueBuffer: slot %d is not owned by the client (state=%d)",
+        ALOGE("queueBuffer: slot %d is not owned by the client (state=%d)",
                 bufIndex, mSlots[bufIndex].mBufferState);
         return -EINVAL;
     } else if (!mSlots[bufIndex].mRequestBufferCalled) {
-        LOGE("queueBuffer: slot %d was enqueued without requesting a "
+        ALOGE("queueBuffer: slot %d was enqueued without requesting a "
                 "buffer", bufIndex);
         return -EINVAL;
     }
@@ -561,11 +561,11 @@
     ALOGV("SurfaceMediaSource::cancelBuffer");
     Mutex::Autolock lock(mMutex);
     if (bufIndex < 0 || bufIndex >= mBufferCount) {
-        LOGE("cancelBuffer: slot index out of range [0, %d]: %d",
+        ALOGE("cancelBuffer: slot index out of range [0, %d]: %d",
                 mBufferCount, bufIndex);
         return;
     } else if (mSlots[bufIndex].mBufferState != BufferSlot::DEQUEUED) {
-        LOGE("cancelBuffer: slot %d is not owned by the client (state=%d)",
+        ALOGE("cancelBuffer: slot %d is not owned by the client (state=%d)",
                 bufIndex, mSlots[bufIndex].mBufferState);
         return;
     }
@@ -814,7 +814,7 @@
         new MediaBuffer(4 + sizeof(buffer_handle_t));
     char *data = (char *)tempBuffer->data();
     if (data == NULL) {
-        LOGE("Cannot allocate memory for metadata buffer!");
+        ALOGE("Cannot allocate memory for metadata buffer!");
         return;
     }
     OMX_U32 type = kMetadataBufferTypeGrallocSource;
diff --git a/media/libstagefright/TimedEventQueue.cpp b/media/libstagefright/TimedEventQueue.cpp
index 43511ec..12c9c36 100644
--- a/media/libstagefright/TimedEventQueue.cpp
+++ b/media/libstagefright/TimedEventQueue.cpp
@@ -265,7 +265,7 @@
                 static int64_t kMaxTimeoutUs = 10000000ll;  // 10 secs
                 bool timeoutCapped = false;
                 if (delay_us > kMaxTimeoutUs) {
-                    LOGW("delay_us exceeds max timeout: %lld us", delay_us);
+                    ALOGW("delay_us exceeds max timeout: %lld us", delay_us);
 
                     // We'll never block for more than 10 secs, instead
                     // we will split up the full timeout into chunks of
@@ -315,7 +315,7 @@
         }
     }
 
-    LOGW("Event %d was not found in the queue, already cancelled?", id);
+    ALOGW("Event %d was not found in the queue, already cancelled?", id);
 
     return NULL;
 }
diff --git a/media/libstagefright/VBRISeeker.cpp b/media/libstagefright/VBRISeeker.cpp
index ecff538..6ac5a83 100644
--- a/media/libstagefright/VBRISeeker.cpp
+++ b/media/libstagefright/VBRISeeker.cpp
@@ -120,7 +120,7 @@
     delete[] buffer;
     buffer = NULL;
 
-    LOGI("Found VBRI header.");
+    ALOGI("Found VBRI header.");
 
     return seeker;
 }
diff --git a/media/libstagefright/WVMExtractor.cpp b/media/libstagefright/WVMExtractor.cpp
index 26eda0c..2092cb6 100644
--- a/media/libstagefright/WVMExtractor.cpp
+++ b/media/libstagefright/WVMExtractor.cpp
@@ -53,7 +53,7 @@
         }
 
         if (gVendorLibHandle == NULL) {
-            LOGE("Failed to open libwvm.so");
+            ALOGE("Failed to open libwvm.so");
             return;
         }
     }
@@ -67,7 +67,7 @@
         mImpl = (*getInstanceFunc)(source);
         CHECK(mImpl != NULL);
     } else {
-        LOGE("Failed to locate GetInstance in libwvm.so");
+        ALOGE("Failed to locate GetInstance in libwvm.so");
     }
 }
 
diff --git a/media/libstagefright/avc_utils.cpp b/media/libstagefright/avc_utils.cpp
index 1ed9e577..65c1848 100644
--- a/media/libstagefright/avc_utils.cpp
+++ b/media/libstagefright/avc_utils.cpp
@@ -290,7 +290,7 @@
     memcpy(out, picParamSet->data(), picParamSet->size());
 
 #if 0
-    LOGI("AVC seq param set");
+    ALOGI("AVC seq param set");
     hexdump(seqParamSet->data(), seqParamSet->size());
 #endif
 
@@ -301,7 +301,7 @@
     meta->setInt32(kKeyWidth, width);
     meta->setInt32(kKeyHeight, height);
 
-    LOGI("found AVC codec config (%d x %d, %s-profile level %d.%d)",
+    ALOGI("found AVC codec config (%d x %d, %s-profile level %d.%d)",
          width, height, AVCProfileToString(profile), level / 10, level % 10);
 
     return meta;
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC.cpp b/media/libstagefright/codecs/aacdec/SoftAAC.cpp
index c408b2c..da9d280 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC.cpp
+++ b/media/libstagefright/codecs/aacdec/SoftAAC.cpp
@@ -116,7 +116,7 @@
 
     Int err = PVMP4AudioDecoderInitLibrary(mConfig, mDecoderBuf);
     if (err != MP4AUDEC_SUCCESS) {
-        LOGE("Failed to initialize MP4 audio decoder");
+        ALOGE("Failed to initialize MP4 audio decoder");
         return UNKNOWN_ERROR;
     }
 
@@ -326,7 +326,7 @@
                 mUpsamplingFactor = mConfig->aacPlusUpsamplingFactor;
                 // Check on the sampling rate to see whether it is changed.
                 if (mConfig->samplingRate != prevSamplingRate) {
-                    LOGW("Sample rate was %d Hz, but now is %d Hz",
+                    ALOGW("Sample rate was %d Hz, but now is %d Hz",
                             prevSamplingRate, mConfig->samplingRate);
 
                     // We'll hold onto the input buffer and will decode
@@ -341,7 +341,7 @@
                     mConfig->extendedAudioObjectType == MP4AUDIO_LTP) {
                     if (mUpsamplingFactor == 2) {
                         // The stream turns out to be not aacPlus mode anyway
-                        LOGW("Disable AAC+/eAAC+ since extended audio object "
+                        ALOGW("Disable AAC+/eAAC+ since extended audio object "
                              "type is %d",
                              mConfig->extendedAudioObjectType);
                         mConfig->aacPlusEnabled = 0;
@@ -351,7 +351,7 @@
                         // aacPlus mode does not buy us anything, but to cause
                         // 1. CPU load to increase, and
                         // 2. a half speed of decoding
-                        LOGW("Disable AAC+/eAAC+ since upsampling factor is 1");
+                        ALOGW("Disable AAC+/eAAC+ since upsampling factor is 1");
                         mConfig->aacPlusEnabled = 0;
                     }
                 }
@@ -367,7 +367,7 @@
             inHeader->nFilledLen -= mConfig->inputBufferUsedLength;
             inHeader->nOffset += mConfig->inputBufferUsedLength;
         } else {
-            LOGW("AAC decoder returned error %d, substituting silence",
+            ALOGW("AAC decoder returned error %d, substituting silence",
                  decoderErr);
 
             memset(outHeader->pBuffer + outHeader->nOffset, 0, numOutBytes);
diff --git a/media/libstagefright/codecs/aacenc/AACEncoder.cpp b/media/libstagefright/codecs/aacenc/AACEncoder.cpp
index 2b15b75..2b8633d 100644
--- a/media/libstagefright/codecs/aacenc/AACEncoder.cpp
+++ b/media/libstagefright/codecs/aacenc/AACEncoder.cpp
@@ -53,7 +53,7 @@
     CHECK(mApiHandle);
 
     if (VO_ERR_NONE != voGetAACEncAPI(mApiHandle)) {
-        LOGE("Failed to get api handle");
+        ALOGE("Failed to get api handle");
         return UNKNOWN_ERROR;
     }
 
@@ -70,11 +70,11 @@
     userData.memflag = VO_IMF_USERMEMOPERATOR;
     userData.memData = (VO_PTR) mMemOperator;
     if (VO_ERR_NONE != mApiHandle->Init(&mEncoderHandle, VO_AUDIO_CodingAAC, &userData)) {
-        LOGE("Failed to init AAC encoder");
+        ALOGE("Failed to init AAC encoder");
         return UNKNOWN_ERROR;
     }
     if (OK != setAudioSpecificConfigData()) {
-        LOGE("Failed to configure AAC encoder");
+        ALOGE("Failed to configure AAC encoder");
         return UNKNOWN_ERROR;
     }
 
@@ -86,7 +86,7 @@
     params.nChannels = mChannels;
     params.adtsUsed = 0;  // We add adts header in the file writer if needed.
     if (VO_ERR_NONE != mApiHandle->SetParam(mEncoderHandle, VO_PID_AAC_ENCPARAM,  &params)) {
-        LOGE("Failed to set AAC encoder parameters");
+        ALOGE("Failed to set AAC encoder parameters");
         return UNKNOWN_ERROR;
     }
 
@@ -106,7 +106,7 @@
         }
     }
 
-    LOGE("Sampling rate %d bps is not supported", sampleRate);
+    ALOGE("Sampling rate %d bps is not supported", sampleRate);
     return UNKNOWN_ERROR;
 }
 
@@ -117,7 +117,7 @@
     int32_t index;
     CHECK_EQ(OK, getSampleRateTableIndex(mSampleRate, index));
     if (mChannels > 2 || mChannels <= 0) {
-        LOGE("Unsupported number of channels(%d)", mChannels);
+        ALOGE("Unsupported number of channels(%d)", mChannels);
         return UNKNOWN_ERROR;
     }
 
@@ -135,7 +135,7 @@
 
 status_t AACEncoder::start(MetaData *params) {
     if (mStarted) {
-        LOGW("Call start() when encoder already started");
+        ALOGW("Call start() when encoder already started");
         return OK;
     }
 
@@ -153,7 +153,7 @@
 
     status_t err = mSource->start(params);
     if (err != OK) {
-         LOGE("AudioSource is not available");
+         ALOGE("AudioSource is not available");
         return err;
     }
 
@@ -177,7 +177,7 @@
     }
 
     if (!mStarted) {
-        LOGW("Call stop() when encoder has not started");
+        ALOGW("Call stop() when encoder has not started");
         return ERROR_END_OF_STREAM;
     }
 
diff --git a/media/libstagefright/codecs/amrnb/dec/SoftAMR.cpp b/media/libstagefright/codecs/amrnb/dec/SoftAMR.cpp
index c0a588f..7602f2d 100644
--- a/media/libstagefright/codecs/amrnb/dec/SoftAMR.cpp
+++ b/media/libstagefright/codecs/amrnb/dec/SoftAMR.cpp
@@ -304,7 +304,7 @@
                   MIME_IETF);
 
             if (numBytesRead == -1) {
-                LOGE("PV AMR decoder AMRDecode() call failed");
+                ALOGE("PV AMR decoder AMRDecode() call failed");
 
                 notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
                 mSignalledError = true;
diff --git a/media/libstagefright/codecs/amrnb/enc/AMRNBEncoder.cpp b/media/libstagefright/codecs/amrnb/enc/AMRNBEncoder.cpp
index d361ef4..3afbc4f 100644
--- a/media/libstagefright/codecs/amrnb/enc/AMRNBEncoder.cpp
+++ b/media/libstagefright/codecs/amrnb/enc/AMRNBEncoder.cpp
@@ -71,7 +71,7 @@
 
 status_t AMRNBEncoder::start(MetaData *params) {
     if (mStarted) {
-        LOGW("Call start() when encoder already started");
+        ALOGW("Call start() when encoder already started");
         return OK;
     }
 
@@ -84,7 +84,7 @@
 
     status_t err = mSource->start(params);
     if (err != OK) {
-        LOGE("AudioSource is not available");
+        ALOGE("AudioSource is not available");
         return err;
     }
 
@@ -105,7 +105,7 @@
 
 status_t AMRNBEncoder::stop() {
     if (!mStarted) {
-        LOGW("Call stop() when encoder has not started.");
+        ALOGW("Call stop() when encoder has not started.");
         return OK;
     }
 
diff --git a/media/libstagefright/codecs/amrwbenc/AMRWBEncoder.cpp b/media/libstagefright/codecs/amrwbenc/AMRWBEncoder.cpp
index 5eacc16..60b1163 100644
--- a/media/libstagefright/codecs/amrwbenc/AMRWBEncoder.cpp
+++ b/media/libstagefright/codecs/amrwbenc/AMRWBEncoder.cpp
@@ -80,7 +80,7 @@
     CHECK(mApiHandle);
 
     if (VO_ERR_NONE != voGetAMRWBEncAPI(mApiHandle)) {
-        LOGE("Failed to get api handle");
+        ALOGE("Failed to get api handle");
         return UNKNOWN_ERROR;
     }
 
@@ -97,20 +97,20 @@
     userData.memflag = VO_IMF_USERMEMOPERATOR;
     userData.memData = (VO_PTR) mMemOperator;
     if (VO_ERR_NONE != mApiHandle->Init(&mEncoderHandle, VO_AUDIO_CodingAMRWB, &userData)) {
-        LOGE("Failed to init AMRWB encoder");
+        ALOGE("Failed to init AMRWB encoder");
         return UNKNOWN_ERROR;
     }
 
     // Configure AMRWB encoder$
     VOAMRWBMODE mode = pickModeFromBitRate(mBitRate);
     if (VO_ERR_NONE != mApiHandle->SetParam(mEncoderHandle, VO_PID_AMRWB_MODE,  &mode)) {
-        LOGE("Failed to set AMRWB encoder mode to %d", mode);
+        ALOGE("Failed to set AMRWB encoder mode to %d", mode);
         return UNKNOWN_ERROR;
     }
 
     VOAMRWBFRAMETYPE type = VOAMRWB_RFC3267;
     if (VO_ERR_NONE != mApiHandle->SetParam(mEncoderHandle, VO_PID_AMRWB_FRAMETYPE, &type)) {
-        LOGE("Failed to set AMRWB encoder frame type to %d", type);
+        ALOGE("Failed to set AMRWB encoder frame type to %d", type);
         return UNKNOWN_ERROR;
     }
 
@@ -125,7 +125,7 @@
 
 status_t AMRWBEncoder::start(MetaData *params) {
     if (mStarted) {
-        LOGW("Call start() when encoder already started");
+        ALOGW("Call start() when encoder already started");
         return OK;
     }
 
@@ -140,7 +140,7 @@
 
     status_t err = mSource->start(params);
     if (err != OK) {
-        LOGE("AudioSource is not available");
+        ALOGE("AudioSource is not available");
         return err;
     }
     mStarted = true;
@@ -150,7 +150,7 @@
 
 status_t AMRWBEncoder::stop() {
     if (!mStarted) {
-        LOGW("Call stop() when encoder has not started");
+        ALOGW("Call stop() when encoder has not started");
         return OK;
     }
 
diff --git a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp
index 18c5550..e202a2b 100644
--- a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp
+++ b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp
@@ -41,7 +41,7 @@
             *pvProfile = AVC_BASELINE;
             return OK;
         default:
-            LOGE("Unsupported omx profile: %d", omxProfile);
+            ALOGE("Unsupported omx profile: %d", omxProfile);
     }
     return BAD_VALUE;
 }
@@ -100,7 +100,7 @@
             level = AVC_LEVEL5_1;
             break;
         default:
-            LOGE("Unknown omx level: %d", omxLevel);
+            ALOGE("Unknown omx level: %d", omxLevel);
             return BAD_VALUE;
     }
     *pvLevel = level;
@@ -178,7 +178,7 @@
       mInputFrameData(NULL),
       mGroup(NULL) {
 
-    LOGI("Construct software AVCEncoder");
+    ALOGI("Construct software AVCEncoder");
 
     mHandle = new tagAVCHandle;
     memset(mHandle, 0, sizeof(tagAVCHandle));
@@ -214,7 +214,7 @@
     CHECK(meta->findInt32(kKeyColorFormat, &mVideoColorFormat));
     if (mVideoColorFormat != OMX_COLOR_FormatYUV420Planar) {
         if (mVideoColorFormat != OMX_COLOR_FormatYUV420SemiPlanar) {
-            LOGE("Color format %d is not supported", mVideoColorFormat);
+            ALOGE("Color format %d is not supported", mVideoColorFormat);
             return BAD_VALUE;
         }
         // Allocate spare buffer only when color conversion is needed.
@@ -226,7 +226,7 @@
 
     // XXX: Remove this restriction
     if (mVideoWidth % 16 != 0 || mVideoHeight % 16 != 0) {
-        LOGE("Video frame size %dx%d must be a multiple of 16",
+        ALOGE("Video frame size %dx%d must be a multiple of 16",
             mVideoWidth, mVideoHeight);
         return BAD_VALUE;
     }
@@ -336,14 +336,14 @@
     }
 
     if (mStarted) {
-        LOGW("Call start() when encoder already started");
+        ALOGW("Call start() when encoder already started");
         return OK;
     }
 
     AVCEnc_Status err;
     err = PVAVCEncInitialize(mHandle, mEncParams, NULL, NULL);
     if (err != AVCENC_SUCCESS) {
-        LOGE("Failed to initialize the encoder: %d", err);
+        ALOGE("Failed to initialize the encoder: %d", err);
         return UNKNOWN_ERROR;
     }
 
@@ -368,7 +368,7 @@
 status_t AVCEncoder::stop() {
     ALOGV("stop");
     if (!mStarted) {
-        LOGW("Call stop() when encoder has not started");
+        ALOGW("Call stop() when encoder has not started");
         return OK;
     }
 
@@ -461,7 +461,7 @@
                     *out = outputBuffer;
                     return OK;
                 default:
-                    LOGE("Nal type (%d) other than SPS/PPS is unexpected", type);
+                    ALOGE("Nal type (%d) other than SPS/PPS is unexpected", type);
                     return UNKNOWN_ERROR;
             }
         }
@@ -476,7 +476,7 @@
         status_t err = mSource->read(&mInputBuffer, options);
         if (err != OK) {
             if (err != ERROR_END_OF_STREAM) {
-                LOGE("Failed to read input video frame: %d", err);
+                ALOGE("Failed to read input video frame: %d", err);
             }
             outputBuffer->release();
             return err;
diff --git a/media/libstagefright/codecs/g711/dec/SoftG711.cpp b/media/libstagefright/codecs/g711/dec/SoftG711.cpp
index 15e2c26..32ef003 100644
--- a/media/libstagefright/codecs/g711/dec/SoftG711.cpp
+++ b/media/libstagefright/codecs/g711/dec/SoftG711.cpp
@@ -210,7 +210,7 @@
         }
 
         if (inHeader->nFilledLen > kMaxNumSamplesPerFrame) {
-            LOGE("input buffer too large (%ld).", inHeader->nFilledLen);
+            ALOGE("input buffer too large (%ld).", inHeader->nFilledLen);
 
             notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
             mSignalledError = true;
diff --git a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp
index bedfc58..a34a0ca 100644
--- a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp
+++ b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp
@@ -207,7 +207,7 @@
                     (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params;
 
             if (profileLevel->nPortIndex != 0) {  // Input port only
-                LOGE("Invalid port index: %ld", profileLevel->nPortIndex);
+                ALOGE("Invalid port index: %ld", profileLevel->nPortIndex);
                 return OMX_ErrorUnsupportedIndex;
             }
 
@@ -371,7 +371,7 @@
                     mHandle, vol_data, &vol_size, 1, mWidth, mHeight, mode);
 
             if (!success) {
-                LOGW("PVInitVideoDecoder failed. Unsupported content?");
+                ALOGW("PVInitVideoDecoder failed. Unsupported content?");
 
                 notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
                 mSignalledError = true;
@@ -430,7 +430,7 @@
                     mHandle, &bitstream, &timestamp, &tmp,
                     &useExtTimestamp,
                     outHeader->pBuffer) != PV_TRUE) {
-            LOGE("failed to decode video frame.");
+            ALOGE("failed to decode video frame.");
 
             notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
             mSignalledError = true;
diff --git a/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp b/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp
index 2e3d12d..d538603 100644
--- a/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp
+++ b/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp
@@ -43,16 +43,16 @@
         switch (omxProfile) {
             case OMX_VIDEO_H263ProfileBaseline:
                 if (omxLevel > OMX_VIDEO_H263Level45) {
-                    LOGE("Unsupported level (%d) for H263", omxLevel);
+                    ALOGE("Unsupported level (%d) for H263", omxLevel);
                     return BAD_VALUE;
                 } else {
-                    LOGW("PV does not support level configuration for H263");
+                    ALOGW("PV does not support level configuration for H263");
                     profileLevel = CORE_PROFILE_LEVEL2;
                     break;
                 }
                 break;
             default:
-                LOGE("Unsupported profile (%d) for H263", omxProfile);
+                ALOGE("Unsupported profile (%d) for H263", omxProfile);
                 return BAD_VALUE;
         }
     } else {  // MPEG4
@@ -72,7 +72,7 @@
                         profileLevel = SIMPLE_PROFILE_LEVEL3;
                         break;
                     default:
-                        LOGE("Unsupported level (%d) for MPEG4 simple profile",
+                        ALOGE("Unsupported level (%d) for MPEG4 simple profile",
                             omxLevel);
                         return BAD_VALUE;
                 }
@@ -89,7 +89,7 @@
                         profileLevel = SIMPLE_SCALABLE_PROFILE_LEVEL2;
                         break;
                     default:
-                        LOGE("Unsupported level (%d) for MPEG4 simple "
+                        ALOGE("Unsupported level (%d) for MPEG4 simple "
                              "scalable profile", omxLevel);
                         return BAD_VALUE;
                 }
@@ -103,7 +103,7 @@
                         profileLevel = CORE_PROFILE_LEVEL2;
                         break;
                     default:
-                        LOGE("Unsupported level (%d) for MPEG4 core "
+                        ALOGE("Unsupported level (%d) for MPEG4 core "
                              "profile", omxLevel);
                         return BAD_VALUE;
                 }
@@ -120,13 +120,13 @@
                         profileLevel = CORE_SCALABLE_PROFILE_LEVEL3;
                         break;
                     default:
-                        LOGE("Unsupported level (%d) for MPEG4 core "
+                        ALOGE("Unsupported level (%d) for MPEG4 core "
                              "scalable profile", omxLevel);
                         return BAD_VALUE;
                 }
                 break;
             default:
-                LOGE("Unsupported MPEG4 profile (%d)", omxProfile);
+                ALOGE("Unsupported MPEG4 profile (%d)", omxProfile);
                 return BAD_VALUE;
         }
     }
@@ -178,7 +178,7 @@
       mInputFrameData(NULL),
       mGroup(NULL) {
 
-    LOGI("Construct software M4vH263Encoder");
+    ALOGI("Construct software M4vH263Encoder");
 
     mHandle = new tagvideoEncControls;
     memset(mHandle, 0, sizeof(tagvideoEncControls));
@@ -207,7 +207,7 @@
     CHECK(meta->findInt32(kKeyColorFormat, &mVideoColorFormat));
     if (mVideoColorFormat != OMX_COLOR_FormatYUV420Planar) {
         if (mVideoColorFormat != OMX_COLOR_FormatYUV420SemiPlanar) {
-            LOGE("Color format %d is not supported", mVideoColorFormat);
+            ALOGE("Color format %d is not supported", mVideoColorFormat);
             return BAD_VALUE;
         }
         // Allocate spare buffer only when color conversion is needed.
@@ -219,7 +219,7 @@
 
     // XXX: Remove this restriction
     if (mVideoWidth % 16 != 0 || mVideoHeight % 16 != 0) {
-        LOGE("Video frame size %dx%d must be a multiple of 16",
+        ALOGE("Video frame size %dx%d must be a multiple of 16",
             mVideoWidth, mVideoHeight);
         return BAD_VALUE;
     }
@@ -227,7 +227,7 @@
     mEncParams = new tagvideoEncOptions;
     memset(mEncParams, 0, sizeof(tagvideoEncOptions));
     if (!PVGetDefaultEncOption(mEncParams, 0)) {
-        LOGE("Failed to get default encoding parameters");
+        ALOGE("Failed to get default encoding parameters");
         return BAD_VALUE;
     }
 
@@ -314,12 +314,12 @@
     }
 
     if (mStarted) {
-        LOGW("Call start() when encoder already started");
+        ALOGW("Call start() when encoder already started");
         return OK;
     }
 
     if (!PVInitVideoEncoder(mHandle, mEncParams)) {
-        LOGE("Failed to initialize the encoder");
+        ALOGE("Failed to initialize the encoder");
         return UNKNOWN_ERROR;
     }
 
@@ -341,7 +341,7 @@
 status_t M4vH263Encoder::stop() {
     ALOGV("stop");
     if (!mStarted) {
-        LOGW("Call stop() when encoder has not started");
+        ALOGW("Call stop() when encoder has not started");
         return OK;
     }
 
@@ -386,7 +386,7 @@
     // Output codec specific data
     if (mNumInputFrames < 0) {
         if (!PVGetVolHeader(mHandle, outPtr, &dataLength, 0)) {
-            LOGE("Failed to get VOL header");
+            ALOGE("Failed to get VOL header");
             return UNKNOWN_ERROR;
         }
         ALOGV("Output VOL header: %d bytes", dataLength);
@@ -401,7 +401,7 @@
     status_t err = mSource->read(&mInputBuffer, options);
     if (OK != err) {
         if (err != ERROR_END_OF_STREAM) {
-            LOGE("Failed to read from data source");
+            ALOGE("Failed to read from data source");
         }
         outputBuffer->release();
         return err;
@@ -460,7 +460,7 @@
     if (!PVEncodeVideoFrame(mHandle, &vin, &vout,
             &modTimeMs, outPtr, &dataLength, &nLayer) ||
         !PVGetHintTrack(mHandle, &hintTrack)) {
-        LOGE("Failed to encode frame or get hink track at frame %lld",
+        ALOGE("Failed to encode frame or get hink track at frame %lld",
             mNumInputFrames);
         outputBuffer->release();
         mInputBuffer->release();
diff --git a/media/libstagefright/codecs/mp3dec/SoftMP3.cpp b/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
index 43fb30a..ad55295 100644
--- a/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
+++ b/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
@@ -223,10 +223,10 @@
 
             if (decoderErr != NO_ENOUGH_MAIN_DATA_ERROR ||
                     mConfig->outputFrameSize == 0) {
-                LOGE("mp3 decoder returned error %d", decoderErr);
+                ALOGE("mp3 decoder returned error %d", decoderErr);
 
                 if (mConfig->outputFrameSize == 0) {
-                    LOGE("Output frame size is 0");
+                    ALOGE("Output frame size is 0");
                 }
 
                 notify(OMX_EventError, OMX_ErrorUndefined, decoderErr, NULL);
diff --git a/media/libstagefright/codecs/on2/dec/SoftVPX.cpp b/media/libstagefright/codecs/on2/dec/SoftVPX.cpp
index c5fe199..bf9ab3a 100644
--- a/media/libstagefright/codecs/on2/dec/SoftVPX.cpp
+++ b/media/libstagefright/codecs/on2/dec/SoftVPX.cpp
@@ -138,7 +138,7 @@
     cfg.threads = GetCPUCoreCount();
     if ((vpx_err = vpx_codec_dec_init(
                 (vpx_codec_ctx_t *)mCtx, &vpx_codec_vp8_dx_algo, &cfg, 0))) {
-        LOGE("on2 decoder failed to initialize. (%d)", vpx_err);
+        ALOGE("on2 decoder failed to initialize. (%d)", vpx_err);
         return UNKNOWN_ERROR;
     }
 
@@ -254,7 +254,7 @@
                     inHeader->nFilledLen,
                     NULL,
                     0)) {
-            LOGE("on2 decoder failed to decode frame.");
+            ALOGE("on2 decoder failed to decode frame.");
 
             notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
             return;
diff --git a/media/libstagefright/codecs/on2/h264dec/SoftAVC.cpp b/media/libstagefright/codecs/on2/h264dec/SoftAVC.cpp
index dede3ac..6c3f834 100644
--- a/media/libstagefright/codecs/on2/h264dec/SoftAVC.cpp
+++ b/media/libstagefright/codecs/on2/h264dec/SoftAVC.cpp
@@ -204,7 +204,7 @@
                     (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params;
 
             if (profileLevel->nPortIndex != kInputPortIndex) {
-                LOGE("Invalid port index: %ld", profileLevel->nPortIndex);
+                ALOGE("Invalid port index: %ld", profileLevel->nPortIndex);
                 return OMX_ErrorUnsupportedIndex;
             }
 
@@ -371,7 +371,7 @@
                 }
                 inPicture.dataLen = 0;
                 if (ret < 0) {
-                    LOGE("Decoder failed: %d", ret);
+                    ALOGE("Decoder failed: %d", ret);
 
                     notify(OMX_EventError, OMX_ErrorUndefined,
                            ERROR_MALFORMED, NULL);
diff --git a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
index 47dbd5c..ac88107 100644
--- a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
+++ b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
@@ -353,14 +353,14 @@
 
         int err = vorbis_dsp_synthesis(mState, &pack, 1);
         if (err != 0) {
-            LOGW("vorbis_dsp_synthesis returned %d", err);
+            ALOGW("vorbis_dsp_synthesis returned %d", err);
         } else {
             numFrames = vorbis_dsp_pcmout(
                     mState, (int16_t *)outHeader->pBuffer,
                     kMaxNumSamplesPerBuffer);
 
             if (numFrames < 0) {
-                LOGE("vorbis_dsp_pcmout returned %d", numFrames);
+                ALOGE("vorbis_dsp_pcmout returned %d", numFrames);
                 numFrames = 0;
             }
         }
diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
index 3246021..e892f92 100644
--- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp
+++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
@@ -135,7 +135,7 @@
     ANativeWindowBuffer *buf;
     int err;
     if ((err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf)) != 0) {
-        LOGW("Surface::dequeueBuffer returned error %d", err);
+        ALOGW("Surface::dequeueBuffer returned error %d", err);
         return;
     }
 
@@ -225,7 +225,7 @@
     CHECK_EQ(0, mapper.unlock(buf->handle));
 
     if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf)) != 0) {
-        LOGW("Surface::queueBuffer returned error %d", err);
+        ALOGW("Surface::queueBuffer returned error %d", err);
     }
     buf = NULL;
 }
diff --git a/media/libstagefright/foundation/AHierarchicalStateMachine.cpp b/media/libstagefright/foundation/AHierarchicalStateMachine.cpp
index 3b3f786..40c5a3c 100644
--- a/media/libstagefright/foundation/AHierarchicalStateMachine.cpp
+++ b/media/libstagefright/foundation/AHierarchicalStateMachine.cpp
@@ -63,7 +63,7 @@
         return;
     }
 
-    LOGW("Warning message %s unhandled in root state.",
+    ALOGW("Warning message %s unhandled in root state.",
          msg->debugString().c_str());
 }
 
diff --git a/media/libstagefright/foundation/ALooperRoster.cpp b/media/libstagefright/foundation/ALooperRoster.cpp
index e399f2f..dff931d 100644
--- a/media/libstagefright/foundation/ALooperRoster.cpp
+++ b/media/libstagefright/foundation/ALooperRoster.cpp
@@ -82,7 +82,7 @@
     ssize_t index = mHandlers.indexOfKey(msg->target());
 
     if (index < 0) {
-        LOGW("failed to post message. Target handler not registered.");
+        ALOGW("failed to post message. Target handler not registered.");
         return -ENOENT;
     }
 
@@ -91,7 +91,7 @@
     sp<ALooper> looper = info.mLooper.promote();
 
     if (looper == NULL) {
-        LOGW("failed to post message. "
+        ALOGW("failed to post message. "
              "Target handler %d still registered, but object gone.",
              msg->target());
 
@@ -113,7 +113,7 @@
         ssize_t index = mHandlers.indexOfKey(msg->target());
 
         if (index < 0) {
-            LOGW("failed to deliver message. Target handler not registered.");
+            ALOGW("failed to deliver message. Target handler not registered.");
             return;
         }
 
@@ -121,7 +121,7 @@
         handler = info.mHandler.promote();
 
         if (handler == NULL) {
-            LOGW("failed to deliver message. "
+            ALOGW("failed to deliver message. "
                  "Target handler %d registered, but object gone.",
                  msg->target());
 
diff --git a/media/libstagefright/foundation/AMessage.cpp b/media/libstagefright/foundation/AMessage.cpp
index f039bc1..0a6776e 100644
--- a/media/libstagefright/foundation/AMessage.cpp
+++ b/media/libstagefright/foundation/AMessage.cpp
@@ -471,7 +471,7 @@
 
             default:
             {
-                LOGE("This type of object cannot cross process boundaries.");
+                ALOGE("This type of object cannot cross process boundaries.");
                 TRESPASS();
             }
         }
@@ -535,7 +535,7 @@
 
             default:
             {
-                LOGE("This type of object cannot cross process boundaries.");
+                ALOGE("This type of object cannot cross process boundaries.");
                 TRESPASS();
             }
         }
diff --git a/media/libstagefright/foundation/hexdump.cpp b/media/libstagefright/foundation/hexdump.cpp
index 9f6bf9e..16c1ca5 100644
--- a/media/libstagefright/foundation/hexdump.cpp
+++ b/media/libstagefright/foundation/hexdump.cpp
@@ -67,7 +67,7 @@
             }
         }
 
-        LOGI("%s", line.c_str());
+        ALOGI("%s", line.c_str());
 
         offset += 16;
     }
diff --git a/media/libstagefright/httplive/LiveDataSource.cpp b/media/libstagefright/httplive/LiveDataSource.cpp
index 5f5c6d4..7560642 100644
--- a/media/libstagefright/httplive/LiveDataSource.cpp
+++ b/media/libstagefright/httplive/LiveDataSource.cpp
@@ -59,7 +59,7 @@
     Mutex::Autolock autoLock(mLock);
 
     if (offset != mOffset) {
-        LOGE("Attempt at reading non-sequentially from LiveDataSource.");
+        ALOGE("Attempt at reading non-sequentially from LiveDataSource.");
         return -EPIPE;
     }
 
@@ -89,7 +89,7 @@
 
 ssize_t LiveDataSource::readAt_l(off64_t offset, void *data, size_t size) {
     if (offset != mOffset) {
-        LOGE("Attempt at reading non-sequentially from LiveDataSource.");
+        ALOGE("Attempt at reading non-sequentially from LiveDataSource.");
         return -EPIPE;
     }
 
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index 6f4b875..0cddd2e7 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -168,9 +168,9 @@
     }
 
     if (!(mFlags & kFlagIncognito)) {
-        LOGI("onConnect '%s'", url.c_str());
+        ALOGI("onConnect '%s'", url.c_str());
     } else {
-        LOGI("onConnect <URL suppressed>");
+        ALOGI("onConnect <URL suppressed>");
     }
 
     mMasterURL = url;
@@ -179,7 +179,7 @@
     sp<M3UParser> playlist = fetchPlaylist(url.c_str(), &dummy);
 
     if (playlist == NULL) {
-        LOGE("unable to fetch master playlist '%s'.", url.c_str());
+        ALOGE("unable to fetch master playlist '%s'.", url.c_str());
 
         mDataSource->queueEOS(ERROR_IO);
         return;
@@ -207,7 +207,7 @@
 }
 
 void LiveSession::onDisconnect() {
-    LOGI("onDisconnect");
+    ALOGI("onDisconnect");
 
     mDataSource->queueEOS(ERROR_END_OF_STREAM);
 
@@ -360,7 +360,7 @@
         new M3UParser(url, buffer->data(), buffer->size());
 
     if (playlist->initCheck() != OK) {
-        LOGE("failed to parse .m3u8 playlist");
+        ALOGE("failed to parse .m3u8 playlist");
 
         return NULL;
     }
@@ -531,7 +531,7 @@
                 // We succeeded in fetching the playlist, but it was
                 // unchanged from the last time we tried.
             } else {
-                LOGE("failed to load playlist at url '%s'", url.c_str());
+                ALOGE("failed to load playlist at url '%s'", url.c_str());
                 mDataSource->queueEOS(ERROR_IO);
                 return;
             }
@@ -596,7 +596,7 @@
                 int32_t newSeqNumber = firstSeqNumberInPlaylist + index;
 
                 if (newSeqNumber != mSeqNumber) {
-                    LOGI("seeking to seq no %d", newSeqNumber);
+                    ALOGI("seeking to seq no %d", newSeqNumber);
 
                     mSeqNumber = newSeqNumber;
 
@@ -633,7 +633,7 @@
         if (mPrevBandwidthIndex != (ssize_t)bandwidthIndex) {
             // Go back to the previous bandwidth.
 
-            LOGI("new bandwidth does not have the sequence number "
+            ALOGI("new bandwidth does not have the sequence number "
                  "we're looking for, switching back to previous bandwidth");
 
             mLastPlaylistFetchTimeUs = -1;
@@ -653,13 +653,13 @@
             // we've missed the boat, let's start from the lowest sequence
             // number available and signal a discontinuity.
 
-            LOGI("We've missed the boat, restarting playback.");
+            ALOGI("We've missed the boat, restarting playback.");
             mSeqNumber = lastSeqNumberInPlaylist;
             explicitDiscontinuity = true;
 
             // fall through
         } else {
-            LOGE("Cannot find sequence number %d in playlist "
+            ALOGE("Cannot find sequence number %d in playlist "
                  "(contains %d - %d)",
                  mSeqNumber, firstSeqNumberInPlaylist,
                  firstSeqNumberInPlaylist + mPlaylist->size() - 1);
@@ -693,7 +693,7 @@
     sp<ABuffer> buffer;
     status_t err = fetchFile(uri.c_str(), &buffer, range_offset, range_length);
     if (err != OK) {
-        LOGE("failed to fetch .ts segment at url '%s'", uri.c_str());
+        ALOGE("failed to fetch .ts segment at url '%s'", uri.c_str());
         mDataSource->queueEOS(err);
         return;
     }
@@ -703,7 +703,7 @@
     err = decryptBuffer(mSeqNumber - firstSeqNumberInPlaylist, buffer);
 
     if (err != OK) {
-        LOGE("decryptBuffer failed w/ error %d", err);
+        ALOGE("decryptBuffer failed w/ error %d", err);
 
         mDataSource->queueEOS(err);
         return;
@@ -712,7 +712,7 @@
     if (buffer->size() == 0 || buffer->data()[0] != 0x47) {
         // Not a transport stream???
 
-        LOGE("This doesn't look like a transport stream...");
+        ALOGE("This doesn't look like a transport stream...");
 
         mBandwidthItems.removeAt(bandwidthIndex);
 
@@ -721,7 +721,7 @@
             return;
         }
 
-        LOGI("Retrying with a different bandwidth stream.");
+        ALOGI("Retrying with a different bandwidth stream.");
 
         mLastPlaylistFetchTimeUs = -1;
         bandwidthIndex = getBandwidthIndex();
@@ -744,7 +744,7 @@
     if (seekDiscontinuity || explicitDiscontinuity || bandwidthChanged) {
         // Signal discontinuity.
 
-        LOGI("queueing discontinuity (seek=%d, explicit=%d, bandwidthChanged=%d)",
+        ALOGI("queueing discontinuity (seek=%d, explicit=%d, bandwidthChanged=%d)",
              seekDiscontinuity, explicitDiscontinuity, bandwidthChanged);
 
         sp<ABuffer> tmp = new ABuffer(188);
@@ -796,13 +796,13 @@
     if (method == "NONE") {
         return OK;
     } else if (!(method == "AES-128")) {
-        LOGE("Unsupported cipher method '%s'", method.c_str());
+        ALOGE("Unsupported cipher method '%s'", method.c_str());
         return ERROR_UNSUPPORTED;
     }
 
     AString keyURI;
     if (!itemMeta->findString("cipher-uri", &keyURI)) {
-        LOGE("Missing key uri");
+        ALOGE("Missing key uri");
         return ERROR_MALFORMED;
     }
 
@@ -844,7 +844,7 @@
         }
 
         if (err != OK) {
-            LOGE("failed to fetch cipher key from '%s'.", keyURI.c_str());
+            ALOGE("failed to fetch cipher key from '%s'.", keyURI.c_str());
             return ERROR_IO;
         }
 
@@ -853,7 +853,7 @@
 
     AES_KEY aes_key;
     if (AES_set_decrypt_key(key->data(), 128, &aes_key) != 0) {
-        LOGE("failed to set AES decryption key.");
+        ALOGE("failed to set AES decryption key.");
         return UNKNOWN_ERROR;
     }
 
@@ -863,7 +863,7 @@
     if (itemMeta->findString("cipher-iv", &iv)) {
         if ((!iv.startsWith("0x") && !iv.startsWith("0X"))
                 || iv.size() != 16 * 2 + 2) {
-            LOGE("malformed cipher IV '%s'.", iv.c_str());
+            ALOGE("malformed cipher IV '%s'.", iv.c_str());
             return ERROR_MALFORMED;
         }
 
@@ -872,7 +872,7 @@
             char c1 = tolower(iv.c_str()[2 + 2 * i]);
             char c2 = tolower(iv.c_str()[3 + 2 * i]);
             if (!isxdigit(c1) || !isxdigit(c2)) {
-                LOGE("malformed cipher IV '%s'.", iv.c_str());
+                ALOGE("malformed cipher IV '%s'.", iv.c_str());
                 return ERROR_MALFORMED;
             }
             uint8_t nibble1 = isdigit(c1) ? c1 - '0' : c1 - 'a' + 10;
diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp
index a50970e..7d3cf05 100644
--- a/media/libstagefright/httplive/M3UParser.cpp
+++ b/media/libstagefright/httplive/M3UParser.cpp
@@ -169,7 +169,7 @@
             line.setTo(&data[offset], offsetLF - offset);
         }
 
-        // LOGI("#%s#", line.c_str());
+        // ALOGI("#%s#", line.c_str());
 
         if (line.empty()) {
             offset = offsetLF + 1;
@@ -451,7 +451,7 @@
                 if (MakeURL(baseURI.c_str(), val.c_str(), &absURI)) {
                     val = absURI;
                 } else {
-                    LOGE("failed to make absolute url for '%s'.",
+                    ALOGE("failed to make absolute url for '%s'.",
                          val.c_str());
                 }
             }
diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp
index 943a937..6dde9d8 100644
--- a/media/libstagefright/id3/ID3.cpp
+++ b/media/libstagefright/id3/ID3.cpp
@@ -129,7 +129,7 @@
     }
 
     if (size > kMaxMetadataSize) {
-        LOGE("skipping huge ID3 metadata of size %d", size);
+        ALOGE("skipping huge ID3 metadata of size %d", size);
         return false;
     }
 
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp
index 474c794..4fbf47e 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.cpp
+++ b/media/libstagefright/matroska/MatroskaExtractor.cpp
@@ -245,7 +245,7 @@
             if (res < 0) {
                 // I/O error
 
-                LOGE("Cluster::Parse returned result %ld", res);
+                ALOGE("Cluster::Parse returned result %ld", res);
 
                 mCluster = NULL;
                 break;
@@ -563,7 +563,7 @@
 
 #if 0
     const mkvparser::SegmentInfo *info = mSegment->GetInfo();
-    LOGI("muxing app: %s, writing app: %s",
+    ALOGI("muxing app: %s, writing app: %s",
          info->GetMuxingAppAsUTF8(),
          info->GetWritingAppAsUTF8());
 #endif
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index da911e4..3f4de1f 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -282,7 +282,7 @@
         ssize_t index = mStreams.indexOfKey(info.mPID);
 
         if (index >= 0 && mStreams.editValueAt(index)->type() != info.mType) {
-            LOGI("uh oh. stream PIDs have changed.");
+            ALOGI("uh oh. stream PIDs have changed.");
             PIDsChanged = true;
             break;
         }
@@ -290,18 +290,18 @@
 
     if (PIDsChanged) {
 #if 0
-        LOGI("before:");
+        ALOGI("before:");
         for (size_t i = 0; i < mStreams.size(); ++i) {
             sp<Stream> stream = mStreams.editValueAt(i);
 
-            LOGI("PID 0x%08x => type 0x%02x", stream->pid(), stream->type());
+            ALOGI("PID 0x%08x => type 0x%02x", stream->pid(), stream->type());
         }
 
-        LOGI("after:");
+        ALOGI("after:");
         for (size_t i = 0; i < infos.size(); ++i) {
             StreamInfo &info = infos.editItemAt(i);
 
-            LOGI("PID 0x%08x => type 0x%02x", info.mPID, info.mType);
+            ALOGI("PID 0x%08x => type 0x%02x", info.mPID, info.mType);
         }
 #endif
 
@@ -340,7 +340,7 @@
         }
 
         if (!success) {
-            LOGI("Stream PIDs changed and we cannot recover.");
+            ALOGI("Stream PIDs changed and we cannot recover.");
             return ERROR_MALFORMED;
         }
     }
@@ -475,7 +475,7 @@
         // Increment in multiples of 64K.
         neededSize = (neededSize + 65535) & ~65535;
 
-        LOGI("resizing buffer to %d bytes", neededSize);
+        ALOGI("resizing buffer to %d bytes", neededSize);
 
         sp<ABuffer> newBuffer = new ABuffer(neededSize);
         memcpy(newBuffer->data(), mBuffer->data(), mBuffer->size());
@@ -634,7 +634,7 @@
             CHECK_EQ(br->getBits(1), 1u);
 
             ALOGV("PTS = %llu", PTS);
-            // LOGI("PTS = %.2f secs", PTS / 90000.0f);
+            // ALOGI("PTS = %.2f secs", PTS / 90000.0f);
 
             optional_bytes_remaining -= 5;
 
@@ -697,7 +697,7 @@
                 PES_packet_length - 3 - PES_header_data_length;
 
             if (br->numBitsLeft() < dataLength * 8) {
-                LOGE("PES packet does not carry enough data to contain "
+                ALOGE("PES packet does not carry enough data to contain "
                      "payload. (numBitsLeft = %d, required = %d)",
                      br->numBitsLeft(), dataLength * 8);
 
@@ -968,7 +968,7 @@
     unsigned continuity_counter = br->getBits(4);
     ALOGV("continuity_counter = %u", continuity_counter);
 
-    // LOGI("PID = 0x%04x, continuity_counter = %u", PID, continuity_counter);
+    // ALOGI("PID = 0x%04x, continuity_counter = %u", PID, continuity_counter);
 
     if (adaptation_field_control == 2 || adaptation_field_control == 3) {
         parseAdaptationField(br);
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp
index edb4232..7fd99a8 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.cpp
+++ b/media/libstagefright/mpeg2ts/ESQueue.cpp
@@ -144,7 +144,7 @@
                 }
 
                 if (startOffset > 0) {
-                    LOGI("found something resembling an H.264/MPEG syncword at "
+                    ALOGI("found something resembling an H.264/MPEG syncword at "
                          "offset %ld",
                          startOffset);
                 }
@@ -177,7 +177,7 @@
                 }
 
                 if (startOffset > 0) {
-                    LOGI("found something resembling an H.264/MPEG syncword at "
+                    ALOGI("found something resembling an H.264/MPEG syncword at "
                          "offset %ld",
                          startOffset);
                 }
@@ -210,7 +210,7 @@
                 }
 
                 if (startOffset > 0) {
-                    LOGI("found something resembling an AAC syncword at offset %ld",
+                    ALOGI("found something resembling an AAC syncword at offset %ld",
                          startOffset);
                 }
 
@@ -237,7 +237,7 @@
                 }
 
                 if (startOffset > 0) {
-                    LOGI("found something resembling an MPEG audio "
+                    ALOGI("found something resembling an MPEG audio "
                          "syncword at offset %ld",
                          startOffset);
                 }
@@ -280,7 +280,7 @@
 
 #if 0
     if (mMode == AAC) {
-        LOGI("size = %d, timeUs = %.2f secs", size, timeUs / 1E6);
+        ALOGI("size = %d, timeUs = %.2f secs", size, timeUs / 1E6);
         hexdump(data, size);
     }
 #endif
@@ -337,7 +337,7 @@
             CHECK(mFormat->findInt32(kKeySampleRate, &sampleRate));
             CHECK(mFormat->findInt32(kKeyChannelCount, &numChannels));
 
-            LOGI("found AAC codec config (%d Hz, %d channels)",
+            ALOGI("found AAC codec config (%d Hz, %d channels)",
                  sampleRate, numChannels);
         } else {
             // profile_ObjectType, sampling_frequency_index, private_bits,
@@ -408,7 +408,7 @@
     if (timeUs >= 0) {
         accessUnit->meta()->setInt64("timeUs", timeUs);
     } else {
-        LOGW("no time for AAC access unit");
+        ALOGW("no time for AAC access unit");
     }
 
     return accessUnit;
@@ -714,7 +714,7 @@
                 mFormat->setInt32(kKeyWidth, width);
                 mFormat->setInt32(kKeyHeight, height);
 
-                LOGI("found MPEG2 video codec config (%d x %d)", width, height);
+                ALOGI("found MPEG2 video codec config (%d x %d)", width, height);
 
                 sp<ABuffer> csd = new ABuffer(offset);
                 memcpy(csd->data(), data, offset);
@@ -880,7 +880,7 @@
                     mFormat->setInt32(kKeyWidth, width);
                     mFormat->setInt32(kKeyHeight, height);
 
-                    LOGI("found MPEG4 video codec config (%d x %d)",
+                    ALOGI("found MPEG4 video codec config (%d x %d)",
                          width, height);
 
                     sp<ABuffer> csd = new ABuffer(offset);
diff --git a/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp
index df30a9c..dd714c9 100644
--- a/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp
+++ b/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp
@@ -315,7 +315,7 @@
             unsigned descriptor_tag = br.getBits(8);
             unsigned descriptor_length = br.getBits(8);
 
-            LOGI("found descriptor tag 0x%02x of length %u",
+            ALOGI("found descriptor tag 0x%02x of length %u",
                  descriptor_tag, descriptor_length);
 
             if (offset + 2 + descriptor_length > program_stream_info_length) {
@@ -338,7 +338,7 @@
             unsigned stream_type = br.getBits(8);
             unsigned elementary_stream_id = br.getBits(8);
 
-            LOGI("elementary stream id 0x%02x has stream type 0x%02x",
+            ALOGI("elementary stream id 0x%02x has stream type 0x%02x",
                  elementary_stream_id, stream_type);
 
             mStreamTypeByESID.add(elementary_stream_id, stream_type);
@@ -409,7 +409,7 @@
             CHECK_EQ(br.getBits(1), 1u);
 
             ALOGV("PTS = %llu", PTS);
-            // LOGI("PTS = %.2f secs", PTS / 90000.0f);
+            // ALOGI("PTS = %.2f secs", PTS / 90000.0f);
 
             optional_bytes_remaining -= 5;
 
@@ -471,7 +471,7 @@
             PES_packet_length - 3 - PES_header_data_length;
 
         if (br.numBitsLeft() < dataLength * 8) {
-            LOGE("PES packet does not carry enough data to contain "
+            ALOGE("PES packet does not carry enough data to contain "
                  "payload. (numBitsLeft = %d, required = %d)",
                  br.numBitsLeft(), dataLength * 8);
 
@@ -568,7 +568,7 @@
     if (supported) {
         mQueue = new ElementaryStreamQueue(mode);
     } else {
-        LOGI("unsupported stream ID 0x%02x", stream_id);
+        ALOGI("unsupported stream ID 0x%02x", stream_id);
     }
 }
 
diff --git a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp
index 17cf45a..03033f5 100644
--- a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp
+++ b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp
@@ -199,7 +199,7 @@
         }
     }
 
-    LOGI("haveAudio=%d, haveVideo=%d", haveAudio, haveVideo);
+    ALOGI("haveAudio=%d, haveVideo=%d", haveAudio, haveVideo);
 }
 
 status_t MPEG2TSExtractor::feedMore() {
diff --git a/media/libstagefright/omx/OMXMaster.cpp b/media/libstagefright/omx/OMXMaster.cpp
index c8278ab..d698939 100644
--- a/media/libstagefright/omx/OMXMaster.cpp
+++ b/media/libstagefright/omx/OMXMaster.cpp
@@ -81,7 +81,7 @@
         String8 name8(name);
 
         if (mPluginByComponentName.indexOfKey(name8) >= 0) {
-            LOGE("A component of name '%s' already exists, ignoring this one.",
+            ALOGE("A component of name '%s' already exists, ignoring this one.",
                  name8.string());
 
             continue;
@@ -91,7 +91,7 @@
     }
 
     if (err != OMX_ErrorNoMore) {
-        LOGE("OMX plugin failed w/ error 0x%08x after registering %d "
+        ALOGE("OMX plugin failed w/ error 0x%08x after registering %d "
              "components", err, mPluginByComponentName.size());
     }
 }
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp
index 802c429..8938e33 100644
--- a/media/libstagefright/omx/OMXNodeInstance.cpp
+++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -150,7 +150,7 @@
                    && state != OMX_StateIdle
                    && state != OMX_StateInvalid) {
                 if (++iteration > kMaxNumIterations) {
-                    LOGE("component failed to enter Idle state, aborting.");
+                    ALOGE("component failed to enter Idle state, aborting.");
                     state = OMX_StateInvalid;
                     break;
                 }
@@ -179,7 +179,7 @@
                    && state != OMX_StateLoaded
                    && state != OMX_StateInvalid) {
                 if (++iteration > kMaxNumIterations) {
-                    LOGE("component failed to enter Loaded state, aborting.");
+                    ALOGE("component failed to enter Loaded state, aborting.");
                     state = OMX_StateInvalid;
                     break;
                 }
@@ -209,7 +209,7 @@
     mHandle = NULL;
 
     if (err != OMX_ErrorNone) {
-        LOGE("FreeHandle FAILED with error 0x%08x.", err);
+        ALOGE("FreeHandle FAILED with error 0x%08x.", err);
     }
 
     mOwner->invalidateNodeID(mNodeID);
@@ -285,7 +285,7 @@
             &index);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_GetExtensionIndex failed");
+        ALOGE("OMX_GetExtensionIndex failed");
 
         return StatusFromOMXError(err);
     }
@@ -302,7 +302,7 @@
     err = OMX_SetParameter(mHandle, index, &params);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_EnableAndroidNativeBuffers failed with error %d (0x%08x)",
+        ALOGE("OMX_EnableAndroidNativeBuffers failed with error %d (0x%08x)",
                 err, err);
 
         return UNKNOWN_ERROR;
@@ -323,7 +323,7 @@
             &index);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_GetExtensionIndex failed");
+        ALOGE("OMX_GetExtensionIndex failed");
 
         return StatusFromOMXError(err);
     }
@@ -340,7 +340,7 @@
     err = OMX_GetParameter(mHandle, index, &params);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_GetAndroidNativeBufferUsage failed with error %d (0x%08x)",
+        ALOGE("OMX_GetAndroidNativeBufferUsage failed with error %d (0x%08x)",
                 err, err);
         return UNKNOWN_ERROR;
     }
@@ -361,7 +361,7 @@
 
     OMX_ERRORTYPE err = OMX_GetExtensionIndex(mHandle, name, &index);
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_GetExtensionIndex %s failed", name);
+        ALOGE("OMX_GetExtensionIndex %s failed", name);
         return StatusFromOMXError(err);
     }
 
@@ -375,7 +375,7 @@
     params.nPortIndex = portIndex;
     params.bStoreMetaData = enable;
     if ((err = OMX_SetParameter(mHandle, index, &params)) != OMX_ErrorNone) {
-        LOGE("OMX_SetParameter() failed for StoreMetaDataInBuffers: 0x%08x", err);
+        ALOGE("OMX_SetParameter() failed for StoreMetaDataInBuffers: 0x%08x", err);
         return UNKNOWN_ERROR;
     }
     return err;
@@ -395,7 +395,7 @@
             params->size(), static_cast<OMX_U8 *>(params->pointer()));
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_UseBuffer failed with error %d (0x%08x)", err, err);
+        ALOGE("OMX_UseBuffer failed with error %d (0x%08x)", err, err);
 
         delete buffer_meta;
         buffer_meta = NULL;
@@ -429,7 +429,7 @@
     OMX_ERRORTYPE err = OMX_GetParameter(mHandle, OMX_IndexParamPortDefinition, &def);
     if (err != OMX_ErrorNone)
     {
-        LOGE("%s::%d:Error getting OMX_IndexParamPortDefinition", __FUNCTION__, __LINE__);
+        ALOGE("%s::%d:Error getting OMX_IndexParamPortDefinition", __FUNCTION__, __LINE__);
         return err;
     }
 
@@ -448,7 +448,7 @@
             bufferHandle);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_UseBuffer failed with error %d (0x%08x)", err, err);
+        ALOGE("OMX_UseBuffer failed with error %d (0x%08x)", err, err);
         delete bufferMeta;
         bufferMeta = NULL;
         *buffer = 0;
@@ -488,7 +488,7 @@
             &index);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_GetExtensionIndex failed");
+        ALOGE("OMX_GetExtensionIndex failed");
 
         return StatusFromOMXError(err);
     }
@@ -510,7 +510,7 @@
     err = OMX_SetParameter(mHandle, index, &params);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_UseAndroidNativeBuffer failed with error %d (0x%08x)", err,
+        ALOGE("OMX_UseAndroidNativeBuffer failed with error %d (0x%08x)", err,
                 err);
 
         delete bufferMeta;
@@ -543,7 +543,7 @@
             mHandle, &header, portIndex, buffer_meta, size);
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_AllocateBuffer failed with error %d (0x%08x)", err, err);
+        ALOGE("OMX_AllocateBuffer failed with error %d (0x%08x)", err, err);
 
         delete buffer_meta;
         buffer_meta = NULL;
@@ -576,7 +576,7 @@
             mHandle, &header, portIndex, buffer_meta, params->size());
 
     if (err != OMX_ErrorNone) {
-        LOGE("OMX_AllocateBuffer failed with error %d (0x%08x)", err, err);
+        ALOGE("OMX_AllocateBuffer failed with error %d (0x%08x)", err, err);
 
         delete buffer_meta;
         buffer_meta = NULL;
@@ -672,7 +672,7 @@
 }
 
 void OMXNodeInstance::onObserverDied(OMXMaster *master) {
-    LOGE("!!! Observer died. Quickly, do something, ... anything...");
+    ALOGE("!!! Observer died. Quickly, do something, ... anything...");
 
     // Try to force shutdown of the node and hope for the best.
     freeNode(master);
@@ -742,7 +742,7 @@
     }
 
     if (!found) {
-        LOGW("Attempt to remove an active buffer we know nothing about...");
+        ALOGW("Attempt to remove an active buffer we know nothing about...");
     }
 }
 
diff --git a/media/libstagefright/omx/SoftOMXPlugin.cpp b/media/libstagefright/omx/SoftOMXPlugin.cpp
index 8aeb763..da3ae42 100644
--- a/media/libstagefright/omx/SoftOMXPlugin.cpp
+++ b/media/libstagefright/omx/SoftOMXPlugin.cpp
@@ -72,7 +72,7 @@
         void *libHandle = dlopen(libName.c_str(), RTLD_NOW);
 
         if (libHandle == NULL) {
-            LOGE("unable to dlopen %s", libName.c_str());
+            ALOGE("unable to dlopen %s", libName.c_str());
 
             return OMX_ErrorComponentNotFound;
         }
diff --git a/media/libstagefright/omx/tests/OMXHarness.cpp b/media/libstagefright/omx/tests/OMXHarness.cpp
index d4354db..8faf544 100644
--- a/media/libstagefright/omx/tests/OMXHarness.cpp
+++ b/media/libstagefright/omx/tests/OMXHarness.cpp
@@ -174,7 +174,7 @@
 
 #define EXPECT(condition, info) \
     if (!(condition)) {         \
-        LOGE(info); printf("\n  * " info "\n"); return UNKNOWN_ERROR; \
+        ALOGE(info); printf("\n  * " info "\n"); return UNKNOWN_ERROR; \
     }
 
 #define EXPECT_SUCCESS(err, info) \
@@ -571,7 +571,7 @@
     const char *mime = GetMimeFromComponentRole(componentRole);
 
     if (!mime) {
-        LOGI("Cannot perform seek test with this componentRole (%s)",
+        ALOGI("Cannot perform seek test with this componentRole (%s)",
              componentRole);
 
         return OK;
@@ -597,7 +597,7 @@
     int64_t durationUs;
     CHECK(source->getFormat()->findInt64(kKeyDuration, &durationUs));
 
-    LOGI("stream duration is %lld us (%.2f secs)",
+    ALOGI("stream duration is %lld us (%.2f secs)",
          durationUs, durationUs / 1E6);
 
     static const int32_t kNumIterations = 5000;
@@ -617,19 +617,19 @@
 
             requestedSeekTimeUs = -1;
 
-            LOGI("requesting linear read");
+            ALOGI("requesting linear read");
         } else {
             if (i == 0 || r < 0.55) {
                 // 5% chance of seeking beyond end of stream.
 
                 requestedSeekTimeUs = durationUs;
 
-                LOGI("requesting seek beyond EOF");
+                ALOGI("requesting seek beyond EOF");
             } else {
                 requestedSeekTimeUs =
                     (int64_t)(uniform_rand() * durationUs);
 
-                LOGI("requesting seek to %lld us (%.2f secs)",
+                ALOGI("requesting seek to %lld us (%.2f secs)",
                      requestedSeekTimeUs, requestedSeekTimeUs / 1E6);
             }
 
@@ -649,7 +649,7 @@
                 buffer = NULL;
             }
 
-            LOGI("nearest keyframe is at %lld us (%.2f secs)",
+            ALOGI("nearest keyframe is at %lld us (%.2f secs)",
                  actualSeekTimeUs, actualSeekTimeUs / 1E6);
         }
 
@@ -733,7 +733,7 @@
 status_t Harness::test(
         const char *componentName, const char *componentRole) {
     printf("testing %s [%s] ... ", componentName, componentRole);
-    LOGI("testing %s [%s].", componentName, componentRole);
+    ALOGI("testing %s [%s].", componentName, componentRole);
 
     status_t err1 = testStateTransitions(componentName, componentRole);
     status_t err2 = testSeek(componentName, componentRole);
diff --git a/media/libstagefright/rtsp/AMPEG4AudioAssembler.cpp b/media/libstagefright/rtsp/AMPEG4AudioAssembler.cpp
index 11d9c22..b0c7007 100644
--- a/media/libstagefright/rtsp/AMPEG4AudioAssembler.cpp
+++ b/media/libstagefright/rtsp/AMPEG4AudioAssembler.cpp
@@ -196,7 +196,7 @@
 
         unsigned syncExtensionType = bits->getBits(11);
         if (syncExtensionType == 0x2b7) {
-            LOGI("found syncExtension");
+            ALOGI("found syncExtension");
 
             CHECK_EQ(parseAudioObjectType(bits, &extensionAudioObjectType),
                      (status_t)OK);
@@ -217,7 +217,7 @@
                 // Apparently an extension is always considered an even
                 // multiple of 8 bits long.
 
-                LOGI("Skipping %d bits after sync extension",
+                ALOGI("Skipping %d bits after sync extension",
                      8 - (numBitsInExtension & 7));
 
                 bits->skipBits(8 - (numBitsInExtension & 7));
@@ -424,7 +424,7 @@
     }
 
     if (offset < buffer->size()) {
-        LOGI("ignoring %d bytes of trailing data", buffer->size() - offset);
+        ALOGI("ignoring %d bytes of trailing data", buffer->size() - offset);
     }
     CHECK_LE(offset, buffer->size());
 
diff --git a/media/libstagefright/rtsp/APacketSource.cpp b/media/libstagefright/rtsp/APacketSource.cpp
index 3f4cdb5..6cf1301 100644
--- a/media/libstagefright/rtsp/APacketSource.cpp
+++ b/media/libstagefright/rtsp/APacketSource.cpp
@@ -193,7 +193,7 @@
 
         if (i == 0) {
             FindAVCDimensions(nal, width, height);
-            LOGI("dimensions %dx%d", *width, *height);
+            ALOGI("dimensions %dx%d", *width, *height);
         }
     }
 
@@ -371,7 +371,7 @@
         return NULL;
     }
 
-    LOGI("VOL dimensions = %dx%d", *width, *height);
+    ALOGI("VOL dimensions = %dx%d", *width, *height);
 
     size_t len1 = config->size() + GetSizeWidth(config->size()) + 1;
     size_t len2 = len1 + GetSizeWidth(len1) + 1 + 13;
diff --git a/media/libstagefright/rtsp/ARTPConnection.cpp b/media/libstagefright/rtsp/ARTPConnection.cpp
index c5d8740..8c9dd8d 100644
--- a/media/libstagefright/rtsp/ARTPConnection.cpp
+++ b/media/libstagefright/rtsp/ARTPConnection.cpp
@@ -294,7 +294,7 @@
             if (err == -ECONNRESET) {
                 // socket failure, this stream is dead, Jim.
 
-                LOGW("failed to receive RTP/RTCP datagram.");
+                ALOGW("failed to receive RTP/RTCP datagram.");
                 it = mStreams.erase(it);
                 continue;
             }
@@ -347,7 +347,7 @@
                 } while (n < 0 && errno == EINTR);
 
                 if (n <= 0) {
-                    LOGW("failed to send RTCP receiver report (%s).",
+                    ALOGW("failed to send RTCP receiver report (%s).",
                          n == 0 ? "connection gone" : strerror(errno));
 
                     it = mStreams.erase(it);
@@ -396,7 +396,7 @@
 
     buffer->setRange(0, nbytes);
 
-    // LOGI("received %d bytes.", buffer->size());
+    // ALOGI("received %d bytes.", buffer->size());
 
     status_t err;
     if (receiveRTP) {
@@ -561,7 +561,7 @@
 
             default:
             {
-                LOGW("Unknown RTCP packet type %u of size %d",
+                ALOGW("Unknown RTCP packet type %u of size %d",
                      (unsigned)data[1], headerLength);
                 break;
             }
@@ -606,7 +606,7 @@
     uint32_t rtpTime = u32at(&data[16]);
 
 #if 0
-    LOGI("XXX timeUpdate: ssrc=0x%08x, rtpTime %u == ntpTime %.3f",
+    ALOGI("XXX timeUpdate: ssrc=0x%08x, rtpTime %u == ntpTime %.3f",
          id,
          rtpTime,
          (ntpTime >> 32) + (double)(ntpTime & 0xffffffff) / (1ll << 32));
diff --git a/media/libstagefright/rtsp/ARTPSession.cpp b/media/libstagefright/rtsp/ARTPSession.cpp
index c6bcb12..7a05b88 100644
--- a/media/libstagefright/rtsp/ARTPSession.cpp
+++ b/media/libstagefright/rtsp/ARTPSession.cpp
@@ -53,24 +53,24 @@
         if (!mDesc->findAttribute(i, "c=", &connection)) {
             // No per-stream connection information, try global fallback.
             if (!mDesc->findAttribute(0, "c=", &connection)) {
-                LOGE("Unable to find connection attribute.");
+                ALOGE("Unable to find connection attribute.");
                 return mInitCheck;
             }
         }
         if (!(connection == "IN IP4 127.0.0.1")) {
-            LOGE("We only support localhost connections for now.");
+            ALOGE("We only support localhost connections for now.");
             return mInitCheck;
         }
 
         unsigned port;
         if (!validateMediaFormat(i, &port) || (port & 1) != 0) {
-            LOGE("Invalid media format.");
+            ALOGE("Invalid media format.");
             return mInitCheck;
         }
 
         sp<APacketSource> source = new APacketSource(mDesc, i);
         if (source->initCheck() != OK) {
-            LOGE("Unsupported format.");
+            ALOGE("Unsupported format.");
             return mInitCheck;
         }
 
@@ -159,7 +159,7 @@
             printf("access unit complete size=%d\tntp-time=0x%016llx\n",
                    accessUnit->size(), ntpTime);
 #else
-            LOGI("access unit complete, size=%d, ntp-time=%llu",
+            ALOGI("access unit complete, size=%d, ntp-time=%llu",
                  accessUnit->size(), ntpTime);
             hexdump(accessUnit->data(), accessUnit->size());
 #endif
@@ -170,7 +170,7 @@
             CHECK(!memcmp("\x00\x00\x00\x01", accessUnit->data(), 4));
             unsigned x = accessUnit->data()[4];
 
-            LOGI("access unit complete: nalType=0x%02x, nalRefIdc=0x%02x",
+            ALOGI("access unit complete: nalType=0x%02x, nalRefIdc=0x%02x",
                  x & 0x1f, (x & 0x60) >> 5);
 #endif
 
@@ -181,7 +181,7 @@
             int32_t damaged;
             if (accessUnit->meta()->findInt32("damaged", &damaged)
                     && damaged != 0) {
-                LOGI("ignoring damaged AU");
+                ALOGI("ignoring damaged AU");
             } else
 #endif
             {
diff --git a/media/libstagefright/rtsp/ARTPSource.cpp b/media/libstagefright/rtsp/ARTPSource.cpp
index dc5f17e..ed68790 100644
--- a/media/libstagefright/rtsp/ARTPSource.cpp
+++ b/media/libstagefright/rtsp/ARTPSource.cpp
@@ -147,7 +147,7 @@
     }
 
     if (it != mQueue.end() && (uint32_t)(*it)->int32Data() == seqNum) {
-        LOGW("Discarding duplicate buffer");
+        ALOGW("Discarding duplicate buffer");
         return false;
     }
 
@@ -174,7 +174,7 @@
     mLastFIRRequestUs = nowUs;
 
     if (buffer->size() + 20 > buffer->capacity()) {
-        LOGW("RTCP buffer too small to accomodate FIR.");
+        ALOGW("RTCP buffer too small to accomodate FIR.");
         return;
     }
 
@@ -212,7 +212,7 @@
 
 void ARTPSource::addReceiverReport(const sp<ABuffer> &buffer) {
     if (buffer->size() + 32 > buffer->capacity()) {
-        LOGW("RTCP buffer too small to accomodate RR.");
+        ALOGW("RTCP buffer too small to accomodate RR.");
         return;
     }
 
diff --git a/media/libstagefright/rtsp/ARTPWriter.cpp b/media/libstagefright/rtsp/ARTPWriter.cpp
index b602511..0d07043 100644
--- a/media/libstagefright/rtsp/ARTPWriter.cpp
+++ b/media/libstagefright/rtsp/ARTPWriter.cpp
@@ -269,7 +269,7 @@
     status_t err = mSource->read(&mediaBuf);
 
     if (err != OK) {
-        LOGI("reached EOS.");
+        ALOGI("reached EOS.");
 
         Mutex::Autolock autoLock(mLock);
         mFlags |= kFlagEOS;
@@ -520,7 +520,7 @@
         sdp.append("a=fmtp:" PT_STR " octed-align\r\n");
     }
 
-    LOGI("%s", sdp.c_str());
+    ALOGI("%s", sdp.c_str());
 }
 
 void ARTPWriter::makeH264SPropParamSets(MediaBuffer *buffer) {
diff --git a/media/libstagefright/rtsp/ARTSPConnection.cpp b/media/libstagefright/rtsp/ARTSPConnection.cpp
index d8107bc..80a010e 100644
--- a/media/libstagefright/rtsp/ARTSPConnection.cpp
+++ b/media/libstagefright/rtsp/ARTSPConnection.cpp
@@ -55,7 +55,7 @@
 
 ARTSPConnection::~ARTSPConnection() {
     if (mSocket >= 0) {
-        LOGE("Connection is still open, closing the socket.");
+        ALOGE("Connection is still open, closing the socket.");
         if (mUIDValid) {
             HTTPBase::UnRegisterSocketUserTag(mSocket);
         }
@@ -235,7 +235,7 @@
         // right here, since we currently have no way of asking the user
         // for this information.
 
-        LOGE("Malformed rtsp url %s", url.c_str());
+        ALOGE("Malformed rtsp url %s", url.c_str());
 
         reply->setInt32("result", ERROR_MALFORMED);
         reply->post();
@@ -250,7 +250,7 @@
 
     struct hostent *ent = gethostbyname(host.c_str());
     if (ent == NULL) {
-        LOGE("Unknown host %s", host.c_str());
+        ALOGE("Unknown host %s", host.c_str());
 
         reply->setInt32("result", -ENOENT);
         reply->post();
@@ -376,7 +376,7 @@
     CHECK_EQ(optionLen, (socklen_t)sizeof(err));
 
     if (err != 0) {
-        LOGE("err = %d (%s)", err, strerror(err));
+        ALOGE("err = %d (%s)", err, strerror(err));
 
         reply->setInt32("result", -err);
 
@@ -446,12 +446,12 @@
 
             if (n == 0) {
                 // Server closed the connection.
-                LOGE("Server unexpectedly closed the connection.");
+                ALOGE("Server unexpectedly closed the connection.");
 
                 reply->setInt32("result", ERROR_IO);
                 reply->post();
             } else {
-                LOGE("Error sending rtsp request. (%s)", strerror(errno));
+                ALOGE("Error sending rtsp request. (%s)", strerror(errno));
                 reply->setInt32("result", -errno);
                 reply->post();
             }
@@ -536,10 +536,10 @@
 
             if (n == 0) {
                 // Server closed the connection.
-                LOGE("Server unexpectedly closed the connection.");
+                ALOGE("Server unexpectedly closed the connection.");
                 return ERROR_IO;
             } else {
-                LOGE("Error reading rtsp response. (%s)", strerror(errno));
+                ALOGE("Error reading rtsp response. (%s)", strerror(errno));
                 return -errno;
             }
         }
@@ -615,7 +615,7 @@
             notify->setObject("buffer", buffer);
             notify->post();
         } else {
-            LOGW("received binary data, but no one cares.");
+            ALOGW("received binary data, but no one cares.");
         }
 
         return true;
@@ -624,7 +624,7 @@
     sp<ARTSPResponse> response = new ARTSPResponse;
     response->mStatusLine = statusLine;
 
-    LOGI("status: %s", response->mStatusLine.c_str());
+    ALOGI("status: %s", response->mStatusLine.c_str());
 
     ssize_t space1 = response->mStatusLine.find(" ");
     if (space1 < 0) {
@@ -740,7 +740,7 @@
             msg->setMessage("reply", reply);
             msg->setString("request", request.c_str(), request.size());
 
-            LOGI("re-sending request with authentication headers...");
+            ALOGI("re-sending request with authentication headers...");
             onSendRequest(msg);
 
             return true;
@@ -793,9 +793,9 @@
         if (n <= 0) {
             if (n == 0) {
                 // Server closed the connection.
-                LOGE("Server unexpectedly closed the connection.");
+                ALOGE("Server unexpectedly closed the connection.");
             } else {
-                LOGE("Error sending rtsp response (%s).", strerror(errno));
+                ALOGE("Error sending rtsp response (%s).", strerror(errno));
             }
 
             performDisconnect();
diff --git a/media/libstagefright/rtsp/ASessionDescription.cpp b/media/libstagefright/rtsp/ASessionDescription.cpp
index 56fdd9d..a9b3330 100644
--- a/media/libstagefright/rtsp/ASessionDescription.cpp
+++ b/media/libstagefright/rtsp/ASessionDescription.cpp
@@ -80,7 +80,7 @@
             return false;
         }
 
-        LOGI("%s", line.c_str());
+        ALOGI("%s", line.c_str());
 
         switch (line.c_str()[0]) {
             case 'v':
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h
index 21ef298..2391c5c 100644
--- a/media/libstagefright/rtsp/MyHandler.h
+++ b/media/libstagefright/rtsp/MyHandler.h
@@ -155,7 +155,7 @@
             mSessionURL.append(StringPrintf("%u", port));
             mSessionURL.append(path);
 
-            LOGI("rewritten session url: '%s'", mSessionURL.c_str());
+            ALOGI("rewritten session url: '%s'", mSessionURL.c_str());
         }
 
         mSessionHost = host;
@@ -264,12 +264,12 @@
         if (!GetAttribute(transport.c_str(),
                           "source",
                           &source)) {
-            LOGW("Missing 'source' field in Transport response. Using "
+            ALOGW("Missing 'source' field in Transport response. Using "
                  "RTSP endpoint address.");
 
             struct hostent *ent = gethostbyname(mSessionHost.c_str());
             if (ent == NULL) {
-                LOGE("Failed to look up address of session host '%s'",
+                ALOGE("Failed to look up address of session host '%s'",
                      mSessionHost.c_str());
 
                 return false;
@@ -283,7 +283,7 @@
         if (!GetAttribute(transport.c_str(),
                                  "server_port",
                                  &server_port)) {
-            LOGI("Missing 'server_port' field in Transport response.");
+            ALOGI("Missing 'server_port' field in Transport response.");
             return false;
         }
 
@@ -292,7 +292,7 @@
                 || rtpPort <= 0 || rtpPort > 65535
                 || rtcpPort <=0 || rtcpPort > 65535
                 || rtcpPort != rtpPort + 1) {
-            LOGE("Server picked invalid RTP/RTCP port pair %s,"
+            ALOGE("Server picked invalid RTP/RTCP port pair %s,"
                  " RTP port must be even, RTCP port must be one higher.",
                  server_port.c_str());
 
@@ -300,7 +300,7 @@
         }
 
         if (rtpPort & 1) {
-            LOGW("Server picked an odd RTP port, it should've picked an "
+            ALOGW("Server picked an odd RTP port, it should've picked an "
                  "even one, we'll let it pass for now, but this may break "
                  "in the future.");
         }
@@ -327,7 +327,7 @@
                 (const sockaddr *)&addr, sizeof(addr));
 
         if (n < (ssize_t)buf->size()) {
-            LOGE("failed to poke a hole for RTP packets");
+            ALOGE("failed to poke a hole for RTP packets");
             return false;
         }
 
@@ -338,7 +338,7 @@
                 (const sockaddr *)&addr, sizeof(addr));
 
         if (n < (ssize_t)buf->size()) {
-            LOGE("failed to poke a hole for RTCP packets");
+            ALOGE("failed to poke a hole for RTCP packets");
             return false;
         }
 
@@ -354,7 +354,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("connection request completed with result %d (%s)",
+                ALOGI("connection request completed with result %d (%s)",
                      result, strerror(-result));
 
                 if (result == OK) {
@@ -392,7 +392,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("DESCRIBE completed with result %d (%s)",
+                ALOGI("DESCRIBE completed with result %d (%s)",
                      result, strerror(-result));
 
                 if (result == OK) {
@@ -429,7 +429,7 @@
                                 response->mContent->size());
 
                         if (!mSessionDesc->isValid()) {
-                            LOGE("Failed to parse session description.");
+                            ALOGE("Failed to parse session description.");
                             result = ERROR_MALFORMED;
                         } else {
                             ssize_t i = response->mHeaders.indexOfKey("content-base");
@@ -450,7 +450,7 @@
                                 // it with the absolute session URL to get
                                 // something usable...
 
-                                LOGW("Server specified a non-absolute base URL"
+                                ALOGW("Server specified a non-absolute base URL"
                                      ", combining it with the session URL to "
                                      "get something usable...");
 
@@ -468,7 +468,7 @@
                                 // The first "track" is merely session meta
                                 // data.
 
-                                LOGW("Session doesn't contain any playable "
+                                ALOGW("Session doesn't contain any playable "
                                      "tracks. Aborting.");
                                 result = ERROR_UNSUPPORTED;
                             } else {
@@ -499,7 +499,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("SETUP(%d) completed with result %d (%s)",
+                ALOGI("SETUP(%d) completed with result %d (%s)",
                      index, result, strerror(-result));
 
                 if (result == OK) {
@@ -527,12 +527,12 @@
                                 strtoul(timeoutStr.c_str(), &end, 10);
 
                             if (end == timeoutStr.c_str() || *end != '\0') {
-                                LOGW("server specified malformed timeout '%s'",
+                                ALOGW("server specified malformed timeout '%s'",
                                      timeoutStr.c_str());
 
                                 mKeepAliveTimeoutUs = kDefaultKeepAliveTimeoutUs;
                             } else if (timeoutSecs < 15) {
-                                LOGW("server specified too short a timeout "
+                                ALOGW("server specified too short a timeout "
                                      "(%lu secs), using default.",
                                      timeoutSecs);
 
@@ -540,7 +540,7 @@
                             } else {
                                 mKeepAliveTimeoutUs = timeoutSecs * 1000000ll;
 
-                                LOGI("server specified timeout of %lu secs.",
+                                ALOGI("server specified timeout of %lu secs.",
                                      timeoutSecs);
                             }
                         }
@@ -625,7 +625,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("PLAY completed with result %d (%s)",
+                ALOGI("PLAY completed with result %d (%s)",
                      result, strerror(-result));
 
                 if (result == OK) {
@@ -682,7 +682,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("OPTIONS completed with result %d (%s)",
+                ALOGI("OPTIONS completed with result %d (%s)",
                      result, strerror(-result));
 
                 int32_t generation;
@@ -759,7 +759,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("TEARDOWN completed with result %d (%s)",
+                ALOGI("TEARDOWN completed with result %d (%s)",
                      result, strerror(-result));
 
                 sp<AMessage> reply = new AMessage('disc', id());
@@ -793,11 +793,11 @@
 
                 if (mNumAccessUnitsReceived == 0) {
 #if 1
-                    LOGI("stream ended? aborting.");
+                    ALOGI("stream ended? aborting.");
                     (new AMessage('abor', id()))->post();
                     break;
 #else
-                    LOGI("haven't seen an AU in a looong time.");
+                    ALOGI("haven't seen an AU in a looong time.");
 #endif
                 }
 
@@ -848,7 +848,7 @@
 
                 int32_t eos;
                 if (msg->findInt32("eos", &eos)) {
-                    LOGI("received BYE on track index %d", trackIndex);
+                    ALOGI("received BYE on track index %d", trackIndex);
 #if 0
                     track->mPacketSource->signalEOS(ERROR_END_OF_STREAM);
 #endif
@@ -884,7 +884,7 @@
             case 'seek':
             {
                 if (!mSeekable) {
-                    LOGW("This is a live stream, ignoring seek request.");
+                    ALOGW("This is a live stream, ignoring seek request.");
 
                     sp<AMessage> msg = mNotify->dup();
                     msg->setInt32("what", kWhatSeekDone);
@@ -961,7 +961,7 @@
                 int32_t result;
                 CHECK(msg->findInt32("result", &result));
 
-                LOGI("PLAY completed with result %d (%s)",
+                ALOGI("PLAY completed with result %d (%s)",
                      result, strerror(-result));
 
                 mCheckPending = false;
@@ -983,12 +983,12 @@
 
                         ALOGV("rtp-info: %s", response->mHeaders.valueAt(i).c_str());
 
-                        LOGI("seek completed.");
+                        ALOGI("seek completed.");
                     }
                 }
 
                 if (result != OK) {
-                    LOGE("seek failed, aborting.");
+                    ALOGE("seek failed, aborting.");
                     (new AMessage('abor', id()))->post();
                 }
 
@@ -1017,7 +1017,7 @@
             {
                 if (!mReceivedFirstRTCPPacket) {
                     if (mReceivedFirstRTPPacket && !mTryFakeRTCP) {
-                        LOGW("We received RTP packets but no RTCP packets, "
+                        ALOGW("We received RTP packets but no RTCP packets, "
                              "using fake timestamps.");
 
                         mTryFakeRTCP = true;
@@ -1026,7 +1026,7 @@
 
                         fakeTimestamps();
                     } else if (!mReceivedFirstRTPPacket && !mTryTCPInterleaving) {
-                        LOGW("Never received any data, switching transports.");
+                        ALOGW("Never received any data, switching transports.");
 
                         mTryTCPInterleaving = true;
 
@@ -1034,7 +1034,7 @@
                         msg->setInt32("reconnect", true);
                         msg->post();
                     } else {
-                        LOGW("Never received any data, disconnecting.");
+                        ALOGW("Never received any data, disconnecting.");
                         (new AMessage('abor', id()))->post();
                     }
                 }
@@ -1101,7 +1101,7 @@
         if (!ASessionDescription::parseNTPRange(val.c_str(), &npt1, &npt2)) {
             // This is a live stream and therefore not seekable.
 
-            LOGI("This is a live stream");
+            ALOGI("This is a live stream");
             return;
         }
 
@@ -1233,7 +1233,7 @@
             new APacketSource(mSessionDesc, index);
 
         if (source->initCheck() != OK) {
-            LOGW("Unsupported format. Ignoring track #%d.", index);
+            ALOGW("Unsupported format. Ignoring track #%d.", index);
 
             sp<AMessage> reply = new AMessage('setu', id());
             reply->setSize("index", index);
diff --git a/media/libstagefright/rtsp/UDPPusher.cpp b/media/libstagefright/rtsp/UDPPusher.cpp
index 576b3ca..47ea6f1 100644
--- a/media/libstagefright/rtsp/UDPPusher.cpp
+++ b/media/libstagefright/rtsp/UDPPusher.cpp
@@ -71,7 +71,7 @@
 bool UDPPusher::onPush() {
     uint32_t length;
     if (fread(&length, 1, sizeof(length), mFile) < sizeof(length)) {
-        LOGI("No more data to push.");
+        ALOGI("No more data to push.");
         return false;
     }
 
@@ -81,7 +81,7 @@
 
     sp<ABuffer> buffer = new ABuffer(length);
     if (fread(buffer->data(), 1, length, mFile) < length) {
-        LOGE("File truncated?.");
+        ALOGE("File truncated?.");
         return false;
     }
 
@@ -93,7 +93,7 @@
 
     uint32_t timeMs;
     if (fread(&timeMs, 1, sizeof(timeMs), mFile) < sizeof(timeMs)) {
-        LOGI("No more data to push.");
+        ALOGI("No more data to push.");
         return false;
     }
 
@@ -113,7 +113,7 @@
         case kWhatPush:
         {
             if (!onPush() && !(ntohs(mRemoteAddr.sin_port) & 1)) {
-                LOGI("emulating BYE packet");
+                ALOGI("emulating BYE packet");
 
                 sp<ABuffer> buffer = new ABuffer(8);
                 uint8_t *data = buffer->data();
diff --git a/media/libstagefright/rtsp/rtp_test.cpp b/media/libstagefright/rtsp/rtp_test.cpp
index f0cb5a5..d43cd2a 100644
--- a/media/libstagefright/rtsp/rtp_test.cpp
+++ b/media/libstagefright/rtsp/rtp_test.cpp
@@ -204,7 +204,7 @@
                 continue;
             }
 
-            LOGE("decoder returned error 0x%08x", err);
+            ALOGE("decoder returned error 0x%08x", err);
             break;
         }
 
diff --git a/media/libstagefright/tests/DummyRecorder.cpp b/media/libstagefright/tests/DummyRecorder.cpp
index fbb606d..ac37b28 100644
--- a/media/libstagefright/tests/DummyRecorder.cpp
+++ b/media/libstagefright/tests/DummyRecorder.cpp
@@ -47,7 +47,7 @@
     pthread_attr_destroy(&attr);
 
     if (err) {
-        LOGE("Error creating thread!");
+        ALOGE("Error creating thread!");
         return -ENODEV;
     }
     return OK;
diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
index 6be5e9a..76b507f 100644
--- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp
+++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
@@ -731,7 +731,7 @@
     const char *fileName = "/sdcard/outputSurfEncMSource.mp4";
     int fd = open(fileName, O_RDWR | O_CREAT, 0744);
     if (fd < 0) {
-        LOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
+        ALOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
     }
     CHECK(fd >= 0);
 
@@ -861,7 +861,7 @@
     const char *fileName = "/sdcard/outputSurfEncMSourceGL.mp4";
     int fd = open(fileName, O_RDWR | O_CREAT, 0744);
     if (fd < 0) {
-        LOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
+        ALOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
     }
     CHECK(fd >= 0);
 
@@ -904,7 +904,7 @@
     const char *fileName = "/sdcard/outputSurfEncMSourceGLDiff.mp4";
     int fd = open(fileName, O_RDWR | O_CREAT, 0744);
     if (fd < 0) {
-        LOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
+        ALOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
     }
     CHECK(fd >= 0);
 
diff --git a/media/libstagefright/timedtext/TimedTextPlayer.cpp b/media/libstagefright/timedtext/TimedTextPlayer.cpp
index 7c8a747..3014b0b 100644
--- a/media/libstagefright/timedtext/TimedTextPlayer.cpp
+++ b/media/libstagefright/timedtext/TimedTextPlayer.cpp
@@ -91,7 +91,7 @@
 
     if (index >=
             mTextTrackVector.size() + mTextOutOfBandVector.size()) {
-        LOGE("Incorrect text track index: %d", index);
+        ALOGE("Incorrect text track index: %d", index);
         return BAD_VALUE;
     }
 
diff --git a/media/libstagefright/yuv/YUVImage.cpp b/media/libstagefright/yuv/YUVImage.cpp
index b712062..0d67c96 100644
--- a/media/libstagefright/yuv/YUVImage.cpp
+++ b/media/libstagefright/yuv/YUVImage.cpp
@@ -54,7 +54,7 @@
         // Y takes numberOfPixels bytes and U/V take numberOfPixels/4 bytes each.
         numberOfBytes = (size_t)(numberOfPixels + (numberOfPixels >> 1));
     } else {
-        LOGE("Format not supported");
+        ALOGE("Format not supported");
     }
     return numberOfBytes;
 }
@@ -74,7 +74,7 @@
         mVdata = mYdata + numberOfPixels;
         mUdata = mVdata + 1;
     } else {
-        LOGE("Format not supported");
+        ALOGE("Format not supported");
         return false;
     }
     return true;
@@ -98,7 +98,7 @@
         *uOffset = 2*uvOffset;
         *vOffset = 2*uvOffset;
     } else {
-        LOGE("Format not supported");
+        ALOGE("Format not supported");
         return false;
     }
 
@@ -122,7 +122,7 @@
         *uDataOffsetIncrement = 2*uvDataOffsetIncrement;
         *vDataOffsetIncrement = 2*uvDataOffsetIncrement;
     } else {
-        LOGE("Format not supported");
+        ALOGE("Format not supported");
         return false;
     }
 
diff --git a/media/mediaserver/main_mediaserver.cpp b/media/mediaserver/main_mediaserver.cpp
index b5f85f9..1520c01 100644
--- a/media/mediaserver/main_mediaserver.cpp
+++ b/media/mediaserver/main_mediaserver.cpp
@@ -15,6 +15,8 @@
 ** limitations under the License.
 */
 
+#define LOG_TAG "mediaserver"
+
 #include <binder/IPCThreadState.h>
 #include <binder/ProcessState.h>
 #include <binder/IServiceManager.h>
@@ -31,7 +33,7 @@
 {
     sp<ProcessState> proc(ProcessState::self());
     sp<IServiceManager> sm = defaultServiceManager();
-    LOGI("ServiceManager: %p", sm.get());
+    ALOGI("ServiceManager: %p", sm.get());
     AudioFlinger::instantiate();
     MediaPlayerService::instantiate();
     CameraService::instantiate();
diff --git a/media/mtp/MtpDataPacket.cpp b/media/mtp/MtpDataPacket.cpp
index cfea7e8..930f0b0 100644
--- a/media/mtp/MtpDataPacket.cpp
+++ b/media/mtp/MtpDataPacket.cpp
@@ -418,7 +418,7 @@
 // Queue a read request.  Call readDataWait to wait for result
 int MtpDataPacket::readDataAsync(struct usb_request *req) {
     if (usb_request_queue(req)) {
-        LOGE("usb_endpoint_queue failed, errno: %d", errno);
+        ALOGE("usb_endpoint_queue failed, errno: %d", errno);
         return -1;
     }
     return 0;
diff --git a/media/mtp/MtpDevice.cpp b/media/mtp/MtpDevice.cpp
index b370225..bf7795c 100644
--- a/media/mtp/MtpDevice.cpp
+++ b/media/mtp/MtpDevice.cpp
@@ -53,7 +53,7 @@
 MtpDevice* MtpDevice::open(const char* deviceName, int fd) {
     struct usb_device *device = usb_device_new(deviceName, fd);
     if (!device) {
-        LOGE("usb_device_new failed for %s", deviceName);
+        ALOGE("usb_device_new failed for %s", deviceName);
         return NULL;
     }
 
@@ -134,7 +134,7 @@
             for (int i = 0; i < 3; i++) {
                 ep = (struct usb_endpoint_descriptor *)usb_descriptor_iter_next(&iter);
                 if (!ep || ep->bDescriptorType != USB_DT_ENDPOINT) {
-                    LOGE("endpoints not found\n");
+                    ALOGE("endpoints not found\n");
                     usb_device_close(device);
                     return NULL;
                 }
@@ -149,13 +149,13 @@
                 }
             }
             if (!ep_in_desc || !ep_out_desc || !ep_intr_desc) {
-                LOGE("endpoints not found\n");
+                ALOGE("endpoints not found\n");
                 usb_device_close(device);
                 return NULL;
             }
 
             if (usb_device_claim_interface(device, interface->bInterfaceNumber)) {
-                LOGE("usb_device_claim_interface failed errno: %d\n", errno);
+                ALOGE("usb_device_claim_interface failed errno: %d\n", errno);
                 usb_device_close(device);
                 return NULL;
             }
@@ -168,7 +168,7 @@
     }
 
     usb_device_close(device);
-    LOGE("device not found");
+    ALOGE("device not found");
     return NULL;
 }
 
@@ -232,7 +232,7 @@
         mDeviceInfo->print();
 
         if (mDeviceInfo->mDeviceProperties) {
-            LOGI("***** DEVICE PROPERTIES *****\n");
+            ALOGI("***** DEVICE PROPERTIES *****\n");
             int count = mDeviceInfo->mDeviceProperties->size();
             for (int i = 0; i < count; i++) {
                 MtpDeviceProperty propCode = (*mDeviceInfo->mDeviceProperties)[i];
@@ -246,11 +246,11 @@
     }
 
     if (mDeviceInfo->mPlaybackFormats) {
-            LOGI("***** OBJECT PROPERTIES *****\n");
+            ALOGI("***** OBJECT PROPERTIES *****\n");
         int count = mDeviceInfo->mPlaybackFormats->size();
         for (int i = 0; i < count; i++) {
             MtpObjectFormat format = (*mDeviceInfo->mPlaybackFormats)[i];
-            LOGI("*** FORMAT: %s\n", MtpDebug::getFormatCodeName(format));
+            ALOGI("*** FORMAT: %s\n", MtpDebug::getFormatCodeName(format));
             MtpObjectPropertyList* props = getObjectPropsSupported(format);
             if (props) {
                 for (int j = 0; j < props->size(); j++) {
@@ -260,7 +260,7 @@
                         property->print();
                         delete property;
                     } else {
-                        LOGE("could not fetch property: %s",
+                        ALOGE("could not fetch property: %s",
                                 MtpDebug::getObjectPropCodeName(prop));
                     }
                 }
@@ -584,7 +584,7 @@
             && mData.readDataHeader(mRequestIn1)) {
         uint32_t length = mData.getContainerLength();
         if (length - MTP_CONTAINER_HEADER_SIZE != objectSize) {
-            LOGE("readObject error objectSize: %d, length: %d",
+            ALOGE("readObject error objectSize: %d, length: %d",
                     objectSize, length);
             goto fail;
         }
@@ -617,7 +617,7 @@
                 // queue up a read request
                 req->buffer_length = (remaining > sizeof(buffer1) ? sizeof(buffer1) : remaining);
                 if (mData.readDataAsync(req)) {
-                    LOGE("readDataAsync failed");
+                    ALOGE("readDataAsync failed");
                     goto fail;
                 }
             } else {
@@ -627,7 +627,7 @@
             if (writeBuffer) {
                 // write previous buffer
                 if (!callback(writeBuffer, offset, writeLength, clientData)) {
-                    LOGE("write failed");
+                    ALOGE("write failed");
                     // wait for pending read before failing
                     if (req)
                         mData.readDataWait(mDevice);
@@ -669,7 +669,7 @@
     ALOGD("readObject: %s", destPath);
     int fd = ::open(destPath, O_RDWR | O_CREAT | O_TRUNC);
     if (fd < 0) {
-        LOGE("open failed for %s", destPath);
+        ALOGE("open failed for %s", destPath);
         return false;
     }
 
@@ -718,7 +718,7 @@
                 // queue up a read request
                 req->buffer_length = (remaining > sizeof(buffer1) ? sizeof(buffer1) : remaining);
                 if (mData.readDataAsync(req)) {
-                    LOGE("readDataAsync failed");
+                    ALOGE("readDataAsync failed");
                     goto fail;
                 }
             } else {
@@ -728,7 +728,7 @@
             if (writeBuffer) {
                 // write previous buffer
                 if (write(fd, writeBuffer, writeLength) != writeLength) {
-                    LOGE("write failed");
+                    ALOGE("write failed");
                     // wait for pending read before failing
                     if (req)
                         mData.readDataWait(mDevice);
diff --git a/media/mtp/MtpPacket.cpp b/media/mtp/MtpPacket.cpp
index 39815d4..dd07843 100644
--- a/media/mtp/MtpPacket.cpp
+++ b/media/mtp/MtpPacket.cpp
@@ -36,7 +36,7 @@
 {
     mBuffer = (uint8_t *)malloc(bufferSize);
     if (!mBuffer) {
-        LOGE("out of memory!");
+        ALOGE("out of memory!");
         abort();
     }
 }
@@ -57,7 +57,7 @@
         int newLength = length + mAllocationIncrement;
         mBuffer = (uint8_t *)realloc(mBuffer, newLength);
         if (!mBuffer) {
-            LOGE("out of memory!");
+            ALOGE("out of memory!");
             abort();
         }
         mBufferSize = newLength;
@@ -134,7 +134,7 @@
 
 uint32_t MtpPacket::getParameter(int index) const {
     if (index < 1 || index > 5) {
-        LOGE("index %d out of range in MtpPacket::getParameter", index);
+        ALOGE("index %d out of range in MtpPacket::getParameter", index);
         return 0;
     }
     return getUInt32(MTP_CONTAINER_PARAMETER_OFFSET + (index - 1) * sizeof(uint32_t));
@@ -142,7 +142,7 @@
 
 void MtpPacket::setParameter(int index, uint32_t value) {
     if (index < 1 || index > 5) {
-        LOGE("index %d out of range in MtpPacket::setParameter", index);
+        ALOGE("index %d out of range in MtpPacket::setParameter", index);
         return;
     }
     int offset = MTP_CONTAINER_PARAMETER_OFFSET + (index - 1) * sizeof(uint32_t);
diff --git a/media/mtp/MtpProperty.cpp b/media/mtp/MtpProperty.cpp
index 8016c35..64dd45b 100644
--- a/media/mtp/MtpProperty.cpp
+++ b/media/mtp/MtpProperty.cpp
@@ -91,7 +91,7 @@
                 mDefaultValue.u.u64 = defaultValue;
                 break;
             default:
-                LOGE("unknown type %04X in MtpProperty::MtpProperty", type);
+                ALOGE("unknown type %04X in MtpProperty::MtpProperty", type);
         }
     }
 }
@@ -267,7 +267,7 @@
             mStepSize.u.u64 = step;
             break;
         default:
-            LOGE("unsupported type for MtpProperty::setRange");
+            ALOGE("unsupported type for MtpProperty::setRange");
             break;
     }
 }
@@ -306,7 +306,7 @@
                     mEnumValues[i].u.u64 = value;
                     break;
                 default:
-                    LOGE("unsupported type for MtpProperty::setEnum");
+                    ALOGE("unsupported type for MtpProperty::setEnum");
                     break;
         }
     }
@@ -320,18 +320,18 @@
     MtpString buffer;
     bool deviceProp = isDeviceProperty();
     if (deviceProp)
-        LOGI("    %s (%04X)", MtpDebug::getDevicePropCodeName(mCode), mCode);
+        ALOGI("    %s (%04X)", MtpDebug::getDevicePropCodeName(mCode), mCode);
     else
-        LOGI("    %s (%04X)", MtpDebug::getObjectPropCodeName(mCode), mCode);
-    LOGI("    type %04X", mType);
-    LOGI("    writeable %s", (mWriteable ? "true" : "false"));
+        ALOGI("    %s (%04X)", MtpDebug::getObjectPropCodeName(mCode), mCode);
+    ALOGI("    type %04X", mType);
+    ALOGI("    writeable %s", (mWriteable ? "true" : "false"));
     buffer = "    default value: ";
     print(mDefaultValue, buffer);
-    LOGI("%s", (const char *)buffer);
+    ALOGI("%s", (const char *)buffer);
     if (deviceProp) {
         buffer = "    current value: ";
         print(mCurrentValue, buffer);
-        LOGI("%s", (const char *)buffer);
+        ALOGI("%s", (const char *)buffer);
     }
     switch (mFormFlag) {
         case kFormNone:
@@ -344,7 +344,7 @@
             buffer += ", ";
             print(mStepSize, buffer);
             buffer += ")";
-            LOGI("%s", (const char *)buffer);
+            ALOGI("%s", (const char *)buffer);
             break;
         case kFormEnum:
             buffer = "    Enum { ";
@@ -353,13 +353,13 @@
                 buffer += " ";
             }
             buffer += "}";
-            LOGI("%s", (const char *)buffer);
+            ALOGI("%s", (const char *)buffer);
             break;
         case kFormDateTime:
-            LOGI("    DateTime\n");
+            ALOGI("    DateTime\n");
             break;
         default:
-            LOGI("    form %d\n", mFormFlag);
+            ALOGI("    form %d\n", mFormFlag);
             break;
     }
 }
@@ -402,7 +402,7 @@
             buffer.appendFormat("%s", value.str);
             break;
         default:
-            LOGE("unsupported type for MtpProperty::print\n");
+            ALOGE("unsupported type for MtpProperty::print\n");
             break;
     }
 }
@@ -456,7 +456,7 @@
             value.str = strdup(stringBuffer);
             break;
         default:
-            LOGE("unknown type %04X in MtpProperty::readValue", mType);
+            ALOGE("unknown type %04X in MtpProperty::readValue", mType);
     }
 }
 
@@ -511,7 +511,7 @@
                 packet.putEmptyString();
             break;
         default:
-            LOGE("unknown type %04X in MtpProperty::writeValue", mType);
+            ALOGE("unknown type %04X in MtpProperty::writeValue", mType);
     }
 }
 
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index 838c13e..5606187 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -179,7 +179,7 @@
         if (dataIn) {
             int ret = mData.read(fd);
             if (ret < 0) {
-                LOGE("data read returned %d, errno: %d", ret, errno);
+                ALOGE("data read returned %d, errno: %d", ret, errno);
                 if (errno == ECANCELED) {
                     // return to top of loop and wait for next command
                     continue;
@@ -200,7 +200,7 @@
                 mData.dump();
                 ret = mData.write(fd);
                 if (ret < 0) {
-                    LOGE("request write returned %d, errno: %d", ret, errno);
+                    ALOGE("request write returned %d, errno: %d", ret, errno);
                     if (errno == ECANCELED) {
                         // return to top of loop and wait for next command
                         continue;
@@ -214,7 +214,7 @@
             ret = mResponse.write(fd);
             mResponse.dump();
             if (ret < 0) {
-                LOGE("request write returned %d, errno: %d", ret, errno);
+                ALOGE("request write returned %d, errno: %d", ret, errno);
                 if (errno == ECANCELED) {
                     // return to top of loop and wait for next command
                     continue;
@@ -296,7 +296,7 @@
             return;
         }
     }
-    LOGE("ObjectEdit not found in removeEditObject");
+    ALOGE("ObjectEdit not found in removeEditObject");
 }
 
 void MtpServer::commitEdit(ObjectEdit* edit) {
@@ -314,7 +314,7 @@
 
     if (mSendObjectHandle != kInvalidObjectHandle && operation != MTP_OPERATION_SEND_OBJECT) {
         // FIXME - need to delete mSendObjectHandle from the database
-        LOGE("expected SendObject after SendObjectInfo");
+        ALOGE("expected SendObject after SendObjectInfo");
         mSendObjectHandle = kInvalidObjectHandle;
     }
 
@@ -408,7 +408,7 @@
             response = doEndEditObject();
             break;
         default:
-            LOGE("got unsupported command %s", MtpDebug::getOperationCodeName(operation));
+            ALOGE("got unsupported command %s", MtpDebug::getOperationCodeName(operation));
             response = MTP_RESPONSE_OPERATION_NOT_SUPPORTED;
             break;
     }
@@ -917,7 +917,7 @@
     int ret, initialData;
 
     if (mSendObjectHandle == kInvalidObjectHandle) {
-        LOGE("Expected SendObjectInfo before SendObject");
+        ALOGE("Expected SendObjectInfo before SendObject");
         result = MTP_RESPONSE_NO_VALID_OBJECT_INFO;
         goto done;
     }
@@ -984,7 +984,7 @@
     char pathbuf[PATH_MAX];
     int pathLength = strlen(path);
     if (pathLength >= sizeof(pathbuf) - 1) {
-        LOGE("path too long: %s\n", path);
+        ALOGE("path too long: %s\n", path);
     }
     strcpy(pathbuf, path);
     if (pathbuf[pathLength - 1] != '/') {
@@ -995,7 +995,7 @@
 
     DIR* dir = opendir(path);
     if (!dir) {
-        LOGE("opendir %s failed: %s", path, strerror(errno));
+        ALOGE("opendir %s failed: %s", path, strerror(errno));
         return;
     }
 
@@ -1010,7 +1010,7 @@
 
         int nameLength = strlen(name);
         if (nameLength > pathRemaining) {
-            LOGE("path %s/%s too long\n", path, name);
+            ALOGE("path %s/%s too long\n", path, name);
             continue;
         }
         strcpy(fileSpot, name);
@@ -1036,7 +1036,7 @@
             unlink(path);
         }
     } else {
-        LOGE("deletePath stat failed for %s: %s", path, strerror(errno));
+        ALOGE("deletePath stat failed for %s: %s", path, strerror(errno));
     }
 }
 
@@ -1098,7 +1098,7 @@
 
     ObjectEdit* edit = getEditObject(handle);
     if (!edit) {
-        LOGE("object not open for edit in doSendPartialObject");
+        ALOGE("object not open for edit in doSendPartialObject");
         return MTP_RESPONSE_GENERAL_ERROR;
     }
 
@@ -1155,7 +1155,7 @@
     MtpObjectHandle handle = mRequest.getParameter(1);
     ObjectEdit* edit = getEditObject(handle);
     if (!edit) {
-        LOGE("object not open for edit in doTruncateObject");
+        ALOGE("object not open for edit in doTruncateObject");
         return MTP_RESPONSE_GENERAL_ERROR;
     }
 
@@ -1173,7 +1173,7 @@
 MtpResponseCode MtpServer::doBeginEditObject() {
     MtpObjectHandle handle = mRequest.getParameter(1);
     if (getEditObject(handle)) {
-        LOGE("object already open for edit in doBeginEditObject");
+        ALOGE("object already open for edit in doBeginEditObject");
         return MTP_RESPONSE_GENERAL_ERROR;
     }
 
@@ -1186,7 +1186,7 @@
 
     int fd = open((const char *)path, O_RDWR | O_EXCL);
     if (fd < 0) {
-        LOGE("open failed for %s in doBeginEditObject (%d)", (const char *)path, errno);
+        ALOGE("open failed for %s in doBeginEditObject (%d)", (const char *)path, errno);
         return MTP_RESPONSE_GENERAL_ERROR;
     }
 
@@ -1198,7 +1198,7 @@
     MtpObjectHandle handle = mRequest.getParameter(1);
     ObjectEdit* edit = getEditObject(handle);
     if (!edit) {
-        LOGE("object not open for edit in doEndEditObject");
+        ALOGE("object not open for edit in doEndEditObject");
         return MTP_RESPONSE_GENERAL_ERROR;
     }
 
diff --git a/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp b/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp
index 209e71c..42df66c 100644
--- a/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp
+++ b/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp
@@ -113,7 +113,7 @@
 
     // mode == DecodePixels
     if (!this->allocPixelRef(bm, NULL)) {
-        LOGI("Cannot allocPixelRef()!");
+        ALOGI("Cannot allocPixelRef()!");
         return false;
     }
 
@@ -141,7 +141,7 @@
         const sp<MediaSource>& source, SkBitmap* bm) {
     status_t rt = decoder->start();
     if (rt != OK) {
-        LOGE("Cannot start OMX Decoder!");
+        ALOGE("Cannot start OMX Decoder!");
         return false;
     }
     int64_t startTime = getNowUs();
diff --git a/native/android/looper.cpp b/native/android/looper.cpp
index 615493f..455e950 100644
--- a/native/android/looper.cpp
+++ b/native/android/looper.cpp
@@ -44,7 +44,7 @@
 int ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData) {
     sp<Looper> looper = Looper::getForThread();
     if (looper == NULL) {
-        LOGE("ALooper_pollOnce: No looper for this thread!");
+        ALOGE("ALooper_pollOnce: No looper for this thread!");
         return ALOOPER_POLL_ERROR;
     }
 
@@ -55,7 +55,7 @@
 int ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData) {
     sp<Looper> looper = Looper::getForThread();
     if (looper == NULL) {
-        LOGE("ALooper_pollAll: No looper for this thread!");
+        ALOGE("ALooper_pollAll: No looper for this thread!");
         return ALOOPER_POLL_ERROR;
     }
 
diff --git a/native/android/storage_manager.cpp b/native/android/storage_manager.cpp
index a4233e7..f2f36b62 100644
--- a/native/android/storage_manager.cpp
+++ b/native/android/storage_manager.cpp
@@ -87,13 +87,13 @@
     bool initialize() {
         sp<IServiceManager> sm = defaultServiceManager();
         if (sm == NULL) {
-            LOGE("Couldn't get default ServiceManager\n");
+            ALOGE("Couldn't get default ServiceManager\n");
             return false;
         }
 
         mMountService = interface_cast<IMountService>(sm->getService(String16("mount")));
         if (mMountService == NULL) {
-            LOGE("Couldn't get connection to MountService\n");
+            ALOGE("Couldn't get connection to MountService\n");
             return false;
         }
 
@@ -121,7 +121,7 @@
             target->cb(filename, state, target->data);
             delete target;
         } else {
-            LOGI("Didn't find the callback handler for: %s\n", filename);
+            ALOGI("Didn't find the callback handler for: %s\n", filename);
         }
     }
 
diff --git a/opengl/libagl/TextureObjectManager.cpp b/opengl/libagl/TextureObjectManager.cpp
index 022de09..6a006aa 100644
--- a/opengl/libagl/TextureObjectManager.cpp
+++ b/opengl/libagl/TextureObjectManager.cpp
@@ -195,7 +195,7 @@
                 return NO_MEMORY;
         }
 
-        LOGW_IF(level-1 >= mNumExtraLod,
+        ALOGW_IF(level-1 >= mNumExtraLod,
                 "specifying mipmap level %d, but # of level is %d",
                 level, mNumExtraLod+1);
 
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 9ceb5e9..eb55bee 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -184,7 +184,7 @@
     free(depth.data);
 }
 bool egl_surface_t::isValid() const {
-    LOGE_IF(magic != MAGIC, "invalid EGLSurface (%p)", this);
+    ALOGE_IF(magic != MAGIC, "invalid EGLSurface (%p)", this);
     return magic == MAGIC; 
 }
 
@@ -397,7 +397,7 @@
     // pin the buffer down
     if (lock(buffer, GRALLOC_USAGE_SW_READ_OFTEN | 
             GRALLOC_USAGE_SW_WRITE_OFTEN, &bits) != NO_ERROR) {
-        LOGE("connect() failed to lock buffer %p (%ux%u)",
+        ALOGE("connect() failed to lock buffer %p (%ux%u)",
                 buffer, buffer->width, buffer->height);
         return setError(EGL_BAD_ACCESS, EGL_FALSE);
         // FIXME: we should make sure we're not accessing the buffer anymore
@@ -552,7 +552,7 @@
         // finally pin the buffer down
         if (lock(buffer, GRALLOC_USAGE_SW_READ_OFTEN |
                 GRALLOC_USAGE_SW_WRITE_OFTEN, &bits) != NO_ERROR) {
-            LOGE("eglSwapBuffers() failed to lock buffer %p (%ux%u)",
+            ALOGE("eglSwapBuffers() failed to lock buffer %p (%ux%u)",
                     buffer, buffer->width, buffer->height);
             return setError(EGL_BAD_ACCESS, EGL_FALSE);
             // FIXME: we should make sure we're not accessing the buffer anymore
@@ -721,7 +721,7 @@
         case GGL_PIXEL_FORMAT_RGBA_8888:    size *= 4; break;
         case GGL_PIXEL_FORMAT_RGBX_8888:    size *= 4; break;
         default:
-            LOGE("incompatible pixel format for pbuffer (format=%d)", f);
+            ALOGE("incompatible pixel format for pbuffer (format=%d)", f);
             pbuffer.data = 0;
             break;
     }
diff --git a/opengl/libagl/mipmap.cpp b/opengl/libagl/mipmap.cpp
index ccd77b7..e142a58 100644
--- a/opengl/libagl/mipmap.cpp
+++ b/opengl/libagl/mipmap.cpp
@@ -174,7 +174,7 @@
                 }
             }
         } else {
-            LOGE("Unsupported format (%d)", base->format);
+            ALOGE("Unsupported format (%d)", base->format);
             return BAD_TYPE;
         }
 
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp
index 561862b..2fc6125 100644
--- a/opengl/libs/EGL/Loader.cpp
+++ b/opengl/libs/EGL/Loader.cpp
@@ -278,7 +278,7 @@
     void* dso = dlopen(driver_absolute_path, RTLD_NOW | RTLD_LOCAL);
     if (dso == 0) {
         const char* err = dlerror();
-        LOGE("load_driver(%s): %s", driver_absolute_path, err?err:"unknown");
+        ALOGE("load_driver(%s): %s", driver_absolute_path, err?err:"unknown");
         return 0;
     }
 
@@ -287,7 +287,7 @@
     if (mask & EGL) {
         getProcAddress = (getProcAddressType)dlsym(dso, "eglGetProcAddress");
 
-        LOGE_IF(!getProcAddress, 
+        ALOGE_IF(!getProcAddress, 
                 "can't find eglGetProcAddress() in %s", driver_absolute_path);
 
         egl_t* egl = &cnx->egl;
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index da1b397..e053589 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -141,7 +141,7 @@
 
 static int gl_no_context() {
     if (egl_tls_t::logNoContextCall()) {
-        LOGE("call to OpenGL ES API with no current context "
+        ALOGE("call to OpenGL ES API with no current context "
              "(logged once per thread)");
         char value[PROPERTY_VALUE_MAX];
         property_get("debug.egl.callstack", value, "0");
@@ -287,7 +287,7 @@
 }
 
 void gl_unimplemented() {
-    LOGE("called unimplemented OpenGL ES API");
+    ALOGE("called unimplemented OpenGL ES API");
 }
 
 // ----------------------------------------------------------------------------
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index fb61397..664f258 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -352,7 +352,7 @@
         EGLint format;
 
         if (native_window_api_connect(window, NATIVE_WINDOW_API_EGL) != OK) {
-            LOGE("EGLNativeWindowType %p already connected to another API",
+            ALOGE("EGLNativeWindowType %p already connected to another API",
                     window);
             return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
         }
@@ -363,7 +363,7 @@
             if (format != 0) {
                 int err = native_window_set_buffers_format(window, format);
                 if (err != 0) {
-                    LOGE("error setting native window pixel format: %s (%d)",
+                    ALOGE("error setting native window pixel format: %s (%d)",
                             strerror(-err), err);
                     native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
                     return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
@@ -674,7 +674,7 @@
             egl_tls_t::setContext(EGL_NO_CONTEXT);
         }
     } else {
-        // this will LOGE the error
+        // this will ALOGE the error
         result = setError(c->cnx->egl.eglGetError(), EGL_FALSE);
     }
     return result;
@@ -886,7 +886,7 @@
         addr = sGLExtentionMap.valueFor(name);
         const int slot = sGLExtentionSlot;
 
-        LOGE_IF(slot >= MAX_NUMBER_OF_GL_EXTENSIONS,
+        ALOGE_IF(slot >= MAX_NUMBER_OF_GL_EXTENSIONS,
                 "no more slots for eglGetProcAddress(\"%s\")",
                 procname);
 
diff --git a/opengl/libs/EGL/egl_cache.cpp b/opengl/libs/EGL/egl_cache.cpp
index c4a7466..7fd6519 100644
--- a/opengl/libs/EGL/egl_cache.cpp
+++ b/opengl/libs/EGL/egl_cache.cpp
@@ -101,7 +101,7 @@
                             cnx->egl.eglGetProcAddress(
                                     "eglSetBlobCacheFuncsANDROID"));
                 if (eglSetBlobCacheFuncsANDROID == NULL) {
-                    LOGE("EGL_ANDROID_blob_cache advertised by display %d, "
+                    ALOGE("EGL_ANDROID_blob_cache advertised by display %d, "
                             "but unable to get eglSetBlobCacheFuncsANDROID", i);
                     continue;
                 }
@@ -110,7 +110,7 @@
                         android::setBlob, android::getBlob);
                 EGLint err = cnx->egl.eglGetError();
                 if (err != EGL_SUCCESS) {
-                    LOGE("eglSetBlobCacheFuncsANDROID resulted in an error: "
+                    ALOGE("eglSetBlobCacheFuncsANDROID resulted in an error: "
                             "%#x", err);
                 }
             }
@@ -133,7 +133,7 @@
     Mutex::Autolock lock(mMutex);
 
     if (keySize < 0 || valueSize < 0) {
-        LOGW("EGL_ANDROID_blob_cache set: negative sizes are not allowed");
+        ALOGW("EGL_ANDROID_blob_cache set: negative sizes are not allowed");
         return;
     }
 
@@ -172,7 +172,7 @@
     Mutex::Autolock lock(mMutex);
 
     if (keySize < 0 || valueSize < 0) {
-        LOGW("EGL_ANDROID_blob_cache set: negative sizes are not allowed");
+        ALOGW("EGL_ANDROID_blob_cache set: negative sizes are not allowed");
         return 0;
     }
 
@@ -226,7 +226,7 @@
                 // The file exists, delete it and try again.
                 if (unlink(fname) == -1) {
                     // No point in retrying if the unlink failed.
-                    LOGE("error unlinking cache file %s: %s (%d)", fname,
+                    ALOGE("error unlinking cache file %s: %s (%d)", fname,
                             strerror(errno), errno);
                     return;
                 }
@@ -234,7 +234,7 @@
                 fd = open(fname, O_CREAT | O_EXCL | O_RDWR, 0);
             }
             if (fd == -1) {
-                LOGE("error creating cache file %s: %s (%d)", fname,
+                ALOGE("error creating cache file %s: %s (%d)", fname,
                         strerror(errno), errno);
                 return;
             }
@@ -242,7 +242,7 @@
 
         size_t fileSize = headerSize + cacheSize;
         if (ftruncate(fd, fileSize) == -1) {
-            LOGE("error setting cache file size: %s (%d)", strerror(errno),
+            ALOGE("error setting cache file size: %s (%d)", strerror(errno),
                     errno);
             close(fd);
             unlink(fname);
@@ -252,7 +252,7 @@
         uint8_t* buf = reinterpret_cast<uint8_t*>(mmap(NULL, fileSize,
                 PROT_WRITE, MAP_SHARED, fd, 0));
         if (buf == MAP_FAILED) {
-            LOGE("error mmaping cache file: %s (%d)", strerror(errno),
+            ALOGE("error mmaping cache file: %s (%d)", strerror(errno),
                     errno);
             close(fd);
             unlink(fname);
@@ -262,7 +262,7 @@
         status_t err = mBlobCache->flatten(buf + headerSize, cacheSize, NULL,
                 0);
         if (err != OK) {
-            LOGE("error writing cache contents: %s (%d)", strerror(-err),
+            ALOGE("error writing cache contents: %s (%d)", strerror(-err),
                     -err);
             munmap(buf, fileSize);
             close(fd);
@@ -288,7 +288,7 @@
         int fd = open(mFilename.string(), O_RDONLY, 0);
         if (fd == -1) {
             if (errno != ENOENT) {
-                LOGE("error opening cache file %s: %s (%d)", mFilename.string(),
+                ALOGE("error opening cache file %s: %s (%d)", mFilename.string(),
                         strerror(errno), errno);
             }
             return;
@@ -296,7 +296,7 @@
 
         struct stat statBuf;
         if (fstat(fd, &statBuf) == -1) {
-            LOGE("error stat'ing cache file: %s (%d)", strerror(errno), errno);
+            ALOGE("error stat'ing cache file: %s (%d)", strerror(errno), errno);
             close(fd);
             return;
         }
@@ -304,7 +304,7 @@
         // Sanity check the size before trying to mmap it.
         size_t fileSize = statBuf.st_size;
         if (fileSize > maxTotalSize * 2) {
-            LOGE("cache file is too large: %#llx", statBuf.st_size);
+            ALOGE("cache file is too large: %#llx", statBuf.st_size);
             close(fd);
             return;
         }
@@ -312,7 +312,7 @@
         uint8_t* buf = reinterpret_cast<uint8_t*>(mmap(NULL, fileSize,
                 PROT_READ, MAP_PRIVATE, fd, 0));
         if (buf == MAP_FAILED) {
-            LOGE("error mmaping cache file: %s (%d)", strerror(errno),
+            ALOGE("error mmaping cache file: %s (%d)", strerror(errno),
                     errno);
             close(fd);
             return;
@@ -321,13 +321,13 @@
         // Check the file magic and CRC
         size_t cacheSize = fileSize - headerSize;
         if (memcmp(buf, cacheFileMagic, 4) != 0) {
-            LOGE("cache file has bad mojo");
+            ALOGE("cache file has bad mojo");
             close(fd);
             return;
         }
         uint32_t* crc = reinterpret_cast<uint32_t*>(buf + 4);
         if (crc32c(buf + headerSize, cacheSize) != *crc) {
-            LOGE("cache file failed CRC check");
+            ALOGE("cache file failed CRC check");
             close(fd);
             return;
         }
@@ -335,7 +335,7 @@
         status_t err = mBlobCache->unflatten(buf + headerSize, cacheSize, NULL,
                 0);
         if (err != OK) {
-            LOGE("error reading cache contents: %s (%d)", strerror(-err),
+            ALOGE("error reading cache contents: %s (%d)", strerror(-err),
                     -err);
             munmap(buf, fileSize);
             close(fd);
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp
index ad5bdfc..53eaf9a 100644
--- a/opengl/libs/EGL/egl_display.cpp
+++ b/opengl/libs/EGL/egl_display.cpp
@@ -201,7 +201,7 @@
                     EGL_CLIENT_APIS);
 
         } else {
-            LOGW("%d: eglInitialize(%p) failed (%s)", i, idpy,
+            ALOGW("%d: eglInitialize(%p) failed (%s)", i, idpy,
                     egl_tls_t::egl_strerror(cnx->egl.eglGetError()));
         }
     }
@@ -309,7 +309,7 @@
         egl_connection_t* const cnx = &gEGLImpl[i];
         if (cnx->dso && disp[i].state == egl_display_t::INITIALIZED) {
             if (cnx->egl.eglTerminate(disp[i].dpy) == EGL_FALSE) {
-                LOGW("%d: eglTerminate(%p) failed (%s)", i, disp[i].dpy,
+                ALOGW("%d: eglTerminate(%p) failed (%s)", i, disp[i].dpy,
                         egl_tls_t::egl_strerror(cnx->egl.eglGetError()));
             }
             // REVISIT: it's unclear what to do if eglTerminate() fails
@@ -327,7 +327,7 @@
     // there are no reference to them, it which case, we're free to
     // delete them.
     size_t count = objects.size();
-    LOGW_IF(count, "eglTerminate() called w/ %d objects remaining", count);
+    ALOGW_IF(count, "eglTerminate() called w/ %d objects remaining", count);
     for (size_t i=0 ; i<count ; i++) {
         egl_object_t* o = objects.itemAt(i);
         o->destroy();
diff --git a/opengl/libs/EGL/egl_object.cpp b/opengl/libs/EGL/egl_object.cpp
index 20cdc7e..26e8c3e 100644
--- a/opengl/libs/EGL/egl_object.cpp
+++ b/opengl/libs/EGL/egl_object.cpp
@@ -45,7 +45,7 @@
     display->removeObject(this);
     if (decRef() == 1) {
         // shouldn't happen because this is called from LocalRef
-        LOGE("egl_object_t::terminate() removed the last reference!");
+        ALOGE("egl_object_t::terminate() removed the last reference!");
     }
 }
 
diff --git a/opengl/libs/EGL/egl_object.h b/opengl/libs/EGL/egl_object.h
index df1b261..7106fa5 100644
--- a/opengl/libs/EGL/egl_object.h
+++ b/opengl/libs/EGL/egl_object.h
@@ -110,7 +110,7 @@
     if (ref) {
         if (ref->decRef() == 1) {
             // shouldn't happen because this is called from LocalRef
-            LOGE("LocalRef::release() removed the last reference!");
+            ALOGE("LocalRef::release() removed the last reference!");
         }
     }
 }
@@ -131,7 +131,7 @@
         if (window != NULL) {
             native_window_set_buffers_format(window, 0);
             if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) {
-                LOGW("EGLNativeWindowType %p disconnect failed", window);
+                ALOGW("EGLNativeWindowType %p disconnect failed", window);
             }
         }
     }
diff --git a/opengl/libs/EGL/egl_tls.cpp b/opengl/libs/EGL/egl_tls.cpp
index 6946ecd..41cfae1 100644
--- a/opengl/libs/EGL/egl_tls.cpp
+++ b/opengl/libs/EGL/egl_tls.cpp
@@ -73,7 +73,7 @@
     egl_tls_t* tls = getTLS();
     if (tls->error != error) {
         if (!quiet) {
-            LOGE("%s:%d error %x (%s)",
+            ALOGE("%s:%d error %x (%s)",
                     caller, line, error, egl_strerror(error));
             char value[PROPERTY_VALUE_MAX];
             property_get("debug.egl.callstack", value, "0");
diff --git a/opengl/libs/GLES2_dbg/src/dbgcontext.cpp b/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
index e525d02..7bbaa18 100644
--- a/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
+++ b/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
@@ -100,7 +100,7 @@
     case GL_UNSIGNED_BYTE:
         break;
     default:
-        LOGE("GetBytesPerPixel: unknown type %x", type);
+        ALOGE("GetBytesPerPixel: unknown type %x", type);
     }
 
     switch (format) {
@@ -115,7 +115,7 @@
     case 0x80E1:   // GL_BGRA_EXT
         return 4;
     default:
-        LOGE("GetBytesPerPixel: unknown format %x", format);
+        ALOGE("GetBytesPerPixel: unknown format %x", format);
     }
 
     return 1; // in doubt...
diff --git a/opengl/libs/GLES_CM/gl.cpp b/opengl/libs/GLES_CM/gl.cpp
index ee29f12..2d31a35 100644
--- a/opengl/libs/GLES_CM/gl.cpp
+++ b/opengl/libs/GLES_CM/gl.cpp
@@ -132,7 +132,7 @@
     
         #define CHECK_GL_ERRORS(_api) \
             do { GLint err = glGetError(); \
-                LOGE_IF(err != GL_NO_ERROR, "%s failed (0x%04X)", #_api, err); \
+                ALOGE_IF(err != GL_NO_ERROR, "%s failed (0x%04X)", #_api, err); \
             } while(false);
 
     #else
diff --git a/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp b/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp
index 0fe97ce..c237d75 100644
--- a/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp
+++ b/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp
@@ -84,7 +84,7 @@
 
     int clientSocket = gltrace::acceptClientConnection(port);
     if (clientSocket < 0) {
-        LOGE("Error creating GLTrace server socket. Quitting application.");
+        ALOGE("Error creating GLTrace server socket. Quitting application.");
         exit(-1);
     }
 
diff --git a/opengl/libs/GLES_trace/src/gltrace_fixup.cpp b/opengl/libs/GLES_trace/src/gltrace_fixup.cpp
index 5a439e3..5220aa4 100644
--- a/opengl/libs/GLES_trace/src/gltrace_fixup.cpp
+++ b/opengl/libs/GLES_trace/src/gltrace_fixup.cpp
@@ -51,7 +51,7 @@
     case GL_UNSIGNED_BYTE:
         break;
     default:
-        LOGE("GetBytesPerPixel: unknown type %x", type);
+        ALOGE("GetBytesPerPixel: unknown type %x", type);
     }
 
     switch (format) {
@@ -66,7 +66,7 @@
     case 0x80E1: // GL_BGRA_EXT
         return 4;
     default:
-        LOGE("GetBytesPerPixel: unknown format %x", format);
+        ALOGE("GetBytesPerPixel: unknown format %x", format);
     }
 
     return 1;   // in doubt...
@@ -139,7 +139,7 @@
     if (data != NULL) {
         arg_data->add_rawbytes(data, bytesPerTexel * width * height);
     } else {
-        LOGE("fixup_glTexImage2D: image data is NULL.\n");
+        ALOGE("fixup_glTexImage2D: image data is NULL.\n");
         arg_data->set_type(GLMessage::DataType::VOID);
         // FIXME:
         // This will create the texture, but it will be uninitialized. 
diff --git a/opengl/libs/GLES_trace/src/gltrace_transport.cpp b/opengl/libs/GLES_trace/src/gltrace_transport.cpp
index 7758e48..ce3fae5 100644
--- a/opengl/libs/GLES_trace/src/gltrace_transport.cpp
+++ b/opengl/libs/GLES_trace/src/gltrace_transport.cpp
@@ -31,7 +31,7 @@
 int acceptClientConnection(int serverPort) {
     int serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
     if (serverSocket < 0) {
-        LOGE("Error (%d) while creating socket. Check if app has network permissions.",
+        ALOGE("Error (%d) while creating socket. Check if app has network permissions.",
                                                                             serverSocket);
         return -1;
     }
@@ -45,13 +45,13 @@
     socklen_t sockaddr_len = sizeof(sockaddr_in);
     if (bind(serverSocket, (struct sockaddr *) &server, sizeof(server)) < 0) {
         close(serverSocket);
-        LOGE("Failed to bind the server socket");
+        ALOGE("Failed to bind the server socket");
         return -1;
     }
 
     if (listen(serverSocket, 1) < 0) {
         close(serverSocket);
-        LOGE("Failed to listen on server socket");
+        ALOGE("Failed to listen on server socket");
         return -1;
     }
 
@@ -60,7 +60,7 @@
     int clientSocket = accept(serverSocket, (struct sockaddr *)&client, &sockaddr_len);
     if (clientSocket < 0) {
         close(serverSocket);
-        LOGE("Failed to accept client connection");
+        ALOGE("Failed to accept client connection");
         return -1;
     }
 
diff --git a/opengl/tests/gl2_jni/jni/gl_code.cpp b/opengl/tests/gl2_jni/jni/gl_code.cpp
index c2fabe6..fa6bd93 100644
--- a/opengl/tests/gl2_jni/jni/gl_code.cpp
+++ b/opengl/tests/gl2_jni/jni/gl_code.cpp
@@ -14,13 +14,13 @@
 
 static void printGLString(const char *name, GLenum s) {
     const char *v = (const char *) glGetString(s);
-    LOGI("GL %s = %s\n", name, v);
+    ALOGI("GL %s = %s\n", name, v);
 }
 
 static void checkGlError(const char* op) {
     for (GLint error = glGetError(); error; error
             = glGetError()) {
-        LOGI("after %s() glError (0x%x)\n", op, error);
+        ALOGI("after %s() glError (0x%x)\n", op, error);
     }
 }
 
@@ -48,7 +48,7 @@
                 char* buf = (char*) malloc(infoLen);
                 if (buf) {
                     glGetShaderInfoLog(shader, infoLen, NULL, buf);
-                    LOGE("Could not compile shader %d:\n%s\n",
+                    ALOGE("Could not compile shader %d:\n%s\n",
                             shaderType, buf);
                     free(buf);
                 }
@@ -87,7 +87,7 @@
                 char* buf = (char*) malloc(bufLength);
                 if (buf) {
                     glGetProgramInfoLog(program, bufLength, NULL, buf);
-                    LOGE("Could not link program:\n%s\n", buf);
+                    ALOGE("Could not link program:\n%s\n", buf);
                     free(buf);
                 }
             }
@@ -107,15 +107,15 @@
     printGLString("Renderer", GL_RENDERER);
     printGLString("Extensions", GL_EXTENSIONS);
 
-    LOGI("setupGraphics(%d, %d)", w, h);
+    ALOGI("setupGraphics(%d, %d)", w, h);
     gProgram = createProgram(gVertexShader, gFragmentShader);
     if (!gProgram) {
-        LOGE("Could not create program.");
+        ALOGE("Could not create program.");
         return false;
     }
     gvPositionHandle = glGetAttribLocation(gProgram, "vPosition");
     checkGlError("glGetAttribLocation");
-    LOGI("glGetAttribLocation(\"vPosition\") = %d\n",
+    ALOGI("glGetAttribLocation(\"vPosition\") = %d\n",
             gvPositionHandle);
 
     glViewport(0, 0, w, h);
diff --git a/opengl/tests/gl_jni/jni/gl_code.cpp b/opengl/tests/gl_jni/jni/gl_code.cpp
index ef66841..cf86020 100644
--- a/opengl/tests/gl_jni/jni/gl_code.cpp
+++ b/opengl/tests/gl_jni/jni/gl_code.cpp
@@ -18,7 +18,7 @@
 
 static void printGLString(const char *name, GLenum s) {
     const char *v = (const char *) glGetString(s);
-    LOGI("GL %s = %s\n", name, v);
+    ALOGI("GL %s = %s\n", name, v);
 }
 
 static void gluLookAt(float eyeX, float eyeY, float eyeZ,
diff --git a/opengl/tests/gl_perf/fill_common.cpp b/opengl/tests/gl_perf/fill_common.cpp
index a069f67..389381f 100644
--- a/opengl/tests/gl_perf/fill_common.cpp
+++ b/opengl/tests/gl_perf/fill_common.cpp
@@ -26,7 +26,7 @@
 static void checkGlError(const char* op) {
     for (GLint error = glGetError(); error; error
             = glGetError()) {
-        LOGE("after %s() glError (0x%x)\n", op, error);
+        ALOGE("after %s() glError (0x%x)\n", op, error);
     }
 }
 
@@ -44,7 +44,7 @@
                 char* buf = (char*) malloc(infoLen);
                 if (buf) {
                     glGetShaderInfoLog(shader, infoLen, NULL, buf);
-                    LOGE("Could not compile shader %d:\n%s\n", shaderType, buf);
+                    ALOGE("Could not compile shader %d:\n%s\n", shaderType, buf);
                     free(buf);
                 }
                 glDeleteShader(shader);
@@ -94,7 +94,7 @@
                 char* buf = (char*) malloc(bufLength);
                 if (buf) {
                     glGetProgramInfoLog(program, bufLength, NULL, buf);
-                    LOGE("Could not link program:\n%s\n", buf);
+                    ALOGE("Could not link program:\n%s\n", buf);
                     free(buf);
                 }
             }
@@ -132,7 +132,7 @@
     } else {
         printf("%s, %f, %f\n", gCurrentTestName, mpps, dc60);
     }
-    LOGI("%s, %f, %f\r\n", gCurrentTestName, mpps, dc60);
+    ALOGI("%s, %f, %f\r\n", gCurrentTestName, mpps, dc60);
 }
 
 
diff --git a/opengl/tests/gl_perfapp/jni/gl_code.cpp b/opengl/tests/gl_perfapp/jni/gl_code.cpp
index f993371..2f04183 100644
--- a/opengl/tests/gl_perfapp/jni/gl_code.cpp
+++ b/opengl/tests/gl_perfapp/jni/gl_code.cpp
@@ -43,7 +43,7 @@
     int texSize = ((stateClock >> 1) & 0x1) + 1;
 
     if (testNum >= gFragmentTestCount) {
-       LOGI("done\n");
+       ALOGI("done\n");
        if (fOut) {
            fclose(fOut);
            fOut = NULL;
@@ -52,7 +52,7 @@
        return;
     }
 
-    // LOGI("doTest %d %d %d\n", texCount, extraMath, testSubState);
+    // ALOGI("doTest %d %d %d\n", texCount, extraMath, testSubState);
 
 //        for (uint32_t num = 0; num < gFragmentTestCount; num++) {
     doSingleTest(testNum, texSize);
@@ -74,17 +74,17 @@
             genTextures();
             const char* fileName = "/sdcard/glperf.csv";
             if (fOut != NULL) {
-                 LOGI("Closing partially written output.n");
+                 ALOGI("Closing partially written output.n");
                  fclose(fOut);
                  fOut = NULL;
             }
-            LOGI("Writing to: %s\n",fileName);
+            ALOGI("Writing to: %s\n",fileName);
             fOut = fopen(fileName, "w");
             if (fOut == NULL) {
-                LOGE("Could not open: %s\n", fileName);
+                ALOGE("Could not open: %s\n", fileName);
             }
 
-            LOGI("\nvarColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\n");
+            ALOGI("\nvarColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\n");
             if (fOut) fprintf(fOut,"varColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\r\n");
     }
 }
diff --git a/opengl/tests/gldual/jni/gl_code.cpp b/opengl/tests/gldual/jni/gl_code.cpp
index f1f0a1f..22867ed 100644
--- a/opengl/tests/gldual/jni/gl_code.cpp
+++ b/opengl/tests/gldual/jni/gl_code.cpp
@@ -14,13 +14,13 @@
 
 static void printGLString(const char *name, GLenum s) {
     const char *v = (const char *) glGetString(s);
-    LOGI("GL %s = %s\n", name, v);
+    ALOGI("GL %s = %s\n", name, v);
 }
 
 static void checkGlError(const char* op) {
     for (GLint error = glGetError(); error; error
             = glGetError()) {
-        LOGI("after %s() glError (0x%x)\n", op, error);
+        ALOGI("after %s() glError (0x%x)\n", op, error);
     }
 }
 
@@ -48,7 +48,7 @@
                 char* buf = (char*) malloc(infoLen);
                 if (buf) {
                     glGetShaderInfoLog(shader, infoLen, NULL, buf);
-                    LOGE("Could not compile shader %d:\n%s\n",
+                    ALOGE("Could not compile shader %d:\n%s\n",
                             shaderType, buf);
                     free(buf);
                 }
@@ -87,7 +87,7 @@
                 char* buf = (char*) malloc(bufLength);
                 if (buf) {
                     glGetProgramInfoLog(program, bufLength, NULL, buf);
-                    LOGE("Could not link program:\n%s\n", buf);
+                    ALOGE("Could not link program:\n%s\n", buf);
                     free(buf);
                 }
             }
@@ -107,15 +107,15 @@
     printGLString("Renderer", GL_RENDERER);
     printGLString("Extensions", GL_EXTENSIONS);
 
-    LOGI("setupGraphics(%d, %d)", w, h);
+    ALOGI("setupGraphics(%d, %d)", w, h);
     gProgram = createProgram(gVertexShader, gFragmentShader);
     if (!gProgram) {
-        LOGE("Could not create program.");
+        ALOGE("Could not create program.");
         return false;
     }
     gvPositionHandle = glGetAttribLocation(gProgram, "vPosition");
     checkGlError("glGetAttribLocation");
-    LOGI("glGetAttribLocation(\"vPosition\") = %d\n",
+    ALOGI("glGetAttribLocation(\"vPosition\") = %d\n",
             gvPositionHandle);
 
     glViewport(0, 0, w, h);
diff --git a/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp b/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp
index 6579f95..7390bb7 100644
--- a/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp
+++ b/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp
@@ -39,7 +39,7 @@
 
     int dirfd = open(path, O_DIRECTORY, O_RDONLY);
     if (dirfd < 0) {
-        LOGI("error opening: %s: %s", path, strerror(errno));
+        ALOGI("error opening: %s: %s", path, strerror(errno));
     } else {
         ret = calculate_dir_size(dirfd);
         close(dirfd);
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 2232995..c4a92f7 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -358,7 +358,15 @@
             dims[0] = Math.abs(dims[0]);
             dims[1] = Math.abs(dims[1]);
         }
+
+        // Take the screenshot
         mScreenBitmap = Surface.screenshot((int) dims[0], (int) dims[1]);
+        if (mScreenBitmap == null) {
+            notifyScreenshotError(mContext, mNotificationManager);
+            finisher.run();
+            return;
+        }
+
         if (requiresRotation) {
             // Rotate the screenshot to the current orientation
             Bitmap ss = Bitmap.createBitmap(mDisplayMetrics.widthPixels,
@@ -372,13 +380,6 @@
             mScreenBitmap = ss;
         }
 
-        // If we couldn't take the screenshot, notify the user
-        if (mScreenBitmap == null) {
-            notifyScreenshotError(mContext, mNotificationManager);
-            finisher.run();
-            return;
-        }
-
         // Optimizations
         mScreenBitmap.setHasAlpha(false);
         mScreenBitmap.prepareToDraw();
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
index b514689..52d6d24 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -350,6 +350,12 @@
             mScreenOn = false;
             if (DEBUG) Log.d(TAG, "onScreenTurnedOff(" + why + ")");
 
+            // Lock immediately based on setting if secure (user has a pin/pattern/password).
+            // This also "locks" the device when not secure to provide easy access to the
+            // camera while preventing unwanted input.
+            final boolean lockImmediately =
+                mLockPatternUtils.getPowerButtonInstantlyLocks() || !mLockPatternUtils.isSecure();
+
             if (mExitSecureCallback != null) {
                 if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled");
                 mExitSecureCallback.onKeyguardExitResult(false);
@@ -360,8 +366,10 @@
             } else if (mShowing) {
                 notifyScreenOffLocked();
                 resetStateLocked();
-            } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT) {
-                // if the screen turned off because of timeout, set an alarm
+            } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT
+                   || (why == WindowManagerPolicy.OFF_BECAUSE_OF_USER && !lockImmediately)) {
+                // if the screen turned off because of timeout or the user hit the power button
+                // and we don't need to lock immediately, set an alarm
                 // to enable it a little bit later (i.e, give the user a chance
                 // to turn the screen back on within a certain window without
                 // having to unlock the screen)
@@ -400,8 +408,7 @@
                     intent.putExtra("seq", mDelayedShowingSequence);
                     PendingIntent sender = PendingIntent.getBroadcast(mContext,
                             0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
-                    mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when,
-                            sender);
+                    mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender);
                     if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = "
                                      + mDelayedShowingSequence);
                 }
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 7939802..b238979 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -40,6 +40,7 @@
 #include <media/AudioTrack.h>
 #include <media/AudioRecord.h>
 #include <media/IMediaPlayerService.h>
+#include <media/IMediaDeathNotifier.h>
 
 #include <private/media/AudioTrackShared.h>
 #include <private/media/AudioEffectShared.h>
@@ -105,24 +106,22 @@
 static bool recordingAllowed() {
     if (getpid() == IPCThreadState::self()->getCallingPid()) return true;
     bool ok = checkCallingPermission(String16("android.permission.RECORD_AUDIO"));
-    if (!ok) LOGE("Request requires android.permission.RECORD_AUDIO");
+    if (!ok) ALOGE("Request requires android.permission.RECORD_AUDIO");
     return ok;
 }
 
 static bool settingsAllowed() {
     if (getpid() == IPCThreadState::self()->getCallingPid()) return true;
     bool ok = checkCallingPermission(String16("android.permission.MODIFY_AUDIO_SETTINGS"));
-    if (!ok) LOGE("Request requires android.permission.MODIFY_AUDIO_SETTINGS");
+    if (!ok) ALOGE("Request requires android.permission.MODIFY_AUDIO_SETTINGS");
     return ok;
 }
 
 // To collect the amplifier usage
 static void addBatteryData(uint32_t params) {
-    sp<IBinder> binder =
-        defaultServiceManager()->getService(String16("media.player"));
-    sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(binder);
-    if (service.get() == NULL) {
-        LOGW("Cannot connect to the MediaPlayerService for battery tracking");
+    sp<IMediaPlayerService> service = IMediaDeathNotifier::getMediaPlayerService();
+    if (service == NULL) {
+        // it already logged
         return;
     }
 
@@ -139,7 +138,7 @@
         goto out;
 
     rc = audio_hw_device_open(*mod, dev);
-    LOGE_IF(rc, "couldn't open audio hw device in %s.%s (%s)",
+    ALOGE_IF(rc, "couldn't open audio hw device in %s.%s (%s)",
             AUDIO_HARDWARE_MODULE_ID, if_name, strerror(-rc));
     if (rc)
         goto out;
@@ -185,13 +184,13 @@
         if (rc)
             continue;
 
-        LOGI("Loaded %s audio interface from %s (%s)", audio_interfaces[i],
+        ALOGI("Loaded %s audio interface from %s (%s)", audio_interfaces[i],
              mod->name, mod->id);
         mAudioHwDevs.push(dev);
 
         if (!mPrimaryHardwareDev) {
             mPrimaryHardwareDev = dev;
-            LOGI("Using '%s' (%s.%s) as the primary audio interface",
+            ALOGI("Using '%s' (%s.%s) as the primary audio interface",
                  mod->name, mod->id, audio_interfaces[i]);
         }
     }
@@ -199,7 +198,7 @@
     mHardwareStatus = AUDIO_HW_INIT;
 
     if (!mPrimaryHardwareDev || mAudioHwDevs.size() == 0) {
-        LOGE("Primary audio interface not found");
+        ALOGE("Primary audio interface not found");
         return;
     }
 
@@ -400,7 +399,7 @@
     int lSessionId;
 
     if (streamType >= AUDIO_STREAM_CNT) {
-        LOGE("createTrack() invalid stream type %d", streamType);
+        ALOGE("createTrack() invalid stream type %d", streamType);
         lStatus = BAD_VALUE;
         goto Exit;
     }
@@ -410,7 +409,7 @@
         PlaybackThread *thread = checkPlaybackThread_l(output);
         PlaybackThread *effectThread = NULL;
         if (thread == NULL) {
-            LOGE("unknown output thread");
+            ALOGE("unknown output thread");
             lStatus = BAD_VALUE;
             goto Exit;
         }
@@ -432,7 +431,7 @@
                     // prevent same audio session on different output threads
                     uint32_t sessions = t->hasAudioSession(*sessionId);
                     if (sessions & PlaybackThread::TRACK_SESSION) {
-                        LOGE("createTrack() session ID %d already in use", *sessionId);
+                        ALOGE("createTrack() session ID %d already in use", *sessionId);
                         lStatus = BAD_VALUE;
                         goto Exit;
                     }
@@ -484,7 +483,7 @@
     Mutex::Autolock _l(mLock);
     PlaybackThread *thread = checkPlaybackThread_l(output);
     if (thread == NULL) {
-        LOGW("sampleRate() unknown thread %d", output);
+        ALOGW("sampleRate() unknown thread %d", output);
         return 0;
     }
     return thread->sampleRate();
@@ -495,7 +494,7 @@
     Mutex::Autolock _l(mLock);
     PlaybackThread *thread = checkPlaybackThread_l(output);
     if (thread == NULL) {
-        LOGW("channelCount() unknown thread %d", output);
+        ALOGW("channelCount() unknown thread %d", output);
         return 0;
     }
     return thread->channelCount();
@@ -506,7 +505,7 @@
     Mutex::Autolock _l(mLock);
     PlaybackThread *thread = checkPlaybackThread_l(output);
     if (thread == NULL) {
-        LOGW("format() unknown thread %d", output);
+        ALOGW("format() unknown thread %d", output);
         return 0;
     }
     return thread->format();
@@ -517,7 +516,7 @@
     Mutex::Autolock _l(mLock);
     PlaybackThread *thread = checkPlaybackThread_l(output);
     if (thread == NULL) {
-        LOGW("frameCount() unknown thread %d", output);
+        ALOGW("frameCount() unknown thread %d", output);
         return 0;
     }
     return thread->frameCount();
@@ -528,7 +527,7 @@
     Mutex::Autolock _l(mLock);
     PlaybackThread *thread = checkPlaybackThread_l(output);
     if (thread == NULL) {
-        LOGW("latency() unknown thread %d", output);
+        ALOGW("latency() unknown thread %d", output);
         return 0;
     }
     return thread->latency();
@@ -576,7 +575,7 @@
         return PERMISSION_DENIED;
     }
     if ((mode < 0) || (mode >= AUDIO_MODE_CNT)) {
-        LOGW("Illegal value: setMode(%d)", mode);
+        ALOGW("Illegal value: setMode(%d)", mode);
         return BAD_VALUE;
     }
 
@@ -663,7 +662,7 @@
     }
 
     if (stream < 0 || uint32_t(stream) >= AUDIO_STREAM_CNT) {
-        LOGE("setStreamVolume() invalid stream %d", stream);
+        ALOGE("setStreamVolume() invalid stream %d", stream);
         return BAD_VALUE;
     }
 
@@ -698,7 +697,7 @@
 
     if (stream < 0 || uint32_t(stream) >= AUDIO_STREAM_CNT ||
         uint32_t(stream) == AUDIO_STREAM_ENFORCED_AUDIBLE) {
-        LOGE("setStreamMute() invalid stream %d", stream);
+        ALOGE("setStreamMute() invalid stream %d", stream);
         return BAD_VALUE;
     }
 
@@ -1012,7 +1011,7 @@
 
     ALOGV("ThreadBase::exit");
     {
-        AutoMutex lock(&mLock);
+        AutoMutex lock(mLock);
         mExiting = true;
         requestExit();
         mWaitWorkCV.signal();
@@ -1180,7 +1179,7 @@
         sp<IBinder> binder =
             defaultServiceManager()->checkService(String16("power"));
         if (binder == 0) {
-            LOGW("Thread %s cannot connect to the power manager service", mName);
+            ALOGW("Thread %s cannot connect to the power manager service", mName);
         } else {
             mPowerManager = interface_cast<IPowerManager>(binder);
             binder->linkToDeath(mDeathRecipient);
@@ -1228,7 +1227,7 @@
     if (thread != 0) {
         thread->clearPowerManager();
     }
-    LOGW("power manager service died !!!");
+    ALOGW("power manager service died !!!");
 }
 
 void AudioFlinger::ThreadBase::setEffectSuspended(
@@ -1469,9 +1468,9 @@
 {
     status_t status = initCheck();
     if (status == NO_ERROR) {
-        LOGI("AudioFlinger's thread %p ready to run", this);
+        ALOGI("AudioFlinger's thread %p ready to run", this);
     } else {
-        LOGE("No working audio driver found.");
+        ALOGE("No working audio driver found.");
     }
     return status;
 }
@@ -1499,7 +1498,7 @@
     if (mType == DIRECT) {
         if ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM) {
             if (sampleRate != mSampleRate || format != mFormat || channelMask != mChannelMask) {
-                LOGE("createTrack_l() Bad parameter: sampleRate %d format %d, channelMask 0x%08x \""
+                ALOGE("createTrack_l() Bad parameter: sampleRate %d format %d, channelMask 0x%08x \""
                         "for output %p with format %d",
                         sampleRate, format, channelMask, mOutput, mFormat);
                 lStatus = BAD_VALUE;
@@ -1509,7 +1508,7 @@
     } else {
         // Resampler implementation limits input sampling rate to 2 x output sampling rate.
         if (sampleRate > mSampleRate*2) {
-            LOGE("Sample rate out of range: %d mSampleRate %d", sampleRate, mSampleRate);
+            ALOGE("Sample rate out of range: %d mSampleRate %d", sampleRate, mSampleRate);
             lStatus = BAD_VALUE;
             goto Exit;
         }
@@ -1517,7 +1516,7 @@
 
     lStatus = initCheck();
     if (lStatus != NO_ERROR) {
-        LOGE("Audio driver not initialized.");
+        ALOGE("Audio driver not initialized.");
         goto Exit;
     }
 
@@ -1534,7 +1533,7 @@
             if (t != 0) {
                 uint32_t actual = AudioSystem::getStrategyForStream((audio_stream_type_t)t->type());
                 if (sessionId == t->sessionId() && strategy != actual) {
-                    LOGE("createTrack_l() mismatched strategy; expected %u but found %u",
+                    ALOGE("createTrack_l() mismatched strategy; expected %u but found %u",
                             strategy, actual);
                     lStatus = BAD_VALUE;
                     goto Exit;
@@ -1561,7 +1560,7 @@
         // invalidate track immediately if the stream type was moved to another thread since
         // createTrack() was called by the client process.
         if (!mStreamTypes[streamType].valid) {
-            LOGW("createTrack_l() on thread %p: invalidating track on stream %d",
+            ALOGW("createTrack_l() on thread %p: invalidating track on stream %d",
                  this, streamType);
             android_atomic_or(CBLK_INVALID_ON, &track->mCblk->flags);
         }
@@ -1847,7 +1846,7 @@
 
     // FIXME - Current mixer implementation only supports stereo output
     if (mChannelCount == 1) {
-        LOGE("Invalid audio hardware channel count");
+        ALOGE("Invalid audio hardware channel count");
     }
 }
 
@@ -1897,7 +1896,7 @@
                 double minimum = stats.minimum();
                 double maximum = stats.maximum();
                 cpu.resetStatistics();
-                LOGI("CPU usage over past %.1f secs (%u mixer loops at %.1f mean ms per loop):\n  us per mix loop: mean=%.0f stddev=%.0f min=%.0f max=%.0f\n  %% of wall: mean=%.1f stddev=%.1f min=%.1f max=%.1f",
+                ALOGI("CPU usage over past %.1f secs (%u mixer loops at %.1f mean ms per loop):\n  us per mix loop: mean=%.0f stddev=%.0f min=%.0f max=%.0f\n  %% of wall: mean=%.1f stddev=%.1f min=%.1f max=%.1f",
                         elapsed * .000000001, n, perLoop * .000001,
                         mean * .001,
                         stddev * .001,
@@ -2038,7 +2037,7 @@
             if (!mStandby && delta > maxPeriod) {
                 mNumDelayedWrites++;
                 if ((now - lastWarning) > kWarningThrottleNs) {
-                    LOGW("write blocked for %llu msecs, %d delayed writes, thread %p",
+                    ALOGW("write blocked for %llu msecs, %d delayed writes, thread %p",
                             ns2ms(delta), mNumDelayedWrites, this);
                     lastWarning = now;
                 }
@@ -2102,12 +2101,13 @@
         sp<Track> t = activeTracks[i].promote();
         if (t == 0) continue;
 
+        // this const just means the local variable doesn't change
         Track* const track = t.get();
         audio_track_cblk_t* cblk = track->cblk();
 
         // The first time a track is added we wait
         // for all its buffers to be filled before processing it
-        mAudioMixer->setActiveTrack(track->name());
+        int name = track->name();
         // make sure that we have enough frames to mix one full buffer.
         // enforce this condition only once to enable draining the buffer in case the client
         // app does not call stop() and relies on underrun to stop:
@@ -2127,13 +2127,13 @@
                 // the minimum track buffer size is normally twice the number of frames necessary
                 // to fill one buffer and the resampler should not leave more than one buffer worth
                 // of unreleased frames after each pass, but just in case...
-                LOG_ASSERT(minFrames <= cblk->frameCount);
+                ALOG_ASSERT(minFrames <= cblk->frameCount);
             }
         }
         if ((cblk->framesReady() >= minFrames) && track->isReady() &&
                 !track->isPaused() && !track->isTerminated())
         {
-            //ALOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);
+            //ALOGV("track %d u=%08x, s=%08x [OK] on thread %p", name, cblk->user, cblk->server, this);
 
             mixedTracks++;
 
@@ -2146,8 +2146,8 @@
                 if (chain != 0) {
                     tracksWithEffect++;
                 } else {
-                    LOGW("prepareTracks_l(): track %08x attached to effect but no chain found on session %d",
-                            track->name(), track->sessionId());
+                    ALOGW("prepareTracks_l(): track %d attached to effect but no chain found on session %d",
+                            name, track->sessionId());
                 }
             }
 
@@ -2160,7 +2160,7 @@
                     track->mState = TrackBase::ACTIVE;
                     param = AudioMixer::RAMP_VOLUME;
                 }
-                mAudioMixer->setParameter(AudioMixer::RESAMPLE, AudioMixer::RESET, NULL);
+                mAudioMixer->setParameter(name, AudioMixer::RESAMPLE, AudioMixer::RESET, NULL);
             } else if (cblk->server != 0) {
                 // If the track is stopped before the first frame was mixed,
                 // do not apply ramp
@@ -2212,26 +2212,31 @@
             aux = int16_t(va);
 
             // XXX: these things DON'T need to be done each time
-            mAudioMixer->setBufferProvider(track);
-            mAudioMixer->enable();
+            mAudioMixer->setBufferProvider(name, track);
+            mAudioMixer->enable(name);
 
-            mAudioMixer->setParameter(param, AudioMixer::VOLUME0, (void *)left);
-            mAudioMixer->setParameter(param, AudioMixer::VOLUME1, (void *)right);
-            mAudioMixer->setParameter(param, AudioMixer::AUXLEVEL, (void *)aux);
+            mAudioMixer->setParameter(name, param, AudioMixer::VOLUME0, (void *)left);
+            mAudioMixer->setParameter(name, param, AudioMixer::VOLUME1, (void *)right);
+            mAudioMixer->setParameter(name, param, AudioMixer::AUXLEVEL, (void *)aux);
             mAudioMixer->setParameter(
+                name,
                 AudioMixer::TRACK,
                 AudioMixer::FORMAT, (void *)track->format());
             mAudioMixer->setParameter(
+                name,
                 AudioMixer::TRACK,
                 AudioMixer::CHANNEL_MASK, (void *)track->channelMask());
             mAudioMixer->setParameter(
+                name,
                 AudioMixer::RESAMPLE,
                 AudioMixer::SAMPLE_RATE,
                 (void *)(cblk->sampleRate));
             mAudioMixer->setParameter(
+                name,
                 AudioMixer::TRACK,
                 AudioMixer::MAIN_BUFFER, (void *)track->mainBuffer());
             mAudioMixer->setParameter(
+                name,
                 AudioMixer::TRACK,
                 AudioMixer::AUX_BUFFER, (void *)track->auxBuffer());
 
@@ -2239,7 +2244,7 @@
             track->mRetryCount = kMaxTrackRetries;
             mixerStatus = MIXER_TRACKS_READY;
         } else {
-            //ALOGV("track %d u=%08x, s=%08x [NOT READY] on thread %p", track->name(), cblk->user, cblk->server, this);
+            //ALOGV("track %d u=%08x, s=%08x [NOT READY] on thread %p", name, cblk->user, cblk->server, this);
             if (track->isStopped()) {
                 track->reset();
             }
@@ -2251,7 +2256,7 @@
                 // No buffers for this track. Give it a few chances to
                 // fill a buffer, then remove it from active list.
                 if (--(track->mRetryCount) <= 0) {
-                    ALOGV("BUFFER TIMEOUT: remove(%d) from active list on thread %p", track->name(), this);
+                    ALOGV("BUFFER TIMEOUT: remove(%d) from active list on thread %p", name, this);
                     tracksToRemove->add(track);
                     // indicate to client process that the track was disabled because of underrun
                     android_atomic_or(CBLK_DISABLED_ON, &cblk->flags);
@@ -2259,7 +2264,7 @@
                     mixerStatus = MIXER_TRACKS_ENABLED;
                 }
             }
-            mAudioMixer->disable();
+            mAudioMixer->disable(name);
         }
     }
 
@@ -3158,7 +3163,7 @@
     for (size_t i = 0; i < outputTracks.size(); i++) {
         sp <ThreadBase> thread = outputTracks[i]->thread().promote();
         if (thread == 0) {
-            LOGW("DuplicatingThread::outputsReady() could not promote thread on output track %p", outputTracks[i].get());
+            ALOGW("DuplicatingThread::outputsReady() could not promote thread on output track %p", outputTracks[i].get());
             return false;
         }
         PlaybackThread *playbackThread = (PlaybackThread *)thread.get();
@@ -3232,13 +3237,13 @@
                 mBufferEnd = (uint8_t *)mBuffer + bufferSize;
             }
         } else {
-            LOGE("not enough memory for AudioTrack size=%u", size);
+            ALOGE("not enough memory for AudioTrack size=%u", size);
             client->heap()->dump("AudioTrack");
             return;
         }
    } else {
        mCblk = (audio_track_cblk_t *)(new uint8_t[size]);
-       if (mCblk) { // construct the shared structure in-place.
+           // construct the shared structure in-place.
            new(mCblk) audio_track_cblk_t();
            // clear all buffers
            mCblk->frameCount = frameCount;
@@ -3251,7 +3256,6 @@
            // written to buffer (other flags are cleared)
            mCblk->flags = CBLK_UNDERRUN_ON;
            mBufferEnd = (uint8_t *)mBuffer + bufferSize;
-       }
    }
 }
 
@@ -3326,7 +3330,7 @@
     // Check validity of returned pointer in case the track control block would have been corrupted.
     if (bufferStart < mBuffer || bufferStart > bufferEnd || bufferEnd > mBufferEnd ||
         ((unsigned long)bufferStart & (unsigned long)(cblk->frameSize - 1))) {
-        LOGE("TrackBase::getBuffer buffer out of range:\n    start: %p, end %p , mBuffer %p mBufferEnd %p\n    \
+        ALOGE("TrackBase::getBuffer buffer out of range:\n    start: %p, end %p , mBuffer %p mBufferEnd %p\n    \
                 server %d, serverBase %d, user %d, userBase %d",
                 bufferStart, bufferEnd, mBuffer, mBufferEnd,
                 cblk->server, cblk->serverBase, cblk->user, cblk->userBase);
@@ -3362,7 +3366,7 @@
         }
         ALOGV("Track constructor name %d, calling thread %d", mName, IPCThreadState::self()->getCallingPid());
         if (mName < 0) {
-            LOGE("no more track names available");
+            ALOGE("no more track names available");
         }
         mVolume[0] = 1.0f;
         mVolume[1] = 1.0f;
@@ -3789,7 +3793,7 @@
                 mCblk, mBuffer, mCblk->buffers,
                 mCblk->frameCount, mCblk->sampleRate, mChannelMask, mBufferEnd);
     } else {
-        LOGW("Error creating output track on thread %p", playbackThread);
+        ALOGW("Error creating output track on thread %p", playbackThread);
     }
 }
 
@@ -3844,7 +3848,7 @@
                     memset(pInBuffer->raw, 0, startFrames * channelCount * sizeof(int16_t));
                     mBufferQueue.add(pInBuffer);
                 } else {
-                    LOGW ("OutputTrack::write() %p no more buffers in queue", this);
+                    ALOGW ("OutputTrack::write() %p no more buffers in queue", this);
                 }
             }
         }
@@ -3911,7 +3915,7 @@
                 mBufferQueue.add(pInBuffer);
                 ALOGV("OutputTrack::write() %p thread %p adding overflow buffer %d", this, mThread.unsafe_get(), mBufferQueue.size());
             } else {
-                LOGW("OutputTrack::write() %p thread %p no more overflow buffers", mThread.unsafe_get(), this);
+                ALOGW("OutputTrack::write() %p thread %p no more overflow buffers", mThread.unsafe_get(), this);
             }
         }
     }
@@ -4254,7 +4258,7 @@
 status_t AudioFlinger::RecordThread::readyToRun()
 {
     status_t status = initCheck();
-    LOGW_IF(status != NO_ERROR,"RecordThread %p could not initialize", this);
+    ALOGW_IF(status != NO_ERROR,"RecordThread %p could not initialize", this);
     return status;
 }
 
@@ -4374,7 +4378,7 @@
                                 mRsmpInIndex = 0;
                             }
                             if (mBytesRead < 0) {
-                                LOGE("Error reading audio input");
+                                ALOGE("Error reading audio input");
                                 if (mActiveTrack->mState == TrackBase::ACTIVE) {
                                     // Force input into standby so that it tries to
                                     // recover at next read attempt
@@ -4420,7 +4424,7 @@
                 if (!mActiveTrack->setOverflow()) {
                     nsecs_t now = systemTime();
                     if ((now - lastWarning) > kWarningThrottleNs) {
-                        LOGW("RecordThread: buffer overflow");
+                        ALOGW("RecordThread: buffer overflow");
                         lastWarning = now;
                     }
                 }
@@ -4464,7 +4468,7 @@
 
     lStatus = initCheck();
     if (lStatus != NO_ERROR) {
-        LOGE("Audio driver not initialized.");
+        ALOGE("Audio driver not initialized.");
         goto Exit;
     }
 
@@ -4501,7 +4505,7 @@
     sp <ThreadBase> strongMe = this;
     status_t status = NO_ERROR;
     {
-        AutoMutex lock(&mLock);
+        AutoMutex lock(mLock);
         if (mActiveTrack != 0) {
             if (recordTrack != mActiveTrack.get()) {
                 status = -EBUSY;
@@ -4553,7 +4557,7 @@
     ALOGV("RecordThread::stop");
     sp <ThreadBase> strongMe = this;
     {
-        AutoMutex lock(&mLock);
+        AutoMutex lock(mLock);
         if (mActiveTrack != 0 && recordTrack == mActiveTrack.get()) {
             mActiveTrack->mState = TrackBase::PAUSING;
             // do not wait for mStartStopCond if exiting
@@ -4620,7 +4624,7 @@
     if (framesReady == 0) {
         mBytesRead = mInput->stream->read(mInput->stream, mRsmpInBuffer, mInputBytes);
         if (mBytesRead < 0) {
-            LOGE("RecordThread::getNextBuffer() Error reading audio input");
+            ALOGE("RecordThread::getNextBuffer() Error reading audio input");
             if (mActiveTrack->mState == TrackBase::ACTIVE) {
                 // Force input into standby so that it tries to
                 // recover at next read attempt
@@ -4961,7 +4965,7 @@
     MixerThread *thread2 = checkMixerThread_l(output2);
 
     if (thread1 == NULL || thread2 == NULL) {
-        LOGW("openDuplicateOutput() wrong output mixer type for output %d or %d", output1, output2);
+        ALOGW("openDuplicateOutput() wrong output mixer type for output %d or %d", output1, output2);
         return 0;
     }
 
@@ -5157,7 +5161,7 @@
     Mutex::Autolock _l(mLock);
     MixerThread *dstThread = checkMixerThread_l(output);
     if (dstThread == NULL) {
-        LOGW("setStreamOutput() bad output id %d", output);
+        ALOGW("setStreamOutput() bad output id %d", output);
         return BAD_VALUE;
     }
 
@@ -5226,7 +5230,7 @@
             return;
         }
     }
-    LOGW("session id %d not found for pid %d", audioSession, caller);
+    ALOGW("session id %d not found for pid %d", audioSession, caller);
 }
 
 void AudioFlinger::purgeStaleEffects_l() {
@@ -5437,14 +5441,14 @@
             // if uuid is specified, request effect descriptor
             lStatus = EffectGetDescriptor(&pDesc->uuid, &desc);
             if (lStatus < 0) {
-                LOGW("createEffect() error %d from EffectGetDescriptor", lStatus);
+                ALOGW("createEffect() error %d from EffectGetDescriptor", lStatus);
                 goto Exit;
             }
         } else {
             // if uuid is not specified, look for an available implementation
             // of the required type in effect factory
             if (EffectIsNullUuid(&pDesc->type)) {
-                LOGW("createEffect() no effect type");
+                ALOGW("createEffect() no effect type");
                 lStatus = BAD_VALUE;
                 goto Exit;
             }
@@ -5455,13 +5459,13 @@
 
             lStatus = EffectQueryNumberEffects(&numEffects);
             if (lStatus < 0) {
-                LOGW("createEffect() error %d from EffectQueryNumberEffects", lStatus);
+                ALOGW("createEffect() error %d from EffectQueryNumberEffects", lStatus);
                 goto Exit;
             }
             for (uint32_t i = 0; i < numEffects; i++) {
                 lStatus = EffectQueryEffect(i, &desc);
                 if (lStatus < 0) {
-                    LOGW("createEffect() error %d from EffectQueryEffect", lStatus);
+                    ALOGW("createEffect() error %d from EffectQueryEffect", lStatus);
                     continue;
                 }
                 if (memcmp(&desc.type, &pDesc->type, sizeof(effect_uuid_t)) == 0) {
@@ -5478,7 +5482,7 @@
             }
             if (!found) {
                 lStatus = BAD_VALUE;
-                LOGW("createEffect() effect not found");
+                ALOGW("createEffect() effect not found");
                 goto Exit;
             }
             // For same effect type, chose auxiliary version over insert version if
@@ -5539,7 +5543,7 @@
         if (thread == NULL) {
             thread = checkPlaybackThread_l(io);
             if (thread == NULL) {
-                LOGE("createEffect() unknown output thread");
+                ALOGE("createEffect() unknown output thread");
                 lStatus = BAD_VALUE;
                 goto Exit;
             }
@@ -5575,17 +5579,17 @@
             sessionId, srcOutput, dstOutput);
     Mutex::Autolock _l(mLock);
     if (srcOutput == dstOutput) {
-        LOGW("moveEffects() same dst and src outputs %d", dstOutput);
+        ALOGW("moveEffects() same dst and src outputs %d", dstOutput);
         return NO_ERROR;
     }
     PlaybackThread *srcThread = checkPlaybackThread_l(srcOutput);
     if (srcThread == NULL) {
-        LOGW("moveEffects() bad srcOutput %d", srcOutput);
+        ALOGW("moveEffects() bad srcOutput %d", srcOutput);
         return BAD_VALUE;
     }
     PlaybackThread *dstThread = checkPlaybackThread_l(dstOutput);
     if (dstThread == NULL) {
-        LOGW("moveEffects() bad dstOutput %d", dstOutput);
+        ALOGW("moveEffects() bad dstOutput %d", dstOutput);
         return BAD_VALUE;
     }
 
@@ -5607,7 +5611,7 @@
 
     sp<EffectChain> chain = srcThread->getEffectChain_l(sessionId);
     if (chain == 0) {
-        LOGW("moveEffectChain_l() effect chain for session %d not on source thread %p",
+        ALOGW("moveEffectChain_l() effect chain for session %d not on source thread %p",
                 sessionId, srcThread);
         return INVALID_OPERATION;
     }
@@ -5637,7 +5641,7 @@
         if (dstChain == 0) {
             dstChain = effect->chain().promote();
             if (dstChain == 0) {
-                LOGW("moveEffectChain_l() cannot get chain from effect %p", effect.get());
+                ALOGW("moveEffectChain_l() cannot get chain from effect %p", effect.get());
                 srcThread->addEffect_l(effect);
                 return NO_INIT;
             }
@@ -5679,14 +5683,14 @@
 
     lStatus = initCheck();
     if (lStatus != NO_ERROR) {
-        LOGW("createEffect_l() Audio driver not initialized.");
+        ALOGW("createEffect_l() Audio driver not initialized.");
         goto Exit;
     }
 
     // Do not allow effects with session ID 0 on direct output or duplicating threads
     // TODO: add rule for hw accelerated effects on direct outputs with non PCM format
     if (sessionId == AUDIO_SESSION_OUTPUT_MIX && mType != MIXER) {
-        LOGW("createEffect_l() Cannot add auxiliary effect %s to session %d",
+        ALOGW("createEffect_l() Cannot add auxiliary effect %s to session %d",
                 desc->name, sessionId);
         lStatus = BAD_VALUE;
         goto Exit;
@@ -5696,7 +5700,7 @@
             (desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_PRE_PROC) ||
             (mType != RECORD &&
                     (desc->flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_PRE_PROC)) {
-        LOGW("createEffect_l() effect %s (flags %08x) created on wrong thread type %d",
+        ALOGW("createEffect_l() effect %s (flags %08x) created on wrong thread type %d",
                 desc->name, desc->flags, mType);
         lStatus = BAD_VALUE;
         goto Exit;
@@ -5805,7 +5809,7 @@
     ALOGV("addEffect_l() %p chain %p effect %p", this, chain.get(), effect.get());
 
     if (chain->getEffectFromId_l(effect->id()) != 0) {
-        LOGW("addEffect_l() %p effect %s already present in chain %p",
+        ALOGW("addEffect_l() %p effect %s already present in chain %p",
                 this, effect->desc().name, chain.get());
         return BAD_VALUE;
     }
@@ -5838,7 +5842,7 @@
             removeEffectChain_l(chain);
         }
     } else {
-        LOGW("removeEffect_l() %p cannot promote chain for effect %p", this, effect.get());
+        ALOGW("removeEffect_l() %p cannot promote chain for effect %p", this, effect.get());
     }
 }
 
@@ -6060,7 +6064,7 @@
 size_t AudioFlinger::RecordThread::removeEffectChain_l(const sp<EffectChain>& chain)
 {
     ALOGV("removeEffectChain_l() %p from thread %p", chain.get(), this);
-    LOGW_IF(mEffectChains.size() != 1,
+    ALOGW_IF(mEffectChains.size() != 1,
             "removeEffectChain_l() %p invalid chain size %d on thread %p",
             chain.get(), mEffectChains.size(), this);
     if (mEffectChains.size() == 1) {
@@ -6702,7 +6706,8 @@
     Mutex::Autolock _l(mLock);
     mSuspended = suspended;
 }
-bool AudioFlinger::EffectModule::suspended()
+
+bool AudioFlinger::EffectModule::suspended() const
 {
     Mutex::Autolock _l(mLock);
     return mSuspended;
@@ -6822,7 +6827,7 @@
             mBuffer = (uint8_t *)mCblk + bufOffset;
          }
     } else {
-        LOGE("not enough memory for Effect size=%u", EFFECT_PARAM_BUFFER_SIZE + sizeof(effect_param_cblk_t));
+        ALOGE("not enough memory for Effect size=%u", EFFECT_PARAM_BUFFER_SIZE + sizeof(effect_param_cblk_t));
         return;
     }
 }
@@ -6957,12 +6962,12 @@
             int *p = (int *)(mBuffer + mCblk->serverIndex);
             int size = *p++;
             if (((uint8_t *)p + size) > mBuffer + mCblk->clientIndex) {
-                LOGW("command(): invalid parameter block size");
+                ALOGW("command(): invalid parameter block size");
                 break;
             }
             effect_param_t *param = (effect_param_t *)p;
             if (param->psize == 0 || param->vsize == 0) {
-                LOGW("command(): null parameter or value size");
+                ALOGW("command(): null parameter or value size");
                 mCblk->serverIndex += size;
                 continue;
             }
@@ -7138,7 +7143,7 @@
 {
     sp<ThreadBase> thread = mThread.promote();
     if (thread == 0) {
-        LOGW("process_l(): cannot promote mixer thread");
+        ALOGW("process_l(): cannot promote mixer thread");
         return;
     }
     bool isGlobalSession = (mSessionId == AUDIO_SESSION_OUTPUT_MIX) ||
@@ -7234,7 +7239,7 @@
                 // check invalid effect chaining combinations
                 if (insertPref == EFFECT_FLAG_INSERT_EXCLUSIVE ||
                     iPref == EFFECT_FLAG_INSERT_EXCLUSIVE) {
-                    LOGW("addEffect_l() could not insert effect %s: exclusive conflict with %s", desc.name, d.name);
+                    ALOGW("addEffect_l() could not insert effect %s: exclusive conflict with %s", desc.name, d.name);
                     return INVALID_OPERATION;
                 }
                 // remember position of first insert effect and by default
@@ -7470,7 +7475,7 @@
         }
         desc = mSuspendedEffects.valueAt(index);
         if (desc->mRefCount <= 0) {
-            LOGW("setEffectSuspended_l() restore refcount should not be 0 %d", desc->mRefCount);
+            ALOGW("setEffectSuspended_l() restore refcount should not be 0 %d", desc->mRefCount);
             desc->mRefCount = 1;
         }
         if (--desc->mRefCount == 0) {
@@ -7517,7 +7522,7 @@
         }
         desc = mSuspendedEffects.valueAt(index);
         if (desc->mRefCount <= 0) {
-            LOGW("setEffectSuspendedAll_l() restore refcount should not be 0 %d", desc->mRefCount);
+            ALOGW("setEffectSuspendedAll_l() restore refcount should not be 0 %d", desc->mRefCount);
             desc->mRefCount = 1;
         }
         if (--desc->mRefCount == 0) {
@@ -7597,7 +7602,7 @@
             setEffectSuspended_l(&effect->desc().type, enabled);
             index = mSuspendedEffects.indexOfKey(effect->desc().type.timeLow);
             if (index < 0) {
-                LOGW("checkSuspendOnEffectEnabled() Fx should be suspended here!");
+                ALOGW("checkSuspendOnEffectEnabled() Fx should be suspended here!");
                 return;
             }
         }
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index c1efb37..f99e764 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -63,7 +63,7 @@
 {
     friend class BinderService<AudioFlinger>;
 public:
-    static char const* getServiceName() { return "media.audio_flinger"; }
+    static const char* getServiceName() { return "media.audio_flinger"; }
 
     virtual     status_t    dump(int fd, const Vector<String16>& args);
 
@@ -730,7 +730,7 @@
 
                     void        suspend() { mSuspended++; }
                     void        restore() { if (mSuspended) mSuspended--; }
-                    bool        isSuspended() { return (mSuspended != 0); }
+                    bool        isSuspended() const { return (mSuspended != 0); }
         virtual     String8     getParameters(const String8& keys);
         virtual     void        audioConfigChanged_l(int event, int param = 0);
         virtual     status_t    getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames);
@@ -1115,7 +1115,7 @@
         status_t         start();
         status_t         stop();
         void             setSuspended(bool suspended);
-        bool             suspended();
+        bool             suspended() const;
 
         sp<EffectHandle> controlHandle();
 
@@ -1138,7 +1138,7 @@
         status_t start_l();
         status_t stop_l();
 
-        Mutex               mLock;      // mutex for process, commands and handles list protection
+mutable Mutex               mLock;      // mutex for process, commands and handles list protection
         wp<ThreadBase>      mThread;    // parent thread
         wp<EffectChain>     mChain;     // parent effect chain
         int                 mId;        // this instance unique ID
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index d994a87..a8102e5 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -41,7 +41,7 @@
 // ----------------------------------------------------------------------------
 
 AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate)
-    :   mActiveTrack(0), mTrackNames(0), mSampleRate(sampleRate)
+    :   mTrackNames(0), mSampleRate(sampleRate)
 {
     // AudioMixer is not yet capable of multi-channel beyond stereo
     assert(2 == MAX_NUM_CHANNELS);
@@ -95,16 +95,11 @@
 
 int AudioMixer::getTrackName()
 {
-    uint32_t names = mTrackNames;
-    uint32_t mask = 1;
-    int n = 0;
-    while (names & mask) {
-        mask <<= 1;
-        n++;
-    }
-    if (mask) {
+    uint32_t names = ~mTrackNames;
+    if (names != 0) {
+        int n = __builtin_ctz(names);
         ALOGV("add track (%d)", n);
-        mTrackNames |= mask;
+        mTrackNames |= 1 << n;
         return TRACK0 + n;
     }
     return -1;
@@ -140,120 +135,120 @@
     mTrackNames &= ~(1<<name);
 }
 
-void AudioMixer::enable()
+void AudioMixer::enable(int name)
 {
-    if (mState.tracks[ mActiveTrack ].enabled != 1) {
-        mState.tracks[ mActiveTrack ].enabled = 1;
-        ALOGV("enable(%d)", mActiveTrack);
-        invalidateState(1<<mActiveTrack);
+    name -= TRACK0;
+    assert(uint32_t(name) < MAX_NUM_TRACKS);
+    track_t& track = mState.tracks[name];
+
+    if (track.enabled != 1) {
+        track.enabled = 1;
+        ALOGV("enable(%d)", name);
+        invalidateState(1 << name);
     }
 }
 
-void AudioMixer::disable()
+void AudioMixer::disable(int name)
 {
-    if (mState.tracks[ mActiveTrack ].enabled != 0) {
-        mState.tracks[ mActiveTrack ].enabled = 0;
-        ALOGV("disable(%d)", mActiveTrack);
-        invalidateState(1<<mActiveTrack);
+    name -= TRACK0;
+    assert(uint32_t(name) < MAX_NUM_TRACKS);
+    track_t& track = mState.tracks[name];
+
+    if (track.enabled != 0) {
+        track.enabled = 0;
+        ALOGV("disable(%d)", name);
+        invalidateState(1 << name);
     }
 }
 
-void AudioMixer::setActiveTrack(int track)
+void AudioMixer::setParameter(int name, int target, int param, void *value)
 {
-    // this also catches track < TRACK0
-    track -= TRACK0;
-    assert(uint32_t(track) < MAX_NUM_TRACKS);
-    mActiveTrack = track;
-}
+    name -= TRACK0;
+    assert(uint32_t(name) < MAX_NUM_TRACKS);
+    track_t& track = mState.tracks[name];
 
-void AudioMixer::setParameter(int target, int name, void *value)
-{
     int valueInt = (int)value;
     int32_t *valueBuf = (int32_t *)value;
 
     switch (target) {
 
     case TRACK:
-        switch (name) {
+        switch (param) {
         case CHANNEL_MASK: {
             uint32_t mask = (uint32_t)value;
-            if (mState.tracks[ mActiveTrack ].channelMask != mask) {
+            if (track.channelMask != mask) {
                 uint8_t channelCount = popcount(mask);
                 assert((channelCount <= MAX_NUM_CHANNELS) && (channelCount));
-                mState.tracks[ mActiveTrack ].channelMask = mask;
-                mState.tracks[ mActiveTrack ].channelCount = channelCount;
+                track.channelMask = mask;
+                track.channelCount = channelCount;
                 ALOGV("setParameter(TRACK, CHANNEL_MASK, %x)", mask);
-                invalidateState(1<<mActiveTrack);
+                invalidateState(1 << name);
             }
             } break;
         case MAIN_BUFFER:
-            if (mState.tracks[ mActiveTrack ].mainBuffer != valueBuf) {
-                mState.tracks[ mActiveTrack ].mainBuffer = valueBuf;
+            if (track.mainBuffer != valueBuf) {
+                track.mainBuffer = valueBuf;
                 ALOGV("setParameter(TRACK, MAIN_BUFFER, %p)", valueBuf);
-                invalidateState(1<<mActiveTrack);
+                invalidateState(1 << name);
             }
             break;
         case AUX_BUFFER:
-            if (mState.tracks[ mActiveTrack ].auxBuffer != valueBuf) {
-                mState.tracks[ mActiveTrack ].auxBuffer = valueBuf;
+            if (track.auxBuffer != valueBuf) {
+                track.auxBuffer = valueBuf;
                 ALOGV("setParameter(TRACK, AUX_BUFFER, %p)", valueBuf);
-                invalidateState(1<<mActiveTrack);
+                invalidateState(1 << name);
             }
             break;
         default:
-            // bad name
+            // bad param
             assert(false);
         }
         break;
 
     case RESAMPLE:
-        switch (name) {
-        case SAMPLE_RATE: {
+        switch (param) {
+        case SAMPLE_RATE:
             assert(valueInt > 0);
-            track_t& track = mState.tracks[ mActiveTrack ];
             if (track.setResampler(uint32_t(valueInt), mSampleRate)) {
                 ALOGV("setParameter(RESAMPLE, SAMPLE_RATE, %u)",
                         uint32_t(valueInt));
-                invalidateState(1<<mActiveTrack);
+                invalidateState(1 << name);
             }
-            } break;
-        case RESET: {
-            track_t& track = mState.tracks[ mActiveTrack ];
+            break;
+        case RESET:
             track.resetResampler();
-            invalidateState(1<<mActiveTrack);
-            } break;
+            invalidateState(1 << name);
+            break;
         default:
-            // bad name
+            // bad param
             assert(false);
         }
         break;
 
     case RAMP_VOLUME:
     case VOLUME:
-        switch (name) {
+        switch (param) {
         case VOLUME0:
-        case VOLUME1: {
-            track_t& track = mState.tracks[ mActiveTrack ];
-            if (track.volume[name-VOLUME0] != valueInt) {
+        case VOLUME1:
+            if (track.volume[param-VOLUME0] != valueInt) {
                 ALOGV("setParameter(VOLUME, VOLUME0/1: %04x)", valueInt);
-                track.prevVolume[name-VOLUME0] = track.volume[name-VOLUME0] << 16;
-                track.volume[name-VOLUME0] = valueInt;
+                track.prevVolume[param-VOLUME0] = track.volume[param-VOLUME0] << 16;
+                track.volume[param-VOLUME0] = valueInt;
                 if (target == VOLUME) {
-                    track.prevVolume[name-VOLUME0] = valueInt << 16;
-                    track.volumeInc[name-VOLUME0] = 0;
+                    track.prevVolume[param-VOLUME0] = valueInt << 16;
+                    track.volumeInc[param-VOLUME0] = 0;
                 } else {
-                    int32_t d = (valueInt<<16) - track.prevVolume[name-VOLUME0];
+                    int32_t d = (valueInt<<16) - track.prevVolume[param-VOLUME0];
                     int32_t volInc = d / int32_t(mState.frameCount);
-                    track.volumeInc[name-VOLUME0] = volInc;
+                    track.volumeInc[param-VOLUME0] = volInc;
                     if (volInc == 0) {
-                        track.prevVolume[name-VOLUME0] = valueInt << 16;
+                        track.prevVolume[param-VOLUME0] = valueInt << 16;
                     }
                 }
-                invalidateState(1<<mActiveTrack);
+                invalidateState(1 << name);
             }
-            } break;
-        case AUXLEVEL: {
-            track_t& track = mState.tracks[ mActiveTrack ];
+            break;
+        case AUXLEVEL:
             if (track.auxLevel != valueInt) {
                 ALOGV("setParameter(VOLUME, AUXLEVEL: %04x)", valueInt);
                 track.prevAuxLevel = track.auxLevel << 16;
@@ -269,11 +264,11 @@
                         track.prevAuxLevel = valueInt << 16;
                     }
                 }
-                invalidateState(1<<mActiveTrack);
+                invalidateState(1 << name);
             }
-            } break;
+            break;
         default:
-            // bad name
+            // bad param
             assert(false);
         }
         break;
@@ -314,7 +309,7 @@
 inline
 void AudioMixer::track_t::adjustVolumeRamp(bool aux)
 {
-    for (int i=0 ; i<MAX_NUM_CHANNELS ; i++) {
+    for (uint32_t i=0 ; i<MAX_NUM_CHANNELS ; i++) {
         if (((volumeInc[i]>0) && (((prevVolume[i]+volumeInc[i])>>16) >= volume[i])) ||
             ((volumeInc[i]<0) && (((prevVolume[i]+volumeInc[i])>>16) <= volume[i]))) {
             volumeInc[i] = 0;
@@ -348,9 +343,11 @@
     return 0;
 }
 
-void AudioMixer::setBufferProvider(AudioBufferProvider* buffer)
+void AudioMixer::setBufferProvider(int name, AudioBufferProvider* buffer)
 {
-    mState.tracks[ mActiveTrack ].bufferProvider = buffer;
+    name -= TRACK0;
+    assert(uint32_t(name) < MAX_NUM_TRACKS);
+    mState.tracks[name].bufferProvider = buffer;
 }
 
 
@@ -363,7 +360,7 @@
 
 void AudioMixer::process__validate(state_t* state)
 {
-    LOGW_IF(!state->needsChanged,
+    ALOGW_IF(!state->needsChanged,
         "in process__validate() but nothing's invalid");
 
     uint32_t changed = state->needsChanged;
@@ -604,7 +601,7 @@
 
 void AudioMixer::track__16BitsStereo(track_t* t, int32_t* out, size_t frameCount, int32_t* temp, int32_t* aux)
 {
-    int16_t const *in = static_cast<int16_t const *>(t->in);
+    const int16_t *in = static_cast<const int16_t *>(t->in);
 
     if (CC_UNLIKELY(aux != NULL)) {
         int32_t l;
@@ -643,7 +640,7 @@
             const uint32_t vrl = t->volumeRL;
             const int16_t va = (int16_t)t->auxLevel;
             do {
-                uint32_t rl = *reinterpret_cast<uint32_t const *>(in);
+                uint32_t rl = *reinterpret_cast<const uint32_t *>(in);
                 int16_t a = (int16_t)(((int32_t)in[0] + in[1]) >> 1);
                 in += 2;
                 out[0] = mulAddRL(1, rl, vrl, out[0]);
@@ -681,7 +678,7 @@
         else {
             const uint32_t vrl = t->volumeRL;
             do {
-                uint32_t rl = *reinterpret_cast<uint32_t const *>(in);
+                uint32_t rl = *reinterpret_cast<const uint32_t *>(in);
                 in += 2;
                 out[0] = mulAddRL(1, rl, vrl, out[0]);
                 out[1] = mulAddRL(0, rl, vrl, out[1]);
@@ -694,7 +691,7 @@
 
 void AudioMixer::track__16BitsMono(track_t* t, int32_t* out, size_t frameCount, int32_t* temp, int32_t* aux)
 {
-    int16_t const *in = static_cast<int16_t const *>(t->in);
+    const int16_t *in = static_cast<int16_t const *>(t->in);
 
     if (CC_UNLIKELY(aux != NULL)) {
         // ramp gain
@@ -916,6 +913,7 @@
 // generic code with resampling
 void AudioMixer::process__genericResampling(state_t* state)
 {
+    // this const just means that local variable outTemp doesn't change
     int32_t* const outTemp = state->outputTemp;
     const size_t size = sizeof(int32_t) * MAX_NUM_CHANNELS * state->frameCount;
 
@@ -996,13 +994,13 @@
     while (numFrames) {
         b.frameCount = numFrames;
         t.bufferProvider->getNextBuffer(&b);
-        int16_t const *in = b.i16;
+        const int16_t *in = b.i16;
 
         // in == NULL can happen if the track was flushed just after having
         // been enabled for mixing.
         if (in == NULL || ((unsigned long)in & 3)) {
             memset(out, 0, numFrames*MAX_NUM_CHANNELS*sizeof(int16_t));
-            LOGE_IF(((unsigned long)in & 3), "process stereo track: input buffer alignment pb: buffer %p track %d, channels %d, needs %08x",
+            ALOGE_IF(((unsigned long)in & 3), "process stereo track: input buffer alignment pb: buffer %p track %d, channels %d, needs %08x",
                     in, i, t.channelCount, t.needs);
             return;
         }
@@ -1012,7 +1010,7 @@
             // volume is boosted, so we might need to clamp even though
             // we process only one track.
             do {
-                uint32_t rl = *reinterpret_cast<uint32_t const *>(in);
+                uint32_t rl = *reinterpret_cast<const uint32_t *>(in);
                 in += 2;
                 int32_t l = mulRL(1, rl, vrl) >> 12;
                 int32_t r = mulRL(0, rl, vrl) >> 12;
@@ -1023,7 +1021,7 @@
             } while (--outFrames);
         } else {
             do {
-                uint32_t rl = *reinterpret_cast<uint32_t const *>(in);
+                uint32_t rl = *reinterpret_cast<const uint32_t *>(in);
                 in += 2;
                 int32_t l = mulRL(1, rl, vrl) >> 12;
                 int32_t r = mulRL(0, rl, vrl) >> 12;
@@ -1053,12 +1051,12 @@
     const track_t& t1 = state->tracks[i];
     AudioBufferProvider::Buffer& b1(t1.buffer);
 
-    int16_t const *in0;
+    const int16_t *in0;
     const int16_t vl0 = t0.volume[0];
     const int16_t vr0 = t0.volume[1];
     size_t frameCount0 = 0;
 
-    int16_t const *in1;
+    const int16_t *in1;
     const int16_t vl1 = t1.volume[0];
     const int16_t vr1 = t1.volume[1];
     size_t frameCount1 = 0;
@@ -1066,7 +1064,7 @@
     //FIXME: only works if two tracks use same buffer
     int32_t* out = t0.mainBuffer;
     size_t numFrames = state->frameCount;
-    int16_t const *buff = NULL;
+    const int16_t *buff = NULL;
 
 
     while (numFrames) {
diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h
index 9c129b8..84f6330 100644
--- a/services/audioflinger/AudioMixer.h
+++ b/services/audioflinger/AudioMixer.h
@@ -42,7 +42,7 @@
 
     enum { // names
 
-        // track units (MAX_NUM_TRACKS units)
+        // track names (MAX_NUM_TRACKS units)
         TRACK0          = 0x1000,
 
         // 0x2000 is unused
@@ -69,16 +69,16 @@
     };
 
 
+    // For all APIs with "name": TRACK0 <= name < TRACK0 + MAX_NUM_TRACKS
     int         getTrackName();
     void        deleteTrackName(int name);
 
-    void        enable();
-    void        disable();
+    void        enable(int name);
+    void        disable(int name);
 
-    void        setActiveTrack(int track);
-    void        setParameter(int target, int name, void *value);
+    void        setParameter(int name, int target, int param, void *value);
 
-    void        setBufferProvider(AudioBufferProvider* bufferProvider);
+    void        setBufferProvider(int name, AudioBufferProvider* bufferProvider);
     void        process();
 
     uint32_t    trackNames() const { return mTrackNames; }
@@ -145,7 +145,7 @@
         mutable AudioBufferProvider::Buffer buffer;
 
         hook_t      hook;
-        void const* in;             // current location in buffer
+        const void* in;             // current location in buffer
 
         AudioResampler*     resampler;
         uint32_t            sampleRate;
@@ -171,7 +171,7 @@
         track_t         tracks[MAX_NUM_TRACKS]; __attribute__((aligned(32)));
     };
 
-    int             mActiveTrack;
+    // bitmask of allocated track names, where bit 0 corresponds to TRACK0 etc.
     uint32_t        mTrackNames;
     const uint32_t  mSampleRate;
 
diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index bc4c90c..f572fce 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -52,7 +52,7 @@
 static bool checkPermission() {
     if (getpid() == IPCThreadState::self()->getCallingPid()) return true;
     bool ok = checkCallingPermission(String16("android.permission.MODIFY_AUDIO_SETTINGS"));
-    if (!ok) LOGE("Request requires android.permission.MODIFY_AUDIO_SETTINGS");
+    if (!ok) ALOGE("Request requires android.permission.MODIFY_AUDIO_SETTINGS");
     return ok;
 }
 
@@ -83,18 +83,18 @@
         return;
 
     rc = audio_policy_dev_open(module, &mpAudioPolicyDev);
-    LOGE_IF(rc, "couldn't open audio policy device (%s)", strerror(-rc));
+    ALOGE_IF(rc, "couldn't open audio policy device (%s)", strerror(-rc));
     if (rc)
         return;
 
     rc = mpAudioPolicyDev->create_audio_policy(mpAudioPolicyDev, &aps_ops, this,
                                                &mpAudioPolicy);
-    LOGE_IF(rc, "couldn't create audio policy (%s)", strerror(-rc));
+    ALOGE_IF(rc, "couldn't create audio policy (%s)", strerror(-rc));
     if (rc)
         return;
 
     rc = mpAudioPolicy->init_check(mpAudioPolicy);
-    LOGE_IF(rc, "couldn't init_check the audio policy (%s)", strerror(-rc));
+    ALOGE_IF(rc, "couldn't init_check the audio policy (%s)", strerror(-rc));
     if (rc)
         return;
 
@@ -102,7 +102,7 @@
     forced_val = strtol(value, NULL, 0);
     mpAudioPolicy->set_can_mute_enforced_audible(mpAudioPolicy, !forced_val);
 
-    LOGI("Loaded audio policy from %s (%s)", module->name, module->id);
+    ALOGI("Loaded audio policy from %s (%s)", module->name, module->id);
 
     // load audio pre processing modules
     if (access(AUDIO_EFFECT_VENDOR_CONFIG_FILE, R_OK) == 0) {
@@ -338,7 +338,7 @@
         sp<AudioEffect> fx = new AudioEffect(NULL, &effect->mUuid, -1, 0, 0, audioSession, input);
         status_t status = fx->initCheck();
         if (status != NO_ERROR && status != ALREADY_EXISTS) {
-            LOGW("Failed to create Fx %s on input %d", effect->mName, input);
+            ALOGW("Failed to create Fx %s on input %d", effect->mName, input);
             // fx goes out of scope and strong ref on AudioEffect is released
             continue;
         }
@@ -533,7 +533,7 @@
 }
 
 void AudioPolicyService::binderDied(const wp<IBinder>& who) {
-    LOGW("binderDied() %p, tid %d, calling tid %d", who.unsafe_get(), gettid(),
+    ALOGW("binderDied() %p, tid %d, calling tid %d", who.unsafe_get(), gettid(),
             IPCThreadState::self()->getCallingPid());
 }
 
@@ -726,7 +726,7 @@
                     delete data;
                     }break;
                 default:
-                    LOGW("AudioCommandThread() unknown command %d", command->mCommand);
+                    ALOGW("AudioCommandThread() unknown command %d", command->mCommand);
                 }
                 delete command;
                 waitTime = INT64_MAX;
@@ -1027,9 +1027,9 @@
                                   audio_stream_type_t stream)
 {
     if (tone != AUDIO_POLICY_TONE_IN_CALL_NOTIFICATION)
-        LOGE("startTone: illegal tone requested (%d)", tone);
+        ALOGE("startTone: illegal tone requested (%d)", tone);
     if (stream != AUDIO_STREAM_VOICE_CALL)
-        LOGE("startTone: illegal stream (%d) requested for tone %d", stream,
+        ALOGE("startTone: illegal stream (%d) requested for tone %d", stream,
              tone);
     mTonePlaybackThread->startToneCommand(ToneGenerator::TONE_SUP_CALL_WAITING,
                                           AUDIO_STREAM_VOICE_CALL);
@@ -1134,7 +1134,7 @@
         ALOGV("readParamValue() reading string %s", param + *curSize - len);
         return len;
     }
-    LOGW("readParamValue() unknown param type %s", node->name);
+    ALOGW("readParamValue() unknown param type %s", node->name);
     return 0;
 }
 
@@ -1155,7 +1155,7 @@
             // Note: that a pair of random strings is read as 0 0
             int *ptr = (int *)fx_param->data;
             int *ptr2 = (int *)((char *)param + sizeof(effect_param_t));
-            LOGW("loadEffectParameter() ptr %p ptr2 %p", ptr, ptr2);
+            ALOGW("loadEffectParameter() ptr %p ptr2 %p", ptr, ptr2);
             *ptr++ = atoi(param->name);
             *ptr = atoi(param->value);
             fx_param->psize = sizeof(int);
@@ -1164,7 +1164,7 @@
         }
     }
     if (param == NULL || value == NULL) {
-        LOGW("loadEffectParameter() invalid parameter description %s", root->name);
+        ALOGW("loadEffectParameter() invalid parameter description %s", root->name);
         goto error;
     }
 
@@ -1223,7 +1223,7 @@
 {
     cnode *node = root->first_child;
     if (node == NULL) {
-        LOGW("loadInputSource() empty element %s", root->name);
+        ALOGW("loadInputSource() empty element %s", root->name);
         return NULL;
     }
     InputSourceDesc *source = new InputSourceDesc();
@@ -1247,7 +1247,7 @@
         node = node->next;
     }
     if (source->mEffects.size() == 0) {
-        LOGW("loadInputSource() no valid effects found in source %s", root->name);
+        ALOGW("loadInputSource() no valid effects found in source %s", root->name);
         delete source;
         return NULL;
     }
@@ -1264,7 +1264,7 @@
     while (node) {
         audio_source_t source = inputSourceNameToEnum(node->name);
         if (source == AUDIO_SOURCE_CNT) {
-            LOGW("loadInputSources() invalid input source %s", node->name);
+            ALOGW("loadInputSources() invalid input source %s", node->name);
             node = node->next;
             continue;
         }
@@ -1288,7 +1288,7 @@
     }
     effect_uuid_t uuid;
     if (AudioEffect::stringToGuid(node->value, &uuid) != NO_ERROR) {
-        LOGW("loadEffect() invalid uuid %s", node->value);
+        ALOGW("loadEffect() invalid uuid %s", node->value);
         return NULL;
     }
     EffectDesc *effect = new EffectDesc();
@@ -1354,7 +1354,7 @@
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
     if (af == NULL) {
-        LOGW("%s: could not get AudioFlinger", __func__);
+        ALOGW("%s: could not get AudioFlinger", __func__);
         return 0;
     }
 
@@ -1368,7 +1368,7 @@
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
     if (af == NULL) {
-        LOGW("%s: could not get AudioFlinger", __func__);
+        ALOGW("%s: could not get AudioFlinger", __func__);
         return 0;
     }
     return af->openDuplicateOutput(output1, output2);
@@ -1387,7 +1387,7 @@
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
     if (af == NULL) {
-        LOGW("%s: could not get AudioFlinger", __func__);
+        ALOGW("%s: could not get AudioFlinger", __func__);
         return PERMISSION_DENIED;
     }
 
@@ -1398,7 +1398,7 @@
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
     if (af == NULL) {
-        LOGW("%s: could not get AudioFlinger", __func__);
+        ALOGW("%s: could not get AudioFlinger", __func__);
         return PERMISSION_DENIED;
     }
 
@@ -1414,7 +1414,7 @@
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
     if (af == NULL) {
-        LOGW("%s: could not get AudioFlinger", __func__);
+        ALOGW("%s: could not get AudioFlinger", __func__);
         return 0;
     }
 
diff --git a/services/audioflinger/AudioResampler.cpp b/services/audioflinger/AudioResampler.cpp
index 7205045..feacd96 100644
--- a/services/audioflinger/AudioResampler.cpp
+++ b/services/audioflinger/AudioResampler.cpp
@@ -121,9 +121,9 @@
             mPhaseFraction(0) {
     // sanity check on format
     if ((bitDepth != 16) ||(inChannelCount < 1) || (inChannelCount > 2)) {
-        LOGE("Unsupported sample format, %d bits, %d channels", bitDepth,
+        ALOGE("Unsupported sample format, %d bits, %d channels", bitDepth,
                 inChannelCount);
-        // LOG_ASSERT(0);
+        // ALOG_ASSERT(0);
     }
 
     // initialize common members
@@ -164,7 +164,7 @@
         AudioBufferProvider* provider) {
 
     // should never happen, but we overflow if it does
-    // LOG_ASSERT(outFrameCount < 32767);
+    // ALOG_ASSERT(outFrameCount < 32767);
 
     // select the appropriate resampler
     switch (mChannelCount) {
@@ -190,7 +190,7 @@
     size_t outputSampleCount = outFrameCount * 2;
     size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate;
 
-    // LOGE("starting resample %d frames, inputIndex=%d, phaseFraction=%d, phaseIncrement=%d\n",
+    // ALOGE("starting resample %d frames, inputIndex=%d, phaseFraction=%d, phaseIncrement=%d\n",
     //      outFrameCount, inputIndex, phaseFraction, phaseIncrement);
 
     while (outputIndex < outputSampleCount) {
@@ -203,7 +203,7 @@
                 goto resampleStereo16_exit;
             }
 
-            // LOGE("New buffer fetched: %d frames\n", mBuffer.frameCount);
+            // ALOGE("New buffer fetched: %d frames\n", mBuffer.frameCount);
             if (mBuffer.frameCount > inputIndex) break;
 
             inputIndex -= mBuffer.frameCount;
@@ -217,7 +217,7 @@
 
         // handle boundary case
         while (inputIndex == 0) {
-            // LOGE("boundary case\n");
+            // ALOGE("boundary case\n");
             out[outputIndex++] += vl * Interp(mX0L, in[0], phaseFraction);
             out[outputIndex++] += vr * Interp(mX0R, in[1], phaseFraction);
             Advance(&inputIndex, &phaseFraction, phaseIncrement);
@@ -226,7 +226,7 @@
         }
 
         // process input samples
-        // LOGE("general case\n");
+        // ALOGE("general case\n");
 
 #ifdef ASM_ARM_RESAMP1  // asm optimisation for ResamplerOrder1
         if (inputIndex + 2 < mBuffer.frameCount) {
@@ -248,24 +248,24 @@
             Advance(&inputIndex, &phaseFraction, phaseIncrement);
         }
 
-        // LOGE("loop done - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
+        // ALOGE("loop done - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
 
         // if done with buffer, save samples
         if (inputIndex >= mBuffer.frameCount) {
             inputIndex -= mBuffer.frameCount;
 
-            // LOGE("buffer done, new input index %d", inputIndex);
+            // ALOGE("buffer done, new input index %d", inputIndex);
 
             mX0L = mBuffer.i16[mBuffer.frameCount*2-2];
             mX0R = mBuffer.i16[mBuffer.frameCount*2-1];
             provider->releaseBuffer(&mBuffer);
 
             // verify that the releaseBuffer resets the buffer frameCount
-            // LOG_ASSERT(mBuffer.frameCount == 0);
+            // ALOG_ASSERT(mBuffer.frameCount == 0);
         }
     }
 
-    // LOGE("output buffer full - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
+    // ALOGE("output buffer full - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
 
 resampleStereo16_exit:
     // save state
@@ -286,7 +286,7 @@
     size_t outputSampleCount = outFrameCount * 2;
     size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate;
 
-    // LOGE("starting resample %d frames, inputIndex=%d, phaseFraction=%d, phaseIncrement=%d\n",
+    // ALOGE("starting resample %d frames, inputIndex=%d, phaseFraction=%d, phaseIncrement=%d\n",
     //      outFrameCount, inputIndex, phaseFraction, phaseIncrement);
     while (outputIndex < outputSampleCount) {
         // buffer is empty, fetch a new one
@@ -298,7 +298,7 @@
                 mPhaseFraction = phaseFraction;
                 goto resampleMono16_exit;
             }
-            // LOGE("New buffer fetched: %d frames\n", mBuffer.frameCount);
+            // ALOGE("New buffer fetched: %d frames\n", mBuffer.frameCount);
             if (mBuffer.frameCount >  inputIndex) break;
 
             inputIndex -= mBuffer.frameCount;
@@ -310,7 +310,7 @@
 
         // handle boundary case
         while (inputIndex == 0) {
-            // LOGE("boundary case\n");
+            // ALOGE("boundary case\n");
             int32_t sample = Interp(mX0L, in[0], phaseFraction);
             out[outputIndex++] += vl * sample;
             out[outputIndex++] += vr * sample;
@@ -320,7 +320,7 @@
         }
 
         // process input samples
-        // LOGE("general case\n");
+        // ALOGE("general case\n");
 
 #ifdef ASM_ARM_RESAMP1  // asm optimisation for ResamplerOrder1
         if (inputIndex + 2 < mBuffer.frameCount) {
@@ -343,23 +343,23 @@
         }
 
 
-        // LOGE("loop done - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
+        // ALOGE("loop done - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
 
         // if done with buffer, save samples
         if (inputIndex >= mBuffer.frameCount) {
             inputIndex -= mBuffer.frameCount;
 
-            // LOGE("buffer done, new input index %d", inputIndex);
+            // ALOGE("buffer done, new input index %d", inputIndex);
 
             mX0L = mBuffer.i16[mBuffer.frameCount-1];
             provider->releaseBuffer(&mBuffer);
 
             // verify that the releaseBuffer resets the buffer frameCount
-            // LOG_ASSERT(mBuffer.frameCount == 0);
+            // ALOG_ASSERT(mBuffer.frameCount == 0);
         }
     }
 
-    // LOGE("output buffer full - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
+    // ALOGE("output buffer full - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex);
 
 resampleMono16_exit:
     // save state
diff --git a/services/audioflinger/AudioResamplerCubic.cpp b/services/audioflinger/AudioResamplerCubic.cpp
index 4d721f6..47205ba 100644
--- a/services/audioflinger/AudioResamplerCubic.cpp
+++ b/services/audioflinger/AudioResamplerCubic.cpp
@@ -36,7 +36,7 @@
         AudioBufferProvider* provider) {
 
     // should never happen, but we overflow if it does
-    // LOG_ASSERT(outFrameCount < 32767);
+    // ALOG_ASSERT(outFrameCount < 32767);
 
     // select the appropriate resampler
     switch (mChannelCount) {
@@ -68,7 +68,7 @@
         provider->getNextBuffer(&mBuffer);
         if (mBuffer.raw == NULL)
             return;
-        // LOGW("New buffer: offset=%p, frames=%dn", mBuffer.raw, mBuffer.frameCount);
+        // ALOGW("New buffer: offset=%p, frames=%dn", mBuffer.raw, mBuffer.frameCount);
     }
     int16_t *in = mBuffer.i16;
 
@@ -99,7 +99,7 @@
                 if (mBuffer.raw == NULL)
                     goto save_state;  // ugly, but efficient
                 in = mBuffer.i16;
-                // LOGW("New buffer: offset=%p, frames=%d\n", mBuffer.raw, mBuffer.frameCount);
+                // ALOGW("New buffer: offset=%p, frames=%d\n", mBuffer.raw, mBuffer.frameCount);
             }
 
             // advance sample state
@@ -109,7 +109,7 @@
     }
 
 save_state:
-    // LOGW("Done: index=%d, fraction=%u", inputIndex, phaseFraction);
+    // ALOGW("Done: index=%d, fraction=%u", inputIndex, phaseFraction);
     mInputIndex = inputIndex;
     mPhaseFraction = phaseFraction;
 }
@@ -133,7 +133,7 @@
         provider->getNextBuffer(&mBuffer);
         if (mBuffer.raw == NULL)
             return;
-        // LOGW("New buffer: offset=%p, frames=%d\n", mBuffer.raw, mBuffer.frameCount);
+        // ALOGW("New buffer: offset=%p, frames=%d\n", mBuffer.raw, mBuffer.frameCount);
     }
     int16_t *in = mBuffer.i16;
 
@@ -163,7 +163,7 @@
                 provider->getNextBuffer(&mBuffer);
                 if (mBuffer.raw == NULL)
                     goto save_state;  // ugly, but efficient
-                // LOGW("New buffer: offset=%p, frames=%dn", mBuffer.raw, mBuffer.frameCount);
+                // ALOGW("New buffer: offset=%p, frames=%dn", mBuffer.raw, mBuffer.frameCount);
                 in = mBuffer.i16;
             }
 
@@ -173,7 +173,7 @@
     }
 
 save_state:
-    // LOGW("Done: index=%d, fraction=%u", inputIndex, phaseFraction);
+    // ALOGW("Done: index=%d, fraction=%u", inputIndex, phaseFraction);
     mInputIndex = inputIndex;
     mPhaseFraction = phaseFraction;
 }
diff --git a/services/audioflinger/AudioResamplerSinc.cpp b/services/audioflinger/AudioResamplerSinc.cpp
index 9e5e254..d012433 100644
--- a/services/audioflinger/AudioResamplerSinc.cpp
+++ b/services/audioflinger/AudioResamplerSinc.cpp
@@ -284,7 +284,7 @@
 **/
 void AudioResamplerSinc::read(
         int16_t*& impulse, uint32_t& phaseFraction,
-        int16_t const* in, size_t inputIndex)
+        const int16_t* in, size_t inputIndex)
 {
     const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits;
     impulse += CHANNELS;
@@ -302,7 +302,7 @@
 
 template<int CHANNELS>
 void AudioResamplerSinc::filterCoefficient(
-        int32_t& l, int32_t& r, uint32_t phase, int16_t const *samples)
+        int32_t& l, int32_t& r, uint32_t phase, const int16_t *samples)
 {
     // compute the index of the coefficient on the positive side and
     // negative side
@@ -317,9 +317,9 @@
 
     l = 0;
     r = 0;
-    int32_t const* coefs = mFirCoefs;
-    int16_t const *sP = samples;
-    int16_t const *sN = samples+CHANNELS;
+    const int32_t* coefs = mFirCoefs;
+    const int16_t *sP = samples;
+    const int16_t *sN = samples+CHANNELS;
     for (unsigned int i=0 ; i<halfNumCoefs/4 ; i++) {
         interpolate<CHANNELS>(l, r, coefs+indexP, lerpP, sP);
         interpolate<CHANNELS>(l, r, coefs+indexN, lerpN, sN);
@@ -339,13 +339,13 @@
 template<int CHANNELS>
 void AudioResamplerSinc::interpolate(
         int32_t& l, int32_t& r,
-        int32_t const* coefs, int16_t lerp, int16_t const* samples)
+        const int32_t* coefs, int16_t lerp, const int16_t* samples)
 {
     int32_t c0 = coefs[0];
     int32_t c1 = coefs[1];
     int32_t sinc = mulAdd(lerp, (c1-c0)<<1, c0);
     if (CHANNELS == 2) {
-        uint32_t rl = *reinterpret_cast<uint32_t const*>(samples);
+        uint32_t rl = *reinterpret_cast<const uint32_t*>(samples);
         l = mulAddRL(1, rl, sinc, l);
         r = mulAddRL(0, rl, sinc, r);
     } else {
diff --git a/services/audioflinger/AudioResamplerSinc.h b/services/audioflinger/AudioResamplerSinc.h
index e6cb90b..0e1bc44 100644
--- a/services/audioflinger/AudioResamplerSinc.h
+++ b/services/audioflinger/AudioResamplerSinc.h
@@ -44,22 +44,22 @@
 
     template<int CHANNELS>
     inline void filterCoefficient(
-            int32_t& l, int32_t& r, uint32_t phase, int16_t const *samples);
+            int32_t& l, int32_t& r, uint32_t phase, const int16_t *samples);
 
     template<int CHANNELS>
     inline void interpolate(
             int32_t& l, int32_t& r,
-            int32_t const* coefs, int16_t lerp, int16_t const* samples);
+            const int32_t* coefs, int16_t lerp, const int16_t* samples);
 
     template<int CHANNELS>
     inline void read(int16_t*& impulse, uint32_t& phaseFraction,
-            int16_t const* in, size_t inputIndex);
+            const int16_t* in, size_t inputIndex);
 
     int16_t *mState;
     int16_t *mImpulse;
     int16_t *mRingFull;
 
-    int32_t const * mFirCoefs;
+    const int32_t * mFirCoefs;
     static const int32_t mFirCoefsDown[];
     static const int32_t mFirCoefsUp[];
 
diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h
index 658e25e..34087b5 100644
--- a/services/camera/libcameraservice/CameraHardwareInterface.h
+++ b/services/camera/libcameraservice/CameraHardwareInterface.h
@@ -88,21 +88,21 @@
 
     ~CameraHardwareInterface()
     {
-        LOGI("Destroying camera %s", mName.string());
+        ALOGI("Destroying camera %s", mName.string());
         if(mDevice) {
             int rc = mDevice->common.close(&mDevice->common);
             if (rc != OK)
-                LOGE("Could not close camera %s: %d", mName.string(), rc);
+                ALOGE("Could not close camera %s: %d", mName.string(), rc);
         }
     }
 
     status_t initialize(hw_module_t *module)
     {
-        LOGI("Opening camera %s", mName.string());
+        ALOGI("Opening camera %s", mName.string());
         int rc = module->methods->open(module, mName.string(),
                                        (hw_device_t **)&mDevice);
         if (rc != OK) {
-            LOGE("Could not open camera %s: %d", mName.string(), rc);
+            ALOGE("Could not open camera %s: %d", mName.string(), rc);
             return rc;
         }
         initHalPreviewWindow();
@@ -460,7 +460,7 @@
                 static_cast<CameraHardwareInterface *>(user);
         sp<CameraHeapMemory> mem(static_cast<CameraHeapMemory *>(data->handle));
         if (index >= mem->mNumBufs) {
-            LOGE("%s: invalid buffer index %d, max allowed is %d", __FUNCTION__,
+            ALOGE("%s: invalid buffer index %d, max allowed is %d", __FUNCTION__,
                  index, mem->mNumBufs);
             return;
         }
@@ -479,7 +479,7 @@
         // MemoryHeapBase.
         sp<CameraHeapMemory> mem(static_cast<CameraHeapMemory *>(data->handle));
         if (index >= mem->mNumBufs) {
-            LOGE("%s: invalid buffer index %d, max allowed is %d", __FUNCTION__,
+            ALOGE("%s: invalid buffer index %d, max allowed is %d", __FUNCTION__,
                  index, mem->mNumBufs);
             return;
         }
diff --git a/services/camera/libcameraservice/CameraHardwareStub.cpp b/services/camera/libcameraservice/CameraHardwareStub.cpp
index f922630..cdfb2f5 100644
--- a/services/camera/libcameraservice/CameraHardwareStub.cpp
+++ b/services/camera/libcameraservice/CameraHardwareStub.cpp
@@ -57,7 +57,7 @@
     p.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG);
 
     if (setParameters(p) != NO_ERROR) {
-        LOGE("Failed to set default parameters?!");
+        ALOGE("Failed to set default parameters?!");
     }
 }
 
@@ -340,20 +340,20 @@
 
     if (strcmp(params.getPreviewFormat(),
         CameraParameters::PIXEL_FORMAT_YUV420SP) != 0) {
-        LOGE("Only yuv420sp preview is supported");
+        ALOGE("Only yuv420sp preview is supported");
         return -1;
     }
 
     if (strcmp(params.getPictureFormat(),
         CameraParameters::PIXEL_FORMAT_JPEG) != 0) {
-        LOGE("Only jpeg still pictures are supported");
+        ALOGE("Only jpeg still pictures are supported");
         return -1;
     }
 
     int w, h;
     params.getPictureSize(&w, &h);
     if (w != kCannedJpegWidth && h != kCannedJpegHeight) {
-        LOGE("Still picture size must be size of canned JPEG (%dx%d)",
+        ALOGE("Still picture size must be size of canned JPEG (%dx%d)",
              kCannedJpegWidth, kCannedJpegHeight);
         return -1;
     }
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index d0cafb2..06fc708 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -73,7 +73,7 @@
 CameraService::CameraService()
 :mSoundRef(0), mModule(0)
 {
-    LOGI("CameraService started (pid=%d)", getpid());
+    ALOGI("CameraService started (pid=%d)", getpid());
     gCameraService = this;
 }
 
@@ -83,13 +83,13 @@
 
     if (hw_get_module(CAMERA_HARDWARE_MODULE_ID,
                 (const hw_module_t **)&mModule) < 0) {
-        LOGE("Could not load camera HAL module");
+        ALOGE("Could not load camera HAL module");
         mNumberOfCameras = 0;
     }
     else {
         mNumberOfCameras = mModule->get_number_of_cameras();
         if (mNumberOfCameras > MAX_CAMERAS) {
-            LOGE("Number of cameras(%d) > MAX_CAMERAS(%d).",
+            ALOGE("Number of cameras(%d) > MAX_CAMERAS(%d).",
                     mNumberOfCameras, MAX_CAMERAS);
             mNumberOfCameras = MAX_CAMERAS;
         }
@@ -97,22 +97,12 @@
             setCameraFree(i);
         }
     }
-
-    // Read the system property to determine if we have to use the
-    // AUDIO_STREAM_ENFORCED_AUDIBLE type.
-    char value[PROPERTY_VALUE_MAX];
-    property_get("ro.camera.sound.forced", value, "0");
-    if (strcmp(value, "0") != 0) {
-        mAudioStreamType = AUDIO_STREAM_ENFORCED_AUDIBLE;
-    } else {
-        mAudioStreamType = AUDIO_STREAM_MUSIC;
-    }
 }
 
 CameraService::~CameraService() {
     for (int i = 0; i < mNumberOfCameras; i++) {
         if (mBusy[i]) {
-            LOGE("camera %d is still in use in destructor!", i);
+            ALOGE("camera %d is still in use in destructor!", i);
         }
     }
 
@@ -148,13 +138,13 @@
     LOG1("CameraService::connect E (pid %d, id %d)", callingPid, cameraId);
 
     if (!mModule) {
-        LOGE("Camera HAL module not loaded");
+        ALOGE("Camera HAL module not loaded");
         return NULL;
     }
 
     sp<Client> client;
     if (cameraId < 0 || cameraId >= mNumberOfCameras) {
-        LOGE("CameraService::connect X (pid %d) rejected (invalid cameraId %d).",
+        ALOGE("CameraService::connect X (pid %d) rejected (invalid cameraId %d).",
             callingPid, cameraId);
         return NULL;
     }
@@ -163,7 +153,7 @@
     property_get("sys.secpolicy.camera.disabled", value, "0");
     if (strcmp(value, "1") == 0) {
         // Camera is disabled by DevicePolicyManager.
-        LOGI("Camera is disabled. connect X (pid %d) rejected", callingPid);
+        ALOGI("Camera is disabled. connect X (pid %d) rejected", callingPid);
         return NULL;
     }
 
@@ -176,7 +166,7 @@
                     callingPid);
                 return client;
             } else {
-                LOGW("CameraService::connect X (pid %d) rejected (existing client).",
+                ALOGW("CameraService::connect X (pid %d) rejected (existing client).",
                     callingPid);
                 return NULL;
             }
@@ -185,14 +175,14 @@
     }
 
     if (mBusy[cameraId]) {
-        LOGW("CameraService::connect X (pid %d) rejected"
+        ALOGW("CameraService::connect X (pid %d) rejected"
              " (camera %d is still busy).", callingPid, cameraId);
         return NULL;
     }
 
     struct camera_info info;
     if (mModule->get_camera_info(cameraId, &info) != OK) {
-        LOGE("Invalid camera id %d", cameraId);
+        ALOGE("Invalid camera id %d", cameraId);
         return NULL;
     }
 
@@ -263,7 +253,7 @@
                 if (!checkCallingPermission(
                         String16("android.permission.CAMERA"))) {
                     const int uid = getCallingUid();
-                    LOGE("Permission Denial: "
+                    ALOGE("Permission Denial: "
                          "can't use the camera pid=%d, uid=%d", pid, uid);
                     return PERMISSION_DENIED;
                 }
@@ -295,10 +285,10 @@
 MediaPlayer* CameraService::newMediaPlayer(const char *file) {
     MediaPlayer* mp = new MediaPlayer();
     if (mp->setDataSource(file, NULL) == NO_ERROR) {
-        mp->setAudioStreamType(mAudioStreamType);
+        mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
         mp->prepare();
     } else {
-        LOGE("Failed to load CameraService sounds: %s", file);
+        ALOGE("Failed to load CameraService sounds: %s", file);
         return NULL;
     }
     return mp;
@@ -390,7 +380,7 @@
     int callingPid = getCallingPid();
     if (callingPid == mClientPid) return NO_ERROR;
 
-    LOGW("attempt to use a locked camera from a different process"
+    ALOGW("attempt to use a locked camera from a different process"
          " (old pid %d, new pid %d)", mClientPid, callingPid);
     return EBUSY;
 }
@@ -399,7 +389,7 @@
     status_t result = checkPid();
     if (result != NO_ERROR) return result;
     if (mHardware == 0) {
-        LOGE("attempt to use a camera after disconnect() (pid %d)", getCallingPid());
+        ALOGE("attempt to use a camera after disconnect() (pid %d)", getCallingPid());
         return INVALID_OPERATION;
     }
     return NO_ERROR;
@@ -429,7 +419,7 @@
     status_t result = checkPid();
     if (result == NO_ERROR) {
         if (mHardware->recordingEnabled()) {
-            LOGE("Not allowed to unlock camera during recording.");
+            ALOGE("Not allowed to unlock camera during recording.");
             return INVALID_OPERATION;
         }
         mClientPid = 0;
@@ -448,7 +438,7 @@
     Mutex::Autolock lock(mLock);
 
     if (mClientPid != 0 && checkPid() != NO_ERROR) {
-        LOGW("Tried to connect to a locked camera (old pid %d, new pid %d)",
+        ALOGW("Tried to connect to a locked camera (old pid %d, new pid %d)",
                 mClientPid, callingPid);
         return EBUSY;
     }
@@ -471,7 +461,7 @@
         status_t result = native_window_api_disconnect(window.get(),
                 NATIVE_WINDOW_API_CAMERA);
         if (result != NO_ERROR) {
-            LOGW("native_window_api_disconnect failed: %s (%d)", strerror(-result),
+            ALOGW("native_window_api_disconnect failed: %s (%d)", strerror(-result),
                     result);
         }
     }
@@ -483,7 +473,7 @@
     Mutex::Autolock lock(mLock);
 
     if (checkPid() != NO_ERROR) {
-        LOGW("different client - don't disconnect");
+        ALOGW("different client - don't disconnect");
         return;
     }
 
@@ -536,7 +526,7 @@
     if (window != 0) {
         result = native_window_api_connect(window.get(), NATIVE_WINDOW_API_CAMERA);
         if (result != NO_ERROR) {
-            LOGE("native_window_api_connect failed: %s (%d)", strerror(-result),
+            ALOGE("native_window_api_connect failed: %s (%d)", strerror(-result),
                     result);
             return result;
         }
@@ -634,7 +624,7 @@
             return startPreviewMode();
         case CAMERA_RECORDING_MODE:
             if (mSurface == 0 && mPreviewWindow == 0) {
-                LOGE("mSurface or mPreviewWindow must be set before startRecordingMode.");
+                ALOGE("mSurface or mPreviewWindow must be set before startRecordingMode.");
                 return INVALID_OPERATION;
             }
             return startRecordingMode();
@@ -686,7 +676,7 @@
     mCameraService->playSound(SOUND_RECORDING);
     result = mHardware->startRecording();
     if (result != NO_ERROR) {
-        LOGE("mHardware->startRecording() failed with status %d", result);
+        ALOGE("mHardware->startRecording() failed with status %d", result);
     }
     return result;
 }
@@ -780,7 +770,7 @@
 
     if ((msgType & CAMERA_MSG_RAW_IMAGE) &&
         (msgType & CAMERA_MSG_RAW_IMAGE_NOTIFY)) {
-        LOGE("CAMERA_MSG_RAW_IMAGE and CAMERA_MSG_RAW_IMAGE_NOTIFY"
+        ALOGE("CAMERA_MSG_RAW_IMAGE and CAMERA_MSG_RAW_IMAGE_NOTIFY"
                 " cannot be both enabled");
         return BAD_VALUE;
     }
@@ -841,7 +831,7 @@
         // Disabling shutter sound is not allowed. Deny if the current
         // process is not mediaserver.
         if (getCallingPid() != getpid()) {
-            LOGE("Failed to disable shutter sound. Permission denied (pid %d)", getCallingPid());
+            ALOGE("Failed to disable shutter sound. Permission denied (pid %d)", getCallingPid());
             return PERMISSION_DENIED;
         }
     }
@@ -917,7 +907,7 @@
         }
         usleep(CHECK_MESSAGE_INTERVAL * 1000);
     }
-    LOGW("lockIfMessageWanted(%d): dropped unwanted message", msgType);
+    ALOGW("lockIfMessageWanted(%d): dropped unwanted message", msgType);
     return false;
 }
 
@@ -936,12 +926,12 @@
 
     // The checks below are not necessary and are for debugging only.
     if (client->mCameraService.get() != gCameraService) {
-        LOGE("mismatch service!");
+        ALOGE("mismatch service!");
         return NULL;
     }
 
     if (client->mHardware == 0) {
-        LOGE("mHardware == 0: callback after disconnect()?");
+        ALOGE("mHardware == 0: callback after disconnect()?");
         return NULL;
     }
 
@@ -999,7 +989,7 @@
     if (!client->lockIfMessageWanted(msgType)) return;
 
     if (dataPtr == 0 && metadata == NULL) {
-        LOGE("Null data returned in data callback");
+        ALOGE("Null data returned in data callback");
         client->handleGenericNotify(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0);
         return;
     }
@@ -1032,7 +1022,7 @@
     if (!client->lockIfMessageWanted(msgType)) return;
 
     if (dataPtr == 0) {
-        LOGE("Null data returned in data with timestamp callback");
+        ALOGE("Null data returned in data with timestamp callback");
         client->handleGenericNotify(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0);
         return;
     }
@@ -1187,7 +1177,7 @@
         mPreviewBuffer = new MemoryHeapBase(size, 0, NULL);
     }
     if (mPreviewBuffer == 0) {
-        LOGE("failed to allocate space for preview buffer");
+        ALOGE("failed to allocate space for preview buffer");
         mLock.unlock();
         return;
     }
@@ -1197,7 +1187,7 @@
 
     sp<MemoryBase> frame = new MemoryBase(previewBuffer, 0, size);
     if (frame == 0) {
-        LOGE("failed to allocate space for frame callback");
+        ALOGE("failed to allocate space for frame callback");
         mLock.unlock();
         return;
     }
@@ -1223,7 +1213,7 @@
             return HAL_TRANSFORM_FLIP_V | HAL_TRANSFORM_ROT_90;
         }
     }
-    LOGE("Invalid setDisplayOrientation degrees=%d", degrees);
+    ALOGE("Invalid setDisplayOrientation degrees=%d", degrees);
     return -1;
 }
 
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index cdfbc56..bad41f5 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -76,7 +76,6 @@
     void                setCameraFree(int cameraId);
 
     // sounds
-    audio_stream_type_t mAudioStreamType;
     MediaPlayer*        newMediaPlayer(const char *file);
 
     Mutex               mSoundLock;
diff --git a/services/camera/tests/CameraServiceTest/CameraServiceTest.cpp b/services/camera/tests/CameraServiceTest/CameraServiceTest.cpp
index 69f60ca..1055538 100644
--- a/services/camera/tests/CameraServiceTest/CameraServiceTest.cpp
+++ b/services/camera/tests/CameraServiceTest/CameraServiceTest.cpp
@@ -217,7 +217,7 @@
 
 void MCameraClient::assertTest(OP op, int v1, int v2) {
     if (!test(op, v1, v2)) {
-        LOGE("assertTest failed: op=%d, v1=%d, v2=%d", op, v1, v2);
+        ALOGE("assertTest failed: op=%d, v1=%d, v2=%d", op, v1, v2);
         ASSERT(0);
     }
 }
diff --git a/services/input/EventHub.cpp b/services/input/EventHub.cpp
index f179208..68bbb570 100644
--- a/services/input/EventHub.cpp
+++ b/services/input/EventHub.cpp
@@ -246,7 +246,7 @@
         if (device && test_bit(axis, device->absBitmask)) {
             struct input_absinfo info;
             if(ioctl(device->fd, EVIOCGABS(axis), &info)) {
-                LOGW("Error reading absolute controller %d for device %s fd %d, errno=%d",
+                ALOGW("Error reading absolute controller %d for device %s fd %d, errno=%d",
                      axis, device->identifier.name.string(), device->fd, errno);
                 return -errno;
             }
@@ -355,7 +355,7 @@
         if (device && test_bit(axis, device->absBitmask)) {
             struct input_absinfo info;
             if(ioctl(device->fd, EVIOCGABS(axis), &info)) {
-                LOGW("Error reading absolute controller %d for device %s fd %d, errno=%d",
+                ALOGW("Error reading absolute controller %d for device %s fd %d, errno=%d",
                      axis, device->identifier.name.string(), device->fd, errno);
                 return -errno;
             }
@@ -535,7 +535,7 @@
 }
 
 size_t EventHub::getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize) {
-    LOG_ASSERT(bufferSize >= 1);
+    ALOG_ASSERT(bufferSize >= 1);
 
     AutoMutex _l(mLock);
 
@@ -551,7 +551,7 @@
         if (mNeedToReopenDevices) {
             mNeedToReopenDevices = false;
 
-            LOGI("Reopening all input devices due to a configuration change.");
+            ALOGI("Reopening all input devices due to a configuration change.");
 
             closeAllDevicesLocked();
             mNeedToScanDevices = true;
@@ -614,7 +614,7 @@
                 if (eventItem.events & EPOLLIN) {
                     mPendingINotify = true;
                 } else {
-                    LOGW("Received unexpected epoll event 0x%08x for INotify.", eventItem.events);
+                    ALOGW("Received unexpected epoll event 0x%08x for INotify.", eventItem.events);
                 }
                 continue;
             }
@@ -629,7 +629,7 @@
                         nRead = read(mWakeReadPipeFd, buffer, sizeof(buffer));
                     } while ((nRead == -1 && errno == EINTR) || nRead == sizeof(buffer));
                 } else {
-                    LOGW("Received unexpected epoll event 0x%08x for wake read pipe.",
+                    ALOGW("Received unexpected epoll event 0x%08x for wake read pipe.",
                             eventItem.events);
                 }
                 continue;
@@ -637,7 +637,7 @@
 
             ssize_t deviceIndex = mDevices.indexOfKey(eventItem.data.u32);
             if (deviceIndex < 0) {
-                LOGW("Received unexpected epoll event 0x%08x for unknown device id %d.",
+                ALOGW("Received unexpected epoll event 0x%08x for unknown device id %d.",
                         eventItem.events, eventItem.data.u32);
                 continue;
             }
@@ -648,16 +648,16 @@
                         sizeof(struct input_event) * capacity);
                 if (readSize == 0 || (readSize < 0 && errno == ENODEV)) {
                     // Device was removed before INotify noticed.
-                    LOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d capacity: %d errno: %d)\n",
+                    ALOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d capacity: %d errno: %d)\n",
                          device->fd, readSize, bufferSize, capacity, errno);
                     deviceChanged = true;
                     closeDeviceLocked(device);
                 } else if (readSize < 0) {
                     if (errno != EAGAIN && errno != EINTR) {
-                        LOGW("could not get event (errno=%d)", errno);
+                        ALOGW("could not get event (errno=%d)", errno);
                     }
                 } else if ((readSize % sizeof(struct input_event)) != 0) {
-                    LOGE("could not get event (wrong size: %d)", readSize);
+                    ALOGE("could not get event (wrong size: %d)", readSize);
                 } else {
                     int32_t deviceId = device->id == mBuiltInKeyboardId ? 0 : device->id;
 
@@ -710,7 +710,7 @@
                     }
                 }
             } else {
-                LOGW("Received unexpected epoll event 0x%08x for device %s.",
+                ALOGW("Received unexpected epoll event 0x%08x for device %s.",
                         eventItem.events, device->identifier.name.string());
             }
         }
@@ -768,7 +768,7 @@
             // Sleep after errors to avoid locking up the system.
             // Hopefully the error is transient.
             if (errno != EINTR) {
-                LOGW("poll failed (errno=%d)\n", errno);
+                ALOGW("poll failed (errno=%d)\n", errno);
                 usleep(100000);
             }
         } else {
@@ -803,14 +803,14 @@
     } while (nWrite == -1 && errno == EINTR);
 
     if (nWrite != 1 && errno != EAGAIN) {
-        LOGW("Could not write wake signal, errno=%d", errno);
+        ALOGW("Could not write wake signal, errno=%d", errno);
     }
 }
 
 void EventHub::scanDevicesLocked() {
     status_t res = scanDirLocked(DEVICE_PATH);
     if(res < 0) {
-        LOGE("scan dir failed for %s\n", DEVICE_PATH);
+        ALOGE("scan dir failed for %s\n", DEVICE_PATH);
     }
 }
 
@@ -847,7 +847,7 @@
 
     int fd = open(devicePath, O_RDWR);
     if(fd < 0) {
-        LOGE("could not open %s, %s\n", devicePath, strerror(errno));
+        ALOGE("could not open %s, %s\n", devicePath, strerror(errno));
         return -1;
     }
 
@@ -865,7 +865,7 @@
     for (size_t i = 0; i < mExcludedDevices.size(); i++) {
         const String8& item = mExcludedDevices.itemAt(i);
         if (identifier.name == item) {
-            LOGI("ignoring event id %s driver %s\n", devicePath, item.string());
+            ALOGI("ignoring event id %s driver %s\n", devicePath, item.string());
             close(fd);
             return -1;
         }
@@ -874,7 +874,7 @@
     // Get device driver version.
     int driverVersion;
     if(ioctl(fd, EVIOCGVERSION, &driverVersion)) {
-        LOGE("could not get driver version for %s, %s\n", devicePath, strerror(errno));
+        ALOGE("could not get driver version for %s, %s\n", devicePath, strerror(errno));
         close(fd);
         return -1;
     }
@@ -882,7 +882,7 @@
     // Get device identifier.
     struct input_id inputId;
     if(ioctl(fd, EVIOCGID, &inputId)) {
-        LOGE("could not get device input id for %s, %s\n", devicePath, strerror(errno));
+        ALOGE("could not get device input id for %s, %s\n", devicePath, strerror(errno));
         close(fd);
         return -1;
     }
@@ -909,7 +909,7 @@
 
     // Make file descriptor non-blocking for use with poll().
     if (fcntl(fd, F_SETFL, O_NONBLOCK)) {
-        LOGE("Error %d making device file descriptor non-blocking.", errno);
+        ALOGE("Error %d making device file descriptor non-blocking.", errno);
         close(fd);
         return -1;
     }
@@ -919,16 +919,16 @@
     Device* device = new Device(fd, deviceId, String8(devicePath), identifier);
 
 #if 0
-    LOGI("add device %d: %s\n", deviceId, devicePath);
-    LOGI("  bus:       %04x\n"
+    ALOGI("add device %d: %s\n", deviceId, devicePath);
+    ALOGI("  bus:       %04x\n"
          "  vendor     %04x\n"
          "  product    %04x\n"
          "  version    %04x\n",
         identifier.bus, identifier.vendor, identifier.product, identifier.version);
-    LOGI("  name:      \"%s\"\n", identifier.name.string());
-    LOGI("  location:  \"%s\"\n", identifier.location.string());
-    LOGI("  unique id: \"%s\"\n", identifier.uniqueId.string());
-    LOGI("  driver:    v%d.%d.%d\n",
+    ALOGI("  name:      \"%s\"\n", identifier.name.string());
+    ALOGI("  location:  \"%s\"\n", identifier.location.string());
+    ALOGI("  unique id: \"%s\"\n", identifier.uniqueId.string());
+    ALOGI("  driver:    v%d.%d.%d\n",
         driverVersion >> 16, (driverVersion >> 8) & 0xff, driverVersion & 0xff);
 #endif
 
@@ -1072,12 +1072,12 @@
     eventItem.events = EPOLLIN;
     eventItem.data.u32 = deviceId;
     if (epoll_ctl(mEpollFd, EPOLL_CTL_ADD, fd, &eventItem)) {
-        LOGE("Could not add device fd to epoll instance.  errno=%d", errno);
+        ALOGE("Could not add device fd to epoll instance.  errno=%d", errno);
         delete device;
         return -1;
     }
 
-    LOGI("New device: id=%d, fd=%d, path='%s', name='%s', classes=0x%x, "
+    ALOGI("New device: id=%d, fd=%d, path='%s', name='%s', classes=0x%x, "
             "configuration='%s', keyLayout='%s', keyCharacterMap='%s', builtinKeyboard=%s",
          deviceId, fd, devicePath, device->identifier.name.string(),
          device->classes,
@@ -1103,7 +1103,7 @@
         status_t status = PropertyMap::load(device->configurationFile,
                 &device->configuration);
         if (status) {
-            LOGE("Error loading input device configuration file for device '%s'.  "
+            ALOGE("Error loading input device configuration file for device '%s'.  "
                     "Using default configuration.",
                     device->identifier.name.string());
         }
@@ -1170,18 +1170,18 @@
 }
 
 void EventHub::closeDeviceLocked(Device* device) {
-    LOGI("Removed device: path=%s name=%s id=%d fd=%d classes=0x%x\n",
+    ALOGI("Removed device: path=%s name=%s id=%d fd=%d classes=0x%x\n",
          device->path.string(), device->identifier.name.string(), device->id,
          device->fd, device->classes);
 
     if (device->id == mBuiltInKeyboardId) {
-        LOGW("built-in keyboard device %s (id=%d) is closing! the apps will not like this",
+        ALOGW("built-in keyboard device %s (id=%d) is closing! the apps will not like this",
                 device->path.string(), mBuiltInKeyboardId);
         mBuiltInKeyboardId = -1;
     }
 
     if (epoll_ctl(mEpollFd, EPOLL_CTL_DEL, device->fd, NULL)) {
-        LOGW("Could not remove device fd from epoll instance.  errno=%d", errno);
+        ALOGW("Could not remove device fd from epoll instance.  errno=%d", errno);
     }
 
     mDevices.removeItem(device->id);
@@ -1202,7 +1202,7 @@
         // Unlink the device from the opening devices list then delete it.
         // We don't need to tell the client that the device was closed because
         // it does not even know it was opened in the first place.
-        LOGI("Device %s was immediately closed after opening.", device->path.string());
+        ALOGI("Device %s was immediately closed after opening.", device->path.string());
         if (pred) {
             pred->next = device->next;
         } else {
@@ -1231,7 +1231,7 @@
     if(res < (int)sizeof(*event)) {
         if(errno == EINTR)
             return 0;
-        LOGW("could not get event, %s\n", strerror(errno));
+        ALOGW("could not get event, %s\n", strerror(errno));
         return -1;
     }
     //printf("got %d bytes of event information\n", res);
@@ -1248,7 +1248,7 @@
             if(event->mask & IN_CREATE) {
                 openDeviceLocked(devname);
             } else {
-                LOGI("Removing device '%s' due to inotify event\n", devname);
+                ALOGI("Removing device '%s' due to inotify event\n", devname);
                 closeDeviceByPathLocked(devname);
             }
         }
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index 4ade595..a0f372a 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -121,7 +121,7 @@
 
 static bool validateKeyEvent(int32_t action) {
     if (! isValidKeyAction(action)) {
-        LOGE("Key event has invalid action code 0x%x", action);
+        ALOGE("Key event has invalid action code 0x%x", action);
         return false;
     }
     return true;
@@ -152,11 +152,11 @@
 static bool validateMotionEvent(int32_t action, size_t pointerCount,
         const PointerProperties* pointerProperties) {
     if (! isValidMotionAction(action, pointerCount)) {
-        LOGE("Motion event has invalid action code 0x%x", action);
+        ALOGE("Motion event has invalid action code 0x%x", action);
         return false;
     }
     if (pointerCount < 1 || pointerCount > MAX_POINTERS) {
-        LOGE("Motion event has invalid pointer count %d; value must be between 1 and %d.",
+        ALOGE("Motion event has invalid pointer count %d; value must be between 1 and %d.",
                 pointerCount, MAX_POINTERS);
         return false;
     }
@@ -164,12 +164,12 @@
     for (size_t i = 0; i < pointerCount; i++) {
         int32_t id = pointerProperties[i].id;
         if (id < 0 || id > MAX_POINTER_ID) {
-            LOGE("Motion event has invalid pointer id %d; value must be between 0 and %d",
+            ALOGE("Motion event has invalid pointer id %d; value must be between 0 and %d",
                     id, MAX_POINTER_ID);
             return false;
         }
         if (pointerIdBits.hasBit(id)) {
-            LOGE("Motion event has duplicate pointer id %d", id);
+            ALOGE("Motion event has duplicate pointer id %d", id);
             return false;
         }
         pointerIdBits.markBit(id);
@@ -376,7 +376,7 @@
 
     // Now we have an event to dispatch.
     // All events are eventually dequeued and processed this way, even if we intend to drop them.
-    LOG_ASSERT(mPendingEvent != NULL);
+    ALOG_ASSERT(mPendingEvent != NULL);
     bool done = false;
     DropReason dropReason = DROP_REASON_NOT_DROPPED;
     if (!(mPendingEvent->policyFlags & POLICY_FLAG_PASS_TO_USER)) {
@@ -445,7 +445,7 @@
     }
 
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
         break;
     }
 
@@ -564,25 +564,25 @@
         reason = "inbound event was dropped because the policy consumed it";
         break;
     case DROP_REASON_DISABLED:
-        LOGI("Dropped event because input dispatch is disabled.");
+        ALOGI("Dropped event because input dispatch is disabled.");
         reason = "inbound event was dropped because input dispatch is disabled";
         break;
     case DROP_REASON_APP_SWITCH:
-        LOGI("Dropped event because of pending overdue app switch.");
+        ALOGI("Dropped event because of pending overdue app switch.");
         reason = "inbound event was dropped because of pending overdue app switch";
         break;
     case DROP_REASON_BLOCKED:
-        LOGI("Dropped event because the current application is not responding and the user "
+        ALOGI("Dropped event because the current application is not responding and the user "
                 "has started interacting with a different application.");
         reason = "inbound event was dropped because the current application is not responding "
                 "and the user has started interacting with a different application";
         break;
     case DROP_REASON_STALE:
-        LOGI("Dropped event because it is stale.");
+        ALOGI("Dropped event because it is stale.");
         reason = "inbound event was dropped because it is stale";
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
         return;
     }
 
@@ -1017,7 +1017,7 @@
             toString(resumeWithAppendedMotionSample));
 #endif
 
-    LOG_ASSERT(eventEntry->dispatchInProgress); // should already have been set to true
+    ALOG_ASSERT(eventEntry->dispatchInProgress); // should already have been set to true
 
     pokeUserActivityLocked(eventEntry);
 
@@ -1182,7 +1182,7 @@
             goto Unresponsive;
         }
 
-        LOGI("Dropping event because there is no focused window or focused application.");
+        ALOGI("Dropping event because there is no focused window or focused application.");
         injectionResult = INPUT_EVENT_INJECTION_FAILED;
         goto Failed;
     }
@@ -1401,7 +1401,7 @@
                 goto Unresponsive;
             }
 
-            LOGI("Dropping event because there is no touched window or focused application.");
+            ALOGI("Dropping event because there is no touched window or focused application.");
             injectionResult = INPUT_EVENT_INJECTION_FAILED;
             goto Failed;
         }
@@ -1770,13 +1770,13 @@
                     || windowHandle->getInfo()->ownerUid != injectionState->injectorUid)
             && !hasInjectionPermission(injectionState->injectorPid, injectionState->injectorUid)) {
         if (windowHandle != NULL) {
-            LOGW("Permission denied: injecting event from pid %d uid %d to window %s "
+            ALOGW("Permission denied: injecting event from pid %d uid %d to window %s "
                     "owned by uid %d",
                     injectionState->injectorPid, injectionState->injectorUid,
                     windowHandle->getName().string(),
                     windowHandle->getInfo()->ownerUid);
         } else {
-            LOGW("Permission denied: injecting event from pid %d uid %d",
+            ALOGW("Permission denied: injecting event from pid %d uid %d",
                     injectionState->injectorPid, injectionState->injectorUid);
         }
         return false;
@@ -1878,7 +1878,7 @@
 
     // Make sure we are never called for streaming when splitting across multiple windows.
     bool isSplit = inputTarget->flags & InputTarget::FLAG_SPLIT;
-    LOG_ASSERT(! (resumeWithAppendedMotionSample && isSplit));
+    ALOG_ASSERT(! (resumeWithAppendedMotionSample && isSplit));
 
     // Skip this event if the connection status is not normal.
     // We don't want to enqueue additional outbound events if the connection is broken.
@@ -1892,7 +1892,7 @@
 
     // Split a motion event if needed.
     if (isSplit) {
-        LOG_ASSERT(eventEntry->type == EventEntry::TYPE_MOTION);
+        ALOG_ASSERT(eventEntry->type == EventEntry::TYPE_MOTION);
 
         MotionEntry* originalMotionEntry = static_cast<MotionEntry*>(eventEntry);
         if (inputTarget->pointerIds.count() != originalMotionEntry->pointerCount) {
@@ -2135,11 +2135,11 @@
             connection->getInputChannelName());
 #endif
 
-    LOG_ASSERT(connection->status == Connection::STATUS_NORMAL);
-    LOG_ASSERT(! connection->outboundQueue.isEmpty());
+    ALOG_ASSERT(connection->status == Connection::STATUS_NORMAL);
+    ALOG_ASSERT(! connection->outboundQueue.isEmpty());
 
     DispatchEntry* dispatchEntry = connection->outboundQueue.head;
-    LOG_ASSERT(! dispatchEntry->inProgress);
+    ALOG_ASSERT(! dispatchEntry->inProgress);
 
     // Mark the dispatch entry as in progress.
     dispatchEntry->inProgress = true;
@@ -2160,7 +2160,7 @@
                 keyEntry->eventTime);
 
         if (status) {
-            LOGE("channel '%s' ~ Could not publish key event, "
+            ALOGE("channel '%s' ~ Could not publish key event, "
                     "status=%d", connection->getInputChannelName(), status);
             abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
             return;
@@ -2223,7 +2223,7 @@
                 usingCoords);
 
         if (status) {
-            LOGE("channel '%s' ~ Could not publish motion event, "
+            ALOGE("channel '%s' ~ Could not publish motion event, "
                     "status=%d", connection->getInputChannelName(), status);
             abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
             return;
@@ -2255,7 +2255,7 @@
                     break;
                 }
                 if (status != OK) {
-                    LOGE("channel '%s' ~ Could not append motion sample "
+                    ALOGE("channel '%s' ~ Could not append motion sample "
                             "for a reason other than out of memory, status=%d",
                             connection->getInputChannelName(), status);
                     abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
@@ -2271,14 +2271,14 @@
     }
 
     default: {
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
     }
 
     // Send the dispatch signal.
     status = connection->inputPublisher.sendDispatchSignal();
     if (status) {
-        LOGE("channel '%s' ~ Could not send dispatch signal, status=%d",
+        ALOGE("channel '%s' ~ Could not send dispatch signal, status=%d",
                 connection->getInputChannelName(), status);
         abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
         return;
@@ -2313,7 +2313,7 @@
     // while waiting for the next dispatch cycle to begin.
     status_t status = connection->inputPublisher.reset();
     if (status) {
-        LOGE("channel '%s' ~ Could not reset publisher, status=%d",
+        ALOGE("channel '%s' ~ Could not reset publisher, status=%d",
                 connection->getInputChannelName(), status);
         abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
         return;
@@ -2400,7 +2400,7 @@
 
         ssize_t connectionIndex = d->mConnectionsByReceiveFd.indexOfKey(receiveFd);
         if (connectionIndex < 0) {
-            LOGE("Received spurious receive callback for unknown input channel.  "
+            ALOGE("Received spurious receive callback for unknown input channel.  "
                     "fd=%d, events=0x%x", receiveFd, events);
             return 0; // remove the callback
         }
@@ -2409,7 +2409,7 @@
         sp<Connection> connection = d->mConnectionsByReceiveFd.valueAt(connectionIndex);
         if (!(events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP))) {
             if (!(events & ALOOPER_EVENT_INPUT)) {
-                LOGW("channel '%s' ~ Received spurious callback for unhandled poll event.  "
+                ALOGW("channel '%s' ~ Received spurious callback for unhandled poll event.  "
                         "events=0x%x", connection->getInputChannelName(), events);
                 return 1;
             }
@@ -2423,7 +2423,7 @@
                 return 1;
             }
 
-            LOGE("channel '%s' ~ Failed to receive finished signal.  status=%d",
+            ALOGE("channel '%s' ~ Failed to receive finished signal.  status=%d",
                     connection->getInputChannelName(), status);
             notify = true;
         } else {
@@ -2432,7 +2432,7 @@
             // about them.
             notify = !connection->monitor;
             if (notify) {
-                LOGW("channel '%s' ~ Consumer closed input channel or an error occurred.  "
+                ALOGW("channel '%s' ~ Consumer closed input channel or an error occurred.  "
                         "events=0x%x", connection->getInputChannelName(), events);
             }
         }
@@ -2518,7 +2518,7 @@
 
 InputDispatcher::MotionEntry*
 InputDispatcher::splitMotionEvent(const MotionEntry* originalMotionEntry, BitSet32 pointerIds) {
-    LOG_ASSERT(pointerIds.value != 0);
+    ALOG_ASSERT(pointerIds.value != 0);
 
     uint32_t splitPointerIndexMap[MAX_POINTERS];
     PointerProperties splitPointerProperties[MAX_POINTERS];
@@ -2547,7 +2547,7 @@
         // different pointer ids than we expected based on the previous ACTION_DOWN
         // or ACTION_POINTER_DOWN events that caused us to decide to split the pointers
         // in this way.
-        LOGW("Dropping split motion event because the pointer count is %d but "
+        ALOGW("Dropping split motion event because the pointer count is %d but "
                 "we expected there to be %d pointers.  This probably means we received "
                 "a broken sequence of pointer ids from the input device.",
                 splitPointerCount, pointerIds.count());
@@ -3086,7 +3086,7 @@
     }
 
     default:
-        LOGW("Cannot inject event of type %d", event->getType());
+        ALOGW("Cannot inject event of type %d", event->getType());
         return INPUT_EVENT_INJECTION_FAILED;
     }
 
@@ -3187,13 +3187,13 @@
                 ALOGV("Asynchronous input event injection succeeded.");
                 break;
             case INPUT_EVENT_INJECTION_FAILED:
-                LOGW("Asynchronous input event injection failed.");
+                ALOGW("Asynchronous input event injection failed.");
                 break;
             case INPUT_EVENT_INJECTION_PERMISSION_DENIED:
-                LOGW("Asynchronous input event injection permission denied.");
+                ALOGW("Asynchronous input event injection permission denied.");
                 break;
             case INPUT_EVENT_INJECTION_TIMED_OUT:
-                LOGW("Asynchronous input event injection timed out.");
+                ALOGW("Asynchronous input event injection timed out.");
                 break;
             }
         }
@@ -3635,7 +3635,7 @@
         AutoMutex _l(mLock);
 
         if (getConnectionIndexLocked(inputChannel) >= 0) {
-            LOGW("Attempted to register already registered input channel '%s'",
+            ALOGW("Attempted to register already registered input channel '%s'",
                     inputChannel->getName().string());
             return BAD_VALUE;
         }
@@ -3643,7 +3643,7 @@
         sp<Connection> connection = new Connection(inputChannel, inputWindowHandle, monitor);
         status_t status = connection->initialize();
         if (status) {
-            LOGE("Failed to initialize input publisher for input channel '%s', status=%d",
+            ALOGE("Failed to initialize input publisher for input channel '%s', status=%d",
                     inputChannel->getName().string(), status);
             return status;
         }
@@ -3686,7 +3686,7 @@
         bool notify) {
     ssize_t connectionIndex = getConnectionIndexLocked(inputChannel);
     if (connectionIndex < 0) {
-        LOGW("Attempted to unregister already unregistered input channel '%s'",
+        ALOGW("Attempted to unregister already unregistered input channel '%s'",
                 inputChannel->getName().string());
         return BAD_VALUE;
     }
@@ -3762,7 +3762,7 @@
 
 void InputDispatcher::onDispatchCycleBrokenLocked(
         nsecs_t currentTime, const sp<Connection>& connection) {
-    LOGE("channel '%s' ~ Channel is unrecoverably broken and will be disposed!",
+    ALOGE("channel '%s' ~ Channel is unrecoverably broken and will be disposed!",
             connection->getInputChannelName());
 
     CommandEntry* commandEntry = postCommandLocked(
@@ -3774,7 +3774,7 @@
         nsecs_t currentTime, const sp<InputApplicationHandle>& applicationHandle,
         const sp<InputWindowHandle>& windowHandle,
         nsecs_t eventTime, nsecs_t waitStartTime) {
-    LOGI("Application is not responding: %s.  "
+    ALOGI("Application is not responding: %s.  "
             "%01.1fms since event, %01.1fms since wait started",
             getApplicationWindowLabelLocked(applicationHandle, windowHandle).string(),
             (currentTime - eventTime) / 1000000.0,
@@ -3936,7 +3936,7 @@
                 return true; // skip next cycle
             }
 
-            LOG_ASSERT(connection->outboundQueue.head == dispatchEntry);
+            ALOG_ASSERT(connection->outboundQueue.head == dispatchEntry);
 
             // Latch the fallback keycode for this key on an initial down.
             // The fallback keycode cannot change at any other point in the lifecycle.
@@ -3949,7 +3949,7 @@
                 connection->inputState.setFallbackKey(originalKeyCode, fallbackKeyCode);
             }
 
-            LOG_ASSERT(fallbackKeyCode != -1);
+            ALOG_ASSERT(fallbackKeyCode != -1);
 
             // Cancel the fallback key if the policy decides not to send it anymore.
             // We will continue to dispatch the key to the policy but we will no
@@ -4101,7 +4101,7 @@
     if (refCount == 0) {
         delete this;
     } else {
-        LOG_ASSERT(refCount > 0);
+        ALOG_ASSERT(refCount > 0);
     }
 }
 
@@ -4122,7 +4122,7 @@
     if (refCount == 0) {
         delete this;
     } else {
-        LOG_ASSERT(refCount > 0);
+        ALOG_ASSERT(refCount > 0);
     }
 }
 
diff --git a/services/input/InputManager.cpp b/services/input/InputManager.cpp
index 5dfa5d5..6a6547b 100644
--- a/services/input/InputManager.cpp
+++ b/services/input/InputManager.cpp
@@ -53,13 +53,13 @@
 status_t InputManager::start() {
     status_t result = mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY);
     if (result) {
-        LOGE("Could not start InputDispatcher thread due to error %d.", result);
+        ALOGE("Could not start InputDispatcher thread due to error %d.", result);
         return result;
     }
 
     result = mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY);
     if (result) {
-        LOGE("Could not start InputReader thread due to error %d.", result);
+        ALOGE("Could not start InputReader thread due to error %d.", result);
 
         mDispatcherThread->requestExit();
         return result;
@@ -71,12 +71,12 @@
 status_t InputManager::stop() {
     status_t result = mReaderThread->requestExitAndWait();
     if (result) {
-        LOGW("Could not stop InputReader thread due to error %d.", result);
+        ALOGW("Could not stop InputReader thread due to error %d.", result);
     }
 
     result = mDispatcherThread->requestExitAndWait();
     if (result) {
-        LOGW("Could not stop InputDispatcher thread due to error %d.", result);
+        ALOGW("Could not stop InputDispatcher thread due to error %d.", result);
     }
 
     return OK;
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index 55ab0f6..fa0b3d8 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -331,7 +331,7 @@
                 handleConfigurationChangedLocked(rawEvent->when);
                 break;
             default:
-                LOG_ASSERT(false); // can't happen
+                ALOG_ASSERT(false); // can't happen
                 break;
             }
         }
@@ -349,9 +349,9 @@
     device->reset(when);
 
     if (device->isIgnored()) {
-        LOGI("Device added: id=%d, name='%s' (ignored non-input device)", deviceId, name.string());
+        ALOGI("Device added: id=%d, name='%s' (ignored non-input device)", deviceId, name.string());
     } else {
-        LOGI("Device added: id=%d, name='%s', sources=0x%08x", deviceId, name.string(),
+        ALOGI("Device added: id=%d, name='%s', sources=0x%08x", deviceId, name.string(),
                 device->getSources());
     }
 
@@ -359,7 +359,7 @@
     if (deviceIndex < 0) {
         mDevices.add(deviceId, device);
     } else {
-        LOGW("Ignoring spurious device added event for deviceId %d.", deviceId);
+        ALOGW("Ignoring spurious device added event for deviceId %d.", deviceId);
         delete device;
         return;
     }
@@ -372,15 +372,15 @@
         device = mDevices.valueAt(deviceIndex);
         mDevices.removeItemsAt(deviceIndex, 1);
     } else {
-        LOGW("Ignoring spurious device removed event for deviceId %d.", deviceId);
+        ALOGW("Ignoring spurious device removed event for deviceId %d.", deviceId);
         return;
     }
 
     if (device->isIgnored()) {
-        LOGI("Device removed: id=%d, name='%s' (ignored non-input device)",
+        ALOGI("Device removed: id=%d, name='%s' (ignored non-input device)",
                 device->getId(), device->getName().string());
     } else {
-        LOGI("Device removed: id=%d, name='%s', sources=0x%08x",
+        ALOGI("Device removed: id=%d, name='%s', sources=0x%08x",
                 device->getId(), device->getName().string(), device->getSources());
     }
 
@@ -446,7 +446,7 @@
         const RawEvent* rawEvents, size_t count) {
     ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
     if (deviceIndex < 0) {
-        LOGW("Discarding event for unknown deviceId %d.", deviceId);
+        ALOGW("Discarding event for unknown deviceId %d.", deviceId);
         return;
     }
 
@@ -485,7 +485,7 @@
     mEventHub->setExcludedDevices(mConfig.excludedDeviceNames);
 
     if (changes) {
-        LOGI("Reconfiguring input devices.  changes=0x%08x", changes);
+        ALOGI("Reconfiguring input devices.  changes=0x%08x", changes);
         nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
 
         if (changes & InputReaderConfiguration::CHANGE_MUST_REOPEN) {
@@ -547,7 +547,7 @@
 bool InputReader::shouldDropVirtualKeyLocked(nsecs_t now,
         InputDevice* device, int32_t keyCode, int32_t scanCode) {
     if (now < mDisableVirtualKeysTimeout) {
-        LOGI("Dropping virtual key from device %s because virtual keys are "
+        ALOGI("Dropping virtual key from device %s because virtual keys are "
                 "temporarily disabled for the next %0.3fms.  keyCode=%d, scanCode=%d",
                 device->getName().string(),
                 (mDisableVirtualKeysTimeout - now) * 0.000001,
@@ -956,7 +956,7 @@
 #endif
             }
         } else if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_DROPPED) {
-            LOGI("Detected input event buffer overrun for device %s.", mName.string());
+            ALOGI("Detected input event buffer overrun for device %s.", mName.string());
             mDropUntilNextSync = true;
             reset(rawEvent->when);
         } else {
@@ -1554,7 +1554,7 @@
         if (mCurrentSlot < 0 || size_t(mCurrentSlot) >= mSlotCount) {
 #if DEBUG_POINTERS
             if (newSlot) {
-                LOGW("MultiTouch device emitted invalid slot index %d but it "
+                ALOGW("MultiTouch device emitted invalid slot index %d but it "
                         "should be between 0 and %d; ignoring this slot.",
                         mCurrentSlot, mSlotCount - 1);
             }
@@ -1905,7 +1905,7 @@
             mKeyDowns.removeAt(size_t(keyDownIndex));
         } else {
             // key was not actually down
-            LOGI("Dropping key up from device %s because the key was not down.  "
+            ALOGI("Dropping key up from device %s because the key was not down.  "
                     "keyCode=%d, scanCode=%d",
                     getDeviceName().string(), keyCode, scanCode);
             return;
@@ -2121,7 +2121,7 @@
         if (cursorModeString == "navigation") {
             mParameters.mode = Parameters::MODE_NAVIGATION;
         } else if (cursorModeString != "pointer" && cursorModeString != "default") {
-            LOGW("Invalid value for cursor.mode: '%s'", cursorModeString.string());
+            ALOGW("Invalid value for cursor.mode: '%s'", cursorModeString.string());
         }
     }
 
@@ -2148,7 +2148,7 @@
         dump.append(INDENT4 "Mode: navigation\n");
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
 
     dump.appendFormat(INDENT4 "OrientationAware: %s\n",
@@ -2530,7 +2530,7 @@
         } else if (gestureModeString == "spots") {
             mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS;
         } else if (gestureModeString != "default") {
-            LOGW("Invalid value for touch.gestureMode: '%s'", gestureModeString.string());
+            ALOGW("Invalid value for touch.gestureMode: '%s'", gestureModeString.string());
         }
     }
 
@@ -2560,7 +2560,7 @@
         } else if (deviceTypeString == "pointer") {
             mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
         } else if (deviceTypeString != "default") {
-            LOGW("Invalid value for touch.deviceType: '%s'", deviceTypeString.string());
+            ALOGW("Invalid value for touch.deviceType: '%s'", deviceTypeString.string());
         }
     }
 
@@ -2605,7 +2605,7 @@
         dump.append(INDENT4 "DeviceType: pointer\n");
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
 
     dump.appendFormat(INDENT4 "AssociatedDisplay: id=%d, isExternal=%s\n",
@@ -2654,7 +2654,7 @@
 
     // Ensure we have valid X and Y axes.
     if (!mRawPointerAxes.x.valid || !mRawPointerAxes.y.valid) {
-        LOGW(INDENT "Touch device '%s' did not report support for X or Y axis!  "
+        ALOGW(INDENT "Touch device '%s' did not report support for X or Y axis!  "
                 "The device will be inoperable.", getDeviceName().string());
         mDeviceMode = DEVICE_MODE_DISABLED;
         return;
@@ -2666,7 +2666,7 @@
                 mParameters.associatedDisplayIsExternal,
                 &mAssociatedDisplayWidth, &mAssociatedDisplayHeight,
                 &mAssociatedDisplayOrientation)) {
-            LOGI(INDENT "Touch device '%s' could not query the properties of its associated "
+            ALOGI(INDENT "Touch device '%s' could not query the properties of its associated "
                     "display %d.  The device will be inoperable until the display size "
                     "becomes available.",
                     getDeviceName().string(), mParameters.associatedDisplayId);
@@ -2712,7 +2712,7 @@
 
     bool sizeChanged = mSurfaceWidth != width || mSurfaceHeight != height;
     if (sizeChanged || deviceModeChanged) {
-        LOGI("Device reconfigured: id=%d, name='%s', surface size is now %dx%d, mode is %d",
+        ALOGI("Device reconfigured: id=%d, name='%s', surface size is now %dx%d, mode is %d",
                 getDeviceId(), getDeviceName().string(), width, height, mDeviceMode);
 
         mSurfaceWidth = width;
@@ -3010,7 +3010,7 @@
         uint32_t flags;
         if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode,
                 & keyCode, & flags)) {
-            LOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring",
+            ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring",
                     virtualKey.scanCode);
             mVirtualKeys.pop(); // drop the key
             continue;
@@ -3066,7 +3066,7 @@
         } else if (sizeCalibrationString == "area") {
             out.sizeCalibration = Calibration::SIZE_CALIBRATION_AREA;
         } else if (sizeCalibrationString != "default") {
-            LOGW("Invalid value for touch.size.calibration: '%s'",
+            ALOGW("Invalid value for touch.size.calibration: '%s'",
                     sizeCalibrationString.string());
         }
     }
@@ -3089,7 +3089,7 @@
         } else if (pressureCalibrationString == "amplitude") {
             out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_AMPLITUDE;
         } else if (pressureCalibrationString != "default") {
-            LOGW("Invalid value for touch.pressure.calibration: '%s'",
+            ALOGW("Invalid value for touch.pressure.calibration: '%s'",
                     pressureCalibrationString.string());
         }
     }
@@ -3108,7 +3108,7 @@
         } else if (orientationCalibrationString == "vector") {
             out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_VECTOR;
         } else if (orientationCalibrationString != "default") {
-            LOGW("Invalid value for touch.orientation.calibration: '%s'",
+            ALOGW("Invalid value for touch.orientation.calibration: '%s'",
                     orientationCalibrationString.string());
         }
     }
@@ -3122,7 +3122,7 @@
         } else if (distanceCalibrationString == "scaled") {
             out.distanceCalibration = Calibration::DISTANCE_CALIBRATION_SCALED;
         } else if (distanceCalibrationString != "default") {
-            LOGW("Invalid value for touch.distance.calibration: '%s'",
+            ALOGW("Invalid value for touch.distance.calibration: '%s'",
                     distanceCalibrationString.string());
         }
     }
@@ -3187,7 +3187,7 @@
         dump.append(INDENT4 "touch.size.calibration: area\n");
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
 
     if (mCalibration.haveSizeScale) {
@@ -3217,7 +3217,7 @@
         dump.append(INDENT4 "touch.pressure.calibration: amplitude\n");
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
 
     if (mCalibration.havePressureScale) {
@@ -3237,7 +3237,7 @@
         dump.append(INDENT4 "touch.orientation.calibration: vector\n");
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
 
     // Distance
@@ -3249,7 +3249,7 @@
         dump.append(INDENT4 "touch.distance.calibration: scaled\n");
         break;
     default:
-        LOG_ASSERT(false);
+        ALOG_ASSERT(false);
     }
 
     if (mCalibration.haveDistanceScale) {
@@ -3643,7 +3643,7 @@
         // Although applications receive new locations as part of individual pointer up
         // events, they do not generally handle them except when presented in a move event.
         if (moveNeeded) {
-            LOG_ASSERT(moveIdBits.value == dispatchedIdBits.value);
+            ALOG_ASSERT(moveIdBits.value == dispatchedIdBits.value);
             dispatchMotion(when, policyFlags, mSource,
                     AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, 0,
                     mCurrentCookedPointerData.pointerProperties,
@@ -3754,7 +3754,7 @@
                 size = mRawPointerAxes.toolMinor.valid
                         ? avg(in.toolMajor, in.toolMinor) : in.toolMajor;
             } else {
-                LOG_ASSERT(false, "No touch or tool axes.  "
+                ALOG_ASSERT(false, "No touch or tool axes.  "
                         "Size calibration should have been resolved to NONE.");
                 touchMajor = 0;
                 touchMinor = 0;
@@ -4473,7 +4473,7 @@
         // The pointer follows the active touch point.
         // When in HOVER, emit HOVER_MOVE events at the pointer location.
         // When in TAP_DRAG, emit MOVE events at the pointer location.
-        LOG_ASSERT(activeTouchId >= 0);
+        ALOG_ASSERT(activeTouchId >= 0);
 
         mPointerGesture.currentGestureMode = PointerGesture::HOVER;
         if (mPointerGesture.lastGestureMode == PointerGesture::TAP) {
@@ -4573,7 +4573,7 @@
         //
         // When the two fingers move enough or when additional fingers are added, we make
         // a decision to transition into SWIPE or FREEFORM mode accordingly.
-        LOG_ASSERT(activeTouchId >= 0);
+        ALOG_ASSERT(activeTouchId >= 0);
 
         bool settled = when >= mPointerGesture.firstTouchTime
                 + mConfig.pointerGestureMultitouchSettleInterval;
@@ -4782,7 +4782,7 @@
                     "activeGestureId=%d, currentTouchPointerCount=%d",
                     activeTouchId, mPointerGesture.activeGestureId, currentFingerCount);
 #endif
-            LOG_ASSERT(mPointerGesture.activeGestureId >= 0);
+            ALOG_ASSERT(mPointerGesture.activeGestureId >= 0);
 
             mPointerGesture.currentGestureIdBits.clear();
             mPointerGesture.currentGestureIdBits.markBit(mPointerGesture.activeGestureId);
@@ -4804,7 +4804,7 @@
                     "activeGestureId=%d, currentTouchPointerCount=%d",
                     activeTouchId, mPointerGesture.activeGestureId, currentFingerCount);
 #endif
-            LOG_ASSERT(mPointerGesture.activeGestureId >= 0);
+            ALOG_ASSERT(mPointerGesture.activeGestureId >= 0);
 
             mPointerGesture.currentGestureIdBits.clear();
 
@@ -5172,7 +5172,7 @@
         pointerCount += 1;
     }
 
-    LOG_ASSERT(pointerCount != 0);
+    ALOG_ASSERT(pointerCount != 0);
 
     if (changedId >= 0 && pointerCount == 1) {
         // Replace initial down and final up action.
@@ -5184,7 +5184,7 @@
             action = AMOTION_EVENT_ACTION_UP;
         } else {
             // Can't happen.
-            LOG_ASSERT(false);
+            ALOG_ASSERT(false);
         }
     }
 
@@ -5686,7 +5686,7 @@
             && mRawPointerAxes.slot.minValue == 0 && mRawPointerAxes.slot.maxValue > 0) {
         size_t slotCount = mRawPointerAxes.slot.maxValue + 1;
         if (slotCount > MAX_SLOTS) {
-            LOGW("MultiTouch Device %s reported %d slots but the framework "
+            ALOGW("MultiTouch Device %s reported %d slots but the framework "
                     "only supports a maximum of %d slots at this time.",
                     getDeviceName().string(), slotCount, MAX_SLOTS);
             slotCount = MAX_SLOTS;
@@ -5822,7 +5822,7 @@
         // If there are too many axes, start dropping them.
         // Prefer to keep explicitly mapped axes.
         if (mAxes.size() > PointerCoords::MAX_AXES) {
-            LOGI("Joystick '%s' has %d axes but the framework only supports a maximum of %d.",
+            ALOGI("Joystick '%s' has %d axes but the framework only supports a maximum of %d.",
                     getDeviceName().string(), mAxes.size(), PointerCoords::MAX_AXES);
             pruneAxes(true);
             pruneAxes(false);
@@ -5843,7 +5843,7 @@
                     axis.axisInfo.axis = nextGenericAxisId;
                     nextGenericAxisId += 1;
                 } else {
-                    LOGI("Ignoring joystick '%s' axis %d because all of the generic axis ids "
+                    ALOGI("Ignoring joystick '%s' axis %d because all of the generic axis ids "
                             "have already been assigned to other axes.",
                             getDeviceName().string(), mAxes.keyAt(i));
                     mAxes.removeItemsAt(i--);
@@ -5873,7 +5873,7 @@
         if (ignoreExplicitlyMappedAxes && mAxes.valueAt(i).explicitlyMapped) {
             continue;
         }
-        LOGI("Discarding joystick '%s' axis %d because there are too many axes.",
+        ALOGI("Discarding joystick '%s' axis %d because there are too many axes.",
                 getDeviceName().string(), mAxes.keyAt(i));
         mAxes.removeItemsAt(i);
     }
diff --git a/services/input/SpriteController.cpp b/services/input/SpriteController.cpp
index 0ae2ab8..b15d4c8 100644
--- a/services/input/SpriteController.cpp
+++ b/services/input/SpriteController.cpp
@@ -160,7 +160,7 @@
 
                 status_t status = update.state.surfaceControl->setSize(desiredWidth, desiredHeight);
                 if (status) {
-                    LOGE("Error %d resizing sprite surface from %dx%d to %dx%d",
+                    ALOGE("Error %d resizing sprite surface from %dx%d to %dx%d",
                             status, update.state.surfaceWidth, update.state.surfaceHeight,
                             desiredWidth, desiredHeight);
                 } else {
@@ -172,7 +172,7 @@
                     if (update.state.surfaceVisible) {
                         status = update.state.surfaceControl->hide();
                         if (status) {
-                            LOGE("Error %d hiding sprite surface after resize.", status);
+                            ALOGE("Error %d hiding sprite surface after resize.", status);
                         } else {
                             update.state.surfaceVisible = false;
                         }
@@ -200,7 +200,7 @@
             Surface::SurfaceInfo surfaceInfo;
             status_t status = surface->lock(&surfaceInfo);
             if (status) {
-                LOGE("Error %d locking sprite surface before drawing.", status);
+                ALOGE("Error %d locking sprite surface before drawing.", status);
             } else {
                 SkBitmap surfaceBitmap;
                 ssize_t bpr = surfaceInfo.s * bytesPerPixel(surfaceInfo.format);
@@ -228,7 +228,7 @@
 
                 status = surface->unlockAndPost();
                 if (status) {
-                    LOGE("Error %d unlocking and posting sprite surface after drawing.", status);
+                    ALOGE("Error %d unlocking and posting sprite surface after drawing.", status);
                 } else {
                     update.state.surfaceDrawn = true;
                     update.surfaceChanged = surfaceChanged = true;
@@ -260,7 +260,7 @@
                     && (becomingVisible || (update.state.dirty & DIRTY_ALPHA))) {
                 status = update.state.surfaceControl->setAlpha(update.state.alpha);
                 if (status) {
-                    LOGE("Error %d setting sprite surface alpha.", status);
+                    ALOGE("Error %d setting sprite surface alpha.", status);
                 }
             }
 
@@ -271,7 +271,7 @@
                         update.state.positionX - update.state.icon.hotSpotX,
                         update.state.positionY - update.state.icon.hotSpotY);
                 if (status) {
-                    LOGE("Error %d setting sprite surface position.", status);
+                    ALOGE("Error %d setting sprite surface position.", status);
                 }
             }
 
@@ -284,7 +284,7 @@
                         update.state.transformationMatrix.dsdy,
                         update.state.transformationMatrix.dtdy);
                 if (status) {
-                    LOGE("Error %d setting sprite surface transformation matrix.", status);
+                    ALOGE("Error %d setting sprite surface transformation matrix.", status);
                 }
             }
 
@@ -293,14 +293,14 @@
                     && (becomingVisible || (update.state.dirty & DIRTY_LAYER))) {
                 status = update.state.surfaceControl->setLayer(surfaceLayer);
                 if (status) {
-                    LOGE("Error %d setting sprite surface layer.", status);
+                    ALOGE("Error %d setting sprite surface layer.", status);
                 }
             }
 
             if (becomingVisible) {
                 status = update.state.surfaceControl->show(surfaceLayer);
                 if (status) {
-                    LOGE("Error %d showing sprite surface.", status);
+                    ALOGE("Error %d showing sprite surface.", status);
                 } else {
                     update.state.surfaceVisible = true;
                     update.surfaceChanged = surfaceChanged = true;
@@ -308,7 +308,7 @@
             } else if (becomingHidden) {
                 status = update.state.surfaceControl->hide();
                 if (status) {
-                    LOGE("Error %d hiding sprite surface.", status);
+                    ALOGE("Error %d hiding sprite surface.", status);
                 } else {
                     update.state.surfaceVisible = false;
                     update.surfaceChanged = surfaceChanged = true;
@@ -372,7 +372,7 @@
             String8("Sprite"), 0, width, height, PIXEL_FORMAT_RGBA_8888);
     if (surfaceControl == NULL || !surfaceControl->isValid()
             || !surfaceControl->getSurface()->isValid()) {
-        LOGE("Error creating sprite surface.");
+        ALOGE("Error creating sprite surface.");
         return NULL;
     }
     return surfaceControl;
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index f5c4ed4..aba1bc6 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -142,6 +142,9 @@
     private static final String SUBTYPE_MODE_KEYBOARD = "keyboard";
     private static final String SUBTYPE_MODE_VOICE = "voice";
     private static final String TAG_TRY_SUPPRESSING_IME_SWITCHER = "TrySuppressingImeSwitcher";
+    private static final String TAG_ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE =
+            "EnabledWhenDefaultIsNotAsciiCapable";
+    private static final String TAG_ASCII_CAPABLE = "AsciiCapable";
 
     final Context mContext;
     final Resources mRes;
@@ -2163,6 +2166,15 @@
                 }
             }
 
+            if (lastInputMethodSubtypeId == NOT_A_SUBTYPE_ID) {
+                final InputMethodSubtype currentSubtype = getCurrentInputMethodSubtype();
+                if (currentSubtype != null) {
+                    final InputMethodInfo currentImi = mMethodMap.get(mCurMethodId);
+                    lastInputMethodSubtypeId =
+                            getSubtypeIdFromHashCode(currentImi, currentSubtype.hashCode());
+                }
+            }
+
             final int N = imList.size();
             mIms = new InputMethodInfo[N];
             mSubtypeIds = new int[N];
@@ -2472,7 +2484,6 @@
         final HashMap<String, InputMethodSubtype> applicableModeAndSubtypesMap =
                 new HashMap<String, InputMethodSubtype>();
         final int N = subtypes.size();
-        boolean containsKeyboardSubtype = false;
         for (int i = 0; i < N; ++i) {
             // scan overriding implicitly enabled subtypes.
             InputMethodSubtype subtype = subtypes.get(i);
@@ -2506,15 +2517,23 @@
                     if (!systemLocale.equals(locale)) continue;
                 }
                 applicableModeAndSubtypesMap.put(mode, subtype);
-                if (!containsKeyboardSubtype
-                        && SUBTYPE_MODE_KEYBOARD.equalsIgnoreCase(subtype.getMode())) {
-                    containsKeyboardSubtype = true;
+            }
+        }
+        final InputMethodSubtype keyboardSubtype
+                = applicableModeAndSubtypesMap.get(SUBTYPE_MODE_KEYBOARD);
+        final ArrayList<InputMethodSubtype> applicableSubtypes = new ArrayList<InputMethodSubtype>(
+                applicableModeAndSubtypesMap.values());
+        if (keyboardSubtype != null && !keyboardSubtype.containsExtraValueKey(TAG_ASCII_CAPABLE)) {
+            for (int i = 0; i < N; ++i) {
+                final InputMethodSubtype subtype = subtypes.get(i);
+                final String mode = subtype.getMode();
+                if (SUBTYPE_MODE_KEYBOARD.equals(mode) && subtype.containsExtraValueKey(
+                        TAG_ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE)) {
+                    applicableSubtypes.add(subtype);
                 }
             }
         }
-        final ArrayList<InputMethodSubtype> applicableSubtypes = new ArrayList<InputMethodSubtype>(
-                applicableModeAndSubtypesMap.values());
-        if (!containsKeyboardSubtype) {
+        if (keyboardSubtype == null) {
             InputMethodSubtype lastResortKeyboardSubtype = findLastResortApplicableSubtypeLocked(
                     res, subtypes, SUBTYPE_MODE_KEYBOARD, systemLocale, true);
             if (lastResortKeyboardSubtype != null) {
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index bc8ce7d..9573fda 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -55,6 +55,7 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.net.InetAddress;
+import java.net.Inet4Address;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -1325,7 +1326,17 @@
                         String[] dnsServers = mDefaultDnsServers;
                         Collection<InetAddress> dnses = linkProperties.getDnses();
                         if (dnses != null) {
-                            dnsServers = NetworkUtils.makeStrings(dnses);
+                            // we currently only handle IPv4
+                            ArrayList<InetAddress> v4Dnses =
+                                    new ArrayList<InetAddress>(dnses.size());
+                            for (InetAddress dnsAddress : dnses) {
+                                if (dnsAddress instanceof Inet4Address) {
+                                    v4Dnses.add(dnsAddress);
+                                }
+                            }
+                            if (v4Dnses.size() > 0) {
+                                dnsServers = NetworkUtils.makeStrings(v4Dnses);
+                            }
                         }
                         try {
                             mNMService.setDnsForwarders(dnsServers);
@@ -1383,11 +1394,12 @@
             boolean mTryCell = !WAIT_FOR_NETWORK_TO_SETTLE;
             @Override
             public void enter() {
+                turnOnMasterTetherSettings(); // may transition us out
+
                 mTryCell = !WAIT_FOR_NETWORK_TO_SETTLE; // better try something first pass
                                                         // or crazy tests cases will fail
                 chooseUpstreamType(mTryCell);
                 mTryCell = !mTryCell;
-                turnOnMasterTetherSettings(); // may transition us out
             }
             @Override
             public void exit() {
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index 6a82679..eeb7fec 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -71,7 +71,7 @@
 import android.net.NetworkInfo;
 import android.net.NetworkState;
 import android.net.NetworkStats;
-import android.net.NetworkStats.NonMonotonicException;
+import android.net.NetworkStats.NonMonotonicObserver;
 import android.net.NetworkStatsHistory;
 import android.net.NetworkTemplate;
 import android.os.Binder;
@@ -1551,6 +1551,30 @@
         }
     }
 
+    private StatsObserver mStatsObserver = new StatsObserver();
+
+    private class StatsObserver implements NonMonotonicObserver {
+        private String mCurrentType;
+
+        public void setCurrentType(String type) {
+            mCurrentType = type;
+        }
+
+        /** {@inheritDoc} */
+        public void foundNonMonotonic(
+                NetworkStats left, int leftIndex, NetworkStats right, int rightIndex) {
+            Log.w(TAG, "found non-monotonic values; saving to dropbox");
+
+            // record error for debugging
+            final StringBuilder builder = new StringBuilder();
+            builder.append("found non-monotonic " + mCurrentType + " values at left[" + leftIndex
+                    + "] - right[" + rightIndex + "]\n");
+            builder.append("left=").append(left).append('\n');
+            builder.append("right=").append(right).append('\n');
+            mDropBox.addText(TAG_NETSTATS_ERROR, builder.toString());
+        }
+    }
+
     /**
      * Return the delta between two {@link NetworkStats} snapshots, where {@code
      * before} can be {@code null}.
@@ -1558,27 +1582,8 @@
     private NetworkStats computeStatsDelta(
             NetworkStats before, NetworkStats current, boolean collectStale, String type) {
         if (before != null) {
-            try {
-                return current.subtract(before, false);
-            } catch (NonMonotonicException e) {
-                Log.w(TAG, "found non-monotonic values; saving to dropbox");
-
-                // record error for debugging
-                final StringBuilder builder = new StringBuilder();
-                builder.append("found non-monotonic " + type + " values at left[" + e.leftIndex
-                        + "] - right[" + e.rightIndex + "]\n");
-                builder.append("left=").append(e.left).append('\n');
-                builder.append("right=").append(e.right).append('\n');
-                mDropBox.addText(TAG_NETSTATS_ERROR, builder.toString());
-
-                try {
-                    // return clamped delta to help recover
-                    return current.subtract(before, true);
-                } catch (NonMonotonicException e1) {
-                    Log.wtf(TAG, "found non-monotonic values; returning empty delta", e1);
-                    return new NetworkStats(0L, 10);
-                }
-            }
+            mStatsObserver.setCurrentType(type);
+            return NetworkStats.subtract(current, before, mStatsObserver);
         } else if (collectStale) {
             // caller is okay collecting stale stats for first call.
             return current;
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index 36442a0..32aa7a4 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -713,8 +713,7 @@
             mBackupStoppedPackagesFilename.delete();
             FileUtils.setPermissions(mStoppedPackagesFilename.toString(),
                     FileUtils.S_IRUSR|FileUtils.S_IWUSR
-                    |FileUtils.S_IRGRP|FileUtils.S_IWGRP
-                    |FileUtils.S_IROTH,
+                    |FileUtils.S_IRGRP|FileUtils.S_IWGRP,
                     -1, -1);
 
             // Done, all is good!
@@ -951,8 +950,7 @@
             mBackupSettingsFilename.delete();
             FileUtils.setPermissions(mSettingsFilename.toString(),
                     FileUtils.S_IRUSR|FileUtils.S_IWUSR
-                    |FileUtils.S_IRGRP|FileUtils.S_IWGRP
-                    |FileUtils.S_IROTH,
+                    |FileUtils.S_IRGRP|FileUtils.S_IWGRP,
                     -1, -1);
 
             // Write package list file now, use a JournaledFile.
@@ -1007,8 +1005,7 @@
 
             FileUtils.setPermissions(mPackageListFilename.toString(),
                     FileUtils.S_IRUSR|FileUtils.S_IWUSR
-                    |FileUtils.S_IRGRP|FileUtils.S_IWGRP
-                    |FileUtils.S_IROTH,
+                    |FileUtils.S_IRGRP|FileUtils.S_IWGRP,
                     -1, -1);
 
             writeStoppedLPr();
diff --git a/services/jni/com_android_server_AlarmManagerService.cpp b/services/jni/com_android_server_AlarmManagerService.cpp
index 5f189a2..c2f6151 100644
--- a/services/jni/com_android_server_AlarmManagerService.cpp
+++ b/services/jni/com_android_server_AlarmManagerService.cpp
@@ -46,7 +46,7 @@
 
     int result = settimeofday(NULL, &tz);
     if (result < 0) {
-        LOGE("Unable to set kernel timezone to %d: %s\n", minswest, strerror(errno));
+        ALOGE("Unable to set kernel timezone to %d: %s\n", minswest, strerror(errno));
         return -1;
     } else {
         ALOGD("Kernel timezone updated to %d minutes west of GMT\n", minswest);
@@ -74,7 +74,7 @@
 	int result = ioctl(fd, ANDROID_ALARM_SET(type), &ts);
 	if (result < 0)
 	{
-        LOGE("Unable to set alarm to %lld.%09lld: %s\n", seconds, nanoseconds, strerror(errno));
+        ALOGE("Unable to set alarm to %lld.%09lld: %s\n", seconds, nanoseconds, strerror(errno));
     }
 }
 
@@ -89,7 +89,7 @@
 
 	if (result < 0)
 	{
-        LOGE("Unable to wait on alarm: %s\n", strerror(errno));
+        ALOGE("Unable to wait on alarm: %s\n", strerror(errno));
         return 0;
     }
 
diff --git a/services/jni/com_android_server_BatteryService.cpp b/services/jni/com_android_server_BatteryService.cpp
index 2ceb535..1cadc4e 100644
--- a/services/jni/com_android_server_BatteryService.cpp
+++ b/services/jni/com_android_server_BatteryService.cpp
@@ -93,7 +93,7 @@
         case 'U': return gConstants.statusUnknown;          // Unknown
             
         default: {
-            LOGW("Unknown battery status '%s'", status);
+            ALOGW("Unknown battery status '%s'", status);
             return gConstants.statusUnknown;
         }
     }
@@ -111,7 +111,7 @@
             } else if (strcmp(status, "Over voltage") == 0) {
                 return gConstants.healthOverVoltage;
             }
-            LOGW("Unknown battery health[1] '%s'", status);
+            ALOGW("Unknown battery health[1] '%s'", status);
             return gConstants.healthUnknown;
         }
         
@@ -125,7 +125,7 @@
         }
             
         default: {
-            LOGW("Unknown battery health[2] '%s'", status);
+            ALOGW("Unknown battery health[2] '%s'", status);
             return gConstants.healthUnknown;
         }
     }
@@ -137,7 +137,7 @@
         return -1;
     int fd = open(path, O_RDONLY, 0);
     if (fd == -1) {
-        LOGE("Could not open '%s'", path);
+        ALOGE("Could not open '%s'", path);
         return -1;
     }
     
@@ -232,7 +232,7 @@
 
     DIR* dir = opendir(POWER_SUPPLY_PATH);
     if (dir == NULL) {
-        LOGE("Could not open %s\n", POWER_SUPPLY_PATH);
+        ALOGE("Could not open %s\n", POWER_SUPPLY_PATH);
         return -1;
     }
     while ((entry = readdir(dir))) {
@@ -304,28 +304,28 @@
     closedir(dir);
 
     if (!gPaths.acOnlinePath)
-        LOGE("acOnlinePath not found");
+        ALOGE("acOnlinePath not found");
     if (!gPaths.usbOnlinePath)
-        LOGE("usbOnlinePath not found");
+        ALOGE("usbOnlinePath not found");
     if (!gPaths.batteryStatusPath)
-        LOGE("batteryStatusPath not found");
+        ALOGE("batteryStatusPath not found");
     if (!gPaths.batteryHealthPath)
-        LOGE("batteryHealthPath not found");
+        ALOGE("batteryHealthPath not found");
     if (!gPaths.batteryPresentPath)
-        LOGE("batteryPresentPath not found");
+        ALOGE("batteryPresentPath not found");
     if (!gPaths.batteryCapacityPath)
-        LOGE("batteryCapacityPath not found");
+        ALOGE("batteryCapacityPath not found");
     if (!gPaths.batteryVoltagePath)
-        LOGE("batteryVoltagePath not found");
+        ALOGE("batteryVoltagePath not found");
     if (!gPaths.batteryTemperaturePath)
-        LOGE("batteryTemperaturePath not found");
+        ALOGE("batteryTemperaturePath not found");
     if (!gPaths.batteryTechnologyPath)
-        LOGE("batteryTechnologyPath not found");
+        ALOGE("batteryTechnologyPath not found");
 
     jclass clazz = env->FindClass("com/android/server/BatteryService");
 
     if (clazz == NULL) {
-        LOGE("Can't find com/android/server/BatteryService");
+        ALOGE("Can't find com/android/server/BatteryService");
         return -1;
     }
     
@@ -352,7 +352,7 @@
     clazz = env->FindClass("android/os/BatteryManager");
     
     if (clazz == NULL) {
-        LOGE("Can't find android/os/BatteryManager");
+        ALOGE("Can't find android/os/BatteryManager");
         return -1;
     }
     
diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp
index 145f713..e163826 100644
--- a/services/jni/com_android_server_InputManager.cpp
+++ b/services/jni/com_android_server_InputManager.cpp
@@ -312,7 +312,7 @@
 
 bool NativeInputManager::checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
         return true;
@@ -686,7 +686,7 @@
             return;
         }
 
-        LOGI("Setting pointer speed to %d.", speed);
+        ALOGI("Setting pointer speed to %d.", speed);
         mLocked.pointerSpeed = speed;
     } // release lock
 
@@ -702,7 +702,7 @@
             return;
         }
 
-        LOGI("Setting show touches feature to %s.", enabled ? "enabled" : "disabled");
+        ALOGI("Setting show touches feature to %s.", enabled ? "enabled" : "disabled");
         mLocked.showTouches = enabled;
     } // release lock
 
@@ -736,7 +736,7 @@
     }
 
     if (!inputEventObj) {
-        LOGE("Failed to obtain input event object for filterInputEvent.");
+        ALOGE("Failed to obtain input event object for filterInputEvent.");
         return true; // dispatch the event normally
     }
 
@@ -774,7 +774,7 @@
             android_view_KeyEvent_recycle(env, keyEventObj);
             env->DeleteLocalRef(keyEventObj);
         } else {
-            LOGE("Failed to obtain key event object for interceptKeyBeforeQueueing.");
+            ALOGE("Failed to obtain key event object for interceptKeyBeforeQueueing.");
             wmActions = 0;
         }
 
@@ -879,7 +879,7 @@
                 }
             }
         } else {
-            LOGE("Failed to obtain key event object for interceptKeyBeforeDispatching.");
+            ALOGE("Failed to obtain key event object for interceptKeyBeforeDispatching.");
         }
         env->DeleteLocalRef(inputWindowHandleObj);
     }
@@ -917,7 +917,7 @@
                 env->DeleteLocalRef(fallbackKeyEventObj);
             }
         } else {
-            LOGE("Failed to obtain key event object for dispatchUnhandledKey.");
+            ALOGE("Failed to obtain key event object for dispatchUnhandledKey.");
         }
         env->DeleteLocalRef(inputWindowHandleObj);
     }
@@ -958,7 +958,7 @@
 
 static bool checkInputManagerUnitialized(JNIEnv* env) {
     if (gNativeInputManager == NULL) {
-        LOGE("Input manager not initialized.");
+        ALOGE("Input manager not initialized.");
         jniThrowRuntimeException(env, "Input manager not initialized.");
         return true;
     }
@@ -971,7 +971,7 @@
         sp<Looper> looper = android_os_MessageQueue_getLooper(env, messageQueueObj);
         gNativeInputManager = new NativeInputManager(contextObj, callbacksObj, looper);
     } else {
-        LOGE("Input manager already initialized.");
+        ALOGE("Input manager already initialized.");
         jniThrowRuntimeException(env, "Input manager already initialized.");
     }
 }
@@ -1068,7 +1068,7 @@
 
 static void android_server_InputManager_handleInputChannelDisposed(JNIEnv* env,
         jobject inputChannelObj, const sp<InputChannel>& inputChannel, void* data) {
-    LOGW("Input channel object '%s' was disposed without first being unregistered with "
+    ALOGW("Input channel object '%s' was disposed without first being unregistered with "
             "the input manager!", inputChannel->getName().string());
 
     if (gNativeInputManager != NULL) {
diff --git a/services/jni/com_android_server_PowerManagerService.cpp b/services/jni/com_android_server_PowerManagerService.cpp
index 08650e1..d2b3118 100644
--- a/services/jni/com_android_server_PowerManagerService.cpp
+++ b/services/jni/com_android_server_PowerManagerService.cpp
@@ -58,7 +58,7 @@
 
 static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
         return true;
diff --git a/services/jni/com_android_server_UsbDeviceManager.cpp b/services/jni/com_android_server_UsbDeviceManager.cpp
index 40f0dbd..0cd94b9 100644
--- a/services/jni/com_android_server_UsbDeviceManager.cpp
+++ b/services/jni/com_android_server_UsbDeviceManager.cpp
@@ -42,7 +42,7 @@
 
 static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
     }
@@ -66,7 +66,7 @@
 {
     int fd = open(DRIVER_NAME, O_RDWR);
     if (fd < 0) {
-        LOGE("could not open %s", DRIVER_NAME);
+        ALOGE("could not open %s", DRIVER_NAME);
         return NULL;
     }
     jclass stringClass = env->FindClass("java/lang/String");
@@ -88,7 +88,7 @@
 {
     int fd = open(DRIVER_NAME, O_RDWR);
     if (fd < 0) {
-        LOGE("could not open %s", DRIVER_NAME);
+        ALOGE("could not open %s", DRIVER_NAME);
         return NULL;
     }
     jobject fileDescriptor = jniCreateFileDescriptor(env, fd);
@@ -103,7 +103,7 @@
 {
     int fd = open(DRIVER_NAME, O_RDWR);
     if (fd < 0) {
-        LOGE("could not open %s", DRIVER_NAME);
+        ALOGE("could not open %s", DRIVER_NAME);
         return false;
     }
     int result = ioctl(fd, ACCESSORY_IS_START_REQUESTED);
@@ -125,7 +125,7 @@
 {
     jclass clazz = env->FindClass("com/android/server/usb/UsbDeviceManager");
     if (clazz == NULL) {
-        LOGE("Can't find com/android/server/usb/UsbDeviceManager");
+        ALOGE("Can't find com/android/server/usb/UsbDeviceManager");
         return -1;
     }
 
diff --git a/services/jni/com_android_server_UsbHostManager.cpp b/services/jni/com_android_server_UsbHostManager.cpp
index f1abf56..d0a6cdf 100644
--- a/services/jni/com_android_server_UsbHostManager.cpp
+++ b/services/jni/com_android_server_UsbHostManager.cpp
@@ -45,7 +45,7 @@
 
 static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
     }
@@ -57,7 +57,7 @@
 
     struct usb_device *device = usb_device_open(devname);
     if (!device) {
-        LOGE("usb_device_open failed\n");
+        ALOGE("usb_device_open failed\n");
         return 0;
     }
 
@@ -135,7 +135,7 @@
 {
     struct usb_host_context* context = usb_host_init();
     if (!context) {
-        LOGE("usb_host_init failed");
+        ALOGE("usb_host_init failed");
         return;
     }
     // this will never return so it is safe to pass thiz directly
@@ -175,17 +175,17 @@
 {
     jclass clazz = env->FindClass("com/android/server/usb/UsbHostManager");
     if (clazz == NULL) {
-        LOGE("Can't find com/android/server/usb/UsbHostManager");
+        ALOGE("Can't find com/android/server/usb/UsbHostManager");
         return -1;
     }
     method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIII[I[I)V");
     if (method_usbDeviceAdded == NULL) {
-        LOGE("Can't find usbDeviceAdded");
+        ALOGE("Can't find usbDeviceAdded");
         return -1;
     }
     method_usbDeviceRemoved = env->GetMethodID(clazz, "usbDeviceRemoved", "(Ljava/lang/String;)V");
     if (method_usbDeviceRemoved == NULL) {
-        LOGE("Can't find usbDeviceRemoved");
+        ALOGE("Can't find usbDeviceRemoved");
         return -1;
     }
 
diff --git a/services/jni/com_android_server_VibratorService.cpp b/services/jni/com_android_server_VibratorService.cpp
index 0912d43..2b3f74a 100644
--- a/services/jni/com_android_server_VibratorService.cpp
+++ b/services/jni/com_android_server_VibratorService.cpp
@@ -36,13 +36,13 @@
 
 static void vibratorOn(JNIEnv *env, jobject clazz, jlong timeout_ms)
 {
-    // LOGI("vibratorOn\n");
+    // ALOGI("vibratorOn\n");
     vibrator_on(timeout_ms);
 }
 
 static void vibratorOff(JNIEnv *env, jobject clazz)
 {
-    // LOGI("vibratorOff\n");
+    // ALOGI("vibratorOff\n");
     vibrator_off();
 }
 
diff --git a/services/jni/com_android_server_connectivity_Vpn.cpp b/services/jni/com_android_server_connectivity_Vpn.cpp
index d9b8a14..ab8c959 100644
--- a/services/jni/com_android_server_connectivity_Vpn.cpp
+++ b/services/jni/com_android_server_connectivity_Vpn.cpp
@@ -63,21 +63,21 @@
     // Allocate interface.
     ifr4.ifr_flags = IFF_TUN | IFF_NO_PI;
     if (ioctl(tun, TUNSETIFF, &ifr4)) {
-        LOGE("Cannot allocate TUN: %s", strerror(errno));
+        ALOGE("Cannot allocate TUN: %s", strerror(errno));
         goto error;
     }
 
     // Activate interface.
     ifr4.ifr_flags = IFF_UP;
     if (ioctl(inet4, SIOCSIFFLAGS, &ifr4)) {
-        LOGE("Cannot activate %s: %s", ifr4.ifr_name, strerror(errno));
+        ALOGE("Cannot activate %s: %s", ifr4.ifr_name, strerror(errno));
         goto error;
     }
 
     // Set MTU if it is specified.
     ifr4.ifr_mtu = mtu;
     if (mtu > 0 && ioctl(inet4, SIOCSIFMTU, &ifr4)) {
-        LOGE("Cannot set MTU on %s: %s", ifr4.ifr_name, strerror(errno));
+        ALOGE("Cannot set MTU on %s: %s", ifr4.ifr_name, strerror(errno));
         goto error;
     }
 
@@ -92,7 +92,7 @@
 {
     ifreq ifr4;
     if (ioctl(tun, TUNGETIFF, &ifr4)) {
-        LOGE("Cannot get interface name: %s", strerror(errno));
+        ALOGE("Cannot get interface name: %s", strerror(errno));
         return SYSTEM_ERROR;
     }
     strncpy(name, ifr4.ifr_name, IFNAMSIZ);
@@ -104,7 +104,7 @@
     ifreq ifr4;
     strncpy(ifr4.ifr_name, name, IFNAMSIZ);
     if (ioctl(inet4, SIOGIFINDEX, &ifr4)) {
-        LOGE("Cannot get index of %s: %s", name, strerror(errno));
+        ALOGE("Cannot get index of %s: %s", name, strerror(errno));
         return SYSTEM_ERROR;
     }
     return ifr4.ifr_ifindex;
@@ -176,11 +176,11 @@
     }
 
     if (count == BAD_ARGUMENT) {
-        LOGE("Invalid address: %s/%d", address, prefix);
+        ALOGE("Invalid address: %s/%d", address, prefix);
     } else if (count == SYSTEM_ERROR) {
-        LOGE("Cannot add address: %s/%d: %s", address, prefix, strerror(errno));
+        ALOGE("Cannot add address: %s/%d: %s", address, prefix, strerror(errno));
     } else if (*addresses) {
-        LOGE("Invalid address: %s", addresses);
+        ALOGE("Invalid address: %s", addresses);
         count = BAD_ARGUMENT;
     }
 
@@ -265,12 +265,12 @@
     }
 
     if (count == BAD_ARGUMENT) {
-        LOGE("Invalid route: %s/%d", address, prefix);
+        ALOGE("Invalid route: %s/%d", address, prefix);
     } else if (count == SYSTEM_ERROR) {
-        LOGE("Cannot add route: %s/%d: %s",
+        ALOGE("Cannot add route: %s/%d: %s",
                 address, prefix, strerror(errno));
     } else if (*routes) {
-        LOGE("Invalid route: %s", routes);
+        ALOGE("Invalid route: %s", routes);
         count = BAD_ARGUMENT;
     }
 
@@ -284,7 +284,7 @@
     ifr4.ifr_flags = 0;
 
     if (ioctl(inet4, SIOCSIFFLAGS, &ifr4) && errno != ENODEV) {
-        LOGE("Cannot reset %s: %s", name, strerror(errno));
+        ALOGE("Cannot reset %s: %s", name, strerror(errno));
         return SYSTEM_ERROR;
     }
     return 0;
@@ -297,7 +297,7 @@
     ifr4.ifr_flags = 0;
 
     if (ioctl(inet4, SIOCGIFFLAGS, &ifr4) && errno != ENODEV) {
-        LOGE("Cannot check %s: %s", name, strerror(errno));
+        ALOGE("Cannot check %s: %s", name, strerror(errno));
     }
     return ifr4.ifr_flags;
 }
@@ -305,7 +305,7 @@
 static int bind_to_interface(int socket, const char *name)
 {
     if (setsockopt(socket, SOL_SOCKET, SO_BINDTODEVICE, name, strlen(name))) {
-        LOGE("Cannot bind socket to %s: %s", name, strerror(errno));
+        ALOGE("Cannot bind socket to %s: %s", name, strerror(errno));
         return SYSTEM_ERROR;
     }
     return 0;
diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp
index 2e5b5d6..50bd46e 100755
--- a/services/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -62,7 +62,7 @@
 
 static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
     if (env->ExceptionCheck()) {
-        LOGE("An exception was thrown by callback '%s'.", methodName);
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
         LOGE_EX(env);
         env->ExceptionClear();
     }
@@ -196,7 +196,7 @@
             notification->requestor_id_encoding,
             notification->text_encoding, extras);
     } else {
-        LOGE("out of memory in gps_ni_notify_callback\n");
+        ALOGE("out of memory in gps_ni_notify_callback\n");
     }
 
     if (requestor_id)
@@ -376,7 +376,7 @@
     AGpsRefLocation location;
 
     if (!sAGpsRilInterface) {
-        LOGE("no AGPS RIL interface in agps_set_reference_location_cellid");
+        ALOGE("no AGPS RIL interface in agps_set_reference_location_cellid");
         return;
     }
 
@@ -390,7 +390,7 @@
             location.u.cellID.cid = cid;
             break;
         default:
-            LOGE("Neither a GSM nor a UMTS cellid (%s:%d).",__FUNCTION__,__LINE__);
+            ALOGE("Neither a GSM nor a UMTS cellid (%s:%d).",__FUNCTION__,__LINE__);
             return;
             break;
     }
@@ -403,7 +403,7 @@
     size_t sz;
 
     if (!sAGpsRilInterface) {
-        LOGE("no AGPS RIL interface in send_ni_message");
+        ALOGE("no AGPS RIL interface in send_ni_message");
         return;
     }
     if (size < 0)
@@ -418,7 +418,7 @@
         jobject obj, jint type, jstring  setid_string)
 {
     if (!sAGpsRilInterface) {
-        LOGE("no AGPS RIL interface in agps_set_id");
+        ALOGE("no AGPS RIL interface in agps_set_id");
         return;
     }
 
@@ -463,7 +463,7 @@
         jbyteArray data, jint length)
 {
     if (!sGpsXtraInterface) {
-        LOGE("no XTRA interface in inject_xtra_data");
+        ALOGE("no XTRA interface in inject_xtra_data");
         return;
     }
 
@@ -475,7 +475,7 @@
 static void android_location_GpsLocationProvider_agps_data_conn_open(JNIEnv* env, jobject obj, jstring apn)
 {
     if (!sAGpsInterface) {
-        LOGE("no AGPS interface in agps_data_conn_open");
+        ALOGE("no AGPS interface in agps_data_conn_open");
         return;
     }
     if (apn == NULL) {
@@ -490,7 +490,7 @@
 static void android_location_GpsLocationProvider_agps_data_conn_closed(JNIEnv* env, jobject obj)
 {
     if (!sAGpsInterface) {
-        LOGE("no AGPS interface in agps_data_conn_open");
+        ALOGE("no AGPS interface in agps_data_conn_open");
         return;
     }
     sAGpsInterface->data_conn_closed();
@@ -499,7 +499,7 @@
 static void android_location_GpsLocationProvider_agps_data_conn_failed(JNIEnv* env, jobject obj)
 {
     if (!sAGpsInterface) {
-        LOGE("no AGPS interface in agps_data_conn_open");
+        ALOGE("no AGPS interface in agps_data_conn_open");
         return;
     }
     sAGpsInterface->data_conn_failed();
@@ -509,7 +509,7 @@
         jint type, jstring hostname, jint port)
 {
     if (!sAGpsInterface) {
-        LOGE("no AGPS interface in agps_data_conn_open");
+        ALOGE("no AGPS interface in agps_data_conn_open");
         return;
     }
     const char *c_hostname = env->GetStringUTFChars(hostname, NULL);
@@ -521,7 +521,7 @@
       jint notifId, jint response)
 {
     if (!sGpsNiInterface) {
-        LOGE("no NI interface in send_ni_response");
+        ALOGE("no NI interface in send_ni_response");
         return;
     }
 
diff --git a/services/jni/onload.cpp b/services/jni/onload.cpp
index 4178039..c7beb5f 100644
--- a/services/jni/onload.cpp
+++ b/services/jni/onload.cpp
@@ -43,10 +43,10 @@
     jint result = -1;
 
     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
-        LOGE("GetEnv failed!");
+        ALOGE("GetEnv failed!");
         return result;
     }
-    LOG_ASSERT(env, "Could not retrieve the env!");
+    ALOG_ASSERT(env, "Could not retrieve the env!");
 
     register_android_server_PowerManagerService(env);
     register_android_server_InputApplicationHandle(env);
diff --git a/services/sensorservice/Fusion.cpp b/services/sensorservice/Fusion.cpp
index d76f19c..b724ce2 100644
--- a/services/sensorservice/Fusion.cpp
+++ b/services/sensorservice/Fusion.cpp
@@ -338,7 +338,7 @@
 
     if (!isPositiveSemidefinite(P[0][0], SYMMETRY_TOLERANCE) ||
         !isPositiveSemidefinite(P[1][1], SYMMETRY_TOLERANCE)) {
-        LOGW("Sensor fusion diverged; resetting state.");
+        ALOGW("Sensor fusion diverged; resetting state.");
         P = 0;
     }
 }
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
index 8f23506..2244a86 100644
--- a/services/sensorservice/SensorDevice.cpp
+++ b/services/sensorservice/SensorDevice.cpp
@@ -105,13 +105,13 @@
     status_t err = hw_get_module(SENSORS_HARDWARE_MODULE_ID,
             (hw_module_t const**)&mSensorModule);
 
-    LOGE_IF(err, "couldn't load %s module (%s)",
+    ALOGE_IF(err, "couldn't load %s module (%s)",
             SENSORS_HARDWARE_MODULE_ID, strerror(-err));
 
     if (mSensorModule) {
         err = sensors_open(&mSensorModule->common, &mSensorDevice);
 
-        LOGE_IF(err, "couldn't open device for module %s (%s)",
+        ALOGE_IF(err, "couldn't open device for module %s (%s)",
                 SENSORS_HARDWARE_MODULE_ID, strerror(-err));
 
         if (mSensorDevice) {
@@ -219,7 +219,7 @@
 
         err = mSensorDevice->activate(mSensorDevice, handle, enabled);
         if (enabled) {
-            LOGE_IF(err, "Error activating sensor %d (%s)", handle, strerror(-err));
+            ALOGE_IF(err, "Error activating sensor %d (%s)", handle, strerror(-err));
             if (err == 0) {
                 BatteryService::getInstance().enableSensor(handle);
             }
@@ -256,7 +256,7 @@
 {
     ssize_t index = rates.indexOfKey(ident);
     if (index < 0) {
-        LOGE("Info::setDelayForIdent(ident=%p, ns=%lld) failed (%s)",
+        ALOGE("Info::setDelayForIdent(ident=%p, ns=%lld) failed (%s)",
                 ident, ns, strerror(-index));
         return BAD_INDEX;
     }
diff --git a/services/sensorservice/SensorInterface.cpp b/services/sensorservice/SensorInterface.cpp
index be8eaff..468aa61 100644
--- a/services/sensorservice/SensorInterface.cpp
+++ b/services/sensorservice/SensorInterface.cpp
@@ -34,7 +34,7 @@
     : mSensorDevice(SensorDevice::getInstance()),
       mSensor(&sensor)
 {
-    LOGI("%s", sensor.name);
+    ALOGI("%s", sensor.name);
 }
 
 HardwareSensor::~HardwareSensor() {
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 3e4a2f5..dd6c426 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -234,7 +234,7 @@
     do {
         count = device.poll(buffer, numEventMax);
         if (count<0) {
-            LOGE("sensor poll failed (%s)", strerror(-count));
+            ALOGE("sensor poll failed (%s)", strerror(-count));
             break;
         }
 
@@ -286,7 +286,7 @@
         }
     } while (count >= 0 || Thread::exitPending());
 
-    LOGW("Exiting SensorService::threadLoop => aborting...");
+    ALOGW("Exiting SensorService::threadLoop => aborting...");
     abort();
     return false;
 }
@@ -369,13 +369,13 @@
         if (c->hasSensor(handle)) {
             ALOGD_IF(DEBUG_CONNECTIONS, "%i: disabling handle=0x%08x", i, handle);
             SensorInterface* sensor = mSensorMap.valueFor( handle );
-            LOGE_IF(!sensor, "mSensorMap[handle=0x%08x] is null!", handle);
+            ALOGE_IF(!sensor, "mSensorMap[handle=0x%08x] is null!", handle);
             if (sensor) {
                 sensor->activate(c, false);
             }
         }
         SensorRecord* rec = mActiveSensors.valueAt(i);
-        LOGE_IF(!rec, "mActiveSensors[%d] is null (handle=0x%08x)!", i, handle);
+        ALOGE_IF(!rec, "mActiveSensors[%d] is null (handle=0x%08x)!", i, handle);
         ALOGD_IF(DEBUG_CONNECTIONS,
                 "removing connection %p for sensor[%d].handle=0x%08x",
                 c, i, handle);
@@ -594,11 +594,11 @@
     if (size == -EAGAIN) {
         // the destination doesn't accept events anymore, it's probably
         // full. For now, we just drop the events on the floor.
-        //LOGW("dropping %d events on the floor", count);
+        //ALOGW("dropping %d events on the floor", count);
         return size;
     }
 
-    //LOGE_IF(size<0, "dropping %d events on the floor (%s)",
+    //ALOGE_IF(size<0, "dropping %d events on the floor (%s)",
     //        count, strerror(-size));
 
     return size < 0 ? status_t(size) : status_t(NO_ERROR);
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
index 3bbc75e..cf131b1 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
@@ -53,7 +53,7 @@
         GLenum error = glGetError();
         if (error == GL_NO_ERROR)
             break;
-        LOGE("GL error 0x%04x", int(error));
+        ALOGE("GL error 0x%04x", int(error));
     } while(true);
 }
 
@@ -62,7 +62,7 @@
 {
     EGLint error = eglGetError();
     if (error && error != EGL_SUCCESS) {
-        LOGE("%s: EGL error 0x%04x (%s)",
+        ALOGE("%s: EGL error 0x%04x (%s)",
                 token, int(error), EGLUtils::strerror(error));
     }
 }
@@ -130,7 +130,7 @@
     mNativeWindow = new FramebufferNativeWindow();
     framebuffer_device_t const * fbDev = mNativeWindow->getDevice();
     if (!fbDev) {
-        LOGE("Display subsystem failed to initialize. check logs. exiting...");
+        ALOGE("Display subsystem failed to initialize. check logs. exiting...");
         exit(0);
     }
 
@@ -173,7 +173,7 @@
     char property[PROPERTY_VALUE_MAX];
     if (property_get("debug.sf.hw", property, NULL) > 0) {
         if (atoi(property) == 0) {
-            LOGW("H/W composition disabled");
+            ALOGW("H/W composition disabled");
             attribs[2] = EGL_CONFIG_CAVEAT;
             attribs[3] = EGL_SLOW_CONFIG;
         }
@@ -188,7 +188,7 @@
 
     EGLConfig config = NULL;
     err = selectConfigForPixelFormat(display, attribs, format, &config);
-    LOGE_IF(err, "couldn't find an EGLConfig matching the screen format");
+    ALOGE_IF(err, "couldn't find an EGLConfig matching the screen format");
     
     EGLint r,g,b,a;
     eglGetConfigAttrib(display, config, EGL_RED_SIZE,   &r);
@@ -231,7 +231,7 @@
      */
     if (property_get("qemu.sf.lcd_density", property, NULL) <= 0) {
         if (property_get("ro.sf.lcd_density", property, NULL) <= 0) {
-            LOGW("ro.sf.lcd_density not defined, using 160 dpi by default.");
+            ALOGW("ro.sf.lcd_density not defined, using 160 dpi by default.");
             strcpy(property, "160");
         }
     } else {
@@ -270,7 +270,7 @@
 
     result = eglMakeCurrent(display, surface, surface, context);
     if (!result) {
-        LOGE("Couldn't create a working GLES context. check logs. exiting...");
+        ALOGE("Couldn't create a working GLES context. check logs. exiting...");
         exit(0);
     }
 
@@ -287,22 +287,22 @@
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
     glGetIntegerv(GL_MAX_VIEWPORT_DIMS, mMaxViewportDims);
 
-    LOGI("EGL informations:");
-    LOGI("# of configs : %d", numConfigs);
-    LOGI("vendor    : %s", extensions.getEglVendor());
-    LOGI("version   : %s", extensions.getEglVersion());
-    LOGI("extensions: %s", extensions.getEglExtension());
-    LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported");
-    LOGI("EGLSurface: %d-%d-%d-%d, config=%p", r, g, b, a, config);
+    ALOGI("EGL informations:");
+    ALOGI("# of configs : %d", numConfigs);
+    ALOGI("vendor    : %s", extensions.getEglVendor());
+    ALOGI("version   : %s", extensions.getEglVersion());
+    ALOGI("extensions: %s", extensions.getEglExtension());
+    ALOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported");
+    ALOGI("EGLSurface: %d-%d-%d-%d, config=%p", r, g, b, a, config);
 
-    LOGI("OpenGL informations:");
-    LOGI("vendor    : %s", extensions.getVendor());
-    LOGI("renderer  : %s", extensions.getRenderer());
-    LOGI("version   : %s", extensions.getVersion());
-    LOGI("extensions: %s", extensions.getExtension());
-    LOGI("GL_MAX_TEXTURE_SIZE = %d", mMaxTextureSize);
-    LOGI("GL_MAX_VIEWPORT_DIMS = %d x %d", mMaxViewportDims[0], mMaxViewportDims[1]);
-    LOGI("flags = %08x", mFlags);
+    ALOGI("OpenGL informations:");
+    ALOGI("vendor    : %s", extensions.getVendor());
+    ALOGI("renderer  : %s", extensions.getRenderer());
+    ALOGI("version   : %s", extensions.getVersion());
+    ALOGI("extensions: %s", extensions.getExtension());
+    ALOGI("GL_MAX_TEXTURE_SIZE = %d", mMaxTextureSize);
+    ALOGI("GL_MAX_VIEWPORT_DIMS = %d x %d", mMaxViewportDims[0], mMaxViewportDims[1]);
+    ALOGI("flags = %08x", mFlags);
 
     // Unbind the context from this thread
     eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp
index 174dcd7..f4afeea 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp
@@ -76,7 +76,7 @@
       err = read(fd, &buf, 1);
     } while (err < 0 && errno == EINTR);
     close(fd);
-    LOGW_IF(err<0, "ANDROID_WAIT_FOR_FB_SLEEP failed (%s)", strerror(errno));
+    ALOGW_IF(err<0, "ANDROID_WAIT_FOR_FB_SLEEP failed (%s)", strerror(errno));
     if (err >= 0) {
         sp<SurfaceFlinger> flinger = mFlinger.promote();
         ALOGD("About to give-up screen, flinger = %p", flinger.get());
@@ -91,7 +91,7 @@
       err = read(fd, &buf, 1);
     } while (err < 0 && errno == EINTR);
     close(fd);
-    LOGW_IF(err<0, "ANDROID_WAIT_FOR_FB_WAKE failed (%s)", strerror(errno));
+    ALOGW_IF(err<0, "ANDROID_WAIT_FOR_FB_WAKE failed (%s)", strerror(errno));
     if (err >= 0) {
         sp<SurfaceFlinger> flinger = mFlinger.promote();
         ALOGD("Screen about to return, flinger = %p", flinger.get());
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index be9b226..f17bf43 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -44,10 +44,10 @@
       mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE)
 {
     int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &mModule);
-    LOGW_IF(err, "%s module not found", HWC_HARDWARE_MODULE_ID);
+    ALOGW_IF(err, "%s module not found", HWC_HARDWARE_MODULE_ID);
     if (err == 0) {
         err = hwc_open(mModule, &mHwc);
-        LOGE_IF(err, "%s device failed to initialize (%s)",
+        ALOGE_IF(err, "%s device failed to initialize (%s)",
                 HWC_HARDWARE_COMPOSER, strerror(-err));
         if (err == 0) {
             if (mHwc->registerProcs) {
diff --git a/services/surfaceflinger/EventThread.cpp b/services/surfaceflinger/EventThread.cpp
index dc39f88..9245781 100644
--- a/services/surfaceflinger/EventThread.cpp
+++ b/services/surfaceflinger/EventThread.cpp
@@ -209,7 +209,7 @@
 }
 
 status_t EventThread::readyToRun() {
-    LOGI("EventThread ready to run.");
+    ALOGI("EventThread ready to run.");
     return NO_ERROR;
 }
 
diff --git a/services/surfaceflinger/LayerScreenshot.cpp b/services/surfaceflinger/LayerScreenshot.cpp
index 68e6660..c127fa6 100644
--- a/services/surfaceflinger/LayerScreenshot.cpp
+++ b/services/surfaceflinger/LayerScreenshot.cpp
@@ -93,7 +93,7 @@
             // we're going from hidden to visible
             status_t err = captureLocked();
             if (err != NO_ERROR) {
-                LOGW("createScreenshotSurface failed (%s)", strerror(-err));
+                ALOGW("createScreenshotSurface failed (%s)", strerror(-err));
             }
         }
     } else if (curr.flags & ISurfaceComposer::eLayerHidden) {
diff --git a/services/surfaceflinger/MessageQueue.cpp b/services/surfaceflinger/MessageQueue.cpp
index 85845c9..cbd530c 100644
--- a/services/surfaceflinger/MessageQueue.cpp
+++ b/services/surfaceflinger/MessageQueue.cpp
@@ -70,12 +70,12 @@
                 continue;
 
             case ALOOPER_POLL_ERROR:
-                LOGE("ALOOPER_POLL_ERROR");
+                ALOGE("ALOOPER_POLL_ERROR");
                 continue;
 
             default:
                 // should not happen
-                LOGE("Looper::pollOnce() returned unknown status %d", ret);
+                ALOGE("Looper::pollOnce() returned unknown status %d", ret);
                 continue;
         }
     } while (true);
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 789e03c..bbb30b0 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -110,7 +110,7 @@
 
 void SurfaceFlinger::init()
 {
-    LOGI("SurfaceFlinger is starting");
+    ALOGI("SurfaceFlinger is starting");
 
     // debugging stuff...
     char value[PROPERTY_VALUE_MAX];
@@ -127,9 +127,9 @@
         DdmConnection::start(getServiceName());
     }
 
-    LOGI_IF(mDebugRegion,       "showupdates enabled");
-    LOGI_IF(mDebugBackground,   "showbackground enabled");
-    LOGI_IF(mDebugDDMS,         "DDMS debugging enabled");
+    ALOGI_IF(mDebugRegion,       "showupdates enabled");
+    ALOGI_IF(mDebugBackground,   "showbackground enabled");
+    ALOGI_IF(mDebugDDMS,         "DDMS debugging enabled");
 }
 
 SurfaceFlinger::~SurfaceFlinger()
@@ -161,7 +161,7 @@
 
 const GraphicPlane& SurfaceFlinger::graphicPlane(int dpy) const
 {
-    LOGE_IF(uint32_t(dpy) >= DISPLAY_COUNT, "Invalid DisplayID %d", dpy);
+    ALOGE_IF(uint32_t(dpy) >= DISPLAY_COUNT, "Invalid DisplayID %d", dpy);
     const GraphicPlane& plane(mGraphicPlanes[dpy]);
     return plane;
 }
@@ -176,7 +176,7 @@
 {
     const nsecs_t now = systemTime();
     const nsecs_t duration = now - mBootTime;
-    LOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) );
+    ALOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) );
     mBootFinished = true;
 
     // wait patiently for the window manager death
@@ -215,7 +215,7 @@
 
 status_t SurfaceFlinger::readyToRun()
 {
-    LOGI(   "SurfaceFlinger's main thread ready to run. "
+    ALOGI(   "SurfaceFlinger's main thread ready to run. "
             "Initializing graphics H/W...");
 
     // we only support one display currently
@@ -231,10 +231,10 @@
     // create the shared control-block
     mServerHeap = new MemoryHeapBase(4096,
             MemoryHeapBase::READ_ONLY, "SurfaceFlinger read-only heap");
-    LOGE_IF(mServerHeap==0, "can't create shared memory dealer");
+    ALOGE_IF(mServerHeap==0, "can't create shared memory dealer");
 
     mServerCblk = static_cast<surface_flinger_cblk_t*>(mServerHeap->getBase());
-    LOGE_IF(mServerCblk==0, "can't get to shared control block's address");
+    ALOGE_IF(mServerCblk==0, "can't get to shared control block's address");
 
     new(mServerCblk) surface_flinger_cblk_t;
 
@@ -458,7 +458,7 @@
 {
     // this should never happen. we do the flip anyways so we don't
     // risk to cause a deadlock with hwc
-    LOGW_IF(mSwapRegion.isEmpty(), "mSwapRegion is empty");
+    ALOGW_IF(mSwapRegion.isEmpty(), "mSwapRegion is empty");
     const DisplayHardware& hw(graphicPlane(0).displayHardware());
     const nsecs_t now = systemTime();
     mDebugInSwapBuffers = now;
@@ -874,7 +874,7 @@
     const Vector< sp<LayerBase> >& layers(mVisibleLayersSortedByZ);
     size_t count = layers.size();
 
-    LOGE_IF(hwc.getNumLayers() != count,
+    ALOGE_IF(hwc.getNumLayers() != count,
             "HAL number of layers (%d) doesn't match surfaceflinger (%d)",
             hwc.getNumLayers(), count);
 
@@ -893,7 +893,7 @@
     }
     const size_t fbLayerCount = hwc.getLayerCount(HWC_FRAMEBUFFER);
     status_t err = hwc.prepare();
-    LOGE_IF(err, "HWComposer::prepare failed (%s)", strerror(-err));
+    ALOGE_IF(err, "HWComposer::prepare failed (%s)", strerror(-err));
 
     if (err == NO_ERROR) {
         // what's happening here is tricky.
@@ -1220,7 +1220,7 @@
             mCurrentState.orientation = orientation;
             transactionFlags |= eTransactionNeeded;
         } else if (orientation != eOrientationUnchanged) {
-            LOGW("setTransactionState: ignoring unrecognized orientation: %d",
+            ALOGW("setTransactionState: ignoring unrecognized orientation: %d",
                     orientation);
         }
     }
@@ -1246,7 +1246,7 @@
             if (CC_UNLIKELY(err != NO_ERROR)) {
                 // just in case something goes wrong in SF, return to the
                 // called after a few seconds.
-                LOGW_IF(err == TIMED_OUT, "closeGlobalTransaction timed out!");
+                ALOGW_IF(err == TIMED_OUT, "closeGlobalTransaction timed out!");
                 mTransationPending = false;
                 break;
             }
@@ -1285,7 +1285,7 @@
     sp<ISurface> surfaceHandle;
 
     if (int32_t(w|h) < 0) {
-        LOGE("createSurface() failed, w or h is negative (w=%d, h=%d)",
+        ALOGE("createSurface() failed, w or h is negative (w=%d, h=%d)",
                 int(w), int(h));
         return surfaceHandle;
     }
@@ -1357,7 +1357,7 @@
     sp<Layer> layer = new Layer(this, display, client);
     status_t err = layer->setBuffers(w, h, format, flags);
     if (CC_LIKELY(err != NO_ERROR)) {
-        LOGE("createNormalSurfaceLocked() failed (%s)", strerror(-err));
+        ALOGE("createNormalSurfaceLocked() failed (%s)", strerror(-err));
         layer.clear();
     }
     return layer;
@@ -1415,10 +1415,10 @@
             // removed already, which means it is in the purgatory,
             // and need to be removed from there.
             ssize_t idx = mLayerPurgatory.remove(l);
-            LOGE_IF(idx < 0,
+            ALOGE_IF(idx < 0,
                     "layer=%p is not in the purgatory list", l.get());
         }
-        LOGE_IF(err<0 && err != NAME_NOT_FOUND,
+        ALOGE_IF(err<0 && err != NAME_NOT_FOUND,
                 "error removing layer=%p (%s)", l.get(), strerror(-err));
     }
     return err;
@@ -1651,7 +1651,7 @@
             const int uid = ipc->getCallingUid();
             if ((uid != AID_GRAPHICS) &&
                     !PermissionCache::checkPermission(sAccessSurfaceFlinger, pid, uid)) {
-                LOGE("Permission Denial: "
+                ALOGE("Permission Denial: "
                         "can't access SurfaceFlinger pid=%d, uid=%d", pid, uid);
                 return PERMISSION_DENIED;
             }
@@ -1665,7 +1665,7 @@
             const int uid = ipc->getCallingUid();
             if ((uid != AID_GRAPHICS) &&
                     !PermissionCache::checkPermission(sReadFramebuffer, pid, uid)) {
-                LOGE("Permission Denial: "
+                ALOGE("Permission Denial: "
                         "can't read framebuffer pid=%d, uid=%d", pid, uid);
                 return PERMISSION_DENIED;
             }
@@ -1680,7 +1680,7 @@
             IPCThreadState* ipc = IPCThreadState::self();
             const int pid = ipc->getCallingPid();
             const int uid = ipc->getCallingUid();
-            LOGE("Permission Denial: "
+            ALOGE("Permission Denial: "
                     "can't access SurfaceFlinger pid=%d, uid=%d", pid, uid);
             return PERMISSION_DENIED;
         }
@@ -2497,7 +2497,7 @@
     wp<LayerBaseClient> layer(mLayers.valueFor(i));
     if (layer != 0) {
         lbc = layer.promote();
-        LOGE_IF(lbc==0, "getLayerUser(name=%d) is dead", int(i));
+        ALOGE_IF(lbc==0, "getLayerUser(name=%d) is dead", int(i));
     }
     return lbc;
 }
@@ -2515,7 +2515,7 @@
          // we're called from a different process, do the real check
          if (!PermissionCache::checkCallingPermission(sAccessSurfaceFlinger))
          {
-             LOGE("Permission Denial: "
+             ALOGE("Permission Denial: "
                      "can't openGlobalTransaction pid=%d, uid=%d", pid, uid);
              return PERMISSION_DENIED;
          }
@@ -2587,7 +2587,7 @@
         if (err == NO_MEMORY) {
             GraphicBuffer::dumpAllocationsToSystemLog();
         }
-        LOGE("GraphicBufferAlloc::createGraphicBuffer(w=%d, h=%d) "
+        ALOGE("GraphicBufferAlloc::createGraphicBuffer(w=%d, h=%d) "
              "failed (%s), handle=%p",
                 w, h, strerror(-err), graphicBuffer->handle);
         return 0;
diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java
index 4619899..ffe848d 100644
--- a/telephony/java/com/android/internal/telephony/DataConnection.java
+++ b/telephony/java/com/android/internal/telephony/DataConnection.java
@@ -134,7 +134,8 @@
         // specified here
         UNKNOWN(0x10000),
         RADIO_NOT_AVAILABLE(0x10001),
-        UNACCEPTABLE_NETWORK_PARAMETER(0x10002);
+        UNACCEPTABLE_NETWORK_PARAMETER(0x10002),
+        CONNECTION_TO_DATACONNECTIONAC_BROKEN(0x10003);
 
         private final int mErrorCode;
         private static final HashMap<Integer, FailCause> sErrorCodeToFailCauseMap;
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 26967a0..dab72a9 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -559,14 +559,23 @@
     }
 
     protected ApnSetting fetchDunApn() {
+        if (SystemProperties.getBoolean("net.tethering.noprovisioning", false)) {
+            log("fetchDunApn: net.tethering.noprovisioning=true ret: null");
+            return null;
+        }
         Context c = mPhone.getContext();
         String apnData = Settings.Secure.getString(c.getContentResolver(),
                 Settings.Secure.TETHER_DUN_APN);
         ApnSetting dunSetting = ApnSetting.fromString(apnData);
-        if (dunSetting != null) return dunSetting;
+        if (dunSetting != null) {
+            if (VDBG) log("fetchDunApn: secure TETHER_DUN_APN dunSetting=" + dunSetting);
+            return dunSetting;
+        }
 
         apnData = c.getResources().getString(R.string.config_tether_apndata);
-        return ApnSetting.fromString(apnData);
+        dunSetting = ApnSetting.fromString(apnData);
+        if (VDBG) log("fetchDunApn: config_tether_apndata dunSetting=" + dunSetting);
+        return dunSetting;
     }
 
     public String[] getActiveApnTypes() {
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 93a723e..6096cb0 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -76,6 +76,7 @@
  */
 public final class GsmDataConnectionTracker extends DataConnectionTracker {
     protected final String LOG_TAG = "GSM";
+    private static final boolean RADIO_TESTS = false;
 
     /**
      * Handles changes to the APN db.
@@ -1401,7 +1402,7 @@
         sent = mDataStallTxRxSum.txPkts - preTxRxSum.txPkts;
         received = mDataStallTxRxSum.rxPkts - preTxRxSum.rxPkts;
 
-        if (VDBG) {
+        if (RADIO_TESTS) {
             if (SystemProperties.getBoolean("radio.test.data.stall", false)) {
                 log("updateDataStallInfo: radio.test.data.stall true received = 0;");
                 received = 0;
@@ -1906,6 +1907,8 @@
     @Override
     protected void onDataSetupComplete(AsyncResult ar) {
 
+        DataConnection.FailCause cause = DataConnection.FailCause.UNKNOWN;
+        boolean handleError = false;
         ApnContext apnContext = null;
 
         if(ar.userObj instanceof ApnContext){
@@ -1916,52 +1919,73 @@
 
         if (isDataSetupCompleteOk(ar)) {
             DataConnectionAc dcac = apnContext.getDataConnectionAc();
+
+            if (RADIO_TESTS) {
+                // Note: To change radio.test.onDSC.null.dcac from command line you need to
+                // adb root and adb remount and from the command line you can only change the
+                // value to 1 once. To change it a second time you can reboot or execute
+                // adb shell stop and then adb shell start. The command line to set the value is:
+                //   adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into system (name,value) values ('radio.test.onDSC.null.dcac', '1');"
+                ContentResolver cr = mPhone.getContext().getContentResolver();
+                String radioTestProperty = "radio.test.onDSC.null.dcac";
+                if (Settings.System.getInt(cr, radioTestProperty, 0) == 1) {
+                    log("onDataSetupComplete: " + radioTestProperty +
+                            " is true, set dcac to null and reset property to false");
+                    dcac = null;
+                    Settings.System.putInt(cr, radioTestProperty, 0);
+                    log("onDataSetupComplete: " + radioTestProperty + "=" +
+                            Settings.System.getInt(mPhone.getContext().getContentResolver(),
+                                    radioTestProperty, -1));
+                }
+            }
             if (dcac == null) {
-                throw new RuntimeException("onDataSetupCompete: No dcac");
-            }
-            DataConnection dc = apnContext.getDataConnection();
+                log("onDataSetupComplete: no connection to DC, handle as error");
+                cause = DataConnection.FailCause.CONNECTION_TO_DATACONNECTIONAC_BROKEN;
+                handleError = true;
+            } else {
+                DataConnection dc = apnContext.getDataConnection();
 
-            if (DBG) {
-                // TODO We may use apnContext.getApnSetting() directly
-                // instead of getWaitingApns().get(0)
-                String apnStr = "<unknown>";
-                if (apnContext.getWaitingApns() != null
-                        && !apnContext.getWaitingApns().isEmpty()){
-                    apnStr = apnContext.getWaitingApns().get(0).apn;
+                if (DBG) {
+                    // TODO We may use apnContext.getApnSetting() directly
+                    // instead of getWaitingApns().get(0)
+                    String apnStr = "<unknown>";
+                    if (apnContext.getWaitingApns() != null
+                            && !apnContext.getWaitingApns().isEmpty()){
+                        apnStr = apnContext.getWaitingApns().get(0).apn;
+                    }
+                    log("onDataSetupComplete: success apn=" + apnStr);
                 }
-                log("onDataSetupComplete: success apn=" + apnStr);
-            }
-            ApnSetting apn = apnContext.getApnSetting();
-            if (apn.proxy != null && apn.proxy.length() != 0) {
-                try {
-                    String port = apn.port;
-                    if (TextUtils.isEmpty(port)) port = "8080";
-                    ProxyProperties proxy = new ProxyProperties(apn.proxy,
-                            Integer.parseInt(port), null);
-                    dcac.setLinkPropertiesHttpProxySync(proxy);
-                } catch (NumberFormatException e) {
-                    loge("onDataSetupComplete: NumberFormatException making ProxyProperties (" +
-                            apn.port + "): " + e);
-                }
-            }
-
-            // everything is setup
-            if(TextUtils.equals(apnContext.getApnType(),Phone.APN_TYPE_DEFAULT)) {
-                SystemProperties.set("gsm.defaultpdpcontext.active", "true");
-                if (canSetPreferApn && mPreferredApn == null) {
-                    if (DBG) log("onDataSetupComplete: PREFERED APN is null");
-                    mPreferredApn = apnContext.getApnSetting();
-                    if (mPreferredApn != null) {
-                        setPreferredApn(mPreferredApn.id);
+                ApnSetting apn = apnContext.getApnSetting();
+                if (apn.proxy != null && apn.proxy.length() != 0) {
+                    try {
+                        String port = apn.port;
+                        if (TextUtils.isEmpty(port)) port = "8080";
+                        ProxyProperties proxy = new ProxyProperties(apn.proxy,
+                                Integer.parseInt(port), null);
+                        dcac.setLinkPropertiesHttpProxySync(proxy);
+                    } catch (NumberFormatException e) {
+                        loge("onDataSetupComplete: NumberFormatException making ProxyProperties (" +
+                                apn.port + "): " + e);
                     }
                 }
-            } else {
-                SystemProperties.set("gsm.defaultpdpcontext.active", "false");
+
+                // everything is setup
+                if(TextUtils.equals(apnContext.getApnType(),Phone.APN_TYPE_DEFAULT)) {
+                    SystemProperties.set("gsm.defaultpdpcontext.active", "true");
+                    if (canSetPreferApn && mPreferredApn == null) {
+                        if (DBG) log("onDataSetupComplete: PREFERED APN is null");
+                        mPreferredApn = apnContext.getApnSetting();
+                        if (mPreferredApn != null) {
+                            setPreferredApn(mPreferredApn.id);
+                        }
+                    }
+                } else {
+                    SystemProperties.set("gsm.defaultpdpcontext.active", "false");
+                }
+                notifyDefaultData(apnContext);
             }
-            notifyDefaultData(apnContext);
         } else {
             String apnString;
-            DataConnection.FailCause cause;
 
             cause = (DataConnection.FailCause) (ar.result);
             if (DBG) {
@@ -1989,7 +2013,10 @@
                         apnContext.getWaitingApns().size(),
                         apnContext.getWaitingApnsPermFailCount()));
             }
+            handleError = true;
+        }
 
+        if (handleError) {
             // See if there are more APN's to try
             if (apnContext.getWaitingApns().isEmpty()) {
                 if (apnContext.getWaitingApnsPermFailCount() == 0) {
@@ -2001,9 +2028,6 @@
 
                     apnContext.setDataConnection(null);
                     apnContext.setDataConnectionAc(null);
-                    if (DBG) {
-                        log("onDataSetupComplete: permanent error apn=%s" + apnString );
-                    }
                 } else {
                     if (DBG) log("onDataSetupComplete: Not all permanent failures, retry");
                     // check to see if retry should be overridden for this failure.
diff --git a/test-runner/src/android/test/BandwidthTest.java b/test-runner/src/android/test/BandwidthTest.java
new file mode 100644
index 0000000..e02ae00
--- /dev/null
+++ b/test-runner/src/android/test/BandwidthTest.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2011 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 android.test;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * This annotation can be used on an {@link junit.framework.TestCase}'s test methods. When the
+ * annotation is present, the test method is profiled for bandwidth metrics and the results
+ * written through instrumentation output. It can also be used on the class itself,
+ * which is equivalent to tagging all test methods with this annotation.
+ *
+ * {@hide} Pending approval for public API.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface BandwidthTest {
+}
diff --git a/test-runner/src/android/test/BandwidthTestRunner.java b/test-runner/src/android/test/BandwidthTestRunner.java
new file mode 100644
index 0000000..9c5478d
--- /dev/null
+++ b/test-runner/src/android/test/BandwidthTestRunner.java
@@ -0,0 +1,92 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package android.test;
+
+import android.net.NetworkStats;
+import android.net.NetworkStats.Entry;
+import android.net.TrafficStats;
+import android.os.Bundle;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestListener;
+
+import java.lang.reflect.Method;
+
+/**
+ * A specialized {@link android.app.Instrumentation} that can collect Bandwidth statistics during
+ * the execution of the test.
+ * This is used in place of {@link InstrumentationTestRunner}.
+ * i.e. adb shell am instrumentation -w -e class com.android.foo.FooTest \
+ *          com.android.foo/android.test.BandwidthTestRunner
+ *
+ * @see NetworkStats and @see TrafficStats for details of the collected statistics
+ * @hide
+ */
+public class BandwidthTestRunner extends InstrumentationTestRunner implements TestListener {
+    private static final String REPORT_KEY_PACKETS_SENT = "txPackets";
+    private static final String REPORT_KEY_PACKETS_RECEIVED = "rxPackets";
+    private static final String REPORT_KEY_BYTES_SENT = "txBytes";
+    private static final String REPORT_KEY_BYTES_RECEIVED = "rxBytes";
+    private static final String REPORT_KEY_OPERATIONS = "operations";
+
+    private boolean mHasClassAnnotation;
+    private boolean mIsBandwidthTest;
+    private Bundle mTestResult;
+
+    @Override
+    public void onCreate(Bundle arguments) {
+        super.onCreate(arguments);
+        addTestListener(this);
+    }
+
+    public void addError(Test test, Throwable t) {
+    }
+
+    public void addFailure(Test test, AssertionFailedError t) {
+    }
+
+    public void startTest(Test test) {
+        String testClass = test.getClass().getName();
+        String testName = ((TestCase)test).getName();
+        Method testMethod = null;
+        try {
+            testMethod = test.getClass().getMethod(testName);
+        } catch (NoSuchMethodException e) {
+            // ignore- the test with given name does not exist. Will be handled during test
+            // execution
+        }
+        try {
+            // Look for BandwdthTest annotation on both test class and test method
+            if (testMethod != null ) {
+                if (testMethod.isAnnotationPresent(BandwidthTest.class) ){
+                    mIsBandwidthTest = true;
+                    TrafficStats.startDataProfiling(null);
+                } else if (test.getClass().isAnnotationPresent(BandwidthTest.class)){
+                    mIsBandwidthTest = true;
+                    TrafficStats.startDataProfiling(null);
+                }
+            }
+        } catch (SecurityException e) {
+            // ignore - the test with given name cannot be accessed. Will be handled during
+            // test execution
+        }
+    }
+
+    public void endTest(Test test) {
+        if (mIsBandwidthTest){
+            mTestResult = new Bundle();
+            mIsBandwidthTest=false;
+            NetworkStats stats = TrafficStats.stopDataProfiling(null);
+            Entry entry = stats.getTotal(null);
+            mTestResult.putLong(REPORT_KEY_BYTES_RECEIVED, entry.rxBytes);
+            mTestResult.putLong(REPORT_KEY_BYTES_SENT, entry.txBytes);
+            mTestResult.putLong(REPORT_KEY_PACKETS_RECEIVED, entry.rxPackets);
+            mTestResult.putLong(REPORT_KEY_PACKETS_SENT, entry.txPackets);
+            mTestResult.putLong(REPORT_KEY_OPERATIONS, entry.operations);
+            System.out.println(mTestResult.toString());
+            sendStatus(0, mTestResult);
+        }
+    }
+}
diff --git a/test-runner/src/android/test/InstrumentationTestRunner.java b/test-runner/src/android/test/InstrumentationTestRunner.java
index 43285fb..91e403e 100644
--- a/test-runner/src/android/test/InstrumentationTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationTestRunner.java
@@ -399,6 +399,16 @@
         return mArguments;
     }
 
+    /**
+     * Add a {@link TestListener}
+     * @hide
+     */
+    protected void addTestListener(TestListener listener){
+        if(mTestRunner!=null && listener!=null){
+            mTestRunner.addTestListener(listener);
+        }
+    }
+
     List<Predicate<TestMethod>> getBuilderRequirements() {
         return new ArrayList<Predicate<TestMethod>>();
     }
diff --git a/tests/TileBenchmark/Android.mk b/tests/TileBenchmark/Android.mk
index 430f0f1..5851113 100644
--- a/tests/TileBenchmark/Android.mk
+++ b/tests/TileBenchmark/Android.mk
@@ -21,12 +21,8 @@
 
 LOCAL_PACKAGE_NAME := TileBenchmark
 
-include $(BUILD_PACKAGE)
+LOCAL_MODULE_TAGS := tests
 
-##################################################
-include $(CLEAR_VARS)
+LOCAL_JAVA_LIBRARIES := android.test.runner
 
-include $(BUILD_MULTI_PREBUILT)
-
-# Use the folloing include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(BUILD_PACKAGE)
\ No newline at end of file
diff --git a/tests/TileBenchmark/AndroidManifest.xml b/tests/TileBenchmark/AndroidManifest.xml
index ab61a9e..f125c70 100644
--- a/tests/TileBenchmark/AndroidManifest.xml
+++ b/tests/TileBenchmark/AndroidManifest.xml
@@ -18,5 +18,9 @@
                   android:label="@string/playback_activity"
                   android:theme="@android:style/Theme.Holo.NoActionBar">
         </activity>
+        <uses-library android:name="android.test.runner" />
     </application>
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+                     android:targetPackage="com.test.tilebenchmark"
+                     android:label="Tests for WebView Tiles."/>
 </manifest>
diff --git a/tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java b/tests/TileBenchmark/src/com/test/tilebenchmark/PerformanceTest.java
similarity index 98%
rename from tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java
rename to tests/TileBenchmark/src/com/test/tilebenchmark/PerformanceTest.java
index 6bf6f6b..cc39b75 100644
--- a/tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java
+++ b/tests/TileBenchmark/src/com/test/tilebenchmark/PerformanceTest.java
@@ -80,7 +80,7 @@
     private static final String URL_POSTFIX = "/index.html?skip=true";
     private static final int MAX_ITERATIONS = 4;
     private static final String TEST_DIRS[] = {
-        "intl1"//, "alexa_us", "android", "dom", "intl2", "moz", "moz2"
+        "alexa25_2011"//, "alexa_us", "android", "dom", "intl2", "moz", "moz2"
     };
 
     public PerformanceTest() {
diff --git a/tests/TileBenchmark/tests/Android.mk b/tests/TileBenchmark/tests/Android.mk
deleted file mode 100644
index 8b235ec..0000000
--- a/tests/TileBenchmark/tests/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_JAVA_LIBRARIES := android.test.runner
-
-# Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := TileBenchmarkTests
-
-LOCAL_INSTRUMENTATION_FOR := TileBenchmark
-
-include $(BUILD_PACKAGE)
diff --git a/tests/TileBenchmark/tests/AndroidManifest.xml b/tests/TileBenchmark/tests/AndroidManifest.xml
deleted file mode 100644
index 703b152..0000000
--- a/tests/TileBenchmark/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.test.tilebenchmark.tests">
-
-    <application>
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
-                     android:targetPackage="com.test.tilebenchmark"
-                     android:label="Tests for WebView Tiles."/>
-</manifest>
diff --git a/tests/TtsTests/Android.mk b/tests/TtsTests/Android.mk
new file mode 100644
index 0000000..e049c90
--- /dev/null
+++ b/tests/TtsTests/Android.mk
@@ -0,0 +1,28 @@
+#
+# Copyright (C) 2011 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_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_STATIC_JAVA_LIBRARIES := littlemock
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_PACKAGE_NAME := TtsTests
+
+include $(BUILD_PACKAGE)
diff --git a/tests/TtsTests/AndroidManifest.xml b/tests/TtsTests/AndroidManifest.xml
new file mode 100644
index 0000000..b6d5111
--- /dev/null
+++ b/tests/TtsTests/AndroidManifest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2011 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.android.speech.tts">
+    <application>
+        <uses-library android:name="android.test.runner" />
+
+
+        <service android:name=".MockableTextToSpeechService"
+                 android:label="Mockable Text-to-speech Service">
+            <intent-filter>
+                <action android:name="android.intent.action.TTS_SERVICE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </service>
+
+        <activity android:name=".MockableCheckVoiceData"
+                  android:theme="@android:style/Theme.NoDisplay">
+            <intent-filter>
+                <action android:name="android.speech.tts.engine.CHECK_TTS_DATA" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+                     android:targetPackage="com.android.speech.tts"
+                     android:label="Tests for android.speech.tts" />
+</manifest>
diff --git a/tests/TtsTests/src/com/android/speech/tts/MockableCheckVoiceData.java b/tests/TtsTests/src/com/android/speech/tts/MockableCheckVoiceData.java
new file mode 100644
index 0000000..0ab8ed6
--- /dev/null
+++ b/tests/TtsTests/src/com/android/speech/tts/MockableCheckVoiceData.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2011 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.android.speech.tts;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.speech.tts.TextToSpeech;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MockableCheckVoiceData extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        MockableTextToSpeechService.IDelegate delegate =
+                MockableTextToSpeechService.getMocker();
+
+        ArrayList<String> availableLangs = delegate.getAvailableVoices();
+        ArrayList<String> unavailableLangs = delegate.getUnavailableVoices();
+
+        final Intent returnVal = new Intent();
+
+        // Returns early.
+        if (availableLangs == null) {
+            setResult(TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL, returnVal);
+            finish();
+            return;
+        }
+
+        returnVal.putStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES,
+                    availableLangs);
+
+        if (unavailableLangs != null && unavailableLangs.size() > 0) {
+            returnVal.putStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES,
+                    unavailableLangs);
+        }
+
+        setResult(TextToSpeech.Engine.CHECK_VOICE_DATA_PASS, returnVal);
+        finish();
+    }
+
+}
diff --git a/tests/TtsTests/src/com/android/speech/tts/MockableTextToSpeechService.java b/tests/TtsTests/src/com/android/speech/tts/MockableTextToSpeechService.java
new file mode 100644
index 0000000..20648a4
--- /dev/null
+++ b/tests/TtsTests/src/com/android/speech/tts/MockableTextToSpeechService.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 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.android.speech.tts;
+
+import android.speech.tts.SynthesisCallback;
+import android.speech.tts.SynthesisRequest;
+import android.speech.tts.TextToSpeechService;
+
+import java.util.ArrayList;
+
+public class MockableTextToSpeechService extends TextToSpeechService {
+
+    private static IDelegate sDelegate;
+
+    public static void setMocker(IDelegate delegate) {
+        sDelegate = delegate;
+    }
+
+    static IDelegate getMocker() {
+        return sDelegate;
+    }
+
+    @Override
+    protected int onIsLanguageAvailable(String lang, String country, String variant) {
+        return sDelegate.onIsLanguageAvailable(lang, country, variant);
+    }
+
+    @Override
+    protected String[] onGetLanguage() {
+        return sDelegate.onGetLanguage();
+    }
+
+    @Override
+    protected int onLoadLanguage(String lang, String country, String variant) {
+        return sDelegate.onLoadLanguage(lang, country, variant);
+    }
+
+    @Override
+    protected void onStop() {
+        sDelegate.onStop();
+    }
+
+    @Override
+    protected void onSynthesizeText(SynthesisRequest request, SynthesisCallback callback) {
+        sDelegate.onSynthesizeText(request, callback);
+    }
+
+    public static interface IDelegate {
+        int onIsLanguageAvailable(String lang, String country, String variant);
+
+        String[] onGetLanguage();
+
+        int onLoadLanguage(String lang, String country, String variant);
+
+        void onStop();
+
+        void onSynthesizeText(SynthesisRequest request, SynthesisCallback callback);
+
+        ArrayList<String> getAvailableVoices();
+
+        ArrayList<String> getUnavailableVoices();
+    }
+
+}
diff --git a/tests/TtsTests/src/com/android/speech/tts/TextToSpeechTests.java b/tests/TtsTests/src/com/android/speech/tts/TextToSpeechTests.java
new file mode 100644
index 0000000..b736e9f
--- /dev/null
+++ b/tests/TtsTests/src/com/android/speech/tts/TextToSpeechTests.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2011 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.android.speech.tts;
+
+import android.speech.tts.SynthesisCallback;
+import android.speech.tts.SynthesisRequest;
+import android.speech.tts.TextToSpeech;
+import android.test.InstrumentationTestCase;
+
+import com.android.speech.tts.MockableTextToSpeechService.IDelegate;
+import com.google.testing.littlemock.ArgumentCaptor;
+import com.google.testing.littlemock.Behaviour;
+import com.google.testing.littlemock.LittleMock;
+import junit.framework.Assert;
+
+import java.util.Locale;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class TextToSpeechTests extends InstrumentationTestCase {
+    private static final String MOCK_ENGINE = "com.android.speech.tts";
+    private static final String MOCK_PACKAGE = "com.android.speech.tts.__testpackage__";
+
+    private TextToSpeech mTts;
+
+    @Override
+    public void setUp() throws Exception {
+        IDelegate passThrough = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(passThrough);
+
+        blockingInitAndVerify(MOCK_ENGINE, TextToSpeech.SUCCESS);
+        assertEquals(MOCK_ENGINE, mTts.getCurrentEngine());
+    }
+
+
+    @Override
+    public void tearDown() {
+        if (mTts != null) {
+            mTts.shutdown();
+        }
+    }
+
+    public void testEngineInitialized() throws Exception {
+        // Fail on an engine that doesn't exist.
+        blockingInitAndVerify("__DOES_NOT_EXIST__", TextToSpeech.ERROR);
+
+        // Also, the "current engine" must be null
+        assertNull(mTts.getCurrentEngine());
+    }
+
+    public void testSetLanguage_delegation() {
+        IDelegate delegate = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(delegate);
+
+        // Test 1 :Tests that calls to onLoadLanguage( ) are delegated through to the
+        // service without any caching or intermediate steps.
+        mTts.setLanguage(new Locale("eng", "USA", "variant"));
+        LittleMock.verify(delegate, LittleMock.times(1)).onLoadLanguage(
+                "eng", "USA", "variant");
+    }
+
+    public void testSetLanguage_availableLanguage() throws Exception {
+        IDelegate delegate = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(delegate);
+
+        // ---------------------------------------------------------
+        // Test 2 : Tests that when the language is successfully set
+        // like above (returns LANG_COUNTRY_AVAILABLE). That the
+        // request language changes from that point on.
+        LittleMock.doReturn(TextToSpeech.LANG_COUNTRY_AVAILABLE).when(delegate).onLoadLanguage(
+                "eng", "USA", "variant");
+        mTts.setLanguage(new Locale("eng", "USA", "variant"));
+        blockingCallSpeak("foo bar", delegate);
+        ArgumentCaptor<SynthesisRequest> req = LittleMock.createCaptor();
+        LittleMock.verify(delegate, LittleMock.times(1)).onSynthesizeText(req.capture(),
+                LittleMock.<SynthesisCallback>anyObject());
+
+        assertEquals("eng", req.getValue().getLanguage());
+        assertEquals("USA", req.getValue().getCountry());
+        assertEquals("", req.getValue().getVariant());
+    }
+
+    public void testSetLanguage_unavailableLanguage() throws Exception {
+        IDelegate delegate = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(delegate);
+
+        // ---------------------------------------------------------
+        // TEST 3 : Tests that the language that is set does not change when the
+        // engine reports it could not load the specified language.
+        LittleMock.doReturn(TextToSpeech.LANG_NOT_SUPPORTED).when(
+                delegate).onLoadLanguage("fra", "FRA", "");
+        mTts.setLanguage(Locale.FRANCE);
+        blockingCallSpeak("le fou barre", delegate);
+        ArgumentCaptor<SynthesisRequest> req2 = LittleMock.createCaptor();
+        LittleMock.verify(delegate, LittleMock.times(1)).onSynthesizeText(req2.capture(),
+                        LittleMock.<SynthesisCallback>anyObject());
+
+        // The params are basically unchanged.
+        assertEquals("eng", req2.getValue().getLanguage());
+        assertEquals("USA", req2.getValue().getCountry());
+        assertEquals("", req2.getValue().getVariant());
+    }
+
+
+    public void testGetLanguage_invalidReturnValues() {
+        IDelegate delegate = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(delegate);
+
+        // Test1: Simple end to end test. Ensure that bad return values
+        // are dealt with appropriately.
+        LittleMock.doReturn(null).when(delegate).onGetLanguage();
+        Locale returnVal = mTts.getLanguage();
+        assertNull(returnVal);
+
+
+        // Bad value 2. An array of length < 3.
+        LittleMock.doReturn(new String[] {"eng", "usa"}).when(delegate).onGetLanguage();
+        returnVal = mTts.getLanguage();
+        assertNull(returnVal);
+    }
+
+    public void testGetLanguage_validReturnValues() {
+        IDelegate delegate = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(delegate);
+
+        // A correct value.
+        LittleMock.doReturn(new String[] {"eng", "usa", ""}).when(delegate).onGetLanguage();
+        Locale returnVal = mTts.getLanguage();
+
+        // Note: This is not the same as Locale.US . Well tough luck for
+        // being the only component of the entire framework that standardized
+        // three letter country and language codes.
+        assertEquals(new Locale("eng", "USA", ""), returnVal);
+    }
+
+    public void testIsLanguageAvailable() {
+        IDelegate delegate = LittleMock.mock(IDelegate.class);
+        MockableTextToSpeechService.setMocker(delegate);
+
+        // Test1: Simple end to end test.
+        LittleMock.doReturn(TextToSpeech.LANG_COUNTRY_AVAILABLE).when(
+                delegate).onIsLanguageAvailable("eng", "USA", "");
+
+        assertEquals(TextToSpeech.LANG_COUNTRY_AVAILABLE, mTts.isLanguageAvailable(Locale.US));
+        LittleMock.verify(delegate, LittleMock.times(1)).onIsLanguageAvailable(
+                "eng", "USA", "");
+    }
+
+
+    private void blockingCallSpeak(String speech, IDelegate mock) throws
+            InterruptedException {
+        final CountDownLatch latch = new CountDownLatch(1);
+        doCountDown(latch).when(mock).onSynthesizeText(LittleMock.<SynthesisRequest>anyObject(),
+                LittleMock.<SynthesisCallback>anyObject());
+        mTts.speak(speech, TextToSpeech.QUEUE_ADD, null);
+
+        awaitCountDown(latch, 5, TimeUnit.SECONDS);
+    }
+
+    private void blockingInitAndVerify(final String engine, int errorCode) throws
+            InterruptedException {
+        TextToSpeech.OnInitListener listener = LittleMock.mock(
+                TextToSpeech.OnInitListener.class);
+
+        final CountDownLatch latch = new CountDownLatch(1);
+        doCountDown(latch).when(listener).onInit(errorCode);
+
+        mTts = new TextToSpeech(getInstrumentation().getTargetContext(),
+                listener, engine, MOCK_PACKAGE, false /* use fallback package */);
+
+        awaitCountDown(latch, 5, TimeUnit.SECONDS);
+    }
+
+    public interface CountDownBehaviour extends Behaviour {
+        /** Used to mock methods that return a result. */
+        Behaviour andReturn(Object result);
+    }
+
+    public static CountDownBehaviour doCountDown(final CountDownLatch latch) {
+        return new CountDownBehaviour() {
+            @Override
+            public <T> T when(T mock) {
+                return LittleMock.doAnswer(new Callable<Void>() {
+                    @Override
+                    public Void call() throws Exception {
+                        latch.countDown();
+                        return null;
+                    }
+                }).when(mock);
+            }
+
+            @Override
+            public Behaviour andReturn(final Object result) {
+                return new Behaviour() {
+                    @Override
+                    public <T> T when(T mock) {
+                        return LittleMock.doAnswer(new Callable<Object>() {
+                            @Override
+                            public Object call() throws Exception {
+                                latch.countDown();
+                                return result;
+                            }
+                        }).when(mock);
+                    }
+                };
+            }
+        };
+    }
+
+    public static void awaitCountDown(CountDownLatch latch, long timeout, TimeUnit unit)
+            throws InterruptedException {
+        Assert.assertTrue("Waited too long for method call", latch.await(timeout, unit));
+    }
+}
diff --git a/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeCoercionTest.java b/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeCoercionTest.java
index 9aed888..a0f78a4 100644
--- a/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeCoercionTest.java
+++ b/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeCoercionTest.java
@@ -47,7 +47,6 @@
         private long mLongValue;
         private float mFloatValue;
         private double mDoubleValue;
-        // TODO: Test passing to methods with array parameters.
         private String mStringValue;
         private Object mObjectValue;
         private CustomType mCustomTypeValue;
@@ -100,7 +99,6 @@
             mDoubleValue = x;
             notifyResultIsReady();
         }
-        // TODO: Test passing to methods with array parameters.
         public synchronized void setStringValue(String x) {
             mStringValue = x;
             notifyResultIsReady();
@@ -146,7 +144,6 @@
             waitForResult();
             return mDoubleValue;
         }
-        // TODO: Test passing to methods with array parameters.
         public synchronized String waitForStringValue() {
             waitForResult();
             return mStringValue;
@@ -472,8 +469,6 @@
         assertNull(mTestObject.waitForCustomTypeValue());
     }
 
-    // TODO: Test passing arrays.
-
     // Test passing a JavaScript object to a method of an injected object.
     public void testPassJavaScriptObject() throws Throwable {
         // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index d7ac15e..89942de 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -425,6 +425,7 @@
 /*
  * Handle the "dump" command, to extract select data from an archive.
  */
+extern char CONSOLE_DATA[2925]; // see EOF
 int doDump(Bundle* bundle)
 {
     status_t result = UNKNOWN_ERROR;
@@ -1380,6 +1381,8 @@
                 }
                 delete dir;
             }
+        } else if (strcmp("badger", option) == 0) {
+            printf(CONSOLE_DATA);
         } else if (strcmp("configurations", option) == 0) {
             Vector<ResTable_config> configs;
             res.getConfigurations(&configs);
@@ -1728,3 +1731,169 @@
 
     return NO_ERROR;
 }
+
+char CONSOLE_DATA[2925] = {
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 95, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 61, 63,
+    86, 35, 40, 46, 46, 95, 95, 95, 95, 97, 97, 44, 32, 46, 124, 42, 33, 83,
+    62, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 46, 58, 59, 61, 59, 61, 81,
+    81, 81, 81, 66, 96, 61, 61, 58, 46, 46, 46, 58, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 46, 61, 59, 59, 59, 58, 106, 81, 81, 81, 81, 102, 59, 61, 59,
+    59, 61, 61, 61, 58, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 61, 59, 59,
+    59, 58, 109, 81, 81, 81, 81, 61, 59, 59, 59, 59, 59, 58, 59, 59, 46, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 46, 61, 59, 59, 59, 60, 81, 81, 81, 81, 87,
+    58, 59, 59, 59, 59, 59, 59, 61, 119, 44, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46,
+    47, 61, 59, 59, 58, 100, 81, 81, 81, 81, 35, 58, 59, 59, 59, 59, 59, 58,
+    121, 81, 91, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 109, 58, 59, 59, 61, 81, 81,
+    81, 81, 81, 109, 58, 59, 59, 59, 59, 61, 109, 81, 81, 76, 46, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 41, 87, 59, 61, 59, 41, 81, 81, 81, 81, 81, 81, 59, 61, 59,
+    59, 58, 109, 81, 81, 87, 39, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 81, 91, 59,
+    59, 61, 81, 81, 81, 81, 81, 87, 43, 59, 58, 59, 60, 81, 81, 81, 76, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 52, 91, 58, 45, 59, 87, 81, 81, 81, 81,
+    70, 58, 58, 58, 59, 106, 81, 81, 81, 91, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 93, 40, 32, 46, 59, 100, 81, 81, 81, 81, 40, 58, 46, 46, 58, 100, 81,
+    81, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 46, 46, 46, 32, 46, 46, 46, 32, 46, 32, 46, 45, 91, 59, 61, 58, 109,
+    81, 81, 81, 87, 46, 58, 61, 59, 60, 81, 81, 80, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32,
+    32, 32, 32, 32, 32, 32, 32, 46, 46, 61, 59, 61, 61, 61, 59, 61, 61, 59,
+    59, 59, 58, 58, 46, 46, 41, 58, 59, 58, 81, 81, 81, 81, 69, 58, 59, 59,
+    60, 81, 81, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 58, 59,
+    61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 46,
+    61, 59, 93, 81, 81, 81, 81, 107, 58, 59, 58, 109, 87, 68, 96, 32, 32, 32,
+    46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 10, 32, 32, 32, 46, 60, 61, 61, 59, 59, 59, 59, 59, 59, 59, 59,
+    59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 115, 109, 68, 41, 36, 81,
+    109, 46, 61, 61, 81, 69, 96, 46, 58, 58, 46, 58, 46, 46, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 46, 32, 95, 81,
+    67, 61, 61, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+    59, 59, 59, 59, 58, 68, 39, 61, 105, 61, 63, 81, 119, 58, 106, 80, 32, 58,
+    61, 59, 59, 61, 59, 61, 59, 61, 46, 95, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 10, 32, 32, 36, 81, 109, 105, 59, 61, 59, 59, 59,
+    59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 46, 58, 37,
+    73, 108, 108, 62, 52, 81, 109, 34, 32, 61, 59, 59, 59, 59, 59, 59, 59, 59,
+    59, 61, 59, 61, 61, 46, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10,
+    32, 46, 45, 57, 101, 43, 43, 61, 61, 59, 59, 59, 59, 59, 59, 61, 59, 59,
+    59, 59, 59, 59, 59, 59, 59, 58, 97, 46, 61, 108, 62, 126, 58, 106, 80, 96,
+    46, 61, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61,
+    97, 103, 97, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 45, 46, 32,
+    46, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 45, 58, 59, 59, 59, 59, 61,
+    119, 81, 97, 124, 105, 124, 124, 39, 126, 95, 119, 58, 61, 58, 59, 59, 59,
+    59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 119, 81, 81, 99, 32, 32,
+    32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 58, 59, 59, 58, 106, 81, 81, 81, 109, 119,
+    119, 119, 109, 109, 81, 81, 122, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+    59, 59, 59, 59, 59, 58, 115, 81, 87, 81, 102, 32, 32, 32, 32, 32, 32, 10,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 61, 58, 59, 61, 81, 81, 81, 81, 81, 81, 87, 87, 81, 81, 81, 81,
+    81, 58, 59, 59, 59, 59, 59, 59, 59, 59, 58, 45, 45, 45, 59, 59, 59, 41,
+    87, 66, 33, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 59, 59, 93, 81,
+    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 40, 58, 59, 59, 59, 58,
+    45, 32, 46, 32, 32, 32, 32, 32, 46, 32, 126, 96, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 58, 61, 59, 58, 81, 81, 81, 81, 81, 81, 81, 81,
+    81, 81, 81, 81, 81, 40, 58, 59, 59, 59, 58, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58,
+    59, 59, 58, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 40, 58,
+    59, 59, 59, 46, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 59, 60, 81, 81, 81, 81,
+    81, 81, 81, 81, 81, 81, 81, 81, 81, 59, 61, 59, 59, 61, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 58, 59, 59, 93, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+    81, 81, 40, 59, 59, 59, 59, 32, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 58, 106,
+    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 58, 59, 59, 59,
+    32, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 61, 58, 58, 81, 81, 81, 81, 81, 81, 81, 81,
+    81, 81, 81, 81, 81, 87, 58, 59, 59, 59, 59, 32, 46, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    58, 59, 61, 41, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 87, 59,
+    61, 58, 59, 59, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 58, 61, 81, 81, 81,
+    81, 81, 81, 81, 81, 81, 81, 81, 81, 107, 58, 59, 59, 59, 59, 58, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 58, 59, 59, 58, 51, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+    81, 102, 94, 59, 59, 59, 59, 59, 61, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 59,
+    59, 59, 43, 63, 36, 81, 81, 81, 87, 64, 86, 102, 58, 59, 59, 59, 59, 59,
+    59, 59, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 46, 61, 59, 59, 59, 59, 59, 59, 59, 43, 33,
+    58, 126, 126, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 32, 46, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46,
+    61, 59, 59, 59, 58, 45, 58, 61, 59, 58, 58, 58, 61, 59, 59, 59, 59, 59,
+    59, 59, 59, 59, 59, 59, 59, 58, 32, 46, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 61, 59, 59, 59, 59, 59, 58, 95,
+    32, 45, 61, 59, 61, 59, 59, 59, 59, 59, 59, 59, 45, 58, 59, 59, 59, 59,
+    61, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 58, 61, 59, 59, 59, 59, 59, 61, 59, 61, 46, 46, 32, 45, 45, 45,
+    59, 58, 45, 45, 46, 58, 59, 59, 59, 59, 59, 59, 61, 46, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 58, 59, 59, 59, 59,
+    59, 59, 59, 59, 59, 61, 59, 46, 32, 32, 46, 32, 46, 32, 58, 61, 59, 59,
+    59, 59, 59, 59, 59, 59, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 45, 59, 59, 59, 59, 59, 59, 59, 59, 58, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 61, 59, 59, 59, 59, 59, 59, 59, 58, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    46, 61, 59, 59, 59, 59, 59, 59, 59, 32, 46, 32, 32, 32, 32, 32, 32, 61,
+    46, 61, 59, 59, 59, 59, 59, 59, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 61, 59, 59, 59, 59, 59, 59,
+    59, 59, 32, 46, 32, 32, 32, 32, 32, 32, 32, 46, 61, 58, 59, 59, 59, 59,
+    59, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 58, 59, 59, 59, 59, 59, 59, 59, 59, 46, 46, 32, 32, 32,
+    32, 32, 32, 32, 61, 59, 59, 59, 59, 59, 59, 59, 45, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 45, 61,
+    59, 59, 59, 59, 59, 58, 32, 46, 32, 32, 32, 32, 32, 32, 32, 58, 59, 59,
+    59, 59, 59, 58, 45, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 45, 45, 32, 46, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 61, 59, 58, 45, 45, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 46, 32, 32, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10
+  };
diff --git a/tools/aapt/ZipEntry.cpp b/tools/aapt/ZipEntry.cpp
index b00135e..b575988 100644
--- a/tools/aapt/ZipEntry.cpp
+++ b/tools/aapt/ZipEntry.cpp
@@ -90,7 +90,7 @@
      * prefer the CDE values.)
      */
     if (!hasDD && !compareHeaders()) {
-        LOGW("warning: header mismatch\n");
+        ALOGW("warning: header mismatch\n");
         // keep going?
     }
 
@@ -200,7 +200,7 @@
     if (padding <= 0)
         return INVALID_OPERATION;
 
-    //LOGI("HEY: adding %d pad bytes to existing %d in %s\n",
+    //ALOGI("HEY: adding %d pad bytes to existing %d in %s\n",
     //    padding, mLFH.mExtraFieldLength, mCDE.mFileName);
 
     if (mLFH.mExtraFieldLength > 0) {
diff --git a/tools/aapt/ZipFile.cpp b/tools/aapt/ZipFile.cpp
index a2d5b80..0705be3 100644
--- a/tools/aapt/ZipFile.cpp
+++ b/tools/aapt/ZipFile.cpp
@@ -603,7 +603,7 @@
     if (copyPartialFpToFp(mZipFp, pSourceZip->mZipFp, copyLen, NULL)
         != NO_ERROR)
     {
-        LOGW("copy of '%s' failed\n", pEntry->mCDE.mFileName);
+        ALOGW("copy of '%s' failed\n", pEntry->mCDE.mFileName);
         result = UNKNOWN_ERROR;
         goto bail;
     }
@@ -780,7 +780,7 @@
     if (zerr != Z_OK) {
         result = UNKNOWN_ERROR;
         if (zerr == Z_VERSION_ERROR) {
-            LOGE("Installed zlib is not compatible with linked version (%s)\n",
+            ALOGE("Installed zlib is not compatible with linked version (%s)\n",
                 ZLIB_VERSION);
         } else {
             ALOGD("Call to deflateInit2 failed (zerr=%d)\n", zerr);
@@ -931,7 +931,7 @@
      * of wasted space at the end of the file.  Remove it now.
      */
     if (ftruncate(fileno(mZipFp), ftell(mZipFp)) != 0) {
-        LOGW("ftruncate failed %ld: %s\n", ftell(mZipFp), strerror(errno));
+        ALOGW("ftruncate failed %ld: %s\n", ftell(mZipFp), strerror(errno));
         // not fatal
     }
 
@@ -1019,7 +1019,7 @@
                         pEntry->getLFHOffset(), span);
             if (result != NO_ERROR) {
                 /* this is why you use a temp file */
-                LOGE("error during crunch - archive is toast\n");
+                ALOGE("error during crunch - archive is toast\n");
                 return result;
             }
 
diff --git a/voip/jni/rtp/AudioGroup.cpp b/voip/jni/rtp/AudioGroup.cpp
index 270b494..4db5738 100644
--- a/voip/jni/rtp/AudioGroup.cpp
+++ b/voip/jni/rtp/AudioGroup.cpp
@@ -510,7 +510,7 @@
         bool start()
         {
             if (run("Network", ANDROID_PRIORITY_AUDIO) != NO_ERROR) {
-                LOGE("cannot start network thread");
+                ALOGE("cannot start network thread");
                 return false;
             }
             return true;
@@ -530,7 +530,7 @@
         bool start()
         {
             if (run("Device", ANDROID_PRIORITY_AUDIO) != NO_ERROR) {
-                LOGE("cannot start device thread");
+                ALOGE("cannot start device thread");
                 return false;
             }
             return true;
@@ -573,7 +573,7 @@
 {
     mEventQueue = epoll_create(2);
     if (mEventQueue == -1) {
-        LOGE("epoll_create: %s", strerror(errno));
+        ALOGE("epoll_create: %s", strerror(errno));
         return false;
     }
 
@@ -583,7 +583,7 @@
     // Create device socket.
     int pair[2];
     if (socketpair(AF_UNIX, SOCK_DGRAM, 0, pair)) {
-        LOGE("socketpair: %s", strerror(errno));
+        ALOGE("socketpair: %s", strerror(errno));
         return false;
     }
     mDeviceSocket = pair[0];
@@ -593,7 +593,7 @@
     if (!mChain->set(AudioStream::NORMAL, pair[1], NULL, NULL,
         sampleRate, sampleCount, -1, -1)) {
         close(pair[1]);
-        LOGE("cannot initialize device stream");
+        ALOGE("cannot initialize device stream");
         return false;
     }
 
@@ -602,7 +602,7 @@
     tv.tv_sec = 0;
     tv.tv_usec = 1000 * sampleCount / sampleRate * 500;
     if (setsockopt(pair[0], SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))) {
-        LOGE("setsockopt: %s", strerror(errno));
+        ALOGE("setsockopt: %s", strerror(errno));
         return false;
     }
 
@@ -611,7 +611,7 @@
     event.events = EPOLLIN;
     event.data.ptr = mChain;
     if (epoll_ctl(mEventQueue, EPOLL_CTL_ADD, pair[1], &event)) {
-        LOGE("epoll_ctl: %s", strerror(errno));
+        ALOGE("epoll_ctl: %s", strerror(errno));
         return false;
     }
 
@@ -675,7 +675,7 @@
     event.events = EPOLLIN;
     event.data.ptr = stream;
     if (epoll_ctl(mEventQueue, EPOLL_CTL_ADD, stream->mSocket, &event)) {
-        LOGE("epoll_ctl: %s", strerror(errno));
+        ALOGE("epoll_ctl: %s", strerror(errno));
         return false;
     }
 
@@ -699,7 +699,7 @@
         AudioStream *target = stream->mNext;
         if (target->mSocket == socket) {
             if (epoll_ctl(mEventQueue, EPOLL_CTL_DEL, socket, NULL)) {
-                LOGE("epoll_ctl: %s", strerror(errno));
+                ALOGE("epoll_ctl: %s", strerror(errno));
                 return false;
             }
             stream->mNext = target->mNext;
@@ -749,7 +749,7 @@
     epoll_event events[count];
     count = epoll_wait(mGroup->mEventQueue, events, count, deadline);
     if (count == -1) {
-        LOGE("epoll_wait: %s", strerror(errno));
+        ALOGE("epoll_wait: %s", strerror(errno));
         return false;
     }
     for (int i = 0; i < count; ++i) {
@@ -792,7 +792,7 @@
         sampleRate) != NO_ERROR || output <= 0 ||
         AudioRecord::getMinFrameCount(&input, sampleRate,
         AUDIO_FORMAT_PCM_16_BIT, 1) != NO_ERROR || input <= 0) {
-        LOGE("cannot compute frame count");
+        ALOGE("cannot compute frame count");
         return false;
     }
     ALOGD("reported frame count: output %d, input %d", output, input);
@@ -812,7 +812,7 @@
         AUDIO_CHANNEL_OUT_MONO, output) != NO_ERROR || record.set(
         AUDIO_SOURCE_VOICE_COMMUNICATION, sampleRate, AUDIO_FORMAT_PCM_16_BIT,
         AUDIO_CHANNEL_IN_MONO, input) != NO_ERROR) {
-        LOGE("cannot initialize audio device");
+        ALOGE("cannot initialize audio device");
         return false;
     }
     ALOGD("latency: output %d, input %d", track.latency(), record.latency());
@@ -884,7 +884,7 @@
                     toWrite -= buffer.frameCount;
                     track.releaseBuffer(&buffer);
                 } else if (status != TIMED_OUT && status != WOULD_BLOCK) {
-                    LOGE("cannot write to AudioTrack");
+                    ALOGE("cannot write to AudioTrack");
                     goto exit;
                 }
             }
@@ -900,14 +900,14 @@
                     toRead -= buffer.frameCount;
                     record.releaseBuffer(&buffer);
                 } else if (status != TIMED_OUT && status != WOULD_BLOCK) {
-                    LOGE("cannot read from AudioRecord");
+                    ALOGE("cannot read from AudioRecord");
                     goto exit;
                 }
             }
         }
 
         if (chances <= 0) {
-            LOGW("device loop timeout");
+            ALOGW("device loop timeout");
             while (recv(deviceSocket, &c, 1, MSG_DONTWAIT) == 1);
         }
 
@@ -1051,7 +1051,7 @@
 {
     gRandom = open("/dev/urandom", O_RDONLY);
     if (gRandom == -1) {
-        LOGE("urandom: %s", strerror(errno));
+        ALOGE("urandom: %s", strerror(errno));
         return -1;
     }
 
@@ -1060,7 +1060,7 @@
         (gNative = env->GetFieldID(clazz, "mNative", "I")) == NULL ||
         (gMode = env->GetFieldID(clazz, "mMode", "I")) == NULL ||
         env->RegisterNatives(clazz, gMethods, NELEM(gMethods)) < 0) {
-        LOGE("JNI registration failed");
+        ALOGE("JNI registration failed");
         return -1;
     }
     return 0;
diff --git a/voip/jni/rtp/EchoSuppressor.cpp b/voip/jni/rtp/EchoSuppressor.cpp
index 6127d3c..e223136 100644
--- a/voip/jni/rtp/EchoSuppressor.cpp
+++ b/voip/jni/rtp/EchoSuppressor.cpp
@@ -177,7 +177,7 @@
             }
         }
     }
-    //LOGI("corr^2 %.5f, var %8.0f %8.0f, latency %d", corr2, varX, varY,
+    //ALOGI("corr^2 %.5f, var %8.0f %8.0f, latency %d", corr2, varX, varY,
     //        latency * mScale);
 
     // Do echo suppression.
diff --git a/voip/jni/rtp/RtpStream.cpp b/voip/jni/rtp/RtpStream.cpp
index f5efc17..6540099 100644
--- a/voip/jni/rtp/RtpStream.cpp
+++ b/voip/jni/rtp/RtpStream.cpp
@@ -116,7 +116,7 @@
     if ((clazz = env->FindClass("android/net/rtp/RtpStream")) == NULL ||
         (gNative = env->GetFieldID(clazz, "mNative", "I")) == NULL ||
         env->RegisterNatives(clazz, gMethods, NELEM(gMethods)) < 0) {
-        LOGE("JNI registration failed");
+        ALOGE("JNI registration failed");
         return -1;
     }
     return 0;