Revved to chromium 7f6805bd9257180e07cb6924ea41bcb76cfa462b refs/remotes/origin/HEAD

filter gyp out of build/landmines.py

filter pepper out of mojo/examples/BUILD.gn

filter html_viewer out of mojo/services/BUILD.gn

filter js out of mojo/BUILD.gn

filter js/bindings out of mojo/public/BUILD.gn

applied patch gpu_media.patch

applied patch cc_strip_video.patch

applied patch ui_test_support.patch

applied patch remove_ipc_deps.patch

applied patch ui_compositor.patch

applied patch net_sql.patch
diff --git a/DEPS b/DEPS
index d60f4db..2301210 100644
--- a/DEPS
+++ b/DEPS
@@ -30,12 +30,12 @@
   'skia_git': 'https://skia.googlesource.com',
   'boringssl_git': 'https://boringssl.googlesource.com',
   'sfntly_revision': '1bdaae8fc788a5ac8936d68bf24f37d977a13dac',
-  'skia_revision': '5bb9700b7ef952f2664e059afb4f9f137f7d5a7d',
+  'skia_revision': '783991585be67da3286680d850a99c5410885965',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and V8 without interference from each other.
   'v8_branch': 'trunk',
-  'v8_revision': '86da2033a81f5e51ea57028027be6eac208b9dfb', # from svn revision 24398
+  'v8_revision': 'b287d3641c8169c74f83a44b33ada13cf3cefaf2', # from svn revision 24398
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -109,7 +109,7 @@
    Var('chromium_git') + '/chromium/deps/libjpeg_turbo.git' + '@' + '034e9a9747e0983bc19808ea70e469bc8342081f',
 
   'src/third_party/libyuv':
-    Var('chromium_git') + '/external/libyuv.git' + '@' + '455c66b4375d72984b79249616d0a708ad568894',
+    Var('chromium_git') + '/external/libyuv.git' + '@' + '9107460c7f76a10cc4122d91e62b0580eacd376e',
 
   'src/third_party/smhasher/src':
     Var('chromium_git') + '/external/smhasher.git' + '@' + 'e87738e57558e0ec472b2fc3a643b838e5b6e88f',
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 18f2b01..d783ee0 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1227,6 +1227,7 @@
     "process/memory_unittest_mac.mm",
     "process/process_metrics_unittest.cc",
     "process/process_metrics_unittest_ios.cc",
+    "process/process_unittest.cc",
     "process/process_util_unittest.cc",
     "process/process_util_unittest_ios.cc",
     "profiler/tracked_time_unittest.cc",
@@ -1338,6 +1339,7 @@
       "process/memory_unittest.cc",
       "process/memory_unittest_mac.h",
       "process/memory_unittest_mac.mm",
+      "process/process_unittest.cc",
       "process/process_util_unittest.cc",
     ]
 
diff --git a/base/OWNERS b/base/OWNERS
index 04e7a6f..a014c74 100644
--- a/base/OWNERS
+++ b/base/OWNERS
@@ -1,12 +1,14 @@
 mark@chromium.org
 darin@chromium.org
-willchan@chromium.org
 ajwong@chromium.org
 thakis@chromium.org
 danakj@chromium.org
 rvargas@chromium.org
 thestig@chromium.org
 
+# On extended leave.
+willchan@chromium.org
+
 per-file *.isolate=csharp@chromium.org
 per-file *.isolate=maruel@chromium.org
 per-file bind.h=ajwong@chromium.org
diff --git a/base/android/BUILD.gn b/base/android/BUILD.gn
new file mode 100644
index 0000000..befe397
--- /dev/null
+++ b/base/android/BUILD.gn
@@ -0,0 +1,18 @@
+import("//build/config/android/config.gni")
+
+assert(is_android)
+assert(!is_android_webview_build)
+
+shared_library("chromium_android_linker") {
+  sources = [ "linker/linker_jni.cc" ]
+  # The NDK contains the crazy_linker here:
+  #   '<(android_ndk_root)/crazy_linker.gyp:crazy_linker'
+  # However, we use our own fork.  See bug 384700.
+  deps = [ "//third_party/android_crazy_linker" ]
+
+  # TODO(GYP):
+  # The crazy linker is never instrumented.
+  #'cflags!': [
+  #'-finstrument-functions',
+  #],
+}
diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java
index 2b3cb09..41104f0 100644
--- a/base/android/java/src/org/chromium/base/library_loader/Linker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java
@@ -826,7 +826,7 @@
                 sCurrentLoadAddress = libInfo.mLoadAddress + libInfo.mLoadSize;
             }
 
-            sLoadedLibraries.put(libName, libInfo);
+            sLoadedLibraries.put(sharedRelRoName, libInfo);
             if (DEBUG) Log.i(TAG, "Library details " + libInfo.toString());
         }
     }
diff --git a/base/base.gyp b/base/base.gyp
index 41fac4f..95f6f7d 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -564,6 +564,7 @@
         'process/memory_unittest_mac.mm',
         'process/process_metrics_unittest.cc',
         'process/process_metrics_unittest_ios.cc',
+        'process/process_unittest.cc',
         'process/process_util_unittest.cc',
         'profiler/tracked_time_unittest.cc',
         'rand_util_unittest.cc',
@@ -683,6 +684,7 @@
           'sources/': [
             # Only test the iOS-meaningful portion of process_utils.
             ['exclude', '^process/memory_unittest'],
+            ['exclude', '^process/process_unittest\\.cc$'],
             ['exclude', '^process/process_util_unittest\\.cc$'],
             ['include', '^process/process_util_unittest_ios\\.cc$'],
             # Requires spawning processes.
@@ -1404,7 +1406,7 @@
           'includes': [ '../build/java.gypi' ],
         },
         {
-          # TODO(GN)
+          # GN: //base/android/chromium_android_linker
           'target_name': 'chromium_android_linker',
           'type': 'shared_library',
           'conditions': [
diff --git a/base/base_nacl.gyp b/base/base_nacl.gyp
index 0816d31..7221d2a 100644
--- a/base/base_nacl.gyp
+++ b/base/base_nacl.gyp
@@ -67,5 +67,60 @@
         },
       ],
     }],
+    ['disable_nacl==0', {
+      'targets': [
+        {
+          'target_name': 'base_nacl_nonsfi',
+          'type': 'none',
+          'include_dirs': [
+            '<(DEPTH)/native_client/src/public/linux_syscalls',
+          ],
+          'variables': {
+            'base_target': 1,
+            'nacl_untrusted_build': 1,
+            'nlib_target': 'libbase_nacl_nonsfi.a',
+            'build_glibc': 0,
+            'build_newlib': 0,
+            'build_irt': 0,
+            'build_pnacl_newlib': 0,
+            'build_nonsfi_helper': 1,
+
+            'sources': [
+              'base_switches.cc',
+              'base_switches.h',
+
+              # For PathExists and ReadFromFD.
+              'files/file_util_posix.cc',
+
+              # For MessageLoopForIO based on libevent.
+              'message_loop/message_pump_libevent.cc',
+              'message_loop/message_pump_libevent.h',
+
+              # For UnixDomainSocket::SendMsg and RecvMsg.
+              'posix/unix_domain_socket_linux.cc',
+
+              # For GetKnownDeadTerminationStatus and GetTerminationStatus.
+              'process/kill_posix.cc',
+
+              # Unlike libbase_nacl, for Non-SFI build, we need to use
+              # rand_util_posix for random implementation, instead of
+              # rand_util_nacl.cc, which is based on IRT. rand_util_nacl.cc is
+              # excluded below.
+              'rand_util_posix.cc',
+
+              # For CancelableSyncSocket.
+              'sync_socket_nacl.cc',
+            ],
+          },
+          'sources!': [
+            'rand_util_nacl.cc',
+          ],
+          'dependencies': [
+            '<(DEPTH)/native_client/tools.gyp:prep_toolchain',
+            '<(DEPTH)/third_party/libevent/libevent_nacl_nonsfi.gyp:event_nacl_nonsfi',
+          ],
+        },
+      ],
+    }],
   ],
 }
diff --git a/base/build_time.cc b/base/build_time.cc
index 760269a..86503e2 100644
--- a/base/build_time.cc
+++ b/base/build_time.cc
@@ -16,7 +16,11 @@
   //
   // __DATE__ is exactly "Mmm DD YYYY".
   // __TIME__ is exactly "hh:mm:ss".
+#if defined(DONT_EMBED_BUILD_METADATA)
+  const char kDateTime[] = "Sep 02 2008 08:00:00 PST";
+#else
   const char kDateTime[] = __DATE__ " " __TIME__ " PST";
+#endif
   bool result = Time::FromString(kDateTime, &integral_build_time);
   DCHECK(result);
   return integral_build_time;
diff --git a/base/build_time_unittest.cc b/base/build_time_unittest.cc
index 399a53f..aac64a7 100644
--- a/base/build_time_unittest.cc
+++ b/base/build_time_unittest.cc
@@ -7,7 +7,11 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(BuildTime, DateLooksValid) {
+#if !defined(DONT_EMBED_BUILD_METADATA)
   char build_date[] = __DATE__;
+#else
+  char build_date[] = "Sep 02 2008";
+#endif
 
   EXPECT_EQ(11u, strlen(build_date));
   EXPECT_EQ(' ', build_date[3]);
@@ -15,7 +19,11 @@
 }
 
 TEST(BuildTime, TimeLooksValid) {
+#if defined(DONT_EMBED_BUILD_METADATA)
+  char build_time[] = "08:00:00";
+#else
   char build_time[] = __TIME__;
+#endif
 
   EXPECT_EQ(8u, strlen(build_time));
   EXPECT_EQ(':', build_time[2]);
diff --git a/base/compiler_specific.h b/base/compiler_specific.h
index ba57cc3..6210d1a 100644
--- a/base/compiler_specific.h
+++ b/base/compiler_specific.h
@@ -94,11 +94,17 @@
 // (Typically used to silence a compiler warning when the assignment
 // is important for some other reason.)
 // Use like:
-//   int x ALLOW_UNUSED = ...;
+//   int x = ...;
+//   ALLOW_UNUSED_LOCAL(x);
+#define ALLOW_UNUSED_LOCAL(x) false ? (void)x : (void)0
+
+// Annotate a typedef or function indicating it's ok if it's not used.
+// Use like:
+//   typedef Foo Bar ALLOW_UNUSED_TYPE;
 #if defined(COMPILER_GCC)
-#define ALLOW_UNUSED __attribute__((unused))
+#define ALLOW_UNUSED_TYPE __attribute__((unused))
 #else
-#define ALLOW_UNUSED
+#define ALLOW_UNUSED_TYPE
 #endif
 
 // Annotate a function indicating it should not be inlined.
diff --git a/base/files/file_util_posix.cc b/base/files/file_util_posix.cc
index 561f5c7..5a94cef 100644
--- a/base/files/file_util_posix.cc
+++ b/base/files/file_util_posix.cc
@@ -59,6 +59,7 @@
 
 namespace base {
 
+#if !defined(__native_client_nonsfi__)
 namespace {
 
 #if defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL)
@@ -345,6 +346,7 @@
 
   return success;
 }
+#endif  // !defined(__native_client_nonsfi__)
 
 bool PathExists(const FilePath& path) {
   ThreadRestrictions::AssertIOAllowed();
@@ -356,6 +358,7 @@
   return access(path.value().c_str(), F_OK) == 0;
 }
 
+#if !defined(__native_client_nonsfi__)
 bool PathIsWritable(const FilePath& path) {
   ThreadRestrictions::AssertIOAllowed();
   return access(path.value().c_str(), W_OK) == 0;
@@ -368,6 +371,7 @@
     return S_ISDIR(file_info.st_mode);
   return false;
 }
+#endif  // !defined(__native_client_nonsfi__)
 
 bool ReadFromFD(int fd, char* buffer, size_t bytes) {
   size_t total_read = 0;
@@ -381,6 +385,7 @@
   return total_read == bytes;
 }
 
+#if !defined(__native_client_nonsfi__)
 bool CreateSymbolicLink(const FilePath& target_path,
                         const FilePath& symlink_path) {
   DCHECK(!symlink_path.empty());
@@ -920,4 +925,6 @@
 #endif  // !defined(OS_MACOSX)
 
 }  // namespace internal
+
+#endif  // !defined(__native_client_nonsfi__)
 }  // namespace base
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
index 6ebe32e..95a16f2 100644
--- a/base/logging_unittest.cc
+++ b/base/logging_unittest.cc
@@ -240,7 +240,8 @@
 // looking in the global namespace.
 namespace nested_test {
   class Streamable {};
-  ALLOW_UNUSED std::ostream& operator<<(std::ostream& out, const Streamable&) {
+  ALLOW_UNUSED_TYPE std::ostream& operator<<(std::ostream& out,
+                                             const Streamable&) {
     return out << "Streamable";
   }
   TEST_F(LoggingTest, StreamingWstringFindsCorrectOperator) {
diff --git a/base/mac/foundation_util_unittest.mm b/base/mac/foundation_util_unittest.mm
index 916a13b..e60a0f6 100644
--- a/base/mac/foundation_util_unittest.mm
+++ b/base/mac/foundation_util_unittest.mm
@@ -331,12 +331,12 @@
 #endif  // defined(ARCH_CPU_64_BITS)
 
   NSInteger some_nsinteger;
-  FormatNSIntegerAsType* pointer_to_some_nsinteger ALLOW_UNUSED =
-      &some_nsinteger;
+  FormatNSIntegerAsType* pointer_to_some_nsinteger = &some_nsinteger;
+  ALLOW_UNUSED_LOCAL(pointer_to_some_nsinteger);
 
   NSUInteger some_nsuinteger;
-  FormatNSUIntegerAsType* pointer_to_some_nsuinteger ALLOW_UNUSED =
-      &some_nsuinteger;
+  FormatNSUIntegerAsType* pointer_to_some_nsuinteger = &some_nsuinteger;
+  ALLOW_UNUSED_LOCAL(pointer_to_some_nsuinteger);
 
   // Check that format specifier works correctly for NSInteger.
   const struct {
diff --git a/base/macros.h b/base/macros.h
index 2e3fc09..f89d7d1 100644
--- a/base/macros.h
+++ b/base/macros.h
@@ -69,8 +69,12 @@
 
 // DEPRECATED: Just use |arraysize()|, now that C++11 has removed the
 // limitations that forced the use of |ARRAYSIZE_UNSAFE()|.
-// TODO(viettrungluu): Convert all instances and delete. crbug.com/423134
+// TODO(viettrungluu): Convert all instances and delete. (The only uses are now
+// in Blink; the ifdef is to prevent it from reappearing in Chromium.)
+// crbug.com/423134
+#if defined(BLINK_PLATFORM) || defined(BLINK_PLATFORM_IMPLEMENTATION)
 #define ARRAYSIZE_UNSAFE(a) arraysize(a)
+#endif
 
 
 // Use implicit_cast as a safe version of static_cast or const_cast
diff --git a/base/memory/discardable_memory_unittest.cc b/base/memory/discardable_memory_unittest.cc
index 2bdc079..600475e 100644
--- a/base/memory/discardable_memory_unittest.cc
+++ b/base/memory/discardable_memory_unittest.cc
@@ -103,6 +103,22 @@
 }
 #endif
 
+// Test behavior when creating enough instances that could use up a 32-bit
+// address space.
+TEST_P(DiscardableMemoryTest, AddressSpace) {
+  const size_t kLargeSize = 4 * 1024 * 1024;  // 4MiB.
+  const size_t kNumberOfInstances = 1024 + 1;  // >4GiB total.
+
+  scoped_ptr<DiscardableMemory> instances[kNumberOfInstances];
+  for (auto& memory : instances) {
+    memory = CreateLockedMemory(kLargeSize);
+    ASSERT_TRUE(memory);
+    void* addr = memory->Memory();
+    ASSERT_NE(nullptr, addr);
+    memory->Unlock();
+  }
+}
+
 std::vector<DiscardableMemoryType> GetSupportedDiscardableMemoryTypes() {
   std::vector<DiscardableMemoryType> supported_types;
   DiscardableMemory::GetSupportedTypes(&supported_types);
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index c01e542..f1d0d3b 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -100,7 +100,7 @@
 
 #if defined(OS_IOS)
 typedef MessagePumpIOSForIO MessagePumpForIO;
-#elif defined(OS_NACL)
+#elif defined(OS_NACL) && !defined(__native_client_nonsfi__)
 typedef MessagePumpDefault MessagePumpForIO;
 #elif defined(OS_POSIX)
 typedef MessagePumpLibevent MessagePumpForIO;
@@ -676,7 +676,7 @@
 //------------------------------------------------------------------------------
 // MessageLoopForIO
 
-#if !defined(OS_NACL)
+#if !defined(OS_NACL) || defined(__native_client_nonsfi__)
 void MessageLoopForIO::AddIOObserver(
     MessageLoopForIO::IOObserver* io_observer) {
   ToPumpIO(pump_.get())->AddIOObserver(io_observer);
@@ -714,6 +714,6 @@
 }
 #endif
 
-#endif  // !defined(OS_NACL)
+#endif  // !defined(OS_NACL) || defined(__native_client_nonsfi__)
 
 }  // namespace base
diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h
index bc98251..a180cc3 100644
--- a/base/message_loop/message_loop.h
+++ b/base/message_loop/message_loop.h
@@ -596,7 +596,7 @@
     return loop && loop->type() == MessageLoop::TYPE_IO;
   }
 
-#if !defined(OS_NACL)
+#if !defined(OS_NACL) || defined(__native_client_nonsfi__)
 
 #if defined(OS_WIN)
   typedef MessagePumpForIO::IOHandler IOHandler;
@@ -642,7 +642,7 @@
                            FileDescriptorWatcher *controller,
                            Watcher *delegate);
 #endif  // defined(OS_IOS) || defined(OS_POSIX)
-#endif  // !defined(OS_NACL)
+#endif  // !defined(OS_NACL) || defined(__native_client_nonsfi__)
 };
 
 // Do not add any member variables to MessageLoopForIO!  This is important b/c
diff --git a/base/posix/unix_domain_socket_linux.cc b/base/posix/unix_domain_socket_linux.cc
index 51b936b..20a5944 100644
--- a/base/posix/unix_domain_socket_linux.cc
+++ b/base/posix/unix_domain_socket_linux.cc
@@ -6,7 +6,6 @@
 
 #include <errno.h>
 #include <sys/socket.h>
-#include <sys/uio.h>
 #include <unistd.h>
 
 #include <vector>
@@ -18,8 +17,13 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/stl_util.h"
 
+#if !defined(__native_client_nonsfi__)
+#include <sys/uio.h>
+#endif
+
 const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
 
+#if !defined(__native_client_nonsfi__)
 // Creates a connected pair of UNIX-domain SOCK_SEQPACKET sockets, and passes
 // ownership of the newly allocated file descriptors to |one| and |two|.
 // Returns true on success.
@@ -37,6 +41,7 @@
   const int enable = 1;
   return setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable)) == 0;
 }
+#endif  // !defined(__native_client_nonsfi__)
 
 // static
 bool UnixDomainSocket::SendMsg(int fd,
@@ -106,8 +111,14 @@
   msg.msg_iov = &iov;
   msg.msg_iovlen = 1;
 
-  char control_buffer[CMSG_SPACE(sizeof(int) * kMaxFileDescriptors) +
-                      CMSG_SPACE(sizeof(struct ucred))];
+  const size_t kControlBufferSize =
+      CMSG_SPACE(sizeof(int) * kMaxFileDescriptors)
+#if !defined(__native_client_nonsfi__)
+      // The PNaCl toolchain for Non-SFI binary build does not support ucred.
+      + CMSG_SPACE(sizeof(struct ucred))
+#endif
+      ;
+  char control_buffer[kControlBufferSize];
   msg.msg_control = control_buffer;
   msg.msg_controllen = sizeof(control_buffer);
 
@@ -130,21 +141,29 @@
         wire_fds = reinterpret_cast<int*>(CMSG_DATA(cmsg));
         wire_fds_len = payload_len / sizeof(int);
       }
+#if !defined(__native_client_nonsfi__)
+      // The PNaCl toolchain for Non-SFI binary build does not support
+      // SCM_CREDENTIALS.
       if (cmsg->cmsg_level == SOL_SOCKET &&
           cmsg->cmsg_type == SCM_CREDENTIALS) {
         DCHECK(payload_len == sizeof(struct ucred));
         DCHECK(pid == -1);
         pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
       }
+#endif
     }
   }
 
+#if !defined(__native_client_nonsfi__)
+  // The PNaCl toolchain for Non-SFI binary build does not support
+  // MSG_TRUNC or MSG_CTRUNC.
   if (msg.msg_flags & MSG_TRUNC || msg.msg_flags & MSG_CTRUNC) {
     for (unsigned i = 0; i < wire_fds_len; ++i)
       close(wire_fds[i]);
     errno = EMSGSIZE;
     return -1;
   }
+#endif
 
   if (wire_fds) {
     for (unsigned i = 0; i < wire_fds_len; ++i)
@@ -165,6 +184,7 @@
   return r;
 }
 
+#if !defined(__native_client_nonsfi__)
 // static
 ssize_t UnixDomainSocket::SendRecvMsg(int fd,
                                       uint8_t* reply,
@@ -222,3 +242,4 @@
 
   return reply_len;
 }
+#endif  // !defined(__native_client_nonsfi__)
diff --git a/base/posix/unix_domain_socket_linux.h b/base/posix/unix_domain_socket_linux.h
index 59bb884..5281875 100644
--- a/base/posix/unix_domain_socket_linux.h
+++ b/base/posix/unix_domain_socket_linux.h
@@ -21,10 +21,12 @@
   // Maximum number of file descriptors that can be read by RecvMsg().
   static const size_t kMaxFileDescriptors;
 
+#if !defined(__native_client_nonsfi__)
   // Use to enable receiving process IDs in RecvMsgWithPid.  Should be called on
   // the receiving socket (i.e., the socket passed to RecvMsgWithPid). Returns
   // true if successful.
   static bool EnableReceiveProcessId(int fd);
+#endif  // !defined(__native_client_nonsfi__)
 
   // Use sendmsg to write the given msg and include a vector of file
   // descriptors. Returns true if successful.
@@ -50,6 +52,7 @@
                                 ScopedVector<base::ScopedFD>* fds,
                                 base::ProcessId* pid);
 
+#if !defined(__native_client_nonsfi__)
   // Perform a sendmsg/recvmsg pair.
   //   1. This process creates a UNIX SEQPACKET socketpair. Using
   //      connection-oriented sockets (SEQPACKET or STREAM) is critical here,
@@ -82,6 +85,7 @@
                                       int recvmsg_flags,
                                       int* result_fd,
                                       const Pickle& request);
+#endif  // !defined(__native_client_nonsfi__)
  private:
   // Similar to RecvMsg, but allows to specify |flags| for recvmsg(2).
   static ssize_t RecvMsgWithFlags(int fd,
diff --git a/base/process/kill_posix.cc b/base/process/kill_posix.cc
index d4ca726..bff7be4 100644
--- a/base/process/kill_posix.cc
+++ b/base/process/kill_posix.cc
@@ -22,6 +22,7 @@
 
 namespace {
 
+#if !defined(__native_client_nonsfi__)
 bool WaitpidWithTimeout(ProcessHandle handle,
                         int* status,
                         base::TimeDelta wait) {
@@ -83,6 +84,7 @@
 
   return ret_pid > 0;
 }
+#endif  // !defined(__native_client_nonsfi__)
 
 TerminationStatus GetTerminationStatusImpl(ProcessHandle handle,
                                            bool can_block,
@@ -130,6 +132,7 @@
 
 }  // namespace
 
+#if !defined(__native_client_nonsfi__)
 // Attempts to kill the process identified by the given process
 // entry structure.  Ignores specified exit_code; posix can't force that.
 // Returns true if this is successful, false otherwise.
@@ -191,6 +194,7 @@
     DPLOG(ERROR) << "Unable to terminate process group " << process_group_id;
   return result;
 }
+#endif  // !defined(__native_client_nonsfi__)
 
 TerminationStatus GetTerminationStatus(ProcessHandle handle, int* exit_code) {
   return GetTerminationStatusImpl(handle, false /* can_block */, exit_code);
@@ -206,6 +210,7 @@
   return GetTerminationStatusImpl(handle, true /* can_block */, exit_code);
 }
 
+#if !defined(__native_client_nonsfi__)
 bool WaitForExitCode(ProcessHandle handle, int* exit_code) {
   int status;
   if (HANDLE_EINTR(waitpid(handle, &status, 0)) == -1) {
@@ -354,7 +359,7 @@
 
 bool WaitForSingleProcess(ProcessHandle handle, base::TimeDelta wait) {
   ProcessHandle parent_pid = GetParentProcessId(handle);
-  ProcessHandle our_pid = Process::Current().handle();
+  ProcessHandle our_pid = GetCurrentProcessHandle();
   if (parent_pid != our_pid) {
 #if defined(OS_MACOSX)
     // On Mac we can wait on non child processes.
@@ -478,5 +483,6 @@
 }
 
 #endif  // !defined(OS_MACOSX)
+#endif  // !defined(__native_client_nonsfi__)
 
 }  // namespace base
diff --git a/base/process/process.h b/base/process/process.h
index 20e8884..7019474 100644
--- a/base/process/process.h
+++ b/base/process/process.h
@@ -7,53 +7,81 @@
 
 #include "base/base_export.h"
 #include "base/basictypes.h"
+#include "base/move.h"
 #include "base/process/process_handle.h"
 #include "build/build_config.h"
 
+#if defined(OS_WIN)
+#include "base/win/scoped_handle.h"
+#endif
+
 namespace base {
 
+// Provides a move-only encapsulation of a process.
+//
+// This object is not tied to the lifetime of the underlying process: the
+// process may be killed and this object may still around, and it will still
+// claim to be valid. The actual behavior in that case is OS dependent like so:
+//
+// Windows: The underlying ProcessHandle will be valid after the process dies
+// and can be used to gather some information about that process, but most
+// methods will obviously fail.
+//
+// POSIX: The underlying PorcessHandle is not guaranteed to remain valid after
+// the process dies, and it may be reused by the system, which means that it may
+// end up pointing to the wrong process.
 class BASE_EXPORT Process {
+  MOVE_ONLY_TYPE_FOR_CPP_03(Process, RValue)
+
  public:
-  Process() : process_(kNullProcessHandle) {
-  }
+  explicit Process(ProcessHandle handle = kNullProcessHandle);
 
-  explicit Process(ProcessHandle handle) : process_(handle) {
-  }
+  // Move constructor for C++03 move emulation of this type.
+  Process(RValue other);
 
-  // A handle to the current process.
+  // The destructor does not terminate the process.
+  ~Process() {}
+
+  // Move operator= for C++03 move emulation of this type.
+  Process& operator=(RValue other);
+
+  // Returns an object for the current process.
   static Process Current();
 
+  // Returns true if processes can be backgrounded.
   static bool CanBackgroundProcesses();
 
-  // Get/Set the handle for this process. The handle will be 0 if the process
-  // is no longer running.
-  ProcessHandle handle() const { return process_; }
-  void set_handle(ProcessHandle handle) {
-    process_ = handle;
-  }
+  // Returns true if this objects represents a valid process.
+  bool IsValid() const;
+
+  // Returns a handle for this process. There is no guarantee about when that
+  // handle becomes invalid because this object retains ownership.
+  ProcessHandle Handle() const;
+
+  // Returns a second object that represents this process.
+  Process Duplicate() const;
 
   // Get the PID for this process.
   ProcessId pid() const;
 
-  // Is the this process the current process.
+  // Returns true if this process is the current process.
   bool is_current() const;
 
   // Close the process handle. This will not terminate the process.
   void Close();
 
-  // Terminates the process with extreme prejudice. The given result code will
-  // be the exit code of the process. If the process has already exited, this
-  // will do nothing.
+  // Terminates the process with extreme prejudice. The given |result_code| will
+  // be the exit code of the process.
+  // NOTE: On POSIX |result_code| is ignored.
   void Terminate(int result_code);
 
   // A process is backgrounded when it's priority is lower than normal.
   // Return true if this process is backgrounded, false otherwise.
   bool IsProcessBackgrounded() const;
 
-  // Set a process as backgrounded. If value is true, the priority
-  // of the process will be lowered. If value is false, the priority
-  // of the process will be made "normal" - equivalent to default
-  // process priority.
+  // Set a process as backgrounded. If value is true, the priority of the
+  // process will be lowered. If value is false, the priority of the process
+  // will be made "normal" - equivalent to default process priority.
   // Returns true if the priority was changed, false otherwise.
   bool SetProcessBackgrounded(bool value);
 
@@ -62,7 +90,12 @@
   int GetPriority() const;
 
  private:
+#if defined(OS_WIN)
+  bool is_current_process_;
+  win::ScopedHandle process_;
+#else
   ProcessHandle process_;
+#endif
 };
 
 }  // namespace base
diff --git a/base/process/process_linux.cc b/base/process/process_linux.cc
index 2c22d26..59ee288 100644
--- a/base/process/process_linux.cc
+++ b/base/process/process_linux.cc
@@ -17,6 +17,7 @@
 namespace base {
 
 namespace {
+
 const int kForegroundPriority = 0;
 
 #if defined(OS_CHROMEOS)
@@ -62,10 +63,37 @@
 #else
 const int kBackgroundPriority = 5;
 #endif
+
+struct CheckForNicePermission {
+  CheckForNicePermission() : can_reraise_priority(false) {
+    // We won't be able to raise the priority if we don't have the right rlimit.
+    // The limit may be adjusted in /etc/security/limits.conf for PAM systems.
+    struct rlimit rlim;
+    if ((getrlimit(RLIMIT_NICE, &rlim) == 0) &&
+        (20 - kForegroundPriority) <= static_cast<int>(rlim.rlim_cur)) {
+        can_reraise_priority = true;
+    }
+  };
+
+  bool can_reraise_priority;
+};
+
+}  // namespace
+
+// static
+bool Process::CanBackgroundProcesses() {
+#if defined(OS_CHROMEOS)
+  if (cgroups.Get().enabled)
+    return true;
+#endif
+
+  static LazyInstance<CheckForNicePermission> check_for_nice_permission =
+      LAZY_INSTANCE_INITIALIZER;
+  return check_for_nice_permission.Get().can_reraise_priority;
 }
 
 bool Process::IsProcessBackgrounded() const {
-  DCHECK(process_);
+  DCHECK(IsValid());
 
 #if defined(OS_CHROMEOS)
   if (cgroups.Get().enabled) {
@@ -87,7 +115,7 @@
 }
 
 bool Process::SetProcessBackgrounded(bool background) {
-  DCHECK(process_);
+  DCHECK(IsValid());
 
 #if defined(OS_CHROMEOS)
   if (cgroups.Get().enabled) {
@@ -108,30 +136,4 @@
   return result == 0;
 }
 
-struct CheckForNicePermission {
-  CheckForNicePermission() : can_reraise_priority(false) {
-    // We won't be able to raise the priority if we don't have the right rlimit.
-    // The limit may be adjusted in /etc/security/limits.conf for PAM systems.
-    struct rlimit rlim;
-    if ((getrlimit(RLIMIT_NICE, &rlim) == 0) &&
-        (20 - kForegroundPriority) <= static_cast<int>(rlim.rlim_cur)) {
-        can_reraise_priority = true;
-    }
-  };
-
-  bool can_reraise_priority;
-};
-
-// static
-bool Process::CanBackgroundProcesses() {
-#if defined(OS_CHROMEOS)
-  if (cgroups.Get().enabled)
-    return true;
-#endif
-
-  static LazyInstance<CheckForNicePermission> check_for_nice_permission =
-      LAZY_INSTANCE_INITIALIZER;
-  return check_for_nice_permission.Get().can_reraise_priority;
-}
-
 }  // namespace base
diff --git a/base/process/process_posix.cc b/base/process/process_posix.cc
index 3d8b31d..ea8fd8c 100644
--- a/base/process/process_posix.cc
+++ b/base/process/process_posix.cc
@@ -13,15 +13,54 @@
 
 namespace base {
 
+Process::Process(ProcessHandle handle) : process_(handle) {
+  CHECK_NE(handle, GetCurrentProcessHandle());
+}
+
+Process::Process(RValue other)
+    : process_(other.object->process_) {
+  other.object->Close();
+}
+
+Process& Process::operator=(RValue other) {
+  if (this != other.object) {
+    process_ = other.object->process_;
+    other.object->Close();
+  }
+  return *this;
+}
+
 // static
 Process Process::Current() {
-  return Process(GetCurrentProcessHandle());
+  Process process;
+  process.process_ = GetCurrentProcessHandle();
+  return process.Pass();
+}
+
+#if !defined(OS_LINUX)
+// static
+bool Process::CanBackgroundProcesses() {
+  return false;
+}
+#endif  // !defined(OS_LINUX)
+
+bool Process::IsValid() const {
+  return process_ != kNullProcessHandle;
+}
+
+ProcessHandle Process::Handle() const {
+  return process_;
+}
+
+Process Process::Duplicate() const {
+  if (is_current())
+    return Current();
+
+  return Process(process_);
 }
 
 ProcessId Process::pid() const {
-  if (process_ == 0)
-    return 0;
-
+  DCHECK(IsValid());
   return GetProcId(process_);
 }
 
@@ -30,7 +69,7 @@
 }
 
 void Process::Close() {
-  process_ = 0;
+  process_ = kNullProcessHandle;
   // if the process wasn't terminated (so we waited) or the state
   // wasn't already collected w/ a wait from process_utils, we're gonna
   // end up w/ a zombie when it does finally exit.
@@ -38,8 +77,7 @@
 
 void Process::Terminate(int result_code) {
   // result_code isn't supportable.
-  if (!process_)
-    return;
+  DCHECK(IsValid());
   // We don't wait here. It's the responsibility of other code to reap the
   // child.
   KillProcess(process_, result_code, false);
@@ -48,6 +86,7 @@
 #if !defined(OS_LINUX)
 bool Process::IsProcessBackgrounded() const {
   // See SetProcessBackgrounded().
+  DCHECK(IsValid());
   return false;
 }
 
@@ -55,18 +94,13 @@
   // POSIX only allows lowering the priority of a process, so if we
   // were to lower it we wouldn't be able to raise it back to its initial
   // priority.
+  DCHECK(IsValid());
   return false;
 }
-
-// static
-bool Process::CanBackgroundProcesses() {
-  return false;
-}
-
-#endif
+#endif  // !defined(OS_LINUX)
 
 int Process::GetPriority() const {
-  DCHECK(process_);
+  DCHECK(IsValid());
   return getpriority(PRIO_PROCESS, process_);
 }
 
diff --git a/base/process/process_unittest.cc b/base/process/process_unittest.cc
new file mode 100644
index 0000000..66d6e63
--- /dev/null
+++ b/base/process/process_unittest.cc
@@ -0,0 +1,161 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/process/process.h"
+
+#include "base/process/kill.h"
+#include "base/test/multiprocess_test.h"
+#include "base/test/test_timeouts.h"
+#include "base/threading/platform_thread.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/multiprocess_func_list.h"
+
+
+namespace {
+
+#if defined(OS_WIN)
+const int kExpectedStillRunningExitCode = 0x102;
+#else
+const int kExpectedStillRunningExitCode = 0;
+#endif
+
+}  // namespace
+
+namespace base {
+
+class ProcessTest : public MultiProcessTest {
+};
+
+TEST_F(ProcessTest, Create) {
+  Process process(SpawnChild("SimpleChildProcess"));
+  ASSERT_TRUE(process.IsValid());
+  ASSERT_FALSE(process.is_current());
+  process.Close();
+  ASSERT_FALSE(process.IsValid());
+}
+
+TEST_F(ProcessTest, CreateCurrent) {
+  Process process = Process::Current();
+  ASSERT_TRUE(process.IsValid());
+  ASSERT_TRUE(process.is_current());
+  process.Close();
+  ASSERT_FALSE(process.IsValid());
+}
+
+TEST_F(ProcessTest, Move) {
+  Process process1(SpawnChild("SimpleChildProcess"));
+  EXPECT_TRUE(process1.IsValid());
+
+  Process process2;
+  EXPECT_FALSE(process2.IsValid());
+
+  process2 = process1.Pass();
+  EXPECT_TRUE(process2.IsValid());
+  EXPECT_FALSE(process1.IsValid());
+  EXPECT_FALSE(process2.is_current());
+
+  Process process3 = Process::Current();
+  process2 = process3.Pass();
+  EXPECT_TRUE(process2.is_current());
+  EXPECT_TRUE(process2.IsValid());
+  EXPECT_FALSE(process3.IsValid());
+}
+
+TEST_F(ProcessTest, Duplicate) {
+  Process process1(SpawnChild("SimpleChildProcess"));
+  ASSERT_TRUE(process1.IsValid());
+
+  Process process2 = process1.Duplicate();
+  ASSERT_TRUE(process1.IsValid());
+  ASSERT_TRUE(process2.IsValid());
+  EXPECT_EQ(process1.pid(), process2.pid());
+  EXPECT_FALSE(process1.is_current());
+  EXPECT_FALSE(process2.is_current());
+
+  process1.Close();
+  ASSERT_TRUE(process2.IsValid());
+}
+
+TEST_F(ProcessTest, DuplicateCurrent) {
+  Process process1 = Process::Current();
+  ASSERT_TRUE(process1.IsValid());
+
+  Process process2 = process1.Duplicate();
+  ASSERT_TRUE(process1.IsValid());
+  ASSERT_TRUE(process2.IsValid());
+  EXPECT_EQ(process1.pid(), process2.pid());
+  EXPECT_TRUE(process1.is_current());
+  EXPECT_TRUE(process2.is_current());
+
+  process1.Close();
+  ASSERT_TRUE(process2.IsValid());
+}
+
+MULTIPROCESS_TEST_MAIN(SleepyChildProcess) {
+  PlatformThread::Sleep(TestTimeouts::action_max_timeout());
+  return 0;
+}
+
+TEST_F(ProcessTest, Terminate) {
+  Process process(SpawnChild("SleepyChildProcess"));
+  ASSERT_TRUE(process.IsValid());
+
+  const int kDummyExitCode = 42;
+  int exit_code = kDummyExitCode;
+  EXPECT_EQ(TERMINATION_STATUS_STILL_RUNNING,
+            GetTerminationStatus(process.Handle(), &exit_code));
+  EXPECT_EQ(kExpectedStillRunningExitCode, exit_code);
+
+  exit_code = kDummyExitCode;
+  int kExpectedExitCode = 250;
+  process.Terminate(kExpectedExitCode);
+  WaitForSingleProcess(process.Handle(), TestTimeouts::action_max_timeout());
+
+  EXPECT_NE(TERMINATION_STATUS_STILL_RUNNING,
+            GetTerminationStatus(process.Handle(), &exit_code));
+#if !defined(OS_POSIX)
+  // The POSIX implementation actually ignores the exit_code.
+  EXPECT_EQ(kExpectedExitCode, exit_code);
+#endif
+}
+
+// Ensure that the priority of a process is restored correctly after
+// backgrounding and restoring.
+// Note: a platform may not be willing or able to lower the priority of
+// a process. The calls to SetProcessBackground should be noops then.
+TEST_F(ProcessTest, SetProcessBackgrounded) {
+  Process process(SpawnChild("SimpleChildProcess"));
+  int old_priority = process.GetPriority();
+#if defined(OS_WIN)
+  EXPECT_TRUE(process.SetProcessBackgrounded(true));
+  EXPECT_TRUE(process.IsProcessBackgrounded());
+  EXPECT_TRUE(process.SetProcessBackgrounded(false));
+  EXPECT_FALSE(process.IsProcessBackgrounded());
+#else
+  process.SetProcessBackgrounded(true);
+  process.SetProcessBackgrounded(false);
+#endif
+  int new_priority = process.GetPriority();
+  EXPECT_EQ(old_priority, new_priority);
+}
+
+// Same as SetProcessBackgrounded but to this very process. It uses
+// a different code path at least for Windows.
+TEST_F(ProcessTest, SetProcessBackgroundedSelf) {
+  Process process = Process::Current();
+  int old_priority = process.GetPriority();
+#if defined(OS_WIN)
+  EXPECT_TRUE(process.SetProcessBackgrounded(true));
+  EXPECT_TRUE(process.IsProcessBackgrounded());
+  EXPECT_TRUE(process.SetProcessBackgrounded(false));
+  EXPECT_FALSE(process.IsProcessBackgrounded());
+#else
+  process.SetProcessBackgrounded(true);
+  process.SetProcessBackgrounded(false);
+#endif
+  int new_priority = process.GetPriority();
+  EXPECT_EQ(old_priority, new_priority);
+}
+
+}  // namespace base
diff --git a/base/process/process_util_unittest.cc b/base/process/process_util_unittest.cc
index 9188fd3..d846d1a 100644
--- a/base/process/process_util_unittest.cc
+++ b/base/process/process_util_unittest.cc
@@ -311,45 +311,6 @@
   remove(signal_file.c_str());
 }
 
-// Ensure that the priority of a process is restored correctly after
-// backgrounding and restoring.
-// Note: a platform may not be willing or able to lower the priority of
-// a process. The calls to SetProcessBackground should be noops then.
-TEST_F(ProcessUtilTest, SetProcessBackgrounded) {
-  base::ProcessHandle handle = SpawnChild("SimpleChildProcess");
-  base::Process process(handle);
-  int old_priority = process.GetPriority();
-#if defined(OS_WIN)
-  EXPECT_TRUE(process.SetProcessBackgrounded(true));
-  EXPECT_TRUE(process.IsProcessBackgrounded());
-  EXPECT_TRUE(process.SetProcessBackgrounded(false));
-  EXPECT_FALSE(process.IsProcessBackgrounded());
-#else
-  process.SetProcessBackgrounded(true);
-  process.SetProcessBackgrounded(false);
-#endif
-  int new_priority = process.GetPriority();
-  EXPECT_EQ(old_priority, new_priority);
-}
-
-// Same as SetProcessBackgrounded but to this very process. It uses
-// a different code path at least for Windows.
-TEST_F(ProcessUtilTest, SetProcessBackgroundedSelf) {
-  base::Process process(base::Process::Current().handle());
-  int old_priority = process.GetPriority();
-#if defined(OS_WIN)
-  EXPECT_TRUE(process.SetProcessBackgrounded(true));
-  EXPECT_TRUE(process.IsProcessBackgrounded());
-  EXPECT_TRUE(process.SetProcessBackgrounded(false));
-  EXPECT_FALSE(process.IsProcessBackgrounded());
-#else
-  process.SetProcessBackgrounded(true);
-  process.SetProcessBackgrounded(false);
-#endif
-  int new_priority = process.GetPriority();
-  EXPECT_EQ(old_priority, new_priority);
-}
-
 #if defined(OS_WIN)
 // TODO(estade): if possible, port this test.
 TEST_F(ProcessUtilTest, GetAppOutput) {
diff --git a/base/process/process_win.cc b/base/process/process_win.cc
index 1217b50..05041b2 100644
--- a/base/process/process_win.cc
+++ b/base/process/process_win.cc
@@ -10,20 +10,83 @@
 
 namespace base {
 
+Process::Process(ProcessHandle handle)
+    : is_current_process_(false),
+      process_(handle) {
+  CHECK_NE(handle, ::GetCurrentProcess());
+}
+
+Process::Process(RValue other)
+    : is_current_process_(other.object->is_current_process_),
+      process_(other.object->process_.Take()) {
+  other.object->Close();
+}
+
+Process& Process::operator=(RValue other) {
+  if (this != other.object) {
+    process_.Set(other.object->process_.Take());
+    is_current_process_ = other.object->is_current_process_;
+    other.object->Close();
+  }
+  return *this;
+}
+
+// static
+Process Process::Current() {
+  Process process;
+  process.is_current_process_ = true;
+  return process.Pass();
+}
+
+// static
+bool Process::CanBackgroundProcesses() {
+  return true;
+}
+
+bool Process::IsValid() const {
+  return process_.IsValid() || is_current();
+}
+
+ProcessHandle Process::Handle() const {
+  return is_current_process_ ? GetCurrentProcess() : process_.Get();
+}
+
+Process Process::Duplicate() const {
+  if (is_current())
+    return Current();
+
+  ProcessHandle out_handle;
+  if (!IsValid() || !::DuplicateHandle(GetCurrentProcess(),
+                                       Handle(),
+                                       GetCurrentProcess(),
+                                       &out_handle,
+                                       0,
+                                       FALSE,
+                                       DUPLICATE_SAME_ACCESS)) {
+    return Process();
+  }
+  return Process(out_handle);
+}
+
+ProcessId Process::pid() const {
+  DCHECK(IsValid());
+  return GetProcId(Handle());
+}
+
+bool Process::is_current() const {
+  return is_current_process_;
+}
+
 void Process::Close() {
-  if (!process_)
+  is_current_process_ = false;
+  if (!process_.IsValid())
     return;
 
-  // Don't call CloseHandle on a pseudo-handle.
-  if (process_ != ::GetCurrentProcess())
-    ::CloseHandle(process_);
-
-  process_ = NULL;
+  process_.Close();
 }
 
 void Process::Terminate(int result_code) {
-  if (!process_)
-    return;
+  DCHECK(IsValid());
 
   // Call NtTerminateProcess directly, without going through the import table,
   // which might have been hooked with a buggy replacement by third party
@@ -32,12 +95,11 @@
   typedef UINT (WINAPI *TerminateProcessPtr)(HANDLE handle, UINT code);
   TerminateProcessPtr terminate_process = reinterpret_cast<TerminateProcessPtr>(
       GetProcAddress(module, "NtTerminateProcess"));
-  terminate_process(process_, result_code);
+  terminate_process(Handle(), result_code);
 }
 
 bool Process::IsProcessBackgrounded() const {
-  if (!process_)
-    return false;  // Failure case.
+  DCHECK(IsValid());
   DWORD priority = GetPriority();
   if (priority == 0)
     return false;  // Failure case.
@@ -46,47 +108,24 @@
 }
 
 bool Process::SetProcessBackgrounded(bool value) {
-  if (!process_)
-    return false;
+  DCHECK(IsValid());
   // Vista and above introduce a real background mode, which not only
   // sets the priority class on the threads but also on the IO generated
   // by it. Unfortunately it can only be set for the calling process.
   DWORD priority;
-  if ((base::win::GetVersion() >= base::win::VERSION_VISTA) &&
-      (process_ == ::GetCurrentProcess())) {
+  if ((base::win::GetVersion() >= base::win::VERSION_VISTA) && (is_current())) {
     priority = value ? PROCESS_MODE_BACKGROUND_BEGIN :
                        PROCESS_MODE_BACKGROUND_END;
   } else {
     priority = value ? BELOW_NORMAL_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS;
   }
 
-  return (::SetPriorityClass(process_, priority) != 0);
-}
-
-ProcessId Process::pid() const {
-  if (process_ == 0)
-    return 0;
-
-  return GetProcId(process_);
-}
-
-bool Process::is_current() const {
-  return process_ == GetCurrentProcess();
-}
-
-// static
-Process Process::Current() {
-  return Process(::GetCurrentProcess());
-}
-
-// static
-bool Process::CanBackgroundProcesses() {
-  return true;
+  return (::SetPriorityClass(Handle(), priority) != 0);
 }
 
 int Process::GetPriority() const {
-  DCHECK(process_);
-  return ::GetPriorityClass(process_);
+  DCHECK(IsValid());
+  return ::GetPriorityClass(Handle());
 }
 
 }  // namespace base
diff --git a/base/strings/safe_sprintf.cc b/base/strings/safe_sprintf.cc
index 1c92718..5b57563 100644
--- a/base/strings/safe_sprintf.cc
+++ b/base/strings/safe_sprintf.cc
@@ -176,8 +176,7 @@
   // overflowed |size_|) at any time during padding.
   inline bool Pad(char pad, size_t padding, size_t len) {
     DEBUG_CHECK(pad);
-    DEBUG_CHECK(padding >= 0 && padding <= kSSizeMax);
-    DEBUG_CHECK(len >= 0);
+    DEBUG_CHECK(padding <= kSSizeMax);
     for (; padding > len; --padding) {
       if (!Out(pad)) {
         if (--padding) {
@@ -283,7 +282,6 @@
   DEBUG_CHECK(base <= 16);
   DEBUG_CHECK(!sign || base == 10);
   DEBUG_CHECK(pad == '0' || pad == ' ');
-  DEBUG_CHECK(padding >= 0);
   DEBUG_CHECK(padding <= kSSizeMax);
   DEBUG_CHECK(!(sign && prefix && *prefix));
 
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index 3653c96..39f32a7 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -15,22 +15,16 @@
 #define ENABLE_THREAD_RESTRICTIONS 0
 #endif
 
-class AcceleratedPresenter;
 class BrowserProcessImpl;
 class HistogramSynchronizer;
 class NativeBackendKWallet;
 class ScopedAllowWaitForLegacyWebViewApi;
 class TestingAutomationProvider;
 
-namespace browser_sync {
-class NonFrontendDataTypeController;
-class UIModelWorker;
-}
 namespace cc {
 class CompletionEvent;
 }
 namespace chromeos {
-class AudioMixerAlsa;
 class BlockingMethodCaller;
 namespace system {
 class StatisticsProviderImpl;
@@ -44,7 +38,6 @@
 class BrowserGpuMemoryBufferManager;
 class BrowserShutdownProfileDumper;
 class BrowserTestBase;
-class GLHelper;
 class GpuChannelHost;
 class NestedMessagePumpAndroid;
 class RenderWidgetResizeHelper;
@@ -58,20 +51,12 @@
 class BackendImpl;
 class InFlightIO;
 }
-namespace media {
-class AudioOutputController;
-}
-namespace metrics {
-class MetricsService;
-}
 namespace mojo {
 namespace common {
 class WatcherThreadManager;
 }
 }
 namespace net {
-class FileStreamPosix;
-class FileStreamWin;
 namespace internal {
 class AddressTrackerLinux;
 }
@@ -206,29 +191,20 @@
 
   // END ALLOWED USAGE.
   // BEGIN USAGE THAT NEEDS TO BE FIXED.
-  friend class ::chromeos::AudioMixerAlsa;        // http://crbug.com/125206
   friend class ::chromeos::BlockingMethodCaller;  // http://crbug.com/125360
   friend class ::chromeos::system::StatisticsProviderImpl;  // http://crbug.com/125385
-  friend class browser_sync::NonFrontendDataTypeController;  // http://crbug.com/19757
-  friend class browser_sync::UIModelWorker;       // http://crbug.com/19757
   friend class chrome_browser_net::Predictor;     // http://crbug.com/78451
   friend class
       content::BrowserGpuChannelHostFactory;      // http://crbug.com/125248
   friend class
       content::BrowserGpuMemoryBufferManager;     // http://crbug.com/420368
-  friend class content::GLHelper;                 // http://crbug.com/125415
   friend class content::GpuChannelHost;           // http://crbug.com/125264
   friend class content::TextInputClientMac;       // http://crbug.com/121917
   friend class dbus::Bus;                         // http://crbug.com/125222
   friend class disk_cache::BackendImpl;           // http://crbug.com/74623
   friend class disk_cache::InFlightIO;            // http://crbug.com/74623
-  friend class media::AudioOutputController;      // http://crbug.com/120973
-  friend class net::FileStreamPosix;              // http://crbug.com/115067
-  friend class net::FileStreamWin;                // http://crbug.com/115067
   friend class net::internal::AddressTrackerLinux;  // http://crbug.com/125097
-  friend class ::AcceleratedPresenter;            // http://crbug.com/125391
   friend class ::BrowserProcessImpl;              // http://crbug.com/125207
-  friend class metrics::MetricsService;           // http://crbug.com/124954
   friend class ::NativeBackendKWallet;            // http://crbug.com/125331
   // END USAGE THAT NEEDS TO BE FIXED.
 
diff --git a/base/tuple_unittest.cc b/base/tuple_unittest.cc
index 402394c..8d620de 100644
--- a/base/tuple_unittest.cc
+++ b/base/tuple_unittest.cc
@@ -30,7 +30,8 @@
 }  // namespace
 
 TEST(TupleTest, Basic) {
-  Tuple0 t0 ALLOW_UNUSED = MakeTuple();
+  Tuple0 t0 = MakeTuple();
+  ALLOW_UNUSED_LOCAL(t0);
   Tuple1<int> t1(1);
   Tuple2<int, const char*> t2 = MakeTuple(1, static_cast<const char*>("wee"));
   Tuple3<int, int, int> t3(1, 2, 3);
diff --git a/base/win/event_trace_consumer_unittest.cc b/base/win/event_trace_consumer_unittest.cc
index 92e91b9..3043152 100644
--- a/base/win/event_trace_consumer_unittest.cc
+++ b/base/win/event_trace_consumer_unittest.cc
@@ -14,7 +14,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
-#include "base/process/process.h"
+#include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
 #include "base/win/event_trace_controller.h"
 #include "base/win/event_trace_provider.h"
@@ -79,8 +79,7 @@
 class EtwTraceConsumerBaseTest: public testing::Test {
  public:
   EtwTraceConsumerBaseTest()
-      : session_name_(StringPrintf(L"TestSession-%d",
-                                   Process::Current().pid())) {
+      : session_name_(StringPrintf(L"TestSession-%d", GetCurrentProcId())) {
   }
 
   virtual void SetUp() {
diff --git a/base/win/event_trace_controller_unittest.cc b/base/win/event_trace_controller_unittest.cc
index 8ca9cf5..be11128 100644
--- a/base/win/event_trace_controller_unittest.cc
+++ b/base/win/event_trace_controller_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
-#include "base/process/process.h"
+#include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
 #include "base/sys_info.h"
 #include "base/win/event_trace_controller.h"
@@ -110,8 +110,7 @@
 class EtwTraceControllerTest : public testing::Test {
  public:
   EtwTraceControllerTest()
-      : session_name_(
-            StringPrintf(L"TestSession-%d", Process::Current().pid())) {
+      : session_name_(StringPrintf(L"TestSession-%d", GetCurrentProcId())) {
   }
 
   virtual void SetUp() {
diff --git a/base/win/registry.cc b/base/win/registry.cc
index e8fb892..23ad12c 100644
--- a/base/win/registry.cc
+++ b/base/win/registry.cc
@@ -34,23 +34,67 @@
 
 }  // namespace
 
-// RegKey ----------------------------------------------------------------------
+// Watches for modifications to a key.
+class RegKey::Watcher : public ObjectWatcher::Delegate {
+ public:
+  explicit Watcher(RegKey* owner) : owner_(owner) {}
+  ~Watcher() {}
 
-RegKey::RegKey()
-    : key_(NULL),
-      watch_event_(0),
-      wow64access_(0) {
+  bool StartWatching(HKEY key, const ChangeCallback& callback);
+
+  // Implementation of ObjectWatcher::Delegate.
+  void OnObjectSignaled(HANDLE object) override {
+    DCHECK(watch_event_.IsValid() && watch_event_.Get() == object);
+    ChangeCallback callback = callback_;
+    callback_.Reset();
+    callback.Run();
+  }
+
+ private:
+  RegKey* owner_;
+  ScopedHandle watch_event_;
+  ObjectWatcher object_watcher_;
+  ChangeCallback callback_;
+  DISALLOW_COPY_AND_ASSIGN(Watcher);
+};
+
+bool RegKey::Watcher::StartWatching(HKEY key, const ChangeCallback& callback) {
+  DCHECK(key);
+  DCHECK(callback_.is_null());
+
+  if (!watch_event_.IsValid())
+    watch_event_.Set(CreateEvent(NULL, TRUE, FALSE, NULL));
+
+  if (!watch_event_.IsValid())
+    return false;
+
+  DWORD filter = REG_NOTIFY_CHANGE_NAME |
+                 REG_NOTIFY_CHANGE_ATTRIBUTES |
+                 REG_NOTIFY_CHANGE_LAST_SET |
+                 REG_NOTIFY_CHANGE_SECURITY;
+
+  // Watch the registry key for a change of value.
+  LONG result = RegNotifyChangeKeyValue(key, TRUE, filter, watch_event_.Get(),
+                                        TRUE);
+  if (result != ERROR_SUCCESS) {
+    watch_event_.Close();
+    return false;
+  }
+
+  callback_ = callback;
+  return object_watcher_.StartWatching(watch_event_.Get(), this);
 }
 
-RegKey::RegKey(HKEY key)
-    : key_(key),
-      watch_event_(0),
-      wow64access_(0) {
+// RegKey ----------------------------------------------------------------------
+
+RegKey::RegKey() : key_(NULL), wow64access_(0) {
+}
+
+RegKey::RegKey(HKEY key) : key_(key), wow64access_(0) {
 }
 
 RegKey::RegKey(HKEY rootkey, const wchar_t* subkey, REGSAM access)
     : key_(NULL),
-      watch_event_(0),
       wow64access_(0) {
   if (rootkey) {
     if (access & (KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_CREATE_LINK))
@@ -150,7 +194,6 @@
 }
 
 void RegKey::Close() {
-  StopWatching();
   if (key_) {
     ::RegCloseKey(key_);
     key_ = NULL;
@@ -168,7 +211,6 @@
 
 HKEY RegKey::Take() {
   DCHECK(wow64access_ == 0);
-  StopWatching();
   HKEY key = key_;
   key_ = NULL;
   return key;
@@ -367,44 +409,14 @@
   return result;
 }
 
-LONG RegKey::StartWatching() {
-  DCHECK(key_);
-  if (!watch_event_)
-    watch_event_ = CreateEvent(NULL, TRUE, FALSE, NULL);
+bool RegKey::StartWatching(const ChangeCallback& callback) {
+  if (!key_watcher_)
+    key_watcher_.reset(new Watcher(this));
 
-  DWORD filter = REG_NOTIFY_CHANGE_NAME |
-                 REG_NOTIFY_CHANGE_ATTRIBUTES |
-                 REG_NOTIFY_CHANGE_LAST_SET |
-                 REG_NOTIFY_CHANGE_SECURITY;
+  if (!key_watcher_.get()->StartWatching(key_, callback))
+    return false;
 
-  // Watch the registry key for a change of value.
-  LONG result = RegNotifyChangeKeyValue(key_, TRUE, filter, watch_event_, TRUE);
-  if (result != ERROR_SUCCESS) {
-    CloseHandle(watch_event_);
-    watch_event_ = 0;
-  }
-
-  return result;
-}
-
-bool RegKey::HasChanged() {
-  if (watch_event_) {
-    if (WaitForSingleObject(watch_event_, 0) == WAIT_OBJECT_0) {
-      StartWatching();
-      return true;
-    }
-  }
-  return false;
-}
-
-LONG RegKey::StopWatching() {
-  LONG result = ERROR_INVALID_HANDLE;
-  if (watch_event_) {
-    CloseHandle(watch_event_);
-    watch_event_ = 0;
-    result = ERROR_SUCCESS;
-  }
-  return result;
+  return true;
 }
 
 // static
diff --git a/base/win/registry.h b/base/win/registry.h
index e5524b8..c3e015b 100644
--- a/base/win/registry.h
+++ b/base/win/registry.h
@@ -12,6 +12,8 @@
 #include "base/base_export.h"
 #include "base/basictypes.h"
 #include "base/stl_util.h"
+#include "base/win/object_watcher.h"
+#include "base/win/scoped_handle.h"
 
 namespace base {
 namespace win {
@@ -25,6 +27,9 @@
 // are not touched in case of failure.
 class BASE_EXPORT RegKey {
  public:
+  // Called from the MessageLoop when the key changes.
+  typedef base::Callback<void()> ChangeCallback;
+
   RegKey();
   explicit RegKey(HKEY key);
   RegKey(HKEY rootkey, const wchar_t* subkey, REGSAM access);
@@ -120,22 +125,16 @@
 
   // Starts watching the key to see if any of its values have changed.
   // The key must have been opened with the KEY_NOTIFY access privilege.
-  LONG StartWatching();
+  // Returns true on success.
+  // To stop watching, delete this RegKey object. To continue watching the
+  // object after the callback is invoked, call StartWatching again.
+  bool StartWatching(const ChangeCallback& callback);
 
-  // If StartWatching hasn't been called, always returns false.
-  // Otherwise, returns true if anything under the key has changed.
-  // This can't be const because the |watch_event_| may be refreshed.
-  bool HasChanged();
-
-  // Will automatically be called by destructor if not manually called
-  // beforehand.  Returns true if it was watching, false otherwise.
-  LONG StopWatching();
-
-  inline bool IsWatching() const { return watch_event_ != 0; }
-  HANDLE watch_event() const { return watch_event_; }
   HKEY Handle() const { return key_; }
 
  private:
+  class Watcher;
+
   // Calls RegDeleteKeyEx on supported platforms, alternatively falls back to
   // RegDeleteKey.
   static LONG RegDeleteKeyExWrapper(HKEY hKey,
@@ -147,9 +146,10 @@
   static LONG RegDelRecurse(HKEY root_key,
                             const std::wstring& name,
                             REGSAM access);
+
   HKEY key_;  // The registry key being iterated.
-  HANDLE watch_event_;
   REGSAM wow64access_;
+  scoped_ptr<Watcher> key_watcher_;
 
   DISALLOW_COPY_AND_ASSIGN(RegKey);
 };
diff --git a/base/win/registry_unittest.cc b/base/win/registry_unittest.cc
index d2610ef..6548474 100644
--- a/base/win/registry_unittest.cc
+++ b/base/win/registry_unittest.cc
@@ -7,7 +7,10 @@
 #include <cstring>
 #include <vector>
 
+#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/win/windows_version.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -349,6 +352,68 @@
   ASSERT_EQ(ERROR_SUCCESS, key.DeleteKey(L"foo"));
 }
 
+class TestChangeDelegate {
+ public:
+   TestChangeDelegate() : called_(false) {}
+   ~TestChangeDelegate() {}
+
+   void OnKeyChanged() {
+     MessageLoop::current()->QuitWhenIdle();
+     called_ = true;
+   }
+
+   bool WasCalled() {
+     bool was_called = called_;
+     called_ = false;
+     return was_called;
+   }
+
+ private:
+  bool called_;
+};
+
+TEST_F(RegistryTest, ChangeCallback) {
+  RegKey key;
+  TestChangeDelegate delegate;
+  MessageLoop message_loop;
+
+  std::wstring foo_key(kRootKey);
+  foo_key += L"\\Foo";
+  ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, foo_key.c_str(),
+                                      KEY_READ));
+
+  ASSERT_TRUE(key.StartWatching(Bind(&TestChangeDelegate::OnKeyChanged,
+                                     Unretained(&delegate))));
+  EXPECT_FALSE(delegate.WasCalled());
+
+  // Make some change.
+  RegKey key2;
+  ASSERT_EQ(ERROR_SUCCESS, key2.Open(HKEY_CURRENT_USER, foo_key.c_str(),
+                                      KEY_READ | KEY_SET_VALUE));
+  ASSERT_TRUE(key2.Valid());
+  EXPECT_EQ(ERROR_SUCCESS, key2.WriteValue(L"name", L"data"));
+
+  // Allow delivery of the notification.
+  EXPECT_FALSE(delegate.WasCalled());
+  base::RunLoop().Run();
+
+  ASSERT_TRUE(delegate.WasCalled());
+  EXPECT_FALSE(delegate.WasCalled());
+
+  ASSERT_TRUE(key.StartWatching(Bind(&TestChangeDelegate::OnKeyChanged,
+                                     Unretained(&delegate))));
+
+  // Change something else.
+  EXPECT_EQ(ERROR_SUCCESS, key2.WriteValue(L"name2", L"data2"));
+  base::RunLoop().Run();
+  ASSERT_TRUE(delegate.WasCalled());
+
+  ASSERT_TRUE(key.StartWatching(Bind(&TestChangeDelegate::OnKeyChanged,
+                                     Unretained(&delegate))));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(delegate.WasCalled());
+}
+
 }  // namespace
 
 }  // namespace win
diff --git a/build/android/pylib/device/commands/commands.gyp b/build/android/pylib/device/commands/commands.gyp
index d173e39..06d5c9c 100644
--- a/build/android/pylib/device/commands/commands.gyp
+++ b/build/android/pylib/device/commands/commands.gyp
@@ -8,6 +8,7 @@
       'target_name': 'chromium_commands',
       'type': 'none',
       'variables': {
+        'add_to_dependents_classpaths': 0,
         'java_in_dir': ['java'],
       },
       'includes': [
diff --git a/build/common.gypi b/build/common.gypi
index 34000ed..e9e8a3e 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -1762,7 +1762,6 @@
 
         # When building as part of the Android system, use system libraries
         # where possible to reduce ROM size.
-        'use_system_icu%': '<(android_webview_build)',
         'use_system_stlport%': '<(android_webview_build)',
 
         # Copy it out one scope.
@@ -2562,9 +2561,6 @@
       ['use_cras==1', {
         'defines': ['USE_CRAS=1'],
       }],
-      ['use_glib==1', {
-        'defines': ['USE_GLIB=1'],
-      }],
       ['use_ozone==1', {
         'defines': ['USE_OZONE=1'],
       }],
@@ -2923,6 +2919,9 @@
           'USE_OPENSSL_CERTS=1',
         ],
       }],
+      ['<(use_glib)==1 and >(nacl_untrusted_build)==0', {
+        'defines': ['USE_GLIB=1'],
+      }],
       ['<(use_nss)==1 and >(nacl_untrusted_build)==0', {
         'defines': ['USE_NSS=1'],
       }],
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index 7994dd7..890d33e 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -71,6 +71,16 @@
     # toolchains.
     cros_use_custom_toolchain = false
   }
+
+  # TODO(cjhopman): Make target_arch work for all platforms.
+
+  # Architecture of the target device. For Android builds, this will be equal to
+  # the cpu_arch of the default toolchain. When checking the CPU architecture
+  # for source files and build dependencies you should almost alway use cpu_arch
+  # instead. cpu_arch is the architecture of the current toolchain and allows
+  # cross-compiles (compiling the same target for multiple toolchains in the
+  # same build) to work.
+  target_arch = "arm"
 }
 
 # =============================================================================
@@ -174,6 +184,14 @@
   }
 }
 
+if (is_android) {
+  # TODO(cjhopman): enable this assert once bots are updated to not set
+  # cpu_arch.
+  #assert(cpu_arch == build_cpu_arch, "Android device target architecture should
+  #    be set with 'target_arch', not 'cpu_arch'")
+  cpu_arch = target_arch
+}
+
 # =============================================================================
 # SOURCES FILTERS
 # =============================================================================
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 344202c..af493bd 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -769,8 +769,26 @@
 
   _native_libs = []
   if (defined(invoker.native_libs)) {
+    _use_chromium_linker = false
+    if (defined(invoker.use_chromium_linker)) {
+      _use_chromium_linker = invoker.use_chromium_linker
+    }
+
+    # TODO(GYP) add "|| profiling_full_stack_frames
+    # Only enable the chromium linker on regular builds, since the
+    # component build crashes on Android 4.4. See b/11379966
+    if (is_component_build || cpu_arch == "arm64" || cpu_arch == "x64") {
+      _use_chromium_linker = false
+    }
+
     _native_libs = invoker.native_libs
     _native_libs_dir = base_path + "/libs"
+
+    if (_use_chromium_linker) {
+      _native_libs += [
+        "$root_build_dir/lib.stripped/libchromium_android_linker.so"
+      ]
+    }
   }
 
   _keystore_path = android_default_keystore_path
@@ -815,12 +833,14 @@
   _srcjar_deps += [":${_template_name}__process_resources"]
 
   if (_native_libs != []) {
-    _use_chromium_linker = false
     _enable_chromium_linker_tests = false
+    if (defined(invoker.enable_chromium_linker_tests)) {
+      _enable_chromium_linker_tests = invoker.enable_chromium_linker_tests
+    }
+
     _load_library_from_apk = false
     _native_lib_version_name = ""
 
-
     java_cpp_template("${_template_name}__native_libraries_java") {
       package_name = "org/chromium/base/library_loader"
       sources = [
@@ -836,7 +856,7 @@
         "NATIVE_LIBRARIES_VERSION_NUMBER=\"$_native_lib_version_name\"",
       ]
       if (_use_chromium_linker) {
-        defines += ["ENABLED_CHROMIUM_LINKER"]
+        defines += ["ENABLE_CHROMIUM_LINKER"]
       }
       if (_load_library_from_apk) {
         defines += ["ENABLE_CHROMIUM_LINKER_LIBRARY_IN_ZIP_FILE"]
diff --git a/build/install-chroot.sh b/build/install-chroot.sh
index ae97d53..e2d558b 100755
--- a/build/install-chroot.sh
+++ b/build/install-chroot.sh
@@ -659,7 +659,7 @@
   readlinepkg=$(sudo "/usr/local/bin/${target%bit}" sh -c \
     'apt-cache search "lib64readline.\$" | sort | tail -n 1 | cut -d " " -f 1')
   sudo "/usr/local/bin/${target%bit}" apt-get -y install                       \
-    lib64expat1 lib64ncurses5 ${readlinepkg} lib64z1
+    lib64expat1 lib64ncurses5 ${readlinepkg} lib64z1 lib64stdc++6
   dep=
   for i in binutils gdb; do
     [ -d /usr/share/doc/"$i" ] || dep="$dep $i"
diff --git a/build/java.gypi b/build/java.gypi
index bf6f56c..af0bf0e 100644
--- a/build/java.gypi
+++ b/build/java.gypi
@@ -19,6 +19,8 @@
 #  java_in_dir - The top-level java directory. The src should be in
 #    <java_in_dir>/src.
 # Optional/automatic variables:
+#  add_to_dependents_classpaths - Set to 0 if the resulting jar file should not
+#    be added to its dependents' classpaths.
 #  additional_input_paths - These paths will be included in the 'inputs' list to
 #    ensure that this target is rebuilt when one of these paths changes.
 #  additional_src_dirs - Additional directories with .java files to be compiled
@@ -49,6 +51,7 @@
     '<(DEPTH)/build/android/setup.gyp:build_output_dirs'
   ],
   'variables': {
+    'add_to_dependents_classpaths%': 1,
     'android_jar': '<(android_sdk)/android.jar',
     'input_jars_paths': [ '<(android_jar)' ],
     'additional_src_dirs': [],
@@ -97,15 +100,17 @@
     'emma_instrument': '<(emma_instrument)',
     'javac_jar_path': '<(javac_jar_path)',
   },
-  # This all_dependent_settings is used for java targets only. This will add the
-  # jar path to the classpath of dependent java targets.
-  'all_dependent_settings': {
-    'variables': {
-      'input_jars_paths': ['<(jar_final_path)'],
-      'library_dexed_jars_paths': ['<(dex_path)'],
-    },
-  },
   'conditions': [
+    ['add_to_dependents_classpaths == 1', {
+      # This all_dependent_settings is used for java targets only. This will add the
+      # jar path to the classpath of dependent java targets.
+      'all_dependent_settings': {
+        'variables': {
+          'input_jars_paths': ['<(jar_final_path)'],
+          'library_dexed_jars_paths': ['<(dex_path)'],
+        },
+      },
+    }],
     ['has_java_resources == 1', {
       'variables': {
         'res_dir': '<(java_in_dir)/res',
diff --git a/build/mac/asan.gyp b/build/mac/asan.gyp
index fabe910..5231681 100644
--- a/build/mac/asan.gyp
+++ b/build/mac/asan.gyp
@@ -4,7 +4,7 @@
 
 {
    'targets': [
-     {   
+     {
        'target_name': 'asan_dynamic_runtime',
        'type': 'none',
        'variables': {
@@ -48,6 +48,6 @@
            ],
          }],
        ],
-     },  
-   ],  
+     },
+   ],
 }
diff --git a/cc/animation/animation.cc b/cc/animation/animation.cc
index 5e4bc1e..e49cf1e 100644
--- a/cc/animation/animation.cc
+++ b/cc/animation/animation.cc
@@ -90,15 +90,14 @@
   char name_buffer[256];
   base::snprintf(name_buffer,
                  sizeof(name_buffer),
-                 "%s-%d%s",
+                 "%s-%d",
                  s_targetPropertyNames[target_property_],
-                 group_,
-                 is_controlling_instance_ ? "(impl)" : "");
+                 group_);
 
   bool is_waiting_to_start = run_state_ == WaitingForTargetAvailability ||
                              run_state_ == Starting;
 
-  if (is_waiting_to_start && run_state == Running) {
+  if (is_controlling_instance_ && is_waiting_to_start && run_state == Running) {
     TRACE_EVENT_ASYNC_BEGIN1(
         "cc", "Animation", this, "Name", TRACE_STR_COPY(name_buffer));
   }
@@ -115,7 +114,7 @@
 
   const char* new_run_state_name = s_runStateNames[run_state];
 
-  if (!was_finished && is_finished())
+  if (is_controlling_instance_ && !was_finished && is_finished())
     TRACE_EVENT_ASYNC_END0("cc", "Animation", this);
 
   char state_buffer[256];
diff --git a/cc/debug/rasterize_and_record_benchmark.cc b/cc/debug/rasterize_and_record_benchmark.cc
index e83c118..7a1319d 100644
--- a/cc/debug/rasterize_and_record_benchmark.cc
+++ b/cc/debug/rasterize_and_record_benchmark.cc
@@ -26,7 +26,9 @@
 const int kDefaultRecordRepeatCount = 100;
 
 const char* kModeSuffixes[Picture::RECORDING_MODE_COUNT] = {
-    "", "_sk_null_canvas", "_painting_disabled", "_skrecord"};
+    "",
+    "_sk_null_canvas",
+    "_painting_disabled"};
 
 }  // namespace
 
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc
index 7573471..aee140f 100644
--- a/cc/layers/picture_layer.cc
+++ b/cc/layers/picture_layer.cc
@@ -129,7 +129,7 @@
                                          layer_size,
                                          visible_layer_rect,
                                          update_source_frame_number_,
-                                         RecordingMode(),
+                                         Picture::RECORD_NORMALLY,
                                          rendering_stats_instrumentation());
   last_updated_visible_content_rect_ = visible_content_rect();
 
@@ -148,17 +148,6 @@
   pile_->set_is_mask(is_mask);
 }
 
-Picture::RecordingMode PictureLayer::RecordingMode() const {
-  switch (layer_tree_host()->settings().recording_mode) {
-    case LayerTreeSettings::RecordNormally:
-      return Picture::RECORD_NORMALLY;
-    case LayerTreeSettings::RecordWithSkRecord:
-      return Picture::RECORD_WITH_SKRECORD;
-  }
-  NOTREACHED();
-  return Picture::RECORD_NORMALLY;
-}
-
 bool PictureLayer::SupportsLCDText() const {
   return true;
 }
diff --git a/cc/layers/picture_layer.h b/cc/layers/picture_layer.h
index e0f6d15..2108fbe 100644
--- a/cc/layers/picture_layer.h
+++ b/cc/layers/picture_layer.h
@@ -40,8 +40,6 @@
 
   ContentLayerClient* client() { return client_; }
 
-  Picture::RecordingMode RecordingMode() const;
-
   PicturePile* GetPicturePileForTesting() const { return pile_.get(); }
 
  protected:
diff --git a/cc/layers/picture_layer_unittest.cc b/cc/layers/picture_layer_unittest.cc
index 0e3d8fa..545b332 100644
--- a/cc/layers/picture_layer_unittest.cc
+++ b/cc/layers/picture_layer_unittest.cc
@@ -84,22 +84,5 @@
   EXPECT_FALSE(layer->IsSuitableForGpuRasterization());
 }
 
-TEST(PictureLayerTest, RecordingModes) {
-  MockContentLayerClient client;
-  scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client);
-
-  LayerTreeSettings settings;
-  FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
-  scoped_ptr<FakeLayerTreeHost> host =
-      FakeLayerTreeHost::Create(&host_client, settings);
-  host->SetRootLayer(layer);
-  EXPECT_EQ(Picture::RECORD_NORMALLY, layer->RecordingMode());
-
-  settings.recording_mode = LayerTreeSettings::RecordWithSkRecord;
-  host = FakeLayerTreeHost::Create(&host_client, settings);
-  host->SetRootLayer(layer);
-  EXPECT_EQ(Picture::RECORD_WITH_SKRECORD, layer->RecordingMode());
-}
-
 }  // namespace
 }  // namespace cc
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index 308f084..1d09307 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -105,14 +105,17 @@
 #define QUAD_DATA \
     gfx::Rect quad_rect(30, 40, 50, 60); \
     gfx::Rect quad_visible_rect(40, 50, 30, 20); \
-    gfx::Rect ALLOW_UNUSED quad_opaque_rect(60, 55, 10, 10); \
-    bool ALLOW_UNUSED needs_blending = true;
+    gfx::Rect quad_opaque_rect( 60, 55, 10, 10); \
+    ALLOW_UNUSED_LOCAL(quad_opaque_rect); \
+    bool needs_blending = true; \
+    ALLOW_UNUSED_LOCAL(needs_blending);
 
 #define SETUP_AND_COPY_QUAD_NEW(Type, quad)                                \
   DrawQuad* copy_new =                                                     \
       render_pass->CopyFromAndAppendDrawQuad(quad_new, copy_shared_state); \
   CompareDrawQuad(quad_new, copy_new, copy_shared_state);                  \
-  const Type* ALLOW_UNUSED copy_quad = Type::MaterialCast(copy_new);
+  const Type* copy_quad = Type::MaterialCast(copy_new);                    \
+  ALLOW_UNUSED_LOCAL(copy_quad);
 
 #define SETUP_AND_COPY_QUAD_ALL(Type, quad)                                \
   DrawQuad* copy_all =                                                     \
@@ -124,7 +127,8 @@
   DrawQuad* copy_new = render_pass->CopyFromAndAppendRenderPassDrawQuad( \
       quad_new, copy_shared_state, a);                                   \
   CompareDrawQuad(quad_new, copy_new, copy_shared_state);                \
-  const Type* ALLOW_UNUSED copy_quad = Type::MaterialCast(copy_new);
+  const Type* copy_quad = Type::MaterialCast(copy_new);                  \
+  ALLOW_UNUSED_LOCAL(copy_quad);
 
 #define SETUP_AND_COPY_QUAD_ALL_RP(Type, quad, a)                        \
   DrawQuad* copy_all = render_pass->CopyFromAndAppendRenderPassDrawQuad( \
diff --git a/cc/resources/picture.cc b/cc/resources/picture.cc
index 6fa5abc..d9b10be 100644
--- a/cc/resources/picture.cc
+++ b/cc/resources/picture.cc
@@ -214,8 +214,6 @@
   SkTileGridFactory factory(tile_grid_info);
   SkPictureRecorder recorder;
 
-  scoped_ptr<EXPERIMENTAL::SkRecording> recording;
-
   skia::RefPtr<SkCanvas> canvas;
   canvas = skia::SharePtr(recorder.beginRecording(
       layer_rect_.width(), layer_rect_.height(), &factory));
@@ -238,11 +236,6 @@
       canvas = skia::AdoptRef(SkCreateNullCanvas());
       graphics_context_status = ContentLayerClient::GRAPHICS_CONTEXT_DISABLED;
       break;
-    case RECORD_WITH_SKRECORD:
-      recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(),
-                                                    layer_rect_.height()));
-      canvas = skia::SharePtr(recording->canvas());
-      break;
     default:
       NOTREACHED();
   }
@@ -263,13 +256,6 @@
   picture_ = skia::AdoptRef(recorder.endRecording());
   DCHECK(picture_);
 
-  if (recording) {
-    // SkRecording requires it's the only one holding onto canvas before we
-    // may call releasePlayback().  (This helps enforce thread-safety.)
-    canvas.clear();
-    playback_.reset(recording->releasePlayback());
-  }
-
   EmitTraceSnapshot();
 }
 
@@ -348,9 +334,7 @@
 
   canvas->scale(contents_scale, contents_scale);
   canvas->translate(layer_rect_.x(), layer_rect_.y());
-  if (playback_) {
-    playback_->draw(canvas);
-  } else if (callback) {
+  if (callback) {
     // If we have a callback, we need to call |draw()|, |drawPicture()| doesn't
     // take a callback.  This is used by |AnalysisCanvas| to early out.
     picture_->draw(canvas, callback);
@@ -371,12 +355,7 @@
 void Picture::Replay(SkCanvas* canvas) {
   TRACE_EVENT_BEGIN0("cc", "Picture::Replay");
   DCHECK(picture_);
-
-  if (playback_) {
-    playback_->draw(canvas);
-  } else {
-    picture_->draw(canvas);
-  }
+  picture_->draw(canvas);
   SkIRect bounds;
   canvas->getClipDeviceBounds(&bounds);
   TRACE_EVENT_END1("cc", "Picture::Replay",
@@ -385,21 +364,7 @@
 
 scoped_ptr<base::Value> Picture::AsValue() const {
   SkDynamicMemoryWStream stream;
-
-  if (playback_) {
-    // SkPlayback can't serialize itself, so re-record into an SkPicture.
-    SkPictureRecorder recorder;
-    skia::RefPtr<SkCanvas> canvas(skia::SharePtr(recorder.beginRecording(
-        layer_rect_.width(),
-        layer_rect_.height(),
-        NULL)));  // Default (no) bounding-box hierarchy is fastest.
-    playback_->draw(canvas.get());
-    skia::RefPtr<SkPicture> picture(skia::AdoptRef(recorder.endRecording()));
-    picture->serialize(&stream, &EncodeBitmap);
-  } else {
-    // Serialize the picture.
-    picture_->serialize(&stream, &EncodeBitmap);
-  }
+  picture_->serialize(&stream, &EncodeBitmap);
 
   // Encode the picture as base64.
   scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
diff --git a/cc/resources/picture.h b/cc/resources/picture.h
index 69e3293..e0b6441 100644
--- a/cc/resources/picture.h
+++ b/cc/resources/picture.h
@@ -21,7 +21,6 @@
 #include "skia/ext/refptr.h"
 #include "third_party/skia/include/core/SkBBHFactory.h"
 #include "third_party/skia/include/core/SkPicture.h"
-#include "third_party/skia/include/record/SkRecording.h"
 #include "ui/gfx/rect.h"
 
 class SkPixelRef;
@@ -49,7 +48,6 @@
     RECORD_NORMALLY,
     RECORD_WITH_SK_NULL_CANVAS,
     RECORD_WITH_PAINTING_DISABLED,
-    RECORD_WITH_SKRECORD,
     RECORDING_MODE_COUNT,  // Must be the last entry.
   };
 
@@ -150,7 +148,6 @@
 
   gfx::Rect layer_rect_;
   skia::RefPtr<SkPicture> picture_;
-  scoped_ptr<const EXPERIMENTAL::SkPlayback> playback_;
 
   PixelRefMap pixel_refs_;
   gfx::Point min_pixel_cell_;
diff --git a/cc/resources/picture_unittest.cc b/cc/resources/picture_unittest.cc
index fc25989..4abeceb 100644
--- a/cc/resources/picture_unittest.cc
+++ b/cc/resources/picture_unittest.cc
@@ -45,65 +45,56 @@
       Picture::CreateFromValue(tmp.get());
   EXPECT_FALSE(invalid_picture.get());
 
-  Picture::RecordingMode kRecordingModes[] = {Picture::RECORD_NORMALLY,
-                                              Picture::RECORD_WITH_SKRECORD};
-
   // Single full-size rect picture.
   content_layer_client.add_draw_rect(layer_rect, red_paint);
 
-  for (size_t i = 0; i < arraysize(kRecordingModes); ++i) {
-    scoped_refptr<Picture> one_rect_picture =
-        Picture::Create(layer_rect,
-                        &content_layer_client,
-                        tile_grid_info,
-                        false,
-                        kRecordingModes[i]);
-    scoped_ptr<base::Value> serialized_one_rect(one_rect_picture->AsValue());
+  scoped_refptr<Picture> one_rect_picture =
+      Picture::Create(layer_rect,
+                      &content_layer_client,
+                      tile_grid_info,
+                      false,
+                      Picture::RECORD_NORMALLY);
+  scoped_ptr<base::Value> serialized_one_rect(one_rect_picture->AsValue());
 
-    // Reconstruct the picture.
-    scoped_refptr<Picture> one_rect_picture_check =
-        Picture::CreateFromValue(serialized_one_rect.get());
-    EXPECT_TRUE(!!one_rect_picture_check.get());
+  // Reconstruct the picture.
+  scoped_refptr<Picture> one_rect_picture_check =
+      Picture::CreateFromValue(serialized_one_rect.get());
+  EXPECT_TRUE(!!one_rect_picture_check.get());
 
-    // Check for equivalence.
-    unsigned char one_rect_buffer[4 * 100 * 100] = {0};
-    DrawPicture(one_rect_buffer, layer_rect, one_rect_picture);
-    unsigned char one_rect_buffer_check[4 * 100 * 100] = {0};
-    DrawPicture(one_rect_buffer_check, layer_rect, one_rect_picture_check);
+  // Check for equivalence.
+  unsigned char one_rect_buffer[4 * 100 * 100] = {0};
+  DrawPicture(one_rect_buffer, layer_rect, one_rect_picture);
+  unsigned char one_rect_buffer_check[4 * 100 * 100] = {0};
+  DrawPicture(one_rect_buffer_check, layer_rect, one_rect_picture_check);
 
-    EXPECT_EQ(one_rect_picture->LayerRect(),
-              one_rect_picture_check->LayerRect());
-    EXPECT_EQ(0, memcmp(one_rect_buffer, one_rect_buffer_check, 4 * 100 * 100));
-  }
+  EXPECT_EQ(one_rect_picture->LayerRect(), one_rect_picture_check->LayerRect());
+  EXPECT_EQ(0, memcmp(one_rect_buffer, one_rect_buffer_check, 4 * 100 * 100));
 
   // Two rect picture.
   content_layer_client.add_draw_rect(gfx::Rect(25, 25, 50, 50), green_paint);
 
-  for (size_t i = 0; i < arraysize(kRecordingModes); ++i) {
-    scoped_refptr<Picture> two_rect_picture =
-        Picture::Create(layer_rect,
-                        &content_layer_client,
-                        tile_grid_info,
-                        false,
-                        Picture::RECORD_NORMALLY);
+  scoped_refptr<Picture> two_rect_picture =
+      Picture::Create(layer_rect,
+                      &content_layer_client,
+                      tile_grid_info,
+                      false,
+                      Picture::RECORD_NORMALLY);
 
-    scoped_ptr<base::Value> serialized_two_rect(two_rect_picture->AsValue());
+  scoped_ptr<base::Value> serialized_two_rect(two_rect_picture->AsValue());
 
-    // Reconstruct the picture.
-    scoped_refptr<Picture> two_rect_picture_check =
-        Picture::CreateFromValue(serialized_two_rect.get());
-    EXPECT_TRUE(!!two_rect_picture_check.get());
+  // Reconstruct the picture.
+  scoped_refptr<Picture> two_rect_picture_check =
+      Picture::CreateFromValue(serialized_two_rect.get());
+  EXPECT_TRUE(!!two_rect_picture_check.get());
 
-    // Check for equivalence.
-    unsigned char two_rect_buffer[4 * 100 * 100] = {0};
-    DrawPicture(two_rect_buffer, layer_rect, two_rect_picture);
-    unsigned char two_rect_buffer_check[4 * 100 * 100] = {0};
-    DrawPicture(two_rect_buffer_check, layer_rect, two_rect_picture_check);
+  // Check for equivalence.
+  unsigned char two_rect_buffer[4 * 100 * 100] = {0};
+  DrawPicture(two_rect_buffer, layer_rect, two_rect_picture);
+  unsigned char two_rect_buffer_check[4 * 100 * 100] = {0};
+  DrawPicture(two_rect_buffer_check, layer_rect, two_rect_picture_check);
 
-    EXPECT_EQ(two_rect_picture->LayerRect(),
-              two_rect_picture_check->LayerRect());
-    EXPECT_EQ(0, memcmp(two_rect_buffer, two_rect_buffer_check, 4 * 100 * 100));
-  }
+  EXPECT_EQ(two_rect_picture->LayerRect(), two_rect_picture_check->LayerRect());
+  EXPECT_EQ(0, memcmp(two_rect_buffer, two_rect_buffer_check, 4 * 100 * 100));
 }
 
 TEST(PictureTest, PixelRefIterator) {
@@ -479,15 +470,7 @@
             content_layer_client.last_context_status());
   EXPECT_TRUE(picture.get());
 
-  picture = Picture::Create(layer_rect,
-                            &content_layer_client,
-                            tile_grid_info,
-                            false,
-                            Picture::RECORD_WITH_SKRECORD);
-  EXPECT_TRUE(content_layer_client.last_canvas() != NULL);
-  EXPECT_TRUE(picture.get());
-
-  EXPECT_EQ(4, Picture::RECORDING_MODE_COUNT);
+  EXPECT_EQ(3, Picture::RECORDING_MODE_COUNT);
 }
 
 }  // namespace
diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc
index 6e2fcec..f839439 100644
--- a/cc/trees/layer_tree_settings.cc
+++ b/cc/trees/layer_tree_settings.cc
@@ -30,7 +30,6 @@
       should_clear_root_render_pass(true),
       gpu_rasterization_enabled(false),
       gpu_rasterization_forced(false),
-      recording_mode(RecordNormally),
       create_low_res_tiling(false),
       scrollbar_animator(NoAnimator),
       scrollbar_fade_delay_ms(0),
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index 6646120..71cb253 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -35,11 +35,6 @@
   bool should_clear_root_render_pass;
   bool gpu_rasterization_enabled;
   bool gpu_rasterization_forced;
-  enum RecordingMode {
-    RecordNormally,
-    RecordWithSkRecord,
-  };
-  RecordingMode recording_mode;
   bool create_low_res_tiling;
 
   enum ScrollbarAnimator {
diff --git a/crypto/hmac_unittest.cc b/crypto/hmac_unittest.cc
index 174c323..91eccd6 100644
--- a/crypto/hmac_unittest.cc
+++ b/crypto/hmac_unittest.cc
@@ -142,7 +142,7 @@
           "\xBB\xFF\x1A\x91" }
   };
 
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
+  for (size_t i = 0; i < arraysize(cases); ++i) {
     crypto::HMAC hmac(crypto::HMAC::SHA1);
     ASSERT_TRUE(hmac.Init(reinterpret_cast<const unsigned char*>(cases[i].key),
                           cases[i].key_len));
@@ -239,7 +239,7 @@
   ASSERT_TRUE(
       hmac.Init(reinterpret_cast<const unsigned char*>(kSimpleKey),
                 kSimpleKeyLength));
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kSimpleHmacCases); ++i) {
+  for (size_t i = 0; i < arraysize(kSimpleHmacCases); ++i) {
     std::string data_string(kSimpleHmacCases[i].data,
                             kSimpleHmacCases[i].data_len);
     unsigned char digest[kSHA1DigestSize];
@@ -254,7 +254,7 @@
       hmac.Init(reinterpret_cast<const unsigned char*>(kSimpleKey),
                 kSimpleKeyLength));
   const char empty_digest[kSHA1DigestSize] = { 0 };
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kSimpleHmacCases); ++i) {
+  for (size_t i = 0; i < arraysize(kSimpleHmacCases); ++i) {
     // Expected results
     EXPECT_TRUE(hmac.Verify(
         base::StringPiece(kSimpleHmacCases[i].data,
diff --git a/gin/converter_unittest.cc b/gin/converter_unittest.cc
index 791d7e6..f8011d6 100644
--- a/gin/converter_unittest.cc
+++ b/gin/converter_unittest.cc
@@ -55,7 +55,7 @@
     { Undefined(instance_->isolate()).As<Value>(), false },
   };
 
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
+  for (size_t i = 0; i < arraysize(test_data); ++i) {
     bool result = false;
     EXPECT_TRUE(Converter<bool>::FromV8(instance_->isolate(),
                                         test_data[i].input, &result));
@@ -72,7 +72,7 @@
   HandleScope handle_scope(instance_->isolate());
 
   int test_data_to[] = {-1, 0, 1};
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data_to); ++i) {
+  for (size_t i = 0; i < arraysize(test_data_to); ++i) {
     EXPECT_TRUE(Converter<int32_t>::ToV8(instance_->isolate(), test_data_to[i])
                     ->StrictEquals(
                           Integer::New(instance_->isolate(), test_data_to[i])));
@@ -98,7 +98,7 @@
     { v8::Undefined(instance_->isolate()).As<Value>(), false, 0 },
   };
 
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data_from); ++i) {
+  for (size_t i = 0; i < arraysize(test_data_from); ++i) {
     int32_t result = std::numeric_limits<int32_t>::min();
     bool success = Converter<int32_t>::FromV8(instance_->isolate(),
                                               test_data_from[i].input, &result);
diff --git a/gpu/command_buffer/client/query_tracker.cc b/gpu/command_buffer/client/query_tracker.cc
index c12d975..e215c16 100644
--- a/gpu/command_buffer/client/query_tracker.cc
+++ b/gpu/command_buffer/client/query_tracker.cc
@@ -9,6 +9,7 @@
 #include <GLES2/gl2extchromium.h>
 
 #include "base/atomicops.h"
+#include "base/numerics/safe_conversions.h"
 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
 #include "gpu/command_buffer/client/gles2_implementation.h"
 #include "gpu/command_buffer/client/mapped_memory.h"
@@ -153,19 +154,18 @@
         helper->IsContextLost()) {
       switch (target()) {
         case GL_COMMANDS_ISSUED_CHROMIUM:
-          result_ = std::min(info_.sync->result,
-                             static_cast<uint64>(0xFFFFFFFFL));
+          result_ = base::saturated_cast<uint32>(info_.sync->result);
           break;
         case GL_LATENCY_QUERY_CHROMIUM:
           // Disabled DCHECK because of http://crbug.com/419236.
           //DCHECK(info_.sync->result >= client_begin_time_us_);
-          result_ = std::min(info_.sync->result - client_begin_time_us_,
-                             static_cast<uint64>(0xFFFFFFFFL));
+          result_ = base::saturated_cast<uint32>(
+              info_.sync->result - client_begin_time_us_);
           break;
         case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM:
         case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
         default:
-          result_ = info_.sync->result;
+          result_ = static_cast<uint32>(info_.sync->result);
           break;
       }
       state_ = kComplete;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index f52c10e..6253cc8 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1202,6 +1202,11 @@
   // location is not -1.
   bool CheckCurrentProgramForUniform(GLint location, const char* function_name);
 
+  // Checks if the current program samples a texture that is also the color
+  // image of the current bound framebuffer, i.e., the source and destination
+  // of the draw operation are the same.
+  bool CheckDrawingFeedbackLoops();
+
   // Gets the type of a uniform for a location in the current program. Sets GL
   // errors if the current program is not valid. Returns true if the current
   // program is valid and the location exists. Adjusts count so it
@@ -2365,7 +2370,7 @@
   DCHECK(context->IsCurrent(surface.get()));
   DCHECK(!context_.get());
 
-  surfaceless_ = surface->IsSurfaceless();
+  surfaceless_ = surface->IsSurfaceless() && !offscreen;
 
   set_initialized();
   gpu_tracer_.reset(new GPUTracer(this));
@@ -3123,7 +3128,7 @@
       return false;
     if (backbuffer_needs_clear_bits_) {
       glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat(
-          offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1);
+          offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1.f);
       state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
       glClearStencil(0);
       state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask);
@@ -3687,7 +3692,7 @@
   {
     ScopedFrameBufferBinder binder(this, offscreen_target_frame_buffer_->id());
     glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat(
-        offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1);
+        offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1.f);
     state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
     glClearStencil(0);
     state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask);
@@ -5750,6 +5755,38 @@
   return location != -1;
 }
 
+bool GLES2DecoderImpl::CheckDrawingFeedbackLoops() {
+  Framebuffer* framebuffer = GetFramebufferInfoForTarget(GL_FRAMEBUFFER);
+  if (!framebuffer)
+    return false;
+  const Framebuffer::Attachment* attachment =
+      framebuffer->GetAttachment(GL_COLOR_ATTACHMENT0);
+  if (!attachment)
+    return false;
+
+  DCHECK(state_.current_program.get());
+  const Program::SamplerIndices& sampler_indices =
+      state_.current_program->sampler_indices();
+  for (size_t ii = 0; ii < sampler_indices.size(); ++ii) {
+    const Program::UniformInfo* uniform_info =
+        state_.current_program->GetUniformInfo(sampler_indices[ii]);
+    DCHECK(uniform_info);
+    if (uniform_info->type != GL_SAMPLER_2D)
+      continue;
+    for (size_t jj = 0; jj < uniform_info->texture_units.size(); ++jj) {
+      GLuint texture_unit_index = uniform_info->texture_units[jj];
+      if (texture_unit_index >= state_.texture_units.size())
+        continue;
+      TextureUnit& texture_unit = state_.texture_units[texture_unit_index];
+      TextureRef* texture_ref =
+          texture_unit.GetInfoForSamplerType(GL_SAMPLER_2D).get();
+      if (attachment->IsTexture(texture_ref))
+        return true;
+    }
+  }
+  return false;
+}
+
 bool GLES2DecoderImpl::PrepForSetUniformByLocation(
     GLint fake_location,
     const char* function_name,
@@ -6246,6 +6283,13 @@
     return false;
   }
 
+  if (CheckDrawingFeedbackLoops()) {
+    LOCAL_SET_GL_ERROR(
+        GL_INVALID_OPERATION, function_name,
+        "Source and destination textures of the draw are the same.");
+    return false;
+  }
+
   return state_.vertex_attrib_manager
       ->ValidateBindings(function_name,
                          this,
@@ -7210,7 +7254,7 @@
   GLuint indx = c.indx;
   GLint size = c.size;
   GLenum type = c.type;
-  GLboolean normalized = c.normalized;
+  GLboolean normalized = static_cast<GLboolean>(c.normalized);
   GLsizei stride = c.stride;
   GLsizei offset = c.offset;
   const void* ptr = reinterpret_cast<const void*>(offset);
@@ -7452,7 +7496,7 @@
   GLsizei height = c.height;
   GLenum format = c.format;
   GLenum type = c.type;
-  GLboolean async = c.async;
+  GLboolean async = static_cast<GLboolean>(c.async);
   if (width < 0 || height < 0) {
     LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glReadPixels", "dimensions < 0");
     return error::kNoError;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
index 7c8e5ae..4ee12ff 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
@@ -314,7 +314,12 @@
   const GLsizei kWidth = 1;
   const GLsizei kHeight = 1;
   const GLenum kFormat = GL_RGB;
-  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+  // Use a different texture for framebuffer to avoid drawing feedback loops.
+  EXPECT_CALL(*gl_, GenTextures(_, _))
+      .WillOnce(SetArgumentPointee<1>(kNewServiceId))
+      .RetiresOnSaturation();
+  GenHelper<cmds::GenTexturesImmediate>(kNewClientId);
+  DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId);
   // Pass some data so the texture will be marked as cleared.
   DoTexImage2D(GL_TEXTURE_2D,
                0,
@@ -331,10 +336,11 @@
   DoFramebufferTexture2D(GL_FRAMEBUFFER,
                          GL_COLOR_ATTACHMENT0,
                          GL_TEXTURE_2D,
-                         client_texture_id_,
-                         kServiceTextureId,
+                         kNewClientId,
+                         kNewServiceId,
                          0,
                          GL_NO_ERROR);
+  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
   EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
       .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
       .RetiresOnSaturation();
diff --git a/gpu/command_buffer/service/program_cache.cc b/gpu/command_buffer/service/program_cache.cc
index ad395c7..abdcfc0 100644
--- a/gpu/command_buffer/service/program_cache.cc
+++ b/gpu/command_buffer/service/program_cache.cc
@@ -123,9 +123,9 @@
       current_pos += name_size;
       const GLint value = it->second;
       buffer[current_pos++] = value >> 24;
-      buffer[current_pos++] = value >> 16;
-      buffer[current_pos++] = value >> 8;
-      buffer[current_pos++] = value;
+      buffer[current_pos++] = static_cast<unsigned char>(value >> 16);
+      buffer[current_pos++] = static_cast<unsigned char>(value >> 8);
+      buffer[current_pos++] = static_cast<unsigned char>(value);
     }
   }
   base::SHA1HashBytes(buffer.get(),
diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc
index e8196f6..63a64b7 100644
--- a/gpu/command_buffer/service/program_manager.cc
+++ b/gpu/command_buffer/service/program_manager.cc
@@ -591,16 +591,20 @@
       }
       UMA_HISTOGRAM_CUSTOM_COUNTS(
           "GPU.ProgramCache.BinaryCacheMissTime",
-          (TimeTicks::HighResNow() - before_time).InMicroseconds(),
+          static_cast<base::HistogramBase::Sample>(
+              (TimeTicks::HighResNow() - before_time).InMicroseconds()),
           0,
-          TimeDelta::FromSeconds(10).InMicroseconds(),
+          static_cast<base::HistogramBase::Sample>(
+              TimeDelta::FromSeconds(10).InMicroseconds()),
           50);
     } else {
       UMA_HISTOGRAM_CUSTOM_COUNTS(
           "GPU.ProgramCache.BinaryCacheHitTime",
-          (TimeTicks::HighResNow() - before_time).InMicroseconds(),
+          static_cast<base::HistogramBase::Sample>(
+              (TimeTicks::HighResNow() - before_time).InMicroseconds()),
           0,
-          TimeDelta::FromSeconds(1).InMicroseconds(),
+          static_cast<base::HistogramBase::Sample>(
+              TimeDelta::FromSeconds(1).InMicroseconds()),
           50);
     }
   } else {
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index 45aaa65..4dbf528 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -1293,7 +1293,7 @@
   if (result != GL_NO_ERROR) {
     if (result == GL_INVALID_ENUM) {
       ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
-          error_state, function_name, param, "param");
+          error_state, function_name, pname, "pname");
     } else {
       ERRORSTATE_SET_GL_ERROR_INVALID_PARAMF(
           error_state, result, function_name, pname, param);
diff --git a/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc b/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
index 444f714..44d0840 100644
--- a/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
@@ -45,8 +45,8 @@
       new SharedMemoryBufferBacking(shm.Pass(), kBufferSize));
   SharedMemoryBufferBacking* backing_raw_ptr = backing.get();
 
-  EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(
-      1, backing.PassAs<BufferBacking>()));
+  EXPECT_TRUE(
+      transfer_buffer_manager_->RegisterTransferBuffer(1, backing.Pass()));
   scoped_refptr<Buffer> registered =
       transfer_buffer_manager_->GetTransferBuffer(1);
 
diff --git a/gpu/config/gpu_info_collector_win.cc b/gpu/config/gpu_info_collector_win.cc
index 244fd53..53343f6 100644
--- a/gpu/config/gpu_info_collector_win.cc
+++ b/gpu/config/gpu_info_collector_win.cc
@@ -154,12 +154,17 @@
 
   UMA_HISTOGRAM_TIMES("GPU.WinSAT.ReadResultsFileTime",
                       base::TimeTicks::Now() - start_time);
-  UMA_HISTOGRAM_CUSTOM_COUNTS("GPU.WinSAT.OverallScore2",
-                              stats.overall * 10, 10, 200, 50);
-  UMA_HISTOGRAM_CUSTOM_COUNTS("GPU.WinSAT.GraphicsScore2",
-                              stats.graphics * 10, 10, 200, 50);
-  UMA_HISTOGRAM_CUSTOM_COUNTS("GPU.WinSAT.GamingScore2",
-                              stats.gaming * 10, 10, 200, 50);
+  UMA_HISTOGRAM_CUSTOM_COUNTS(
+      "GPU.WinSAT.OverallScore2",
+      static_cast<base::HistogramBase::Sample>(stats.overall * 10), 10, 200,
+      50);
+  UMA_HISTOGRAM_CUSTOM_COUNTS(
+      "GPU.WinSAT.GraphicsScore2",
+      static_cast<base::HistogramBase::Sample>(stats.graphics * 10), 10, 200,
+      50);
+  UMA_HISTOGRAM_CUSTOM_COUNTS(
+      "GPU.WinSAT.GamingScore2",
+      static_cast<base::HistogramBase::Sample>(stats.gaming * 10), 10, 200, 50);
   UMA_HISTOGRAM_BOOLEAN(
       "GPU.WinSAT.HasResults",
       stats.overall != 0.0 && stats.graphics != 0.0 && stats.gaming != 0.0);
diff --git a/mojo/android/BUILD.gn b/mojo/android/BUILD.gn
index 5eb9ded..8fb6259 100644
--- a/mojo/android/BUILD.gn
+++ b/mojo/android/BUILD.gn
@@ -20,7 +20,7 @@
   jni_package = "mojo"
 }
 
-shared_library("libsystem_java") {
+source_set("libsystem_java") {
   sources = [
     "system/core_impl.cc",
     "system/core_impl.h",
diff --git a/mojo/application_manager/application_manager_unittest.cc b/mojo/application_manager/application_manager_unittest.cc
index 5763265..1800dce 100644
--- a/mojo/application_manager/application_manager_unittest.cc
+++ b/mojo/application_manager/application_manager_unittest.cc
@@ -108,9 +108,7 @@
 
   void set_context(TestContext* context) { context_ = context; }
   int num_loads() const { return num_loads_; }
-  std::vector<std::string> GetArgs() {
-    return test_app_->args().To<std::vector<std::string> >();
-  }
+  const std::vector<std::string>& GetArgs() const { return test_app_->args(); }
 
  private:
   // ApplicationLoader implementation.
@@ -445,8 +443,7 @@
   }
 
   void AddLoaderForURL(const GURL& url, const std::string& requestor_url) {
-    application_manager_->SetLoaderForURL(
-        MakeLoader(requestor_url).PassAs<ApplicationLoader>(), url);
+    application_manager_->SetLoaderForURL(MakeLoader(requestor_url), url);
   }
 
   bool HasFactoryForTestURL() {
diff --git a/mojo/common/message_pump_mojo.cc b/mojo/common/message_pump_mojo.cc
index 6d21af2..c069270 100644
--- a/mojo/common/message_pump_mojo.cc
+++ b/mojo/common/message_pump_mojo.cc
@@ -97,6 +97,14 @@
   handlers_.erase(handle);
 }
 
+void MessagePumpMojo::AddObserver(Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void MessagePumpMojo::RemoveObserver(Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
 void MessagePumpMojo::Run(Delegate* delegate) {
   RunState run_state;
   // TODO: better deal with error handling.
@@ -175,8 +183,10 @@
   } else if (result > 0) {
     const size_t index = static_cast<size_t>(result);
     DCHECK(handlers_.find(wait_state.handles[index]) != handlers_.end());
+    WillSignalHandler();
     handlers_[wait_state.handles[index]].handler->OnHandleReady(
         wait_state.handles[index]);
+    DidSignalHandler();
   } else {
     switch (result) {
       case MOJO_RESULT_CANCELLED:
@@ -204,7 +214,9 @@
     if (!i->second.deadline.is_null() && i->second.deadline < now &&
         handlers_.find(i->first) != handlers_.end() &&
         handlers_[i->first].id == i->second.id) {
+      WillSignalHandler();
       i->second.handler->OnHandleError(i->first, MOJO_RESULT_DEADLINE_EXCEEDED);
+      DidSignalHandler();
       handlers_.erase(i->first);
       did_work = true;
     }
@@ -232,7 +244,9 @@
       MessagePumpMojoHandler* handler =
           handlers_[wait_state.handles[i]].handler;
       handlers_.erase(wait_state.handles[i]);
+      WillSignalHandler();
       handler->OnHandleError(wait_state.handles[i], result);
+      DidSignalHandler();
       return;
     }
   }
@@ -274,5 +288,13 @@
   return deadline;
 }
 
+void MessagePumpMojo::WillSignalHandler() {
+  FOR_EACH_OBSERVER(Observer, observers_, WillSignalHandler());
+}
+
+void MessagePumpMojo::DidSignalHandler() {
+  FOR_EACH_OBSERVER(Observer, observers_, DidSignalHandler());
+}
+
 }  // namespace common
 }  // namespace mojo
diff --git a/mojo/common/message_pump_mojo.h b/mojo/common/message_pump_mojo.h
index 26e28b1..4dd7155 100644
--- a/mojo/common/message_pump_mojo.h
+++ b/mojo/common/message_pump_mojo.h
@@ -10,6 +10,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_pump.h"
+#include "base/observer_list.h"
 #include "base/synchronization/lock.h"
 #include "base/time/time.h"
 #include "mojo/common/mojo_common_export.h"
@@ -23,6 +24,17 @@
 // Mojo implementation of MessagePump.
 class MOJO_COMMON_EXPORT MessagePumpMojo : public base::MessagePump {
  public:
+  class Observer {
+   public:
+    Observer() {}
+
+    virtual void WillSignalHandler() = 0;
+    virtual void DidSignalHandler() = 0;
+
+   protected:
+    virtual ~Observer() {}
+  };
+
   MessagePumpMojo();
   virtual ~MessagePumpMojo();
 
@@ -45,6 +57,9 @@
 
   void RemoveHandler(const Handle& handle);
 
+  void AddObserver(Observer*);
+  void RemoveObserver(Observer*);
+
   // MessagePump:
   virtual void Run(Delegate* delegate) override;
   virtual void Quit() override;
@@ -88,6 +103,9 @@
   // Returns the deadline for the call to MojoWaitMany().
   MojoDeadline GetDeadlineForWait(const RunState& run_state) const;
 
+  void WillSignalHandler();
+  void DidSignalHandler();
+
   // If non-NULL we're running (inside Run()). Member is reference to value on
   // stack.
   RunState* run_state_;
@@ -106,6 +124,8 @@
   // notify it.
   int next_handler_id_;
 
+  ObserverList<Observer> observers_;
+
   DISALLOW_COPY_AND_ASSIGN(MessagePumpMojo);
 };
 
diff --git a/mojo/common/message_pump_mojo_unittest.cc b/mojo/common/message_pump_mojo_unittest.cc
index d552942..f340132 100644
--- a/mojo/common/message_pump_mojo_unittest.cc
+++ b/mojo/common/message_pump_mojo_unittest.cc
@@ -47,6 +47,19 @@
   DISALLOW_COPY_AND_ASSIGN(CountingMojoHandler);
 };
 
+class CountingObserver : public MessagePumpMojo::Observer {
+ public:
+  virtual void WillSignalHandler() override {
+    will_signal_handler_count++;
+  }
+  virtual void DidSignalHandler() override {
+    did_signal_handler_count++;
+  }
+
+  int will_signal_handler_count = 0;
+  int did_signal_handler_count = 0;
+};
+
 TEST(MessagePumpMojo, RunUntilIdle) {
   base::MessageLoop message_loop(MessagePumpMojo::Create());
   CountingMojoHandler handler;
@@ -64,6 +77,36 @@
   EXPECT_EQ(2, handler.success_count());
 }
 
+TEST(MessagePumpMojo, Observer) {
+  base::MessageLoop message_loop(MessagePumpMojo::Create());
+
+  CountingObserver observer;
+  MessagePumpMojo::current()->AddObserver(&observer);
+
+  CountingMojoHandler handler;
+  MessagePipe handles;
+  MessagePumpMojo::current()->AddHandler(&handler,
+                                         handles.handle0.get(),
+                                         MOJO_HANDLE_SIGNAL_READABLE,
+                                         base::TimeTicks());
+  WriteMessageRaw(
+      handles.handle1.get(), NULL, 0, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE);
+  base::RunLoop run_loop;
+  run_loop.RunUntilIdle();
+  EXPECT_EQ(1, handler.success_count());
+  EXPECT_EQ(1, observer.will_signal_handler_count);
+  EXPECT_EQ(1, observer.did_signal_handler_count);
+  MessagePumpMojo::current()->RemoveObserver(&observer);
+
+  WriteMessageRaw(
+      handles.handle1.get(), NULL, 0, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE);
+  base::RunLoop run_loop2;
+  run_loop2.RunUntilIdle();
+  EXPECT_EQ(2, handler.success_count());
+  EXPECT_EQ(1, observer.will_signal_handler_count);
+  EXPECT_EQ(1, observer.did_signal_handler_count);
+}
+
 TEST(MessagePumpMojo, UnregisterAfterDeadline) {
   base::MessageLoop message_loop(MessagePumpMojo::Create());
   CountingMojoHandler handler;
diff --git a/mojo/converters/input_events/input_events_type_converters.cc b/mojo/converters/input_events/input_events_type_converters.cc
index f0cd627..58ee75a 100644
--- a/mojo/converters/input_events/input_events_type_converters.cc
+++ b/mojo/converters/input_events/input_events_type_converters.cc
@@ -192,7 +192,7 @@
               input->key_data->text,
               input->key_data->unmodified_text)));
       key_event->set_platform_keycode(input->key_data->native_key_code);
-      ui_event = key_event.PassAs<ui::KeyEvent>();
+      ui_event = key_event.Pass();
       break;
     }
     case EVENT_TYPE_MOUSE_PRESSED:
diff --git a/mojo/edk/system/channel.cc b/mojo/edk/system/channel.cc
index 0582b23..f008bec 100644
--- a/mojo/edk/system/channel.cc
+++ b/mojo/edk/system/channel.cc
@@ -12,7 +12,6 @@
 #include "base/macros.h"
 #include "base/strings/stringprintf.h"
 #include "mojo/edk/embedder/platform_handle_vector.h"
-#include "mojo/edk/system/message_pipe_endpoint.h"
 #include "mojo/edk/system/transport_data.h"
 
 namespace mojo {
@@ -125,8 +124,9 @@
   endpoint->Run(remote_id);
 }
 
-void Channel::AttachAndRunEndpoint(scoped_refptr<ChannelEndpoint> endpoint,
-                                   bool is_bootstrap) {
+ChannelEndpointId Channel::AttachAndRunEndpoint(
+    scoped_refptr<ChannelEndpoint> endpoint,
+    bool is_bootstrap) {
   DCHECK(endpoint.get());
 
   ChannelEndpointId local_id;
@@ -144,8 +144,6 @@
 
       remote_id = ChannelEndpointId::GetBootstrap();
     } else {
-      // TODO(vtl): More work needs to be done to enable the non-bootstrap case.
-      NOTREACHED() << "Non-bootstrap case not yet fully implemented";
       do {
         local_id = local_id_generator_.GetNext();
       } while (local_id_to_endpoint_map_.find(local_id) !=
@@ -158,29 +156,22 @@
     local_id_to_endpoint_map_[local_id] = endpoint;
   }
 
+  if (!is_bootstrap) {
+    if (!SendControlMessage(
+            MessageInTransit::kSubtypeChannelAttachAndRunEndpoint,
+            local_id,
+            remote_id)) {
+      HandleLocalError(base::StringPrintf(
+          "Failed to send message to run remote message pipe endpoint (local "
+          "ID %u, remote ID %u)",
+          static_cast<unsigned>(local_id.value()),
+          static_cast<unsigned>(remote_id.value())));
+      // TODO(vtl): Should we continue on to |AttachAndRun()|?
+    }
+  }
+
   endpoint->AttachAndRun(this, local_id, remote_id);
-}
-
-void Channel::RunRemoteMessagePipeEndpoint(ChannelEndpointId local_id,
-                                           ChannelEndpointId remote_id) {
-#if DCHECK_IS_ON
-  {
-    base::AutoLock locker(lock_);
-    DCHECK(local_id_to_endpoint_map_.find(local_id) !=
-           local_id_to_endpoint_map_.end());
-  }
-#endif
-
-  if (!SendControlMessage(
-          MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint,
-          local_id,
-          remote_id)) {
-    HandleLocalError(base::StringPrintf(
-        "Failed to send message to run remote message pipe endpoint (local ID "
-        "%u, remote ID %u)",
-        static_cast<unsigned>(local_id.value()),
-        static_cast<unsigned>(remote_id.value())));
-  }
+  return remote_id;
 }
 
 bool Channel::WriteMessage(scoped_ptr<MessageInTransit> message) {
@@ -243,6 +234,25 @@
   }
 }
 
+scoped_refptr<MessagePipe> Channel::PassIncomingMessagePipe(
+    ChannelEndpointId local_id) {
+  // No need to check the validity of |local_id| -- if it's not valid, it simply
+  // won't be in |incoming_message_pipes_|.
+  DVLOG_IF(2, !local_id.is_valid() || !local_id.is_remote())
+      << "Attempt to get invalid incoming message pipe for ID " << local_id;
+
+  base::AutoLock locker(lock_);
+
+  auto it = incoming_message_pipes_.find(local_id);
+  if (it == incoming_message_pipes_.end())
+    return scoped_refptr<MessagePipe>();
+
+  scoped_refptr<MessagePipe> rv;
+  rv.swap(it->second);
+  incoming_message_pipes_.erase(it);
+  return rv;
+}
+
 size_t Channel::GetSerializedPlatformHandleSize() const {
   return raw_channel_->GetSerializedPlatformHandleSize();
 }
@@ -375,14 +385,14 @@
   }
 
   switch (message_view.subtype()) {
-    case MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint:
-      DVLOG(2) << "Handling channel message to run message pipe (local ID "
-               << message_view.destination_id() << ", remote ID "
-               << message_view.source_id() << ")";
-      if (!OnRunMessagePipeEndpoint(message_view.destination_id(),
-                                    message_view.source_id())) {
+    case MessageInTransit::kSubtypeChannelAttachAndRunEndpoint:
+      DVLOG(2) << "Handling channel message to attach and run message pipe "
+                  "(local ID " << message_view.destination_id()
+               << ", remote ID " << message_view.source_id() << ")";
+      if (!OnAttachAndRunEndpoint(message_view.destination_id(),
+                                  message_view.source_id())) {
         HandleRemoteError(
-            "Received invalid channel message to run message pipe");
+            "Received invalid channel message to attach and run message pipe");
       }
       break;
     case MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint:
@@ -411,20 +421,51 @@
   }
 }
 
-bool Channel::OnRunMessagePipeEndpoint(ChannelEndpointId local_id,
-                                       ChannelEndpointId remote_id) {
+bool Channel::OnAttachAndRunEndpoint(ChannelEndpointId local_id,
+                                     ChannelEndpointId remote_id) {
+  // We should only get this for remotely-created local endpoints, so our local
+  // ID should be "remote".
+  if (!local_id.is_valid() || !local_id.is_remote()) {
+    DVLOG(2) << "Received attach and run endpoint with invalid local ID";
+    return false;
+  }
+
+  // Conversely, the remote end should be "local".
+  if (!remote_id.is_valid() || remote_id.is_remote()) {
+    DVLOG(2) << "Received attach and run endpoint with invalid remote ID";
+    return false;
+  }
+
+  // Create a message pipe and thus an endpoint (outside the lock).
   scoped_refptr<ChannelEndpoint> endpoint;
+  scoped_refptr<MessagePipe> message_pipe(
+      MessagePipe::CreateLocalProxy(&endpoint));
+
+  bool success = true;
   {
     base::AutoLock locker(lock_);
 
-    IdToEndpointMap::iterator it = local_id_to_endpoint_map_.find(local_id);
-    if (it == local_id_to_endpoint_map_.end())
-      return false;
+    if (local_id_to_endpoint_map_.find(local_id) ==
+        local_id_to_endpoint_map_.end()) {
+      DCHECK(incoming_message_pipes_.find(local_id) ==
+             incoming_message_pipes_.end());
 
-    endpoint = it->second;
+      // TODO(vtl): Use emplace when we move to C++11 unordered_maps. (It'll
+      // avoid some refcount churn.)
+      local_id_to_endpoint_map_[local_id] = endpoint;
+      incoming_message_pipes_[local_id] = message_pipe;
+    } else {
+      // We need to call |Close()| on the message pipe outside the lock.
+      success = false;
+    }
+  }
+  if (!success) {
+    DVLOG(2) << "Received attach and run endpoint for existing local ID";
+    message_pipe->Close(0);
+    return false;
   }
 
-  RunEndpoint(endpoint, remote_id);
+  endpoint->AttachAndRun(this, local_id, remote_id);
   return true;
 }
 
diff --git a/mojo/edk/system/channel.h b/mojo/edk/system/channel.h
index 57bd9ce..c09f4c0 100644
--- a/mojo/edk/system/channel.h
+++ b/mojo/edk/system/channel.h
@@ -80,24 +80,22 @@
   // Attaches the given endpoint to this channel and runs it. |is_bootstrap|
   // should be set if and only if it is the first endpoint on the channel. This
   // assigns the endpoint both local and remote IDs. If |is_bootstrap| is set,
-  // both are the bootstrap ID (given by |ChannelEndpointId::GetBootstrap()|).
+  // both are the bootstrap ID (given by |ChannelEndpointId::GetBootstrap()|);
+  // if not, it will also send a |kSubtypeChannelAttachAndRunEndpoint| message
+  // to the remote side to tell it to create an endpoint as well.
   //
   // (Bootstrapping is symmetric: Both sides attach and run endpoints with
   // |is_bootstrap| set, which establishes the first message pipe across a
   // channel.)
   //
+  // This returns the *remote* ID (which will be the bootstrap ID in the
+  // bootstrap case, and a "remote ID", i.e., one for which |is_remote()|
+  // returns true, otherwise).
+  //
   // TODO(vtl): Maybe limit the number of attached message pipes.
-  void AttachAndRunEndpoint(scoped_refptr<ChannelEndpoint> endpoint,
-                            bool is_bootstrap);
-
-  // Tells the other side of the channel to run a message pipe endpoint (which
-  // must already be attached); |local_id| and |remote_id| are relative to this
-  // channel (i.e., |local_id| is the other side's remote ID and |remote_id| is
-  // its local ID).
-  // TODO(vtl): Maybe we should just have a flag argument to
-  // |RunMessagePipeEndpoint()| that tells it to do this.
-  void RunRemoteMessagePipeEndpoint(ChannelEndpointId local_id,
-                                    ChannelEndpointId remote_id);
+  ChannelEndpointId AttachAndRunEndpoint(
+      scoped_refptr<ChannelEndpoint> endpoint,
+      bool is_bootstrap);
 
   // This forwards |message| verbatim to |raw_channel_|.
   bool WriteMessage(scoped_ptr<MessageInTransit> message);
@@ -107,15 +105,20 @@
   // |FlushWriteBufferAndShutdown()| or something like that.
   bool IsWriteBufferEmpty();
 
-  // This removes the given endpoint from this channel (|local_id| and
-  // |remote_id| are specified as an optimization; the latter should be an
-  // invalid |ChannelEndpointId| if the endpoint is not yet running). Note: If
-  // this is called, the |Channel| will *not* call
+  // Removes the given endpoint from this channel (|local_id| and |remote_id|
+  // are specified as an optimization; the latter should be an invalid
+  // |ChannelEndpointId| if the endpoint is not yet running). Note: If this is
+  // called, the |Channel| will *not* call
   // |ChannelEndpoint::DetachFromChannel()|.
   void DetachEndpoint(ChannelEndpoint* endpoint,
                       ChannelEndpointId local_id,
                       ChannelEndpointId remote_id);
 
+  // Takes ownership of an incoming message pipe (i.e., one that was created via
+  // a |kSubtypeChannelAttachAndRunEndpoint| message).
+  scoped_refptr<MessagePipe> PassIncomingMessagePipe(
+      ChannelEndpointId local_id);
+
   // See |RawChannel::GetSerializedPlatformHandleSize()|.
   size_t GetSerializedPlatformHandleSize() const;
 
@@ -141,9 +144,9 @@
       const MessageInTransit::View& message_view,
       embedder::ScopedPlatformHandleVectorPtr platform_handles);
 
-  // Handles "run message pipe endpoint" messages.
-  bool OnRunMessagePipeEndpoint(ChannelEndpointId local_id,
-                                ChannelEndpointId remote_id);
+  // Handles "attach and run endpoint" messages.
+  bool OnAttachAndRunEndpoint(ChannelEndpointId local_id,
+                              ChannelEndpointId remote_id);
   // Handles "remove message pipe endpoint" messages.
   bool OnRemoveMessagePipeEndpoint(ChannelEndpointId local_id,
                                    ChannelEndpointId remote_id);
@@ -186,6 +189,11 @@
   // Note: The IDs generated by this should be checked for existence before use.
   LocalChannelEndpointIdGenerator local_id_generator_;
 
+  typedef base::hash_map<ChannelEndpointId, scoped_refptr<MessagePipe>>
+      IdToMessagePipeMap;
+  // Map from local IDs to pending/incoming endpoints (i.e., those which do not
+  // yet have a dispatcher attached).
+  IdToMessagePipeMap incoming_message_pipes_;
   // TODO(vtl): We need to keep track of remote IDs (so that we don't collide
   // if/when we wrap).
   RemoteChannelEndpointIdGenerator remote_id_generator_;
diff --git a/mojo/edk/system/message_in_transit.cc b/mojo/edk/system/message_in_transit.cc
index eb68664..95a7d23 100644
--- a/mojo/edk/system/message_in_transit.cc
+++ b/mojo/edk/system/message_in_transit.cc
@@ -25,7 +25,7 @@
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
     MessageInTransit::kSubtypeMessagePipeEndpointData;
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
-    MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint;
+    MessageInTransit::kSubtypeChannelAttachAndRunEndpoint;
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
     MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint;
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
diff --git a/mojo/edk/system/message_in_transit.h b/mojo/edk/system/message_in_transit.h
index 06b4f6c..2b9da6d 100644
--- a/mojo/edk/system/message_in_transit.h
+++ b/mojo/edk/system/message_in_transit.h
@@ -59,9 +59,10 @@
   // Subtypes for type |kTypeMessagePipe|:
   // Nothing currently.
   // Subtypes for type |kTypeChannel|:
-  static const Subtype kSubtypeChannelRunMessagePipeEndpoint = 0;
+  static const Subtype kSubtypeChannelAttachAndRunEndpoint = 0;
   static const Subtype kSubtypeChannelRemoveMessagePipeEndpoint = 1;
   static const Subtype kSubtypeChannelRemoveMessagePipeEndpointAck = 2;
+
   // Subtypes for type |kTypeRawChannel|:
   static const Subtype kSubtypeRawChannelPosixExtraPlatformHandles = 0;
 
diff --git a/mojo/edk/system/message_pipe_dispatcher.cc b/mojo/edk/system/message_pipe_dispatcher.cc
index 4234eba..7db16e8 100644
--- a/mojo/edk/system/message_pipe_dispatcher.cc
+++ b/mojo/edk/system/message_pipe_dispatcher.cc
@@ -23,7 +23,11 @@
 const unsigned kInvalidPort = static_cast<unsigned>(-1);
 
 struct SerializedMessagePipeDispatcher {
-  ChannelEndpointId endpoint_id;
+  // This is the endpoint ID on the receiving side, and should be a "remote ID".
+  // (The receiving side should have already have an endpoint attached and run
+  // via the |Channel|s. This endpoint will have both IDs assigned, so this ID
+  // is only needed to associated that endpoint with a particular dispatcher.)
+  ChannelEndpointId receiver_endpoint_id;
 };
 
 }  // namespace
@@ -104,33 +108,21 @@
     return scoped_refptr<MessagePipeDispatcher>();
   }
 
-  scoped_refptr<ChannelEndpoint> channel_endpoint;
-  scoped_refptr<MessagePipeDispatcher> dispatcher =
-      CreateRemoteMessagePipe(&channel_endpoint);
-
-  ChannelEndpointId remote_id =
-      static_cast<const SerializedMessagePipeDispatcher*>(source)->endpoint_id;
-  if (!remote_id.is_valid()) {
-    // This means that the other end was closed, and there were no messages
-    // enqueued for us.
-    // TODO(vtl): This is wrong. We should produce a "dead" message pipe
-    // dispatcher.
-    NOTIMPLEMENTED();
+  const SerializedMessagePipeDispatcher* s =
+      static_cast<const SerializedMessagePipeDispatcher*>(source);
+  scoped_refptr<MessagePipe> message_pipe =
+      channel->PassIncomingMessagePipe(s->receiver_endpoint_id);
+  if (!message_pipe.get()) {
+    LOG(ERROR) << "Failed to deserialize message pipe dispatcher (ID = "
+               << s->receiver_endpoint_id << ")";
     return scoped_refptr<MessagePipeDispatcher>();
   }
-  ChannelEndpointId local_id = channel->AttachEndpoint(channel_endpoint);
-  if (!local_id.is_valid()) {
-    LOG(ERROR) << "Failed to deserialize message pipe dispatcher (failed to "
-                  "attach; remote ID = " << remote_id << ")";
-    return scoped_refptr<MessagePipeDispatcher>();
-  }
-  DVLOG(2) << "Deserializing message pipe dispatcher (remote ID = " << remote_id
-           << ", new local ID = " << local_id << ")";
 
-  channel->RunEndpoint(channel_endpoint, remote_id);
-
-  // TODO(vtl): FIXME -- Need some error handling here.
-  channel->RunRemoteMessagePipeEndpoint(local_id, remote_id);
+  DVLOG(2) << "Deserializing message pipe dispatcher (new local ID = "
+           << s->receiver_endpoint_id << ")";
+  scoped_refptr<MessagePipeDispatcher> dispatcher(
+      new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions));
+  dispatcher->Init(message_pipe, 0);
   return dispatcher;
 }
 
@@ -243,22 +235,15 @@
     embedder::PlatformHandleVector* /*platform_handles*/) {
   DCHECK(HasOneRef());  // Only one ref => no need to take the lock.
 
+  SerializedMessagePipeDispatcher* s =
+      static_cast<SerializedMessagePipeDispatcher*>(destination);
+
   // Convert the local endpoint to a proxy endpoint (moving the message queue)
   // and attach it to the channel.
-  ChannelEndpointId endpoint_id =
-      channel->AttachEndpoint(message_pipe_->ConvertLocalToProxy(port_));
-  // Note: It's okay to get an invalid endpoint ID. (It's possible that the
-  // other endpoint -- the one that we're not sending -- was closed in the
-  // intervening time.) In that case, we need to deserialize a "dead" message
-  // pipe dispatcher on the other end. (Note that this is different from just
-  // producing |MOJO_HANDLE_INVALID|.)
-  DVLOG(2) << "Serializing message pipe dispatcher (local ID = " << endpoint_id
-           << ")";
-
-  // We now have a local ID. Before we can run the proxy endpoint, we need to
-  // get an ack back from the other side with the remote ID.
-  static_cast<SerializedMessagePipeDispatcher*>(destination)->endpoint_id =
-      endpoint_id;
+  s->receiver_endpoint_id = channel->AttachAndRunEndpoint(
+      message_pipe_->ConvertLocalToProxy(port_), false);
+  DVLOG(2) << "Serializing message pipe dispatcher (remote ID = "
+           << s->receiver_endpoint_id << ")";
 
   message_pipe_ = nullptr;
   port_ = kInvalidPort;
diff --git a/mojo/examples/apptest/example_apptest.cc b/mojo/examples/apptest/example_apptest.cc
index c754c85..dba00e0 100644
--- a/mojo/examples/apptest/example_apptest.cc
+++ b/mojo/examples/apptest/example_apptest.cc
@@ -18,32 +18,83 @@
 #include "mojo/public/cpp/utility/run_loop.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace {
-
-// TODO(msw): Remove this once we can get ApplicationImpl from TLS.
-mojo::ApplicationImpl* g_application_impl_hack = NULL;
-
-}  // namespace
-
 namespace mojo {
 
 namespace {
 
-class ExampleApptest : public testing::Test {
+// This global shell handle is needed for repeated use by test applications.
+MessagePipeHandle g_shell_message_pipe_handle_hack;
+
+// Apptest is a GTEST base class for application testing executed in mojo_shell.
+class Apptest : public testing::Test {
  public:
-  ExampleApptest() {
-    g_application_impl_hack->ConnectToService("mojo:mojo_example_service",
-                                              &example_service_);
-    example_service_.set_client(&example_client_);
+  explicit Apptest(Array<String> args)
+      : args_(args.Pass()),
+        application_impl_(nullptr) {
+  }
+  virtual ~Apptest() override {}
+
+ protected:
+  ApplicationImpl* application_impl() { return application_impl_; }
+
+  // Get the ApplicationDelegate for the application to be tested.
+  virtual ApplicationDelegate* GetApplicationDelegate() = 0;
+
+  // testing::Test:
+  virtual void SetUp() override {
+    // New applications are constructed for each test to avoid persisting state.
+    MOJO_CHECK(g_shell_message_pipe_handle_hack.is_valid());
+    application_impl_ = new ApplicationImpl(
+        GetApplicationDelegate(),
+        MakeScopedHandle(g_shell_message_pipe_handle_hack));
+
+    // Fake application initialization with the given command line arguments.
+    application_impl_->Initialize(args_.Clone());
+  }
+  virtual void TearDown() override {
+    g_shell_message_pipe_handle_hack =
+        application_impl_->UnbindShell().release();
+    delete application_impl_;
   }
 
+ private:
+  // The command line arguments supplied to each test application instance.
+  Array<String> args_;
+
+  // The application implementation instance, reconstructed for each test.
+  ApplicationImpl* application_impl_;
+
+  // A run loop is needed for ApplicationImpl initialization and communication.
+  RunLoop run_loop_;
+
+  MOJO_DISALLOW_COPY_AND_ASSIGN(Apptest);
+};
+
+// ExampleApptest exemplifies Apptest's application testing pattern.
+class ExampleApptest : public Apptest {
+ public:
+  // TODO(msw): Exemplify the use of actual command line arguments.
+  ExampleApptest() : Apptest(Array<String>()) {}
   virtual ~ExampleApptest() override {}
 
  protected:
+  // Apptest:
+  virtual ApplicationDelegate* GetApplicationDelegate() override {
+    return &example_client_application_;
+  }
+  virtual void SetUp() override {
+    Apptest::SetUp();
+    application_impl()->ConnectToService("mojo:mojo_example_service",
+                                         &example_service_);
+    example_service_.set_client(&example_client_);
+  }
+
   ExampleServicePtr example_service_;
   ExampleClientImpl example_client_;
 
  private:
+  ExampleClientApplication example_client_application_;
+
   MOJO_DISALLOW_COPY_AND_ASSIGN(ExampleApptest);
 };
 
@@ -64,9 +115,9 @@
 }
 
 template <typename T>
-struct SetAndQuit : public Callback<void()>::Runnable {
-  SetAndQuit(T* val, T result) : val_(val), result_(result) {}
-  virtual ~SetAndQuit() {}
+struct SetCallback : public Callback<void()>::Runnable {
+  SetCallback(T* val, T result) : val_(val), result_(result) {}
+  virtual ~SetCallback() {}
   virtual void Run() const override { *val_ = result_; }
   T* val_;
   T result_;
@@ -75,7 +126,7 @@
 TEST_F(ExampleApptest, RunCallbackViaService) {
   // Test ExampleService callback functionality.
   bool was_run = false;
-  example_service_->RunCallback(SetAndQuit<bool>(&was_run, true));
+  example_service_->RunCallback(SetCallback<bool>(&was_run, true));
   EXPECT_TRUE(example_service_.WaitForIncomingMethodCall());
   EXPECT_TRUE(was_run);
 }
@@ -85,19 +136,23 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle shell_handle) {
-  mojo::Environment env;
-  // TODO(msw): Destroy this ambient RunLoop before running tests.
-  //            Need to CancelWait() / PassMessagePipe() from the ShellPtr?
-  mojo::RunLoop loop;
-  mojo::ApplicationDelegate* delegate = new mojo::ExampleClientApplication();
-  mojo::ApplicationImpl app(delegate, shell_handle);
-  g_application_impl_hack = &app;
-  MOJO_CHECK(app.WaitForInitialize());
+  mojo::Environment environment;
 
   {
+    // This RunLoop is used for init, and then destroyed before running tests.
+    mojo::RunLoop run_loop;
+
+    // Construct an ApplicationImpl just for the GTEST commandline arguments.
+    // GTEST command line arguments are supported amid application arguments:
+    //   mojo_shell 'mojo:mojo_example_apptest arg1 --gtest_filter=foo arg2'
+    mojo::ApplicationDelegate dummy_application_delegate;
+    mojo::ApplicationImpl app(&dummy_application_delegate, shell_handle);
+    MOJO_CHECK(app.WaitForInitialize());
+
     // InitGoogleTest expects (argc + 1) elements, including a terminating NULL.
     // It also removes GTEST arguments from |argv| and updates the |argc| count.
-    const mojo::Array<mojo::String>& args = app.args();
+    // TODO(msw): Provide tests access to these actual command line arguments.
+    const std::vector<std::string>& args = app.args();
     MOJO_CHECK(args.size() < INT_MAX);
     int argc = static_cast<int>(args.size());
     std::vector<char*> argv(argc + 1);
@@ -105,10 +160,14 @@
       argv[i] = const_cast<char*>(args[i].data());
     argv[argc] = NULL;
     testing::InitGoogleTest(&argc, &argv[0]);
+    mojo::g_shell_message_pipe_handle_hack = app.UnbindShell().release();
   }
 
   mojo_ignore_result(RUN_ALL_TESTS());
 
-  delete delegate;
+  MojoResult result = MojoClose(mojo::g_shell_message_pipe_handle_hack.value());
+  MOJO_ALLOW_UNUSED_LOCAL(result);
+  assert(result == MOJO_RESULT_OK);
+
   return MOJO_RESULT_OK;
 }
diff --git a/mojo/examples/http_server/BUILD.gn b/mojo/examples/http_server/BUILD.gn
index d4013c4..8388a84 100644
--- a/mojo/examples/http_server/BUILD.gn
+++ b/mojo/examples/http_server/BUILD.gn
@@ -11,6 +11,7 @@
 
   deps = [
     "//base",
+    "//mojo/common",
     "//mojo/public/c/system:for_shared_library",
     "//mojo/public/cpp/application:standalone",
     "//mojo/public/cpp/bindings",
diff --git a/mojo/examples/http_server/http_server.cc b/mojo/examples/http_server/http_server.cc
index cc8df20..389c953 100644
--- a/mojo/examples/http_server/http_server.cc
+++ b/mojo/examples/http_server/http_server.cc
@@ -3,17 +3,100 @@
 // found in the LICENSE file.
 
 #include <stdio.h>
+#include <arpa/inet.h>
 
 #include "base/bind.h"
+#include "base/memory/weak_ptr.h"
+#include "mojo/common/handle_watcher.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/application/application_impl.h"
 #include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/system/data_pipe.h"
 #include "mojo/services/public/interfaces/network/network_service.mojom.h"
 
 namespace mojo {
 namespace examples {
 
+// The canned response that this server replies to each request with.
+const char kResponse[] =
+    "HTTP/1.0 200 OK\n"
+    "Content-Type: text/html; charset=utf-8\n"
+    "\n"
+    "Hello, world\n";
+
+// Represents one connection to a client. This connection will manage its own
+// lifetime and will delete itself when the connection is closed.
+class Connection {
+ public:
+  Connection(TCPConnectedSocketPtr conn,
+             ScopedDataPipeProducerHandle sender,
+             ScopedDataPipeConsumerHandle receiver)
+      : connection_(conn.Pass()),
+        sender_(sender.Pass()),
+        receiver_(receiver.Pass()),
+        weak_ptr_factory_(this),
+        response_(kResponse),
+        response_offset_(0) {
+    WriteMore();
+  }
+
+  ~Connection() {
+  }
+
+ private:
+  void OnSenderReady(MojoResult result) {
+    WriteMore();
+  }
+
+  void WriteMore() {
+    uint32_t num_bytes =
+        static_cast<uint32_t>(response_.size() - response_offset_);
+    // TODO(brettw) write chunks (ideally capped at some small size to
+    // illustrate how it works even in the presence of our relatively small
+    // reply) rather than specifying ALL_OR_NONE. See below.
+    MojoResult result = WriteDataRaw(
+        sender_.get(), &response_[response_offset_], &num_bytes,
+        MOJO_WRITE_DATA_FLAG_ALL_OR_NONE);
+    if (result == MOJO_RESULT_SHOULD_WAIT) {
+      num_bytes = 0;
+    } else if (result != MOJO_RESULT_OK) {
+      printf("Error writing to pipe.\n");
+      delete this;
+      return;
+    }
+
+    response_offset_ += num_bytes;
+
+    if (response_offset_ == response_.size()) {
+      // Connection complete.
+      delete this;
+      return;
+    }
+
+    // Wait for sender to be writable.
+    // TODO(brettw) we won't actually get here since we ALL_OR_NONE was
+    // specified above. This call won't work because the message loop is not a
+    // Chromium message loop. Instead, we probably need to use
+    // Environment::GetDefaultAsyncWaiter to wait on the handles and remove the
+    // ALL_OR_NONE flag.
+    sender_watcher_.Start(
+        sender_.get(),
+        MOJO_HANDLE_SIGNAL_WRITABLE, MOJO_DEADLINE_INDEFINITE,
+        base::Bind(&Connection::OnSenderReady, weak_ptr_factory_.GetWeakPtr()));
+  }
+
+  TCPConnectedSocketPtr connection_;
+  ScopedDataPipeProducerHandle sender_;
+  ScopedDataPipeConsumerHandle receiver_;
+
+  base::WeakPtrFactory<Connection> weak_ptr_factory_;
+  common::HandleWatcher sender_watcher_;
+
+  std::string response_;
+  size_t response_offset_;
+};
+
 class HttpServerApp : public ApplicationDelegate {
  public:
   virtual void Initialize(ApplicationImpl* app) override {
@@ -22,26 +105,60 @@
   }
 
  private:
-  void OnListeningStarted(NetworkErrorPtr err) {
-  }
-
   void OnSocketBound(NetworkErrorPtr err, NetAddressPtr bound_address) {
     if (err->code != 0) {
       printf("Bound err = %d\n", err->code);
       return;
     }
 
-    printf("Got address = %d.%d.%d.%d:%d\n",
+    printf("Got address %d.%d.%d.%d:%d\n",
            (int)bound_address->ipv4->addr[0],
            (int)bound_address->ipv4->addr[1],
            (int)bound_address->ipv4->addr[2],
            (int)bound_address->ipv4->addr[3],
            (int)bound_address->ipv4->port);
+  }
 
-    bound_socket_->StartListening(
-        GetProxy(&server_socket_),
-        base::Bind(&HttpServerApp::OnListeningStarted,
-                   base::Unretained(this)));
+  void OnSocketListening(NetworkErrorPtr err) {
+    if (err->code != 0) {
+      printf("Listen err = %d\n", err->code);
+      return;
+    }
+    printf("Waiting for incoming connections...\n");
+  }
+
+  void OnConnectionAccepted(NetworkErrorPtr err, NetAddressPtr remote_address) {
+    if (err->code != 0) {
+      printf("Accepted socket error = %d\n", err->code);
+      return;
+    }
+
+    new Connection(pending_connected_socket_.Pass(),
+                   pending_send_handle_.Pass(),
+                   pending_receive_handle_.Pass());
+
+    // Ready for another connection.
+    WaitForNextConnection();
+  }
+
+  void WaitForNextConnection() {
+    // Need two pipes (one for each direction).
+    ScopedDataPipeConsumerHandle send_consumer_handle;
+    MojoResult result = CreateDataPipe(
+        nullptr, &pending_send_handle_, &send_consumer_handle);
+    assert(result == MOJO_RESULT_OK);
+
+    ScopedDataPipeProducerHandle receive_producer_handle;
+    result = CreateDataPipe(
+        nullptr, &receive_producer_handle, &pending_receive_handle_);
+    assert(result == MOJO_RESULT_OK);
+    MOJO_ALLOW_UNUSED_LOCAL(result);
+
+    server_socket_->Accept(send_consumer_handle.Pass(),
+                           receive_producer_handle.Pass(),
+                           GetProxy(&pending_connected_socket_),
+                           base::Bind(&HttpServerApp::OnConnectionAccepted,
+                                      base::Unretained(this)));
   }
 
   void Start() {
@@ -49,20 +166,32 @@
     net_address->family = NET_ADDRESS_FAMILY_IPV4;
     net_address->ipv4 = NetAddressIPv4::New();
     net_address->ipv4->addr.resize(4);
-    net_address->ipv4->addr[0] = 0;
+    net_address->ipv4->addr[0] = 127;
     net_address->ipv4->addr[1] = 0;
     net_address->ipv4->addr[2] = 0;
-    net_address->ipv4->addr[3] = 0;
+    net_address->ipv4->addr[3] = 1;
+    net_address->ipv4->port = 0;
 
+    // Note that we can start using the proxies right away even thought the
+    // callbacks have not been called yet. If a previous step fails, they'll
+    // all fail.
     network_service_->CreateTCPBoundSocket(
         net_address.Pass(),
         GetProxy(&bound_socket_),
         base::Bind(&HttpServerApp::OnSocketBound, base::Unretained(this)));
+    bound_socket_->StartListening(GetProxy(
+        &server_socket_),
+        base::Bind(&HttpServerApp::OnSocketListening, base::Unretained(this)));
+    WaitForNextConnection();
   }
 
   NetworkServicePtr network_service_;
   TCPBoundSocketPtr bound_socket_;
   TCPServerSocketPtr server_socket_;
+
+  ScopedDataPipeProducerHandle pending_send_handle_;
+  ScopedDataPipeConsumerHandle pending_receive_handle_;
+  TCPConnectedSocketPtr pending_connected_socket_;
 };
 
 }  // namespace examples
diff --git a/mojo/examples/wget/wget.cc b/mojo/examples/wget/wget.cc
index 09c4f7b..1efaa2d 100644
--- a/mojo/examples/wget/wget.cc
+++ b/mojo/examples/wget/wget.cc
@@ -76,8 +76,8 @@
   }
 
  private:
-  void Start(const Array<String>& args) {
-    std::string url((args.size() > 1) ? args[1].get() : PromptForURL());
+  void Start(const std::vector<std::string>& args) {
+    std::string url((args.size() > 1) ? args[1] : PromptForURL());
     printf("Loading: %s\n", url.c_str());
 
     network_service_->CreateURLLoader(GetProxy(&url_loader_));
diff --git a/mojo/examples/window_manager/debug_panel.cc b/mojo/examples/window_manager/debug_panel.cc
index 7d86cfe..7551fb4 100644
--- a/mojo/examples/window_manager/debug_panel.cc
+++ b/mojo/examples/window_manager/debug_panel.cc
@@ -99,7 +99,7 @@
     navigation_target_new_,
     navigation_target_source_,
   };
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(radios); ++i) {
+  for (size_t i = 0; i < arraysize(radios); ++i) {
     radios[i]->SetBounds(kControlBorderInset, y, w,
                          radios[i]->GetPreferredSize().height());
     y += radios[i]->height();
@@ -111,7 +111,7 @@
     close_last_,
     cross_app_,
   };
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(buttons); ++i) {
+  for (size_t i = 0; i < arraysize(buttons); ++i) {
     buttons[i]->SetBounds(kControlBorderInset, y, w,
                           buttons[i]->GetPreferredSize().height());
     y += buttons[i]->height();
diff --git a/mojo/public/cpp/application/application_impl.h b/mojo/public/cpp/application/application_impl.h
index b647427..e5b27be 100644
--- a/mojo/public/cpp/application/application_impl.h
+++ b/mojo/public/cpp/application/application_impl.h
@@ -60,7 +60,7 @@
   Shell* shell() const { return shell_.get(); }
 
   // Returns any initial configuration arguments, passed by the Shell.
-  const Array<String>& args() { return args_; }
+  const std::vector<std::string>& args() const { return args_; }
 
   // Establishes a new connection to an application. Caller does not own.
   ApplicationConnection* ConnectToApplication(const String& application_url);
@@ -76,6 +76,12 @@
   // Wait for the ShellPtr's Initialize message.
   bool WaitForInitialize();
 
+  // Unbind the shell from this application and return its handle.
+  ScopedMessagePipeHandle UnbindShell();
+
+  // Application implementation.
+  virtual void Initialize(Array<String> args) override;
+
  private:
   class ShellPtrWatcher;
 
@@ -90,7 +96,6 @@
   static void Terminate();
 
   // Application implementation.
-  virtual void Initialize(Array<String> args) override;
   virtual void AcceptConnection(const String& requestor_url,
                                 ServiceProviderPtr provider) override;
 
@@ -102,7 +107,7 @@
   ApplicationDelegate* delegate_;
   ShellPtr shell_;
   ShellPtrWatcher* shell_watch_;
-  Array<String> args_;
+  std::vector<std::string> args_;
 
   MOJO_DISALLOW_COPY_AND_ASSIGN(ApplicationImpl);
 };
diff --git a/mojo/public/cpp/application/lib/application_impl.cc b/mojo/public/cpp/application/lib/application_impl.cc
index e237aef..6a5560d 100644
--- a/mojo/public/cpp/application/lib/application_impl.cc
+++ b/mojo/public/cpp/application/lib/application_impl.cc
@@ -54,13 +54,6 @@
   delete shell_watch_;
 }
 
-void ApplicationImpl::Initialize(Array<String> args) {
-  MOJO_CHECK(!initialized_);
-  initialized_ = true;
-  args_ = args.Pass();
-  delegate_->Initialize(this);
-}
-
 ApplicationConnection* ApplicationImpl::ConnectToApplication(
     const String& application_url) {
   MOJO_CHECK(initialized_);
@@ -84,6 +77,17 @@
   return result;
 }
 
+ScopedMessagePipeHandle ApplicationImpl::UnbindShell() {
+  return shell_.PassMessagePipe();
+}
+
+void ApplicationImpl::Initialize(Array<String> args) {
+  MOJO_CHECK(!initialized_);
+  initialized_ = true;
+  args_ = args.To<std::vector<std::string>>();
+  delegate_->Initialize(this);
+}
+
 void ApplicationImpl::BindShell(ScopedMessagePipeHandle shell_handle) {
   shell_watch_ = new ShellPtrWatcher(this);
   shell_.Bind(shell_handle.Pass());
diff --git a/mojo/public/cpp/bindings/lib/array_serialization.h b/mojo/public/cpp/bindings/lib/array_serialization.h
index e73553d..eacf298 100644
--- a/mojo/public/cpp/bindings/lib/array_serialization.h
+++ b/mojo/public/cpp/bindings/lib/array_serialization.h
@@ -63,11 +63,13 @@
     static_assert((IsSame<ElementValidateParams, NoValidateParams>::value),
                   "Primitive type should not have array validate params");
 
-    memcpy(output->storage(), &input.storage()[0], input.size() * sizeof(E));
+    if (input.size())
+      memcpy(output->storage(), &input.storage()[0], input.size() * sizeof(E));
   }
   static void DeserializeElements(Array_Data<F>* input, Array<E>* output) {
     std::vector<E> result(input->size());
-    memcpy(&result[0], input->storage(), input->size() * sizeof(E));
+    if (input->size())
+      memcpy(&result[0], input->storage(), input->size() * sizeof(E));
     output->Swap(&result);
   }
 };
diff --git a/mojo/public/cpp/bindings/tests/array_unittest.cc b/mojo/public/cpp/bindings/tests/array_unittest.cc
index 133fa8b..0b083c7 100644
--- a/mojo/public/cpp/bindings/tests/array_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/array_unittest.cc
@@ -171,6 +171,21 @@
     EXPECT_EQ(static_cast<int32_t>(i), array2[i]);
 }
 
+TEST_F(ArrayTest, Serialization_EmptyArrayOfPOD) {
+  Array<int32_t> array(0);
+  size_t size = GetSerializedSize_(array);
+  EXPECT_EQ(8U, size);
+
+  FixedBuffer buf(size);
+  Array_Data<int32_t>* data;
+  SerializeArray_<ArrayValidateParams<0, false, NoValidateParams>>(
+      array.Pass(), &buf, &data);
+
+  Array<int32_t> array2;
+  Deserialize_(data, &array2);
+  EXPECT_EQ(0U, array2.size());
+}
+
 TEST_F(ArrayTest, Serialization_ArrayOfArrayOfPOD) {
   Array<Array<int32_t>> array(2);
   for (size_t j = 0; j < array.size(); ++j) {
diff --git a/mojo/services/html_viewer/blink_input_events_type_converters.cc b/mojo/services/html_viewer/blink_input_events_type_converters.cc
index ff1a2cb..4f88656 100644
--- a/mojo/services/html_viewer/blink_input_events_type_converters.cc
+++ b/mojo/services/html_viewer/blink_input_events_type_converters.cc
@@ -107,7 +107,7 @@
 
   web_event->clickCount = GetClickCount(event->flags);
 
-  return web_event.PassAs<blink::WebInputEvent>();
+  return web_event.Pass();
 }
 
 scoped_ptr<blink::WebInputEvent> BuildWebKeyboardEvent(
@@ -139,7 +139,7 @@
   web_event->unmodifiedText[0] = event->key_data->unmodified_text;
 
   web_event->setKeyIdentifierFromWindowsKeyCode();
-  return web_event.PassAs<blink::WebInputEvent>();
+  return web_event.Pass();
 }
 
 scoped_ptr<blink::WebInputEvent> BuildWebMouseWheelEventFrom(
@@ -173,7 +173,7 @@
   web_event->wheelTicksX = web_event->deltaX / kPixelsPerTick;
   web_event->wheelTicksY = web_event->deltaY / kPixelsPerTick;
 
-  return web_event.PassAs<blink::WebInputEvent>();
+  return web_event.Pass();
 }
 
 }  // namespace
diff --git a/mojo/services/html_viewer/webmimeregistry_impl.cc b/mojo/services/html_viewer/webmimeregistry_impl.cc
index 2faac17..f054d5d 100644
--- a/mojo/services/html_viewer/webmimeregistry_impl.cc
+++ b/mojo/services/html_viewer/webmimeregistry_impl.cc
@@ -8,6 +8,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "media/filters/stream_parser_factory.h"
 #include "net/base/mime_util.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 
@@ -89,8 +90,14 @@
 bool WebMimeRegistryImpl::supportsMediaSourceMIMEType(
     const blink::WebString& mime_type,
     const blink::WebString& codecs) {
-  NOTIMPLEMENTED();
-  return false;
+  const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type);
+  if (mime_type_ascii.empty())
+    return false;
+
+  std::vector<std::string> parsed_codec_ids;
+  net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codec_ids, false);
+  return media::StreamParserFactory::IsTypeSupported(mime_type_ascii,
+                                                     parsed_codec_ids);
 }
 
 bool WebMimeRegistryImpl::supportsEncryptedMediaMIMEType(
diff --git a/mojo/services/native_viewport/main.cc b/mojo/services/native_viewport/main.cc
index 7db4705..3271cc4 100644
--- a/mojo/services/native_viewport/main.cc
+++ b/mojo/services/native_viewport/main.cc
@@ -32,13 +32,13 @@
 
  private:
   bool HasArg(const std::string& arg) {
-    return std::find(args_.begin(), args_.end(), arg) != args_.end();
+    const auto& args = app_->args();
+    return std::find(args.begin(), args.end(), arg) != args.end();
   }
 
   // ApplicationDelegate implementation.
   virtual void Initialize(ApplicationImpl* application) override {
     app_ = application;
-    args_ = application->args().To<std::vector<std::string> >();
 
 #if !defined(COMPONENT_BUILD)
     if (HasArg(kUseTestConfig))
@@ -70,7 +70,6 @@
   }
 
   ApplicationImpl* app_;
-  std::vector<std::string> args_;
   scoped_refptr<gfx::GLShareGroup> share_group_;
   scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager_;
   bool is_headless_;
diff --git a/mojo/services/network/network_service_impl.cc b/mojo/services/network/network_service_impl.cc
index a622322..6f2f550 100644
--- a/mojo/services/network/network_service_impl.cc
+++ b/mojo/services/network/network_service_impl.cc
@@ -14,19 +14,6 @@
 
 namespace mojo {
 
-namespace {
-
-// Allows a Callback<NetworkErrorPtr, NetAddressPtr> to be called by a
-// Callback<NetworkErrorPtr> when the address is already known.
-void BoundAddressCallbackAdapter(
-    const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback,
-    NetAddressPtr address,
-    NetworkErrorPtr err) {
-  callback.Run(err.Pass(), address.Pass());
-}
-
-}  // namespace
-
 NetworkServiceImpl::NetworkServiceImpl(ApplicationConnection* connection,
                                        NetworkContext* context)
     : context_(context),
@@ -70,19 +57,10 @@
     ScopedDataPipeProducerHandle receive_stream,
     InterfaceRequest<TCPConnectedSocket> client_socket,
     const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
-  TCPBoundSocketImpl bound_socket;
-  int net_error = bound_socket.Bind(NetAddressPtr());
-  if (net_error != net::OK) {
-    callback.Run(MakeNetworkError(net_error), NetAddressPtr());
-    return;
-  }
-
-  bound_socket.Connect(
-      remote_address.Pass(), send_stream.Pass(), receive_stream.Pass(),
-      client_socket.Pass(),
-      base::Bind(&BoundAddressCallbackAdapter,
-                 callback,
-                 base::Passed(bound_socket.GetLocalAddress().Pass())));
+  // TODO(brettw) implement this. We need to know what type of socket to use
+  // so we can create the right one (i.e. to pass to TCPSocket::Open) before
+  // doing the connect.
+  callback.Run(MakeNetworkError(net::ERR_NOT_IMPLEMENTED), NetAddressPtr());
 }
 
 void NetworkServiceImpl::CreateUDPSocket(InterfaceRequest<UDPSocket> socket) {
diff --git a/mojo/services/network/tcp_bound_socket_impl.cc b/mojo/services/network/tcp_bound_socket_impl.cc
index 6660520..8272b22 100644
--- a/mojo/services/network/tcp_bound_socket_impl.cc
+++ b/mojo/services/network/tcp_bound_socket_impl.cc
@@ -19,10 +19,7 @@
 }
 
 int TCPBoundSocketImpl::Bind(NetAddressPtr local_address) {
-  // The local address might be null to match any port.
-  net::IPEndPoint end_point;
-  if (!local_address.is_null())
-    end_point = local_address.To<net::IPEndPoint>();
+  net::IPEndPoint end_point = local_address.To<net::IPEndPoint>();
 
   socket_.reset(new net::TCPSocket(NULL, net::NetLog::Source()));
   int result = socket_->Open(end_point.GetFamily());
@@ -50,7 +47,7 @@
 void TCPBoundSocketImpl::StartListening(
     InterfaceRequest<TCPServerSocket> server,
     const Callback<void(NetworkErrorPtr)>& callback) {
-  if (!socket_) {
+  if (!socket_ || pending_connect_socket_.is_pending()) {
     // A bound socket will only be returned to the caller after binding
     // succeeds, so if the socket doesn't exist, that means ownership was
     // already passed to a server socket or client socket.
@@ -76,7 +73,49 @@
     ScopedDataPipeProducerHandle receive_stream,
     InterfaceRequest<TCPConnectedSocket> client_socket,
     const Callback<void(NetworkErrorPtr)>& callback) {
-  // TODO(brettw) write this.
+  if (!socket_ || pending_connect_socket_.is_pending()) {
+    // A bound socket will only be returned to the caller after binding
+    // succeeds, so if the socket doesn't exist, that means ownership was
+    // already passed to a server socket or client socket.
+    callback.Run(MakeNetworkError(net::ERR_FAILED));
+    return;
+  }
+
+  net::IPEndPoint end_point = remote_address.To<net::IPEndPoint>();
+
+  pending_connect_send_stream_ = send_stream.Pass();
+  pending_connect_receive_stream_ = receive_stream.Pass();
+  pending_connect_socket_ = client_socket.Pass();
+  pending_connect_callback_ = callback;
+  int result = socket_->Connect(
+      end_point,
+      base::Bind(&TCPBoundSocketImpl::OnConnected, base::Unretained(this)));
+  if (result == net::OK) {
+    OnConnected(result);
+  } else if (result != net::ERR_IO_PENDING) {
+    // Error occurred.
+    pending_connect_send_stream_.reset();
+    pending_connect_receive_stream_.reset();
+    pending_connect_socket_ = InterfaceRequest<TCPConnectedSocket>();
+    pending_connect_callback_ = Callback<void(NetworkErrorPtr)>();
+    callback.Run(MakeNetworkError(result));
+  }
+}
+
+void TCPBoundSocketImpl::OnConnected(int result) {
+  if (result == net::OK) {
+    BindToRequest(new TCPConnectedSocketImpl(
+                      socket_.Pass(),
+                      pending_connect_send_stream_.Pass(),
+                      pending_connect_receive_stream_.Pass()),
+                  &pending_connect_socket_);
+  } else {
+    pending_connect_send_stream_.reset();
+    pending_connect_receive_stream_.reset();
+    pending_connect_socket_ = InterfaceRequest<TCPConnectedSocket>();
+  }
+  pending_connect_callback_.Run(MakeNetworkError(result));
+  pending_connect_callback_ = Callback<void(NetworkErrorPtr)>();
 }
 
 }  // namespace mojo
diff --git a/mojo/services/network/tcp_bound_socket_impl.h b/mojo/services/network/tcp_bound_socket_impl.h
index 5fb1bf3..39a78f6 100644
--- a/mojo/services/network/tcp_bound_socket_impl.h
+++ b/mojo/services/network/tcp_bound_socket_impl.h
@@ -17,6 +17,9 @@
   TCPBoundSocketImpl();
   virtual ~TCPBoundSocketImpl();
 
+  // Does the actual binding. Returns a net error code. On net::OK, the bound
+  // socket will be ready to use and send back to the client. On failure, this
+  // object should be destroyed and no longer used.
   int Bind(NetAddressPtr local_address);
 
   // Returns the local address associated with this socket. This should only
@@ -35,7 +38,15 @@
       const Callback<void(NetworkErrorPtr)>& callback) override;
 
  private:
+  void OnConnected(int result);
+
   scoped_ptr<net::TCPSocket> socket_;
+
+  // Valid when waiting for a connect callback.
+  ScopedDataPipeConsumerHandle pending_connect_send_stream_;
+  ScopedDataPipeProducerHandle pending_connect_receive_stream_;
+  InterfaceRequest<TCPConnectedSocket> pending_connect_socket_;
+  Callback<void(NetworkErrorPtr)> pending_connect_callback_;
 };
 
 }  // namespace mojo
diff --git a/mojo/services/network/tcp_connected_socket_impl.cc b/mojo/services/network/tcp_connected_socket_impl.cc
index 0c6f2eb..ecd174c 100644
--- a/mojo/services/network/tcp_connected_socket_impl.cc
+++ b/mojo/services/network/tcp_connected_socket_impl.cc
@@ -4,6 +4,10 @@
 
 #include "mojo/services/network/tcp_connected_socket_impl.h"
 
+#include "base/message_loop/message_loop.h"
+#include "mojo/services/network/net_adapters.h"
+#include "net/base/net_errors.h"
+
 namespace mojo {
 
 TCPConnectedSocketImpl::TCPConnectedSocketImpl(
@@ -12,10 +16,148 @@
     ScopedDataPipeProducerHandle receive_stream)
     : socket_(socket.Pass()),
       send_stream_(send_stream.Pass()),
-      receive_stream_(receive_stream.Pass()) {
+      receive_stream_(receive_stream.Pass()),
+      weak_ptr_factory_(this) {
+  // Queue up async communication.
+  ReceiveMore();
+  SendMore();
 }
 
 TCPConnectedSocketImpl::~TCPConnectedSocketImpl() {
 }
 
+void TCPConnectedSocketImpl::ReceiveMore() {
+  DCHECK(!pending_receive_.get());
+
+  uint32_t num_bytes;
+  MojoResult result = NetToMojoPendingBuffer::BeginWrite(
+      &receive_stream_, &pending_receive_, &num_bytes);
+  if (result == MOJO_RESULT_SHOULD_WAIT) {
+    // The pipe is full. We need to wait for it to have more space.
+    receive_handle_watcher_.Start(
+        receive_stream_.get(),
+        MOJO_HANDLE_SIGNAL_WRITABLE, MOJO_DEADLINE_INDEFINITE,
+        base::Bind(&TCPConnectedSocketImpl::OnReceiveStreamReady,
+                   weak_ptr_factory_.GetWeakPtr()));
+    return;
+  } else if (result != MOJO_RESULT_OK) {
+    // The receive stream is in a bad state.
+    // TODO(darin): How should this be communicated to our client?
+    socket_->Close();
+    return;
+  }
+
+  // Mojo is ready for the receive.
+  CHECK_GT(static_cast<uint32_t>(std::numeric_limits<int>::max()), num_bytes);
+  scoped_refptr<net::IOBuffer> buf(
+      new NetToMojoIOBuffer(pending_receive_.get()));
+  int read_result = socket_->Read(
+      buf.get(), static_cast<int>(num_bytes),
+      base::Bind(&TCPConnectedSocketImpl::DidReceive, base::Unretained(this),
+                 false));
+  if (read_result == net::ERR_IO_PENDING) {
+    // Pending I/O, wait for result in DidReceive().
+  } else if (read_result >= 0) {
+    // Synchronous data ready.
+    DidReceive(true, read_result);
+  } else {
+    // Some kind of error.
+    // TODO(brettw) notify caller of error.
+    socket_->Close();
+  }
+}
+
+void TCPConnectedSocketImpl::OnReceiveStreamReady(MojoResult result) {
+  // TODO(darin): Handle a bad |result| value.
+  ReceiveMore();
+}
+
+void TCPConnectedSocketImpl::DidReceive(bool completed_synchronously,
+                                        int result) {
+  if (result < 0) {
+    // Error.
+    pending_receive_ = NULL;  // Closes the pipe (owned by the pending write).
+    // TODO(brettw) notify the caller of an error?
+    socket_->Close();
+    return;
+  }
+
+  receive_stream_ = pending_receive_->Complete(result);
+  pending_receive_ = NULL;
+
+  // Schedule more reading.
+  if (completed_synchronously) {
+    // Don't recursively call ReceiveMore if this is a sync read.
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&TCPConnectedSocketImpl::ReceiveMore,
+                   weak_ptr_factory_.GetWeakPtr()));
+  } else {
+    ReceiveMore();
+  }
+}
+
+void TCPConnectedSocketImpl::SendMore() {
+  uint32_t num_bytes = 0;
+  MojoResult result = MojoToNetPendingBuffer::BeginRead(
+      &send_stream_, &pending_send_, &num_bytes);
+  if (result == MOJO_RESULT_SHOULD_WAIT) {
+    // Data not ready, wait for it.
+    send_handle_watcher_.Start(
+        send_stream_.get(),
+        MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
+        base::Bind(&TCPConnectedSocketImpl::OnSendStreamReady,
+                   weak_ptr_factory_.GetWeakPtr()));
+    return;
+  } else if (result != MOJO_RESULT_OK) {
+    // TODO(brettw) notify caller of error.
+    socket_->Close();
+    return;
+  }
+
+  // Got a buffer from Mojo, give it to the socket. Note that the sockets may
+  // do partial writes.
+  scoped_refptr<net::IOBuffer> buf(new MojoToNetIOBuffer(pending_send_.get()));
+  int write_result = socket_->Write(
+      buf.get(), static_cast<int>(num_bytes),
+      base::Bind(&TCPConnectedSocketImpl::DidSend, base::Unretained(this),
+                 false));
+  if (write_result == net::ERR_IO_PENDING) {
+    // Pending I/O, wait for result in DidSend().
+  } else if (write_result >= 0) {
+    // Synchronous data consumed.
+    DidSend(true, write_result);
+  }
+}
+
+void TCPConnectedSocketImpl::OnSendStreamReady(MojoResult result) {
+  // TODO(brettw): Handle a bad |result| value.
+  SendMore();
+}
+
+void TCPConnectedSocketImpl::DidSend(bool completed_synchronously,
+                                     int result) {
+  if (result < 0) {
+    // TODO(brettw) report error.
+    pending_send_ = NULL;
+    socket_->Close();
+    return;
+  }
+
+  // Take back ownership of the stream and free the IOBuffer.
+  send_stream_ = pending_send_->Complete(result);
+  pending_send_ = NULL;
+
+  // Schedule more writing.
+  if (completed_synchronously) {
+    // Don't recursively call SendMore if this is a sync read.
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&TCPConnectedSocketImpl::SendMore,
+                   weak_ptr_factory_.GetWeakPtr()));
+  } else {
+    SendMore();
+  }
+}
+
 }  // namespace mojo
diff --git a/mojo/services/network/tcp_connected_socket_impl.h b/mojo/services/network/tcp_connected_socket_impl.h
index 5c24011..e579b29 100644
--- a/mojo/services/network/tcp_connected_socket_impl.h
+++ b/mojo/services/network/tcp_connected_socket_impl.h
@@ -6,12 +6,17 @@
 #define MOJO_SERVICES_NETWORK_TCP_CONNECTED_SOCKET_H_
 
 #include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "mojo/common/handle_watcher.h"
 #include "mojo/public/cpp/bindings/interface_impl.h"
 #include "mojo/services/public/interfaces/network/tcp_connected_socket.mojom.h"
 #include "net/socket/tcp_socket.h"
 
 namespace mojo {
 
+class MojoToNetPendingBuffer;
+class NetToMojoPendingBuffer;
+
 class TCPConnectedSocketImpl : public InterfaceImpl<TCPConnectedSocket> {
  public:
   TCPConnectedSocketImpl(scoped_ptr<net::TCPSocket> socket,
@@ -20,9 +25,35 @@
   virtual ~TCPConnectedSocketImpl();
 
  private:
+  // "Receiving" in this context means reading from TCPSocket and writing to
+  // the Mojo receive_stream.
+  void ReceiveMore();
+  void OnReceiveStreamReady(MojoResult result);
+  void DidReceive(bool completed_synchronously, int result);
+
+  // "Writing" is reading from the Mojo send_stream and writing to the
+  // TCPSocket.
+  void SendMore();
+  void OnSendStreamReady(MojoResult result);
+  void DidSend(bool completed_asynchronously, int result);
+
   scoped_ptr<net::TCPSocket> socket_;
+
+  // The *stream handles will be null while there is an in-progress transation
+  // between net and mojo. During this time, the handle will be owned by the
+  // *PendingBuffer.
+
+  // For reading from the network and writing to Mojo pipe.
   ScopedDataPipeConsumerHandle send_stream_;
+  common::HandleWatcher receive_handle_watcher_;
+  scoped_refptr<NetToMojoPendingBuffer> pending_receive_;
+
+  // For reading from the Mojo pipe and writing to the network.
   ScopedDataPipeProducerHandle receive_stream_;
+  common::HandleWatcher send_handle_watcher_;
+  scoped_refptr<MojoToNetPendingBuffer> pending_send_;
+
+  base::WeakPtrFactory<TCPConnectedSocketImpl> weak_ptr_factory_;
 };
 
 }  // namespace mojo
diff --git a/mojo/services/public/interfaces/network/network_service.mojom b/mojo/services/public/interfaces/network/network_service.mojom
index 74f9312..e039780 100644
--- a/mojo/services/public/interfaces/network/network_service.mojom
+++ b/mojo/services/public/interfaces/network/network_service.mojom
@@ -45,6 +45,11 @@
   //
   // If you want control over the local address and port, instead use
   // CreateTCPBoundSocket.
+  //
+  // IMPORTANT: This does not work yet! We need to add a new parameter to
+  // indicate the protocol type (IPv4 or IPv6) actually be able to create the
+  // right type of socket. We also need to figure out how the client is supposed
+  // to decide between IPv4 and IPv6 on a given system.
   CreateTCPConnectedSocket(NetAddress remote_address,
                            handle<data_pipe_consumer> send_stream,
                            handle<data_pipe_producer> receive_stream,
diff --git a/mojo/services/public/interfaces/network/tcp_server_socket.mojom b/mojo/services/public/interfaces/network/tcp_server_socket.mojom
index 997f7e8..6d8430d 100644
--- a/mojo/services/public/interfaces/network/tcp_server_socket.mojom
+++ b/mojo/services/public/interfaces/network/tcp_server_socket.mojom
@@ -14,6 +14,10 @@
   // for connecting with the remote host. Only one Accept call can be pending
   // at a time.
   //
+  // Once a connection has been established (indicated by a successful
+  // callback), the TCPConnectedSocket may outlive the TCPServerSocket that
+  // created it.
+  //
   // On success, the address of the remote host will be provided.
   Accept(handle<data_pipe_consumer> send_stream,
          handle<data_pipe_producer> receive_stream,
diff --git a/mojo/shell/context.cc b/mojo/shell/context.cc
index e63a709..5d1e135 100644
--- a/mojo/shell/context.cc
+++ b/mojo/shell/context.cc
@@ -233,7 +233,7 @@
             scoped_ptr<ApplicationLoader>(new NetworkApplicationLoader()),
             "network_service",
             base::MessageLoop::TYPE_IO));
-    application_manager_.SetLoaderForURL(loader.PassAs<ApplicationLoader>(),
+    application_manager_.SetLoaderForURL(loader.Pass(),
                                          GURL("mojo:mojo_network_service"));
   }
 #endif
diff --git a/mojo/shell/external_application_listener_unittest.cc b/mojo/shell/external_application_listener_unittest.cc
index 6225dfd..7f675ae 100644
--- a/mojo/shell/external_application_listener_unittest.cc
+++ b/mojo/shell/external_application_listener_unittest.cc
@@ -175,8 +175,7 @@
           connector->url(), loop, quit_callback));
   // Since connectee won't be ready when connector is done registering, pass
   // in a do-nothing callback.
-  connector->Register(connector_app_impl.PassAs<InterfaceImpl<Application>>(),
-                      base::Bind(&NoOp));
+  connector->Register(connector_app_impl.Pass(), base::Bind(&NoOp));
 
   // Connect the second app to the registrar.
   connectee->ConnectSynchronously(socket_path);
@@ -186,7 +185,7 @@
   // After connectee is successfully registered, connector should be
   // able to connect to is by URL. Pass in a callback to attempt the
   // app -> app connection.
-  connectee->Register(connectee_app_impl.PassAs<InterfaceImpl<Application>>(),
+  connectee->Register(connectee_app_impl.Pass(),
                       base::Bind(&ConnectToApp, connector, connectee));
 }
 
diff --git a/net/OWNERS b/net/OWNERS
index 973a2df..588dba6 100644
--- a/net/OWNERS
+++ b/net/OWNERS
@@ -15,7 +15,6 @@
 rtenneti@chromium.org
 rvargas@chromium.org
 ttuttle@chromium.org
-willchan@chromium.org
 
 per-file *.isolate=csharp@chromium.org
 per-file *.isolate=maruel@chromium.org
@@ -24,3 +23,6 @@
 # so he can continue to review some already in-progress
 # work.
 szym@chromium.org
+
+# On extended leave.
+willchan@chromium.org
diff --git a/net/cookies/parsed_cookie.cc b/net/cookies/parsed_cookie.cc
index 6d82d9e..2c72c3b 100644
--- a/net/cookies/parsed_cookie.cc
+++ b/net/cookies/parsed_cookie.cc
@@ -137,7 +137,7 @@
 }
 
 bool IsControlCharacter(unsigned char c) {
-    return (c >= 0) && (c <= 31);
+  return c <= 31;
 }
 
 bool IsValidCookieAttributeValue(const std::string& value) {
diff --git a/net/dns/dns_config_service_win.cc b/net/dns/dns_config_service_win.cc
index dd3ee3d..ddb8a4c 100644
--- a/net/dns/dns_config_service_win.cc
+++ b/net/dns/dns_config_service_win.cc
@@ -23,8 +23,8 @@
 #include "base/threading/non_thread_safe.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
-#include "base/win/object_watcher.h"
 #include "base/win/registry.h"
+#include "base/win/scoped_handle.h"
 #include "base/win/windows_version.h"
 #include "net/base/net_util.h"
 #include "net/base/network_change_notifier.h"
@@ -292,8 +292,7 @@
 }
 
 // Watches a single registry key for changes.
-class RegistryWatcher : public base::win::ObjectWatcher::Delegate,
-                        public base::NonThreadSafe {
+class RegistryWatcher : public base::NonThreadSafe {
  public:
   typedef base::Callback<void(bool succeeded)> CallbackType;
   RegistryWatcher() {}
@@ -305,35 +304,31 @@
     callback_ = callback;
     if (key_.Open(HKEY_LOCAL_MACHINE, key, KEY_NOTIFY) != ERROR_SUCCESS)
       return false;
-    if (key_.StartWatching() != ERROR_SUCCESS)
-      return false;
-    if (!watcher_.StartWatching(key_.watch_event(), this))
-      return false;
-    return true;
+
+    return key_.StartWatching(base::Bind(&RegistryWatcher::OnObjectSignaled,
+                                         base::Unretained(this)));
   }
 
-  virtual void OnObjectSignaled(HANDLE object) override {
+  void OnObjectSignaled() {
     // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed.
     tracked_objects::ScopedProfile tracking_profile(
         FROM_HERE_WITH_EXPLICIT_FUNCTION(
             "RegistryWatcher_OnObjectSignaled"));
 
     DCHECK(CalledOnValidThread());
-    bool succeeded = (key_.StartWatching() == ERROR_SUCCESS) &&
-                      watcher_.StartWatching(key_.watch_event(), this);
-    if (!succeeded && key_.Valid()) {
-      watcher_.StopWatching();
-      key_.StopWatching();
+    DCHECK(!callback_.is_null());
+    if (key_.StartWatching(base::Bind(&RegistryWatcher::OnObjectSignaled,
+                                      base::Unretained(this)))) {
+      callback_.Run(true);
+    } else {
       key_.Close();
+      callback_.Run(false);
     }
-    if (!callback_.is_null())
-      callback_.Run(succeeded);
   }
 
  private:
   CallbackType callback_;
   base::win::RegKey key_;
-  base::win::ObjectWatcher watcher_;
 
   DISALLOW_COPY_AND_ASSIGN(RegistryWatcher);
 };
@@ -740,9 +735,8 @@
 
 void DnsConfigServiceWin::OnConfigChanged(bool succeeded) {
   InvalidateConfig();
-  if (succeeded) {
-    config_reader_->WorkNow();
-  } else {
+  config_reader_->WorkNow();
+  if (!succeeded) {
     LOG(ERROR) << "DNS config watch failed.";
     set_watch_failed(true);
     UMA_HISTOGRAM_ENUMERATION("AsyncDNS.WatchStatus",
diff --git a/net/http/http_response_headers.cc b/net/http/http_response_headers.cc
index 5e0223a..4ffed82 100644
--- a/net/http/http_response_headers.cc
+++ b/net/http/http_response_headers.cc
@@ -1202,28 +1202,40 @@
   return Time::FromUTCString(value.c_str(), result);
 }
 
+// We accept the first value of "close" or "keep-alive" in a Connection or
+// Proxy-Connection header, in that order. Obeying "keep-alive" in HTTP/1.1 or
+// "close" in 1.0 is not strictly standards-compliant, but we'd like to
+// avoid looking at the Proxy-Connection header whenever it is reasonable to do
+// so.
+// TODO(ricea): Measure real-world usage of the "Proxy-Connection" header,
+// with a view to reducing support for it in order to make our Connection header
+// handling more RFC 7230 compliant.
 bool HttpResponseHeaders::IsKeepAlive() const {
-  if (http_version_ < HttpVersion(1, 0))
-    return false;
-
   // NOTE: It is perhaps risky to assume that a Proxy-Connection header is
   // meaningful when we don't know that this response was from a proxy, but
   // Mozilla also does this, so we'll do the same.
-  std::string connection_val;
-  if (!EnumerateHeader(NULL, "connection", &connection_val))
-    EnumerateHeader(NULL, "proxy-connection", &connection_val);
+  static const char* kConnectionHeaders[] = {"connection", "proxy-connection"};
+  struct KeepAliveToken {
+    const char* token;
+    bool keep_alive;
+  };
+  static const KeepAliveToken kKeepAliveTokens[] = {{"keep-alive", true},
+                                                    {"close", false}};
 
-  bool keep_alive;
+  if (http_version_ < HttpVersion(1, 0))
+    return false;
 
-  if (http_version_ == HttpVersion(1, 0)) {
-    // HTTP/1.0 responses default to NOT keep-alive
-    keep_alive = LowerCaseEqualsASCII(connection_val, "keep-alive");
-  } else {
-    // HTTP/1.1 responses default to keep-alive
-    keep_alive = !LowerCaseEqualsASCII(connection_val, "close");
+  for (const char* header : kConnectionHeaders) {
+    void* iterator = nullptr;
+    std::string token;
+    while (EnumerateHeader(&iterator, header, &token)) {
+      for (const KeepAliveToken& keep_alive_token : kKeepAliveTokens) {
+        if (LowerCaseEqualsASCII(token, keep_alive_token.token))
+          return keep_alive_token.keep_alive;
+      }
+    }
   }
-
-  return keep_alive;
+  return http_version_ != HttpVersion(1, 0);
 }
 
 bool HttpResponseHeaders::HasStrongValidators() const {
diff --git a/net/http/http_response_headers_unittest.cc b/net/http/http_response_headers_unittest.cc
index c0e8598..7e4a6cf 100644
--- a/net/http/http_response_headers_unittest.cc
+++ b/net/http/http_response_headers_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <algorithm>
+#include <iostream>
 #include <limits>
 
 #include "base/basictypes.h"
@@ -1640,6 +1641,14 @@
   bool expected_keep_alive;
 };
 
+// Enable GTest to print KeepAliveTestData in an intelligible way if the test
+// fails.
+void PrintTo(const KeepAliveTestData& keep_alive_test_data,
+             std::ostream* os) {
+  *os << "{\"" << keep_alive_test_data.headers << "\", " << std::boolalpha
+      << keep_alive_test_data.expected_keep_alive << "}";
+}
+
 class IsKeepAliveTest
     : public HttpResponseHeadersTest,
       public ::testing::WithParamInterface<KeepAliveTestData> {
@@ -1714,6 +1723,82 @@
     "proxy-connection: keep-alive\n",
     true
   },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: Upgrade, close\n",
+    false
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: Upgrade, keep-alive\n",
+    true
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: Upgrade\n"
+    "Connection: close\n",
+    false
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: Upgrade\n"
+    "Connection: keep-alive\n",
+    true
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: close, Upgrade\n",
+    false
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: keep-alive, Upgrade\n",
+    true
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: Upgrade\n"
+    "Proxy-Connection: close\n",
+    false
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: Upgrade\n"
+    "Proxy-Connection: keep-alive\n",
+    true
+  },
+  // In situations where the response headers conflict with themselves, use the
+  // first one for backwards-compatibility.
+  { "HTTP/1.1 200 OK\n"
+    "Connection: close\n"
+    "Connection: keep-alive\n",
+    false
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Connection: keep-alive\n"
+    "Connection: close\n",
+    true
+  },
+  { "HTTP/1.0 200 OK\n"
+    "Connection: close\n"
+    "Connection: keep-alive\n",
+    false
+  },
+  { "HTTP/1.0 200 OK\n"
+    "Connection: keep-alive\n"
+    "Connection: close\n",
+    true
+  },
+  // Ignore the Proxy-Connection header if at all possible.
+  { "HTTP/1.0 200 OK\n"
+    "Proxy-Connection: keep-alive\n"
+    "Connection: close\n",
+    false
+  },
+  { "HTTP/1.1 200 OK\n"
+    "Proxy-Connection: close\n"
+    "Connection: keep-alive\n",
+    true
+  },
+  // Older versions of Chrome would have ignored Proxy-Connection in this case,
+  // but it doesn't seem safe.
+  { "HTTP/1.1 200 OK\n"
+    "Proxy-Connection: close\n"
+    "Connection: Transfer-Encoding\n",
+    false
+  },
 };
 
 INSTANTIATE_TEST_CASE_P(HttpResponseHeaders,
diff --git a/net/http/http_stream_parser.cc b/net/http/http_stream_parser.cc
index 4a60a6b..4c1041b 100644
--- a/net/http/http_stream_parser.cc
+++ b/net/http/http_stream_parser.cc
@@ -368,6 +368,11 @@
   // The client callback can do anything, including destroying this class,
   // so any pending callback must be issued after everything else is done.
   if (result != ERR_IO_PENDING && !callback_.is_null()) {
+    // TODO(vadimt): Remove ScopedProfile below once crbug.com/424359 is fixed.
+    tracked_objects::ScopedProfile tracking_profile(
+        FROM_HERE_WITH_EXPLICIT_FUNCTION(
+            "424359 HttpStreamParser::OnIOComplete callback"));
+
     CompletionCallback c = callback_;
     callback_.Reset();
     c.Run(result);
@@ -375,6 +380,10 @@
 }
 
 int HttpStreamParser::DoLoop(int result) {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/424359 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION("424359 HttpStreamParser::DoLoop"));
+
   do {
     DCHECK_NE(ERR_IO_PENDING, result);
     DCHECK_NE(STATE_DONE, io_state_);
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index edbe166..9ce215d 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -672,1368 +672,1412 @@
 // value has the MSB set then it represents a literal leaf value. Otherwise
 // it's a pointer to the n'th element of the array.
 static const uint8 kHSTSHuffmanTree[] = {
-  0xf0, 0xf7, 0x00, 0xec, 0x01, 0x80, 0xb3, 0xb0,
-  0x03, 0xf1, 0xb4, 0x04, 0x05, 0xf8, 0xf6, 0x06,
-  0xeb, 0x07, 0xed, 0x08, 0xe1, 0x09, 0xe2, 0xe8,
-  0xe3, 0x0b, 0xe7, 0x0c, 0x0a, 0x0d, 0x02, 0x0e,
-  0xf3, 0xee, 0xb9, 0xb6, 0x11, 0xb7, 0xb5, 0x12,
-  0xb1, 0x13, 0x14, 0xb2, 0x15, 0xea, 0xfa, 0x16,
-  0x17, 0xe6, 0xf5, 0x18, 0xae, 0x19, 0x10, 0x1a,
-  0xff, 0x1b, 0xf4, 0xe9, 0xe5, 0x1d, 0xad, 0xf9,
-  0xe4, 0x1f, 0x20, 0xf2, 0x21, 0xef, 0x1e, 0x22,
-  0x1c, 0x23, 0x0f, 0x24,
+  0xf0, 0xf7, 0x00, 0xec, 0x01, 0x80, 0xe1, 0xe7,
+  0xb3, 0xb1, 0x04, 0xf1, 0xb4, 0x05, 0x06, 0xf8,
+  0xf6, 0x07, 0xeb, 0x08, 0xed, 0x09, 0xe2, 0xe8,
+  0xe3, 0x0b, 0x0a, 0x0c, 0x03, 0x0d, 0x02, 0x0e,
+  0xf3, 0xae, 0xee, 0xf4, 0x10, 0x11, 0xff, 0x12,
+  0xb9, 0xb6, 0x14, 0xb7, 0xb5, 0x15, 0xb0, 0x16,
+  0x17, 0xb2, 0x18, 0xea, 0xfa, 0x19, 0x1a, 0xe6,
+  0xf5, 0x1b, 0xad, 0xf9, 0xe4, 0x1d, 0x1c, 0x1e,
+  0xe5, 0x1f, 0xe9, 0xf2, 0xef, 0x21, 0x20, 0x22,
+  0x13, 0x23, 0x0f, 0x24,
 };
 
 static const uint8 kPreloadedHSTSData[] = {
-  0xfe, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x25, 0x9f,
-  0x0b, 0x7f, 0xb1, 0xa2, 0x2d, 0x9b, 0x1f, 0x2a,
-  0x48, 0x54, 0x80, 0x26, 0x94, 0x02, 0xd3, 0xfb,
-  0x58, 0x20, 0x56, 0xe8, 0x55, 0x8d, 0x34, 0xfc,
-  0xea, 0xed, 0x76, 0x2c, 0x74, 0x21, 0xf9, 0x7a,
-  0x14, 0xad, 0x89, 0x86, 0xaf, 0xc3, 0xb6, 0x7f,
-  0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x51, 0x4f, 0x85,
-  0xbf, 0xd8, 0xd1, 0x5e, 0xcf, 0xb7, 0x78, 0xd7,
-  0x3c, 0x74, 0xad, 0x87, 0xb8, 0x26, 0x13, 0xff,
-  0x5b, 0xdd, 0x6c, 0x16, 0xff, 0x63, 0x44, 0x8d,
-  0x3f, 0xfa, 0xca, 0xf7, 0x5b, 0x05, 0xbf, 0xd8,
-  0xd1, 0x3c, 0x4f, 0xfe, 0xb2, 0xbd, 0xd6, 0xc1,
-  0x6f, 0xf6, 0x34, 0x4f, 0xf3, 0xff, 0xac, 0xaf,
-  0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x14, 0x34, 0xff,
-  0xeb, 0x2b, 0xdd, 0x6c, 0x16, 0xff, 0x63, 0x45,
-  0x11, 0x3f, 0xef, 0x75, 0xb0, 0x5b, 0xfd, 0x8d,
-  0x14, 0x8c, 0xff, 0xfd, 0x9c, 0x55, 0x39, 0xdb,
-  0x5d, 0xf0, 0x52, 0x88, 0x02, 0xa5, 0x65, 0x22,
-  0x8d, 0x7d, 0x1a, 0x7f, 0xeb, 0x7b, 0xad, 0x82,
-  0xdf, 0xec, 0x68, 0x94, 0x21, 0xe5, 0xce, 0x57,
-  0x46, 0x90, 0xc6, 0x23, 0x09, 0x75, 0x13, 0x55,
-  0x30, 0x0a, 0x4b, 0xda, 0x95, 0x14, 0xae, 0x87,
-  0xad, 0xe1, 0x64, 0xff, 0xeb, 0x2b, 0xdd, 0x6c,
-  0x16, 0xff, 0x63, 0x44, 0xe7, 0x3f, 0xfa, 0xca,
-  0xf7, 0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x44, 0xcf,
-  0xfc, 0x2e, 0xb5, 0x77, 0x45, 0x9d, 0xb0, 0x1d,
-  0x02, 0x8e, 0xaa, 0x29, 0x5c, 0xa5, 0x3f, 0xad,
-  0x82, 0xdf, 0xec, 0x68, 0x87, 0x27, 0xc2, 0xdf,
-  0xec, 0x68, 0x8b, 0xe7, 0xdf, 0xa7, 0x25, 0xf2,
-  0xa5, 0x6c, 0x3d, 0x8e, 0x98, 0x4f, 0xfe, 0xb2,
-  0xbd, 0xd6, 0xc1, 0x6f, 0xf6, 0x34, 0x4c, 0x93,
-  0xfa, 0xd8, 0x2d, 0xfe, 0xc6, 0x8b, 0x7a, 0x7f,
-  0xf5, 0x95, 0xee, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2,
-  0x93, 0x84, 0x4e, 0x65, 0xd0, 0x93, 0xc2, 0x7a,
-  0x29, 0x2e, 0x3b, 0x9f, 0xd6, 0xc1, 0x6f, 0xf6,
-  0x34, 0x43, 0xb3, 0xff, 0xac, 0xaf, 0x75, 0xb0,
-  0x5b, 0xfd, 0x8d, 0x12, 0xc4, 0xfe, 0xb6, 0x0b,
-  0x7f, 0xb1, 0xa2, 0x30, 0x9f, 0xfa, 0xde, 0xeb,
-  0x60, 0xb7, 0xfb, 0x1a, 0x23, 0xd9, 0xfd, 0x6c,
-  0x16, 0xff, 0x63, 0x45, 0x87, 0x3f, 0xad, 0x82,
-  0xdf, 0xec, 0x68, 0xb9, 0xe1, 0x13, 0x8a, 0x78,
-  0xed, 0xca, 0x5b, 0x3b, 0x52, 0x66, 0x8e, 0xe7,
-  0xf5, 0xb0, 0x5b, 0xfd, 0x8d, 0x10, 0xf4, 0xf8,
-  0x5b, 0xfd, 0x8d, 0x11, 0x34, 0xda, 0x51, 0xd3,
-  0xff, 0xb2, 0xbc, 0xde, 0xa2, 0x6d, 0xfd, 0x22,
-  0x8e, 0x87, 0xcf, 0x8e, 0xa2, 0xd3, 0xda, 0xbb,
-  0xf9, 0x9a, 0x21, 0x79, 0x5b, 0x11, 0xcf, 0x48,
-  0x49, 0xdc, 0x47, 0x3d, 0xaa, 0xef, 0x47, 0x4f,
-  0xfe, 0xda, 0xce, 0xc7, 0xdd, 0xc9, 0x5f, 0xfd,
-  0x3a, 0x6f, 0xbc, 0x3a, 0x57, 0xae, 0x22, 0x1e,
-  0xa4, 0x5e, 0x9b, 0x3e, 0xaf, 0xeb, 0xdc, 0x74,
-  0xf6, 0xe9, 0xb0, 0x1d, 0x38, 0x21, 0x09, 0x53,
-  0xef, 0xee, 0xab, 0x85, 0x58, 0xbc, 0x9f, 0x7e,
-  0x96, 0xcd, 0x1d, 0x1c, 0x22, 0x68, 0x07, 0xdd,
-  0x35, 0x9f, 0xf8, 0x1b, 0x5b, 0x95, 0x53, 0x63,
-  0x75, 0xec, 0xe9, 0xff, 0x6e, 0xfa, 0x75, 0x28,
-  0x9b, 0x51, 0xd3, 0xf6, 0x2e, 0xb9, 0xd9, 0x43,
-  0xa7, 0xb3, 0x8c, 0x78, 0xe8, 0xc4, 0xf3, 0x77,
-  0x0c, 0x05, 0x8c, 0x6a, 0x99, 0xd3, 0xfd, 0x17,
-  0xcf, 0xd8, 0x14, 0xce, 0x36, 0x74, 0xff, 0xff,
-  0xee, 0xf5, 0xf4, 0xbf, 0xdc, 0xe2, 0xbb, 0x5b,
-  0x95, 0x31, 0xf7, 0x0e, 0x04, 0xe9, 0xf6, 0xf5,
-  0x72, 0x3c, 0x74, 0xfe, 0x7d, 0xd4, 0xbf, 0x72,
-  0x3e, 0x74, 0xfe, 0xf0, 0xdc, 0xb2, 0x6b, 0xce,
-  0x8d, 0x9f, 0x5f, 0x4e, 0x21, 0x13, 0x35, 0xc7,
-  0xf1, 0x84, 0xa4, 0xd7, 0x38, 0xe9, 0xdf, 0xaa,
-  0x1d, 0x35, 0xcf, 0x1d, 0x3c, 0x9d, 0xd2, 0xce,
-  0x36, 0x62, 0x37, 0x3f, 0xfe, 0xb9, 0x35, 0xcb,
-  0xb7, 0x5e, 0x72, 0xcd, 0x2f, 0xe6, 0x8e, 0x9f,
-  0xfa, 0xa9, 0x7f, 0x96, 0xbb, 0xfa, 0x4d, 0x1d,
-  0x3f, 0xb9, 0x3e, 0xed, 0xd6, 0xe5, 0x1d, 0x00,
-  0x3f, 0xfe, 0xa3, 0xcf, 0xf8, 0x56, 0xe5, 0x44,
-  0xdb, 0xdf, 0xa3, 0xa1, 0x0f, 0x8e, 0xe2, 0x29,
-  0xff, 0xff, 0xeb, 0xbb, 0x41, 0xea, 0x2d, 0xcb,
-  0x9e, 0xb6, 0xec, 0x7f, 0x58, 0xbb, 0xb9, 0x43,
-  0xa4, 0x87, 0x4f, 0xe7, 0x78, 0xee, 0x88, 0xf9,
-  0xd3, 0xff, 0xff, 0xfb, 0x60, 0xa7, 0x73, 0xdf,
-  0xe5, 0xc5, 0x6e, 0xe5, 0xdc, 0x7d, 0xd9, 0x73,
-  0xdd, 0xcf, 0x7c, 0xe9, 0xdf, 0xec, 0x68, 0xa6,
-  0x23, 0x11, 0x7e, 0xd0, 0x99, 0x9f, 0xf6, 0x75,
-  0xf7, 0x53, 0x48, 0x2b, 0x1d, 0x3e, 0x7f, 0xb8,
-  0xbb, 0x0e, 0x8d, 0x9f, 0x47, 0x9f, 0xcf, 0xf7,
-  0xab, 0x8a, 0xa3, 0xd8, 0x13, 0xa7, 0xff, 0xf7,
-  0x71, 0xb5, 0xa4, 0xd5, 0x16, 0xee, 0x07, 0x92,
-  0x5e, 0x83, 0xa7, 0xfc, 0xc8, 0xaa, 0xe5, 0x33,
-  0x7d, 0x3a, 0x11, 0x14, 0x95, 0x68, 0x9f, 0x0a,
-  0x2e, 0x41, 0x3a, 0x7e, 0xfe, 0xf2, 0xe1, 0x3a,
-  0x74, 0x61, 0xfb, 0xec, 0x8a, 0xe2, 0x68, 0x79,
-  0x76, 0x7f, 0x84, 0xab, 0xe7, 0x0d, 0x1a, 0x1b,
-  0xe4, 0x5b, 0x84, 0x32, 0xc1, 0xe3, 0x0f, 0x15,
-  0x42, 0x3b, 0xa4, 0x3a, 0x8d, 0x52, 0x7b, 0x3b,
-  0x7e, 0xf6, 0x74, 0xff, 0xff, 0xfa, 0xbb, 0xd5,
-  0x70, 0x51, 0x77, 0x25, 0x5d, 0x79, 0xcb, 0x1f,
-  0x76, 0x5d, 0xd0, 0x50, 0xe9, 0x6b, 0x68, 0xb6,
-  0xa1, 0x3c, 0xff, 0xfb, 0x32, 0xbb, 0x6a, 0xe7,
-  0x2a, 0x5d, 0x54, 0xbd, 0x9d, 0x3f, 0xf5, 0x3d,
-  0xfe, 0x4a, 0x4c, 0xee, 0x97, 0xce, 0x96, 0xfa,
-  0x8a, 0x3d, 0x2d, 0x4f, 0x9c, 0x8f, 0xba, 0x87,
-  0x4f, 0xff, 0xff, 0xfb, 0x3b, 0x7f, 0x96, 0xeb,
-  0x75, 0x96, 0xde, 0x91, 0x5d, 0xfb, 0xf5, 0xdd,
-  0xb2, 0xaf, 0x81, 0x38, 0x2a, 0x7f, 0xff, 0xe6,
-  0xd8, 0x78, 0xb8, 0x79, 0x5c, 0x8f, 0x51, 0xab,
-  0x75, 0x5f, 0xf0, 0x9d, 0x35, 0xcf, 0x3e, 0x9a,
-  0x36, 0xca, 0x29, 0x0a, 0x58, 0x45, 0x50, 0x15,
-  0x86, 0x67, 0x63, 0x6f, 0x9f, 0xfc, 0xa6, 0xe5,
-  0x5f, 0x76, 0x2b, 0xfa, 0x03, 0xa7, 0xff, 0xdb,
-  0xee, 0xab, 0x97, 0x9a, 0x5b, 0x2f, 0x7f, 0xd0,
-  0x1d, 0x3f, 0xf2, 0x75, 0xee, 0xe2, 0xea, 0x5c,
-  0x8f, 0x9d, 0x14, 0x45, 0x2d, 0xcb, 0xb3, 0xd9,
-  0xac, 0x5e, 0xce, 0x9c, 0xbf, 0x95, 0x3a, 0x6c,
-  0xe0, 0xe8, 0x79, 0x36, 0xc7, 0x43, 0xbe, 0x84,
-  0x9a, 0x25, 0x5c, 0x3d, 0x3f, 0x70, 0x9d, 0xaf,
-  0xb8, 0xe9, 0xc9, 0xc2, 0x1d, 0x3f, 0x96, 0x76,
-  0x6a, 0x9e, 0xb7, 0x23, 0xc8, 0x51, 0x6c, 0xfd,
-  0x79, 0x5f, 0xbd, 0xa0, 0x0e, 0x9f, 0xc2, 0xb7,
-  0x72, 0xbf, 0xa3, 0xa3, 0x0f, 0x97, 0x66, 0x73,
-  0xf2, 0x03, 0x35, 0xcd, 0xe3, 0xa1, 0xc7, 0xa1,
-  0xd2, 0x19, 0xff, 0xff, 0x6b, 0xbe, 0x0a, 0x3d,
-  0x9b, 0xee, 0xbb, 0x8b, 0xb9, 0x50, 0x3d, 0x3a,
-  0x7f, 0xdb, 0xc5, 0xb9, 0x51, 0x2b, 0xf7, 0xb3,
-  0xa7, 0xf7, 0xbf, 0x4a, 0xe7, 0x89, 0xd1, 0xc1,
-  0xfa, 0xe9, 0x12, 0x4a, 0x3a, 0x77, 0x73, 0x83,
-  0xa1, 0x0d, 0x63, 0xe2, 0x13, 0xf3, 0xf4, 0xcc,
-  0xed, 0xf3, 0xa7, 0x95, 0xcd, 0x00, 0x74, 0x61,
-  0xe9, 0x6c, 0xbe, 0x11, 0x3c, 0xac, 0x87, 0x3e,
-  0xd3, 0xc5, 0xce, 0x7f, 0x6b, 0x6f, 0x65, 0x6e,
-  0xd1, 0xd3, 0xd8, 0xfa, 0x2c, 0x74, 0xfd, 0x5f,
-  0x72, 0x87, 0x67, 0x4f, 0xb6, 0x01, 0xc7, 0xce,
-  0x8b, 0xe8, 0xaa, 0xd9, 0xa8, 0x08, 0xae, 0x2c,
-  0x9f, 0xff, 0x85, 0xd5, 0xc5, 0xaa, 0x9d, 0xbf,
-  0xdc, 0xd5, 0x6e, 0x3a, 0x7f, 0xff, 0x6f, 0x1f,
-  0x75, 0x35, 0x54, 0x52, 0x6f, 0x8e, 0x49, 0x7a,
-  0x0e, 0x9f, 0xff, 0xff, 0x5d, 0xde, 0x41, 0xf7,
-  0xdc, 0x3e, 0x0e, 0x54, 0xb9, 0x1f, 0xae, 0x6f,
-  0xb9, 0x7c, 0xe9, 0xff, 0xf5, 0xc2, 0x39, 0xaa,
-  0x57, 0x79, 0xca, 0xa0, 0x43, 0xa3, 0x11, 0xc5,
-  0x58, 0x46, 0x4f, 0xff, 0x3a, 0xf2, 0xb8, 0x9d,
-  0x5b, 0xb9, 0xaa, 0x79, 0xd3, 0xff, 0xee, 0x31,
-  0x5c, 0xaf, 0x34, 0x94, 0x59, 0xde, 0x2f, 0x1d,
-  0x3f, 0xd9, 0xd7, 0xb9, 0x03, 0xfd, 0x63, 0xa7,
-  0xfd, 0x4b, 0xbb, 0xca, 0x97, 0x2f, 0xdc, 0x27,
-  0x4f, 0xfe, 0x7b, 0x95, 0x2b, 0x77, 0x2d, 0x52,
-  0x88, 0x27, 0x4f, 0xff, 0xfb, 0x1f, 0xa6, 0xf0,
-  0x3c, 0xab, 0x9a, 0xa6, 0x3d, 0xcb, 0x37, 0xc1,
-  0xd1, 0x88, 0xc2, 0xda, 0x84, 0x3c, 0xae, 0x1d,
-  0xa3, 0x4c, 0x7c, 0x9f, 0x6a, 0x4a, 0x5c, 0xa1,
-  0xde, 0xa3, 0x09, 0x9f, 0xf7, 0x8d, 0x73, 0x49,
-  0xdd, 0x80, 0xe9, 0xfe, 0xc0, 0xbe, 0xea, 0x72,
-  0xd6, 0xce, 0x9f, 0xff, 0xf2, 0x32, 0x2b, 0x92,
-  0xd5, 0xdf, 0x78, 0xe5, 0xcd, 0xbb, 0x95, 0xc3,
-  0xa1, 0x91, 0xd5, 0xd3, 0xcb, 0xc3, 0xc9, 0xed,
-  0xeb, 0x68, 0x74, 0xff, 0xff, 0xfd, 0xa4, 0x57,
-  0x77, 0x7e, 0xbe, 0xb7, 0x2e, 0xdd, 0x79, 0xcb,
-  0x1f, 0x76, 0x5d, 0xd0, 0x50, 0xe8, 0x72, 0x2e,
-  0x36, 0x43, 0x08, 0xbc, 0x9f, 0x92, 0xf9, 0x77,
-  0x1a, 0xef, 0xc3, 0xaa, 0x7b, 0x54, 0xf0, 0x1d,
-  0x3f, 0xf5, 0x77, 0xcb, 0x63, 0x73, 0xde, 0x2c,
-  0x74, 0xfd, 0xaf, 0x1e, 0xbf, 0xb3, 0xa3, 0x11,
-  0x29, 0x7c, 0x87, 0x48, 0xd3, 0xdc, 0xee, 0xfa,
-  0x1d, 0x3f, 0xff, 0x6c, 0x79, 0x66, 0xf3, 0xb7,
-  0xeb, 0xbc, 0x56, 0x31, 0xd3, 0xff, 0xfd, 0xb7,
-  0x85, 0x15, 0x4b, 0x93, 0x92, 0x0a, 0x71, 0x54,
-  0x51, 0xd1, 0x88, 0xc4, 0x15, 0xc9, 0xff, 0xff,
-  0xc2, 0x3b, 0x7b, 0x95, 0x73, 0x5d, 0x45, 0xab,
-  0x8f, 0x23, 0xfa, 0xb9, 0x8e, 0x9f, 0xff, 0xf9,
-  0x2f, 0xd5, 0x39, 0x77, 0x2e, 0xbf, 0xc9, 0xf7,
-  0x53, 0x7d, 0xe6, 0x8f, 0x1d, 0x3e, 0x7e, 0x9b,
-  0xce, 0x9d, 0x18, 0x8a, 0x7b, 0x9f, 0xe3, 0x69,
-  0xa3, 0x56, 0x32, 0x39, 0xfe, 0xed, 0xcb, 0x77,
-  0x2b, 0xfa, 0x3a, 0x7f, 0xb8, 0xaa, 0x07, 0x8a,
-  0xfa, 0x8e, 0x9f, 0xff, 0xef, 0x1a, 0xe6, 0xb7,
-  0x9d, 0x7a, 0x89, 0x9d, 0xe2, 0xa8, 0x74, 0xf6,
-  0xb9, 0x3c, 0x27, 0x43, 0xe8, 0x89, 0xf6, 0x59,
-  0xf9, 0x67, 0xdd, 0x72, 0x68, 0xe9, 0xfe, 0xaf,
-  0xab, 0xb9, 0x5f, 0xd1, 0xd0, 0x87, 0xcf, 0x43,
-  0x09, 0xfb, 0x34, 0x23, 0x8e, 0x3a, 0x7e, 0xee,
-  0x57, 0xb8, 0xc7, 0x4f, 0x77, 0x29, 0xc9, 0x63,
-  0xd5, 0xd1, 0x54, 0x70, 0xaf, 0x29, 0xa3, 0x67,
-  0xd9, 0x50, 0x9d, 0x56, 0x18, 0x7a, 0x84, 0x52,
-  0xe7, 0x69, 0xff, 0xbb, 0xdc, 0xe4, 0x39, 0x5e,
-  0xe2, 0xc7, 0x42, 0x2e, 0xb7, 0x64, 0xe5, 0x97,
-  0xbb, 0xcf, 0xba, 0x8a, 0xfe, 0x0e, 0x9f, 0xd8,
-  0xb5, 0x73, 0x49, 0xc1, 0xd3, 0xff, 0xff, 0xd5,
-  0xcd, 0x53, 0xd6, 0xe5, 0xdc, 0x7d, 0xd9, 0x73,
-  0xdd, 0xce, 0x2b, 0xb5, 0x8e, 0x9a, 0xeb, 0xe7,
-  0x40, 0xa2, 0x7b, 0x50, 0x85, 0x9f, 0xb1, 0xee,
-  0xe3, 0xf4, 0x3a, 0x7f, 0xf0, 0xbe, 0xea, 0x62,
-  0x9f, 0x4a, 0xd5, 0x0e, 0x95, 0x0e, 0x8b, 0x8f,
-  0x6b, 0x9a, 0x54, 0xfe, 0x45, 0x77, 0x2b, 0xfa,
-  0x3a, 0x7f, 0xff, 0xda, 0xea, 0x01, 0xf7, 0x52,
-  0xe4, 0xd7, 0x73, 0x8d, 0xe0, 0xac, 0x74, 0x6d,
-  0x53, 0x62, 0xc4, 0xff, 0x0d, 0x1e, 0x93, 0xd2,
-  0x11, 0x17, 0x12, 0xf3, 0x31, 0x9f, 0x3b, 0x63,
-  0x8f, 0x9d, 0x3e, 0xca, 0x3d, 0x81, 0x3a, 0x1f,
-  0x3c, 0xea, 0x93, 0xcf, 0xff, 0xb6, 0xf6, 0x37,
-  0x15, 0xde, 0x5f, 0xe5, 0x7e, 0xe4, 0x3a, 0x7a,
-  0xf3, 0x59, 0x53, 0xa7, 0xff, 0xfe, 0xbc, 0x7d,
-  0xde, 0xff, 0x2e, 0xdd, 0x79, 0xcb, 0x1f, 0x76,
-  0x5d, 0xd0, 0x50, 0xe8, 0x79, 0x14, 0xd8, 0x49,
-  0x3f, 0xff, 0xfe, 0x47, 0xe9, 0x72, 0x3f, 0xca,
-  0xb9, 0xc7, 0x2e, 0xe5, 0xd7, 0xf9, 0x50, 0x00,
-  0xde, 0x8e, 0x9f, 0x27, 0x5f, 0xf7, 0x8e, 0x9f,
-  0xff, 0xff, 0xfd, 0x8a, 0xc6, 0x4a, 0xa2, 0xb5,
-  0x94, 0xa2, 0x08, 0xa7, 0x71, 0xec, 0xba, 0x97,
-  0x2d, 0xd4, 0x51, 0xd3, 0xfc, 0x0c, 0xe3, 0xb9,
-  0x5f, 0xd1, 0xd3, 0xff, 0x3e, 0x97, 0xef, 0x2e,
-  0xce, 0xad, 0xcd, 0x47, 0x4f, 0xff, 0x66, 0xb8,
-  0xcc, 0x05, 0x39, 0x0d, 0x38, 0xa1, 0xd0, 0x8a,
-  0xdf, 0x70, 0x8f, 0x71, 0x81, 0x89, 0x1a, 0xa1,
-  0x23, 0x52, 0x8f, 0x85, 0x1f, 0x4e, 0x28, 0x9d,
-  0x3b, 0x8e, 0x4b, 0x1d, 0x3f, 0xfc, 0xfb, 0xba,
-  0x9c, 0x95, 0xd4, 0xbf, 0xad, 0xbc, 0x74, 0x61,
-  0xfb, 0x6c, 0x82, 0x7e, 0x79, 0x67, 0x2f, 0x05,
-  0xe3, 0xa7, 0xca, 0xdf, 0x19, 0xc1, 0xd2, 0x58,
-  0xe9, 0x91, 0x47, 0x4b, 0x47, 0x40, 0x9a, 0x5f,
-  0x15, 0x8e, 0x0f, 0x56, 0xa6, 0xd3, 0xda, 0xa7,
-  0xbe, 0x74, 0xcb, 0x79, 0xd3, 0xfa, 0xbb, 0x17,
-  0xdd, 0xd4, 0x3a, 0x17, 0xaa, 0x68, 0x08, 0x69,
-  0x8f, 0xdb, 0x23, 0x51, 0x15, 0xc2, 0xd3, 0xfa,
-  0x9b, 0x7c, 0x3f, 0xd0, 0x1d, 0x3f, 0xfe, 0x41,
-  0x46, 0xc5, 0x23, 0x3b, 0x74, 0xb9, 0x47, 0x42,
-  0xc8, 0x86, 0x5f, 0x34, 0x9d, 0xd0, 0x21, 0xd2,
-  0xb2, 0xf1, 0xd5, 0x8e, 0xa4, 0xa0, 0x67, 0x97,
-  0x78, 0x8d, 0x87, 0x27, 0x74, 0x9a, 0x5f, 0x83,
-  0xf1, 0xd4, 0x6e, 0x13, 0x6b, 0x46, 0x06, 0x31,
-  0xf6, 0x2a, 0x1d, 0x55, 0x9e, 0x8f, 0xf8, 0x71,
-  0xf6, 0x76, 0x7e, 0x92, 0xa9, 0x35, 0x38, 0x7c,
-  0xba, 0x30, 0x25, 0xf8, 0xd8, 0x79, 0xc3, 0x8e,
-  0xf0, 0x9e, 0x7f, 0x5b, 0x05, 0xbf, 0xd8, 0xd1,
-  0x4e, 0xcf, 0x85, 0xbf, 0xd8, 0xd1, 0x51, 0xcf,
-  0xfb, 0xdd, 0x6c, 0x16, 0xff, 0x63, 0x44, 0xd1,
-  0x2b, 0x61, 0xfb, 0x28, 0xc2, 0x7f, 0x5b, 0x05,
-  0xbf, 0xd8, 0xd1, 0x57, 0xcf, 0x85, 0xbf, 0xd8,
-  0xd1, 0x5b, 0x4f, 0xf3, 0xad, 0x82, 0xdf, 0xec,
-  0x68, 0x90, 0x65, 0x6c, 0x3f, 0x1f, 0x30, 0x9f,
-  0xfa, 0xde, 0xeb, 0x60, 0xb7, 0xfb, 0x1a, 0x24,
-  0x39, 0xf0, 0xb7, 0xfb, 0x1a, 0x2c, 0x49, 0xff,
-  0x93, 0x29, 0x9d, 0xe3, 0x60, 0x4e, 0x9d, 0x3b,
-  0xa8, 0xf1, 0xd2, 0x77, 0x4f, 0x7e, 0xe4, 0x39,
-  0xcb, 0xfb, 0x01, 0xd3, 0xef, 0x77, 0x3a, 0xa1,
-  0xd3, 0xf5, 0x28, 0x3b, 0x0d, 0xec, 0xe8, 0xd9,
-  0xec, 0xf9, 0x44, 0xfe, 0x02, 0x66, 0xb7, 0xd0,
-  0x95, 0x18, 0x9c, 0x1b, 0xf0, 0x8f, 0xd9, 0x4d,
-  0x5e, 0x00, 0x43, 0x3f, 0xf5, 0x76, 0x9a, 0xaf,
-  0xdf, 0xce, 0x80, 0xe9, 0xff, 0xfd, 0xad, 0x7b,
-  0xa9, 0x9d, 0x45, 0x7e, 0x6b, 0x48, 0xa3, 0xa7,
-  0xff, 0xb1, 0xf7, 0x6a, 0xe7, 0xad, 0x5f, 0x56,
-  0xe8, 0x74, 0xd5, 0xb6, 0x23, 0xdb, 0x68, 0xbd,
-  0x5e, 0x8b, 0x27, 0x02, 0x91, 0xa3, 0x4f, 0xeb,
-  0x60, 0xb7, 0xfb, 0x1a, 0x2c, 0xd9, 0xff, 0xd6,
-  0x57, 0xba, 0xd8, 0x2d, 0xfe, 0xc6, 0x8a, 0x02,
-  0x6e, 0x54, 0x3a, 0x79, 0xbf, 0xd8, 0xd1, 0x6f,
-  0xcf, 0xdc, 0xf5, 0xed, 0xe2, 0x74, 0x09, 0xeb,
-  0x80, 0xae, 0x7d, 0xa7, 0x53, 0x9d, 0x0e, 0x9f,
-  0xc8, 0xbb, 0x9e, 0xba, 0x80, 0x3a, 0x77, 0x71,
-  0xc7, 0x4a, 0xce, 0x4c, 0x2f, 0x1b, 0xc4, 0x86,
-  0xa5, 0x5a, 0x36, 0x9f, 0xf7, 0xba, 0xd8, 0x2d,
-  0xfe, 0xc6, 0x8a, 0x52, 0x7f, 0x9d, 0x6c, 0x16,
-  0xff, 0x63, 0x44, 0x9d, 0x2b, 0x29, 0x10, 0xfe,
-  0x8d, 0x08, 0xed, 0x93, 0x5e, 0x8c, 0x8b, 0x8b,
-  0x57, 0xbf, 0x91, 0xc9, 0xb4, 0x2c, 0x76, 0x4f,
-  0x7b, 0x85, 0x62, 0xc4, 0xca, 0x96, 0xa1, 0x52,
-  0x90, 0x1d, 0xd2, 0x35, 0xd5, 0xd0, 0xd6, 0x9f,
-  0x0b, 0x7f, 0xb1, 0xa2, 0x1f, 0x9f, 0xf7, 0xba,
-  0xd8, 0x2d, 0xfe, 0xc6, 0x89, 0x4e, 0x56, 0xc3,
-  0xf6, 0x51, 0x84, 0xfe, 0xb6, 0x0b, 0x7f, 0xb1,
-  0xa2, 0x27, 0x9f, 0xd6, 0xc1, 0x6f, 0xf6, 0x34,
-  0x46, 0x33, 0xff, 0xac, 0xaf, 0x75, 0xb0, 0x5b,
-  0xfd, 0x8d, 0x13, 0xcc, 0x22, 0x3b, 0xde, 0x27,
-  0x71, 0xdd, 0x4e, 0xe7, 0xc2, 0xdf, 0xec, 0x68,
-  0x88, 0x27, 0xfd, 0xee, 0xb6, 0x0b, 0x7f, 0xb1,
-  0xa2, 0x54, 0x95, 0xb0, 0xfd, 0x94, 0x61, 0x3f,
-  0xad, 0x82, 0xdf, 0xec, 0x68, 0x8a, 0x27, 0xf5,
-  0xb0, 0x5b, 0xfd, 0x8d, 0x11, 0x94, 0xff, 0xeb,
-  0x2b, 0xdd, 0x6c, 0x16, 0xff, 0x63, 0x44, 0xcb,
-  0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68, 0xa9, 0x27,
-  0xf5, 0xb0, 0x5b, 0xfd, 0x8d, 0x15, 0xd4, 0xfe,
-  0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0xc5, 0x9f, 0xf9,
-  0x5e, 0xeb, 0x60, 0xb7, 0xfb, 0x1a, 0x27, 0xa9,
-  0xfe, 0x0d, 0xbd, 0x36, 0xbf, 0xbb, 0xc3, 0xa2,
-  0xc8, 0x8a, 0x44, 0xc9, 0xfa, 0xf4, 0xf9, 0xad,
-  0xdd, 0x43, 0xa7, 0x85, 0x5a, 0x7c, 0xe9, 0xcd,
-  0x95, 0x2a, 0x7f, 0xfe, 0xaf, 0x7e, 0xfe, 0xc5,
-  0x1c, 0xec, 0xa0, 0x00, 0x87, 0x4f, 0xff, 0xc3,
-  0xbb, 0xcf, 0x55, 0x90, 0x47, 0x77, 0x8d, 0x73,
-  0xc7, 0x4f, 0x9b, 0x75, 0xe6, 0xa3, 0xa7, 0xff,
-  0x7d, 0x3b, 0x80, 0xb5, 0x76, 0xde, 0x27, 0x4f,
-  0xb5, 0x54, 0x53, 0x1d, 0x3f, 0xfb, 0xbc, 0x91,
-  0x3a, 0x8a, 0xe5, 0xca, 0xab, 0xe7, 0x4f, 0xf5,
-  0xdf, 0x4f, 0xad, 0xdd, 0x78, 0xe8, 0xda, 0x7b,
-  0xc2, 0xb6, 0xa6, 0x0a, 0x94, 0xf5, 0x1f, 0x44,
-  0xd7, 0x8a, 0x53, 0xbb, 0xfa, 0x35, 0x42, 0xd3,
-  0xbb, 0xba, 0x1d, 0x20, 0xde, 0xa7, 0x88, 0x85,
-  0x13, 0xc2, 0xbb, 0xd4, 0x74, 0x61, 0xe7, 0x6c,
-  0xb2, 0x7f, 0xdb, 0xaf, 0xe9, 0x16, 0xa6, 0xd4,
-  0x74, 0xfd, 0xbe, 0xdf, 0xde, 0x50, 0xe9, 0xee,
-  0xf1, 0xca, 0xf9, 0xd3, 0xf6, 0x50, 0x3f, 0xd7,
-  0x8e, 0x8f, 0x3d, 0x4e, 0x93, 0xcf, 0xae, 0xbf,
-  0x4e, 0x10, 0xe8, 0xc4, 0x67, 0xee, 0x10, 0x75,
-  0x21, 0x9f, 0xff, 0xfd, 0x54, 0xd8, 0x8a, 0x73,
-  0xd6, 0xfb, 0x73, 0xb2, 0x9c, 0x5d, 0xe2, 0xe3,
-  0xa7, 0xcf, 0x70, 0x3b, 0x09, 0xd3, 0xf7, 0x1e,
-  0x20, 0x5f, 0xc3, 0xa7, 0xfd, 0xdd, 0xbb, 0x55,
-  0xc1, 0xdd, 0x0e, 0x9f, 0xf7, 0xe0, 0x13, 0xbf,
-  0xc6, 0x5f, 0x3a, 0x1c, 0x7f, 0x80, 0x3e, 0x9e,
-  0xba, 0x95, 0x51, 0xd3, 0xf5, 0xd4, 0xd5, 0x33,
-  0x47, 0x4e, 0x08, 0x42, 0x54, 0xff, 0xed, 0x6f,
-  0x54, 0xae, 0xd7, 0xf9, 0x8a, 0x38, 0xab, 0x17,
-  0x91, 0xb4, 0x54, 0x5c, 0x95, 0x0e, 0x54, 0xbf,
-  0x8f, 0x5b, 0x29, 0x18, 0x55, 0xf4, 0x8b, 0x50,
-  0xcb, 0x9a, 0xfe, 0x1d, 0x3e, 0x0e, 0x91, 0xf0,
-  0x9d, 0x3f, 0x93, 0xc6, 0xa1, 0xfe, 0x0a, 0x98,
-  0x21, 0x2a, 0x38, 0x3c, 0x70, 0x98, 0xcf, 0x53,
-  0x5b, 0xbd, 0x95, 0x63, 0x47, 0x3f, 0xfa, 0xea,
-  0x53, 0x8e, 0xa7, 0x15, 0x4d, 0x50, 0xe9, 0xff,
-  0x6b, 0x63, 0xe0, 0xbc, 0xd6, 0x54, 0xe8, 0x72,
-  0x23, 0x76, 0x9b, 0x3e, 0xc7, 0xb3, 0x62, 0x74,
-  0xfd, 0xa4, 0x1e, 0x33, 0xa7, 0x4f, 0xee, 0x2a,
-  0x9d, 0x0f, 0xbe, 0x74, 0xff, 0xff, 0xb6, 0xaf,
-  0xeb, 0xee, 0xb0, 0x73, 0x6b, 0xb3, 0xb9, 0xc7,
-  0xb8, 0xf1, 0x7a, 0xc2, 0x23, 0x73, 0xcb, 0x2e,
-  0x34, 0x9f, 0xfe, 0xcd, 0x53, 0x16, 0xaa, 0x2e,
-  0xca, 0xd5, 0x0e, 0x9f, 0xff, 0xff, 0x6f, 0x1f,
-  0xa6, 0xf0, 0x3c, 0xb1, 0xf7, 0x53, 0x7a, 0xa6,
-  0xdf, 0xe3, 0x8b, 0x9e, 0x3a, 0x3a, 0x8d, 0xed,
-  0x28, 0x4d, 0xb0, 0x9d, 0x37, 0x30, 0x1d, 0x0b,
-  0x1a, 0xe0, 0x0b, 0x4e, 0x77, 0xf0, 0x74, 0xc1,
-  0x09, 0xd1, 0xb3, 0xd4, 0xa1, 0x10, 0x47, 0x27,
-  0x6b, 0x98, 0x0a, 0xb1, 0xaf, 0x9f, 0xff, 0xfd,
-  0xa4, 0xe2, 0xb7, 0x7d, 0xf5, 0x7f, 0x19, 0x9d,
-  0xbf, 0x4a, 0x67, 0x40, 0x74, 0x3e, 0x8a, 0xbd,
-  0x97, 0x4f, 0xf6, 0x6a, 0xa8, 0x3a, 0xc6, 0x3a,
-  0x72, 0x0a, 0xc7, 0x46, 0x27, 0xe7, 0xf1, 0xbf,
-  0xf4, 0x91, 0x7c, 0xd6, 0x7d, 0xdc, 0xd7, 0xde,
-  0x1d, 0x3f, 0xf6, 0x08, 0xe2, 0xd5, 0xca, 0x7f,
-  0x4e, 0x9f, 0xdd, 0x41, 0xb9, 0xaa, 0x87, 0x4f,
-  0xb7, 0x7e, 0xbe, 0xe3, 0xa7, 0xed, 0xa2, 0x9e,
-  0xc0, 0x9d, 0x30, 0x42, 0x74, 0x31, 0xf6, 0x09,
-  0x48, 0x4b, 0x67, 0xfb, 0x16, 0xf5, 0xbd, 0xf7,
-  0x50, 0xab, 0x1a, 0xd9, 0xff, 0xd9, 0xd0, 0x65,
-  0x76, 0xfd, 0x2b, 0x75, 0x0e, 0x9f, 0xbb, 0xe0,
-  0xe3, 0x3a, 0x74, 0xe0, 0x84, 0x25, 0x4f, 0xfc,
-  0x83, 0xdb, 0xbf, 0x9e, 0x2c, 0x8a, 0x3a, 0xc5,
-  0xe4, 0x5e, 0xd3, 0xfd, 0x5a, 0x19, 0x54, 0x4a,
-  0xd2, 0x60, 0x52, 0x67, 0x78, 0xbc, 0x79, 0x04,
-  0xa7, 0x9d, 0x8f, 0xb8, 0xf2, 0x09, 0x4e, 0xa6,
-  0xf8, 0x3c, 0x82, 0x53, 0x04, 0x27, 0x90, 0x4a,
-  0x19, 0x14, 0x8b, 0x14, 0x68, 0xbc, 0x25, 0x53,
-  0xf7, 0xf4, 0x1d, 0xfd, 0x16, 0x41, 0x2b, 0x1b,
-  0xd9, 0xe5, 0xfc, 0xfa, 0x9d, 0x2c, 0xbd, 0x9f,
-  0x60, 0x12, 0x67, 0xf2, 0xce, 0xb9, 0xed, 0x6d,
-  0xe2, 0xa7, 0xf6, 0xdd, 0x77, 0xd2, 0xbb, 0x3a,
-  0x4e, 0x2a, 0x77, 0x8b, 0xc5, 0x41, 0x50, 0x86,
-  0xd5, 0x84, 0x14, 0x37, 0x3d, 0xd4, 0x03, 0x15,
-  0x63, 0x59, 0x08, 0x8c, 0x5c, 0x84, 0xac, 0xf5,
-  0xde, 0x2e, 0x3a, 0x4a, 0x3a, 0x6c, 0x77, 0x06,
-  0xc5, 0x62, 0x19, 0xf0, 0x71, 0x6d, 0xa8, 0xe9,
-  0xf9, 0x91, 0x67, 0x20, 0x0a, 0x96, 0xce, 0x9f,
-  0xe7, 0xae, 0x77, 0x15, 0xbb, 0xfa, 0x74, 0xfd,
-  0xb4, 0x53, 0xd8, 0x13, 0xa7, 0xd8, 0xf2, 0xb1,
-  0x47, 0x4e, 0xa6, 0xc4, 0xe8, 0xe9, 0xe1, 0x68,
-  0x9e, 0x7e, 0xef, 0x80, 0x17, 0x50, 0xe9, 0xfb,
-  0x77, 0xf9, 0xa2, 0xad, 0xc2, 0x61, 0x98, 0x20,
-  0x27, 0xb4, 0x6f, 0xd1, 0x14, 0x62, 0x7a, 0x3b,
-  0x28, 0xec, 0x67, 0x13, 0xdd, 0xc7, 0xae, 0x3a,
-  0x1c, 0xaf, 0x5f, 0x0a, 0xeb, 0x0f, 0xde, 0xab,
-  0xd2, 0x3f, 0xfd, 0x1b, 0x4e, 0x08, 0x42, 0x54,
-  0xe1, 0x72, 0x15, 0x62, 0xf2, 0x7e, 0x79, 0x67,
-  0x2f, 0x05, 0xe3, 0xa7, 0xab, 0xef, 0x84, 0xe9,
-  0xf3, 0xc3, 0xb4, 0x51, 0xd3, 0xff, 0xc9, 0xcf,
-  0x5d, 0x40, 0x7e, 0x81, 0xcf, 0xae, 0x3a, 0x17,
-  0xaa, 0x34, 0x36, 0x69, 0xe4, 0x5a, 0x27, 0x9c,
-  0xed, 0xf4, 0xe9, 0xfb, 0x48, 0xb7, 0x6e, 0xa1,
-  0xd0, 0xe3, 0xcb, 0xd0, 0xe4, 0xeb, 0xae, 0x5e,
-  0xce, 0x9b, 0xec, 0xbd, 0x1b, 0x76, 0xcb, 0xd2,
-  0x36, 0xbd, 0x30, 0x89, 0x23, 0xf8, 0x7a, 0x1f,
-  0x2e, 0x21, 0xe2, 0x30, 0xec, 0x95, 0x27, 0x7d,
-  0x85, 0x85, 0xf7, 0x09, 0x25, 0xa1, 0x86, 0x24,
-  0x6a, 0x8c, 0x0a, 0xb2, 0xc0, 0x3d, 0x17, 0xa5,
-  0x34, 0x94, 0x7d, 0xa9, 0xd7, 0x9b, 0x9f, 0xd7,
-  0xe1, 0xf3, 0xce, 0x11, 0xb7, 0x84, 0x53, 0xff,
-  0xac, 0xaf, 0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x14,
-  0x54, 0xfe, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0xe8,
-  0x9f, 0xfa, 0xde, 0xeb, 0x60, 0xb7, 0xfb, 0x1a,
-  0x24, 0xb9, 0xfd, 0x6c, 0x16, 0xff, 0x63, 0x45,
-  0xe5, 0x08, 0xde, 0x3b, 0xbc, 0x4e, 0xe3, 0xbc,
-  0x3b, 0x65, 0x25, 0x8e, 0xd4, 0x77, 0x58, 0x62,
-  0xf6, 0xb7, 0x8e, 0xa4, 0x75, 0x7a, 0x52, 0xb8,
-  0xed, 0x72, 0x64, 0xff, 0xeb, 0x2b, 0xdd, 0x6c,
-  0x16, 0xff, 0x63, 0x44, 0xb3, 0x3c, 0xdf, 0xec,
-  0x68, 0x8c, 0xe7, 0xed, 0xa2, 0x9e, 0xc0, 0x9d,
-  0x37, 0x5c, 0x74, 0x94, 0x74, 0xfb, 0x63, 0x5f,
-  0xb0, 0x9e, 0x9a, 0x8b, 0x79, 0x8b, 0x4f, 0xde,
-  0xed, 0x8f, 0x89, 0xd3, 0xa8, 0x8f, 0x9d, 0x02,
-  0x98, 0x82, 0x9f, 0xba, 0x99, 0xa2, 0xa9, 0xff,
-  0xb5, 0xb1, 0xf0, 0x72, 0x7d, 0xc8, 0xa3, 0xa7,
-  0xdd, 0x47, 0x53, 0xce, 0x8d, 0x9f, 0x62, 0xe4,
-  0x69, 0xff, 0xb1, 0x5a, 0xd8, 0x68, 0x95, 0xfb,
-  0xd9, 0xd3, 0xfe, 0xaa, 0x6e, 0xbb, 0x4e, 0xad,
-  0x71, 0xd2, 0xb6, 0x26, 0xa8, 0xb4, 0x2a, 0x7a,
-  0x49, 0x44, 0x79, 0xff, 0xd6, 0x57, 0xba, 0xd8,
-  0x2d, 0xfe, 0xc6, 0x89, 0xa6, 0x7f, 0xf5, 0x95,
-  0xee, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x71, 0x9f,
-  0xfd, 0x65, 0x7b, 0xad, 0x82, 0xdf, 0xec, 0x68,
-  0xa0, 0x67, 0xc2, 0xdf, 0xec, 0x68, 0xb8, 0x26,
-  0x4d, 0x9d, 0x3f, 0xba, 0xe4, 0xdf, 0x18, 0xa3,
-  0xa5, 0x6c, 0x3f, 0x8a, 0x98, 0x5c, 0x2b, 0x3f,
-  0xb7, 0x6e, 0x68, 0x0c, 0x09, 0xd3, 0xfc, 0xeb,
-  0x60, 0xb7, 0xfb, 0x1a, 0x24, 0x99, 0x5a, 0xa7,
-  0xeb, 0xe6, 0x90, 0xf2, 0xe9, 0xf3, 0xa5, 0x5b,
-  0x32, 0x4a, 0xca, 0x40, 0x52, 0xa4, 0x32, 0xb5,
-  0x0a, 0xa9, 0xff, 0x5f, 0xfb, 0x60, 0xb7, 0xfb,
-  0x1a, 0x2d, 0x49, 0xff, 0x7b, 0xad, 0x82, 0xdf,
-  0xec, 0x68, 0x95, 0x60, 0xe9, 0x5a, 0xfa, 0x26,
-  0x14, 0x91, 0x78, 0x8d, 0x3f, 0xad, 0x82, 0xdf,
-  0xec, 0x68, 0x8a, 0x67, 0xf5, 0xb0, 0x5b, 0xfd,
-  0x8d, 0x11, 0xa4, 0xfe, 0xb6, 0x0b, 0x7f, 0xb1,
-  0xa2, 0x9f, 0x9f, 0xfd, 0x65, 0x7b, 0xad, 0x82,
-  0xdf, 0xec, 0x68, 0x9a, 0xa7, 0xf5, 0xb0, 0x5b,
-  0xfd, 0x8d, 0x15, 0xdc, 0xf3, 0x7f, 0xb1, 0xa2,
-  0xbe, 0x9c, 0x10, 0x84, 0xa9, 0x74, 0xab, 0x17,
-  0x90, 0x27, 0xcc, 0xa4, 0x79, 0xce, 0x47, 0xce,
-  0x9f, 0xf6, 0x54, 0x3f, 0xaa, 0x26, 0x3c, 0x74,
-  0xff, 0xbf, 0x63, 0x8f, 0x6d, 0xd9, 0xc1, 0xd2,
-  0xb6, 0x22, 0xe1, 0x62, 0x1e, 0x8e, 0x50, 0xf6,
-  0x7f, 0xf5, 0x95, 0xee, 0xb6, 0x0b, 0x7f, 0xb1,
-  0xa2, 0x7b, 0x9f, 0xd6, 0xc1, 0x6f, 0xf6, 0x34,
-  0x5c, 0x33, 0xff, 0x5b, 0xdd, 0x6c, 0x16, 0xff,
-  0x63, 0x44, 0x9f, 0x08, 0xae, 0xcd, 0xe3, 0xb7,
-  0x1d, 0xdf, 0x3b, 0x63, 0xb5, 0x94, 0x86, 0x35,
-  0x9a, 0xa1, 0xd1, 0x49, 0x71, 0xdc, 0xfe, 0xb6,
-  0x0b, 0x7f, 0xb1, 0xa2, 0x2a, 0x9f, 0xd6, 0xc1,
-  0x6f, 0xf6, 0x34, 0x53, 0x33, 0xff, 0xac, 0xaf,
-  0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x13, 0x3c, 0xff,
-  0xeb, 0x2b, 0xdd, 0x6c, 0x16, 0xff, 0x63, 0x45,
-  0x1b, 0x0f, 0x26, 0x35, 0xc1, 0xdd, 0xf3, 0xbd,
-  0x29, 0x4f, 0xfd, 0x6f, 0x75, 0xb0, 0x5b, 0xfd,
-  0x8d, 0x11, 0xd4, 0xfd, 0xbc, 0xef, 0x18, 0xf1,
-  0xd3, 0xe1, 0x6f, 0xf6, 0x34, 0x53, 0x53, 0xf6,
-  0xd1, 0x4f, 0x60, 0x4e, 0x9f, 0xfe, 0xcd, 0x57,
-  0x1c, 0x3f, 0xdd, 0x57, 0xdc, 0x74, 0xc8, 0x03,
-  0xa7, 0xfa, 0x9e, 0xfa, 0x36, 0xda, 0xc2, 0x88,
-  0xfe, 0x96, 0xf3, 0x4d, 0x95, 0xb8, 0x4d, 0x2f,
-  0x0b, 0xb5, 0x0b, 0xf9, 0xf0, 0xb7, 0xfb, 0x1a,
-  0x2a, 0xa9, 0xff, 0x7b, 0xad, 0x82, 0xdf, 0xec,
-  0x68, 0x9b, 0x65, 0x6c, 0x3f, 0x65, 0x18, 0x4f,
-  0xeb, 0x60, 0xb7, 0xfb, 0x1a, 0x2b, 0xf9, 0xfd,
-  0x6c, 0x16, 0xff, 0x63, 0x45, 0x8d, 0x3e, 0x16,
-  0xff, 0x63, 0x45, 0xab, 0x3f, 0xef, 0x75, 0xb0,
-  0x5b, 0xfd, 0x8d, 0x14, 0x14, 0xad, 0x87, 0xec,
-  0xa3, 0x09, 0xfd, 0x6c, 0x16, 0xff, 0x63, 0x45,
-  0xc5, 0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68, 0xba,
-  0x67, 0xff, 0xdd, 0xfb, 0x69, 0xd8, 0x23, 0xee,
-  0x7b, 0x02, 0x74, 0xfd, 0x7a, 0xf7, 0x2b, 0xfa,
-  0x3a, 0x79, 0xbf, 0xd8, 0xd1, 0x26, 0x4f, 0xf0,
-  0xe3, 0xfa, 0xd7, 0xba, 0x87, 0x40, 0x9f, 0x1a,
-  0x8a, 0xe7, 0xee, 0x01, 0x7a, 0xd0, 0x0b, 0xe7,
-  0x4f, 0xb3, 0x5b, 0x57, 0x9d, 0x3f, 0xfe, 0xf6,
-  0x14, 0xaf, 0x73, 0x59, 0x60, 0x84, 0x25, 0x43,
-  0x8f, 0xe3, 0x44, 0xd3, 0xff, 0xae, 0xef, 0xe9,
-  0x06, 0x95, 0x4e, 0xe8, 0xe9, 0xc1, 0x08, 0x4a,
-  0x9f, 0x87, 0xde, 0x56, 0xe8, 0x55, 0x8b, 0xc9,
-  0xf6, 0x28, 0x72, 0xf6, 0x74, 0xff, 0x94, 0x8d,
-  0x5e, 0xdd, 0xa4, 0xa1, 0xd3, 0xfd, 0x9e, 0x0e,
-  0x59, 0xc7, 0xb8, 0xe9, 0xff, 0xde, 0xf5, 0x76,
-  0x9d, 0xc5, 0xb6, 0x3b, 0x3a, 0x31, 0x18, 0x3a,
-  0x3e, 0x09, 0xcc, 0xfd, 0x7b, 0xee, 0x57, 0xf4,
-  0x74, 0xf6, 0x9e, 0xce, 0x0e, 0x9f, 0xed, 0xdf,
-  0xe6, 0x20, 0x56, 0xe8, 0x74, 0x2c, 0x7c, 0x0b,
-  0xe4, 0x73, 0x82, 0x10, 0x9d, 0x3f, 0xfe, 0xc5,
-  0x6b, 0xa8, 0x0c, 0xe2, 0x98, 0xa4, 0x62, 0xac,
-  0x5e, 0x46, 0x26, 0x69, 0xb8, 0x48, 0x55, 0x0a,
-  0x7f, 0x08, 0xf8, 0xf5, 0x1c, 0x74, 0xce, 0xb2,
-  0xf1, 0x73, 0x63, 0x21, 0x29, 0x7c, 0x85, 0xf8,
-  0x57, 0xac, 0x45, 0xec, 0xbd, 0x3c, 0xa4, 0x3a,
-  0xb5, 0x1b, 0x1f, 0x33, 0x59, 0xf6, 0x28, 0x72,
-  0xf6, 0x74, 0xff, 0xd9, 0x5e, 0xa3, 0xdc, 0xeb,
-  0x5f, 0xbd, 0x9d, 0x3f, 0x7b, 0x58, 0x21, 0x09,
-  0xd2, 0xb3, 0x2f, 0x40, 0xfc, 0xe9, 0x5f, 0x61,
-  0x6f, 0x42, 0x95, 0xc9, 0x50, 0xe6, 0x56, 0xd7,
-  0x11, 0xcb, 0xbf, 0x0b, 0x21, 0x27, 0x51, 0xd8,
-  0x21, 0x63, 0x42, 0x7d, 0x1d, 0xdd, 0x3d, 0x79,
-  0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68, 0x8d, 0x67,
-  0xc2, 0xdf, 0xec, 0x68, 0xa9, 0x66, 0xf6, 0x34,
-  0x43, 0x52, 0xb6, 0x1e, 0x8f, 0x98, 0x4f, 0xfd,
-  0x6f, 0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x11, 0xf4,
-  0xfe, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0xc7, 0x9f,
-  0xaf, 0x5e, 0xe5, 0x7f, 0x47, 0x4f, 0xf7, 0x7c,
-  0x14, 0xfd, 0x6b, 0xce, 0x9e, 0x02, 0xb6, 0x27,
-  0x4f, 0xff, 0xf2, 0x0f, 0x73, 0x8c, 0xad, 0x76,
-  0xd5, 0xde, 0xa9, 0xef, 0x9d, 0x1b, 0x44, 0x3d,
-  0x48, 0x67, 0xc2, 0xdf, 0xec, 0x68, 0xb4, 0x27,
-  0xe5, 0xdc, 0xf5, 0xd4, 0x01, 0xd3, 0xe4, 0xd6,
-  0x55, 0x0e, 0x9f, 0xfe, 0xcd, 0x53, 0x16, 0xaa,
-  0x2e, 0xca, 0xd5, 0x0e, 0x87, 0x8f, 0xd7, 0xa4,
-  0xb0, 0x88, 0xc9, 0xc8, 0x53, 0x4f, 0xf7, 0x73,
-  0x35, 0x5f, 0xed, 0xf3, 0xa7, 0xf6, 0x55, 0x6d,
-  0xd7, 0x6a, 0x3a, 0x7f, 0x3b, 0x06, 0x9d, 0x47,
-  0x8e, 0x9f, 0xec, 0xc0, 0xe3, 0x36, 0x04, 0xe8,
-  0xc4, 0x4d, 0x3e, 0x69, 0x43, 0x29, 0xec, 0xaf,
-  0xe8, 0xe9, 0xfd, 0x7f, 0x7d, 0xb9, 0xd9, 0x43,
-  0xa5, 0x65, 0xe2, 0xb8, 0xa4, 0x31, 0xe2, 0x17,
-  0xd8, 0x47, 0x58, 0x7c, 0xd0, 0x9b, 0x50, 0xd3,
-  0x5f, 0x30, 0xe6, 0x41, 0x3f, 0x5e, 0x6f, 0x8e,
-  0xa2, 0xc7, 0x4f, 0x65, 0x7f, 0x47, 0x4a, 0xf5,
-  0xc3, 0xd2, 0xe9, 0x94, 0xf8, 0x5b, 0xfd, 0x8d,
-  0x16, 0xb4, 0xff, 0xbd, 0xd6, 0xc1, 0x6f, 0xf6,
-  0x34, 0x50, 0x72, 0xb2, 0xf1, 0x14, 0x58, 0x58,
-  0xa3, 0x09, 0xff, 0xd6, 0x57, 0xba, 0xd8, 0x2d,
-  0xfe, 0xc6, 0x8a, 0x2e, 0x7f, 0x5b, 0x05, 0xbf,
-  0xd8, 0xd1, 0x75, 0x43, 0x97, 0xc6, 0x9a, 0x11,
-  0x9b, 0x26, 0x52, 0x65, 0x65, 0xe2, 0x82, 0x39,
-  0x1a, 0x1c, 0xe9, 0x4a, 0x7c, 0x2d, 0xfe, 0xc6,
-  0x88, 0x86, 0x75, 0x73, 0x83, 0xa5, 0x6c, 0x3c,
-  0xc7, 0xcc, 0x27, 0xf5, 0xb0, 0x5b, 0xfd, 0x8d,
-  0x11, 0xb4, 0xfe, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2,
-  0x9b, 0x9f, 0xd6, 0xc1, 0x6f, 0xf6, 0x34, 0x54,
-  0x13, 0xfa, 0xd8, 0x2d, 0xfe, 0xc6, 0x8a, 0x9a,
-  0x7c, 0x2d, 0xfe, 0xc6, 0x8a, 0xc2, 0x7d, 0xb0,
-  0xf1, 0x70, 0x9d, 0x3f, 0xce, 0xb6, 0x0b, 0x7f,
-  0xb1, 0xa2, 0x3f, 0x9d, 0x88, 0xf1, 0xd2, 0xb6,
-  0x22, 0xd5, 0x8c, 0x3c, 0xa7, 0xa8, 0x33, 0xff,
-  0xac, 0xaf, 0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x13,
-  0x7c, 0xff, 0xca, 0xf7, 0x5b, 0x05, 0xbf, 0xd8,
-  0xd1, 0x3f, 0x4f, 0xd7, 0xa1, 0x7a, 0xde, 0xab,
-  0xf8, 0xf9, 0xd3, 0xff, 0xc8, 0x88, 0x88, 0x88,
-  0x88, 0x8f, 0xd0, 0xe9, 0xf0, 0xed, 0xef, 0x51,
-  0x53, 0x04, 0x25, 0x46, 0x1b, 0xd0, 0x93, 0xca,
-  0xe2, 0xac, 0x68, 0x21, 0x11, 0x8f, 0x48, 0x53,
-  0x4f, 0xc3, 0xed, 0x5d, 0x89, 0xd3, 0xcf, 0x2b,
-  0x6e, 0x3a, 0x7f, 0x55, 0x15, 0x60, 0x01, 0x0e,
-  0x90, 0xa1, 0xea, 0xec, 0x8e, 0x70, 0x29, 0x87,
-  0x4f, 0x53, 0x5b, 0x58, 0xe8, 0x44, 0xc2, 0xb6,
-  0x4e, 0x2f, 0xfd, 0x26, 0xd0, 0xdc, 0xf7, 0xad,
-  0xcd, 0x47, 0x4d, 0xfd, 0x3a, 0x04, 0xdc, 0xa8,
-  0x92, 0x70, 0x42, 0x13, 0xa7, 0x9e, 0xee, 0xd0,
-  0xab, 0x17, 0x93, 0xcf, 0xeb, 0x6c, 0x74, 0x22,
-  0x23, 0xea, 0x79, 0x71, 0x8c, 0xff, 0xcf, 0x5c,
-  0x0c, 0xed, 0xcb, 0x26, 0xbc, 0xe9, 0xe4, 0xd5,
-  0x18, 0xd1, 0x07, 0x40, 0x9f, 0xa6, 0x91, 0xe6,
-  0x1e, 0x0e, 0x98, 0x21, 0x3a, 0x1c, 0x6b, 0x02,
-  0x2d, 0x3d, 0x44, 0xda, 0xe2, 0xac, 0x68, 0x67,
-  0xd4, 0xe7, 0xc0, 0x28, 0x74, 0x6c, 0xf7, 0xb9,
-  0x99, 0xce, 0x08, 0x42, 0x54, 0x15, 0x62, 0xf2,
-  0x7b, 0x61, 0xda, 0xc5, 0x43, 0x1b, 0xcd, 0x8c,
-  0xc6, 0xd3, 0x68, 0xac, 0x33, 0x3a, 0xf9, 0x3d,
-  0xc7, 0xf4, 0x07, 0x4f, 0xfc, 0x9d, 0x07, 0x51,
-  0xf5, 0x93, 0xa0, 0x3a, 0x00, 0x7c, 0xf4, 0x22,
-  0x9f, 0x96, 0x4c, 0x1a, 0xec, 0xe9, 0xfb, 0x58,
-  0xb7, 0x51, 0x47, 0x88, 0x0a, 0x7d, 0xfd, 0xe2,
-  0xa8, 0x68, 0x80, 0xac, 0x6e, 0xa7, 0xc8, 0x0d,
-  0xbf, 0x43, 0xa7, 0xf0, 0xad, 0x4d, 0xf7, 0x5b,
-  0x3a, 0x79, 0xf0, 0x0a, 0x15, 0x30, 0x42, 0x54,
-  0x21, 0xb7, 0x09, 0x0c, 0xfd, 0xe2, 0xe7, 0x77,
-  0x65, 0x58, 0xd0, 0x42, 0x27, 0x77, 0x84, 0x5b,
-  0x66, 0xea, 0x26, 0x8a, 0x2e, 0x84, 0x5c, 0xfa,
-  0xed, 0x5d, 0xfc, 0xcd, 0x10, 0x3c, 0xff, 0xab,
-  0x73, 0xc9, 0xc9, 0x34, 0x9c, 0x1d, 0x3b, 0xc5,
-  0xe3, 0xa6, 0x08, 0x4e, 0x9f, 0xc3, 0xbc, 0x5d,
-  0xcd, 0xd6, 0x63, 0x62, 0x11, 0xb9, 0x27, 0x08,
-  0xbf, 0x17, 0x39, 0xff, 0xd8, 0xa5, 0x7b, 0xb0,
-  0x5b, 0xfd, 0x8d, 0x10, 0xc4, 0x54, 0xfe, 0x7a,
-  0x51, 0x3f, 0x60, 0xb7, 0xfb, 0x1a, 0x20, 0xa9,
-  0xed, 0x51, 0x00, 0x54, 0xef, 0x17, 0x8a, 0x9e,
-  0xbb, 0xbf, 0x7c, 0xa9, 0xfd, 0xb7, 0xb3, 0x54,
-  0x40, 0x15, 0x05, 0x4f, 0xd8, 0xc9, 0x54, 0x51,
-  0x53, 0x04, 0x25, 0x4f, 0xdd, 0x4e, 0xbd, 0xb1,
-  0x2a, 0x31, 0x30, 0xa6, 0x21, 0x50, 0xdd, 0x49,
-  0x00, 0x67, 0xd0, 0xa0, 0x95, 0x73, 0x16, 0x9b,
-  0x62, 0x55, 0x8f, 0xca, 0x5e, 0xe4, 0xf5, 0xeb,
-  0x1d, 0x8c, 0xff, 0x91, 0xdf, 0xdc, 0xa0, 0xa5,
-  0x0e, 0x9f, 0xf2, 0x6a, 0xa8, 0xbb, 0x84, 0x02,
-  0x1d, 0x3f, 0xff, 0x2d, 0xfe, 0xef, 0xaf, 0x2c,
-  0x7a, 0xed, 0x5d, 0xfc, 0xcd, 0x17, 0xdc, 0xfb,
-  0x7a, 0xee, 0x38, 0xe9, 0xff, 0x77, 0x6e, 0xd5,
-  0x70, 0x77, 0x43, 0xa7, 0xf6, 0x81, 0xcf, 0xae,
-  0xae, 0x1e, 0x20, 0x19, 0xde, 0x2e, 0x3c, 0x40,
-  0x31, 0x87, 0xd3, 0x72, 0x14, 0xde, 0xe3, 0xc4,
-  0x03, 0x3d, 0xfd, 0x7d, 0xc7, 0x88, 0x06, 0x7f,
-  0x6d, 0xab, 0x80, 0x02, 0x1e, 0x20, 0x19, 0xdb,
-  0xef, 0x07, 0x88, 0x06, 0x38, 0x45, 0xca, 0x88,
-  0xaa, 0x5e, 0xb8, 0xfa, 0x70, 0xa6, 0x8f, 0x10,
-  0x0c, 0x1e, 0x20, 0x19, 0x91, 0x47, 0x88, 0x06,
-  0x38, 0x37, 0x3b, 0x17, 0x9e, 0xda, 0xb8, 0x43,
-  0xc4, 0x03, 0x3b, 0x5e, 0xc7, 0x88, 0x06, 0x7f,
-  0xdd, 0xf7, 0x5a, 0xbb, 0x6f, 0x13, 0xc4, 0x03,
-  0x37, 0xf0, 0x78, 0x80, 0x67, 0xf7, 0x7c, 0x34,
-  0xa2, 0x00, 0xf1, 0x00, 0xcf, 0xb7, 0x7f, 0xfa,
-  0x03, 0xc4, 0x03, 0x36, 0xe8, 0x78, 0x80, 0x60,
-  0x4f, 0x67, 0x46, 0xd3, 0xed, 0x75, 0x1f, 0x71,
-  0xa2, 0x01, 0x98, 0x08, 0x78, 0x80, 0x6c, 0x6d,
-  0x67, 0xdb, 0x45, 0x7f, 0x07, 0x88, 0x06, 0x7a,
-  0xef, 0xeb, 0x1e, 0x20, 0x19, 0xc8, 0x2c, 0x78,
-  0x80, 0x67, 0xfd, 0x8f, 0xd3, 0x84, 0xce, 0x82,
-  0x87, 0x88, 0x06, 0x7d, 0x77, 0xb9, 0xc8, 0x78,
-  0x80, 0x63, 0x11, 0x01, 0x54, 0xc9, 0x84, 0x07,
-  0x88, 0x06, 0x1c, 0xaa, 0x3f, 0x82, 0x3c, 0x84,
-  0xc6, 0xd5, 0xaa, 0x64, 0x03, 0x4a, 0x17, 0x6a,
-  0x14, 0xd7, 0x11, 0x4f, 0xb3, 0x54, 0xf7, 0xcf,
-  0x10, 0x0c, 0xfe, 0xe1, 0x19, 0x61, 0x4d, 0x1e,
-  0x20, 0x1e, 0x0d, 0xa4, 0xe1, 0x40, 0x9e, 0x20,
-  0x18, 0x63, 0xf7, 0x15, 0x09, 0xed, 0xf5, 0xd4,
-  0x3c, 0x40, 0x33, 0xf7, 0xac, 0xec, 0x7d, 0xc7,
-  0x88, 0x06, 0x31, 0x11, 0x40, 0x20, 0xb8, 0xbe,
-  0x7f, 0xf7, 0xbd, 0xc5, 0x52, 0x96, 0xa5, 0xc2,
-  0x03, 0xc4, 0x03, 0x30, 0x80, 0xf1, 0x00, 0xcf,
-  0xbf, 0x54, 0xdb, 0xe7, 0x88, 0x06, 0x7e, 0xdf,
-  0x6e, 0x76, 0x50, 0xf1, 0x00, 0xc2, 0x22, 0x4b,
-  0xa4, 0x5a, 0x35, 0x8e, 0x17, 0xf5, 0x72, 0x1b,
-  0x6b, 0x20, 0x0b, 0x05, 0x48, 0xbc, 0xbc, 0x04,
-  0xf4, 0x95, 0xb1, 0xa8, 0xf0, 0x17, 0xcc, 0x39,
-  0xc3, 0xae, 0x77, 0xfb, 0x1a, 0x20, 0x1b, 0x22,
-  0xda, 0x7a, 0xfd, 0xe9, 0x70, 0xa3, 0xa6, 0x02,
-  0x15, 0x2b, 0xe5, 0x4e, 0xaa, 0x3c, 0x74, 0xc1,
-  0x09, 0x51, 0xb3, 0xd9, 0xbd, 0x8a, 0xac, 0x24,
-  0x11, 0xc9, 0xca, 0xdd, 0x0a, 0xb1, 0xe0, 0xcf,
-  0x6a, 0x97, 0x97, 0x1d, 0x0f, 0x32, 0xaa, 0x9c,
-  0x4e, 0xd4, 0x93, 0x2d, 0x9c, 0x02, 0x18, 0xdc,
-  0xcb, 0x67, 0xe1, 0x59, 0xc8, 0x2f, 0x1d, 0x3f,
-  0xe7, 0x53, 0x97, 0x71, 0x48, 0x37, 0xce, 0x9f,
-  0xb9, 0x84, 0x77, 0x95, 0x2a, 0x79, 0x6a, 0xfa,
-  0xc7, 0x4f, 0xb1, 0x67, 0x23, 0xe7, 0x4f, 0x67,
-  0x51, 0xc5, 0x40, 0x9f, 0x5f, 0x48, 0xef, 0x0a,
-  0x21, 0x13, 0x38, 0xc2, 0xda, 0xa0, 0xfc, 0x26,
-  0x67, 0xb7, 0xdd, 0x50, 0xe9, 0xd7, 0x2f, 0x74,
-  0x3a, 0x7f, 0xed, 0x53, 0x38, 0x47, 0xe9, 0x8f,
-  0xe8, 0xe8, 0x43, 0xe8, 0xf2, 0x29, 0xf7, 0xae,
-  0xe3, 0x84, 0x3a, 0x6a, 0x50, 0xe9, 0xc1, 0x08,
-  0x4e, 0x98, 0x1e, 0x55, 0x8b, 0xc8, 0x13, 0xd6,
-  0xa1, 0x94, 0xef, 0x06, 0x15, 0x0e, 0x45, 0xda,
-  0xa1, 0x00, 0xbe, 0x43, 0x3f, 0xb5, 0xdc, 0x7c,
-  0x1c, 0xdc, 0x74, 0xff, 0x77, 0x17, 0x65, 0x82,
-  0x10, 0x95, 0x39, 0x5f, 0xa3, 0xa2, 0xa7, 0xaa,
-  0xb8, 0xea, 0x11, 0x1c, 0xfb, 0x38, 0xf8, 0x45,
-  0xcd, 0x5f, 0x3a, 0x65, 0xa8, 0x74, 0xfd, 0x6c,
-  0x5d, 0xbe, 0xf1, 0x86, 0xb3, 0x98, 0xac, 0xf7,
-  0x19, 0x5f, 0x3a, 0x7f, 0xe4, 0xce, 0xba, 0xb9,
-  0xde, 0xa0, 0x4e, 0x96, 0xc5, 0x15, 0x7d, 0x48,
-  0xd1, 0x0c, 0x3c, 0xda, 0x4c, 0x3a, 0x37, 0x0e,
-  0x23, 0xf9, 0xbe, 0x5e, 0xc7, 0x7b, 0x3f, 0x1a,
-  0x58, 0xc5, 0x63, 0xa3, 0x02, 0x07, 0x61, 0x15,
-  0xa8, 0xf0, 0x97, 0x46, 0x15, 0x3f, 0x74, 0x19,
-  0xc7, 0xb8, 0xe9, 0xf7, 0x35, 0x9c, 0x97, 0xb2,
-  0xa3, 0x0f, 0x6f, 0x99, 0x6c, 0xff, 0xe1, 0xbf,
-  0xdb, 0xbf, 0x9e, 0x53, 0x69, 0xd3, 0xa5, 0xcc,
-  0xd1, 0x02, 0xcb, 0x46, 0xa0, 0x52, 0x5b, 0xd1,
-  0xbc, 0x08, 0xfc, 0xff, 0xb6, 0xbf, 0x5d, 0xf3,
-  0xb0, 0x00, 0x85, 0x4f, 0xfe, 0xd5, 0x3d, 0xfe,
-  0x4a, 0x4c, 0xee, 0x97, 0xce, 0x84, 0x44, 0x9e,
-  0xd1, 0x27, 0x3d, 0xd7, 0x1d, 0x08, 0x9c, 0x12,
-  0xa1, 0x13, 0x58, 0x5d, 0x5c, 0x45, 0x3f, 0x9c,
-  0xb6, 0x77, 0xeb, 0x87, 0x4f, 0xfe, 0x16, 0xee,
-  0x2e, 0xee, 0x20, 0xa5, 0x0e, 0x9f, 0xde, 0xb5,
-  0x71, 0x59, 0x43, 0xa3, 0x0f, 0xe5, 0x72, 0x3c,
-  0xff, 0xfc, 0x81, 0xa6, 0x9f, 0x6d, 0xd7, 0x95,
-  0xe6, 0x57, 0x6a, 0x3a, 0x36, 0x88, 0x4d, 0x11,
-  0xce, 0xe3, 0xc4, 0xe9, 0xf0, 0x3f, 0xb9, 0x78,
-  0x74, 0x21, 0xe2, 0x5c, 0x37, 0x3c, 0x8a, 0x7d,
-  0x63, 0xa1, 0x13, 0xdb, 0x74, 0x65, 0xf4, 0x67,
-  0xd1, 0x14, 0xf0, 0x3d, 0xfa, 0x1d, 0x30, 0x42,
-  0x74, 0x50, 0xdc, 0x04, 0x8a, 0x7e, 0xa6, 0xeb,
-  0xf9, 0x52, 0xac, 0x68, 0x67, 0x04, 0x21, 0x2a,
-  0x79, 0xda, 0xc6, 0x2a, 0xc5, 0xe4, 0xfb, 0x38,
-  0xd8, 0x28, 0x74, 0xbc, 0x4f, 0x5f, 0xa5, 0xf3,
-  0xf7, 0x5f, 0xa2, 0xd9, 0xa3, 0xa7, 0xcf, 0x5e,
-  0xf7, 0x8f, 0x9d, 0x3f, 0xec, 0x6e, 0x30, 0x43,
-  0xf5, 0x58, 0xe9, 0x9c, 0xf1, 0x50, 0xf9, 0xea,
-  0x74, 0xf6, 0x05, 0x14, 0x9f, 0x08, 0x18, 0x44,
-  0xc7, 0xf0, 0x9b, 0xe1, 0xa7, 0x3f, 0xeb, 0xe8,
-  0xff, 0x52, 0xb5, 0xb9, 0x8e, 0x9f, 0xbb, 0xf7,
-  0xeb, 0xee, 0x3a, 0x70, 0x42, 0x12, 0xa7, 0x73,
-  0x40, 0x15, 0x62, 0xf2, 0x7f, 0xbb, 0xe0, 0xe4,
-  0xe4, 0x03, 0xe7, 0x47, 0x08, 0xf2, 0x52, 0x08,
-  0x12, 0xb4, 0x59, 0x38, 0x21, 0x09, 0x62, 0x10,
-  0x9f, 0x0b, 0x7f, 0xb1, 0x62, 0x10, 0xb1, 0xa9,
-  0x9c, 0x10, 0x84, 0xb1, 0x07, 0xc1, 0x62, 0x0f,
-  0xb1, 0xa9, 0x99, 0x15, 0x88, 0x90, 0x66, 0x99,
-  0xf6, 0x93, 0x48, 0xa3, 0xa7, 0xbb, 0xb4, 0xbe,
-  0x74, 0xee, 0x68, 0x03, 0xa1, 0xe3, 0xc0, 0x51,
-  0x1c, 0xf9, 0x92, 0xa8, 0xa2, 0xa7, 0xdd, 0xfe,
-  0xf7, 0x0a, 0x9b, 0x18, 0xa9, 0x82, 0x12, 0xa3,
-  0x0f, 0xd6, 0x84, 0xba, 0x26, 0x08, 0xa4, 0xfe,
-  0xef, 0x34, 0x05, 0x72, 0xf0, 0xab, 0x1b, 0xb8,
-  0x44, 0xe0, 0x36, 0xcd, 0xf0, 0xd3, 0x9f, 0xfd,
-  0x54, 0x05, 0x33, 0x38, 0xfe, 0xfd, 0xf3, 0xa7,
-  0xf5, 0x39, 0xaa, 0x81, 0xf7, 0xce, 0x84, 0x56,
-  0xaf, 0xb8, 0x7b, 0x8c, 0x75, 0x9e, 0x69, 0x44,
-  0xa9, 0xc1, 0x08, 0x4a, 0x9f, 0x38, 0x1f, 0xde,
-  0x0a, 0xb1, 0x79, 0x3f, 0xfd, 0xd7, 0xf9, 0x3e,
-  0x04, 0xeb, 0x7b, 0xdd, 0xf3, 0xa7, 0xff, 0xce,
-  0xc4, 0xb7, 0x1d, 0x4b, 0x9b, 0x2f, 0xec, 0x4e,
-  0x9e, 0xdf, 0x18, 0xa3, 0xa1, 0x13, 0x02, 0x71,
-  0xbf, 0xa9, 0xdc, 0xad, 0x3f, 0xea, 0x51, 0x07,
-  0x49, 0x6e, 0x36, 0x74, 0xff, 0xbb, 0xeb, 0x57,
-  0xc4, 0x77, 0xc1, 0xd1, 0xb3, 0xfc, 0x51, 0xf4,
-  0xfd, 0xe3, 0xc6, 0x67, 0x4e, 0x9f, 0xfe, 0xcd,
-  0x53, 0x16, 0xaa, 0x2e, 0xca, 0xd5, 0x0e, 0x9f,
-  0xda, 0xbd, 0x0b, 0x75, 0x7a, 0x3d, 0x71, 0xd1,
-  0xc2, 0x2f, 0xba, 0x57, 0xa5, 0x09, 0xff, 0xfd,
-  0xdd, 0x65, 0x76, 0x9a, 0xd8, 0x11, 0xd6, 0x08,
-  0x42, 0x54, 0xf7, 0x19, 0x97, 0xca, 0x9c, 0xee,
-  0xdc, 0x68, 0x86, 0x67, 0x04, 0x21, 0x2a, 0x76,
-  0x75, 0x8a, 0xb1, 0x79, 0x3f, 0xec, 0x7b, 0x38,
-  0xf7, 0x75, 0x1e, 0x3a, 0x00, 0x7d, 0x1d, 0x29,
-  0x84, 0x4d, 0x51, 0xe6, 0x17, 0xc8, 0xc6, 0x15,
-  0xd3, 0xdb, 0xd6, 0xd0, 0xe9, 0xfd, 0x76, 0x08,
-  0x01, 0xbe, 0x9d, 0x3f, 0xfe, 0x47, 0x6f, 0x8a,
-  0xf3, 0xa6, 0x0b, 0x7f, 0xb1, 0xa2, 0x0c, 0x8a,
-  0xa2, 0x53, 0x46, 0x73, 0xf9, 0x7f, 0x28, 0xbf,
-  0x82, 0x87, 0x43, 0x93, 0x0e, 0xdc, 0x2d, 0x74,
-  0x47, 0x3f, 0xfc, 0x9d, 0x7b, 0x92, 0xdb, 0xee,
-  0x71, 0x9d, 0xbe, 0x74, 0xe4, 0x15, 0x8e, 0x84,
-  0x5c, 0x5d, 0xc8, 0x70, 0x6e, 0x38, 0x5f, 0x8d,
-  0x46, 0xe3, 0x65, 0xf5, 0x69, 0xfd, 0xad, 0xae,
-  0xde, 0x9c, 0x85, 0x49, 0x47, 0x4f, 0xea, 0x67,
-  0x6f, 0x8a, 0x5b, 0x67, 0x8b, 0xcc, 0xd6, 0x78,
-  0x6e, 0x7d, 0xc7, 0x4f, 0xee, 0xbb, 0xb8, 0xa4,
-  0x63, 0xa7, 0x2b, 0x8c, 0x3a, 0x10, 0xfc, 0x30,
-  0x8f, 0xcc, 0x67, 0xfd, 0x76, 0xa9, 0xcc, 0x40,
-  0xad, 0xd0, 0xe9, 0xff, 0x93, 0xbf, 0x54, 0x05,
-  0x86, 0x94, 0x2a, 0x38, 0x44, 0x22, 0x90, 0xa7,
-  0xd5, 0xde, 0xdf, 0xa1, 0xd0, 0x54, 0xfd, 0x4e,
-  0x68, 0x28, 0xa2, 0xa0, 0xa8, 0x2a, 0x0a, 0x82,
-  0xa1, 0xc7, 0xbf, 0xb0, 0xa0, 0x16, 0xdc, 0x14,
-  0xbe, 0x15, 0x78, 0x15, 0x35, 0x70, 0xa9, 0xfb,
-  0xff, 0x4b, 0x22, 0x8a, 0xe4, 0x5a, 0xc9, 0x7b,
-  0x2a, 0x0a, 0x82, 0xa1, 0xc5, 0xa6, 0xc2, 0xa0,
-  0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x1e,
-  0x37, 0x9c, 0x05, 0x6c, 0x28, 0x01, 0x54, 0x0a,
-  0x5c, 0x15, 0x05, 0x41, 0x50, 0xe2, 0xd2, 0x81,
-  0x50, 0x54, 0x15, 0x05, 0x41, 0x50, 0xe3, 0x50,
-  0x00, 0xad, 0x05, 0x5e, 0x05, 0x41, 0x50, 0x54,
-  0x15, 0x05, 0x43, 0xc6, 0xa2, 0xf8, 0x50, 0x85,
-  0x54, 0x2a, 0x57, 0xca, 0x82, 0xa0, 0xa8, 0x2a,
-  0x0a, 0x8e, 0x0d, 0x43, 0xe1, 0x40, 0x0a, 0xb8,
-  0x2a, 0x0a, 0x82, 0xa0, 0xa9, 0xf5, 0x50, 0x14,
-  0xc2, 0xa0, 0xa8, 0x71, 0xe7, 0x30, 0x55, 0x42,
-  0xbc, 0x28, 0x04, 0xd2, 0x62, 0xa0, 0xa8, 0x2a,
-  0x0a, 0x82, 0xa1, 0xc6, 0xa1, 0xf0, 0xad, 0x85,
-  0x2e, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x87,
-  0x1a, 0x8e, 0x02, 0xaa, 0x15, 0xd0, 0xa9, 0x54,
-  0xa8, 0x2a, 0x0a, 0x93, 0x8a, 0x82, 0x9f, 0x2c,
-  0x20, 0xa8, 0x2a, 0x0a, 0x82, 0xa1, 0xe3, 0xe6,
-  0x70, 0x55, 0xf1, 0xa6, 0x1a, 0x58, 0x28, 0x01,
-  0x5a, 0x0a, 0x96, 0x15, 0x05, 0x41, 0x52, 0x71,
-  0x50, 0x53, 0xe5, 0x84, 0x15, 0x05, 0x42, 0x1e,
-  0x93, 0x82, 0xb6, 0x34, 0x23, 0x4a, 0x0a, 0x82,
-  0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa1, 0x0d, 0x93,
-  0xe1, 0x42, 0x14, 0xa0, 0xae, 0x85, 0x41, 0x50,
-  0x54, 0x15, 0x02, 0x5f, 0x50, 0x2b, 0x41, 0x50,
-  0x54, 0x15, 0x05, 0x42, 0x8b, 0xee, 0x85, 0x68,
-  0x2a, 0x4a, 0x2a, 0x0a, 0x82, 0xa0, 0x05, 0xa5,
-  0xc1, 0x50, 0x54, 0x15, 0x05, 0x41, 0x50, 0x86,
-  0xa1, 0x60, 0xaa, 0x85, 0x5c, 0x15, 0x08, 0xbf,
-  0x5a, 0xf3, 0x93, 0x8f, 0x78, 0x29, 0xc5, 0xc6,
-  0x6d, 0x7d, 0x23, 0x6c, 0xd7, 0xb3, 0xd5, 0x8e,
-  0x86, 0x11, 0x8a, 0x47, 0xa9, 0xbf, 0xb3, 0x00,
-  0xf3, 0xae, 0xd4, 0x66, 0xd3, 0x0d, 0xcf, 0x2b,
-  0x99, 0x42, 0x94, 0xbe, 0x5b, 0xcc, 0x92, 0xf1,
-  0x26, 0x7c, 0xee, 0xa6, 0x50, 0xab, 0x26, 0xaf,
-  0x3b, 0x68, 0xa2, 0xa7, 0xb6, 0xde, 0x27, 0x4e,
-  0xdf, 0x18, 0x74, 0xf3, 0xe9, 0xce, 0xcf, 0xa2,
-  0x3c, 0x4e, 0x6a, 0x37, 0xa1, 0xf9, 0x80, 0x87,
-  0x4f, 0xc3, 0xfd, 0xe6, 0x80, 0x3a, 0x6f, 0x13,
-  0xa5, 0xb3, 0x98, 0xb4, 0x93, 0x1d, 0x25, 0x1d,
-  0x3b, 0x17, 0xed, 0xb4, 0x49, 0x88, 0xad, 0x50,
-  0x7c, 0x7b, 0x98, 0x7c, 0xff, 0xfa, 0xe4, 0xe5,
-  0xe2, 0x3e, 0x04, 0xb0, 0x42, 0x13, 0xa1, 0xcc,
-  0xd4, 0x9e, 0x21, 0x7b, 0xb8, 0x58, 0x2c, 0x49,
-  0xf4, 0xa1, 0xbe, 0xc3, 0xab, 0x4b, 0xd3, 0xf9,
-  0x3b, 0xaf, 0xed, 0xd8, 0x74, 0xfe, 0x17, 0x77,
-  0x6e, 0xae, 0x1d, 0x3e, 0xc0, 0x66, 0x2c, 0x74,
-  0xfd, 0x4c, 0x5d, 0xd4, 0x7c, 0xe9, 0x26, 0x22,
-  0x1f, 0xa6, 0x5a, 0x26, 0x9e, 0xbb, 0xc5, 0xc7,
-  0x4f, 0x25, 0xcb, 0xdd, 0x0a, 0x9f, 0x3a, 0xc1,
-  0x08, 0x4e, 0x8e, 0x9e, 0x7d, 0xc4, 0xf1, 0xc2,
-  0x24, 0xf1, 0xc2, 0x14, 0x9d, 0x18, 0x21, 0x73,
-  0x74, 0x31, 0xe7, 0xe1, 0xb8, 0x19, 0xd6, 0x3a,
-  0x7b, 0x8e, 0x11, 0x71, 0xd3, 0xff, 0xe4, 0xaa,
-  0x29, 0x93, 0x58, 0x2d, 0xfe, 0xc6, 0x8b, 0xe2,
-  0x7f, 0x07, 0xf5, 0x44, 0xc7, 0x8e, 0x9f, 0xff,
-  0xb3, 0x5c, 0xdc, 0x8b, 0xb7, 0xd0, 0x0e, 0xd1,
-  0x58, 0x54, 0xda, 0xc3, 0xa7, 0xc3, 0xb7, 0xbd,
-  0x46, 0x98, 0x4e, 0x7b, 0x57, 0x27, 0x9a, 0x61,
-  0x39, 0x80, 0x86, 0xa0, 0x4e, 0x7f, 0x77, 0xef,
-  0xe9, 0x04, 0x06, 0xa0, 0x4e, 0x7f, 0x53, 0x2b,
-  0xba, 0x5c, 0xf1, 0xa6, 0x13, 0x9b, 0x38, 0x34,
-  0xc2, 0x73, 0x04, 0x27, 0x98, 0x4e, 0x31, 0x34,
-  0xc7, 0xcd, 0x36, 0x5c, 0xa2, 0x2a, 0x20, 0x2e,
-  0x42, 0x09, 0x1c, 0xb4, 0x59, 0x84, 0xec, 0x7c,
-  0xf2, 0xdb, 0xe9, 0xfb, 0x06, 0x3c, 0x88, 0xa2,
-  0xa8, 0x4d, 0x4a, 0x53, 0x8e, 0x15, 0xb1, 0x31,
-  0x2d, 0x56, 0xf5, 0x2a, 0xda, 0x7d, 0xc6, 0x0e,
-  0xef, 0x9d, 0x3e, 0xee, 0x73, 0xc5, 0x8e, 0x9f,
-  0xc0, 0xe7, 0xd7, 0x2f, 0xfb, 0xc7, 0x47, 0x4f,
-  0x8b, 0x45, 0x30, 0x8b, 0x90, 0x39, 0x2e, 0x3b,
-  0x68, 0xdf, 0x08, 0xb9, 0xff, 0xca, 0xd5, 0x37,
-  0xd7, 0xdd, 0xad, 0xd3, 0x67, 0x4f, 0xff, 0xee,
-  0xe3, 0xf9, 0x4f, 0xed, 0x76, 0x9a, 0xad, 0xde,
-  0xa3, 0xa7, 0x0d, 0x28, 0x78, 0x80, 0xe7, 0xff,
-  0xed, 0xeb, 0x98, 0xa5, 0x53, 0x96, 0x0b, 0x7f,
-  0xb1, 0xa2, 0x03, 0xb1, 0xa8, 0x9f, 0xff, 0xf7,
-  0x7d, 0xd9, 0xd5, 0x9d, 0x8f, 0xbb, 0x9a, 0x02,
-  0xc1, 0x08, 0x4a, 0x9f, 0xc9, 0x82, 0xdf, 0xec,
-  0x68, 0x82, 0x67, 0xf9, 0x35, 0x82, 0xdf, 0xec,
-  0x68, 0xbe, 0x67, 0xdb, 0x5d, 0xdc, 0xa7, 0x07,
-  0xf4, 0xc7, 0x53, 0xfe, 0x7b, 0xdf, 0x5f, 0xcd,
-  0x77, 0xd7, 0x1d, 0x38, 0x21, 0x09, 0x53, 0xf6,
-  0xab, 0x8d, 0xe2, 0x55, 0x8b, 0xc8, 0x79, 0x13,
-  0x3d, 0x60, 0x9f, 0xf9, 0xe5, 0x23, 0xf4, 0xee,
-  0x3d, 0xcd, 0xc7, 0x4f, 0xff, 0x73, 0x7f, 0xbc,
-  0x9a, 0xbb, 0x00, 0x10, 0x5c, 0x74, 0xe0, 0x84,
-  0x25, 0x4f, 0xee, 0x60, 0x4e, 0xe3, 0xfa, 0x2a,
-  0xc5, 0xe4, 0xff, 0xfc, 0xbd, 0xf2, 0x6a, 0xef,
-  0x8e, 0x30, 0x3c, 0xb5, 0x4c, 0x78, 0xe9, 0x7d,
-  0x51, 0x57, 0x72, 0x24, 0x39, 0x54, 0x5e, 0xe1,
-  0xb4, 0x24, 0x8a, 0x49, 0xd4, 0x63, 0x73, 0xfe,
-  0xcd, 0x20, 0xd2, 0xa9, 0xdd, 0x1e, 0x20, 0x89,
-  0xfc, 0x98, 0x2d, 0xfe, 0xc6, 0x88, 0x22, 0xc7,
-  0x93, 0x3f, 0xbb, 0xf5, 0x11, 0xd8, 0x4e, 0x80,
-  0x1f, 0xe7, 0x52, 0xe7, 0xf9, 0x3b, 0xae, 0x79,
-  0x5f, 0x7c, 0xe9, 0xff, 0xef, 0x0e, 0xb2, 0xa9,
-  0xbd, 0x77, 0x2b, 0xb3, 0xa1, 0xc8, 0x88, 0xe9,
-  0xd4, 0xfe, 0xd7, 0x35, 0x50, 0x3e, 0xf9, 0xd3,
-  0xdb, 0x5b, 0x61, 0x3a, 0x7f, 0xfd, 0x73, 0xdd,
-  0x4c, 0xad, 0x93, 0x59, 0x5b, 0x84, 0xe9, 0xf6,
-  0x6a, 0x9c, 0xe9, 0xc1, 0xfc, 0xf3, 0x23, 0x9f,
-  0x9a, 0xbb, 0x5f, 0xdd, 0xf3, 0xa7, 0xe5, 0x25,
-  0xee, 0xb8, 0xf1, 0xd1, 0xc1, 0xf1, 0xec, 0xca,
-  0x70, 0xf3, 0xa1, 0xd3, 0xfe, 0xfe, 0xb6, 0x0b,
-  0x7f, 0xb1, 0xa2, 0x11, 0x84, 0x3e, 0x2b, 0x87,
-  0x67, 0xff, 0x26, 0x3f, 0xcf, 0x5b, 0xed, 0xce,
-  0xca, 0x1d, 0x3f, 0xfd, 0xfe, 0xf7, 0x3c, 0xaf,
-  0xaa, 0xc1, 0x08, 0x4e, 0x96, 0x70, 0x89, 0xe5,
-  0x93, 0x67, 0x04, 0x21, 0x2a, 0x7f, 0xb0, 0x1e,
-  0x38, 0xbb, 0x38, 0x2a, 0xc5, 0xe4, 0xc1, 0x09,
-  0x53, 0x82, 0x10, 0x95, 0x3f, 0x7b, 0xdc, 0x55,
-  0x28, 0x55, 0x8b, 0xc8, 0xea, 0x2d, 0x82, 0x8e,
-  0xbe, 0x65, 0x3e, 0x6d, 0xf1, 0xcd, 0x45, 0x58,
-  0xd9, 0xce, 0x08, 0x42, 0x54, 0xea, 0x20, 0x95,
-  0x62, 0xf2, 0x40, 0xd9, 0xff, 0xe9, 0x5a, 0x7e,
-  0xe3, 0xa8, 0xef, 0x63, 0xa7, 0xf7, 0x31, 0xe3,
-  0x6b, 0x93, 0x83, 0xa7, 0xf6, 0xab, 0x8b, 0xb3,
-  0x54, 0x3a, 0x05, 0x13, 0x15, 0x2c, 0xe9, 0xc4,
-  0x22, 0x3b, 0xf2, 0x18, 0x13, 0x9f, 0xbd, 0x3d,
-  0xe8, 0x3a, 0x7f, 0xf6, 0x5e, 0xff, 0xa0, 0xc6,
-  0x4a, 0xa2, 0x8e, 0x9f, 0x9b, 0x74, 0xae, 0xd6,
-  0x2a, 0x7f, 0xb9, 0x77, 0x1f, 0x75, 0x37, 0x7c,
-  0xe9, 0xe4, 0xf5, 0x2e, 0x2a, 0x70, 0x42, 0x12,
-  0xa7, 0xff, 0xb9, 0xa0, 0x33, 0x3b, 0xaa, 0xed,
-  0x3a, 0xf1, 0x56, 0x2f, 0x25, 0x8c, 0x89, 0xe5,
-  0x1f, 0x42, 0x27, 0x4c, 0xe2, 0xb7, 0xd2, 0xb6,
-  0x5d, 0x58, 0x6e, 0x4f, 0xff, 0x95, 0x8c, 0x9d,
-  0xfd, 0x53, 0x8b, 0xbc, 0x5c, 0x74, 0xf9, 0x35,
-  0x45, 0xd8, 0x74, 0x21, 0xfe, 0x69, 0x52, 0x7f,
-  0xfb, 0x6b, 0xb3, 0xbc, 0x77, 0xc3, 0x9d, 0xfb,
-  0xe7, 0x4f, 0xff, 0xf7, 0x15, 0xd8, 0x72, 0xf3,
-  0x6a, 0xfd, 0x52, 0xe7, 0x63, 0xfa, 0x3a, 0x31,
-  0x18, 0x1e, 0xa7, 0x08, 0xcf, 0x7b, 0x79, 0x35,
-  0xd0, 0x89, 0xe1, 0xdb, 0x25, 0xba, 0xee, 0x31,
-  0xb5, 0xa1, 0x54, 0x24, 0x6a, 0x85, 0x7d, 0x61,
-  0x4e, 0x08, 0x42, 0xf6, 0x18, 0x14, 0x95, 0x3b,
-  0xa8, 0xf3, 0x2e, 0x86, 0x60, 0x61, 0xc3, 0x39,
-  0x72, 0x74, 0xe9, 0xff, 0xec, 0xed, 0xb5, 0x7f,
-  0x6f, 0xd2, 0xb8, 0x0f, 0x3a, 0x4f, 0xb8, 0xfb,
-  0xf8, 0x1d, 0x9f, 0xaa, 0xb6, 0xeb, 0xb5, 0x1d,
-  0x3f, 0xee, 0xa6, 0xab, 0xe0, 0xf7, 0xe8, 0x74,
-  0xff, 0xd4, 0xfd, 0x8e, 0x3f, 0x60, 0x84, 0x27,
-  0x4f, 0xff, 0x75, 0x1d, 0xcb, 0x9e, 0xb7, 0xdb,
-  0x9d, 0x94, 0x3a, 0x31, 0x30, 0x66, 0x2f, 0xa9,
-  0xf0, 0x11, 0x27, 0xf2, 0x75, 0xdd, 0xcc, 0x01,
-  0xd3, 0xf9, 0xd8, 0x34, 0xea, 0x3c, 0x74, 0xff,
-  0xf2, 0x2e, 0x41, 0xb7, 0x3d, 0x77, 0x1e, 0xd8,
-  0x9e, 0xef, 0x79, 0xff, 0xec, 0xd2, 0x75, 0xb3,
-  0x55, 0xd8, 0x81, 0x8e, 0x9f, 0x7d, 0x33, 0xba,
-  0x3a, 0x76, 0xbe, 0xf6, 0x74, 0xfe, 0xd5, 0x77,
-  0x60, 0x7e, 0xce, 0x87, 0x93, 0x23, 0xe1, 0x7f,
-  0xa9, 0x9a, 0x26, 0xb8, 0x7e, 0x7f, 0xfe, 0xee,
-  0x52, 0xee, 0x59, 0x5f, 0xee, 0x2c, 0xe4, 0x7c,
-  0xe9, 0xff, 0x65, 0x2e, 0xc1, 0x6f, 0xf6, 0x34,
-  0x40, 0xd3, 0xec, 0xd5, 0x7d, 0xdc, 0x91, 0x4b,
-  0xd5, 0xe9, 0xff, 0xff, 0xfb, 0x35, 0x5f, 0xed,
-  0xfe, 0x54, 0x1f, 0xfd, 0x2e, 0xce, 0x39, 0x62,
-  0xbf, 0xaf, 0xb8, 0xf1, 0x05, 0xcf, 0xfb, 0xfe,
-  0xfb, 0x7f, 0x1c, 0xaf, 0x84, 0xf1, 0x05, 0xcf,
-  0xfd, 0x5d, 0xd7, 0x69, 0xdd, 0x72, 0xbe, 0x13,
-  0xc4, 0x17, 0x3f, 0x93, 0x7d, 0xd7, 0x2b, 0xe1,
-  0x3c, 0x41, 0x73, 0xf2, 0xb3, 0x8e, 0x57, 0xc2,
-  0x78, 0x82, 0xe7, 0xff, 0xfb, 0xfb, 0xdd, 0xab,
-  0x95, 0x1a, 0xbb, 0x1d, 0xdf, 0x7b, 0x02, 0x78,
-  0x82, 0xe6, 0x7f, 0x97, 0x09, 0xd0, 0xb2, 0x80,
-  0xab, 0x7a, 0x27, 0x4f, 0xe2, 0xaa, 0xa5, 0xbb,
-  0x28, 0xfa, 0x7b, 0xc4, 0x1e, 0x74, 0xff, 0xd5,
-  0xdd, 0x76, 0x9d, 0xd7, 0x2b, 0xe1, 0x3c, 0x41,
-  0x73, 0xfc, 0xb5, 0x1b, 0x6f, 0x72, 0xbe, 0x13,
-  0xc4, 0x17, 0x3e, 0xd5, 0x11, 0x5c, 0x99, 0x14,
-  0x5c, 0xd5, 0xa7, 0xff, 0x72, 0x6a, 0xed, 0x93,
-  0x54, 0xe5, 0x7c, 0x27, 0x88, 0x2e, 0x7f, 0xff,
-  0xee, 0xf7, 0x6a, 0xe5, 0x76, 0x72, 0xa3, 0x57,
-  0x63, 0xbb, 0xef, 0x60, 0x4f, 0x10, 0x5c, 0x62,
-  0x64, 0xcf, 0xa1, 0xfa, 0xe4, 0xff, 0x57, 0x63,
-  0xbb, 0xef, 0x60, 0x4f, 0x10, 0x5c, 0xff, 0xf7,
-  0xfb, 0xee, 0xa5, 0x77, 0xc7, 0x08, 0x28, 0x54,
-  0xff, 0xb1, 0xce, 0xba, 0x83, 0xd7, 0x97, 0xcf,
-  0x10, 0x5c, 0x32, 0x3a, 0x05, 0x22, 0x8a, 0x13,
-  0xfe, 0x6d, 0x8e, 0xbc, 0x14, 0xe4, 0x13, 0xc4,
-  0x17, 0x3f, 0x57, 0x75, 0xae, 0xc0, 0x68, 0x02,
-  0xe7, 0xd8, 0x0e, 0x57, 0xc2, 0x78, 0x82, 0xe6,
-  0xcd, 0x31, 0xf9, 0xd4, 0xee, 0x1f, 0x47, 0x5d,
-  0x21, 0x7f, 0x3f, 0x2b, 0x38, 0xe5, 0x7c, 0x27,
-  0x88, 0x2e, 0x7f, 0xcd, 0x5d, 0x8e, 0xef, 0xbd,
-  0x81, 0x3c, 0x41, 0x73, 0x67, 0x2f, 0x44, 0x65,
-  0x0f, 0xe7, 0xf5, 0xdb, 0x57, 0xf5, 0xf7, 0x1e,
-  0x20, 0xb9, 0xff, 0x66, 0xd7, 0x67, 0x73, 0x8f,
-  0x71, 0xe2, 0x0b, 0x51, 0xe1, 0x47, 0x0b, 0xb8,
-  0xe0, 0x2c, 0xec, 0x7c, 0xf4, 0x8c, 0x63, 0x51,
-  0x8c, 0xdd, 0x0b, 0x50, 0xb8, 0xcf, 0x81, 0x40,
-  0x01, 0x0d, 0x10, 0x5d, 0x91, 0x01, 0x3f, 0xec,
-  0x75, 0x7d, 0xd7, 0x97, 0x97, 0x3c, 0x74, 0xfe,
-  0x1e, 0xe7, 0x15, 0xb8, 0x27, 0x4f, 0x9f, 0xd7,
-  0x88, 0x0e, 0x9f, 0xb1, 0xef, 0xaa, 0x5e, 0xce,
-  0x8d, 0xa2, 0x2f, 0xcd, 0x3a, 0x4f, 0x3b, 0xc5,
-  0xe3, 0xa6, 0x02, 0x1d, 0x3d, 0xb4, 0x56, 0x1d,
-  0x07, 0x4f, 0xdf, 0x7f, 0x48, 0x20, 0x3a, 0x38,
-  0x36, 0xfd, 0x0a, 0x9f, 0xff, 0xc9, 0xbe, 0x3a,
-  0x97, 0x36, 0xb1, 0xb8, 0x46, 0xe6, 0xa3, 0xa6,
-  0x02, 0x1d, 0x32, 0x5f, 0x3a, 0x7f, 0xb3, 0x54,
-  0x45, 0x73, 0xc5, 0x8e, 0x9f, 0xd4, 0xca, 0xee,
-  0x97, 0x3c, 0x74, 0xc1, 0x09, 0x53, 0xfd, 0xdc,
-  0x5d, 0xee, 0xa6, 0xf8, 0x3a, 0x19, 0x3f, 0x7d,
-  0x8d, 0x88, 0xaa, 0x95, 0xea, 0x44, 0x06, 0x25,
-  0xec, 0x57, 0xa2, 0xf4, 0x3a, 0x09, 0xaf, 0x31,
-  0x69, 0xc1, 0x08, 0x4a, 0x92, 0x8a, 0xb1, 0x79,
-  0x3e, 0xf5, 0xbf, 0xc4, 0xab, 0x23, 0x67, 0x9c,
-  0x2e, 0xa7, 0xf3, 0xfa, 0x4c, 0xae, 0x3c, 0x74,
-  0x23, 0x63, 0x2f, 0x91, 0x98, 0x5f, 0x3c, 0x7c,
-  0xc7, 0x71, 0xaa, 0xd6, 0x1e, 0x7f, 0x49, 0x1e,
-  0xea, 0x35, 0x21, 0xa3, 0x74, 0xaf, 0xf5, 0xc9,
-  0x73, 0xd8, 0xc9, 0xa3, 0xa7, 0xb1, 0x59, 0xa3,
-  0xa7, 0xbd, 0xee, 0x6e, 0x3a, 0x10, 0xf8, 0xdf,
-  0x1f, 0xbc, 0x20, 0x9f, 0xbb, 0x77, 0x0a, 0xf7,
-  0x1d, 0x3f, 0xfc, 0xfb, 0xba, 0x9c, 0x95, 0xd4,
-  0xbf, 0xad, 0xbc, 0x74, 0x22, 0x21, 0x76, 0x5f,
-  0x3d, 0xcb, 0xf9, 0x73, 0x3a, 0x7e, 0x79, 0x67,
-  0x2f, 0x05, 0xe3, 0xa6, 0x73, 0xc7, 0x4f, 0xab,
-  0x9b, 0x75, 0x0e, 0x9f, 0xfe, 0xaa, 0x73, 0xb6,
-  0xbb, 0xe0, 0xa5, 0x10, 0x05, 0x4f, 0xe0, 0x60,
-  0xb7, 0xfb, 0x1e, 0x20, 0x48, 0x72, 0x2c, 0xf8,
-  0x27, 0x15, 0x19, 0xed, 0x3d, 0xfd, 0x3a, 0x79,
-  0xfa, 0x7e, 0x8e, 0x8c, 0x3c, 0x4a, 0x91, 0x4f,
-  0xee, 0xf8, 0x69, 0x44, 0x01, 0xd3, 0x82, 0x10,
-  0x9f, 0x0f, 0xa9, 0xdf, 0xde, 0x0b, 0x87, 0xd5,
-  0x8d, 0x4c, 0x70, 0x89, 0x40, 0x2d, 0xcf, 0xff,
-  0xb3, 0xbb, 0xbf, 0x6a, 0x6a, 0xb7, 0x7b, 0x9c,
-  0x87, 0x43, 0xc7, 0xf9, 0x7c, 0x92, 0x17, 0xaa,
-  0xac, 0x87, 0x1a, 0x64, 0x32, 0xb6, 0xe9, 0xf1,
-  0x98, 0xcf, 0xb7, 0xa4, 0xd5, 0x0a, 0x9e, 0x64,
-  0xd5, 0x0a, 0x98, 0x21, 0x2a, 0x1c, 0x7b, 0xb8,
-  0x4e, 0x12, 0x09, 0xb0, 0x25, 0x58, 0xd7, 0x4f,
-  0xff, 0xb3, 0x48, 0xd9, 0x9d, 0xd5, 0x76, 0x9d,
-  0x78, 0xe8, 0x01, 0xfc, 0x04, 0x96, 0x7f, 0xff,
-  0x22, 0xed, 0xf4, 0x1c, 0xb5, 0x4c, 0x6a, 0xff,
-  0x75, 0x43, 0xa7, 0xf2, 0xcf, 0xba, 0xb7, 0x20,
-  0x9d, 0x39, 0xde, 0x27, 0x4f, 0x9d, 0x9a, 0xce,
-  0x0a, 0x96, 0xd6, 0x3c, 0x1d, 0x0d, 0x4c, 0x04,
-  0x3a, 0x60, 0x21, 0xd3, 0xf7, 0x6e, 0x76, 0x76,
-  0xdb, 0x35, 0x40, 0x15, 0x9f, 0xfb, 0x55, 0xc5,
-  0x73, 0x40, 0x63, 0xfa, 0x3a, 0x7f, 0x3e, 0xdb,
-  0x1e, 0x69, 0xc1, 0xd3, 0xc0, 0x57, 0xba, 0x87,
-  0xf7, 0xa4, 0x69, 0xcb, 0xf8, 0xf9, 0xd0, 0x87,
-  0xb1, 0xe7, 0x33, 0x82, 0x10, 0x95, 0x3f, 0x26,
-  0x5f, 0xed, 0xd4, 0x2a, 0xc5, 0xe4, 0xf0, 0x7f,
-  0xae, 0x3a, 0x66, 0xa9, 0xd3, 0x82, 0x10, 0x95,
-  0x3f, 0x6f, 0xef, 0xd7, 0x7a, 0x2a, 0xc5, 0xe4,
-  0xfb, 0x01, 0x98, 0xb1, 0xd2, 0xa7, 0x24, 0x4a,
-  0x89, 0x8f, 0x4f, 0xa7, 0xb7, 0xdb, 0x9d, 0xc2,
-  0x3b, 0x72, 0x16, 0xd0, 0x8b, 0x81, 0xee, 0x22,
-  0xc6, 0x4b, 0xee, 0xc2, 0xa7, 0x58, 0xc6, 0x28,
-  0x79, 0xa8, 0xca, 0xe7, 0xe4, 0x50, 0x8f, 0xe8,
-  0xe9, 0xff, 0xed, 0xa9, 0xf7, 0x53, 0x96, 0x77,
-  0xb9, 0xb0, 0x1d, 0x15, 0x3f, 0xdd, 0x15, 0x4a,
-  0xcb, 0xd1, 0xfc, 0x8a, 0x12, 0x50, 0x9b, 0xd1,
-  0x88, 0xba, 0x50, 0x67, 0x12, 0x96, 0x32, 0xb4,
-  0xf4, 0xbf, 0x19, 0xab, 0x47, 0x4a, 0xfc, 0xa2,
-  0x3d, 0xc2, 0x71, 0x68, 0xf3, 0x86, 0x71, 0xf1,
-  0x51, 0xb9, 0x56, 0x74, 0x5b, 0xe9, 0xbf, 0x40,
-  0x94, 0x49, 0xd9, 0xcb, 0xda, 0x53, 0xf1, 0x35,
-  0x59, 0x93, 0x5d, 0x19, 0x4a, 0xe8, 0x5b, 0x84,
-  0x89, 0x7e, 0x57, 0x7f, 0x39, 0xd6, 0xdb, 0xc8,
-  0x7e, 0x45, 0x9f, 0xd2, 0x11, 0xd7, 0xe4, 0xe9,
-  0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68, 0xb8, 0xe7,
-  0xf5, 0xb0, 0x5b, 0xfd, 0x8d, 0x17, 0x5c, 0xff,
-  0xd6, 0xf7, 0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x28,
-  0xc2, 0x3f, 0xbe, 0xbb, 0x8a, 0x38, 0x3b, 0xbe,
-  0x76, 0xc7, 0x7b, 0x87, 0x85, 0xed, 0x03, 0xef,
-  0xd3, 0x5a, 0x86, 0xda, 0x3b, 0xbc, 0x3b, 0x9f,
-  0xfd, 0x65, 0x7b, 0xad, 0x82, 0xdf, 0xec, 0x68,
-  0x96, 0xa7, 0xc2, 0xdf, 0xec, 0x68, 0x8d, 0xe7,
-  0xfd, 0xee, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x5f,
-  0x95, 0xb0, 0xfd, 0x94, 0x61, 0x3f, 0xad, 0x82,
-  0xdf, 0xec, 0x68, 0xaa, 0xe7, 0xfa, 0xfe, 0x77,
-  0x1f, 0xd7, 0xa8, 0xe9, 0xb8, 0xd9, 0xd3, 0xf6,
-  0x0b, 0x7f, 0xb1, 0xa2, 0x40, 0x8e, 0x47, 0x99,
-  0x61, 0x79, 0xf5, 0x3f, 0xbe, 0xf9, 0xd0, 0xe3,
-  0xcb, 0x7c, 0x92, 0x2f, 0xa3, 0xd3, 0xe1, 0xa3,
-  0x3f, 0xf7, 0x71, 0xeb, 0x2f, 0xa7, 0x7b, 0x9a,
-  0x3a, 0x2c, 0x7e, 0x02, 0x53, 0x3f, 0xad, 0x82,
-  0xdf, 0xec, 0x68, 0xb2, 0x27, 0xf5, 0xb0, 0x5b,
-  0xfd, 0x8d, 0x16, 0xbc, 0xfe, 0xb6, 0x0b, 0x7f,
-  0xb1, 0xa2, 0xe4, 0x9f, 0x0b, 0x7f, 0xb1, 0xa2,
-  0xec, 0x9f, 0xf7, 0xba, 0xd8, 0x2d, 0xfe, 0xc6,
-  0x8a, 0x3a, 0x56, 0xc3, 0xf6, 0x51, 0x84, 0xf8,
-  0x5b, 0xfd, 0x8d, 0x14, 0xac, 0xff, 0xff, 0xf5,
-  0x51, 0xe4, 0xae, 0xd7, 0x7f, 0x15, 0xdd, 0x9a,
-  0xbb, 0x5a, 0xa8, 0xf6, 0x1d, 0x3e, 0xb2, 0xbd,
-  0xd6, 0xc4, 0x59, 0x2c, 0x61, 0x0f, 0x2e, 0x77,
-  0xba, 0x19, 0x0f, 0x93, 0xee, 0x39, 0xf5, 0x10,
-  0x80, 0xee, 0x87, 0x7a, 0x85, 0x8a, 0xe8, 0x6c,
-  0xcf, 0xf3, 0xad, 0x82, 0xdf, 0xec, 0x68, 0x8e,
-  0x27, 0xfb, 0x76, 0xc1, 0x6f, 0xf6, 0x34, 0x56,
-  0xb2, 0xb7, 0xa2, 0x0b, 0x48, 0x33, 0xff, 0xac,
-  0xaf, 0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x12, 0xdc,
-  0xd8, 0xf9, 0xd3, 0xfb, 0x8c, 0x52, 0x93, 0x74,
-  0x3a, 0x1f, 0x3c, 0x9d, 0x8b, 0x4e, 0xaf, 0x0e,
-  0x3a, 0x73, 0x94, 0xc7, 0x41, 0xa2, 0x1b, 0x9f,
-  0xf7, 0xba, 0xd8, 0x2d, 0xfe, 0xc6, 0x89, 0x82,
-  0x70, 0xdc, 0x02, 0xa5, 0x64, 0x46, 0xa3, 0xc4,
-  0x7c, 0x0e, 0xb0, 0xda, 0x85, 0xf4, 0x8d, 0x39,
-  0x57, 0x09, 0x53, 0xfe, 0xf7, 0x5b, 0x05, 0xbf,
-  0xd8, 0xd1, 0x31, 0xca, 0xdb, 0x3e, 0x25, 0x0e,
-  0x4f, 0xc9, 0x4e, 0x5a, 0xca, 0x9d, 0x3f, 0xff,
-  0xfc, 0xea, 0x57, 0x2e, 0x0d, 0x2b, 0x8d, 0x94,
-  0xe5, 0x8f, 0xba, 0x9b, 0xee, 0xce, 0x9e, 0x6f,
-  0xf6, 0x34, 0x56, 0x33, 0xfe, 0x5f, 0xcd, 0x77,
-  0x2e, 0x4e, 0xe8, 0xe8, 0xbe, 0x98, 0xdb, 0xe5,
-  0xc3, 0x08, 0x1d, 0x15, 0xcf, 0xfe, 0x4e, 0xea,
-  0xfd, 0xc9, 0xdc, 0x64, 0x13, 0xa7, 0xfd, 0x9c,
-  0x57, 0x28, 0xfb, 0x92, 0xa7, 0x4f, 0xff, 0xfd,
-  0xdb, 0x9e, 0xc6, 0xe5, 0xdb, 0xaf, 0x39, 0x63,
-  0xee, 0xcb, 0xba, 0x0a, 0x1d, 0x3f, 0x97, 0xab,
-  0xcb, 0x39, 0x78, 0x2f, 0x1d, 0x3a, 0xbb, 0xb6,
-  0x27, 0x16, 0xc8, 0xb5, 0x49, 0xd1, 0xfa, 0xfb,
-  0xf4, 0xd7, 0x2c, 0x74, 0xfb, 0xfa, 0xf5, 0xd4,
-  0x3a, 0x3a, 0x78, 0x34, 0x18, 0x9f, 0x06, 0x94,
-  0x40, 0x1d, 0x3e, 0x47, 0x02, 0xe7, 0x1d, 0x39,
-  0x3a, 0xe3, 0xa1, 0x63, 0xc3, 0xd1, 0x44, 0xfc,
-  0x8a, 0xce, 0xee, 0xf9, 0xd2, 0xa1, 0xd1, 0xb3,
-  0x7d, 0xe5, 0xd3, 0x01, 0x0a, 0x98, 0x21, 0x2a,
-  0x36, 0x6a, 0xc2, 0x2b, 0x3f, 0xbd, 0xdd, 0xcd,
-  0x57, 0x65, 0x58, 0xd0, 0xcf, 0x71, 0xef, 0xd0,
-  0xe9, 0xc9, 0xd5, 0x8e, 0x9b, 0xa8, 0x74, 0x2c,
-  0x6c, 0x44, 0x72, 0x78, 0x41, 0x97, 0x87, 0x4e,
-  0xe6, 0x37, 0xce, 0x84, 0x45, 0xbe, 0x2a, 0x6c,
-  0x86, 0xa4, 0x73, 0x57, 0x47, 0x4e, 0x08, 0x42,
-  0x54, 0xff, 0xd8, 0xdc, 0x23, 0xdc, 0xf2, 0xbe,
-  0xf9, 0x56, 0x2f, 0x27, 0xeb, 0x95, 0xbd, 0x03,
-  0xce, 0x9f, 0xcd, 0xba, 0x77, 0x17, 0x79, 0xd3,
-  0x66, 0x8e, 0x87, 0xcf, 0x22, 0xa6, 0x73, 0xff,
-  0xda, 0xdd, 0x2b, 0x9c, 0x77, 0x17, 0x77, 0x28,
-  0x74, 0xac, 0x8a, 0xff, 0xf8, 0x22, 0xc6, 0xa1,
-  0x61, 0x53, 0x65, 0x61, 0xf3, 0xe7, 0x7d, 0x32,
-  0xa2, 0xae, 0x9d, 0xb9, 0x91, 0xcf, 0x85, 0xbf,
-  0xd8, 0xd1, 0x5b, 0xcf, 0xfb, 0xdd, 0x6c, 0x16,
-  0xff, 0x63, 0x44, 0xe1, 0x2b, 0x61, 0xfb, 0x28,
-  0xc2, 0x7c, 0x2d, 0xfe, 0xc6, 0x8b, 0x46, 0x7b,
-  0x16, 0xdd, 0xf3, 0xa5, 0x6c, 0x3d, 0x4a, 0x98,
-  0x4f, 0x37, 0xfb, 0x1a, 0x2d, 0xa9, 0xfa, 0xa8,
-  0xa4, 0xdf, 0x07, 0x4d, 0x6c, 0x13, 0xd8, 0xd1,
-  0x5c, 0xfe, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0xe5,
-  0x9f, 0xd6, 0xc1, 0x6f, 0xf6, 0x34, 0x5d, 0xb0,
-  0x8c, 0xc7, 0x87, 0x8a, 0x1d, 0x1b, 0x7f, 0x10,
-  0xbf, 0xbf, 0x2b, 0x3b, 0x73, 0x93, 0xd7, 0xb8,
-  0xc6, 0xaa, 0xf7, 0xd7, 0xfa, 0x16, 0x68, 0xee,
-  0x7f, 0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x53, 0xcf,
-  0x37, 0xfb, 0x1a, 0x2b, 0x99, 0xfd, 0x6c, 0x16,
-  0xff, 0x63, 0x45, 0x9d, 0x02, 0x7c, 0xd5, 0x2b,
-  0x9f, 0xe7, 0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x21,
-  0x4f, 0x2f, 0x4a, 0xa2, 0x8e, 0x9f, 0xd9, 0x5a,
-  0x53, 0x05, 0xe3, 0xa5, 0x6c, 0x45, 0xdf, 0x90,
-  0xd1, 0x07, 0x44, 0xf3, 0xff, 0xac, 0xaf, 0x75,
-  0xb0, 0x5b, 0xfd, 0x8d, 0x13, 0xe4, 0x32, 0x7d,
-  0xf7, 0xb8, 0xd7, 0x2a, 0x83, 0x3e, 0x16, 0xff,
-  0x63, 0x45, 0x65, 0x3f, 0xef, 0x75, 0xb0, 0x5b,
-  0xfd, 0x8d, 0x13, 0x74, 0xdb, 0xb6, 0x1f, 0xb2,
-  0x8c, 0x27, 0xff, 0x59, 0x5e, 0xeb, 0x60, 0xb7,
-  0xfb, 0x1a, 0x25, 0x69, 0xf0, 0xb7, 0xfb, 0x1a,
-  0x25, 0xc9, 0xe5, 0xdb, 0xea, 0x1d, 0x3e, 0xb2,
-  0xbd, 0xd6, 0xc3, 0xd3, 0xf3, 0x09, 0xff, 0xad,
-  0xee, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x3b, 0x9f,
-  0xed, 0x57, 0x1d, 0x6f, 0xed, 0x0e, 0x9f, 0x97,
-  0x9d, 0x46, 0xce, 0x9d, 0x3f, 0x5e, 0xbd, 0xca,
-  0xfe, 0x8e, 0x9f, 0x0b, 0x7f, 0xb1, 0xa2, 0xa1,
-  0x9f, 0x65, 0x75, 0x8f, 0x1d, 0x2b, 0x5e, 0xa8,
-  0xb7, 0x5e, 0x17, 0xe1, 0x8e, 0x8c, 0x27, 0xc2,
-  0xdf, 0xec, 0x68, 0xaa, 0x27, 0xfd, 0xee, 0xb6,
-  0x0b, 0x7f, 0xb1, 0xa2, 0x6b, 0x95, 0xb0, 0xfd,
-  0x94, 0x61, 0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68,
-  0xab, 0x27, 0xfe, 0xb7, 0xba, 0xd8, 0x2d, 0xfe,
-  0xc6, 0x89, 0x12, 0x7c, 0x2d, 0xfe, 0xc6, 0x8b,
-  0x4a, 0x7f, 0xde, 0xeb, 0x60, 0xb7, 0xfb, 0x1a,
-  0x27, 0xd9, 0x5b, 0x0f, 0xd9, 0x46, 0x13, 0xff,
-  0xac, 0xaf, 0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x14,
-  0x24, 0xfa, 0xbb, 0x79, 0x04, 0xe9, 0xf0, 0xb7,
-  0xfb, 0x1a, 0x28, 0xf9, 0xff, 0xfb, 0x38, 0xaa,
-  0x73, 0xb6, 0xbb, 0xe0, 0xa5, 0x10, 0x05, 0x4f,
-  0xac, 0xaf, 0x75, 0x91, 0x16, 0x98, 0x4e, 0xbe,
-  0x61, 0x08, 0xba, 0xfa, 0xf4, 0x29, 0x5c, 0x7b,
-  0x89, 0x97, 0xe1, 0xde, 0xd0, 0xc1, 0x7c, 0x9d,
-  0x63, 0xba, 0xc3, 0x08, 0x04, 0xfa, 0x8c, 0x1a,
-  0x7f, 0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x11, 0x4f,
-  0xd8, 0x2d, 0xfe, 0xc6, 0x88, 0xae, 0x7f, 0xaf,
-  0x76, 0xc1, 0x6f, 0xf6, 0x34, 0x57, 0x11, 0x63,
-  0xfa, 0xf3, 0x59, 0xec, 0xaf, 0xe8, 0xe9, 0xfd,
-  0x9b, 0x10, 0x02, 0xea, 0x1d, 0x2b, 0xd7, 0xa7,
-  0xa7, 0x42, 0x09, 0xff, 0xbf, 0x6e, 0xdf, 0x75,
-  0x75, 0x47, 0x0e, 0x9f, 0x66, 0xf8, 0x1c, 0x3a,
-  0x76, 0xa9, 0xba, 0x9f, 0x56, 0x91, 0x27, 0xc2,
-  0xdf, 0xec, 0x68, 0xa7, 0xa1, 0x78, 0x8f, 0xb4,
-  0x84, 0xbe, 0x1a, 0x4f, 0xfe, 0xf7, 0x5b, 0x8e,
-  0xf8, 0x69, 0x44, 0x01, 0xd1, 0x64, 0x40, 0xf0,
-  0x6f, 0x3a, 0xdc, 0x61, 0xd3, 0xe4, 0x70, 0x2e,
-  0x71, 0xd3, 0xcd, 0xfe, 0xc6, 0x8a, 0xce, 0x16,
-  0x3d, 0x31, 0x28, 0x9f, 0x9e, 0x52, 0x75, 0xd4,
-  0x3a, 0x72, 0x3d, 0xb3, 0xa7, 0xda, 0x07, 0x3e,
-  0xb8, 0xe9, 0xf6, 0x2c, 0xf5, 0xc0, 0x3a, 0x56,
-  0xc4, 0x60, 0x09, 0x15, 0x4b, 0xbc, 0x73, 0x99,
-  0x54, 0xff, 0xd6, 0xf7, 0x5b, 0x05, 0xbf, 0xd8,
-  0xd1, 0x22, 0xcf, 0xeb, 0x60, 0xb7, 0xfb, 0x1a,
-  0x2c, 0x99, 0xfd, 0x6c, 0x16, 0xff, 0x63, 0x45,
-  0xb1, 0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68, 0xb6,
-  0xe7, 0xfc, 0xbc, 0x5e, 0x5e, 0x96, 0xab, 0x9d,
-  0x40, 0x1d, 0x3f, 0x27, 0x5d, 0xc5, 0xca, 0x3a,
-  0x7c, 0x2d, 0xfe, 0xc6, 0x8b, 0xc2, 0x7b, 0x4b,
-  0xf9, 0x53, 0xa7, 0xd9, 0xd0, 0x5e, 0x21, 0xd3,
-  0xe4, 0xe7, 0x77, 0xd0, 0xe9, 0xda, 0x40, 0x1d,
-  0x2b, 0x5e, 0x9a, 0x99, 0xeb, 0xc9, 0xb8, 0x5e,
-  0xf9, 0x80, 0x09, 0x3a, 0x53, 0xa2, 0x99, 0xf0,
-  0xb7, 0xfb, 0x1a, 0x2f, 0x49, 0xff, 0x77, 0xf4,
-  0xe4, 0xbf, 0xad, 0xbc, 0x74, 0xfb, 0x15, 0x5f,
-  0xe0, 0xe9, 0x5b, 0x11, 0x31, 0xcc, 0xc2, 0xf1,
-  0x06, 0x11, 0x7f, 0x21, 0xe8, 0x5a, 0xe4, 0x7e,
-  0x0c, 0x49, 0xb8, 0xcb, 0xc5, 0x3d, 0x49, 0x80,
-  0x3b, 0xe9, 0xdd, 0xd1, 0xbc, 0x06, 0x30, 0xd9,
-  0xec, 0xaf, 0xe8, 0xe9, 0xfd, 0x9b, 0x10, 0x02,
-  0xea, 0x1d, 0x2b, 0xd7, 0xa7, 0xa7, 0x42, 0x09,
-  0xf0, 0xb7, 0xfb, 0x1a, 0x22, 0x39, 0xff, 0xea,
-  0xdd, 0x4a, 0x62, 0xbb, 0x8b, 0xb9, 0x25, 0xe8,
-  0x3a, 0x7f, 0xce, 0x47, 0x87, 0x35, 0xad, 0xe8,
-  0xe9, 0x9e, 0x51, 0x53, 0x04, 0x25, 0x4f, 0xfc,
-  0xeb, 0x35, 0x76, 0xb5, 0x51, 0xeb, 0x00, 0xd6,
-  0x84, 0x5e, 0x7f, 0x65, 0xef, 0xb9, 0x5f, 0xd1,
-  0xd3, 0xff, 0xf3, 0x58, 0x7f, 0xbb, 0xd5, 0x85,
-  0x35, 0xdf, 0x01, 0xd0, 0xbc, 0x54, 0x19, 0x85,
-  0xac, 0x60, 0xfa, 0xd7, 0xb5, 0xe9, 0x75, 0x71,
-  0xac, 0xf8, 0x5b, 0xfd, 0x8d, 0x11, 0x74, 0xfb,
-  0x40, 0xe7, 0xd7, 0x16, 0xcf, 0x69, 0x5b, 0x0f,
-  0x9f, 0xcc, 0x22, 0xc8, 0xf7, 0x74, 0x34, 0x67,
-  0xfe, 0x57, 0xba, 0xd8, 0x2d, 0xfe, 0xc6, 0x89,
-  0x9a, 0x73, 0xe9, 0x43, 0xa7, 0x36, 0xd4, 0x74,
-  0xff, 0xec, 0xbc, 0xde, 0xb6, 0xdb, 0xe3, 0x58,
-  0xc7, 0x4f, 0xff, 0xb8, 0xdf, 0x5e, 0xca, 0x6f,
-  0xeb, 0x60, 0x84, 0x25, 0x4f, 0x37, 0xfb, 0x1a,
-  0x2c, 0xf9, 0xff, 0xed, 0x8d, 0x7f, 0x96, 0x2e,
-  0xee, 0x53, 0x3a, 0x74, 0xe0, 0x84, 0x25, 0x4f,
-  0xfb, 0xdd, 0x4e, 0xe3, 0x71, 0x82, 0x55, 0x8b,
-  0xc9, 0xfe, 0x4a, 0xef, 0x8e, 0xff, 0xac, 0x74,
-  0xff, 0x6f, 0xbc, 0x73, 0xe2, 0xed, 0x50, 0xe8,
-  0x64, 0xec, 0xc5, 0x62, 0xa5, 0x60, 0x6d, 0xd2,
-  0x5a, 0xe3, 0x99, 0xff, 0xff, 0xfb, 0x30, 0x14,
-  0xcc, 0xed, 0xfe, 0x63, 0xd4, 0xca, 0xda, 0x9d,
-  0xc7, 0x95, 0x8a, 0x3a, 0x75, 0x11, 0xe3, 0xa7,
-  0x2f, 0xe5, 0x4e, 0x87, 0x23, 0x12, 0x90, 0x8a,
-  0xd0, 0xe4, 0xf3, 0xe0, 0xb9, 0x8e, 0x9f, 0x57,
-  0xa9, 0x82, 0x64, 0xff, 0xb6, 0x2e, 0xc1, 0x7a,
-  0xef, 0xe0, 0xd1, 0x06, 0xd8, 0xd2, 0xcf, 0xbd,
-  0xb6, 0xa4, 0x3a, 0x7e, 0x75, 0x7b, 0xef, 0xe8,
-  0xe9, 0x63, 0x1e, 0x9f, 0x49, 0x67, 0xff, 0xfd,
-  0xe1, 0xd6, 0x57, 0x49, 0x9d, 0x7f, 0x58, 0x3b,
-  0x7b, 0xd4, 0x74, 0x39, 0x34, 0x0c, 0x85, 0x7f,
-  0x49, 0xa7, 0xe1, 0xce, 0x29, 0x54, 0x3a, 0x7f,
-  0xff, 0x5d, 0xdf, 0xbf, 0xcb, 0x9f, 0x7f, 0x54,
-  0xdb, 0xf5, 0xd8, 0x4e, 0x9f, 0xff, 0xea, 0x51,
-  0x07, 0x49, 0x65, 0x66, 0xa9, 0xce, 0x9e, 0xec,
-  0x3a, 0x7a, 0xb9, 0xb5, 0xc7, 0x46, 0xd1, 0x13,
-  0x56, 0x69, 0x95, 0x7a, 0x9a, 0x2f, 0xc9, 0xff,
-  0x9d, 0xab, 0x9c, 0xe5, 0x6b, 0x48, 0xa3, 0xa7,
-  0xfe, 0xde, 0x77, 0x32, 0x9c, 0x9d, 0x45, 0x1d,
-  0x0f, 0xa2, 0x2e, 0x88, 0xd3, 0xdd, 0xea, 0x31,
-  0xd0, 0x89, 0x8d, 0x70, 0x47, 0x90, 0xb3, 0xf2,
-  0x49, 0xff, 0xff, 0xaf, 0x12, 0xbb, 0x55, 0x96,
-  0x77, 0x8f, 0x3a, 0xed, 0xfa, 0x36, 0xde, 0x3a,
-  0x7d, 0x76, 0x53, 0x7d, 0x3a, 0x7c, 0x9c, 0xee,
-  0xfa, 0x1d, 0x32, 0xf6, 0xa3, 0xa7, 0xff, 0xfd,
-  0x5d, 0xbf, 0xac, 0x7f, 0x42, 0x29, 0xa0, 0x73,
-  0xeb, 0xab, 0x87, 0x4e, 0x08, 0x42, 0x54, 0xf7,
-  0x1c, 0x7f, 0x4a, 0xb1, 0x79, 0x08, 0x8d, 0x86,
-  0x1b, 0xdc, 0x22, 0xe7, 0xfe, 0xce, 0xbf, 0xac,
-  0x1d, 0xbd, 0xea, 0x3a, 0x7d, 0x9a, 0x72, 0xaa,
-  0x74, 0x21, 0xf5, 0xd1, 0x12, 0x60, 0x54, 0xe9,
-  0xf9, 0xe5, 0x9c, 0xbc, 0x17, 0x8e, 0x9f, 0xd7,
-  0xeb, 0x9a, 0xae, 0xf4, 0x74, 0xdb, 0x13, 0xa1,
-  0x7a, 0x9f, 0xf6, 0xcd, 0x2a, 0x6b, 0x3f, 0xfb,
-  0x8e, 0x13, 0x81, 0x4d, 0x6d, 0xb7, 0xc1, 0xd2,
-  0xb2, 0xf4, 0x65, 0x9a, 0xde, 0x90, 0xe7, 0x03,
-  0x79, 0x1f, 0xfb, 0xf1, 0x8e, 0x6c, 0xd5, 0x68,
-  0xe2, 0x04, 0xd5, 0x45, 0x95, 0x94, 0x1b, 0xe8,
-  0x20, 0x7a, 0xe9, 0x45, 0x23, 0x01, 0xd4, 0x27,
-  0x82, 0x42, 0xbf, 0x09, 0x4e, 0x66, 0xb1, 0x66,
-  0x65, 0xcd, 0x69, 0x70, 0x33, 0xff, 0xac, 0xaf,
-  0x75, 0xb0, 0x5b, 0xfd, 0x8d, 0x13, 0x64, 0xfe,
-  0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0xad, 0x9f, 0xce,
-  0x75, 0xda, 0xea, 0x38, 0xe9, 0xec, 0xaf, 0xe8,
-  0xe9, 0x5e, 0xb8, 0x7a, 0x9d, 0x34, 0x9f, 0x0b,
-  0x7f, 0xb1, 0xa2, 0xb4, 0x9f, 0xfe, 0x64, 0x1c,
-  0x07, 0xab, 0xdc, 0x9b, 0x63, 0xa7, 0xff, 0x9d,
-  0x4c, 0xea, 0x2b, 0xf3, 0x5a, 0x45, 0x1d, 0x36,
-  0xb4, 0x88, 0x97, 0xf4, 0xa9, 0xfc, 0x8b, 0xb9,
-  0xeb, 0xa8, 0x03, 0xa7, 0xe7, 0xb2, 0xbb, 0xc5,
-  0x1d, 0x3f, 0xd9, 0x79, 0xd4, 0x0b, 0xee, 0xa1,
-  0xd3, 0xf9, 0xd9, 0xaf, 0xe8, 0x2e, 0x3a, 0x56,
-  0x5e, 0x27, 0xe5, 0x85, 0x9b, 0x86, 0x3d, 0x4b,
-  0x7c, 0xdb, 0xa5, 0xba, 0x3c, 0x9f, 0xd6, 0xc1,
-  0x6f, 0xf6, 0x34, 0x58, 0x13, 0xe1, 0x6f, 0xf6,
-  0x34, 0x4e, 0xb3, 0xff, 0xfa, 0xa8, 0xf7, 0x18,
-  0xab, 0x52, 0x99, 0x5d, 0xd2, 0xe7, 0x8e, 0x9f,
-  0x59, 0x5e, 0xeb, 0x62, 0x25, 0x56, 0x30, 0x9f,
-  0x0b, 0x7f, 0xb1, 0xa2, 0xd9, 0x9f, 0xf0, 0x12,
-  0x96, 0xae, 0xdb, 0xc4, 0xe9, 0x5b, 0x0f, 0xb3,
-  0xcc, 0x27, 0x9b, 0xfd, 0x8d, 0x17, 0x34, 0x94,
-  0x74, 0xd6, 0xc1, 0x37, 0x61, 0x2b, 0x9f, 0xd6,
-  0xc1, 0x6f, 0xf6, 0x34, 0x5d, 0xf3, 0xd6, 0xbf,
-  0xc0, 0x0e, 0x84, 0x6c, 0xaf, 0xb2, 0x99, 0xc2,
-  0xc6, 0x0f, 0xa9, 0x6e, 0x54, 0x08, 0xb9, 0x2a,
-  0x1a, 0x00, 0x85, 0x65, 0x18, 0x74, 0x57, 0xcc,
-  0xee, 0x7f, 0x75, 0xec, 0xbc, 0xd2, 0x5f, 0x3a,
-  0x7c, 0x2d, 0xfe, 0xc6, 0x89, 0x5e, 0x7e, 0xaf,
-  0x17, 0x78, 0xb8, 0xe9, 0xde, 0xeb, 0x22, 0x25,
-  0xb0, 0xe2, 0x86, 0x13, 0xb4, 0x9c, 0x15, 0x3f,
-  0xfa, 0xbf, 0xbd, 0x23, 0xb6, 0x2f, 0x5c, 0x02,
-  0xa7, 0xf7, 0xb5, 0xb8, 0x15, 0xee, 0xc8, 0x7c,
-  0xf4, 0x1c, 0x95, 0x94, 0x8f, 0x45, 0xd0, 0xa6,
-  0x9f, 0xfd, 0x65, 0x7b, 0xad, 0x82, 0xdf, 0xec,
-  0x68, 0x98, 0x67, 0xff, 0xec, 0xb7, 0x31, 0xf0,
-  0x5a, 0xfe, 0x9c, 0x14, 0xa3, 0x8e, 0x9f, 0xfa,
-  0xf5, 0xc7, 0xdd, 0x77, 0xeb, 0xa8, 0xe3, 0xa7,
-  0xfb, 0xa9, 0xef, 0x6a, 0xff, 0x89, 0xd3, 0xf2,
-  0x93, 0x3b, 0xa5, 0xf3, 0xa7, 0xc9, 0x9d, 0xd2,
-  0xf9, 0xd3, 0xf5, 0x77, 0xaa, 0x7b, 0xfc, 0x8f,
-  0x61, 0x45, 0xf3, 0xff, 0xfe, 0xee, 0x06, 0xf3,
-  0x59, 0x5e, 0x5d, 0xc7, 0xb7, 0x9d, 0x7d, 0xd4,
-  0x3a, 0x7e, 0x5d, 0xcf, 0x5d, 0x40, 0x1d, 0x3f,
-  0xf9, 0x34, 0x04, 0x76, 0x3f, 0xa7, 0xae, 0x09,
-  0xd0, 0x87, 0xfb, 0xb3, 0x19, 0xfa, 0x9b, 0xbe,
-  0xaf, 0xd1, 0xd3, 0xff, 0xfe, 0x1c, 0x5c, 0x9d,
-  0xd7, 0x2e, 0x7d, 0x4a, 0xfe, 0xf4, 0x9a, 0xa1,
-  0xd2, 0xc7, 0xd1, 0x3e, 0x25, 0xf3, 0xdf, 0xcf,
-  0x8c, 0x3a, 0x56, 0x5e, 0x2b, 0x1e, 0xe1, 0x29,
-  0xa1, 0x22, 0xb2, 0x45, 0x61, 0xe1, 0xd8, 0x60,
-  0x5c, 0x51, 0x3e, 0x16, 0xff, 0x63, 0x45, 0x5d,
-  0x3f, 0xce, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x3c,
-  0x95, 0xb0, 0xfc, 0x7c, 0xc2, 0x7f, 0x5b, 0x05,
-  0xbf, 0xd8, 0xd1, 0x60, 0xcf, 0xeb, 0x60, 0xb7,
-  0xfb, 0x1a, 0x2c, 0xa9, 0xfd, 0x6c, 0x16, 0xff,
-  0x63, 0x45, 0xa7, 0x3c, 0xdf, 0xec, 0x68, 0xb7,
-  0x27, 0xfe, 0x4c, 0x1c, 0xef, 0x2a, 0xe3, 0xe1,
-  0x3a, 0x04, 0xfb, 0xe8, 0x57, 0x3f, 0xef, 0x75,
-  0xb0, 0x5b, 0xfd, 0x8d, 0x14, 0x3c, 0xfd, 0xd5,
-  0xe6, 0x0a, 0x50, 0xe9, 0xff, 0xfb, 0x38, 0xaa,
-  0x73, 0xb6, 0xbb, 0xe0, 0xa5, 0x10, 0x05, 0x4a,
-  0xd8, 0x8f, 0x35, 0x10, 0xdc, 0x8c, 0xbe, 0x5f,
-  0x3f, 0xad, 0x82, 0xdf, 0xec, 0x68, 0xbc, 0xe1,
-  0x17, 0xea, 0x9c, 0x61, 0xc2, 0x96, 0x4b, 0x7c,
-  0x7e, 0x1e, 0x42, 0x4c, 0xa3, 0xba, 0x9d, 0xf6,
-  0x39, 0xd5, 0xc8, 0xd3, 0xfa, 0xd8, 0x2d, 0xfe,
-  0xc6, 0x8a, 0x5a, 0x7f, 0x5b, 0x05, 0xbf, 0xd8,
-  0xd1, 0x61, 0x4f, 0xeb, 0x60, 0xb7, 0xfb, 0x1a,
-  0x2c, 0xb9, 0xff, 0xd6, 0x57, 0xba, 0xd8, 0x2d,
-  0xfe, 0xc6, 0x8a, 0x32, 0x7f, 0x59, 0x17, 0x20,
-  0xa0, 0x0e, 0x87, 0x26, 0x6a, 0x27, 0x6a, 0x3b,
-  0xa1, 0xde, 0x94, 0xa7, 0xfe, 0xb7, 0xba, 0xd8,
-  0x2d, 0xfe, 0xc6, 0x88, 0xe6, 0x7f, 0xf5, 0x95,
-  0xee, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x72, 0x9f,
-  0xd6, 0xc1, 0x6f, 0xf6, 0x34, 0x59, 0x93, 0xfa,
-  0xd8, 0x2d, 0xfe, 0xc6, 0x8b, 0x76, 0x7f, 0xf5,
-  0x95, 0xee, 0xb6, 0x0b, 0x7f, 0xb1, 0xa2, 0x90,
-  0x9f, 0xfa, 0xde, 0xeb, 0x60, 0xb7, 0xfb, 0x1a,
-  0x25, 0x28, 0x79, 0x3b, 0x25, 0x93, 0x14, 0xa5,
-  0xd3, 0xbd, 0x1d, 0xde, 0x29, 0x4f, 0xfb, 0xdd,
-  0x6c, 0x16, 0xff, 0x63, 0x44, 0xed, 0x3f, 0xfe,
-  0xdf, 0x17, 0x29, 0x2f, 0x3f, 0x8e, 0xa7, 0x71,
-  0x8e, 0x99, 0x56, 0x52, 0x27, 0xfd, 0x1a, 0x7c,
-  0x2d, 0xfe, 0xc6, 0x88, 0xb2, 0x7f, 0xde, 0xeb,
-  0x60, 0xb7, 0xfb, 0x1a, 0x25, 0xd9, 0xff, 0xfb,
-  0x38, 0xaa, 0x73, 0xb6, 0xbb, 0xe0, 0xa5, 0x10,
-  0x05, 0x4a, 0xd8, 0x8d, 0x35, 0x18, 0x2f, 0xa3,
-  0x4f, 0xfe, 0xb2, 0xbd, 0xd6, 0xc1, 0x6f, 0xf6,
-  0x34, 0x4c, 0x53, 0xfa, 0xd8, 0x2d, 0xfe, 0xc6,
-  0x8a, 0xa6, 0x7f, 0xf5, 0x95, 0xee, 0xb6, 0x0b,
-  0x7f, 0xb1, 0xa2, 0x74, 0x9f, 0xdb, 0xf1, 0x47,
-  0x7a, 0xe3, 0xa7, 0xcb, 0x22, 0xc9, 0x43, 0xa7,
-  0xe0, 0xe6, 0xd7, 0x67, 0x4e, 0x9e, 0xdd, 0x52,
-  0xdb, 0x3d, 0x6a, 0x14, 0x4f, 0xfd, 0x75, 0x34,
-  0x8f, 0xda, 0xe5, 0xb6, 0xa3, 0xa1, 0x48, 0x82,
-  0xa9, 0xcc, 0xff, 0xbd, 0xd6, 0xc1, 0x6f, 0xf6,
-  0x34, 0x4e, 0xf3, 0xed, 0x5d, 0xea, 0xd9, 0x52,
-  0xb7, 0x09, 0xcd, 0xe4, 0x61, 0x4a, 0x23, 0xf4,
-  0x69, 0xff, 0xd6, 0x57, 0xba, 0xd8, 0x2d, 0xfe,
-  0xc6, 0x8a, 0x16, 0x7f, 0xf5, 0x95, 0xee, 0xb6,
-  0x0b, 0x7f, 0xb1, 0xa2, 0x92, 0x9f, 0xff, 0xd9,
-  0x4b, 0x73, 0xc5, 0xab, 0xea, 0xd5, 0x53, 0x57,
-  0x28, 0xe8, 0x79, 0x70, 0x0d, 0xc7, 0x0c, 0xa4,
-  0x27, 0x6a, 0x8f, 0xb4, 0x09, 0x37, 0x29, 0x2f,
-  0xa9, 0x4f, 0xeb, 0x60, 0xb7, 0xfb, 0x1a, 0x22,
-  0x49, 0xff, 0xd6, 0x57, 0xba, 0xd8, 0x2d, 0xfe,
-  0xc6, 0x89, 0x7a, 0x7c, 0x2d, 0xfe, 0xc6, 0x8a,
-  0x5e, 0x7f, 0x27, 0x17, 0x9b, 0x52, 0x50, 0xe9,
-  0x5b, 0x0f, 0x9b, 0x46, 0x13, 0xfa, 0xd8, 0x2d,
-  0xfe, 0xc6, 0x8a, 0x72, 0x7f, 0xdb, 0x1f, 0xa5,
-  0x73, 0x3a, 0xc7, 0x4f, 0xfb, 0x2a, 0x83, 0x96,
-  0x08, 0x42, 0x54, 0xdb, 0x09, 0xd3, 0x3d, 0x6e,
-  0x11, 0x1a, 0xbe, 0x77, 0x78, 0x79, 0x3e, 0x16,
-  0xff, 0x63, 0x45, 0x79, 0x3f, 0xff, 0x67, 0x15,
-  0x4e, 0x76, 0xd7, 0x7c, 0x14, 0xa2, 0x00, 0xa9,
-  0x5b, 0x11, 0x1a, 0xbe, 0x61, 0x3f, 0xf5, 0xbd,
-  0xd6, 0xc1, 0x6f, 0xf6, 0x34, 0x48, 0xf3, 0xb6,
-  0x04, 0x3a, 0x73, 0x62, 0x8a, 0xb1, 0x77, 0x3e,
-  0x16, 0xff, 0x63, 0x44, 0x91, 0x3d, 0x6f, 0x75,
-  0x90, 0xf6, 0x70, 0xa6, 0x7f, 0xeb, 0x7b, 0xad,
-  0x82, 0xdf, 0xec, 0x68, 0x92, 0xa7, 0xc2, 0xdf,
-  0xec, 0x68, 0xbc, 0x67, 0xeb, 0xba, 0xff, 0xbf,
-  0x43, 0xa7, 0xd4, 0xa6, 0xb1, 0x8e, 0x9f, 0xe7,
-  0x5b, 0x05, 0xbf, 0xd8, 0xd1, 0x26, 0xca, 0xd8,
-  0x8c, 0x77, 0xcc, 0x04, 0xc3, 0xc9, 0xa1, 0x17,
-  0x4a, 0x5e, 0x3b, 0x74, 0x2e, 0x38, 0x27, 0xdc,
-  0x32, 0x16, 0x86, 0x8a, 0x8a, 0xeb, 0x0c, 0x0d,
-  0x1b, 0xdd, 0x18, 0x9c, 0x24, 0x69, 0x1f, 0x6f,
-  0x47, 0x3a, 0xe8, 0xf2, 0x78, 0x8f, 0x6b, 0x2d,
-  0xb5, 0x2d, 0xf9, 0x4a, 0xcd, 0x5e, 0x95, 0x3f,
-  0x3c, 0x19, 0xb9, 0xcc, 0x4b, 0xdc, 0x76, 0x0b,
-  0x52, 0xc7, 0x06, 0x7e, 0xd9, 0x57, 0xf1, 0x51,
-  0x59, 0xda, 0x6f, 0xa6, 0xca, 0x02, 0x55, 0x92,
-  0xf7, 0x0b, 0x0e, 0xce, 0xd5, 0x52, 0x90, 0xff,
-  0xaa, 0xdb, 0x2a, 0xea, 0x4f, 0x52, 0xe8, 0xf5,
-  0x83, 0x1f, 0xe2, 0xfc, 0x3f, 0x39, 0xce, 0x82,
-  0x5e, 0x4e, 0xd3, 0x40,
+  0xfe, 0xae, 0x0a, 0xf7, 0x29, 0xa2, 0x25, 0x9f,
+  0x0a, 0xf7, 0x29, 0xa2, 0x2d, 0x9b, 0x1f, 0x2a,
+  0x48, 0x54, 0x80, 0x26, 0x94, 0x02, 0xd3, 0xfa,
+  0xf8, 0x20, 0x67, 0xa8, 0x55, 0x4d, 0x34, 0xfc,
+  0xeb, 0x79, 0xb6, 0x34, 0x74, 0x21, 0xf9, 0x72,
+  0x14, 0xab, 0x89, 0x86, 0xb7, 0xc3, 0xb6, 0x7f,
+  0x57, 0x05, 0x7b, 0x94, 0xd1, 0x51, 0x4f, 0xff,
+  0x5b, 0xd6, 0xae, 0xbc, 0xc7, 0xb6, 0x4c, 0xd8,
+  0xe9, 0xf0, 0xaf, 0x72, 0x9a, 0x2b, 0xd9, 0xf7,
+  0xb5, 0x17, 0x47, 0x8e, 0x95, 0x70, 0xf7, 0x04,
+  0xc2, 0x7f, 0xea, 0xf3, 0xab, 0x82, 0xbd, 0xca,
+  0x68, 0x91, 0xa7, 0xff, 0x55, 0x9c, 0xea, 0xe0,
+  0xaf, 0x72, 0x9a, 0x27, 0x89, 0xff, 0xd5, 0x67,
+  0x3a, 0xb8, 0x2b, 0xdc, 0xa6, 0x89, 0xfe, 0x7f,
+  0xf5, 0x59, 0xce, 0xae, 0x0a, 0xf7, 0x29, 0xa2,
+  0x86, 0x9f, 0xfd, 0x56, 0x73, 0xab, 0x82, 0xbd,
+  0xca, 0x68, 0xa2, 0x27, 0xfd, 0xce, 0xae, 0x0a,
+  0xf7, 0x29, 0xa2, 0x91, 0x9f, 0xff, 0xb3, 0x6b,
+  0x26, 0xfa, 0xdf, 0xfc, 0x0a, 0x51, 0x00, 0x54,
+  0xaa, 0xc4, 0x51, 0xb7, 0xa3, 0x4f, 0xfd, 0x5e,
+  0x75, 0x70, 0x57, 0xb9, 0x4d, 0x12, 0x84, 0x3c,
+  0xba, 0x70, 0xe8, 0xd2, 0x14, 0xc7, 0x56, 0x76,
+  0x30, 0xaf, 0x61, 0x35, 0x93, 0x00, 0xa4, 0xdd,
+  0xa9, 0x51, 0x4b, 0x48, 0x7a, 0xea, 0x16, 0x4f,
+  0xfe, 0xab, 0x39, 0xd5, 0xc1, 0x5e, 0xe5, 0x34,
+  0x4e, 0x73, 0xff, 0xaa, 0xce, 0x75, 0x70, 0x57,
+  0xb9, 0x4d, 0x14, 0x4c, 0xff, 0xc2, 0xea, 0xdb,
+  0xd4, 0x69, 0xde, 0x01, 0xd0, 0x28, 0xea, 0xa2,
+  0x96, 0x8a, 0x53, 0xfa, 0xb8, 0x2b, 0xdc, 0xa6,
+  0x88, 0x72, 0x7c, 0x2b, 0xdc, 0xa6, 0x88, 0xbe,
+  0x7d, 0xd7, 0x72, 0x6b, 0x2a, 0x55, 0xc3, 0xd8,
+  0xf9, 0x84, 0xff, 0xea, 0xb3, 0x9d, 0x5c, 0x15,
+  0xee, 0x53, 0x44, 0xc9, 0x3f, 0xab, 0x82, 0xbd,
+  0xca, 0x68, 0xb7, 0xa7, 0xff, 0x55, 0x9c, 0xea,
+  0xe0, 0xaf, 0x72, 0x9a, 0x29, 0x38, 0x44, 0xe6,
+  0x5d, 0x09, 0x3c, 0x27, 0xa2, 0x93, 0x63, 0xb9,
+  0xfd, 0x5c, 0x15, 0xee, 0x53, 0x44, 0x3b, 0x3f,
+  0xfa, 0xac, 0xe7, 0x57, 0x05, 0x7b, 0x94, 0xd1,
+  0x2c, 0x4f, 0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x23,
+  0x09, 0xff, 0xab, 0xce, 0xae, 0x0a, 0xf7, 0x29,
+  0xa2, 0x3d, 0x9f, 0xd5, 0xc1, 0x5e, 0xe5, 0x34,
+  0x58, 0x73, 0xfa, 0xb8, 0x2b, 0xdc, 0xa6, 0x8b,
+  0x9e, 0x11, 0x38, 0xa7, 0x8e, 0xdc, 0xa5, 0xe3,
+  0xb6, 0x26, 0x5c, 0xee, 0x7f, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x0f, 0x4f, 0x85, 0x7b, 0x94, 0xd1,
+  0x13, 0x4d, 0x76, 0x1d, 0x3f, 0xfb, 0x2d, 0xbd,
+  0xea, 0x27, 0x9f, 0xba, 0x30, 0xe8, 0x7c, 0xf8,
+  0xec, 0x2d, 0x3d, 0x7d, 0x3b, 0x79, 0xa2, 0x17,
+  0x95, 0x71, 0x1c, 0xf4, 0x84, 0x9e, 0x84, 0x73,
+  0xd7, 0xb7, 0xae, 0x74, 0xff, 0xef, 0x34, 0xec,
+  0x7d, 0xdb, 0x99, 0xdd, 0xf3, 0xa6, 0xed, 0x43,
+  0xa5, 0xaa, 0xe2, 0x21, 0xec, 0x45, 0xc9, 0xb3,
+  0xeb, 0x75, 0xf9, 0xc7, 0x4f, 0x7a, 0x9e, 0x01,
+  0xd3, 0x82, 0x10, 0x95, 0x3e, 0xef, 0xde, 0xd8,
+  0x55, 0x4b, 0xc9, 0xf7, 0x5d, 0xac, 0xb9, 0xd1,
+  0xb2, 0x26, 0x80, 0x7d, 0xf3, 0x59, 0xff, 0x81,
+  0xe6, 0xb7, 0x59, 0x3c, 0x3a, 0x6a, 0xce, 0x9f,
+  0xf7, 0xb5, 0xa7, 0xd2, 0x89, 0xe6, 0x1d, 0x3f,
+  0x63, 0x6d, 0x1d, 0x94, 0x3a, 0x7b, 0x36, 0xc7,
+  0x8e, 0x8c, 0x4f, 0x37, 0xd0, 0xc0, 0x68, 0xc6,
+  0xc9, 0x9f, 0x3f, 0xb9, 0x7c, 0xfd, 0x81, 0x4c,
+  0xdb, 0xc7, 0x4f, 0xff, 0xfe, 0xff, 0xdf, 0x4d,
+  0x7f, 0xcd, 0xad, 0xe6, 0xb7, 0x53, 0x1f, 0x70,
+  0xe0, 0x4e, 0x9f, 0x7a, 0xfa, 0x23, 0xc7, 0x4f,
+  0xe7, 0xdd, 0x4d, 0x7a, 0x23, 0xe7, 0x4f, 0xee,
+  0x0e, 0x8d, 0x25, 0xf8, 0xe8, 0xf1, 0xf5, 0xfc,
+  0xe2, 0x11, 0x33, 0x5c, 0x7f, 0x18, 0x4a, 0x4d,
+  0xa3, 0x8e, 0x9d, 0xd7, 0xa1, 0xd3, 0x68, 0xf1,
+  0xd3, 0xc9, 0xfb, 0xb4, 0xe3, 0x66, 0x23, 0x73,
+  0xff, 0xed, 0x12, 0xfb, 0xbf, 0xa6, 0xa6, 0xec,
+  0xbb, 0x7e, 0x5c, 0xe9, 0xff, 0xac, 0x9a, 0xf7,
+  0x5f, 0xfd, 0x74, 0xb9, 0xd3, 0xfb, 0x73, 0xee,
+  0xf5, 0xb4, 0x61, 0xd0, 0x03, 0xff, 0xfa, 0x3c,
+  0xff, 0x85, 0xad, 0xd4, 0x4f, 0x3d, 0xd7, 0x3a,
+  0x10, 0xf8, 0xf4, 0x22, 0x9f, 0xff, 0xfe, 0xd3,
+  0xf4, 0x1f, 0xa3, 0x5b, 0xb7, 0xdf, 0xce, 0xc7,
+  0xef, 0x8d, 0xbf, 0x94, 0x3a, 0x48, 0x74, 0xfe,
+  0x77, 0x0f, 0xa8, 0x8f, 0x9d, 0x3f, 0xff, 0xff,
+  0xbc, 0x0a, 0x7f, 0x39, 0xfd, 0xdb, 0x5b, 0x4d,
+  0xdf, 0xc7, 0xdd, 0x9a, 0x3d, 0xfc, 0xe7, 0xce,
+  0x9d, 0xdc, 0xa6, 0x8a, 0x62, 0x31, 0x17, 0xeb,
+  0x09, 0x99, 0xff, 0x67, 0xdf, 0x75, 0x2e, 0x82,
+  0xd1, 0xd3, 0xe7, 0xff, 0x8d, 0xb0, 0xe8, 0xf1,
+  0xf4, 0x71, 0xfc, 0xff, 0x73, 0x36, 0xb2, 0x3d,
+  0x81, 0x3a, 0x7f, 0xff, 0x7f, 0x16, 0xf7, 0x4b,
+  0xd1, 0xaf, 0xe0, 0x77, 0x23, 0x75, 0x3a, 0x7f,
+  0xca, 0x8c, 0xb6, 0x53, 0x3d, 0xf3, 0xa1, 0x11,
+  0x49, 0x66, 0x89, 0xf0, 0xa3, 0x64, 0x13, 0xa7,
+  0xee, 0xfe, 0xed, 0x93, 0xe7, 0x46, 0x1f, 0xbf,
+  0x88, 0xb4, 0x26, 0x87, 0x97, 0x67, 0xf6, 0x4a,
+  0xd6, 0x70, 0xb1, 0xa1, 0xbe, 0x45, 0xe8, 0x43,
+  0x34, 0x1e, 0x30, 0xf1, 0x64, 0x23, 0xbe, 0x43,
+  0x78, 0xd5, 0x27, 0xfd, 0xac, 0x78, 0x3b, 0xbb,
+  0x6e, 0x78, 0xe9, 0xec, 0xfe, 0xbd, 0x59, 0xd3,
+  0xff, 0xff, 0xeb, 0x7a, 0xf6, 0xc1, 0x46, 0xdb,
+  0x99, 0xa6, 0xa6, 0xec, 0x7d, 0xd9, 0xa7, 0xc1,
+  0x43, 0xa5, 0x7f, 0x22, 0xda, 0x84, 0xf3, 0xff,
+  0xec, 0xcb, 0x79, 0x6d, 0x9b, 0xa9, 0xa5, 0x93,
+  0x56, 0x74, 0xff, 0xd4, 0xe7, 0xf7, 0x31, 0x33,
+  0xf7, 0x6f, 0x3a, 0x5e, 0xfa, 0x28, 0xee, 0xb5,
+  0x3e, 0x72, 0x3e, 0xea, 0x1d, 0x3f, 0xff, 0xff,
+  0xec, 0xfe, 0xbd, 0xde, 0xb6, 0x95, 0x6b, 0xd7,
+  0x46, 0x7f, 0xb5, 0xdb, 0xd5, 0xcb, 0x3e, 0x04,
+  0xd8, 0xa9, 0xff, 0xff, 0x97, 0xc1, 0xdb, 0x41,
+  0xdd, 0xa2, 0x3d, 0x45, 0xb6, 0x96, 0x7f, 0x82,
+  0x74, 0xda, 0x3c, 0xfa, 0x68, 0xde, 0x28, 0xa4,
+  0x29, 0x61, 0x15, 0x40, 0x5a, 0x19, 0x9f, 0x8d,
+  0xbe, 0x7f, 0xf3, 0x17, 0x75, 0xb9, 0xd8, 0xce,
+  0xf8, 0x0e, 0x9f, 0xff, 0x7b, 0xf7, 0xb6, 0x6a,
+  0x5d, 0xac, 0xd5, 0xf7, 0xc0, 0x74, 0xff, 0xc9,
+  0xf7, 0xbf, 0x8d, 0xa9, 0xa2, 0x3e, 0x74, 0x51,
+  0x14, 0xba, 0x2e, 0xcf, 0x65, 0xf1, 0xbb, 0x3a,
+  0x73, 0x7e, 0x58, 0xe9, 0xb3, 0x63, 0xa1, 0xe4,
+  0xdb, 0x1d, 0x0e, 0xfa, 0x12, 0x5c, 0x95, 0xb0,
+  0xf4, 0xfd, 0xb2, 0x7e, 0xdc, 0xe3, 0xa7, 0x26,
+  0xc8, 0x74, 0xfe, 0x69, 0xd9, 0x7a, 0x73, 0x5b,
+  0x8f, 0x21, 0x85, 0xb3, 0xf6, 0xa5, 0xbb, 0x56,
+  0x80, 0x3a, 0x7f, 0x0b, 0x5f, 0xcb, 0x75, 0xce,
+  0x8c, 0x3e, 0x5f, 0x19, 0xcf, 0xc8, 0x0c, 0xbe,
+  0xf7, 0x8e, 0x87, 0x1e, 0x87, 0xc8, 0x67, 0xff,
+  0xfd, 0x7f, 0xf0, 0x28, 0xf6, 0x7b, 0xf7, 0xfe,
+  0x36, 0xdd, 0x40, 0xfc, 0xe9, 0xff, 0x7b, 0x1a,
+  0xdd, 0x44, 0xb7, 0x6a, 0xce, 0x9f, 0xdc, 0xfd,
+  0x2d, 0x9c, 0x27, 0x46, 0xc7, 0xeb, 0x74, 0x49,
+  0x30, 0xe9, 0xdf, 0xcd, 0x8e, 0x84, 0x35, 0x8f,
+  0x88, 0x4f, 0xcf, 0xd3, 0x33, 0xfa, 0xce, 0x9e,
+  0x66, 0xf4, 0x01, 0xd1, 0x87, 0xa5, 0xe2, 0xf8,
+  0x44, 0xf2, 0xb2, 0x1c, 0xfe, 0x4f, 0x17, 0x39,
+  0xfd, 0x7f, 0x3d, 0x96, 0xd2, 0xe7, 0x4f, 0x63,
+  0xe8, 0xd1, 0xd3, 0xf5, 0xb9, 0xcc, 0x1f, 0x1d,
+  0x3e, 0xf0, 0x07, 0x1f, 0x3a, 0x35, 0xa2, 0xab,
+  0xc6, 0xa0, 0x22, 0xd0, 0xb2, 0x7f, 0xfe, 0x17,
+  0x5b, 0x1a, 0xb2, 0x7f, 0x5f, 0xf2, 0xf6, 0xd0,
+  0xe9, 0xff, 0xfd, 0xec, 0x7d, 0xd4, 0xbd, 0x91,
+  0x89, 0xed, 0xb7, 0x23, 0x75, 0x3a, 0x7f, 0xff,
+  0xfd, 0xa7, 0xf7, 0x07, 0x9f, 0x70, 0xf0, 0x37,
+  0x53, 0x44, 0x7e, 0xd9, 0xef, 0xe6, 0xb3, 0xa7,
+  0xff, 0xda, 0x08, 0xe5, 0xe9, 0x6f, 0x66, 0xeb,
+  0x01, 0x0e, 0x8c, 0x47, 0x15, 0xa1, 0x19, 0x3f,
+  0xfc, 0xed, 0x4b, 0x62, 0x7d, 0xaf, 0xe5, 0xe9,
+  0xc7, 0x4f, 0xff, 0xb6, 0xc6, 0x6e, 0xd4, 0xba,
+  0x51, 0xa7, 0x70, 0xbc, 0x74, 0xff, 0x67, 0xde,
+  0xdc, 0x0e, 0xe6, 0x8e, 0x9f, 0xf5, 0x34, 0xfe,
+  0xea, 0x68, 0xdf, 0xa0, 0x9d, 0x3f, 0xf9, 0xed,
+  0xd4, 0xb6, 0x9b, 0xaf, 0x4a, 0x20, 0x9d, 0x3f,
+  0xff, 0xec, 0x7e, 0x9e, 0xc0, 0xee, 0xb6, 0x5e,
+  0x98, 0xf6, 0xec, 0xf6, 0xc7, 0x46, 0x23, 0x0b,
+  0xca, 0x10, 0xf2, 0xb8, 0x75, 0x8d, 0x31, 0xf2,
+  0x7f, 0x29, 0x31, 0x72, 0x87, 0x77, 0x8c, 0x26,
+  0x7f, 0xdc, 0x36, 0xcb, 0xa7, 0xfc, 0x03, 0xa7,
+  0xfb, 0x02, 0xfb, 0xa9, 0xba, 0xfe, 0x3a, 0x7f,
+  0xff, 0xc8, 0xa8, 0xcd, 0xcd, 0x5b, 0xdf, 0xdb,
+  0x76, 0xf5, 0xfe, 0x5b, 0x0e, 0x85, 0x47, 0x57,
+  0xcf, 0x35, 0x0f, 0x27, 0xbd, 0x7f, 0x21, 0xd3,
+  0xff, 0xff, 0xf5, 0xd1, 0x9f, 0xf6, 0xbb, 0x73,
+  0x5b, 0xbf, 0xa6, 0xa6, 0xec, 0x7d, 0xd9, 0xa7,
+  0xc1, 0x43, 0xa1, 0xc8, 0xb8, 0xf1, 0x0c, 0x22,
+  0xf2, 0x7e, 0x4b, 0xe5, 0xf4, 0x6b, 0xbd, 0x0e,
+  0xa9, 0xeb, 0xd3, 0x80, 0x74, 0xff, 0xd6, 0xf6,
+  0xef, 0x0e, 0x8f, 0x70, 0xa9, 0xd3, 0xf5, 0xf8,
+  0x7e, 0xff, 0x8e, 0x8c, 0x44, 0xa6, 0xb2, 0x1b,
+  0xa3, 0x4f, 0x6f, 0xd3, 0xa8, 0x74, 0xff, 0xfd,
+  0xe1, 0xdd, 0x9e, 0xcf, 0xeb, 0xb7, 0xb1, 0x98,
+  0xa7, 0x4f, 0xff, 0xf7, 0x9e, 0x14, 0x65, 0x34,
+  0x4d, 0xc8, 0x29, 0xb5, 0x91, 0x87, 0x46, 0x23,
+  0x10, 0x57, 0x27, 0xff, 0xff, 0x08, 0xf9, 0xed,
+  0xd6, 0xcb, 0xfd, 0x1a, 0xb6, 0x3c, 0x8f, 0xdf,
+  0x45, 0x3a, 0x7f, 0xff, 0xe4, 0xd7, 0x64, 0xdd,
+  0xfc, 0xd3, 0x5e, 0xe7, 0xdd, 0x4f, 0x7f, 0x7a,
+  0x3c, 0x74, 0xf9, 0xfa, 0x7b, 0x3e, 0x74, 0x62,
+  0x29, 0xf4, 0x7f, 0x8f, 0x26, 0x8d, 0x68, 0xc8,
+  0xe7, 0xfb, 0xfa, 0x35, 0xfc, 0xb7, 0x5c, 0xe9,
+  0xfe, 0xda, 0xc8, 0x1d, 0xad, 0xcc, 0x3a, 0x7f,
+  0xff, 0xb8, 0x6d, 0x97, 0xf6, 0x7d, 0xea, 0x26,
+  0x7f, 0x6b, 0x21, 0xd3, 0xd7, 0xdc, 0xf0, 0x9d,
+  0x0f, 0xa2, 0x27, 0x99, 0x67, 0xe6, 0x9f, 0x76,
+  0x89, 0x73, 0xa7, 0xfa, 0xdc, 0xcf, 0xe5, 0xba,
+  0xe7, 0x42, 0x1f, 0x3d, 0x0c, 0x27, 0xec, 0xb8,
+  0x8e, 0x38, 0xe9, 0xfb, 0xf9, 0x6f, 0xe2, 0x9d,
+  0x3d, 0xfc, 0xa6, 0xe6, 0x8f, 0x56, 0xe5, 0x51,
+  0xb2, 0xbc, 0xa5, 0x8d, 0x9f, 0xc5, 0x42, 0x75,
+  0x68, 0x61, 0xde, 0x11, 0x4d, 0x9d, 0xa7, 0xfe,
+  0xff, 0xf3, 0x70, 0xe5, 0xbf, 0x8d, 0x1d, 0x08,
+  0xba, 0xdd, 0x93, 0x96, 0x5c, 0xef, 0x3e, 0xfa,
+  0x33, 0xb6, 0x3a, 0x7f, 0x63, 0x56, 0xcb, 0xa6,
+  0xc7, 0x4f, 0xff, 0xff, 0x5b, 0x2f, 0x4e, 0x6b,
+  0x77, 0xf1, 0xf7, 0x66, 0x8f, 0x7f, 0x36, 0xb7,
+  0x9a, 0x3a, 0x6d, 0x35, 0x9d, 0x02, 0x89, 0xeb,
+  0xc2, 0x16, 0x7e, 0xc7, 0xbf, 0x8f, 0xd0, 0xe9,
+  0xff, 0xc2, 0xfb, 0xa9, 0x8c, 0x7d, 0x2d, 0x64,
+  0x3a, 0x54, 0x3a, 0x34, 0x3d, 0xad, 0xe9, 0x53,
+  0xf9, 0x19, 0xfc, 0xb7, 0x5c, 0xe9, 0xff, 0xff,
+  0x5f, 0xe8, 0x07, 0xdd, 0x4d, 0x12, 0xff, 0xcd,
+  0xbd, 0x82, 0xd1, 0xd1, 0xe5, 0x4d, 0x8d, 0x13,
+  0xf4, 0x34, 0x7e, 0x4f, 0x48, 0x44, 0x68, 0x4b,
+  0xbc, 0xc6, 0x7c, 0xef, 0x0e, 0x3e, 0x74, 0xfb,
+  0x28, 0xf6, 0x04, 0xe8, 0x7c, 0xf3, 0xac, 0x4f,
+  0x3f, 0xfe, 0xf3, 0xd8, 0xbb, 0x5b, 0xd9, 0xaf,
+  0x76, 0xbd, 0x10, 0xe9, 0xed, 0x4b, 0xe5, 0x8e,
+  0x9f, 0xff, 0xfb, 0x51, 0xf7, 0x73, 0xfb, 0xbf,
+  0xa6, 0xa6, 0xec, 0x7d, 0xd9, 0xa7, 0xc1, 0x43,
+  0xa1, 0xe4, 0x53, 0x61, 0x24, 0xff, 0xff, 0xf9,
+  0x1f, 0xa6, 0x88, 0xfe, 0xeb, 0x66, 0xdb, 0xbf,
+  0x9a, 0x6b, 0xdd, 0x40, 0x03, 0xd7, 0x3a, 0x7c,
+  0x9f, 0x7f, 0x9e, 0x3a, 0x7f, 0xff, 0xff, 0xf6,
+  0x33, 0x15, 0x2c, 0x8c, 0xbe, 0x52, 0x88, 0x22,
+  0x9f, 0xc7, 0xb3, 0x4a, 0x68, 0xd7, 0xd1, 0x87,
+  0x4f, 0xf0, 0x33, 0x6f, 0xe5, 0xba, 0xe7, 0x4f,
+  0xfc, 0xfa, 0x6b, 0xd4, 0xd3, 0x3e, 0xd6, 0xf6,
+  0x1d, 0x3f, 0xfd, 0x97, 0xdb, 0x30, 0x14, 0xdc,
+  0x34, 0xda, 0x87, 0x42, 0x2b, 0x7d, 0xc2, 0x3f,
+  0x46, 0x06, 0x24, 0x6c, 0x84, 0x8d, 0x8a, 0x3a,
+  0x14, 0x7f, 0x38, 0xa2, 0x74, 0xed, 0xb7, 0x34,
+  0x74, 0xff, 0xf3, 0xee, 0xfa, 0x6e, 0x67, 0xd3,
+  0x5d, 0xfc, 0xf1, 0xd1, 0x87, 0xed, 0xe2, 0x09,
+  0xf9, 0xe6, 0x9c, 0xdc, 0x17, 0x8e, 0x9f, 0x33,
+  0xdb, 0x66, 0xc7, 0x49, 0xa3, 0xa6, 0x46, 0x1d,
+  0x2b, 0x9d, 0x02, 0x69, 0x78, 0x56, 0x36, 0x3d,
+  0x5b, 0x1b, 0x4f, 0x5e, 0x9c, 0xf9, 0xd3, 0x35,
+  0xc7, 0x4f, 0xeb, 0x78, 0x5f, 0x77, 0xd0, 0xe8,
+  0xd5, 0x09, 0xa0, 0x21, 0xa6, 0x3f, 0x78, 0x8d,
+  0x84, 0x5a, 0x0b, 0x4f, 0xea, 0x79, 0xf0, 0xf7,
+  0xc0, 0x74, 0xff, 0xf9, 0x05, 0x17, 0x18, 0x8a,
+  0xef, 0x53, 0x46, 0x1d, 0x0d, 0x22, 0x19, 0xbc,
+  0xd2, 0x77, 0xc0, 0x87, 0x4a, 0xad, 0xc7, 0x56,
+  0xbe, 0x92, 0x81, 0x9e, 0x5d, 0xda, 0x36, 0x1c,
+  0x9d, 0xd2, 0xd7, 0x0b, 0xa5, 0x96, 0xf0, 0xfc,
+  0x75, 0x1e, 0x84, 0xdb, 0x51, 0x81, 0x8c, 0x7d,
+  0x8c, 0x87, 0x55, 0xa7, 0xa3, 0xfa, 0x1c, 0x7f,
+  0x9d, 0x9f, 0xa4, 0xaa, 0x4b, 0xce, 0x1f, 0x36,
+  0x8c, 0x09, 0xbe, 0x36, 0x1d, 0xf0, 0xe3, 0xd4,
+  0x27, 0x9f, 0xd5, 0xc1, 0x5e, 0xe5, 0x34, 0x53,
+  0xb3, 0xe1, 0x5e, 0xe5, 0x34, 0x54, 0x73, 0xfe,
+  0xe7, 0x57, 0x05, 0x7b, 0x94, 0xd1, 0x34, 0x4a,
+  0xb8, 0x7e, 0xcc, 0x30, 0x9f, 0xd5, 0xc1, 0x5e,
+  0xe5, 0x34, 0x55, 0xf3, 0xe1, 0x5e, 0xe5, 0x34,
+  0x56, 0xd3, 0xfc, 0xea, 0xe0, 0xaf, 0x72, 0x9a,
+  0x24, 0x19, 0x57, 0x0f, 0xc7, 0x8c, 0x27, 0xfe,
+  0xaf, 0x3a, 0xb8, 0x2b, 0xdc, 0xa6, 0x89, 0x0e,
+  0x7c, 0x2b, 0xdc, 0xa6, 0x8b, 0x12, 0x7f, 0xe4,
+  0xca, 0x67, 0xf6, 0xf0, 0x13, 0xe7, 0x4e, 0xfa,
+  0x3c, 0x74, 0x9d, 0xf3, 0xdf, 0xd1, 0x0e, 0x73,
+  0x7f, 0x80, 0x74, 0xe1, 0x47, 0x1d, 0x3e, 0xe7,
+  0x6f, 0xb2, 0x1d, 0x3f, 0x52, 0x83, 0xe0, 0xea,
+  0xce, 0x8f, 0x1e, 0xcf, 0x14, 0x4f, 0xe0, 0x26,
+  0x5f, 0xdf, 0x09, 0x51, 0x89, 0xce, 0xbf, 0x08,
+  0xff, 0x14, 0x88, 0xfd, 0x9c, 0xc0, 0x43, 0x3f,
+  0xf5, 0xbc, 0x97, 0xb7, 0x6b, 0xcf, 0x80, 0xe9,
+  0xff, 0xfd, 0x7b, 0xf3, 0xa9, 0x9f, 0x46, 0x76,
+  0x5e, 0xe8, 0xc3, 0xa7, 0xff, 0xb1, 0xf7, 0x5f,
+  0x47, 0xab, 0x6e, 0x67, 0xa8, 0x74, 0xd6, 0xae,
+  0x23, 0xdb, 0xc8, 0xbf, 0x5e, 0x8a, 0xa7, 0x1a,
+  0x91, 0xa9, 0x4f, 0xea, 0xe0, 0xaf, 0x72, 0x9a,
+  0x2c, 0xd9, 0xff, 0xd5, 0x67, 0x3a, 0xb8, 0x2b,
+  0xdc, 0xa6, 0x8a, 0x02, 0x6d, 0xd4, 0x3a, 0x79,
+  0x7b, 0x94, 0xd1, 0x6f, 0xcf, 0xdb, 0xef, 0xcb,
+  0xc2, 0x74, 0x09, 0xeb, 0x80, 0xae, 0x7d, 0x77,
+  0x53, 0x7d, 0x0e, 0x9f, 0xc8, 0xdb, 0x7d, 0xfe,
+  0x80, 0x3a, 0x7f, 0x68, 0xfd, 0x11, 0x71, 0x87,
+  0x4e, 0xfe, 0x38, 0xe9, 0x55, 0xc9, 0x9f, 0x63,
+  0x78, 0x90, 0xd8, 0xab, 0xe6, 0xd7, 0x33, 0x9f,
+  0xf7, 0x3a, 0xb8, 0x2b, 0xdc, 0xa6, 0x8a, 0x52,
+  0x7f, 0x9d, 0x5c, 0x15, 0xee, 0x53, 0x44, 0x9d,
+  0x2a, 0xb1, 0x10, 0xfc, 0x8d, 0x08, 0xed, 0xc2,
+  0x5e, 0x8c, 0x8b, 0x6b, 0x58, 0x43, 0x91, 0xd3,
+  0xac, 0x2c, 0x7c, 0x4f, 0xab, 0x85, 0x63, 0x44,
+  0xcc, 0x96, 0xed, 0x62, 0x90, 0x1d, 0xd2, 0x39,
+  0x06, 0xd0, 0xe3, 0x9f, 0x0a, 0xf7, 0x29, 0xa2,
+  0x1f, 0x9f, 0xf7, 0x3a, 0xb8, 0x2b, 0xdc, 0xa6,
+  0x89, 0x4e, 0x55, 0xc3, 0xf6, 0x61, 0x84, 0xfe,
+  0xae, 0x0a, 0xf7, 0x29, 0xa2, 0x27, 0x9f, 0xd5,
+  0xc1, 0x5e, 0xe5, 0x34, 0x46, 0x33, 0xff, 0xaa,
+  0xce, 0x75, 0x70, 0x57, 0xb9, 0x4d, 0x13, 0xcc,
+  0x22, 0x3b, 0xde, 0x27, 0x71, 0xdd, 0x8e, 0xe7,
+  0xc2, 0xbd, 0xca, 0x68, 0x88, 0x27, 0xfd, 0xce,
+  0xae, 0x0a, 0xf7, 0x29, 0xa2, 0x54, 0x95, 0x70,
+  0xfd, 0x98, 0x61, 0x3f, 0xab, 0x82, 0xbd, 0xca,
+  0x68, 0x8a, 0x27, 0xf5, 0x70, 0x57, 0xb9, 0x4d,
+  0x11, 0x94, 0xff, 0xea, 0xb3, 0x9d, 0x5c, 0x15,
+  0xee, 0x53, 0x44, 0xcb, 0x3f, 0xab, 0x82, 0xbd,
+  0xca, 0x68, 0xa9, 0x27, 0xf5, 0x70, 0x57, 0xb9,
+  0x4d, 0x15, 0xd4, 0xfe, 0xae, 0x0a, 0xf7, 0x29,
+  0xa2, 0xc5, 0x9f, 0xf9, 0x9c, 0xea, 0xe0, 0xaf,
+  0x72, 0x9a, 0x27, 0xa9, 0xfe, 0x0d, 0x79, 0x3c,
+  0xdf, 0xed, 0x43, 0xa2, 0xa8, 0x8a, 0x44, 0xc9,
+  0xfb, 0x54, 0xf9, 0x7f, 0x69, 0x43, 0xa7, 0x85,
+  0x97, 0x7c, 0xe9, 0xcb, 0x96, 0x2a, 0x7f, 0xfe,
+  0xb7, 0xfb, 0x5f, 0x85, 0x1c, 0xec, 0xa0, 0x00,
+  0x87, 0x4f, 0xff, 0xc3, 0xed, 0x4e, 0x65, 0x50,
+  0x47, 0xda, 0x8b, 0xa3, 0xc7, 0x4f, 0x97, 0xd6,
+  0xde, 0xc3, 0xa7, 0xff, 0x75, 0x3f, 0x80, 0xad,
+  0xbc, 0xbc, 0x27, 0x4f, 0xaf, 0x64, 0x62, 0x9d,
+  0x3f, 0xfb, 0xfb, 0x91, 0x3e, 0x8c, 0xdd, 0xba,
+  0xcd, 0xe7, 0x4f, 0xf6, 0x9d, 0x4e, 0xb6, 0x9f,
+  0x78, 0xe8, 0xf2, 0x7b, 0xc2, 0xb6, 0xc6, 0x0b,
+  0x14, 0xfd, 0x1e, 0xe4, 0xda, 0x8a, 0x53, 0xbf,
+  0xd7, 0x35, 0x42, 0xd3, 0xbf, 0xea, 0x1d, 0x20,
+  0xea, 0xa7, 0x88, 0x85, 0x13, 0xc2, 0xdb, 0x98,
+  0x74, 0x61, 0xe7, 0x78, 0xb2, 0x7f, 0xde, 0xb7,
+  0x5d, 0x1a, 0xa7, 0x98, 0x74, 0xfd, 0xef, 0xeb,
+  0xf6, 0x50, 0xe9, 0xef, 0xed, 0xbb, 0x59, 0xd3,
+  0xf6, 0x50, 0x3d, 0xf7, 0x8e, 0x8e, 0x3d, 0x4f,
+  0x93, 0xcf, 0xb4, 0xd7, 0x4d, 0x90, 0xe8, 0xc4,
+  0x67, 0xfa, 0x10, 0x76, 0x21, 0x9f, 0xff, 0xfd,
+  0x64, 0xf0, 0x8a, 0x6f, 0xbf, 0xbf, 0xa3, 0xb2,
+  0x9b, 0x69, 0xc2, 0xe3, 0xa7, 0xcf, 0x6c, 0x3e,
+  0x09, 0xd3, 0xf6, 0xdc, 0x20, 0x6f, 0xc3, 0xa7,
+  0xfd, 0xff, 0x3a, 0xf6, 0xc1, 0xf5, 0x0e, 0x9f,
+  0xf7, 0x60, 0x13, 0xfd, 0xb6, 0x6b, 0x3a, 0x1c,
+  0x7f, 0x80, 0x3e, 0x9e, 0xd2, 0x96, 0x61, 0xd3,
+  0xf6, 0x94, 0xbd, 0x32, 0xe7, 0x4e, 0x08, 0x42,
+  0x54, 0xff, 0xeb, 0xfa, 0xf4, 0xb7, 0x9b, 0xf7,
+  0x8a, 0x38, 0xaa, 0x97, 0x91, 0xe4, 0x54, 0x68,
+  0x95, 0x0e, 0x54, 0xbf, 0x8f, 0x5e, 0x29, 0x18,
+  0x55, 0xfc, 0x8a, 0xf0, 0xcb, 0x9b, 0x5e, 0x1d,
+  0x3e, 0x0d, 0xd1, 0xf0, 0x9d, 0x3f, 0x93, 0x86,
+  0xc1, 0xed, 0x8a, 0x98, 0x21, 0x2a, 0x36, 0x3c,
+  0x70, 0x98, 0xcf, 0x52, 0xfe, 0xd5, 0x95, 0x53,
+  0x47, 0x3f, 0xfb, 0x4a, 0x53, 0x6f, 0xa6, 0xd6,
+  0x4b, 0xd0, 0xe9, 0xff, 0x5f, 0xc3, 0xc0, 0xd4,
+  0xbe, 0x58, 0xe8, 0x72, 0x23, 0x7c, 0x9b, 0x3e,
+  0xc7, 0xb3, 0xc2, 0x74, 0xfd, 0x74, 0x1d, 0xb3,
+  0xe7, 0x4f, 0xed, 0xac, 0x9f, 0x0f, 0x3e, 0x74,
+  0xff, 0xff, 0xbc, 0xce, 0xfb, 0xee, 0xa8, 0x73,
+  0xcd, 0xb3, 0xf9, 0xb7, 0x38, 0xf1, 0x7a, 0xc2,
+  0x23, 0x73, 0x8b, 0x34, 0x34, 0x9f, 0xfe, 0xcb,
+  0xd3, 0x1a, 0xb2, 0x36, 0xcb, 0x59, 0x0e, 0x9f,
+  0xff, 0xff, 0x7b, 0x1f, 0xa7, 0xb0, 0x3b, 0xb1,
+  0xf7, 0x53, 0xd7, 0xa7, 0x9f, 0xdb, 0x6d, 0x1e,
+  0x3a, 0x3e, 0x8d, 0xeb, 0xa8, 0x4d, 0xe0, 0x9d,
+  0x36, 0xf0, 0x1d, 0x0d, 0x1a, 0xe0, 0x0b, 0x4e,
+  0x77, 0x6c, 0x74, 0xc1, 0x09, 0xd1, 0xe3, 0xd4,
+  0xa1, 0x10, 0x47, 0x27, 0x5f, 0x78, 0x0a, 0xa9,
+  0xaf, 0x9f, 0xff, 0xfd, 0x74, 0xda, 0xda, 0x76,
+  0xb6, 0x76, 0xd9, 0x9f, 0xd7, 0x4a, 0x67, 0xc0,
+  0x74, 0x3e, 0x8a, 0xbf, 0x17, 0x4f, 0xf6, 0x5e,
+  0xc8, 0x37, 0xc5, 0x3a, 0x72, 0x0b, 0x47, 0x46,
+  0x27, 0xe7, 0xd1, 0xbf, 0xfc, 0x91, 0xbc, 0xd6,
+  0x7d, 0xfc, 0xbf, 0x6a, 0x1d, 0x3f, 0xf6, 0x08,
+  0xe3, 0x56, 0xca, 0x77, 0xce, 0x9f, 0xdf, 0x41,
+  0xd1, 0x6c, 0x87, 0x4f, 0xbd, 0xae, 0xdc, 0xe3,
+  0xa7, 0xef, 0x23, 0x1e, 0xc0, 0x9d, 0x30, 0x42,
+  0x74, 0x29, 0xf6, 0x09, 0x48, 0x4b, 0x67, 0xfb,
+  0x1a, 0xe6, 0xb9, 0xf7, 0x50, 0xaa, 0x9a, 0xd9,
+  0xff, 0xd9, 0xf0, 0x65, 0xbc, 0xfd, 0x2d, 0xa5,
+  0x0e, 0x9f, 0xbf, 0xc0, 0xdb, 0x3e, 0x74, 0xfc,
+  0xcf, 0x37, 0xe0, 0xeb, 0x3a, 0x70, 0x42, 0x12,
+  0xa7, 0xfe, 0x41, 0xfe, 0x9d, 0xbf, 0x1a, 0x46,
+  0x1d, 0x52, 0xf2, 0x35, 0x6a, 0x8b, 0x9a, 0x86,
+  0x55, 0x12, 0xae, 0x99, 0xa1, 0x68, 0x53, 0x67,
+  0x70, 0xbc, 0x79, 0x04, 0xa7, 0x9d, 0x8f, 0xb8,
+  0xf2, 0x09, 0x4e, 0xa7, 0xb6, 0x3c, 0x82, 0x53,
+  0x04, 0x27, 0x90, 0x4a, 0x15, 0x14, 0x8d, 0x14,
+  0x5c, 0xbc, 0x25, 0x53, 0x75, 0xcb, 0x20, 0x95,
+  0x4d, 0xec, 0xfd, 0x96, 0xcc, 0xfe, 0xb3, 0xa7,
+  0x77, 0xc1, 0xf3, 0xdf, 0xb9, 0x94, 0xf3, 0x7e,
+  0x75, 0x8e, 0x96, 0x6a, 0xcf, 0x58, 0x06, 0x73,
+  0xf9, 0xa7, 0x68, 0xf5, 0xfc, 0xf1, 0x53, 0xfb,
+  0xce, 0xd3, 0xa9, 0x6f, 0x1d, 0x27, 0x15, 0x3b,
+  0x85, 0xe2, 0xa0, 0xa8, 0x43, 0x6a, 0xa2, 0x0c,
+  0x1b, 0x9e, 0xfa, 0x01, 0x4a, 0xa9, 0xac, 0x84,
+  0x46, 0x2e, 0x42, 0x56, 0x7b, 0x4e, 0x17, 0x1d,
+  0x26, 0x1d, 0x36, 0x3b, 0x63, 0x62, 0xd1, 0x0c,
+  0xf8, 0x38, 0xd7, 0x98, 0x74, 0xfc, 0xa8, 0xd3,
+  0x90, 0x05, 0x4b, 0xc7, 0x4f, 0xf3, 0xda, 0x3b,
+  0x6b, 0x69, 0xdf, 0x3a, 0x7e, 0xf2, 0x31, 0xec,
+  0x09, 0xd3, 0xec, 0x79, 0x98, 0xc3, 0xa7, 0x53,
+  0xc2, 0x74, 0x7c, 0xf0, 0xae, 0x4f, 0x3f, 0x7f,
+  0x80, 0x0d, 0x28, 0x74, 0xfd, 0xed, 0x7b, 0xd1,
+  0x95, 0xd9, 0x30, 0xcc, 0x10, 0x13, 0xda, 0x37,
+  0xdc, 0x8a, 0x31, 0x3d, 0x1f, 0x14, 0x7e, 0x33,
+  0x89, 0xef, 0xe3, 0xda, 0x1d, 0x0e, 0x57, 0xaf,
+  0x85, 0x76, 0x87, 0xef, 0xd5, 0xe9, 0x1f, 0xfd,
+  0xcd, 0xa7, 0x04, 0x21, 0x2a, 0x70, 0xb9, 0x0a,
+  0xa9, 0x79, 0x3f, 0x3c, 0xd3, 0x9b, 0x82, 0xf1,
+  0xd3, 0xd6, 0xe7, 0xc2, 0x74, 0xf9, 0xe1, 0xf2,
+  0x30, 0xe9, 0xff, 0xe4, 0xdf, 0x7f, 0xa0, 0x3a,
+  0xe0, 0xdf, 0xf7, 0x1d, 0x1a, 0xa1, 0x1a, 0x1e,
+  0x34, 0xe2, 0x2b, 0x93, 0xce, 0x77, 0xbe, 0x74,
+  0xfd, 0x74, 0x6b, 0xfa, 0x50, 0xe8, 0x71, 0xe5,
+  0xdc, 0x72, 0x76, 0x9a, 0x37, 0x67, 0x4d, 0xd5,
+  0x6e, 0x8d, 0xbf, 0xae, 0xa9, 0x1b, 0x6a, 0x98,
+  0x44, 0x91, 0xfc, 0x3d, 0x0f, 0x97, 0x10, 0xed,
+  0x18, 0x76, 0x4a, 0x93, 0xd6, 0xc2, 0xa2, 0xfe,
+  0x84, 0x93, 0x50, 0xc3, 0x12, 0x36, 0x46, 0x05,
+  0x69, 0x60, 0x1c, 0x8b, 0xf2, 0x9a, 0x4a, 0x6f,
+  0xbc, 0xee, 0x8e, 0x8f, 0xed, 0xf0, 0xf9, 0xdf,
+  0x08, 0xdd, 0x42, 0x29, 0xff, 0xd5, 0x67, 0x3a,
+  0xb8, 0x2b, 0xdc, 0xa6, 0x8a, 0x2a, 0x7f, 0x57,
+  0x05, 0x7b, 0x94, 0xd1, 0x74, 0x4f, 0xfd, 0x5e,
+  0x75, 0x70, 0x57, 0xb9, 0x4d, 0x12, 0x5c, 0xfe,
+  0xae, 0x0a, 0xf7, 0x29, 0xa2, 0xf2, 0x84, 0x6f,
+  0x40, 0x1e, 0x27, 0x71, 0xde, 0x1d, 0xaa, 0x93,
+  0x47, 0x6c, 0x3b, 0xb4, 0x31, 0x7f, 0x5c, 0x0b,
+  0xd2, 0x3a, 0xbb, 0xa9, 0x68, 0x76, 0xd9, 0x32,
+  0x7f, 0xf5, 0x59, 0xce, 0xae, 0x0a, 0xf7, 0x29,
+  0xa2, 0x59, 0x9e, 0x5e, 0xe5, 0x34, 0x46, 0x73,
+  0xf7, 0x91, 0x8f, 0x60, 0x4e, 0x9b, 0xee, 0x3a,
+  0x4c, 0x3a, 0x7d, 0xe1, 0xb7, 0x54, 0x4f, 0x4d,
+  0x85, 0xbb, 0xc5, 0xa7, 0xee, 0x77, 0x87, 0x84,
+  0xe9, 0xd4, 0x47, 0xce, 0x81, 0x4c, 0x41, 0x8f,
+  0xdf, 0x4c, 0xb9, 0x54, 0xff, 0xd7, 0xf0, 0xf0,
+  0x37, 0x3e, 0xe4, 0x61, 0xd3, 0xef, 0xa3, 0xa9,
+  0xc7, 0x47, 0x8f, 0xb1, 0xb2, 0x34, 0xff, 0xfd,
+  0xed, 0xb4, 0xbd, 0x1f, 0x72, 0x7c, 0x14, 0xdd,
+  0xa7, 0xce, 0x9f, 0xfb, 0x19, 0x7f, 0x06, 0x89,
+  0x6e, 0xd5, 0x9d, 0x3f, 0xeb, 0x27, 0xad, 0xe4,
+  0xfb, 0x5a, 0x1d, 0x2a, 0xe2, 0x76, 0xed, 0x42,
+  0xa7, 0x89, 0x3e, 0xc7, 0x44, 0x79, 0xff, 0xd5,
+  0x67, 0x3a, 0xb8, 0x2b, 0xdc, 0xa6, 0x89, 0xa6,
+  0x7f, 0xf5, 0x59, 0xce, 0xae, 0x0a, 0xf7, 0x29,
+  0xa2, 0x71, 0x9f, 0xfd, 0x56, 0x73, 0xab, 0x82,
+  0xbd, 0xca, 0x68, 0xa0, 0x67, 0xc2, 0xbd, 0xca,
+  0x68, 0xb8, 0x26, 0x4f, 0x1d, 0x3f, 0xbe, 0xe4,
+  0xf6, 0xd8, 0xc3, 0xa5, 0x5c, 0x3f, 0x8b, 0x18,
+  0x68, 0x2b, 0x3f, 0xbd, 0x5d, 0xe8, 0x0c, 0x09,
+  0xd3, 0xfc, 0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x24,
+  0x99, 0x56, 0xc7, 0xeb, 0xc6, 0x90, 0xf2, 0xed,
+  0x6b, 0xa5, 0x8c, 0xaa, 0xab, 0x4a, 0x40, 0x52,
+  0xa4, 0x32, 0xaf, 0x0a, 0xa9, 0xff, 0x6b, 0xea,
+  0xe0, 0xaf, 0x72, 0x9a, 0x2d, 0x49, 0xff, 0x73,
+  0xab, 0x82, 0xbd, 0xca, 0x68, 0x95, 0x60, 0xe9,
+  0x57, 0x5a, 0x26, 0x18, 0x91, 0xa8, 0x8d, 0x3f,
+  0xab, 0x82, 0xbd, 0xca, 0x68, 0x8a, 0x67, 0xf5,
+  0x70, 0x57, 0xb9, 0x4d, 0x11, 0xa4, 0xfe, 0xae,
+  0x0a, 0xf7, 0x29, 0xa2, 0x9f, 0x9f, 0xfd, 0x56,
+  0x73, 0xab, 0x82, 0xbd, 0xca, 0x68, 0x9a, 0xa7,
+  0xf5, 0x70, 0x57, 0xb9, 0x4d, 0x15, 0xdc, 0xf2,
+  0xf7, 0x29, 0xa2, 0xbe, 0x9c, 0x10, 0x84, 0xa9,
+  0x7c, 0xaa, 0x97, 0x90, 0x27, 0xcc, 0xc4, 0x79,
+  0xce, 0x47, 0xce, 0x9f, 0xf6, 0x58, 0x3d, 0x7a,
+  0x26, 0x3c, 0x74, 0xff, 0xbb, 0xc3, 0x8f, 0x79,
+  0xd9, 0xb1, 0xd2, 0xae, 0x22, 0xe1, 0xa2, 0x1f,
+  0x8e, 0x50, 0xf6, 0x7f, 0xf5, 0x59, 0xce, 0xae,
+  0x0a, 0xf7, 0x29, 0xa2, 0x7b, 0x9f, 0xd5, 0xc1,
+  0x5e, 0xe5, 0x34, 0x5c, 0x33, 0xff, 0x57, 0x9d,
+  0x5c, 0x15, 0xee, 0x53, 0x44, 0x9f, 0x08, 0xae,
+  0xcd, 0xe3, 0xb7, 0x1d, 0xeb, 0x3b, 0x53, 0xb6,
+  0x94, 0x86, 0x35, 0x9b, 0x21, 0xd1, 0x49, 0xb1,
+  0xdc, 0xfe, 0xae, 0x0a, 0xf7, 0x29, 0xa2, 0x2a,
+  0x9f, 0xd5, 0xc1, 0x5e, 0xe5, 0x34, 0x53, 0x33,
+  0xff, 0xaa, 0xce, 0x75, 0x70, 0x57, 0xb9, 0x4d,
+  0x13, 0x3c, 0xff, 0xea, 0xb3, 0x9d, 0x5c, 0x15,
+  0xee, 0x53, 0x45, 0x1b, 0x0f, 0x26, 0x35, 0xb1,
+  0xde, 0xb3, 0xbb, 0xa9, 0x4f, 0xfd, 0x5e, 0x75,
+  0x70, 0x57, 0xb9, 0x4d, 0x11, 0xd4, 0xfd, 0xec,
+  0xfe, 0xd8, 0xf1, 0xd3, 0xe1, 0x5e, 0xe5, 0x34,
+  0x53, 0x53, 0xf7, 0x91, 0x8f, 0x60, 0x4e, 0x9f,
+  0xfe, 0xcb, 0xdb, 0x1c, 0x3d, 0xfb, 0xdb, 0x9c,
+  0x74, 0xc8, 0x03, 0xa7, 0xfa, 0x9c, 0xfa, 0x2f,
+  0x96, 0xa2, 0x88, 0xff, 0x96, 0xef, 0x4d, 0x95,
+  0x76, 0x4d, 0x2f, 0x0b, 0xaf, 0x0b, 0xf9, 0xf0,
+  0xaf, 0x72, 0x9a, 0x2a, 0xa9, 0xff, 0x73, 0xab,
+  0x82, 0xbd, 0xca, 0x68, 0x9b, 0x65, 0x5c, 0x3f,
+  0x66, 0x18, 0x4f, 0xea, 0xe0, 0xaf, 0x72, 0x9a,
+  0x2b, 0xf9, 0xfd, 0x5c, 0x15, 0xee, 0x53, 0x45,
+  0x8d, 0x3e, 0x15, 0xee, 0x53, 0x45, 0xab, 0x3f,
+  0xee, 0x75, 0x70, 0x57, 0xb9, 0x4d, 0x14, 0x14,
+  0xab, 0x87, 0xec, 0xc3, 0x09, 0xfd, 0x5c, 0x15,
+  0xee, 0x53, 0x45, 0xc5, 0x3f, 0xab, 0x82, 0xbd,
+  0xca, 0x68, 0xba, 0x67, 0xff, 0xdf, 0xea, 0xdd,
+  0xd8, 0x23, 0xce, 0x7b, 0x02, 0x74, 0xfd, 0xaa,
+  0xff, 0x2d, 0xd7, 0x3a, 0x7e, 0x07, 0x34, 0xef,
+  0x5c, 0xe9, 0xe5, 0xee, 0x53, 0x44, 0x99, 0x3f,
+  0xc3, 0x8f, 0xde, 0xfc, 0xea, 0x1d, 0x02, 0x7c,
+  0x6c, 0x2b, 0x9f, 0xb6, 0x06, 0xab, 0x40, 0x37,
+  0x9d, 0x3e, 0xcb, 0xf9, 0x9c, 0x74, 0xff, 0xfb,
+  0x94, 0x52, 0xdf, 0xcb, 0xe5, 0x42, 0x10, 0x95,
+  0x0e, 0x3f, 0x8b, 0x93, 0x4f, 0xfe, 0xd3, 0xfd,
+  0x74, 0x1a, 0x59, 0x3f, 0x73, 0xa7, 0x04, 0x21,
+  0x2a, 0x7e, 0x1e, 0x79, 0x9e, 0xa1, 0x55, 0x2f,
+  0x27, 0xd8, 0xc1, 0xcd, 0x59, 0xd3, 0xfe, 0x62,
+  0x2d, 0xbf, 0xa5, 0xd2, 0x87, 0x4f, 0xf6, 0x70,
+  0x37, 0x66, 0xdc, 0xe3, 0xa7, 0xff, 0x73, 0xd6,
+  0xf2, 0x7f, 0x1a, 0xf0, 0xf8, 0xe8, 0xc4, 0x60,
+  0xdc, 0xf8, 0x27, 0x33, 0xf6, 0xaf, 0xf9, 0x6e,
+  0xb9, 0xd3, 0xd7, 0x7b, 0x36, 0x3a, 0x7f, 0xbd,
+  0xaf, 0x78, 0x81, 0x9e, 0xa1, 0xd0, 0xd1, 0xf0,
+  0x37, 0x91, 0xce, 0x08, 0x42, 0x74, 0xff, 0xfb,
+  0x19, 0x7f, 0xa0, 0x33, 0x6a, 0x63, 0x11, 0x4a,
+  0xa9, 0x79, 0x18, 0x99, 0xa7, 0xa1, 0x21, 0x64,
+  0x29, 0xfc, 0x23, 0xc3, 0xf4, 0x71, 0xd3, 0x3a,
+  0xad, 0xc5, 0xd0, 0x64, 0x31, 0xc8, 0x48, 0xeb,
+  0x21, 0x7e, 0x15, 0xed, 0x11, 0x73, 0x2f, 0xcf,
+  0x29, 0x0e, 0xab, 0xc6, 0xc7, 0xbc, 0xd6, 0x7d,
+  0x8c, 0x1c, 0xd5, 0x9d, 0x3f, 0xf6, 0x5b, 0xe8,
+  0xf6, 0xfb, 0x5b, 0xb5, 0x67, 0x4f, 0xdc, 0xb5,
+  0x08, 0x42, 0x74, 0xaa, 0xab, 0xd7, 0x7d, 0x3a,
+  0xb3, 0xf8, 0x61, 0xd0, 0xa5, 0xb2, 0x54, 0x39,
+  0x96, 0x29, 0xb4, 0x72, 0xef, 0xc2, 0xc8, 0x49,
+  0xd8, 0x76, 0x08, 0x58, 0xd0, 0x9e, 0xe7, 0x7a,
+  0x4f, 0x7b, 0x4f, 0xea, 0xe0, 0xaf, 0x72, 0x9a,
+  0x23, 0x59, 0xf0, 0xaf, 0x72, 0x9a, 0x2a, 0x59,
+  0xb9, 0x4d, 0x10, 0xd4, 0xab, 0x87, 0xa3, 0xc6,
+  0x13, 0xff, 0x57, 0x9d, 0x5c, 0x15, 0xee, 0x53,
+  0x44, 0x7d, 0x3f, 0xab, 0x82, 0xbd, 0xca, 0x68,
+  0xb1, 0xe7, 0xed, 0x57, 0xf9, 0x6e, 0xb9, 0xd3,
+  0xfd, 0xfe, 0x05, 0x3a, 0xf7, 0xe3, 0xa7, 0x80,
+  0xcf, 0x09, 0xd3, 0xff, 0xfc, 0x83, 0xfc, 0xdb,
+  0x2d, 0x6f, 0x2d, 0xbd, 0x7a, 0x73, 0xe7, 0x47,
+  0x91, 0x0f, 0x62, 0x19, 0xf0, 0xaf, 0x72, 0x9a,
+  0x2d, 0x09, 0xf9, 0xb6, 0xfb, 0xfd, 0x00, 0x74,
+  0xf9, 0x2f, 0x96, 0x43, 0xa7, 0xff, 0xb2, 0xf4,
+  0xc6, 0xac, 0x8d, 0xb2, 0xd6, 0x43, 0xa1, 0xe3,
+  0xf5, 0xf9, 0x2c, 0x22, 0x32, 0x72, 0x14, 0xd3,
+  0xfd, 0xfc, 0xcb, 0xdb, 0xbf, 0xac, 0xe9, 0xfd,
+  0x96, 0x6b, 0xd6, 0xf3, 0x0e, 0x9f, 0xce, 0xc1,
+  0xa7, 0xd1, 0xe3, 0xa7, 0xb6, 0xcb, 0x71, 0xd3,
+  0xfd, 0x98, 0x1c, 0x55, 0xc0, 0x9d, 0x18, 0x8b,
+  0xb7, 0xcd, 0x38, 0xca, 0x84, 0x33, 0xd9, 0x6e,
+  0xb9, 0xd3, 0xfb, 0x5f, 0xbf, 0xa3, 0xb2, 0x87,
+  0x4a, 0xad, 0xc5, 0x76, 0xe8, 0x63, 0xb4, 0x2f,
+  0xb0, 0x8e, 0xd0, 0xf9, 0xa1, 0x35, 0xe1, 0xe8,
+  0xde, 0x79, 0xbc, 0x82, 0x7e, 0xd4, 0xf6, 0xdf,
+  0x46, 0x8e, 0x9e, 0xcb, 0x75, 0xce, 0x96, 0xab,
+  0x87, 0xa5, 0xf3, 0x29, 0xf0, 0xaf, 0x72, 0x9a,
+  0x2d, 0x69, 0xff, 0x73, 0xab, 0x82, 0xbd, 0xca,
+  0x68, 0xa0, 0xe5, 0x56, 0xe2, 0x28, 0xb0, 0xb1,
+  0x86, 0x13, 0xff, 0xaa, 0xce, 0x75, 0x70, 0x57,
+  0xb9, 0x4d, 0x14, 0x5c, 0xfe, 0xae, 0x0a, 0xf7,
+  0x29, 0xa2, 0xea, 0x87, 0x2f, 0xa3, 0xac, 0x23,
+  0x3c, 0x4c, 0xc4, 0xcb, 0x4b, 0xf2, 0x04, 0x72,
+  0x34, 0x39, 0xba, 0x94, 0xf8, 0x57, 0xb9, 0x4d,
+  0x11, 0x0c, 0xeb, 0x66, 0xc7, 0x4a, 0xb8, 0x79,
+  0x8f, 0x98, 0x4f, 0xea, 0xe0, 0xaf, 0x72, 0x9a,
+  0x23, 0x69, 0xfd, 0x5c, 0x15, 0xee, 0x53, 0x45,
+  0x37, 0x3f, 0xab, 0x82, 0xbd, 0xca, 0x68, 0xa8,
+  0x27, 0xf5, 0x70, 0x57, 0xb9, 0x4d, 0x15, 0x34,
+  0xf8, 0x57, 0xb9, 0x4d, 0x15, 0x84, 0xfb, 0xc1,
+  0xdb, 0x41, 0x3a, 0x7f, 0x9d, 0x5c, 0x15, 0xee,
+  0x53, 0x44, 0x7f, 0x3b, 0x11, 0xe3, 0xa5, 0x5c,
+  0x45, 0xaa, 0x98, 0x71, 0x4f, 0xd0, 0x67, 0xff,
+  0x55, 0x9c, 0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x26,
+  0xf9, 0xff, 0x99, 0xce, 0xae, 0x0a, 0xf7, 0x29,
+  0xa2, 0x7e, 0x9f, 0x9b, 0xae, 0xa8, 0xd5, 0x5b,
+  0xf1, 0xf3, 0xa7, 0xff, 0x91, 0x11, 0x11, 0x11,
+  0x11, 0x1f, 0xa1, 0xd3, 0xe1, 0xf3, 0xdc, 0xc2,
+  0xa6, 0x08, 0x4a, 0x8c, 0x37, 0xa1, 0x27, 0x96,
+  0x85, 0x54, 0xd0, 0x42, 0x23, 0x1e, 0x90, 0xa6,
+  0x9f, 0x87, 0x96, 0xde, 0x13, 0xa7, 0x9e, 0x67,
+  0x9c, 0x74, 0xfe, 0xb2, 0x32, 0xa0, 0x02, 0x1d,
+  0x21, 0x43, 0xd5, 0xf1, 0x1c, 0xe0, 0x53, 0x0e,
+  0x9f, 0xfb, 0x64, 0xbf, 0x53, 0x2d, 0x6f, 0x30,
+  0xe9, 0xd7, 0xf3, 0x47, 0x42, 0x1f, 0x0d, 0x11,
+  0x21, 0x13, 0x69, 0xf1, 0x38, 0xbf, 0xfc, 0x9a,
+  0xef, 0x93, 0xdc, 0xd6, 0xf6, 0x1d, 0x37, 0x7c,
+  0xe8, 0x13, 0x72, 0xc2, 0x49, 0xc1, 0x08, 0x4e,
+  0x9e, 0x7b, 0xfe, 0x42, 0xaa, 0x5e, 0x4f, 0x3f,
+  0x7f, 0x29, 0xd0, 0x88, 0x8f, 0xb1, 0xe6, 0x86,
+  0x33, 0xff, 0x3d, 0xa0, 0x33, 0xfa, 0x34, 0x97,
+  0xe3, 0xa7, 0x92, 0xf4, 0x53, 0x44, 0x1d, 0x3f,
+  0x75, 0x93, 0x57, 0xa3, 0x8e, 0x81, 0x45, 0x2d,
+  0xd1, 0xdb, 0x16, 0xcc, 0x3b, 0x1d, 0x30, 0x42,
+  0x74, 0x38, 0xd6, 0x04, 0x5a, 0x7a, 0x89, 0xe6,
+  0xc5, 0x54, 0xd0, 0xcf, 0xa9, 0xbf, 0x60, 0x50,
+  0xe8, 0xf1, 0xef, 0x6f, 0x33, 0x9c, 0x10, 0x84,
+  0xa8, 0x2a, 0xa5, 0xe4, 0xf7, 0x83, 0xe6, 0x8a,
+  0x85, 0x37, 0x9e, 0x19, 0x8f, 0x26, 0xf1, 0x68,
+  0x6e, 0x7d, 0xf2, 0x7b, 0x6e, 0xf8, 0x0e, 0x9f,
+  0xf9, 0x3e, 0x0f, 0xa3, 0xed, 0x27, 0xc0, 0x74,
+  0x00, 0xf9, 0xe8, 0x45, 0x3f, 0x34, 0x98, 0x36,
+  0xf1, 0xd3, 0xf5, 0xf1, 0xaf, 0xa3, 0x0f, 0x10,
+  0x14, 0xfb, 0xbf, 0xb5, 0x90, 0xd1, 0x01, 0x54,
+  0xdd, 0x4f, 0x90, 0x1e, 0x7e, 0x87, 0x4f, 0xe1,
+  0x6a, 0x9e, 0xfd, 0xfc, 0x74, 0xf3, 0xe0, 0x14,
+  0x2a, 0x60, 0x84, 0xa8, 0x43, 0x6e, 0x12, 0x19,
+  0xfb, 0x85, 0xce, 0xff, 0x8a, 0xa9, 0xa0, 0x84,
+  0x4e, 0xef, 0x08, 0xbc, 0xcd, 0xf4, 0x4b, 0x94,
+  0x69, 0x08, 0xb9, 0xf6, 0x97, 0xd3, 0xb7, 0x9a,
+  0x20, 0x79, 0xff, 0x5b, 0x47, 0x93, 0x72, 0x5d,
+  0x36, 0x3a, 0x77, 0x0b, 0xc7, 0x4c, 0x10, 0x9d,
+  0x3f, 0x87, 0xd8, 0xdb, 0x7b, 0xaa, 0xa6, 0xc4,
+  0x23, 0x71, 0xb2, 0x2f, 0xc5, 0xce, 0x7f, 0xef,
+  0xe6, 0xbb, 0x73, 0xb7, 0xf3, 0xe8, 0x74, 0x21,
+  0xf5, 0x61, 0x1c, 0xff, 0xec, 0x63, 0x39, 0xd8,
+  0x2b, 0xdc, 0xa6, 0x88, 0x62, 0x2c, 0x7e, 0x3f,
+  0x20, 0x9f, 0xb0, 0x57, 0xb9, 0x4d, 0x10, 0x54,
+  0xf5, 0xe8, 0x80, 0x2a, 0x77, 0x0b, 0xc5, 0x4f,
+  0x69, 0xfe, 0xd6, 0x54, 0xfe, 0xf3, 0xd9, 0x7a,
+  0x20, 0x0a, 0x82, 0xa7, 0xec, 0x54, 0xb2, 0x30,
+  0xa9, 0x82, 0x12, 0xa7, 0xef, 0xa7, 0xde, 0xf0,
+  0x95, 0x18, 0x98, 0x52, 0x90, 0xb0, 0x6e, 0xc4,
+  0x80, 0x33, 0xf8, 0x50, 0x4a, 0xb7, 0x8b, 0x4d,
+  0xe1, 0x2a, 0xa7, 0xe5, 0x2e, 0x72, 0x7a, 0xf6,
+  0x8e, 0xc6, 0x7f, 0xc8, 0xee, 0xfe, 0x50, 0x52,
+  0x87, 0x4f, 0xf9, 0x2f, 0x64, 0x6d, 0xb2, 0x01,
+  0x0e, 0x9f, 0xff, 0x9a, 0xee, 0x77, 0x5b, 0x76,
+  0x3d, 0xa5, 0xf4, 0xed, 0xe6, 0x8b, 0xee, 0x7d,
+  0xeb, 0xff, 0x1c, 0x74, 0xff, 0xbf, 0xe7, 0x5e,
+  0xd8, 0x3e, 0xa1, 0xd3, 0xfa, 0xe0, 0xdf, 0xf7,
+  0x5b, 0x0f, 0x10, 0x0c, 0xee, 0x17, 0x1e, 0x20,
+  0x18, 0xc3, 0xe9, 0xd1, 0x0a, 0x6e, 0x71, 0xe2,
+  0x01, 0x9e, 0xef, 0xbe, 0xe3, 0xc4, 0x03, 0x3f,
+  0xbc, 0xb6, 0xc0, 0x01, 0x0f, 0x10, 0x0c, 0xef,
+  0x7f, 0x63, 0xc4, 0x03, 0x1b, 0x22, 0xe5, 0x84,
+  0x56, 0x2f, 0x6c, 0x7d, 0x38, 0x52, 0xe7, 0x88,
+  0x06, 0x0f, 0x10, 0x0c, 0xc8, 0xc3, 0xc4, 0x03,
+  0x1b, 0x1b, 0x9f, 0x0b, 0xcf, 0x79, 0x9b, 0x21,
+  0xe2, 0x01, 0x9d, 0x7e, 0x53, 0xc4, 0x03, 0x3f,
+  0xef, 0xf3, 0xab, 0x6f, 0x2f, 0x09, 0xe2, 0x01,
+  0x9b, 0xb6, 0x3c, 0x40, 0x33, 0xfb, 0xfc, 0x1a,
+  0x51, 0x00, 0x78, 0x80, 0x67, 0xde, 0xd7, 0xdf,
+  0x01, 0xe2, 0x01, 0x9b, 0xd4, 0x3c, 0x40, 0x30,
+  0x27, 0xb3, 0x73, 0x69, 0xf5, 0xfe, 0x8f, 0xb8,
+  0xd1, 0x00, 0xcc, 0x04, 0x3c, 0x40, 0x35, 0x36,
+  0xb3, 0xef, 0x23, 0x3b, 0x63, 0xc4, 0x03, 0x3d,
+  0xa7, 0x7d, 0x4f, 0x10, 0x0c, 0xe4, 0x15, 0x3c,
+  0x40, 0x33, 0xfe, 0xc7, 0xe9, 0xb2, 0x67, 0xc1,
+  0x43, 0xc4, 0x03, 0x3e, 0xd3, 0x9c, 0xe4, 0x3c,
+  0x40, 0x31, 0x88, 0x80, 0xb2, 0x64, 0xc2, 0x03,
+  0xc4, 0x03, 0x0e, 0x55, 0x1f, 0xb1, 0x1e, 0x42,
+  0x63, 0xca, 0xd6, 0x32, 0x01, 0xa5, 0x0b, 0xaf,
+  0x0a, 0x6d, 0x08, 0xa7, 0xd9, 0x7a, 0x73, 0xe7,
+  0x88, 0x06, 0x7f, 0x6c, 0x8a, 0xd0, 0xa5, 0xcf,
+  0x10, 0x0e, 0xc6, 0xd2, 0x70, 0xa0, 0x4f, 0x10,
+  0x0c, 0x29, 0xfb, 0x8a, 0x84, 0xf7, 0xbe, 0xea,
+  0x1e, 0x20, 0x19, 0xfb, 0x9a, 0x76, 0x3e, 0xe3,
+  0xc4, 0x03, 0x18, 0x88, 0xa0, 0x10, 0x68, 0x5f,
+  0x3f, 0xfb, 0x9e, 0xda, 0xc9, 0x4a, 0xd3, 0x41,
+  0x01, 0xe2, 0x01, 0x98, 0x40, 0x78, 0x80, 0x67,
+  0xdd, 0x7a, 0x79, 0xf3, 0xc4, 0x03, 0x3f, 0x7b,
+  0xfa, 0x3b, 0x28, 0x78, 0x80, 0x61, 0x11, 0x25,
+  0xf2, 0x2b, 0x9a, 0xc6, 0xcb, 0xfa, 0xb9, 0x0d,
+  0xb6, 0x90, 0x05, 0x82, 0xc4, 0x5c, 0x5e, 0x02,
+  0x7a, 0x4a, 0xd8, 0xbc, 0x78, 0x0d, 0xe6, 0x1b,
+  0xe1, 0xd7, 0x3b, 0xb9, 0x4d, 0x10, 0x0d, 0x51,
+  0x6d, 0x3d, 0xaf, 0x54, 0xb6, 0x61, 0xd3, 0x01,
+  0x0a, 0x96, 0xb2, 0xa7, 0x59, 0x1e, 0x3a, 0x60,
+  0x84, 0xa8, 0xf1, 0xec, 0xea, 0xc5, 0x5a, 0x12,
+  0x08, 0xe4, 0xe6, 0x7a, 0x85, 0x54, 0xf0, 0x67,
+  0xaf, 0x4d, 0x4d, 0x0e, 0x87, 0x99, 0x55, 0x4e,
+  0x27, 0x5a, 0x49, 0x97, 0x8e, 0x01, 0x0c, 0x6d,
+  0xe5, 0xb3, 0xf0, 0xb4, 0xe4, 0x17, 0x8e, 0x9f,
+  0xf3, 0xa9, 0xbb, 0xf8, 0xc4, 0x1d, 0x67, 0x4f,
+  0xdb, 0xc2, 0x3e, 0xcb, 0x15, 0x3c, 0xd5, 0xb9,
+  0xa3, 0xa7, 0xd8, 0xd3, 0x91, 0xf3, 0xa7, 0xb3,
+  0xe8, 0xe2, 0xa0, 0x4f, 0xaf, 0xe4, 0x7a, 0x85,
+  0x10, 0x89, 0x9c, 0x61, 0x6d, 0x90, 0x7a, 0x13,
+  0x33, 0xde, 0xfd, 0xe8, 0x74, 0xed, 0x1b, 0xba,
+  0x1d, 0x3f, 0xf0, 0x19, 0x8b, 0x6f, 0x6d, 0x6d,
+  0x35, 0x9d, 0x3f, 0xf5, 0xe9, 0x9b, 0x23, 0xf4,
+  0xc7, 0xee, 0x74, 0x22, 0x2c, 0x3c, 0x45, 0xc9,
+  0x13, 0xee, 0x6d, 0xb6, 0xc8, 0x74, 0xd4, 0xa1,
+  0xd3, 0x82, 0x10, 0x9d, 0x30, 0x38, 0xaa, 0x97,
+  0x90, 0x27, 0xad, 0x43, 0x29, 0xdc, 0x0c, 0x2a,
+  0x1c, 0x8b, 0xb6, 0x42, 0x01, 0xbc, 0x86, 0x7f,
+  0x5f, 0xf8, 0xf8, 0x37, 0xb8, 0xe9, 0xfe, 0xfe,
+  0x36, 0xca, 0x84, 0x21, 0x2a, 0x73, 0x3a, 0xe7,
+  0x45, 0x8f, 0x55, 0xb1, 0xd4, 0x22, 0x39, 0xfc,
+  0x71, 0xd0, 0x8b, 0x9a, 0xdc, 0x74, 0xcd, 0x50,
+  0xe9, 0xfa, 0xb8, 0xdb, 0xdf, 0xdb, 0x0d, 0x66,
+  0xf1, 0x59, 0xed, 0xb2, 0xdc, 0x74, 0xff, 0xc9,
+  0x9f, 0x75, 0xb3, 0xff, 0x40, 0x9d, 0x2f, 0x0a,
+  0x2a, 0xfe, 0x91, 0x72, 0x18, 0x79, 0xb5, 0x50,
+  0x74, 0x7a, 0x5b, 0x47, 0xf3, 0xac, 0xbd, 0x4e,
+  0xfc, 0x7e, 0x34, 0xb1, 0x8b, 0x47, 0x46, 0x04,
+  0x0f, 0xc3, 0x4a, 0xf1, 0xe8, 0x36, 0x8c, 0x2a,
+  0x7e, 0xf8, 0x33, 0x6e, 0x71, 0xd3, 0xed, 0xed,
+  0x39, 0x35, 0x65, 0x46, 0x1e, 0xde, 0xf2, 0xd9,
+  0xff, 0xc3, 0xaf, 0xfa, 0x76, 0xfc, 0xa7, 0x93,
+  0xe7, 0x4b, 0x79, 0xa2, 0x05, 0x95, 0xcd, 0x40,
+  0xa4, 0xbd, 0x73, 0x78, 0x11, 0xf9, 0xff, 0x79,
+  0xbe, 0xde, 0xdf, 0x50, 0x01, 0x0a, 0x9f, 0xfd,
+  0x7a, 0x73, 0xfb, 0x98, 0x99, 0xfb, 0xb7, 0x9d,
+  0x08, 0x89, 0x3f, 0x22, 0x4e, 0x7b, 0xee, 0x3a,
+  0x11, 0x38, 0x26, 0x42, 0x26, 0xd0, 0xba, 0xd0,
+  0x8a, 0x7f, 0x39, 0xac, 0xff, 0x5b, 0x0e, 0x9f,
+  0xfc, 0x2b, 0xfc, 0x6d, 0xfc, 0x41, 0x4a, 0x1d,
+  0x3f, 0xb9, 0xab, 0x63, 0x32, 0x87, 0x46, 0x1f,
+  0xcb, 0x64, 0x79, 0xf6, 0x6d, 0xe1, 0xa1, 0xd3,
+  0xff, 0xd4, 0xbb, 0xeb, 0xeb, 0x6e, 0xd4, 0xcb,
+  0x79, 0x87, 0x49, 0x1e, 0x3f, 0xd0, 0x93, 0xc7,
+  0x91, 0x91, 0x78, 0x50, 0x4e, 0xdb, 0x84, 0xe9,
+  0xf0, 0x3b, 0xf9, 0xa8, 0x74, 0x21, 0xe2, 0x68,
+  0x37, 0x3c, 0x8c, 0x7d, 0xa3, 0xa1, 0x15, 0x12,
+  0x3a, 0x37, 0x3a, 0x36, 0x5c, 0x8a, 0x78, 0x1c,
+  0xfd, 0x0e, 0x98, 0x21, 0x3a, 0x28, 0x6e, 0x02,
+  0x45, 0x3f, 0x53, 0xd6, 0xec, 0xb1, 0x55, 0x34,
+  0x33, 0x82, 0x10, 0x95, 0x3c, 0xeb, 0xe2, 0x95,
+  0x52, 0xf2, 0x7d, 0x9b, 0x78, 0x14, 0x3a, 0x5c,
+  0x27, 0xaf, 0xf2, 0xf9, 0xfb, 0xef, 0xd1, 0xac,
+  0xb9, 0xd3, 0xe7, 0xb5, 0x7e, 0xc7, 0xce, 0x9f,
+  0xf6, 0x2e, 0xd8, 0x21, 0xeb, 0x34, 0x74, 0xce,
+  0x78, 0xa8, 0x7c, 0xf5, 0x3e, 0x7b, 0x02, 0x8a,
+  0x4e, 0x84, 0x0c, 0x22, 0x63, 0xf8, 0x4d, 0xd0,
+  0xd3, 0x9f, 0xf6, 0xb4, 0x7f, 0xe9, 0x6b, 0x68,
+  0xa7, 0x4f, 0xdf, 0xed, 0x76, 0xe7, 0x1d, 0x38,
+  0x21, 0x09, 0x53, 0xb7, 0xa0, 0x0a, 0xa9, 0x79,
+  0x3f, 0xef, 0xf3, 0xb7, 0x8e, 0x36, 0xe1, 0x3a,
+  0x7f, 0xbf, 0xc0, 0xdc, 0xe4, 0x03, 0xe7, 0x46,
+  0xc9, 0x98, 0xb1, 0x04, 0x09, 0x5f, 0x2c, 0xb9,
+  0xfc, 0xe0, 0x84, 0x25, 0x88, 0x42, 0x7c, 0x2b,
+  0xdc, 0xa5, 0x88, 0x42, 0xa6, 0xa6, 0x70, 0x42,
+  0x12, 0xc4, 0x1f, 0x05, 0x88, 0x3e, 0xa6, 0xa6,
+  0x64, 0x66, 0x22, 0x41, 0x5a, 0x67, 0xd7, 0x4b,
+  0xa3, 0x0e, 0x9e, 0xff, 0x93, 0x59, 0xd3, 0xb7,
+  0xa0, 0x0e, 0x87, 0x8f, 0x01, 0x84, 0x73, 0xe5,
+  0x4b, 0x23, 0x0a, 0x9f, 0x7f, 0xbf, 0xfc, 0x2a,
+  0x6c, 0x52, 0xa6, 0x08, 0x4a, 0x8c, 0x3f, 0x5a,
+  0x12, 0xdc, 0x98, 0x22, 0x93, 0xfb, 0xfb, 0xd0,
+  0x16, 0xcd, 0x42, 0xaa, 0x6e, 0xe1, 0x13, 0x80,
+  0xf3, 0x37, 0x43, 0x4e, 0x7f, 0xf5, 0x90, 0x14,
+  0xcc, 0xdb, 0xbf, 0xda, 0xce, 0x9f, 0xd4, 0xde,
+  0xca, 0x07, 0x9f, 0x3a, 0x11, 0x5b, 0x2f, 0xa3,
+  0x05, 0x18, 0xeb, 0x38, 0xd2, 0x89, 0x53, 0x82,
+  0x10, 0x95, 0x3e, 0x70, 0x3b, 0xfb, 0x15, 0x52,
+  0xf2, 0x7f, 0xfb, 0xef, 0xee, 0x7c, 0x09, 0xf5,
+  0xe7, 0xbf, 0xc7, 0x4f, 0xff, 0x9d, 0x89, 0x5d,
+  0xbe, 0x9a, 0x2e, 0x6b, 0xf0, 0x9d, 0x3d, 0xed,
+  0xb1, 0x87, 0x42, 0x26, 0x04, 0xe3, 0x7e, 0x53,
+  0xd1, 0x5a, 0x7e, 0xd5, 0xd3, 0xdf, 0x7d, 0xc7,
+  0x4f, 0xfa, 0x94, 0x41, 0xba, 0x57, 0x6f, 0x1d,
+  0x3f, 0xef, 0xf3, 0x56, 0xe1, 0x1f, 0x6c, 0x74,
+  0x62, 0x2b, 0xfc, 0x66, 0xc3, 0xe9, 0xfb, 0x87,
+  0x6c, 0xcf, 0x9d, 0x3f, 0xfd, 0x97, 0xa6, 0x35,
+  0x64, 0x6d, 0x96, 0xb2, 0x1d, 0x3f, 0xae, 0xdd,
+  0x5a, 0xfb, 0x74, 0x7b, 0x43, 0xa3, 0x64, 0x5f,
+  0x7c, 0xae, 0xea, 0x13, 0xff, 0xde, 0xa6, 0x6d,
+  0x7a, 0x7b, 0x5d, 0xbb, 0xfe, 0x3a, 0x7f, 0xff,
+  0x7e, 0xf9, 0x6f, 0x25, 0xfc, 0x04, 0x75, 0x42,
+  0x10, 0x95, 0x3d, 0xb6, 0x66, 0xb2, 0xa7, 0x3b,
+  0xfa, 0x1a, 0x21, 0x99, 0xc1, 0x08, 0x4a, 0x9d,
+  0x9f, 0x52, 0xaa, 0x5e, 0x4f, 0xfb, 0x1e, 0xcd,
+  0xb9, 0xdf, 0x47, 0x8e, 0x80, 0x1f, 0x47, 0xca,
+  0x61, 0x13, 0x54, 0x79, 0x85, 0xf2, 0x31, 0x85,
+  0x74, 0xf7, 0xaf, 0xe4, 0x3a, 0x7f, 0x69, 0x82,
+  0x00, 0x7b, 0xe7, 0x4f, 0xff, 0x91, 0xde, 0xda,
+  0xdb, 0xe9, 0x82, 0xbd, 0xca, 0x68, 0x83, 0x22,
+  0xc8, 0x94, 0xb9, 0x9c, 0xfe, 0x6f, 0xca, 0x37,
+  0xe0, 0xa1, 0xd0, 0xe4, 0xc3, 0xbd, 0x0b, 0x5b,
+  0x91, 0xcf, 0xff, 0x27, 0xde, 0xdc, 0xd7, 0xbf,
+  0x9b, 0x67, 0xf5, 0x9d, 0x39, 0x05, 0xa3, 0xa1,
+  0x17, 0x2f, 0x72, 0x1d, 0xaa, 0x63, 0xe8, 0xe9,
+  0xfa, 0x35, 0x1d, 0x0d, 0x9b, 0xd5, 0xa7, 0xf5,
+  0xfc, 0xdb, 0xd7, 0x72, 0x15, 0x26, 0x1d, 0x3f,
+  0xa9, 0x9f, 0xd6, 0x29, 0x5f, 0x1e, 0x2e, 0xf3,
+  0x59, 0xe1, 0xd1, 0xf7, 0x1d, 0x3f, 0xbe, 0xef,
+  0xe3, 0x11, 0x4e, 0x9c, 0xcd, 0xb0, 0xe8, 0x43,
+  0xf0, 0xc2, 0x3e, 0x31, 0x9f, 0xf6, 0x97, 0xa6,
+  0xf1, 0x03, 0x3d, 0x43, 0xa7, 0xfe, 0x4f, 0xf5,
+  0x90, 0x15, 0x1a, 0x50, 0xa8, 0xd9, 0x10, 0x8c,
+  0x42, 0x9f, 0x5b, 0xde, 0x7e, 0x87, 0x41, 0x53,
+  0xf5, 0x37, 0xa0, 0xa3, 0x0a, 0x82, 0xa0, 0xa8,
+  0x2a, 0x0a, 0x87, 0x1e, 0xff, 0x82, 0x80, 0x5b,
+  0xa0, 0x53, 0x78, 0x56, 0xa0, 0x54, 0xd6, 0xc2,
+  0xa7, 0xee, 0xeb, 0xb4, 0x8c, 0x2b, 0x71, 0x6b,
+  0x26, 0xec, 0xa8, 0x2a, 0x0a, 0x87, 0x16, 0x9e,
+  0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa0,
+  0xa8, 0x78, 0xde, 0x6c, 0x15, 0xe0, 0xa0, 0x05,
+  0x50, 0x29, 0xb0, 0x54, 0x15, 0x05, 0x43, 0x8b,
+  0x4a, 0x05, 0x41, 0x50, 0x54, 0x15, 0x05, 0x43,
+  0x8d, 0x40, 0x02, 0xae, 0x15, 0xa8, 0x15, 0x05,
+  0x41, 0x50, 0x54, 0x15, 0x0f, 0x1a, 0x8d, 0x61,
+  0x42, 0x15, 0x60, 0xa9, 0x6b, 0x2a, 0x0a, 0x82,
+  0xa0, 0xa8, 0x2a, 0x36, 0x35, 0x0f, 0x85, 0x00,
+  0x2b, 0x40, 0xa8, 0x2a, 0x0a, 0x82, 0xa7, 0xd6,
+  0x40, 0x53, 0x0a, 0x82, 0xa1, 0xc7, 0x9c, 0xa1,
+  0x56, 0x0a, 0xe0, 0xa0, 0x13, 0x49, 0x4a, 0x82,
+  0xa0, 0xa8, 0x2a, 0x0a, 0x87, 0x1a, 0x87, 0xc2,
+  0xbc, 0x14, 0xd8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8,
+  0x2a, 0x1c, 0x6a, 0x36, 0x0a, 0xb0, 0x57, 0xc2,
+  0xa5, 0x62, 0xa0, 0xa8, 0x2a, 0x4e, 0x2a, 0x0a,
+  0x7c, 0xb0, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x87,
+  0x8f, 0x99, 0xc1, 0x5a, 0xc6, 0x94, 0x69, 0xa0,
+  0xa0, 0x05, 0x5c, 0x2a, 0x58, 0x54, 0x15, 0x05,
+  0x49, 0xc5, 0x41, 0x4f, 0x96, 0x10, 0x54, 0x15,
+  0x08, 0x7a, 0x4e, 0x0a, 0xf0, 0xd0, 0x8d, 0x30,
+  0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x84,
+  0x36, 0x4f, 0x85, 0x08, 0x53, 0x02, 0xbe, 0x15,
+  0x05, 0x41, 0x50, 0x54, 0x09, 0x7d, 0x40, 0xab,
+  0x85, 0x41, 0x50, 0x54, 0x15, 0x0c, 0x2f, 0xbe,
+  0x15, 0x70, 0xa9, 0x30, 0xa8, 0x2a, 0x0a, 0x80,
+  0x16, 0x9a, 0x05, 0x41, 0x50, 0x54, 0x15, 0x05,
+  0x42, 0x1a, 0x86, 0x82, 0xac, 0x15, 0xa0, 0x54,
+  0x22, 0xfd, 0x6b, 0xce, 0x4e, 0x3d, 0xd8, 0xa7,
+  0x17, 0x15, 0xb5, 0xf4, 0x8f, 0x33, 0x6a, 0xcf,
+  0x5a, 0x3a, 0x18, 0x46, 0x31, 0x1e, 0xc6, 0xfc,
+  0xcc, 0x03, 0xcf, 0xbb, 0x51, 0x9a, 0xec, 0x3a,
+  0x3c, 0xb6, 0x65, 0x0a, 0x53, 0x79, 0x6e, 0xf2,
+  0x4d, 0x44, 0x99, 0xf3, 0xbe, 0x99, 0x42, 0xaa,
+  0x9a, 0xbc, 0xef, 0x23, 0x0a, 0x9e, 0xf2, 0xf0,
+  0x9d, 0x3b, 0xdb, 0x61, 0xd3, 0x93, 0x7d, 0x5f,
+  0x44, 0x78, 0x9c, 0xd8, 0x6e, 0xe3, 0xf3, 0xfa,
+  0xde, 0x0e, 0xc2, 0x8f, 0x1d, 0x0f, 0xa2, 0x11,
+  0xa5, 0x09, 0x80, 0x87, 0x4f, 0xc3, 0xdf, 0xde,
+  0x80, 0x3a, 0x6e, 0x13, 0xa5, 0xe3, 0x94, 0xb4,
+  0x92, 0x9d, 0x26, 0x1d, 0x3b, 0x1b, 0xeb, 0xe4,
+  0x49, 0x88, 0xad, 0x90, 0x78, 0x7b, 0x78, 0x7c,
+  0xff, 0xfb, 0x44, 0xdd, 0xc2, 0x3c, 0x04, 0xa8,
+  0x42, 0x13, 0xa1, 0xcc, 0xd9, 0xbd, 0xa1, 0x7b,
+  0xe8, 0x58, 0x34, 0x49, 0xd4, 0xa9, 0xff, 0xc2,
+  0xe2, 0xeb, 0xd3, 0xf9, 0x3f, 0x7e, 0xfe, 0x98,
+  0x74, 0xfc, 0xef, 0xf9, 0xd6, 0xc3, 0xa7, 0xcf,
+  0x78, 0x51, 0xc7, 0x40, 0x9e, 0xa7, 0xcb, 0x67,
+  0xfd, 0x64, 0x10, 0x7f, 0x03, 0xc0, 0x3a, 0x76,
+  0x63, 0x47, 0x4b, 0x2c, 0x7a, 0xe0, 0x3c, 0x9f,
+  0xa9, 0x8d, 0xbe, 0x8f, 0x9d, 0x24, 0xc4, 0x67,
+  0x7d, 0xe2, 0xe4, 0xf3, 0xda, 0x70, 0xb8, 0xe9,
+  0xe4, 0xd1, 0xbb, 0xa1, 0x53, 0xe7, 0x54, 0x21,
+  0x09, 0xd1, 0xf3, 0xcf, 0xd0, 0x9e, 0x36, 0x44,
+  0x9e, 0x38, 0x43, 0x15, 0x1f, 0x02, 0x35, 0x4d,
+  0x21, 0x8f, 0x3f, 0x0e, 0x80, 0xcf, 0xa9, 0xd3,
+  0xdb, 0x6c, 0x8d, 0x8e, 0x9f, 0xff, 0x25, 0x91,
+  0x8a, 0x97, 0xc1, 0x5e, 0xe5, 0x34, 0x5f, 0x13,
+  0xf8, 0x3d, 0x7a, 0x26, 0x3c, 0x74, 0xff, 0xfd,
+  0x97, 0xde, 0xe4, 0x6d, 0xef, 0x80, 0x7c, 0x8c,
+  0xc2, 0xa6, 0xbe, 0x1d, 0x3e, 0x1f, 0x3d, 0xcc,
+  0x34, 0xc2, 0x73, 0xd7, 0xd1, 0x38, 0xd3, 0x09,
+  0xcc, 0x04, 0x35, 0x02, 0x73, 0xfb, 0xfd, 0xae,
+  0xe8, 0x20, 0x35, 0x02, 0x73, 0xfa, 0x99, 0x6f,
+  0x53, 0x47, 0x8d, 0x30, 0x9c, 0xd9, 0xb1, 0xa6,
+  0x13, 0x98, 0x21, 0x3c, 0xc2, 0x71, 0x89, 0xa6,
+  0x3e, 0x69, 0xe2, 0xe6, 0x11, 0x51, 0x01, 0xb2,
+  0x10, 0x48, 0xe5, 0x72, 0xcc, 0x27, 0x53, 0xe7,
+  0x97, 0x9f, 0x4f, 0xd8, 0x31, 0xe4, 0x45, 0x15,
+  0x42, 0x5e, 0x52, 0x9c, 0x6c, 0xad, 0x89, 0x49,
+  0x6c, 0xb7, 0x79, 0x56, 0xd3, 0xed, 0xb0, 0x7d,
+  0xac, 0xe9, 0xf7, 0xf3, 0x7e, 0x34, 0x74, 0xfe,
+  0x06, 0xff, 0xb9, 0xbf, 0x9e, 0x3a, 0x3e, 0x7c,
+  0x57, 0x29, 0x84, 0x5c, 0x81, 0xc9, 0x71, 0xde,
+  0x46, 0xe8, 0x45, 0xcf, 0xfe, 0x65, 0xe9, 0xef,
+  0xbe, 0xeb, 0xfa, 0x9e, 0x3a, 0x7f, 0xff, 0x7f,
+  0x1f, 0xca, 0x77, 0xed, 0xe4, 0xbd, 0xb4, 0xe6,
+  0x1d, 0x3f, 0xfe, 0xef, 0xdf, 0xba, 0xdf, 0x4b,
+  0xd0, 0x39, 0x63, 0xa7, 0x0d, 0x28, 0x78, 0x80,
+  0xe7, 0xff, 0xb7, 0x8a, 0x59, 0x37, 0x60, 0xaf,
+  0x72, 0x9a, 0x20, 0x3a, 0x9a, 0x89, 0x78, 0x08,
+  0xe5, 0xbb, 0xdc, 0xff, 0xff, 0xbf, 0xce, 0xcf,
+  0xb4, 0xec, 0x7d, 0xdb, 0xd0, 0x15, 0x08, 0x42,
+  0x54, 0xfe, 0x4c, 0x15, 0xee, 0x53, 0x44, 0x13,
+  0x3f, 0xc9, 0x7c, 0x15, 0xee, 0x53, 0x45, 0xf3,
+  0x3e, 0xf3, 0x6f, 0xe5, 0x36, 0x3f, 0xa5, 0x3a,
+  0x9f, 0xf3, 0xdc, 0xfb, 0x7e, 0x5f, 0xfc, 0xd8,
+  0xe9, 0xc1, 0x08, 0x4a, 0x9f, 0xaf, 0x6c, 0x5e,
+  0x12, 0xaa, 0x5e, 0x43, 0xc8, 0x99, 0xfb, 0x04,
+  0xff, 0xcf, 0x31, 0x1f, 0xa7, 0xf1, 0xed, 0xee,
+  0x3a, 0x7f, 0xfb, 0x7b, 0xff, 0xdc, 0xb6, 0xf0,
+  0x00, 0x82, 0xe3, 0xa7, 0x04, 0x21, 0x2a, 0x7f,
+  0x6f, 0x02, 0x7f, 0x1f, 0xb9, 0x55, 0x2f, 0x27,
+  0xff, 0xe6, 0xef, 0x72, 0xdb, 0xdb, 0x6d, 0x81,
+  0xdd, 0x7a, 0x63, 0xc7, 0x4b, 0xac, 0x8a, 0xbd,
+  0x11, 0x21, 0xca, 0xa2, 0xfd, 0x0d, 0xa1, 0x24,
+  0x62, 0x4d, 0xe3, 0x1b, 0x9f, 0xf6, 0x5d, 0x06,
+  0x96, 0x4f, 0xdc, 0xf1, 0x04, 0x4f, 0xe4, 0xc1,
+  0x5e, 0xe5, 0x34, 0x41, 0x15, 0x3c, 0x99, 0xfd,
+  0xfe, 0xb0, 0x8f, 0x82, 0x74, 0x00, 0xff, 0x3e,
+  0x97, 0x3f, 0xc9, 0xfb, 0xef, 0xcb, 0x73, 0xe7,
+  0x4f, 0xff, 0x70, 0x6f, 0x96, 0x4f, 0x5f, 0xf9,
+  0x6f, 0x1d, 0x0e, 0x44, 0x47, 0xce, 0xa7, 0xf5,
+  0xf7, 0xb2, 0x81, 0xe7, 0xce, 0x9e, 0xf3, 0x5e,
+  0x09, 0xd3, 0xff, 0xed, 0x1e, 0xfa, 0x65, 0xaa,
+  0x97, 0xcb, 0x68, 0x27, 0x4f, 0xb2, 0xf4, 0xdf,
+  0x4d, 0x8f, 0xe7, 0x79, 0x1c, 0xfc, 0xb6, 0xf3,
+  0x7f, 0xb5, 0x9d, 0x3f, 0x31, 0x35, 0x76, 0xc7,
+  0x8e, 0x9f, 0xff, 0xfe, 0xf5, 0xf9, 0x9d, 0xf0,
+  0x3b, 0xd4, 0xd1, 0x96, 0xf2, 0x5e, 0xda, 0x73,
+  0x0e, 0x8d, 0x91, 0xc7, 0xe3, 0x2e, 0x31, 0x9c,
+  0x3b, 0xe8, 0x74, 0xff, 0xbb, 0xeb, 0x82, 0xbd,
+  0xca, 0x68, 0x84, 0x61, 0x0f, 0x8b, 0x41, 0xd9,
+  0xff, 0xc9, 0x8f, 0xef, 0xbf, 0xbf, 0xa3, 0xb2,
+  0x87, 0x4f, 0xff, 0x77, 0x3d, 0xbf, 0x2d, 0xcc,
+  0xa8, 0x42, 0x13, 0xa5, 0x9b, 0x22, 0x79, 0xa4,
+  0xd9, 0xc1, 0x08, 0x4a, 0x9f, 0xec, 0x07, 0x0e,
+  0x36, 0xcd, 0x8a, 0xa9, 0x79, 0x30, 0x42, 0x54,
+  0xe0, 0x84, 0x25, 0x4f, 0xdc, 0xf6, 0xd6, 0x4a,
+  0x15, 0x52, 0xf2, 0x3e, 0x8b, 0x60, 0xa3, 0xb7,
+  0x99, 0x4f, 0x97, 0xdb, 0x6f, 0x61, 0x55, 0x36,
+  0x73, 0x82, 0x10, 0x95, 0x3a, 0x88, 0x25, 0x54,
+  0xbc, 0x90, 0x3c, 0x7f, 0xf7, 0x56, 0x9f, 0xb6,
+  0xfa, 0x3b, 0x94, 0xe9, 0xfd, 0xbc, 0x76, 0xf3,
+  0x64, 0xd8, 0xe9, 0xfd, 0x7b, 0x63, 0x6c, 0xbd,
+  0x0e, 0x81, 0x44, 0xc5, 0x8b, 0x3e, 0x71, 0x08,
+  0x8e, 0xfc, 0x86, 0x04, 0xe7, 0xf5, 0x4e, 0xdd,
+  0x4e, 0x9f, 0xfd, 0x9a, 0xbe, 0xf8, 0x31, 0x52,
+  0xc8, 0xc3, 0xa7, 0xe5, 0xf5, 0x2d, 0xe6, 0x8a,
+  0x9f, 0xdf, 0xc7, 0xdd, 0x4f, 0x6b, 0x3a, 0x7b,
+  0xb8, 0x75, 0x9d, 0x1b, 0x8f, 0x5d, 0xe3, 0x69,
+  0xe4, 0xe6, 0x36, 0x2a, 0x70, 0x42, 0x12, 0xa7,
+  0xff, 0xb7, 0xa0, 0x33, 0x3f, 0x7b, 0x79, 0x3e,
+  0xf1, 0x55, 0x2f, 0x25, 0x8a, 0x89, 0xe6, 0x1f,
+  0x42, 0x27, 0xc8, 0xe2, 0xb7, 0xd2, 0xbd, 0x08,
+  0x5b, 0x43, 0x0e, 0x7f, 0xfc, 0xcc, 0x54, 0xff,
+  0x5e, 0x9b, 0x69, 0xc2, 0xe3, 0xa7, 0xc9, 0x7a,
+  0x36, 0xc3, 0xa1, 0x0f, 0xf2, 0xea, 0x93, 0xff,
+  0xde, 0x6d, 0x9f, 0xdb, 0xfc, 0x1c, 0xff, 0x6b,
+  0x3a, 0x7f, 0xff, 0xb6, 0xb7, 0x83, 0x9a, 0x9e,
+  0x67, 0x5e, 0x9a, 0x3b, 0x1f, 0xb9, 0xd1, 0x88,
+  0xc0, 0xe5, 0x38, 0x46, 0xc2, 0xed, 0xe4, 0xd7,
+  0x46, 0x8d, 0xb1, 0x4e, 0x4b, 0x75, 0xf4, 0x63,
+  0x6d, 0x42, 0xa8, 0x48, 0xd9, 0x0a, 0xfb, 0x46,
+  0x4e, 0x08, 0x49, 0x7e, 0x18, 0x14, 0x95, 0x3b,
+  0x79, 0x41, 0x5a, 0x43, 0x44, 0x30, 0xe1, 0x9c,
+  0xd9, 0x3e, 0x74, 0xff, 0xf6, 0x7e, 0xb7, 0xd7,
+  0xe7, 0xe9, 0x6c, 0x07, 0x1d, 0x27, 0xdc, 0x7d,
+  0xfb, 0x0e, 0xcf, 0xd6, 0x6b, 0xd6, 0xf3, 0x0e,
+  0x9f, 0xf7, 0xd2, 0xf6, 0xe0, 0x73, 0xf4, 0x3a,
+  0x7f, 0xea, 0x77, 0x87, 0x1f, 0xa8, 0x42, 0x13,
+  0xa7, 0xff, 0xbe, 0x8e, 0xdd, 0xbe, 0xfe, 0xfe,
+  0x8e, 0xca, 0x1d, 0x18, 0x98, 0x32, 0x97, 0xd8,
+  0xf8, 0x08, 0x93, 0xf9, 0x3e, 0xef, 0xe6, 0x00,
+  0xe9, 0xfc, 0xec, 0x1a, 0x7d, 0x1e, 0x3a, 0x7f,
+  0xf9, 0x1b, 0x20, 0xd7, 0x7d, 0xff, 0x8f, 0x78,
+  0x4f, 0x77, 0xbc, 0xff, 0xf6, 0x5d, 0x3e, 0xb9,
+  0x7b, 0x78, 0x40, 0xa7, 0x4f, 0xba, 0x99, 0xfb,
+  0x9d, 0x3a, 0xfd, 0xab, 0x3a, 0x7f, 0x5e, 0xde,
+  0xa8, 0x3b, 0xc7, 0x43, 0xc9, 0x91, 0xec, 0xbf,
+  0xf4, 0xcb, 0x93, 0x68, 0x3f, 0x3f, 0xff, 0x7f,
+  0x29, 0xa6, 0xec, 0xb7, 0x7f, 0x1a, 0x72, 0x3e,
+  0x74, 0xff, 0xb2, 0x9a, 0x60, 0xaf, 0x72, 0x9a,
+  0x20, 0x69, 0xf6, 0x5e, 0xdc, 0xed, 0xc8, 0xa5,
+  0xfa, 0xf4, 0xff, 0xff, 0xfd, 0x97, 0xb7, 0x7f,
+  0x5e, 0xea, 0x0f, 0x75, 0xdb, 0x66, 0xdb, 0xb1,
+  0x9d, 0xf7, 0xdc, 0x78, 0x82, 0xe7, 0xfd, 0xdd,
+  0xad, 0x7b, 0x6d, 0xda, 0xc2, 0x78, 0x82, 0xe7,
+  0xfe, 0xb7, 0xad, 0xe4, 0xfd, 0xf7, 0x6b, 0x09,
+  0xe2, 0x0b, 0x9f, 0xc9, 0xef, 0xdf, 0x76, 0xb0,
+  0x9e, 0x20, 0xb9, 0xf9, 0x99, 0xb6, 0xed, 0x61,
+  0x3c, 0x41, 0x73, 0xff, 0xfd, 0xdf, 0xff, 0x99,
+  0xba, 0x8b, 0x6f, 0x0f, 0xb5, 0xbd, 0x81, 0x3c,
+  0x41, 0x73, 0x3f, 0xbb, 0x64, 0xe8, 0x55, 0x40,
+  0x55, 0xb9, 0x13, 0xe7, 0xf1, 0x65, 0x52, 0xdf,
+  0x94, 0x7d, 0x3d, 0xc2, 0x0e, 0x3a, 0x7f, 0xeb,
+  0x7a, 0xde, 0x4f, 0xdf, 0x76, 0xb0, 0x9e, 0x20,
+  0xb9, 0xfe, 0x6a, 0x8b, 0xe7, 0xb7, 0x6b, 0x09,
+  0xe2, 0x0b, 0x9f, 0x5e, 0x88, 0xcd, 0xca, 0x8a,
+  0x2d, 0xea, 0xd3, 0xff, 0xb7, 0x2d, 0xbc, 0xa9,
+  0x7a, 0x6e, 0xd6, 0x13, 0xc4, 0x17, 0x3f, 0xff,
+  0xf7, 0xff, 0xe6, 0x6e, 0xd3, 0x37, 0x51, 0x6d,
+  0xe1, 0xf6, 0xb7, 0xb0, 0x27, 0x88, 0x2e, 0x31,
+  0x32, 0x67, 0xd0, 0xf9, 0x72, 0x7f, 0xad, 0xe1,
+  0xf6, 0xb7, 0xb0, 0x27, 0x88, 0x2e, 0x7f, 0xfb,
+  0xb9, 0xf7, 0x52, 0xde, 0xdb, 0x64, 0x14, 0x2a,
+  0x7f, 0xd8, 0xe7, 0x69, 0x41, 0xfb, 0xcd, 0xe7,
+  0x88, 0x2e, 0x15, 0x1d, 0x02, 0x91, 0x45, 0x09,
+  0xff, 0x2f, 0x86, 0xfc, 0x0a, 0x6e, 0x09, 0xe2,
+  0x0b, 0x9f, 0xad, 0xeb, 0x5b, 0xc0, 0x34, 0x01,
+  0x73, 0xec, 0x06, 0xed, 0x61, 0x3c, 0x41, 0x73,
+  0x65, 0xd4, 0xfc, 0xec, 0x77, 0x0f, 0xa3, 0xae,
+  0x90, 0xbf, 0x9f, 0x99, 0x9b, 0x6e, 0xd6, 0x13,
+  0xc4, 0x17, 0x3f, 0xe5, 0xb7, 0x87, 0xda, 0xde,
+  0xc0, 0x9e, 0x20, 0xb9, 0xb3, 0x77, 0x22, 0x32,
+  0x87, 0xf3, 0xfb, 0x4f, 0x33, 0xbe, 0xfb, 0x8f,
+  0x10, 0x5c, 0xff, 0xb3, 0xcd, 0xb3, 0xf9, 0xb7,
+  0x38, 0xf1, 0x05, 0xb0, 0xf0, 0xa3, 0x65, 0xdc,
+  0x70, 0x16, 0x7e, 0x3e, 0x7a, 0x46, 0x31, 0x78,
+  0xc6, 0x74, 0x85, 0xa8, 0x5c, 0x67, 0xc0, 0xa0,
+  0x00, 0x86, 0x88, 0x2e, 0xa8, 0x80, 0x9f, 0xf6,
+  0x3a, 0xdc, 0xed, 0x4d, 0x4d, 0x1e, 0x3a, 0x7f,
+  0x0f, 0xf3, 0x6b, 0x68, 0x13, 0xa7, 0xcf, 0xdf,
+  0x84, 0x07, 0x4f, 0xd8, 0xf7, 0x59, 0x35, 0x67,
+  0x47, 0x91, 0x17, 0xc6, 0x9f, 0x27, 0x9d, 0xc2,
+  0xf1, 0xd3, 0x01, 0x0e, 0x9e, 0xf2, 0x33, 0x0e,
+  0x83, 0xa7, 0xee, 0xd7, 0x74, 0x10, 0x1d, 0x1b,
+  0x1b, 0x7f, 0x85, 0x4f, 0xff, 0xe4, 0xf6, 0xdf,
+  0x4d, 0x16, 0xf8, 0xbb, 0x22, 0xef, 0x61, 0xd3,
+  0x01, 0x0e, 0x99, 0x35, 0x9d, 0x3f, 0xd9, 0x7a,
+  0x23, 0x37, 0xe3, 0x47, 0x4f, 0xea, 0x65, 0xbd,
+  0x4d, 0x1e, 0x3a, 0x60, 0x84, 0xa9, 0xfe, 0xfe,
+  0x36, 0xe7, 0x53, 0xdb, 0x1d, 0x0a, 0x9f, 0xbf,
+  0x86, 0xc4, 0x55, 0x8a, 0xf6, 0x22, 0x03, 0x13,
+  0x76, 0x2b, 0xf1, 0x7a, 0x1d, 0x04, 0xd7, 0x78,
+  0xb4, 0xe0, 0x84, 0x25, 0x49, 0x85, 0x54, 0xbc,
+  0x9f, 0x73, 0x5d, 0xc2, 0x55, 0x51, 0xb3, 0xbe,
+  0x17, 0x53, 0xf9, 0xfb, 0xa6, 0x5b, 0x1e, 0x3a,
+  0x11, 0xb1, 0x97, 0xc8, 0xcc, 0x35, 0x9e, 0x3e,
+  0x63, 0xe8, 0xd5, 0x6d, 0x0f, 0x3e, 0xa4, 0x8f,
+  0x7d, 0x1a, 0x90, 0xd1, 0xd2, 0x57, 0xfb, 0x64,
+  0xb9, 0xec, 0x54, 0xb9, 0xd3, 0xd8, 0xcc, 0xb9,
+  0xd3, 0xdc, 0xf6, 0xf7, 0x1d, 0x08, 0x7c, 0x6f,
+  0x8f, 0xea, 0x10, 0x4f, 0xdf, 0xd3, 0x66, 0x73,
+  0x8e, 0x9f, 0xfe, 0x7d, 0xdf, 0x4d, 0xcc, 0xfa,
+  0x6b, 0xbf, 0x9e, 0x3a, 0x11, 0x10, 0xbe, 0x2f,
+  0x9d, 0xdb, 0xb7, 0x9d, 0x3f, 0xfd, 0xf7, 0x6e,
+  0xcd, 0xbd, 0x47, 0xef, 0xa7, 0x50, 0xe8, 0xdc,
+  0x7e, 0x98, 0x3f, 0x3f, 0x3c, 0xd3, 0x9b, 0x82,
+  0xf1, 0xd3, 0x39, 0xe3, 0xa7, 0xd6, 0xcf, 0x3a,
+  0x87, 0x4f, 0xff, 0x59, 0x37, 0xd6, 0xff, 0xe0,
+  0x52, 0x88, 0x02, 0xa7, 0xf0, 0x30, 0x57, 0xb9,
+  0x4f, 0x10, 0x24, 0x39, 0x16, 0x7b, 0x13, 0x8a,
+  0x8c, 0xf5, 0xde, 0xef, 0x9d, 0x3c, 0xfd, 0x3a,
+  0xe7, 0x46, 0x1e, 0x25, 0x88, 0xa7, 0xf7, 0xf8,
+  0x34, 0xa2, 0x00, 0xe9, 0xc1, 0x08, 0x4f, 0x87,
+  0xd4, 0xee, 0xfe, 0xc5, 0xc3, 0xea, 0xa6, 0xa6,
+  0x36, 0x44, 0xa0, 0x16, 0xe7, 0xff, 0xd9, 0xff,
+  0x6b, 0xad, 0x2f, 0x6d, 0x39, 0xce, 0x43, 0xa1,
+  0xe3, 0xfc, 0xd6, 0x49, 0x1a, 0xa1, 0x56, 0x43,
+  0x8d, 0x32, 0x19, 0x5e, 0x74, 0xe8, 0xcc, 0x67,
+  0xde, 0xba, 0x5e, 0x85, 0x4f, 0x2a, 0x5e, 0x85,
+  0x4c, 0x10, 0x95, 0x0e, 0x3d, 0xdc, 0x27, 0x09,
+  0x04, 0xd8, 0x12, 0xaa, 0x6b, 0xa7, 0xff, 0xd9,
+  0x74, 0x5c, 0xcf, 0xde, 0xde, 0x4f, 0xbc, 0x74,
+  0x00, 0xfe, 0x02, 0x4b, 0x3f, 0xff, 0x91, 0xb7,
+  0xbe, 0x0d, 0xd7, 0xa6, 0x2d, 0xbb, 0xf7, 0xa1,
+  0xd3, 0xf9, 0xa7, 0xdd, 0x6d, 0x10, 0x4e, 0x9c,
+  0xee, 0x13, 0xa7, 0xce, 0xcb, 0xe6, 0xc5, 0x4b,
+  0xcd, 0x1e, 0x0d, 0xc6, 0xa6, 0x02, 0x1d, 0x30,
+  0x10, 0xe9, 0xfb, 0xfa, 0x3b, 0x3f, 0x5f, 0x1a,
+  0xa0, 0x0a, 0xcf, 0xfd, 0x7b, 0x63, 0x37, 0xa0,
+  0x31, 0xfb, 0x9d, 0x3f, 0x9f, 0x5f, 0x0e, 0xf4,
+  0xd8, 0xe9, 0xe0, 0x33, 0x9d, 0x43, 0xfb, 0xba,
+  0x34, 0xe6, 0xfc, 0x7c, 0xe8, 0x43, 0xd8, 0xe3,
+  0x99, 0xc1, 0x08, 0x4a, 0x9f, 0x93, 0x35, 0xff,
+  0x4a, 0x15, 0x52, 0xf2, 0x78, 0x3d, 0xf7, 0x1d,
+  0x32, 0xd8, 0xe9, 0xc1, 0x08, 0x4a, 0x9f, 0xbd,
+  0xda, 0xed, 0xeb, 0x95, 0x52, 0xf2, 0x7d, 0x80,
+  0xcc, 0x68, 0xe9, 0x53, 0x72, 0x25, 0x44, 0xc7,
+  0xe7, 0xd3, 0xde, 0xfe, 0x8e, 0xd9, 0x1d, 0xb9,
+  0x0b, 0x68, 0x45, 0xc0, 0xf7, 0x11, 0x63, 0x26,
+  0xb7, 0x61, 0x53, 0xb4, 0x63, 0x14, 0x3c, 0xbc,
+  0x65, 0x73, 0xf2, 0x30, 0x47, 0xae, 0x74, 0xff,
+  0xf7, 0x98, 0xfb, 0xa9, 0xbb, 0x3f, 0xfc, 0xf0,
+  0x0e, 0x8b, 0x1f, 0xed, 0xca, 0xa5, 0x56, 0xe8,
+  0xfe, 0xeb, 0x49, 0x29, 0xc9, 0xe8, 0xc4, 0x5d,
+  0x29, 0x37, 0x69, 0x4b, 0x19, 0x5a, 0xd6, 0x6b,
+  0x8c, 0xd5, 0x63, 0xa5, 0x7e, 0x53, 0x67, 0xa1,
+  0x3a, 0xd4, 0x79, 0xc3, 0x39, 0x92, 0xc8, 0xdc,
+  0xed, 0x3b, 0x53, 0xd4, 0xe5, 0x80, 0x4a, 0xbf,
+  0xfc, 0xe5, 0xfd, 0x2b, 0x10, 0x4b, 0xd6, 0x65,
+  0x5a, 0x46, 0x52, 0xda, 0x16, 0xe1, 0x84, 0xb3,
+  0x7c, 0xae, 0xbd, 0xf3, 0xad, 0xba, 0x90, 0xfc,
+  0x8a, 0xbf, 0xcd, 0xe3, 0xaf, 0xde, 0x9a, 0x7f,
+  0x57, 0x05, 0x7b, 0x94, 0xd1, 0x71, 0xcf, 0xea,
+  0xe0, 0xaf, 0x72, 0x9a, 0x2e, 0xb9, 0xff, 0xab,
+  0xce, 0xae, 0x0a, 0xf7, 0x29, 0xa2, 0x51, 0x84,
+  0x7f, 0xd0, 0xf7, 0x14, 0x6c, 0x77, 0xac, 0xed,
+  0x4e, 0xfd, 0x0f, 0x0d, 0x5a, 0x07, 0x5f, 0xd0,
+  0x75, 0x0d, 0xae, 0x77, 0xa8, 0x77, 0x3f, 0xfa,
+  0xac, 0xe7, 0x57, 0x05, 0x7b, 0x94, 0xd1, 0x2d,
+  0x4f, 0x85, 0x7b, 0x94, 0xd1, 0x1b, 0xcf, 0xfb,
+  0x9d, 0x5c, 0x15, 0xee, 0x53, 0x44, 0xbf, 0x2a,
+  0xe1, 0xfb, 0x30, 0xc2, 0x7f, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x55, 0xcf, 0xf6, 0xbc, 0xfe, 0x3f,
+  0x7e, 0x61, 0xd3, 0x6d, 0xe3, 0xa7, 0xec, 0x15,
+  0xee, 0x53, 0x44, 0x81, 0x1b, 0x8f, 0x32, 0xa2,
+  0xf3, 0xea, 0x77, 0xf9, 0xf3, 0xa1, 0xc7, 0x96,
+  0xf9, 0x24, 0x6b, 0x47, 0xa7, 0x43, 0x46, 0x7f,
+  0xef, 0xe3, 0xd5, 0x6f, 0x4f, 0xff, 0x2e, 0x74,
+  0x54, 0xfc, 0x04, 0xa6, 0x7f, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x64, 0x4f, 0xea, 0xe0, 0xaf, 0x72,
+  0x9a, 0x2d, 0x79, 0xfd, 0x5c, 0x15, 0xee, 0x53,
+  0x45, 0xc9, 0x3e, 0x15, 0xee, 0x53, 0x45, 0xd9,
+  0x3f, 0xee, 0x75, 0x70, 0x57, 0xb9, 0x4d, 0x14,
+  0x74, 0xab, 0x87, 0xec, 0xc3, 0x09, 0xf0, 0xaf,
+  0x72, 0x9a, 0x29, 0x59, 0xff, 0xff, 0xeb, 0x23,
+  0xc9, 0x6f, 0x36, 0xed, 0xad, 0xea, 0xad, 0xbc,
+  0xd5, 0x91, 0xec, 0x3a, 0x7d, 0x56, 0x73, 0xab,
+  0x88, 0xb2, 0x68, 0xc2, 0x1e, 0x5c, 0xef, 0x74,
+  0x32, 0x1f, 0x27, 0xf4, 0x73, 0xec, 0x21, 0x01,
+  0xdd, 0x0e, 0xef, 0x0b, 0x16, 0xd0, 0xd9, 0x9f,
+  0xe7, 0x57, 0x05, 0x7b, 0x94, 0xd1, 0x1c, 0x4f,
+  0xf7, 0xab, 0x82, 0xbd, 0xca, 0x68, 0xad, 0x65,
+  0x5e, 0x44, 0x15, 0xd0, 0x67, 0xff, 0x55, 0x9c,
+  0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x25, 0xb9, 0xb1,
+  0xf3, 0xa7, 0xf6, 0xd8, 0xc6, 0x27, 0xa8, 0x74,
+  0x3e, 0x79, 0x3e, 0x16, 0x9d, 0x6d, 0x9c, 0x74,
+  0xe7, 0x31, 0x4e, 0x83, 0x44, 0x37, 0x3f, 0xee,
+  0x75, 0x70, 0x57, 0xb9, 0x4d, 0x13, 0x04, 0xe1,
+  0xd0, 0x05, 0x4f, 0xef, 0xe5, 0xee, 0x83, 0x43,
+  0xa5, 0x54, 0x4c, 0x15, 0xe2, 0x3d, 0x87, 0x54,
+  0x6d, 0x82, 0xf7, 0x46, 0xde, 0x39, 0x39, 0x9a,
+  0x09, 0x53, 0xfe, 0xe7, 0x57, 0x05, 0x7b, 0x94,
+  0xd1, 0x31, 0xca, 0xbe, 0x3e, 0x26, 0x0e, 0x4f,
+  0xc9, 0x4d, 0xd7, 0xcb, 0x1d, 0x3f, 0xff, 0xfc,
+  0xea, 0x5b, 0x34, 0x0d, 0x2d, 0x8b, 0x94, 0xdd,
+  0x8f, 0xba, 0x9e, 0xff, 0x8e, 0x9e, 0x5e, 0xe5,
+  0x34, 0x56, 0x33, 0xfe, 0x6f, 0xcb, 0xff, 0x34,
+  0x4f, 0xdc, 0xe8, 0xd6, 0x98, 0xdb, 0xe5, 0xc3,
+  0x08, 0x1b, 0x95, 0xcf, 0xfe, 0x4f, 0xdf, 0x5e,
+  0x89, 0xfc, 0x54, 0x13, 0xa7, 0xfd, 0x9b, 0x5b,
+  0x28, 0xfb, 0x92, 0xc7, 0x4f, 0xff, 0xfd, 0xfd,
+  0x1e, 0xc5, 0xdd, 0xfd, 0x35, 0x37, 0x63, 0xee,
+  0xcd, 0x3e, 0x0a, 0x1d, 0x3f, 0xb5, 0x43, 0xcd,
+  0x39, 0xb8, 0x2f, 0x1d, 0x3a, 0xde, 0xae, 0x27,
+  0x16, 0xa8, 0xb6, 0x49, 0xb9, 0xfb, 0x7b, 0xf4,
+  0xda, 0x34, 0x74, 0xfb, 0xbe, 0xf6, 0x94, 0x3a,
+  0x3e, 0x78, 0x34, 0x18, 0x9f, 0x06, 0x94, 0x40,
+  0x1d, 0x3e, 0x47, 0x03, 0x47, 0x1d, 0x39, 0x3e,
+  0xe3, 0xa1, 0xa3, 0xc3, 0xb9, 0x44, 0xfc, 0x8c,
+  0xcf, 0xfb, 0x59, 0xd2, 0xa1, 0xd1, 0xe3, 0x7d,
+  0xc5, 0xd3, 0x01, 0x0a, 0x98, 0x21, 0x2a, 0x3c,
+  0x6a, 0xc2, 0x2b, 0x3f, 0xb9, 0xdf, 0xcb, 0xdb,
+  0xc5, 0x54, 0xd0, 0xcf, 0x6d, 0xcf, 0xd0, 0xe9,
+  0xc9, 0xf6, 0x8e, 0x9b, 0xe8, 0x74, 0x34, 0x6c,
+  0x44, 0x72, 0x78, 0x41, 0x9a, 0x87, 0x4e, 0xde,
+  0x3a, 0xce, 0x84, 0x45, 0xbe, 0x2a, 0x78, 0x86,
+  0xc4, 0x73, 0x5a, 0xe7, 0x4e, 0x08, 0x42, 0x54,
+  0xff, 0xd8, 0xbb, 0x23, 0xdb, 0xf2, 0xdc, 0xf9,
+  0x55, 0x2f, 0x24, 0x27, 0x4f, 0x99, 0xeb, 0x83,
+  0x8e, 0x8d, 0x59, 0xb6, 0xd0, 0x3e, 0x7f, 0x2f,
+  0xa9, 0xfc, 0x6d, 0xc7, 0x4d, 0x97, 0x3a, 0x1f,
+  0x3c, 0x8b, 0x19, 0xcf, 0xff, 0x5f, 0xd4, 0xb6,
+  0x6d, 0xfc, 0x6d, 0xfc, 0xa1, 0xd2, 0xaa, 0x2e,
+  0x16, 0xec, 0x45, 0x8d, 0x42, 0xc2, 0xc6, 0xcb,
+  0x43, 0xe7, 0x8e, 0xfe, 0x65, 0x48, 0x45, 0xdd,
+  0xbb, 0x79, 0x1c, 0xf8, 0x57, 0xb9, 0x4d, 0x15,
+  0xbc, 0xff, 0xb9, 0xd5, 0xc1, 0x5e, 0xe5, 0x34,
+  0x4e, 0x12, 0xae, 0x1f, 0xb3, 0x0c, 0x27, 0xc2,
+  0xbd, 0xca, 0x68, 0xb4, 0x67, 0xb1, 0xaf, 0x6b,
+  0x3a, 0x55, 0xc3, 0xd4, 0xb1, 0x84, 0xf2, 0xf7,
+  0x29, 0xa2, 0xda, 0x9f, 0xac, 0x8c, 0x4f, 0x6c,
+  0x74, 0xd5, 0xc1, 0x3d, 0x8b, 0x95, 0xcf, 0xea,
+  0xe0, 0xaf, 0x72, 0x9a, 0x2e, 0x59, 0xfd, 0x5c,
+  0x15, 0xee, 0x53, 0x45, 0xdb, 0x08, 0xcc, 0xed,
+  0x78, 0xa1, 0xd1, 0xd0, 0x6d, 0x0c, 0xfd, 0x72,
+  0xb3, 0xbd, 0x39, 0x99, 0xab, 0x8c, 0x82, 0xcf,
+  0x7f, 0x7f, 0xa1, 0x65, 0xce, 0xe7, 0xf5, 0x70,
+  0x57, 0xb9, 0x4d, 0x15, 0x3c, 0xf2, 0xf7, 0x29,
+  0xa2, 0xb9, 0x9f, 0xd5, 0xc1, 0x5e, 0xe5, 0x34,
+  0x59, 0xd0, 0x27, 0xcd, 0x62, 0xb9, 0xf0, 0xaf,
+  0x72, 0x9a, 0x24, 0x29, 0xfe, 0xf3, 0xf4, 0xbf,
+  0xd1, 0x94, 0x3a, 0x67, 0x57, 0x0f, 0xa8, 0x06,
+  0x13, 0xcd, 0xd2, 0xc8, 0xc3, 0xa7, 0xf6, 0x5a,
+  0x94, 0xc1, 0x78, 0xe9, 0x57, 0x13, 0x11, 0xe8,
+  0x45, 0xd0, 0xb6, 0xe4, 0xf3, 0xff, 0xaa, 0xce,
+  0x75, 0x70, 0x57, 0xb9, 0x4d, 0x13, 0xe4, 0x2a,
+  0xa4, 0xbd, 0x5c, 0x76, 0x56, 0x47, 0x9f, 0x0a,
+  0xf7, 0x29, 0xa2, 0xb2, 0x9f, 0xf7, 0x3a, 0xb8,
+  0x2b, 0xdc, 0xa6, 0x89, 0xba, 0x6f, 0x57, 0x0f,
+  0xd9, 0x86, 0x13, 0xe1, 0x5e, 0xe5, 0x34, 0x4a,
+  0xd3, 0xfd, 0xae, 0xde, 0xdd, 0xa2, 0xe5, 0x0e,
+  0x9f, 0x55, 0x9c, 0xea, 0xe1, 0xf6, 0xf1, 0x84,
+  0xf8, 0x57, 0xb9, 0x4d, 0x12, 0xe4, 0xf3, 0x6f,
+  0x7d, 0x0e, 0x9f, 0x55, 0x9c, 0xea, 0xe1, 0xe9,
+  0xf1, 0x84, 0xff, 0xd5, 0xe7, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x1d, 0xcf, 0xf5, 0xed, 0x8e, 0xaf,
+  0x7e, 0x87, 0x4f, 0xcd, 0xcf, 0xa2, 0xe7, 0xce,
+  0x9f, 0xb5, 0x5f, 0xe5, 0xba, 0xe7, 0x4f, 0x85,
+  0x7b, 0x94, 0xd1, 0x50, 0xcf, 0xb2, 0xd7, 0xc7,
+  0x8e, 0x95, 0x75, 0x54, 0x5b, 0xb7, 0x0b, 0xf0,
+  0xc6, 0xe6, 0x13, 0xe1, 0x5e, 0xe5, 0x34, 0x55,
+  0x13, 0xfe, 0xe7, 0x57, 0x05, 0x7b, 0x94, 0xd1,
+  0x35, 0xca, 0xb8, 0x7e, 0xcc, 0x30, 0x9f, 0xd5,
+  0xc1, 0x5e, 0xe5, 0x34, 0x55, 0x93, 0xff, 0x57,
+  0x9d, 0x5c, 0x15, 0xee, 0x53, 0x44, 0x89, 0x3e,
+  0x15, 0xee, 0x53, 0x45, 0xa5, 0x3f, 0xee, 0x75,
+  0x70, 0x57, 0xb9, 0x4d, 0x13, 0xec, 0xab, 0x87,
+  0xec, 0xc3, 0x09, 0xff, 0xd5, 0x67, 0x3a, 0xb8,
+  0x2b, 0xdc, 0xa6, 0x8a, 0x12, 0x7d, 0x6f, 0x3c,
+  0x82, 0x74, 0xf8, 0x57, 0xb9, 0x4d, 0x14, 0x7c,
+  0xff, 0xfd, 0x9b, 0x59, 0x37, 0xd6, 0xff, 0xe0,
+  0x52, 0x88, 0x02, 0xa7, 0xd5, 0x67, 0x3a, 0xa8,
+  0x8b, 0x4c, 0x27, 0x6f, 0x30, 0x84, 0x5d, 0x68,
+  0x7a, 0x12, 0x0e, 0x3d, 0xc4, 0xcd, 0x70, 0xef,
+  0x58, 0x60, 0xbe, 0x4e, 0xd1, 0xdd, 0xa1, 0x84,
+  0x02, 0x7b, 0xc6, 0x0d, 0x3f, 0xab, 0x82, 0xbd,
+  0xca, 0x68, 0x88, 0xa7, 0xec, 0x15, 0xee, 0x53,
+  0x44, 0x57, 0x3f, 0xda, 0xba, 0xe0, 0xaf, 0x72,
+  0x9a, 0x2b, 0x88, 0xa9, 0xfd, 0x71, 0xac, 0xf6,
+  0x5b, 0xae, 0x74, 0xfe, 0xcf, 0x08, 0x01, 0xa5,
+  0x0e, 0x96, 0xab, 0xf3, 0xd3, 0xa1, 0x04, 0xff,
+  0xdd, 0xe7, 0x7b, 0xf7, 0xd2, 0xc3, 0x87, 0x4f,
+  0xb3, 0xdb, 0x0e, 0x1d, 0x3a, 0xf4, 0xf5, 0x8f,
+  0xaa, 0xe8, 0x93, 0xe1, 0x5e, 0xe5, 0x34, 0x53,
+  0xd0, 0xdc, 0x47, 0xda, 0x42, 0x5f, 0x0d, 0x27,
+  0xff, 0x73, 0xab, 0xb7, 0xf8, 0x34, 0xa2, 0x00,
+  0xe8, 0xaa, 0x20, 0x76, 0x37, 0x9d, 0x5d, 0xb0,
+  0xe9, 0xf2, 0x38, 0x1a, 0x38, 0xe9, 0xe5, 0xee,
+  0x53, 0x45, 0x67, 0x0d, 0x1e, 0x98, 0x94, 0x4f,
+  0xcf, 0x31, 0x3e, 0xea, 0x1d, 0x39, 0x1e, 0xf1,
+  0xd3, 0xeb, 0x83, 0x7f, 0xdc, 0x74, 0xfb, 0x1a,
+  0x7b, 0x40, 0x1d, 0x2a, 0xe2, 0x30, 0x04, 0x8a,
+  0xc5, 0xdc, 0x39, 0xbc, 0xaa, 0x7f, 0xea, 0xf3,
+  0xab, 0x82, 0xbd, 0xca, 0x68, 0x91, 0x67, 0xf5,
+  0x70, 0x57, 0xb9, 0x4d, 0x16, 0x4c, 0xfe, 0xae,
+  0x0a, 0xf7, 0x29, 0xa2, 0xd8, 0x9d, 0x94, 0xc3,
+  0xa7, 0xc2, 0xbd, 0xca, 0x68, 0xb6, 0xe5, 0x57,
+  0x1e, 0x56, 0x0d, 0x4f, 0xf9, 0xb8, 0xdc, 0xd5,
+  0x2b, 0xdb, 0x3e, 0x80, 0x3a, 0x7e, 0x4f, 0xbb,
+  0x6d, 0x18, 0x74, 0xf8, 0x57, 0xb9, 0x4d, 0x17,
+  0x84, 0xf5, 0xdb, 0xf2, 0xc7, 0x4f, 0xb3, 0xe0,
+  0xd4, 0x43, 0xa7, 0xc9, 0xbf, 0x4e, 0xa1, 0xd3,
+  0xae, 0x80, 0x3a, 0x55, 0xd5, 0x35, 0x33, 0xd7,
+  0x93, 0x70, 0xbd, 0xf3, 0x00, 0x12, 0x7c, 0xa6,
+  0xe5, 0x33, 0xbd, 0x8f, 0x9d, 0x3e, 0x15, 0xee,
+  0x53, 0x45, 0xe9, 0x3f, 0xef, 0xf5, 0xdc, 0x9a,
+  0xef, 0xe7, 0x8e, 0x9f, 0x63, 0x2d, 0xdb, 0x1d,
+  0x2a, 0xec, 0x8b, 0x4c, 0x1c, 0xde, 0x61, 0xa8,
+  0x83, 0x08, 0xc8, 0x28, 0x7a, 0x16, 0xb9, 0x1f,
+  0x82, 0x92, 0x7a, 0x32, 0xf1, 0x4f, 0x62, 0x60,
+  0x0e, 0xff, 0x08, 0x5d, 0x23, 0x64, 0x0c, 0x65,
+  0x33, 0xd9, 0x6e, 0xb9, 0xd3, 0xfb, 0x3c, 0x20,
+  0x06, 0x94, 0x3a, 0x5a, 0xaf, 0xcf, 0x4e, 0x84,
+  0x13, 0xe1, 0x5e, 0xe5, 0x34, 0x44, 0x73, 0xff,
+  0xd6, 0xd2, 0x94, 0xc6, 0x7f, 0x1b, 0x6e, 0x46,
+  0xea, 0x74, 0xff, 0x9c, 0x8f, 0x0e, 0x5e, 0xfe,
+  0xb9, 0xd3, 0xff, 0xfc, 0x96, 0xef, 0x5d, 0x2d,
+  0xfc, 0xbd, 0xbd, 0x6c, 0xf0, 0x4e, 0x99, 0xe6,
+  0x15, 0x30, 0x42, 0x54, 0xff, 0xce, 0xaa, 0xdb,
+  0xcd, 0x59, 0x1e, 0xa8, 0x0d, 0x68, 0x45, 0xe7,
+  0xf6, 0x6a, 0xff, 0x96, 0xeb, 0x9d, 0x3f, 0xff,
+  0x2d, 0x47, 0xbf, 0xeb, 0xd4, 0x52, 0xff, 0xe0,
+  0x1d, 0x0d, 0xc5, 0x4e, 0x38, 0x5a, 0xa6, 0x0f,
+  0xad, 0x09, 0xf7, 0x42, 0x4a, 0xeb, 0xad, 0x8d,
+  0x67, 0xc2, 0xbd, 0xca, 0x68, 0x8b, 0xa7, 0xd7,
+  0x06, 0xff, 0xb8, 0xb6, 0x7b, 0x4a, 0xb8, 0x7c,
+  0xfc, 0x61, 0x15, 0x4c, 0x21, 0xd0, 0xe2, 0x9f,
+  0xf9, 0x9c, 0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x26,
+  0x69, 0xcf, 0xa5, 0x0e, 0x9c, 0xbe, 0x61, 0xd3,
+  0xe5, 0xeb, 0x79, 0xa3, 0xa7, 0xfe, 0xd4, 0xf5,
+  0xfc, 0xbe, 0xda, 0xf8, 0xa7, 0x4f, 0xff, 0xf6,
+  0x9d, 0xf5, 0xfe, 0x6d, 0x6d, 0x37, 0x59, 0x1c,
+  0x28, 0xf1, 0xd1, 0x88, 0xb1, 0xb2, 0x3c, 0xff,
+  0xfb, 0x6f, 0x7d, 0xec, 0xa7, 0xba, 0xd5, 0x08,
+  0x42, 0x54, 0xf2, 0xf7, 0x29, 0xa2, 0xcf, 0x9f,
+  0xfe, 0xf0, 0xdb, 0xb7, 0x63, 0x6f, 0xe5, 0x33,
+  0xe7, 0x4e, 0x08, 0x42, 0x54, 0xff, 0xb9, 0xd4,
+  0xfe, 0x2e, 0xd8, 0x25, 0x54, 0xbc, 0x9f, 0xe4,
+  0xb7, 0xb6, 0xff, 0x73, 0x47, 0x4f, 0xf7, 0xbf,
+  0xb6, 0xfd, 0xb4, 0xbd, 0x0e, 0x85, 0x4e, 0xcc,
+  0x56, 0x2c, 0x56, 0x06, 0xdb, 0xa5, 0xb6, 0x39,
+  0x9f, 0xff, 0xff, 0xb3, 0x01, 0x4c, 0xcf, 0xeb,
+  0xde, 0x3f, 0x4c, 0xb5, 0x69, 0xfc, 0x79, 0x98,
+  0xc3, 0xa7, 0x51, 0x1e, 0x3a, 0x73, 0x7e, 0x58,
+  0xe8, 0x72, 0x31, 0x29, 0x08, 0xab, 0x8e, 0x4f,
+  0x3e, 0x0d, 0x14, 0xe9, 0xf5, 0xbe, 0x98, 0x26,
+  0x4f, 0xfb, 0xc2, 0xec, 0x17, 0xb4, 0xed, 0x8d,
+  0x10, 0x6d, 0x4d, 0x2c, 0xfb, 0x97, 0xcc, 0x43,
+  0xa7, 0xe7, 0x5b, 0xfc, 0xfd, 0xce, 0x96, 0x29,
+  0xe9, 0xfc, 0x96, 0x7f, 0xff, 0xdc, 0x1b, 0xe5,
+  0xae, 0x99, 0xf7, 0xef, 0x83, 0xe7, 0xb9, 0x87,
+  0x43, 0x93, 0x40, 0xc8, 0x57, 0xfc, 0x9a, 0x7e,
+  0x1c, 0xda, 0x96, 0x43, 0xa7, 0xff, 0xf6, 0x9f,
+  0xed, 0x7b, 0xb7, 0xff, 0xaf, 0x4f, 0x3f, 0x6f,
+  0x04, 0xe9, 0xff, 0xfe, 0xa5, 0x10, 0x6e, 0x95,
+  0x66, 0x5e, 0x9b, 0xe9, 0xce, 0xc3, 0xa7, 0xad,
+  0x9e, 0x6c, 0x74, 0x79, 0x11, 0x36, 0x66, 0x99,
+  0x9a, 0xa9, 0xa2, 0xfc, 0x9f, 0xf9, 0xd7, 0xd1,
+  0xce, 0x65, 0xee, 0x8c, 0x3a, 0x7f, 0xef, 0x67,
+  0xf3, 0x29, 0xb9, 0xd4, 0x61, 0xd0, 0xfa, 0x22,
+  0xe8, 0x8d, 0x3d, 0xff, 0xa2, 0x9d, 0x08, 0x98,
+  0xd6, 0xc4, 0x79, 0x0b, 0x3e, 0x24, 0x9f, 0xff,
+  0xfb, 0x51, 0x2d, 0xe6, 0x55, 0xa7, 0x70, 0xef,
+  0xb7, 0x9f, 0xa2, 0xf9, 0xe3, 0xa7, 0xda, 0x65,
+  0x3d, 0xf3, 0xa7, 0xc9, 0xbf, 0x4e, 0xa1, 0xd3,
+  0x37, 0x6c, 0x3a, 0x7f, 0xff, 0xd6, 0xf3, 0xf7,
+  0xc7, 0xee, 0x22, 0x97, 0x06, 0xff, 0xba, 0xd8,
+  0x74, 0xe0, 0x84, 0x25, 0x4f, 0x6d, 0xb7, 0x7c,
+  0xaa, 0x97, 0x90, 0x88, 0xd8, 0x51, 0xbf, 0x42,
+  0x2e, 0x7f, 0xec, 0xfb, 0xf7, 0xc1, 0xf3, 0xdc,
+  0xc3, 0xa7, 0xd9, 0x77, 0x32, 0xc7, 0x42, 0x1f,
+  0x5d, 0x11, 0x26, 0x05, 0x8e, 0x9f, 0x9e, 0x69,
+  0xcd, 0xc1, 0x78, 0xe9, 0xfd, 0xae, 0xd9, 0x7b,
+  0x7a, 0xe7, 0x4d, 0xe1, 0x3a, 0x35, 0x41, 0xff,
+  0x78, 0xd2, 0xc6, 0xb3, 0xff, 0xb6, 0xd9, 0x36,
+  0x14, 0xbf, 0x97, 0xdb, 0x1d, 0x2a, 0xb7, 0x46,
+  0x5f, 0x1e, 0xa9, 0x0e, 0x3c, 0x37, 0xb4, 0x36,
+  0x32, 0x3d, 0x57, 0xe3, 0x1c, 0xf1, 0xab, 0x51,
+  0xc4, 0x09, 0xab, 0x0b, 0x2d, 0x28, 0x37, 0x90,
+  0x40, 0xf5, 0xf2, 0x8a, 0x46, 0x03, 0x78, 0x4f,
+  0x04, 0x85, 0xbe, 0x12, 0x9b, 0xcd, 0x62, 0xac,
+  0xd7, 0xab, 0x53, 0x0b, 0xe7, 0xff, 0x55, 0x9c,
+  0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x26, 0xc9, 0xfd,
+  0x5c, 0x15, 0xee, 0x53, 0x45, 0x5b, 0x3f, 0x9c,
+  0xed, 0x2f, 0xf4, 0x71, 0xd3, 0xd9, 0x6e, 0xb9,
+  0xd2, 0xd5, 0x70, 0xf5, 0x3e, 0x69, 0x3e, 0x15,
+  0xee, 0x53, 0x45, 0x69, 0x3f, 0xfc, 0xa8, 0x38,
+  0x0e, 0x67, 0x39, 0x3c, 0xa7, 0x4f, 0xff, 0x3a,
+  0x99, 0xf4, 0x67, 0x65, 0xee, 0x8c, 0x3a, 0x6b,
+  0xdd, 0x11, 0x2f, 0xc9, 0x53, 0xf9, 0x1b, 0x6f,
+  0xbf, 0xd0, 0x07, 0x4f, 0xcf, 0x65, 0xbd, 0x8c,
+  0x3a, 0x7f, 0xb3, 0x53, 0xe8, 0x17, 0xdd, 0x43,
+  0xa7, 0xf3, 0xb2, 0xfd, 0xf0, 0x68, 0x74, 0xaa,
+  0xdc, 0x4f, 0xcb, 0x0b, 0x3d, 0x0c, 0x7b, 0x16,
+  0xf1, 0xb7, 0xcb, 0x6e, 0x79, 0x3f, 0xab, 0x82,
+  0xbd, 0xca, 0x68, 0xb0, 0x27, 0xc2, 0xbd, 0xca,
+  0x68, 0x9d, 0x67, 0xff, 0xf5, 0x91, 0xed, 0xb1,
+  0x95, 0xa5, 0x32, 0xde, 0xa6, 0x8f, 0x1d, 0x3e,
+  0xab, 0x39, 0xd5, 0xc4, 0x4a, 0xb4, 0x61, 0x3e,
+  0x15, 0xee, 0x53, 0x45, 0xb3, 0x3f, 0xe0, 0x25,
+  0x2b, 0x6f, 0x2f, 0x09, 0xd2, 0xae, 0x1f, 0x67,
+  0x18, 0x4f, 0x2f, 0x72, 0x9a, 0x2e, 0x69, 0x30,
+  0xe9, 0xab, 0x82, 0x6e, 0xc2, 0x57, 0x3f, 0xab,
+  0x82, 0xbd, 0xca, 0x68, 0xbb, 0xe7, 0xab, 0xaf,
+  0x60, 0x1d, 0x08, 0xd9, 0xc0, 0x65, 0x36, 0x8d,
+  0x4c, 0x1f, 0x52, 0xf4, 0xa8, 0x11, 0x72, 0x64,
+  0x34, 0x01, 0x0a, 0xca, 0x30, 0xdc, 0xaf, 0x79,
+  0xdc, 0xfe, 0xfb, 0xd9, 0xa9, 0x74, 0xd6, 0x74,
+  0xf8, 0x57, 0xb9, 0x4d, 0x12, 0xbc, 0xf6, 0x9c,
+  0x2e, 0x3a, 0x7f, 0xff, 0x7a, 0xfc, 0xce, 0xf8,
+  0x2c, 0x1e, 0xfb, 0xcb, 0xe7, 0x8e, 0x95, 0xb6,
+  0x44, 0x1f, 0x10, 0xce, 0xe7, 0x55, 0x13, 0x14,
+  0xc3, 0x8a, 0x42, 0xce, 0x75, 0xd3, 0x62, 0xa7,
+  0xff, 0x5b, 0xbd, 0x74, 0x77, 0x85, 0xed, 0x00,
+  0x54, 0xfe, 0xe5, 0xae, 0xc2, 0xdd, 0xd5, 0x0f,
+  0x9e, 0x83, 0x92, 0xab, 0x11, 0xf4, 0xda, 0x15,
+  0x93, 0xff, 0xaa, 0xce, 0x75, 0x70, 0x57, 0xb9,
+  0x4d, 0x13, 0x0c, 0xff, 0xfd, 0x95, 0xde, 0x3c,
+  0x0a, 0xeb, 0xbb, 0x82, 0x94, 0x71, 0xd3, 0xff,
+  0x6a, 0xb8, 0xfb, 0xb4, 0xeb, 0xfd, 0x1c, 0x74,
+  0xff, 0x7d, 0x39, 0xeb, 0xeb, 0xe1, 0x3a, 0x7e,
+  0x62, 0x67, 0xee, 0xde, 0x74, 0xf9, 0x33, 0xf7,
+  0x6f, 0x3a, 0x7e, 0xb7, 0xaf, 0x4e, 0x7f, 0x71,
+  0xec, 0x30, 0xbe, 0x7f, 0xff, 0xdf, 0xc0, 0xea,
+  0x5f, 0x2d, 0xbb, 0xf8, 0xf7, 0xb3, 0xef, 0xba,
+  0x87, 0x4f, 0xcd, 0xb7, 0xdf, 0xe8, 0x03, 0xa7,
+  0xff, 0x25, 0xc0, 0x8e, 0xc7, 0xee, 0xf6, 0x81,
+  0x3a, 0x10, 0xff, 0x7c, 0x63, 0x3f, 0x53, 0xda,
+  0xd9, 0xd7, 0x3a, 0x7f, 0xff, 0xc3, 0x8d, 0x93,
+  0xf7, 0xdd, 0xbf, 0xe9, 0x6e, 0xf5, 0xd2, 0xf4,
+  0x3a, 0x58, 0xfa, 0x27, 0xc4, 0xbe, 0x7b, 0xb7,
+  0xed, 0x87, 0x4a, 0xad, 0xc5, 0x63, 0xdb, 0x25,
+  0x2c, 0x24, 0x5a, 0x48, 0xb4, 0x3c, 0x3f, 0x0c,
+  0x0d, 0x0a, 0x27, 0xc2, 0xbd, 0xca, 0x68, 0xab,
+  0xa7, 0xf9, 0xd5, 0xc1, 0x5e, 0xe5, 0x34, 0x47,
+  0x92, 0xae, 0x1f, 0x8f, 0x18, 0x4f, 0xea, 0xe0,
+  0xaf, 0x72, 0x9a, 0x2c, 0x19, 0xfd, 0x5c, 0x15,
+  0xee, 0x53, 0x45, 0x95, 0x3f, 0xab, 0x82, 0xbd,
+  0xca, 0x68, 0xb4, 0xe7, 0x97, 0xb9, 0x4d, 0x16,
+  0xe4, 0xff, 0xc9, 0x83, 0x9f, 0xdd, 0x6c, 0x7c,
+  0x27, 0x40, 0x9f, 0x7d, 0x0a, 0xe7, 0xfd, 0xce,
+  0xae, 0x0a, 0xf7, 0x29, 0xa2, 0x87, 0x9f, 0xbe,
+  0xdc, 0xc1, 0x4a, 0x1d, 0x3f, 0xff, 0x66, 0xd6,
+  0x4d, 0xf5, 0xbf, 0xf8, 0x14, 0xa2, 0x00, 0xa9,
+  0x57, 0x11, 0xe6, 0xc2, 0x1d, 0x11, 0x9b, 0xcb,
+  0xe7, 0xf5, 0x70, 0x57, 0xb9, 0x4d, 0x17, 0x9c,
+  0x22, 0xfd, 0x53, 0x8c, 0x36, 0x52, 0xc9, 0x6f,
+  0x8f, 0xc3, 0xc8, 0x49, 0x98, 0x77, 0x63, 0xbf,
+  0xc7, 0x3a, 0xd9, 0x1a, 0x7f, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x4b, 0x4f, 0xea, 0xe0, 0xaf, 0x72,
+  0x9a, 0x2c, 0x29, 0xfd, 0x5c, 0x15, 0xee, 0x53,
+  0x45, 0x97, 0x3f, 0xfa, 0xac, 0xe7, 0x57, 0x05,
+  0x7b, 0x94, 0xd1, 0x46, 0x4f, 0xea, 0xa3, 0x64,
+  0x14, 0x01, 0xd0, 0xe4, 0xcd, 0x44, 0xed, 0x87,
+  0x74, 0x3b, 0xba, 0x94, 0xff, 0xd5, 0xe7, 0x57,
+  0x05, 0x7b, 0x94, 0xd1, 0x1c, 0xcf, 0xfe, 0xab,
+  0x39, 0xd5, 0xc1, 0x5e, 0xe5, 0x34, 0x4e, 0x53,
+  0xfa, 0xb8, 0x2b, 0xdc, 0xa6, 0x8b, 0x32, 0x7f,
+  0x57, 0x05, 0x7b, 0x94, 0xd1, 0x6e, 0xcf, 0xfe,
+  0xab, 0x39, 0xd5, 0xc1, 0x5e, 0xe5, 0x34, 0x52,
+  0x13, 0xff, 0x57, 0x9d, 0x5c, 0x15, 0xee, 0x53,
+  0x44, 0xa5, 0x0f, 0x27, 0x64, 0xd2, 0x63, 0x14,
+  0xbe, 0x77, 0x73, 0xbd, 0x45, 0x29, 0xff, 0x73,
+  0xab, 0x82, 0xbd, 0xca, 0x68, 0x9d, 0xa7, 0xff,
+  0xde, 0xdb, 0x46, 0x26, 0xa7, 0x6d, 0xf4, 0xfe,
+  0x29, 0xd3, 0x32, 0xac, 0x44, 0xff, 0x23, 0x4f,
+  0x85, 0x7b, 0x94, 0xd1, 0x16, 0x4f, 0xfb, 0x9d,
+  0x5c, 0x15, 0xee, 0x53, 0x44, 0xbb, 0x3f, 0xff,
+  0x66, 0xd6, 0x4d, 0xf5, 0xbf, 0xf8, 0x14, 0xa2,
+  0x00, 0xa9, 0x57, 0x11, 0xa6, 0xc3, 0x06, 0xf4,
+  0x69, 0xff, 0xd5, 0x67, 0x3a, 0xb8, 0x2b, 0xdc,
+  0xa6, 0x89, 0x8a, 0x7f, 0x57, 0x05, 0x7b, 0x94,
+  0xd1, 0x54, 0xcf, 0xfe, 0xab, 0x39, 0xd5, 0xc1,
+  0x5e, 0xe5, 0x34, 0x4e, 0x93, 0xfb, 0xdc, 0x28,
+  0xee, 0x6c, 0x74, 0xf9, 0xa4, 0x69, 0x28, 0x74,
+  0xfc, 0x1c, 0xf3, 0x6c, 0xf9, 0xd3, 0xde, 0xb2,
+  0x57, 0xc7, 0xad, 0x42, 0x89, 0xff, 0xb4, 0xa5,
+  0xd1, 0xfa, 0xe8, 0xd7, 0x98, 0x74, 0x31, 0x10,
+  0x56, 0x39, 0x9f, 0xf7, 0x3a, 0xb8, 0x2b, 0xdc,
+  0xa6, 0x89, 0xde, 0x7d, 0x7d, 0x39, 0x9e, 0x2a,
+  0x55, 0xd9, 0x39, 0xbc, 0x8c, 0x29, 0x84, 0x7c,
+  0x8d, 0x3f, 0xfa, 0xac, 0xe7, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x42, 0xcf, 0xfe, 0xab, 0x39, 0xd5,
+  0xc1, 0x5e, 0xe5, 0x34, 0x52, 0x53, 0xff, 0xfb,
+  0x29, 0x5d, 0xf8, 0xd5, 0xb9, 0x97, 0xb2, 0x5f,
+  0x46, 0x1d, 0x0f, 0x2e, 0x01, 0xb8, 0xe1, 0x54,
+  0x84, 0xed, 0x91, 0xf6, 0x81, 0x27, 0x45, 0x26,
+  0xf5, 0x29, 0xfd, 0x5c, 0x15, 0xee, 0x53, 0x44,
+  0x49, 0x3f, 0xfa, 0xac, 0xe7, 0x57, 0x05, 0x7b,
+  0x94, 0xd1, 0x2f, 0x4f, 0x85, 0x7b, 0x94, 0xd1,
+  0x4b, 0xcf, 0xe4, 0xdb, 0x53, 0xcc, 0x4a, 0x1d,
+  0x2a, 0xe1, 0xf3, 0x5c, 0xc2, 0x7f, 0x57, 0x05,
+  0x7b, 0x94, 0xd1, 0x4e, 0x4f, 0xfb, 0xc3, 0xd4,
+  0xb6, 0x67, 0xd4, 0xe9, 0xff, 0x65, 0x90, 0x72,
+  0xa1, 0x08, 0x4a, 0x9b, 0xc1, 0x3a, 0x67, 0xab,
+  0xb2, 0x23, 0x5b, 0xce, 0xf5, 0x0f, 0x27, 0xc2,
+  0xbd, 0xca, 0x68, 0xaf, 0x27, 0xff, 0xec, 0xda,
+  0xc9, 0xbe, 0xb7, 0xff, 0x02, 0x94, 0x40, 0x15,
+  0x2a, 0xe2, 0x23, 0x5b, 0xcc, 0x27, 0xfe, 0xaf,
+  0x3a, 0xb8, 0x2b, 0xdc, 0xa6, 0x89, 0x1e, 0x77,
+  0x80, 0x87, 0x4e, 0x5c, 0x61, 0x55, 0x2e, 0xe7,
+  0xc2, 0xbd, 0xca, 0x68, 0x92, 0x27, 0xab, 0xce,
+  0xaa, 0x1e, 0xce, 0x14, 0xcf, 0xfd, 0x5e, 0x75,
+  0x70, 0x57, 0xb9, 0x4d, 0x12, 0x54, 0xf8, 0x57,
+  0xb9, 0x4d, 0x17, 0x8c, 0xfd, 0xa7, 0xdf, 0xe7,
+  0xe8, 0x74, 0xfa, 0x94, 0xbe, 0x29, 0xd3, 0xfc,
+  0xea, 0xe0, 0xaf, 0x72, 0x9a, 0x24, 0xd9, 0x57,
+  0x11, 0x8e, 0xf9, 0x80, 0x98, 0x71, 0x34, 0x22,
+  0xe9, 0x4b, 0xc7, 0x6e, 0x85, 0xc6, 0xc4, 0xfe,
+  0x86, 0x43, 0x50, 0xd1, 0x61, 0x5d, 0xa1, 0x81,
+  0x73, 0x7d, 0x23, 0x13, 0x84, 0x8d, 0x4e, 0xad,
+  0xe8, 0xeb, 0x9d, 0x1e, 0x4e, 0xd1, 0xed, 0x65,
+  0xb7, 0x61, 0xd7, 0x29, 0x59, 0x6b, 0xdb, 0x37,
+  0xe7, 0x9e, 0xfd, 0x39, 0x89, 0xab, 0x8e, 0xc1,
+  0xaa, 0x5a, 0xb0, 0xcf, 0xf1, 0xb2, 0xff, 0x78,
+  0x2d, 0x3b, 0x4d, 0xd4, 0xe0, 0x90, 0x4b, 0x0e,
+  0x6e, 0xe1, 0x63, 0xf9, 0xe0, 0x2a, 0x52, 0x37,
+  0xef, 0x5c, 0x04, 0x69, 0x4a, 0x6e, 0x6d, 0x1e,
+  0xb0, 0x63, 0xfc, 0x6f, 0x87, 0xe6, 0xf9, 0xd0,
+  0x4d, 0x49, 0xda, 0x68,
 };
 
-static const unsigned kPreloadedHSTSBits = 86044;
+static const unsigned kPreloadedHSTSBits = 88863;
 
-static const unsigned kHSTSRootPosition = 85472;
+static const unsigned kHSTSRootPosition = 88291;
 
 #endif // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index 282cd58..6a8d5e3 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -1347,7 +1347,41 @@
     { "name": "zh.search.yahoo.com", "include_subdomains": false, "mode": "force-https" },
     { "name": "login.yahoo.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "mail.yahoo.com", "include_subdomains": false, "mode": "force-https" },
-    { "name": "edit.yahoo.com", "include_subdomains": true, "mode": "force-https" }
+    { "name": "edit.yahoo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ahoyconference.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "balcan-underground.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "baldwinkoo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bigbrownpromotions.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bodo-wolff.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "calibreapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "call.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chrisjean.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cujanovic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deadbeef.ninja", "include_subdomains": true, "mode": "force-https" },
+    { "name": "esec.rs", "include_subdomains": true, "mode": "force-https" },
+    { "name": "floobits.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freenetproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fundingempire.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "heid.ws", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ironfistdesign.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kinogb.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ljs.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lovelycorral.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "megashur.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "minnesotadata.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mountainmusicpromotions.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "newstarnootropics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onedot.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "powerplannerapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ru-sprachstudio.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "segu-info.com.ar", "include_subdomains": true, "mode": "force-https" },
+    { "name": "slattery.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "slidebatch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smartship.co.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "southside-crew.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tickopa.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wieninternational.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fleximus.org", "include_subdomains": true, "mode": "force-https" }
   ],
 
   // |ReportUMAOnPinFailure| uses these to report which domain was associated
diff --git a/net/proxy/proxy_config_service_win.cc b/net/proxy/proxy_config_service_win.cc
index 32553db..dba1d9b 100644
--- a/net/proxy/proxy_config_service_win.cc
+++ b/net/proxy/proxy_config_service_win.cc
@@ -7,6 +7,8 @@
 #include <windows.h>
 #include <winhttp.h>
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/profiler/scoped_profile.h"
@@ -16,6 +18,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/win/registry.h"
+#include "base/win/scoped_handle.h"
 #include "net/base/net_errors.h"
 #include "net/proxy/proxy_config.h"
 
@@ -38,36 +41,6 @@
 
 }  // namespace
 
-// RegKey and ObjectWatcher pair.
-class ProxyConfigServiceWin::KeyEntry {
- public:
-  bool StartWatching(base::win::ObjectWatcher::Delegate* delegate) {
-    // Try to create a watch event for the registry key (which watches the
-    // sibling tree as well).
-    if (key_.StartWatching() != ERROR_SUCCESS)
-      return false;
-
-    // Now setup an ObjectWatcher for this event, so we get OnObjectSignaled()
-    // invoked on this message loop once it is signalled.
-    if (!watcher_.StartWatching(key_.watch_event(), delegate))
-      return false;
-
-    return true;
-  }
-
-  bool CreateRegKey(HKEY rootkey, const wchar_t* subkey) {
-    return key_.Create(rootkey, subkey, KEY_NOTIFY) == ERROR_SUCCESS;
-  }
-
-  HANDLE watch_event() const {
-    return key_.watch_event();
-  }
-
- private:
-  base::win::RegKey key_;
-  base::win::ObjectWatcher watcher_;
-};
-
 ProxyConfigServiceWin::ProxyConfigServiceWin()
     : PollingProxyConfigService(
           base::TimeDelta::FromSeconds(kPollIntervalSec),
@@ -125,35 +98,38 @@
 
 bool ProxyConfigServiceWin::AddKeyToWatchList(HKEY rootkey,
                                               const wchar_t* subkey) {
-  scoped_ptr<KeyEntry> entry(new KeyEntry);
-  if (!entry->CreateRegKey(rootkey, subkey))
+  scoped_ptr<base::win::RegKey> key(new base::win::RegKey);
+  if (key->Create(rootkey, subkey, KEY_NOTIFY) != ERROR_SUCCESS)
     return false;
 
-  if (!entry->StartWatching(this))
+  if (!key->StartWatching(base::Bind(&ProxyConfigServiceWin::OnObjectSignaled,
+                                     base::Unretained(this),
+                                     base::Unretained(key.get())))) {
     return false;
+  }
 
-  keys_to_watch_.push_back(entry.release());
+  keys_to_watch_.push_back(key.release());
   return true;
 }
 
-void ProxyConfigServiceWin::OnObjectSignaled(HANDLE object) {
+void ProxyConfigServiceWin::OnObjectSignaled(base::win::RegKey* key) {
   // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed.
   tracked_objects::ScopedProfile tracking_profile(
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
           "ProxyConfigServiceWin_OnObjectSignaled"));
 
   // Figure out which registry key signalled this change.
-  KeyEntryList::iterator it;
-  for (it = keys_to_watch_.begin(); it != keys_to_watch_.end(); ++it) {
-    if ((*it)->watch_event() == object)
-      break;
-  }
-
+  RegKeyList::iterator it =
+      std::find(keys_to_watch_.begin(), keys_to_watch_.end(), key);
   DCHECK(it != keys_to_watch_.end());
 
   // Keep watching the registry key.
-  if (!(*it)->StartWatching(this))
+  if (!key->StartWatching(base::Bind(&ProxyConfigServiceWin::OnObjectSignaled,
+                                     base::Unretained(this),
+                                     base::Unretained(key)))) {
+    delete *it;
     keys_to_watch_.erase(it);
+  }
 
   // Have the PollingProxyConfigService test for changes.
   CheckForChangesNow();
diff --git a/net/proxy/proxy_config_service_win.h b/net/proxy/proxy_config_service_win.h
index 62f1f12..52c3895 100644
--- a/net/proxy/proxy_config_service_win.h
+++ b/net/proxy/proxy_config_service_win.h
@@ -12,9 +12,14 @@
 
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
-#include "base/win/object_watcher.h"
 #include "net/proxy/polling_proxy_config_service.h"
 
+namespace base {
+namespace win {
+class RegKey;
+}
+}  // namespace base.
+
 namespace net {
 
 // Implementation of ProxyConfigService that retrieves the system proxy
@@ -40,8 +45,7 @@
 // change, or in case we got it wrong (and are not checking all possible
 // registry dependencies).
 class NET_EXPORT_PRIVATE ProxyConfigServiceWin
-    : public PollingProxyConfigService,
-      public base::win::ObjectWatcher::Delegate {
+    : public PollingProxyConfigService {
  public:
   ProxyConfigServiceWin();
   virtual ~ProxyConfigServiceWin();
@@ -51,19 +55,17 @@
 
  private:
   FRIEND_TEST_ALL_PREFIXES(ProxyConfigServiceWinTest, SetFromIEConfig);
-  class KeyEntry;
-  typedef std::vector<KeyEntry*> KeyEntryList;
+  typedef std::vector<base::win::RegKey*> RegKeyList;
 
   // Registers change observers on the registry keys relating to proxy settings.
   void StartWatchingRegistryForChanges();
 
-  // Creates a new KeyEntry and appends it to |keys_to_watch_|. If the key
-  // fails to be created, it is not appended to the list and we return false.
+  // Creates a new key and appends it to |keys_to_watch_|. If the key fails to
+  // be created, it is not appended to the list and we return false.
   bool AddKeyToWatchList(HKEY rootkey, const wchar_t* subkey);
 
-  // ObjectWatcher::Delegate methods:
   // This is called whenever one of the registry keys we are watching change.
-  virtual void OnObjectSignaled(HANDLE object) override;
+  void OnObjectSignaled(base::win::RegKey* key);
 
   static void GetCurrentProxyConfig(ProxyConfig* config);
 
@@ -72,7 +74,7 @@
       ProxyConfig* config,
       const WINHTTP_CURRENT_USER_IE_PROXY_CONFIG& ie_config);
 
-  KeyEntryList keys_to_watch_;
+  RegKeyList keys_to_watch_;
 };
 
 }  // namespace net
diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc
index 92660d8..7366c16 100644
--- a/net/socket/ssl_client_socket_nss.cc
+++ b/net/socket/ssl_client_socket_nss.cc
@@ -1689,6 +1689,11 @@
 }
 
 int SSLClientSocketNSS::Core::DoHandshakeLoop(int last_io_result) {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "424386 SSLClientSocketNSS::Core::DoHandshakeLoop"));
+
   DCHECK(OnNSSTaskRunner());
 
   int rv = last_io_result;
@@ -1725,6 +1730,11 @@
 }
 
 int SSLClientSocketNSS::Core::DoReadLoop(int result) {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "424386 SSLClientSocketNSS::Core::DoReadLoop"));
+
   DCHECK(OnNSSTaskRunner());
   DCHECK(false_started_ || handshake_callback_called_);
   DCHECK_EQ(STATE_NONE, next_handshake_state_);
@@ -2195,6 +2205,11 @@
 // callback. For Read() and Write(), that's what we want. But for Connect(),
 // the caller expects OK (i.e. 0) for success.
 void SSLClientSocketNSS::Core::DoConnectCallback(int rv) {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "424386 SSLClientSocketNSS::Core::DoConnectCallback"));
+
   DCHECK(OnNSSTaskRunner());
   DCHECK_NE(rv, ERR_IO_PENDING);
   DCHECK(!user_connect_callback_.is_null());
@@ -2206,6 +2221,11 @@
 }
 
 void SSLClientSocketNSS::Core::DoReadCallback(int rv) {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "424386 SSLClientSocketNSS::Core::DoReadCallback"));
+
   DCHECK(OnNSSTaskRunner());
   DCHECK_NE(ERR_IO_PENDING, rv);
   DCHECK(!user_read_callback_.is_null());
@@ -2222,7 +2242,7 @@
       FROM_HERE,
       base::Bind(&Core::DidNSSRead, this, rv));
   // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed.
-  tracked_objects::ScopedProfile tracking_profile(
+  tracked_objects::ScopedProfile tracking_profile1(
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
           "SSLClientSocketNSS::Core::DoReadCallback"));
   PostOrRunCallback(
diff --git a/net/socket/ssl_session_cache_openssl.cc b/net/socket/ssl_session_cache_openssl.cc
index 8aaa9a0..65b5aaf 100644
--- a/net/socket/ssl_session_cache_openssl.cc
+++ b/net/socket/ssl_session_cache_openssl.cc
@@ -87,8 +87,9 @@
   // this one is just simple enough to do the job.
   size_t ComputeHash(const unsigned char* id, unsigned id_len) {
     size_t result = 0;
-    for (unsigned n = 0; n < id_len; ++n)
-      result += 131 * id[n];
+    for (unsigned n = 0; n < id_len; ++n) {
+      result = (result * 131) + id[n];
+    }
     return result;
   }
 };
diff --git a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
index 270b821..66a9bd9 100644
--- a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
+++ b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
@@ -72,6 +72,7 @@
     private final ServerThread mServerThread;
     private String mServerUri;
     private final boolean mSsl;
+    private final int mPort;
 
     private static class Response {
         final byte[] mResponseData;
@@ -100,10 +101,13 @@
 
     /**
      * Create and start a local HTTP server instance.
+     * @param port Port number the server must use, or 0 to automatically choose a free port.
      * @param ssl True if the server should be using secure sockets.
      * @throws Exception
      */
-    private TestWebServer(boolean ssl) throws Exception {
+    private TestWebServer(int port, boolean ssl) throws Exception {
+        mPort = port;
+
         mSsl = ssl;
         if (mSsl) {
             mServerUri = "https:";
@@ -117,32 +121,40 @@
             }
         }
 
-        mServerThread = new ServerThread(this, mSsl);
+        mServerThread = new ServerThread(this, mPort, mSsl);
         mServerUri += "//localhost:" + mServerThread.mSocket.getLocalPort();
     }
 
-    public static TestWebServer start() throws Exception {
+    public static TestWebServer start(int port) throws Exception {
         if (sInstance != null) {
             throw new IllegalStateException("Tried to start multiple TestWebServers");
         }
 
-        TestWebServer server = new TestWebServer(false);
+        TestWebServer server = new TestWebServer(port, false);
         server.mServerThread.start();
         setInstance(server);
         return server;
     }
 
-    public static TestWebServer startSsl() throws Exception {
+    public static TestWebServer start() throws Exception {
+        return start(0);
+    }
+
+    public static TestWebServer startSsl(int port) throws Exception {
         if (sSecureInstance != null) {
             throw new IllegalStateException("Tried to start multiple SSL TestWebServers");
         }
 
-        TestWebServer server = new TestWebServer(true);
+        TestWebServer server = new TestWebServer(port, true);
         server.mServerThread.start();
         setSecureInstance(server);
         return server;
     }
 
+    public static TestWebServer startSsl() throws Exception {
+        return startSsl(0);
+    }
+
     /**
      * Terminate the http server.
      */
@@ -569,7 +581,7 @@
         }
 
 
-        public ServerThread(TestWebServer server, boolean ssl) throws Exception {
+        public ServerThread(TestWebServer server, int port, boolean ssl) throws Exception {
             super("ServerThread");
             mServer = server;
             mIsSsl = ssl;
@@ -579,9 +591,9 @@
                     if (mIsSsl) {
                         mSslContext = SSLContext.getInstance("TLS");
                         mSslContext.init(getKeyManagers(), null, null);
-                        mSocket = mSslContext.getServerSocketFactory().createServerSocket(0);
+                        mSocket = mSslContext.getServerSocketFactory().createServerSocket(port);
                     } else {
-                        mSocket = new ServerSocket(0);
+                        mSocket = new ServerSocket(port);
                     }
                     return;
                 } catch (IOException e) {
diff --git a/net/url_request/url_request_data_job.cc b/net/url_request/url_request_data_job.cc
index e074646..db4367f 100644
--- a/net/url_request/url_request_data_job.cc
+++ b/net/url_request/url_request_data_job.cc
@@ -6,6 +6,7 @@
 
 #include "net/url_request/url_request_data_job.h"
 
+#include "base/profiler/scoped_profile.h"
 #include "net/base/data_url.h"
 #include "net/base/net_errors.h"
 #include "net/http/http_response_headers.h"
@@ -52,6 +53,10 @@
                                std::string* charset,
                                std::string* data,
                                const CompletionCallback& callback) const {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/422489 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION("422489 URLRequestDataJob::GetData"));
+
   // Check if data URL is valid. If not, don't bother to try to extract data.
   // Otherwise, parse the data from the data URL.
   const GURL& url = request_->url();
diff --git a/net/url_request/url_request_simple_job.cc b/net/url_request/url_request_simple_job.cc
index a02da27..a124864 100644
--- a/net/url_request/url_request_simple_job.cc
+++ b/net/url_request/url_request_simple_job.cc
@@ -100,6 +100,11 @@
 }
 
 void URLRequestSimpleJob::OnGetDataCompleted(int result) {
+  // TODO(vadimt): Remove ScopedProfile below once crbug.com/422489 is fixed.
+  tracked_objects::ScopedProfile tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "422489 URLRequestSimpleJob::OnGetDataCompleted"));
+
   if (result == OK) {
     // Notify that the headers are complete
     if (!byte_range_.ComputeBounds(data_.size())) {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index cb1a8e5..a0187b9 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -303,13 +303,13 @@
   "Site Isolation Linux": {
     "gtest_tests": [
       { "test": "content_unittests", "args": ["--site-per-process"] },
-      { "test": "content_browsertests", "args": ["--site-per-process --gtest_filter=-RenderFrameHostManagerTest.AllowTargetedNavigationsAfterSwap:-RenderFrameHostManagerTest.SupportCrossProcessPostMessage:-SiteIsolationPolicyBrowserTest.CrossSiteDocumentBlockingForDifferentTargets:-RenderFrameHostManagerTest.DontSwapProcessWithOnlyTargetBlank:-RenderFrameHostManagerTest.DisownOpener:-FrameTreeBrowserTest.NavigateWithLeftoverFrames:-RenderFrameHostManagerTest.DontPreemptNavigationWithFrameTreeUpdate:-RenderFrameHostManagerTest.ProcessExitWithSwappedOutViews:-RenderFrameHostManagerTest.SupportCrossProcessPostMessageWithMessagePort:-RenderFrameHostManagerTest.AllowTargetedNavigationsInOpenerAfterSwap"] }
+      { "test": "content_browsertests", "args": ["--site-per-process", "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.SupportCrossProcessPostMessage:*.DontSwapProcessWithOnlyTargetBlank:*.DisownOpener:*.NavigateWithLeftoverFrames:*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort:*.AllowTargetedNavigationsInOpenerAfterSwap"] }
     ]
   },
   "Site Isolation Win": {
     "gtest_tests": [
       { "test": "content_unittests", "args": ["--site-per-process"] },
-      { "test": "content_browsertests", "args": ["--site-per-process --gtest_filter=-RenderFrameHostManagerTest.AllowTargetedNavigationsAfterSwap:-RenderFrameHostManagerTest.SupportCrossProcessPostMessage:-SiteIsolationPolicyBrowserTest.CrossSiteDocumentBlockingForDifferentTargets:-RenderFrameHostManagerTest.DontSwapProcessWithOnlyTargetBlank:-RenderFrameHostManagerTest.DisownOpener:-FrameTreeBrowserTest.NavigateWithLeftoverFrames:-RenderFrameHostManagerTest.DontPreemptNavigationWithFrameTreeUpdate:-RenderFrameHostManagerTest.ProcessExitWithSwappedOutViews:-RenderFrameHostManagerTest.SupportCrossProcessPostMessageWithMessagePort:-RenderFrameHostManagerTest.AllowTargetedNavigationsInOpenerAfterSwap"] }
+      { "test": "content_browsertests", "args": ["--site-per-process", "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.SupportCrossProcessPostMessage:*.DontSwapProcessWithOnlyTargetBlank:*.DisownOpener:*.NavigateWithLeftoverFrames:*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort:*.AllowTargetedNavigationsInOpenerAfterSwap"] }
     ]
   },
   "Linux ChromeOS MSan Tests": {
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index 20fb969..26c913e 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -95,53 +95,61 @@
   },
   "Vista Tests (1)": {
     "gtest_tests": [
-      "interactive_ui_tests",
+      "accessibility_unittests",
+      "app_shell_unittests",
+      "ash_unittests",
+      "aura_unittests",
+      {
+        "test": "base_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      {
+        "test": "browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 7
+        }
+      },
       "cacheinvalidation_unittests",
       "cast_unittests",
       "cc_unittests",
       "chromedriver_unittests",
-      "courgette_unittests",
-      "crypto_unittests",
-      "gfx_unittests",
-      "gpu_unittests",
-      "url_unittests",
-      "jingle_unittests",
-      "media_unittests",
-      "ppapi_unittests",
-      "printing_unittests",
-      "remoting_unittests",
-      "sbox_unittests",
-      "sbox_integration_tests",
-      "sbox_validation_tests",
-      {"test": "browser_tests", "shard_index": 0, "total_shards": 3},
-      "content_browsertests",
-      "installer_util_unittests"
-    ]
-  },
-  "Vista Tests (2)": {
-    "gtest_tests": [
-      "accessibility_unittests",
-      "base_unittests",
-      "net_unittests",
-      "views_unittests",
-      "wm_unittests",
-      "aura_unittests",
-      "ash_unittests",
-      "compositor_unittests",
-      "events_unittests",
-      "sync_integration_tests",
-      {"test": "browser_tests", "shard_index": 1, "total_shards": 3}
-    ]
-  },
-  "Vista Tests (3)": {
-    "gtest_tests": [
-      "app_shell_unittests",
       "chrome_elf_unittests",
       "components_unittests",
+      "compositor_unittests",
+      {
+        "test": "content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      {
+        "test": "content_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      "courgette_unittests",
+      "crypto_unittests",
       "extensions_unittests",
+      "events_unittests",
       "gcm_unit_tests",
+      "gfx_unittests",
       "google_apis_unittests",
+      "gpu_unittests",
+      "installer_util_unittests",
+      {
+        "test": "interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 2
+        }
+      },
       "ipc_tests",
+      "jingle_unittests",
+      "media_unittests",
       "mojo_apps_js_unittests",
       "mojo_common_unittests",
       "mojo_js_unittests",
@@ -150,12 +158,44 @@
       "mojo_public_system_unittests",
       "mojo_public_utility_unittests",
       "mojo_system_unittests",
-      "sync_unit_tests",
-      "unit_tests",
+      {
+        "test": "net_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      "ppapi_unittests",
+      "printing_unittests",
+      "remoting_unittests",
+      "sbox_unittests",
+      "sbox_integration_tests",
+      "sbox_validation_tests",
       "sql_unittests",
+      {
+        "test": "sync_integration_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      "sync_unit_tests",
+      {
+        "test": "unit_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
       "ui_unittests",
-      "content_unittests",
-      {"test": "browser_tests", "shard_index": 2, "total_shards": 3}
+      "url_unittests",
+      "views_unittests",
+      "wm_unittests"
+    ]
+  },
+  "Vista Tests (2)": {
+    "gtest_tests": [
+    ]
+  },
+  "Vista Tests (3)": {
+    "gtest_tests": [
     ]
   },
   "Win7 Tests (1)": {
diff --git a/testing/chromoting/browser_test_commands_linux.txt b/testing/chromoting/browser_test_commands_linux.txt
new file mode 100644
index 0000000..3b1be77
--- /dev/null
+++ b/testing/chromoting/browser_test_commands_linux.txt
@@ -0,0 +1 @@
+/usr/bin/python ../xvfb.py $(PROD_DIR) $(PROD_DIR)/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=$(PROD_DIR)/remoting/remoting.webapp --extension-name=Chromoting
\ No newline at end of file
diff --git a/testing/chromoting/browser_tests_launcher.py b/testing/chromoting/browser_tests_launcher.py
new file mode 100644
index 0000000..66b54fe
--- /dev/null
+++ b/testing/chromoting/browser_tests_launcher.py
@@ -0,0 +1,45 @@
+# Copyright (c) 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+"""Utility script to launch browser-tests on the Chromoting bot."""
+import argparse
+import subprocess
+
+PROD_DIR_ID = '$(PROD_DIR)'
+
+
+def LaunchCommand(command):
+
+  cmd_line = [command]
+  try:
+    results = subprocess.check_output(
+        cmd_line, stderr=subprocess.STDOUT, shell=True)
+  except subprocess.CalledProcessError, e:
+    raise Exception('Exception %s running command %s' % (e, command))
+  else:
+    print results
+  finally:
+    pass
+
+
+def main():
+
+  parser = argparse.ArgumentParser()
+  parser.add_argument('-f', '--file',
+                      help='path to file listing commands to be launched.')
+  parser.add_argument('-p', '--prod_dir',
+                      help='path to folder having product and test binaries.')
+
+  args = parser.parse_args()
+
+  with open(args.file) as f:
+    for line in f:
+      # Replace the PROD_DIR value in the command-line with
+      # the passed in value.
+      line = line.replace(PROD_DIR_ID, args.prod_dir)
+      LaunchCommand(line)
+
+if __name__ == '__main__':
+  main()
diff --git a/testing/chromoting/chromoting_integration_tests.isolate b/testing/chromoting/chromoting_integration_tests.isolate
index 4b45213..135836b 100644
--- a/testing/chromoting/chromoting_integration_tests.isolate
+++ b/testing/chromoting/chromoting_integration_tests.isolate
@@ -6,17 +6,17 @@
     ['OS=="linux"', {
       'variables': {
         'command': [
-          '../xvfb.py',
+          './browser_tests_launcher.py',
+          '-f',
+          './browser_test_commands_linux.txt',
+          '-p',
           '<(PRODUCT_DIR)',
-          '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
-          '--gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch',
-          '--run-manual',
-          '--ui-test-action-timeout=100000',
-          '--webapp-unpacked=<(PRODUCT_DIR)/remoting/remoting.webapp',
-          '--extension-name=Chromoting',
         ],
         'files': [
           '../xvfb.py',
+          './browser_tests_launcher.py',
+          './browser_test_commands_linux.txt',
+          '../../remoting/tools/internal/test_accounts.json',
           '<(PRODUCT_DIR)/libffmpegsumo.so',
           '<(PRODUCT_DIR)/libosmesa.so',
           '<(PRODUCT_DIR)/nacl_irt_x86_64.nexe',
diff --git a/third_party/tcmalloc/OWNERS b/third_party/tcmalloc/OWNERS
index 0c374cc..ba4b694 100644
--- a/third_party/tcmalloc/OWNERS
+++ b/third_party/tcmalloc/OWNERS
@@ -1,2 +1,4 @@
 jar@chromium.org
+
+# On extended leave.
 willchan@chromium.org
diff --git a/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory.txt b/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory.txt
index b7fd0b1..288d6cd 100644
--- a/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory.txt
+++ b/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory.txt
@@ -16,3 +16,6 @@
 SSLUITest.TestInterstitialJavaScriptProceeds
 SSLUITest.TestRefNavigation
 SSLUITest.TestWSSInvalidCertAndGoForward
+
+# http://crbug.com/403007
+WorkerDevToolsSanityTest.InspectSharedWorker
diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt
index 20105b9..233d06a 100644
--- a/tools/valgrind/memcheck/suppressions.txt
+++ b/tools/valgrind/memcheck/suppressions.txt
@@ -3439,3 +3439,13 @@
    fun:_ZN3WTF13TextCodecUTF86encodeEPKhmNS_19UnencodableHandlingE
    fun:_ZNK3WTF12TextEncoding6encodeERKNS_6StringENS_19UnencodableHandlingE
 }
+{
+   bug_424575
+   Memcheck:Uninitialized
+   fun:_ZN7content13NavigatorImpl23RecordNavigationMetricsERKNS_20LoadCommittedDetailsERK44FrameHostMsg_DidCommitProvisionalLoad_ParamsPNS_12SiteInstanceE
+   fun:_ZN7content13NavigatorImpl11DidNavigateEPNS_19RenderFrameHostImplERK44FrameHostMsg_DidCommitProvisionalLoad_Params
+   fun:_ZN7content19RenderFrameHostImpl26OnDidCommitProvisionalLoadERKN3IPC7MessageE
+   fun:_ZN7content19TestRenderFrameHost26SendNavigateWithParametersEiRK4GURLN2ui14PageTransitionES3_iPKN4base8FilePathERKSt6vectorIS1_SaIS1_EE
+   fun:_ZN7content19TestRenderFrameHost41SendNavigateWithTransitionAndResponseCodeEiRK4GURLN2ui14PageTransitionEi
+   fun:_ZN7content19TestRenderFrameHost26SendNavigateWithTransitionEiRK4GURLN2ui14PageTransitionE
+}
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc
index 1c24bf5..474b6ef 100644
--- a/ui/app_list/views/apps_grid_view.cc
+++ b/ui/app_list/views/apps_grid_view.cc
@@ -212,7 +212,7 @@
   DISALLOW_COPY_AND_ASSIGN(ItemMoveAnimationDelegate);
 };
 
-// Returns true if the |item| is an folder item.
+// Returns true if the |item| is a folder item.
 bool IsFolderItem(AppListItem* item) {
   return (item->GetItemType() == AppListFolderItem::kItemType);
 }
@@ -1388,20 +1388,42 @@
 
 bool AppsGridView::CalculateFolderDropTarget(const gfx::Point& point,
                                              Index* drop_target) const {
+  // Folders can't be dropped into other folders.
+  if (IsFolderItem(drag_view_->item()))
+    return false;
+
+  // A folder drop shouldn't happen on the reorder placeholder since that would
+  // be merging an item with itself.
   Index nearest_tile_index(GetNearestTileIndexForPoint(point));
+  if (!IsValidIndex(nearest_tile_index) ||
+      nearest_tile_index == reorder_placeholder_) {
+    return false;
+  }
+
   int distance_to_tile_center =
       (point - GetExpectedTileBounds(nearest_tile_index.slot).CenterPoint())
           .Length();
-  if (nearest_tile_index != reorder_placeholder_ &&
-      distance_to_tile_center < kFolderDroppingCircleRadius &&
-      !IsFolderItem(drag_view_->item()) &&
-      CanDropIntoTarget(nearest_tile_index)) {
-    *drop_target = nearest_tile_index;
-    DCHECK(IsValidIndex(*drop_target));
-    return true;
+  if (distance_to_tile_center > kFolderDroppingCircleRadius)
+    return false;
+
+  AppListItemView* target_view =
+      GetViewDisplayedAtSlotOnCurrentPage(nearest_tile_index.slot);
+  if (!target_view)
+    return false;
+
+  AppListItem* target_item = target_view->item();
+
+  // Items can only be dropped into non-folders (which have no children) or
+  // folders that have fewer than the max allowed items.
+  // The OEM folder does not allow drag/drop of other items into it.
+  if (target_item->ChildItemCount() >= kMaxFolderItems ||
+      IsOEMFolderItem(target_item)) {
+    return false;
   }
 
-  return false;
+  *drop_target = nearest_tile_index;
+  DCHECK(IsValidIndex(*drop_target));
+  return true;
 }
 
 void AppsGridView::CalculateReorderDropTarget(const gfx::Point& point,
@@ -2086,20 +2108,6 @@
   return model_->folders_enabled() && !folder_delegate_;
 }
 
-bool AppsGridView::CanDropIntoTarget(const Index& drop_target) const {
-  AppListItemView* target_view =
-      GetViewDisplayedAtSlotOnCurrentPage(drop_target.slot);
-  if (!target_view)
-    return false;
-
-  AppListItem* target_item = target_view->item();
-  // Items can be dropped into non-folders (which have no children) or folders
-  // that have fewer than the max allowed items.
-  // OEM folder does not allow to drag/drop other items in it.
-  return target_item->ChildItemCount() < kMaxFolderItems &&
-         !IsOEMFolderItem(target_item);
-}
-
 AppsGridView::Index AppsGridView::GetNearestTileIndexForPoint(
     const gfx::Point& point) const {
   gfx::Rect bounds = GetContentsBounds();
diff --git a/ui/app_list/views/apps_grid_view.h b/ui/app_list/views/apps_grid_view.h
index 3a395cb..a380b1d 100644
--- a/ui/app_list/views/apps_grid_view.h
+++ b/ui/app_list/views/apps_grid_view.h
@@ -400,10 +400,6 @@
   // Whether the folder drag-and-drop UI should be enabled.
   bool EnableFolderDragDropUI();
 
-  // Whether target specified by |drap_target| can accept more items to be
-  // dropped into it.
-  bool CanDropIntoTarget(const Index& drop_target) const;
-
   // Returns the size of the entire tile grid.
   gfx::Size GetTileGridSize() const;
 
diff --git a/ui/app_list/views/apps_grid_view_unittest.cc b/ui/app_list/views/apps_grid_view_unittest.cc
index 492b233..144095f 100644
--- a/ui/app_list/views/apps_grid_view_unittest.cc
+++ b/ui/app_list/views/apps_grid_view_unittest.cc
@@ -485,14 +485,14 @@
   int tile_height = GetItemTileRectAt(1, 0).y() - GetItemTileRectAt(0, 0).y();
 
   // Drag left but stop before the folder dropping circle.
-  drag_vector.set_x(-half_tile_width - 5);
+  drag_vector.set_x(-half_tile_width - 4);
   SimulateDrag(AppsGridView::MOUSE, top_right, top_right + drag_vector);
   apps_grid_view_->EndDrag(false);
   EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"),
             model_->GetModelContent());
 
   // Drag left, past the folder dropping circle.
-  drag_vector.set_x(-3 * half_tile_width + 5);
+  drag_vector.set_x(-3 * half_tile_width + 4);
   SimulateDrag(AppsGridView::MOUSE, top_right, top_right + drag_vector);
   apps_grid_view_->EndDrag(false);
   EXPECT_EQ(std::string("Item 1,Item 0,Item 2,Item 3"),
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index 3233de7..5aa13ea 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -37,13 +37,15 @@
     "clipboard/clipboard.cc",
     "clipboard/clipboard.h",
     "clipboard/clipboard_android.cc",
-    "clipboard/clipboard_android_initialization.h",
+    "clipboard/clipboard_android.h",
     "clipboard/clipboard_constants.cc",
+    "clipboard/clipboard_mac.h",
     "clipboard/clipboard_mac.mm",
     "clipboard/clipboard_types.h",
     "clipboard/clipboard_util_win.cc",
     "clipboard/clipboard_util_win.h",
     "clipboard/clipboard_win.cc",
+    "clipboard/clipboard_win.h",
     "clipboard/custom_data_helper.cc",
     "clipboard/custom_data_helper.h",
     "clipboard/custom_data_helper_linux.cc",
diff --git a/ui/base/android/ui_base_jni_registrar.cc b/ui/base/android/ui_base_jni_registrar.cc
index 23f3934..d4ef0db 100644
--- a/ui/base/android/ui_base_jni_registrar.cc
+++ b/ui/base/android/ui_base_jni_registrar.cc
@@ -8,7 +8,7 @@
 #include "base/android/jni_registrar.h"
 #include "ui/base/android/view_android.h"
 #include "ui/base/android/window_android.h"
-#include "ui/base/clipboard/clipboard_android_initialization.h"
+#include "ui/base/clipboard/clipboard_android.h"
 #include "ui/base/device_form_factor_android.h"
 #include "ui/base/l10n/l10n_util_android.h"
 #include "ui/base/resource/resource_bundle_android.h"
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc
index 84371ac..27f747a 100644
--- a/ui/base/clipboard/clipboard.cc
+++ b/ui/base/clipboard/clipboard.cc
@@ -88,7 +88,7 @@
   if (it != clipboard_map->end())
     return it->second;
 
-  Clipboard* clipboard = new ui::Clipboard;
+  Clipboard* clipboard = Clipboard::Create();
   clipboard_map->insert(std::make_pair(id, clipboard));
   return clipboard;
 }
diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h
index afc8753..73c3aa2 100644
--- a/ui/base/clipboard/clipboard.h
+++ b/ui/base/clipboard/clipboard.h
@@ -11,7 +11,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
 #include "base/process/process.h"
 #include "base/strings/string16.h"
@@ -22,15 +21,6 @@
 
 #if defined(OS_WIN)
 #include <objidl.h>
-#elif defined(OS_ANDROID)
-#include <jni.h>
-
-#include "base/android/jni_android.h"
-#include "base/android/scoped_java_ref.h"
-#endif
-
-#if defined(USE_AURA) && defined(USE_X11)
-#include "base/memory/scoped_ptr.h"
 #endif
 
 namespace base {
@@ -88,7 +78,7 @@
 
 #if defined(OS_WIN)
     const FORMATETC& ToFormatEtc() const { return data_; }
-#elif defined(USE_AURA)
+#elif defined(USE_AURA) || defined(OS_ANDROID)
     const std::string& ToString() const { return data_; }
 #elif defined(OS_MACOSX)
     NSString* ToNSString() const { return data_; }
@@ -113,19 +103,13 @@
 #if defined(OS_WIN)
     explicit FormatType(UINT native_format);
     FormatType(UINT native_format, LONG index);
-    UINT ToUINT() const { return data_.cfFormat; }
     FORMATETC data_;
-#elif defined(USE_AURA)
+#elif defined(USE_AURA) || defined(OS_ANDROID)
     explicit FormatType(const std::string& native_format);
-    const std::string& data() const { return data_; }
     std::string data_;
 #elif defined(OS_MACOSX)
     explicit FormatType(NSString* native_format);
     NSString* data_;
-#elif defined(OS_ANDROID)
-    explicit FormatType(const std::string& native_format);
-    const std::string& data() const { return data_; }
-    std::string data_;
 #else
 #error No FormatType definition.
 #endif
@@ -211,51 +195,53 @@
   // Returns a sequence number which uniquely identifies clipboard state.
   // This can be used to version the data on the clipboard and determine
   // whether it has changed.
-  uint64 GetSequenceNumber(ClipboardType type);
+  virtual uint64 GetSequenceNumber(ClipboardType type) = 0;
 
   // Tests whether the clipboard contains a certain format
-  bool IsFormatAvailable(const FormatType& format, ClipboardType type) const;
+  virtual bool IsFormatAvailable(const FormatType& format,
+                                 ClipboardType type) const = 0;
 
   // Clear the clipboard data.
-  void Clear(ClipboardType type);
+  virtual void Clear(ClipboardType type) = 0;
 
-  void ReadAvailableTypes(ClipboardType type,
-                          std::vector<base::string16>* types,
-                          bool* contains_filenames) const;
+  virtual void ReadAvailableTypes(ClipboardType type,
+                                  std::vector<base::string16>* types,
+                                  bool* contains_filenames) const = 0;
 
   // Reads UNICODE text from the clipboard, if available.
-  void ReadText(ClipboardType type, base::string16* result) const;
+  virtual void ReadText(ClipboardType type, base::string16* result) const = 0;
 
   // Reads ASCII text from the clipboard, if available.
-  void ReadAsciiText(ClipboardType type, std::string* result) const;
+  virtual void ReadAsciiText(ClipboardType type, std::string* result) const = 0;
 
   // Reads HTML from the clipboard, if available. If the HTML fragment requires
   // context to parse, |fragment_start| and |fragment_end| are indexes into
   // markup indicating the beginning and end of the actual fragment. Otherwise,
   // they will contain 0 and markup->size().
-  void ReadHTML(ClipboardType type,
-                base::string16* markup,
-                std::string* src_url,
-                uint32* fragment_start,
-                uint32* fragment_end) const;
+  virtual void ReadHTML(ClipboardType type,
+                        base::string16* markup,
+                        std::string* src_url,
+                        uint32* fragment_start,
+                        uint32* fragment_end) const = 0;
 
   // Reads RTF from the clipboard, if available. Stores the result as a byte
   // vector.
-  void ReadRTF(ClipboardType type, std::string* result) const;
+  virtual void ReadRTF(ClipboardType type, std::string* result) const = 0;
 
   // Reads an image from the clipboard, if available.
-  SkBitmap ReadImage(ClipboardType type) const;
+  virtual SkBitmap ReadImage(ClipboardType type) const = 0;
 
-  void ReadCustomData(ClipboardType clipboard_type,
-                      const base::string16& type,
-                      base::string16* result) const;
+  virtual void ReadCustomData(ClipboardType clipboard_type,
+                              const base::string16& type,
+                              base::string16* result) const = 0;
 
   // Reads a bookmark from the clipboard, if available.
-  void ReadBookmark(base::string16* title, std::string* url) const;
+  virtual void ReadBookmark(base::string16* title, std::string* url) const = 0;
 
   // Reads raw data from the clipboard with the given format type. Stores result
   // as a byte vector.
-  void ReadData(const FormatType& format, std::string* result) const;
+  virtual void ReadData(const FormatType& format,
+                        std::string* result) const = 0;
 
   // Gets the FormatType corresponding to an arbitrary format string,
   // registering it with the system if needed. Due to Windows/Linux
@@ -298,6 +284,40 @@
   static const FormatType& GetIDListFormatType();
 #endif
 
+ protected:
+  static Clipboard* Create();
+
+  Clipboard() {}
+  virtual ~Clipboard() {}
+
+  // Write a bunch of objects to the system clipboard. Copies are made of the
+  // contents of |objects|.
+  virtual void WriteObjects(ClipboardType type, const ObjectMap& objects) = 0;
+
+  void DispatchObject(ObjectType type, const ObjectMapParams& params);
+
+  virtual void WriteText(const char* text_data, size_t text_len) = 0;
+
+  virtual void WriteHTML(const char* markup_data,
+                         size_t markup_len,
+                         const char* url_data,
+                         size_t url_len) = 0;
+
+  virtual void WriteRTF(const char* rtf_data, size_t data_len) = 0;
+
+  virtual void WriteBookmark(const char* title_data,
+                             size_t title_len,
+                             const char* url_data,
+                             size_t url_len) = 0;
+
+  virtual void WriteWebSmartPaste() = 0;
+
+  virtual void WriteBitmap(const SkBitmap& bitmap) = 0;
+
+  virtual void WriteData(const FormatType& format,
+                         const char* data_data,
+                         size_t data_len) = 0;
+
  private:
   FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest);
   FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest);
@@ -307,65 +327,6 @@
   friend class content::ClipboardMessageFilter;
   friend class ScopedClipboardWriter;
 
-  Clipboard();
-  ~Clipboard();
-
-  // Write a bunch of objects to the system clipboard. Copies are made of the
-  // contents of |objects|.
-  void WriteObjects(ClipboardType type, const ObjectMap& objects);
-
-  void DispatchObject(ObjectType type, const ObjectMapParams& params);
-
-  void WriteText(const char* text_data, size_t text_len);
-
-  void WriteHTML(const char* markup_data,
-                 size_t markup_len,
-                 const char* url_data,
-                 size_t url_len);
-
-  void WriteRTF(const char* rtf_data, size_t data_len);
-
-  void WriteBookmark(const char* title_data,
-                     size_t title_len,
-                     const char* url_data,
-                     size_t url_len);
-
-  void WriteWebSmartPaste();
-
-  void WriteBitmap(const SkBitmap& bitmap);
-
-  void WriteData(const FormatType& format,
-                 const char* data_data,
-                 size_t data_len);
-#if defined(OS_WIN)
-  void WriteBitmapFromHandle(HBITMAP source_hbitmap,
-                             const gfx::Size& size);
-
-  // Safely write to system clipboard. Free |handle| on failure.
-  void WriteToClipboard(unsigned int format, HANDLE handle);
-
-  static void ParseBookmarkClipboardFormat(const base::string16& bookmark,
-                                           base::string16* title,
-                                           std::string* url);
-
-  // Free a handle depending on its type (as intuited from format)
-  static void FreeData(unsigned int format, HANDLE data);
-
-  // Return the window that should be the clipboard owner, creating it
-  // if neccessary.  Marked const for lazily initialization by const methods.
-  HWND GetClipboardWindow() const;
-
-  // Mark this as mutable so const methods can still do lazy initialization.
-  mutable scoped_ptr<base::win::MessageWindow> clipboard_owner_;
-
-#elif defined(USE_CLIPBOARD_AURAX11)
- private:
-  // We keep our implementation details private because otherwise we bring in
-  // the X11 headers and break chrome compile.
-  class AuraX11Details;
-  scoped_ptr<AuraX11Details> aurax11_details_;
-#endif
-
   DISALLOW_COPY_AND_ASSIGN(Clipboard);
 };
 
diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc
index a6631af..8b25b7c 100644
--- a/ui/base/clipboard/clipboard_android.cc
+++ b/ui/base/clipboard/clipboard_android.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_android.h"
 
 #include "base/android/jni_string.h"
 #include "base/lazy_instance.h"
@@ -11,7 +11,6 @@
 #include "base/synchronization/lock.h"
 #include "jni/Clipboard_jni.h"
 #include "third_party/skia/include/core/SkBitmap.h"
-#include "ui/base/clipboard/clipboard_android_initialization.h"
 #include "ui/gfx/size.h"
 
 // TODO:(andrewhayden) Support additional formats in Android: Bitmap, URI, HTML,
@@ -258,16 +257,22 @@
   return type;
 }
 
-// Clipboard implementation.
-Clipboard::Clipboard() {
+// Clipboard factory method.
+// static
+Clipboard* Clipboard::Create() {
+  return new ClipboardAndroid;
+}
+
+// ClipboardAndroid implementation.
+ClipboardAndroid::ClipboardAndroid() {
   DCHECK(CalledOnValidThread());
 }
 
-Clipboard::~Clipboard() {
+ClipboardAndroid::~ClipboardAndroid() {
   DCHECK(CalledOnValidThread());
 }
 
-uint64 Clipboard::GetSequenceNumber(ClipboardType /* type */) {
+uint64 ClipboardAndroid::GetSequenceNumber(ClipboardType /* type */) {
   DCHECK(CalledOnValidThread());
   // TODO: implement this. For now this interface will advertise
   // that the clipboard never changes. That's fine as long as we
@@ -275,22 +280,22 @@
   return 0;
 }
 
-bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format,
-                                  ClipboardType type) const {
+bool ClipboardAndroid::IsFormatAvailable(const Clipboard::FormatType& format,
+                                         ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
-  return g_map.Get().HasFormat(format.data());
+  return g_map.Get().HasFormat(format.ToString());
 }
 
-void Clipboard::Clear(ClipboardType type) {
+void ClipboardAndroid::Clear(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   g_map.Get().Clear();
 }
 
-void Clipboard::ReadAvailableTypes(ClipboardType type,
-                                   std::vector<base::string16>* types,
-                                   bool* contains_filenames) const {
+void ClipboardAndroid::ReadAvailableTypes(ClipboardType type,
+                                          std::vector<base::string16>* types,
+                                          bool* contains_filenames) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -305,7 +310,8 @@
   *contains_filenames = false;
 }
 
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
+void ClipboardAndroid::ReadText(ClipboardType type,
+                                base::string16* result) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   std::string utf8;
@@ -313,18 +319,19 @@
   *result = base::UTF8ToUTF16(utf8);
 }
 
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
+void ClipboardAndroid::ReadAsciiText(ClipboardType type,
+                                     std::string* result) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   *result = g_map.Get().Get(kPlainTextFormat);
 }
 
 // Note: |src_url| isn't really used. It is only implemented in Windows
-void Clipboard::ReadHTML(ClipboardType type,
-                         base::string16* markup,
-                         std::string* src_url,
-                         uint32* fragment_start,
-                         uint32* fragment_end) const {
+void ClipboardAndroid::ReadHTML(ClipboardType type,
+                                base::string16* markup,
+                                std::string* src_url,
+                                uint32* fragment_start,
+                                uint32* fragment_end) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   if (src_url)
@@ -337,12 +344,12 @@
   *fragment_end = static_cast<uint32>(markup->length());
 }
 
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const {
+void ClipboardAndroid::ReadRTF(ClipboardType type, std::string* result) const {
   DCHECK(CalledOnValidThread());
   NOTIMPLEMENTED();
 }
 
-SkBitmap Clipboard::ReadImage(ClipboardType type) const {
+SkBitmap ClipboardAndroid::ReadImage(ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   std::string input = g_map.Get().Get(kBitmapFormat);
@@ -361,66 +368,70 @@
   return bmp;
 }
 
-void Clipboard::ReadCustomData(ClipboardType clipboard_type,
-                               const base::string16& type,
-                               base::string16* result) const {
+void ClipboardAndroid::ReadCustomData(ClipboardType clipboard_type,
+                                      const base::string16& type,
+                                      base::string16* result) const {
   DCHECK(CalledOnValidThread());
   NOTIMPLEMENTED();
 }
 
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
+void ClipboardAndroid::ReadBookmark(base::string16* title,
+                                    std::string* url) const {
   DCHECK(CalledOnValidThread());
   NOTIMPLEMENTED();
 }
 
-void Clipboard::ReadData(const Clipboard::FormatType& format,
-                         std::string* result) const {
+void ClipboardAndroid::ReadData(const Clipboard::FormatType& format,
+                                std::string* result) const {
   DCHECK(CalledOnValidThread());
-  *result = g_map.Get().Get(format.data());
+  *result = g_map.Get().Get(format.ToString());
 }
 
 // Main entry point used to write several values in the clipboard.
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) {
+void ClipboardAndroid::WriteObjects(ClipboardType type,
+                                    const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   g_map.Get().Clear();
-  for (ObjectMap::const_iterator iter = objects.begin();
-       iter != objects.end(); ++iter) {
+  for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
+       ++iter) {
     DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
   }
 }
 
-void Clipboard::WriteText(const char* text_data, size_t text_len) {
+void ClipboardAndroid::WriteText(const char* text_data, size_t text_len) {
   g_map.Get().Set(kPlainTextFormat, std::string(text_data, text_len));
 }
 
-void Clipboard::WriteHTML(const char* markup_data,
-                          size_t markup_len,
-                          const char* url_data,
-                          size_t url_len) {
+void ClipboardAndroid::WriteHTML(const char* markup_data,
+                                 size_t markup_len,
+                                 const char* url_data,
+                                 size_t url_len) {
   g_map.Get().Set(kHTMLFormat, std::string(markup_data, markup_len));
 }
 
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) {
+void ClipboardAndroid::WriteRTF(const char* rtf_data, size_t data_len) {
   NOTIMPLEMENTED();
 }
 
 // Note: according to other platforms implementations, this really writes the
 // URL spec.
-void Clipboard::WriteBookmark(const char* title_data, size_t title_len,
-                              const char* url_data, size_t url_len) {
+void ClipboardAndroid::WriteBookmark(const char* title_data,
+                                     size_t title_len,
+                                     const char* url_data,
+                                     size_t url_len) {
   g_map.Get().Set(kBookmarkFormat, std::string(url_data, url_len));
 }
 
 // Write an extra flavor that signifies WebKit was the last to modify the
 // pasteboard. This flavor has no data.
-void Clipboard::WriteWebSmartPaste() {
+void ClipboardAndroid::WriteWebSmartPaste() {
   g_map.Get().Set(kWebKitSmartPasteFormat, std::string());
 }
 
 // Note: we implement this to pass all unit tests but it is currently unclear
 // how some code would consume this.
-void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
+void ClipboardAndroid::WriteBitmap(const SkBitmap& bitmap) {
   gfx::Size size(bitmap.width(), bitmap.height());
 
   std::string packed(reinterpret_cast<const char*>(&size), sizeof(size));
@@ -432,12 +443,12 @@
   g_map.Get().Set(kBitmapFormat, packed);
 }
 
-void Clipboard::WriteData(const Clipboard::FormatType& format,
-                          const char* data_data, size_t data_len) {
-  g_map.Get().Set(format.data(), std::string(data_data, data_len));
+void ClipboardAndroid::WriteData(const Clipboard::FormatType& format,
+                                 const char* data_data,
+                                 size_t data_len) {
+  g_map.Get().Set(format.ToString(), std::string(data_data, data_len));
 }
 
-// See clipboard_android_initialization.h for more information.
 bool RegisterClipboardAndroid(JNIEnv* env) {
   return RegisterNativesImpl(env);
 }
diff --git a/ui/base/clipboard/clipboard_android.h b/ui/base/clipboard/clipboard_android.h
new file mode 100644
index 0000000..65287bf
--- /dev/null
+++ b/ui/base/clipboard/clipboard_android.h
@@ -0,0 +1,67 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_H_
+#define UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_H_
+
+#include "ui/base/clipboard/clipboard.h"
+
+#include <jni.h>
+
+namespace ui {
+
+bool RegisterClipboardAndroid(JNIEnv* env);
+
+class ClipboardAndroid : public Clipboard {
+ private:
+  friend class Clipboard;
+
+  ClipboardAndroid();
+  ~ClipboardAndroid() override;
+
+  // Clipboard overrides:
+  uint64 GetSequenceNumber(ClipboardType type) override;
+  bool IsFormatAvailable(const FormatType& format,
+                         ClipboardType type) const override;
+  void Clear(ClipboardType type) override;
+  void ReadAvailableTypes(ClipboardType type,
+                          std::vector<base::string16>* types,
+                          bool* contains_filenames) const override;
+  void ReadText(ClipboardType type, base::string16* result) const override;
+  void ReadAsciiText(ClipboardType type, std::string* result) const override;
+  void ReadHTML(ClipboardType type,
+                base::string16* markup,
+                std::string* src_url,
+                uint32* fragment_start,
+                uint32* fragment_end) const override;
+  void ReadRTF(ClipboardType type, std::string* result) const override;
+  SkBitmap ReadImage(ClipboardType type) const override;
+  void ReadCustomData(ClipboardType clipboard_type,
+                      const base::string16& type,
+                      base::string16* result) const override;
+  void ReadBookmark(base::string16* title, std::string* url) const override;
+  void ReadData(const FormatType& format, std::string* result) const override;
+  void WriteObjects(ClipboardType type, const ObjectMap& objects) override;
+  void WriteText(const char* text_data, size_t text_len) override;
+  void WriteHTML(const char* markup_data,
+                 size_t markup_len,
+                 const char* url_data,
+                 size_t url_len) override;
+  void WriteRTF(const char* rtf_data, size_t data_len) override;
+  void WriteBookmark(const char* title_data,
+                     size_t title_len,
+                     const char* url_data,
+                     size_t url_len) override;
+  void WriteWebSmartPaste() override;
+  void WriteBitmap(const SkBitmap& bitmap) override;
+  void WriteData(const FormatType& format,
+                 const char* data_data,
+                 size_t data_len) override;
+
+  DISALLOW_COPY_AND_ASSIGN(ClipboardAndroid);
+};
+
+}  // namespace ui
+
+#endif  // UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_H_
diff --git a/ui/base/clipboard/clipboard_android_initialization.h b/ui/base/clipboard/clipboard_android_initialization.h
deleted file mode 100644
index dca59c1..0000000
--- a/ui/base/clipboard/clipboard_android_initialization.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file exists to help bind the Android clipboard implementation's JNI
-// methods statically. Since the JNI header file that contains the static
-// registration method is autogenerated and since the general clipboard.h
-// file is platform-independent, a new header file (this) is the cleanest
-// option for holding this function (as it is specific to Android).
-
-#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_INITIALIZATION_H_
-#define UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_INITIALIZATION_H_
-
-#include <jni.h>
-
-namespace ui {
-
-bool RegisterClipboardAndroid(JNIEnv* env);
-
-}  // namespace ui
-
-#endif  // UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_INITIALIZATION_H_
diff --git a/ui/base/clipboard/clipboard_aura.cc b/ui/base/clipboard/clipboard_aura.cc
index efd484b..166f3bb 100644
--- a/ui/base/clipboard/clipboard_aura.cc
+++ b/ui/base/clipboard/clipboard_aura.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_aura.h"
 
 #include <list>
 
@@ -406,7 +406,7 @@
 
 }  // namespace
 
-// Clipboard FormatType implementation.
+// Clipboard::FormatType implementation.
 Clipboard::FormatType::FormatType() {
 }
 
@@ -511,25 +511,30 @@
   return type;
 }
 
-// Clipboard implementation.
-Clipboard::Clipboard() {
+// Clipboard factory method.
+Clipboard* Clipboard::Create() {
+  return new ClipboardAura;
+}
+
+// ClipboardAura implementation.
+ClipboardAura::ClipboardAura() {
   DCHECK(CalledOnValidThread());
   // Make sure clipboard is created.
   GetClipboard();
 }
 
-Clipboard::~Clipboard() {
+ClipboardAura::~ClipboardAura() {
   DCHECK(CalledOnValidThread());
   DeleteClipboard();
 }
 
-uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
+uint64 ClipboardAura::GetSequenceNumber(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   return GetClipboard()->sequence_number();
 }
 
-bool Clipboard::IsFormatAvailable(const FormatType& format,
-                                  ClipboardType type) const {
+bool ClipboardAura::IsFormatAvailable(const FormatType& format,
+                                      ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardType(type));
   AuraClipboard* clipboard = GetClipboard();
@@ -552,16 +557,16 @@
   return false;
 }
 
-void Clipboard::Clear(ClipboardType type) {
+void ClipboardAura::Clear(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardType(type));
   AuraClipboard* clipboard = GetClipboard();
   clipboard->Clear();
 }
 
-void Clipboard::ReadAvailableTypes(ClipboardType type,
-                                   std::vector<base::string16>* types,
-                                   bool* contains_filenames) const {
+void ClipboardAura::ReadAvailableTypes(ClipboardType type,
+                                       std::vector<base::string16>* types,
+                                       bool* contains_filenames) const {
   DCHECK(CalledOnValidThread());
   if (!types || !contains_filenames) {
     NOTREACHED();
@@ -586,95 +591,98 @@
   }
 }
 
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
+void ClipboardAura::ReadText(ClipboardType type, base::string16* result) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadText(result);
 }
 
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
+void ClipboardAura::ReadAsciiText(ClipboardType type,
+                                  std::string* result) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadAsciiText(result);
 }
 
-void Clipboard::ReadHTML(ClipboardType type,
-                         base::string16* markup,
-                         std::string* src_url,
-                         uint32* fragment_start,
-                         uint32* fragment_end) const {
+void ClipboardAura::ReadHTML(ClipboardType type,
+                             base::string16* markup,
+                             std::string* src_url,
+                             uint32* fragment_start,
+                             uint32* fragment_end) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadHTML(markup, src_url, fragment_start, fragment_end);
 }
 
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const {
+void ClipboardAura::ReadRTF(ClipboardType type, std::string* result) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadRTF(result);
 }
 
-SkBitmap Clipboard::ReadImage(ClipboardType type) const {
+SkBitmap ClipboardAura::ReadImage(ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   return GetClipboard()->ReadImage();
 }
 
-void Clipboard::ReadCustomData(ClipboardType clipboard_type,
-                               const base::string16& type,
-                               base::string16* result) const {
+void ClipboardAura::ReadCustomData(ClipboardType clipboard_type,
+                                   const base::string16& type,
+                                   base::string16* result) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadCustomData(type, result);
 }
 
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
+void ClipboardAura::ReadBookmark(base::string16* title,
+                                 std::string* url) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadBookmark(title, url);
 }
 
-void Clipboard::ReadData(const FormatType& format, std::string* result) const {
+void ClipboardAura::ReadData(const FormatType& format,
+                             std::string* result) const {
   DCHECK(CalledOnValidThread());
   GetClipboard()->ReadData(format.ToString(), result);
 }
 
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) {
+void ClipboardAura::WriteObjects(ClipboardType type, const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardType(type));
-  for (ObjectMap::const_iterator iter = objects.begin();
-       iter != objects.end(); ++iter) {
+  for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
+       ++iter) {
     DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
   }
   ClipboardDataBuilder::CommitToClipboard();
 }
 
-void Clipboard::WriteText(const char* text_data, size_t text_len) {
+void ClipboardAura::WriteText(const char* text_data, size_t text_len) {
   ClipboardDataBuilder::WriteText(text_data, text_len);
 }
 
-void Clipboard::WriteHTML(const char* markup_data,
-                          size_t markup_len,
-                          const char* url_data,
-                          size_t url_len) {
+void ClipboardAura::WriteHTML(const char* markup_data,
+                              size_t markup_len,
+                              const char* url_data,
+                              size_t url_len) {
   ClipboardDataBuilder::WriteHTML(markup_data, markup_len, url_data, url_len);
 }
 
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) {
+void ClipboardAura::WriteRTF(const char* rtf_data, size_t data_len) {
   ClipboardDataBuilder::WriteRTF(rtf_data, data_len);
 }
 
-void Clipboard::WriteBookmark(const char* title_data,
-                              size_t title_len,
-                              const char* url_data,
-                              size_t url_len) {
+void ClipboardAura::WriteBookmark(const char* title_data,
+                                  size_t title_len,
+                                  const char* url_data,
+                                  size_t url_len) {
   ClipboardDataBuilder::WriteBookmark(title_data, title_len, url_data, url_len);
 }
 
-void Clipboard::WriteWebSmartPaste() {
+void ClipboardAura::WriteWebSmartPaste() {
   ClipboardDataBuilder::WriteWebSmartPaste();
 }
 
-void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
+void ClipboardAura::WriteBitmap(const SkBitmap& bitmap) {
   ClipboardDataBuilder::WriteBitmap(bitmap);
 }
 
-void Clipboard::WriteData(const FormatType& format,
-                          const char* data_data,
-                          size_t data_len) {
+void ClipboardAura::WriteData(const FormatType& format,
+                              const char* data_data,
+                              size_t data_len) {
   ClipboardDataBuilder::WriteData(format.ToString(), data_data, data_len);
 }
 
diff --git a/ui/base/clipboard/clipboard_aura.h b/ui/base/clipboard/clipboard_aura.h
new file mode 100644
index 0000000..bb2fbc6
--- /dev/null
+++ b/ui/base/clipboard/clipboard_aura.h
@@ -0,0 +1,63 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_AURA_H_
+#define UI_BASE_CLIPBOARD_CLIPBOARD_AURA_H_
+
+#include "ui/base/clipboard/clipboard.h"
+
+namespace ui {
+
+class ClipboardAura : public Clipboard {
+ private:
+  friend class Clipboard;
+
+  ClipboardAura();
+  ~ClipboardAura() override;
+
+  // Clipboard overrides:
+  uint64 GetSequenceNumber(ClipboardType type) override;
+  bool IsFormatAvailable(const FormatType& format,
+                         ClipboardType type) const override;
+  void Clear(ClipboardType type) override;
+  void ReadAvailableTypes(ClipboardType type,
+                          std::vector<base::string16>* types,
+                          bool* contains_filenames) const override;
+  void ReadText(ClipboardType type, base::string16* result) const override;
+  void ReadAsciiText(ClipboardType type, std::string* result) const override;
+  void ReadHTML(ClipboardType type,
+                base::string16* markup,
+                std::string* src_url,
+                uint32* fragment_start,
+                uint32* fragment_end) const override;
+  void ReadRTF(ClipboardType type, std::string* result) const override;
+  SkBitmap ReadImage(ClipboardType type) const override;
+  void ReadCustomData(ClipboardType clipboard_type,
+                      const base::string16& type,
+                      base::string16* result) const override;
+  void ReadBookmark(base::string16* title, std::string* url) const override;
+  void ReadData(const FormatType& format, std::string* result) const override;
+  void WriteObjects(ClipboardType type, const ObjectMap& objects) override;
+  void WriteText(const char* text_data, size_t text_len) override;
+  void WriteHTML(const char* markup_data,
+                 size_t markup_len,
+                 const char* url_data,
+                 size_t url_len) override;
+  void WriteRTF(const char* rtf_data, size_t data_len) override;
+  void WriteBookmark(const char* title_data,
+                     size_t title_len,
+                     const char* url_data,
+                     size_t url_len) override;
+  void WriteWebSmartPaste() override;
+  void WriteBitmap(const SkBitmap& bitmap) override;
+  void WriteData(const FormatType& format,
+                 const char* data_data,
+                 size_t data_len) override;
+
+  DISALLOW_COPY_AND_ASSIGN(ClipboardAura);
+};
+
+}  // namespace ui
+
+#endif  // UI_BASE_CLIPBOARD_CLIPBOARD_AURA_H_
diff --git a/ui/base/clipboard/clipboard_aurax11.cc b/ui/base/clipboard/clipboard_aurax11.cc
index e79f28b..b12c696 100644
--- a/ui/base/clipboard/clipboard_aurax11.cc
+++ b/ui/base/clipboard/clipboard_aurax11.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_aurax11.h"
 
 #include <X11/extensions/Xfixes.h>
 #include <X11/Xatom.h>
@@ -222,11 +222,11 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-// Clipboard::AuraX11Details
+// ClipboardAuraX11::AuraX11Details
 
 // Private implementation of our X11 integration. Keeps X11 headers out of the
 // majority of chrome, which break badly.
-class Clipboard::AuraX11Details : public PlatformEventDispatcher {
+class ClipboardAuraX11::AuraX11Details : public PlatformEventDispatcher {
  public:
   AuraX11Details();
   virtual ~AuraX11Details();
@@ -315,18 +315,21 @@
   DISALLOW_COPY_AND_ASSIGN(AuraX11Details);
 };
 
-Clipboard::AuraX11Details::AuraX11Details()
+ClipboardAuraX11::AuraX11Details::AuraX11Details()
     : x_display_(gfx::GetXDisplay()),
       x_root_window_(DefaultRootWindow(x_display_)),
-      x_window_(XCreateWindow(
-          x_display_, x_root_window_,
-          -100, -100, 10, 10,  // x, y, width, height
-          0,                   // border width
-          CopyFromParent,      // depth
-          InputOnly,
-          CopyFromParent,      // visual
-          0,
-          NULL)),
+      x_window_(XCreateWindow(x_display_,
+                              x_root_window_,
+                              -100,
+                              -100,
+                              10,
+                              10,              // x, y, width, height
+                              0,               // border width
+                              CopyFromParent,  // depth
+                              InputOnly,
+                              CopyFromParent,  // visual
+                              0,
+                              NULL)),
       atom_cache_(x_display_, kAtomsToCache),
       selection_requestor_(x_display_, x_window_, this),
       clipboard_owner_(x_display_, x_window_, atom_cache_.GetAtom(kClipboard)),
@@ -341,14 +344,14 @@
     PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
 }
 
-Clipboard::AuraX11Details::~AuraX11Details() {
+ClipboardAuraX11::AuraX11Details::~AuraX11Details() {
   if (PlatformEventSource::GetInstance())
     PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this);
 
   XDestroyWindow(x_display_, x_window_);
 }
 
-::Atom Clipboard::AuraX11Details::LookupSelectionForClipboardType(
+::Atom ClipboardAuraX11::AuraX11Details::LookupSelectionForClipboardType(
     ClipboardType type) const {
   if (type == CLIPBOARD_TYPE_COPY_PASTE)
     return GetCopyPasteSelection();
@@ -356,12 +359,12 @@
   return XA_PRIMARY;
 }
 
-::Atom Clipboard::AuraX11Details::GetCopyPasteSelection() const {
+::Atom ClipboardAuraX11::AuraX11Details::GetCopyPasteSelection() const {
   return atom_cache_.GetAtom(kClipboard);
 }
 
-const SelectionFormatMap& Clipboard::AuraX11Details::LookupStorageForAtom(
-    ::Atom atom) {
+const SelectionFormatMap&
+ClipboardAuraX11::AuraX11Details::LookupStorageForAtom(::Atom atom) {
   if (atom == XA_PRIMARY)
     return primary_owner_.selection_format_map();
 
@@ -369,27 +372,28 @@
   return clipboard_owner_.selection_format_map();
 }
 
-void Clipboard::AuraX11Details::CreateNewClipboardData() {
+void ClipboardAuraX11::AuraX11Details::CreateNewClipboardData() {
   clipboard_data_ = SelectionFormatMap();
 }
 
-void Clipboard::AuraX11Details::InsertMapping(
+void ClipboardAuraX11::AuraX11Details::InsertMapping(
     const std::string& key,
     const scoped_refptr<base::RefCountedMemory>& memory) {
   ::Atom atom_key = atom_cache_.GetAtom(key.c_str());
   clipboard_data_.Insert(atom_key, memory);
 }
 
-void Clipboard::AuraX11Details::TakeOwnershipOfSelection(ClipboardType type) {
+void ClipboardAuraX11::AuraX11Details::TakeOwnershipOfSelection(
+    ClipboardType type) {
   if (type == CLIPBOARD_TYPE_COPY_PASTE)
     return clipboard_owner_.TakeOwnershipOfSelection(clipboard_data_);
   else
     return primary_owner_.TakeOwnershipOfSelection(clipboard_data_);
 }
 
-SelectionData Clipboard::AuraX11Details::RequestAndWaitForTypes(
+SelectionData ClipboardAuraX11::AuraX11Details::RequestAndWaitForTypes(
     ClipboardType type,
-    const std::vector< ::Atom>& types) {
+    const std::vector<::Atom>& types) {
   ::Atom selection_name = LookupSelectionForClipboardType(type);
   if (XGetSelectionOwner(x_display_, selection_name) == x_window_) {
     // We can local fastpath instead of playing the nested message loop game
@@ -415,7 +419,7 @@
   return SelectionData();
 }
 
-TargetList Clipboard::AuraX11Details::WaitAndGetTargetsList(
+TargetList ClipboardAuraX11::AuraX11Details::WaitAndGetTargetsList(
     ClipboardType type) {
   ::Atom selection_name = LookupSelectionForClipboardType(type);
   std::vector< ::Atom> out;
@@ -471,25 +475,25 @@
   return TargetList(out, &atom_cache_);
 }
 
-std::vector< ::Atom> Clipboard::AuraX11Details::GetTextAtoms() const {
+std::vector<::Atom> ClipboardAuraX11::AuraX11Details::GetTextAtoms() const {
   return GetTextAtomsFrom(&atom_cache_);
 }
 
-std::vector< ::Atom> Clipboard::AuraX11Details::GetAtomsForFormat(
+std::vector<::Atom> ClipboardAuraX11::AuraX11Details::GetAtomsForFormat(
     const Clipboard::FormatType& format) {
   std::vector< ::Atom> atoms;
   atoms.push_back(atom_cache_.GetAtom(format.ToString().c_str()));
   return atoms;
 }
 
-void Clipboard::AuraX11Details::Clear(ClipboardType type) {
+void ClipboardAuraX11::AuraX11Details::Clear(ClipboardType type) {
   if (type == CLIPBOARD_TYPE_COPY_PASTE)
     clipboard_owner_.ClearSelectionOwner();
   else
     primary_owner_.ClearSelectionOwner();
 }
 
-void Clipboard::AuraX11Details::StoreCopyPasteDataAndWait() {
+void ClipboardAuraX11::AuraX11Details::StoreCopyPasteDataAndWait() {
   ::Atom selection = GetCopyPasteSelection();
   if (XGetSelectionOwner(x_display_, selection) != x_window_)
     return;
@@ -512,7 +516,8 @@
                       base::TimeTicks::Now() - start);
 }
 
-bool Clipboard::AuraX11Details::CanDispatchEvent(const PlatformEvent& event) {
+bool ClipboardAuraX11::AuraX11Details::CanDispatchEvent(
+    const PlatformEvent& event) {
   if (event->xany.window == x_window_)
     return true;
 
@@ -524,7 +529,8 @@
   return false;
 }
 
-uint32_t Clipboard::AuraX11Details::DispatchEvent(const PlatformEvent& xev) {
+uint32_t ClipboardAuraX11::AuraX11Details::DispatchEvent(
+    const PlatformEvent& xev) {
   switch (xev->type) {
     case SelectionRequest: {
       if (xev->xselectionrequest.selection == XA_PRIMARY) {
@@ -646,20 +652,25 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-// Clipboard
+// Clipboard factory method.
+Clipboard* Clipboard::Create() {
+  return new ClipboardAuraX11;
+}
 
-Clipboard::Clipboard()
-    : aurax11_details_(new AuraX11Details) {
+///////////////////////////////////////////////////////////////////////////////
+// ClipboardAuraX11
+
+ClipboardAuraX11::ClipboardAuraX11() : aurax11_details_(new AuraX11Details) {
   DCHECK(CalledOnValidThread());
 }
 
-Clipboard::~Clipboard() {
+ClipboardAuraX11::~ClipboardAuraX11() {
   DCHECK(CalledOnValidThread());
 
   aurax11_details_->StoreCopyPasteDataAndWait();
 }
 
-uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
+uint64 ClipboardAuraX11::GetSequenceNumber(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   if (type == CLIPBOARD_TYPE_COPY_PASTE)
     return SelectionChangeObserver::GetInstance()->clipboard_sequence_number();
@@ -667,8 +678,8 @@
     return SelectionChangeObserver::GetInstance()->primary_sequence_number();
 }
 
-bool Clipboard::IsFormatAvailable(const FormatType& format,
-                                  ClipboardType type) const {
+bool ClipboardAuraX11::IsFormatAvailable(const FormatType& format,
+                                         ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardType(type));
 
@@ -680,15 +691,15 @@
   return target_list.ContainsFormat(format);
 }
 
-void Clipboard::Clear(ClipboardType type) {
+void ClipboardAuraX11::Clear(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardType(type));
   aurax11_details_->Clear(type);
 }
 
-void Clipboard::ReadAvailableTypes(ClipboardType type,
-                                   std::vector<base::string16>* types,
-                                   bool* contains_filenames) const {
+void ClipboardAuraX11::ReadAvailableTypes(ClipboardType type,
+                                          std::vector<base::string16>* types,
+                                          bool* contains_filenames) const {
   DCHECK(CalledOnValidThread());
   if (!types || !contains_filenames) {
     NOTREACHED();
@@ -715,7 +726,8 @@
     ReadCustomDataTypes(data.GetData(), data.GetSize(), types);
 }
 
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
+void ClipboardAuraX11::ReadText(ClipboardType type,
+                                base::string16* result) const {
   DCHECK(CalledOnValidThread());
 
   SelectionData data(aurax11_details_->RequestAndWaitForTypes(
@@ -726,7 +738,8 @@
   }
 }
 
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
+void ClipboardAuraX11::ReadAsciiText(ClipboardType type,
+                                     std::string* result) const {
   DCHECK(CalledOnValidThread());
 
   SelectionData data(aurax11_details_->RequestAndWaitForTypes(
@@ -737,11 +750,11 @@
 
 // TODO(estade): handle different charsets.
 // TODO(port): set *src_url.
-void Clipboard::ReadHTML(ClipboardType type,
-                         base::string16* markup,
-                         std::string* src_url,
-                         uint32* fragment_start,
-                         uint32* fragment_end) const {
+void ClipboardAuraX11::ReadHTML(ClipboardType type,
+                                base::string16* markup,
+                                std::string* src_url,
+                                uint32* fragment_start,
+                                uint32* fragment_end) const {
   DCHECK(CalledOnValidThread());
   markup->clear();
   if (src_url)
@@ -760,7 +773,7 @@
   }
 }
 
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const {
+void ClipboardAuraX11::ReadRTF(ClipboardType type, std::string* result) const {
   DCHECK(CalledOnValidThread());
 
   SelectionData data(aurax11_details_->RequestAndWaitForTypes(
@@ -769,7 +782,7 @@
     data.AssignTo(result);
 }
 
-SkBitmap Clipboard::ReadImage(ClipboardType type) const {
+SkBitmap ClipboardAuraX11::ReadImage(ClipboardType type) const {
   DCHECK(CalledOnValidThread());
 
   SelectionData data(aurax11_details_->RequestAndWaitForTypes(
@@ -783,9 +796,9 @@
   return SkBitmap();
 }
 
-void Clipboard::ReadCustomData(ClipboardType clipboard_type,
-                               const base::string16& type,
-                               base::string16* result) const {
+void ClipboardAuraX11::ReadCustomData(ClipboardType clipboard_type,
+                                      const base::string16& type,
+                                      base::string16* result) const {
   DCHECK(CalledOnValidThread());
 
   SelectionData data(aurax11_details_->RequestAndWaitForTypes(
@@ -795,13 +808,15 @@
     ReadCustomDataForType(data.GetData(), data.GetSize(), type, result);
 }
 
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
+void ClipboardAuraX11::ReadBookmark(base::string16* title,
+                                    std::string* url) const {
   DCHECK(CalledOnValidThread());
   // TODO(erg): This was left NOTIMPLEMENTED() in the gtk port too.
   NOTIMPLEMENTED();
 }
 
-void Clipboard::ReadData(const FormatType& format, std::string* result) const {
+void ClipboardAuraX11::ReadData(const FormatType& format,
+                                std::string* result) const {
   DCHECK(CalledOnValidThread());
 
   SelectionData data(aurax11_details_->RequestAndWaitForTypes(
@@ -810,13 +825,14 @@
     data.AssignTo(result);
 }
 
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) {
+void ClipboardAuraX11::WriteObjects(ClipboardType type,
+                                    const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardType(type));
 
   aurax11_details_->CreateNewClipboardData();
-  for (ObjectMap::const_iterator iter = objects.begin();
-       iter != objects.end(); ++iter) {
+  for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
+       ++iter) {
     DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
   }
   aurax11_details_->TakeOwnershipOfSelection(type);
@@ -836,7 +852,7 @@
   }
 }
 
-void Clipboard::WriteText(const char* text_data, size_t text_len) {
+void ClipboardAuraX11::WriteText(const char* text_data, size_t text_len) {
   std::string str(text_data, text_len);
   scoped_refptr<base::RefCountedMemory> mem(
       base::RefCountedString::TakeString(&str));
@@ -847,10 +863,10 @@
   aurax11_details_->InsertMapping(kUtf8String, mem);
 }
 
-void Clipboard::WriteHTML(const char* markup_data,
-                          size_t markup_len,
-                          const char* url_data,
-                          size_t url_len) {
+void ClipboardAuraX11::WriteHTML(const char* markup_data,
+                                 size_t markup_len,
+                                 const char* url_data,
+                                 size_t url_len) {
   // TODO(estade): We need to expand relative links with |url_data|.
   static const char* html_prefix = "<meta http-equiv=\"content-type\" "
                                    "content=\"text/html; charset=utf-8\">";
@@ -864,14 +880,14 @@
   aurax11_details_->InsertMapping(kMimeTypeHTML, mem);
 }
 
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) {
+void ClipboardAuraX11::WriteRTF(const char* rtf_data, size_t data_len) {
   WriteData(GetRtfFormatType(), rtf_data, data_len);
 }
 
-void Clipboard::WriteBookmark(const char* title_data,
-                              size_t title_len,
-                              const char* url_data,
-                              size_t url_len) {
+void ClipboardAuraX11::WriteBookmark(const char* title_data,
+                                     size_t title_len,
+                                     const char* url_data,
+                                     size_t url_len) {
   // Write as a mozilla url (UTF16: URL, newline, title).
   base::string16 url = base::UTF8ToUTF16(std::string(url_data, url_len) + "\n");
   base::string16 title = base::UTF8ToUTF16(std::string(title_data, title_len));
@@ -887,7 +903,7 @@
 
 // Write an extra flavor that signifies WebKit was the last to modify the
 // pasteboard. This flavor has no data.
-void Clipboard::WriteWebSmartPaste() {
+void ClipboardAuraX11::WriteWebSmartPaste() {
   std::string empty;
   aurax11_details_->InsertMapping(
       kMimeTypeWebkitSmartPaste,
@@ -895,7 +911,7 @@
           base::RefCountedString::TakeString(&empty)));
 }
 
-void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
+void ClipboardAuraX11::WriteBitmap(const SkBitmap& bitmap) {
   // Encode the bitmap as a PNG for transport.
   std::vector<unsigned char> output;
   if (gfx::PNGCodec::FastEncodeBGRASkBitmap(bitmap, false, &output)) {
@@ -905,9 +921,9 @@
   }
 }
 
-void Clipboard::WriteData(const FormatType& format,
-                          const char* data_data,
-                          size_t data_len) {
+void ClipboardAuraX11::WriteData(const FormatType& format,
+                                 const char* data_data,
+                                 size_t data_len) {
   // We assume that certain mapping types are only written by trusted code.
   // Therefore we must upkeep their integrity.
   if (format.Equals(GetBitmapFormatType()))
diff --git a/ui/base/clipboard/clipboard_aurax11.h b/ui/base/clipboard/clipboard_aurax11.h
new file mode 100644
index 0000000..fa734c0
--- /dev/null
+++ b/ui/base/clipboard/clipboard_aurax11.h
@@ -0,0 +1,70 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_AURAX11_H_
+#define UI_BASE_CLIPBOARD_CLIPBOARD_AURAX11_H_
+
+#include "ui/base/clipboard/clipboard.h"
+
+#include "base/memory/scoped_ptr.h"
+
+namespace ui {
+
+class ClipboardAuraX11 : public Clipboard {
+ private:
+  friend class Clipboard;
+
+  ClipboardAuraX11();
+  ~ClipboardAuraX11() override;
+
+  // Clipboard overrides:
+  uint64 GetSequenceNumber(ClipboardType type) override;
+  bool IsFormatAvailable(const FormatType& format,
+                         ClipboardType type) const override;
+  void Clear(ClipboardType type) override;
+  void ReadAvailableTypes(ClipboardType type,
+                          std::vector<base::string16>* types,
+                          bool* contains_filenames) const override;
+  void ReadText(ClipboardType type, base::string16* result) const override;
+  void ReadAsciiText(ClipboardType type, std::string* result) const override;
+  void ReadHTML(ClipboardType type,
+                base::string16* markup,
+                std::string* src_url,
+                uint32* fragment_start,
+                uint32* fragment_end) const override;
+  void ReadRTF(ClipboardType type, std::string* result) const override;
+  SkBitmap ReadImage(ClipboardType type) const override;
+  void ReadCustomData(ClipboardType clipboard_type,
+                      const base::string16& type,
+                      base::string16* result) const override;
+  void ReadBookmark(base::string16* title, std::string* url) const override;
+  void ReadData(const FormatType& format, std::string* result) const override;
+  void WriteObjects(ClipboardType type, const ObjectMap& objects) override;
+  void WriteText(const char* text_data, size_t text_len) override;
+  void WriteHTML(const char* markup_data,
+                 size_t markup_len,
+                 const char* url_data,
+                 size_t url_len) override;
+  void WriteRTF(const char* rtf_data, size_t data_len) override;
+  void WriteBookmark(const char* title_data,
+                     size_t title_len,
+                     const char* url_data,
+                     size_t url_len) override;
+  void WriteWebSmartPaste() override;
+  void WriteBitmap(const SkBitmap& bitmap) override;
+  void WriteData(const FormatType& format,
+                 const char* data_data,
+                 size_t data_len) override;
+
+  // TODO(dcheng): Is this still needed now that each platform clipboard has its
+  // own class derived from Clipboard?
+  class AuraX11Details;
+  scoped_ptr<AuraX11Details> aurax11_details_;
+
+  DISALLOW_COPY_AND_ASSIGN(ClipboardAuraX11);
+};
+
+}  // namespace ui
+
+#endif  // UI_BASE_CLIPBOARD_CLIPBOARD_AURAX11_H_
diff --git a/ui/base/clipboard/clipboard_mac.h b/ui/base/clipboard/clipboard_mac.h
new file mode 100644
index 0000000..203c374
--- /dev/null
+++ b/ui/base/clipboard/clipboard_mac.h
@@ -0,0 +1,63 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_MAC_H_
+#define UI_BASE_CLIPBOARD_CLIPBOARD_MAC_H_
+
+#include "ui/base/clipboard/clipboard.h"
+
+namespace ui {
+
+class ClipboardMac : public Clipboard {
+ private:
+  friend class Clipboard;
+
+  ClipboardMac();
+  ~ClipboardMac() override;
+
+  // Clipboard overrides:
+  uint64 GetSequenceNumber(ClipboardType type) override;
+  bool IsFormatAvailable(const FormatType& format,
+                         ClipboardType type) const override;
+  void Clear(ClipboardType type) override;
+  void ReadAvailableTypes(ClipboardType type,
+                          std::vector<base::string16>* types,
+                          bool* contains_filenames) const override;
+  void ReadText(ClipboardType type, base::string16* result) const override;
+  void ReadAsciiText(ClipboardType type, std::string* result) const override;
+  void ReadHTML(ClipboardType type,
+                base::string16* markup,
+                std::string* src_url,
+                uint32* fragment_start,
+                uint32* fragment_end) const override;
+  void ReadRTF(ClipboardType type, std::string* result) const override;
+  SkBitmap ReadImage(ClipboardType type) const override;
+  void ReadCustomData(ClipboardType clipboard_type,
+                      const base::string16& type,
+                      base::string16* result) const override;
+  void ReadBookmark(base::string16* title, std::string* url) const override;
+  void ReadData(const FormatType& format, std::string* result) const override;
+  void WriteObjects(ClipboardType type, const ObjectMap& objects) override;
+  void WriteText(const char* text_data, size_t text_len) override;
+  void WriteHTML(const char* markup_data,
+                 size_t markup_len,
+                 const char* url_data,
+                 size_t url_len) override;
+  void WriteRTF(const char* rtf_data, size_t data_len) override;
+  void WriteBookmark(const char* title_data,
+                     size_t title_len,
+                     const char* url_data,
+                     size_t url_len) override;
+  void WriteWebSmartPaste() override;
+  void WriteBitmap(const SkBitmap& bitmap) override;
+  void WriteData(const FormatType& format,
+                 const char* data_data,
+                 size_t data_len) override;
+
+  DISALLOW_COPY_AND_ASSIGN(ClipboardMac);
+};
+
+}  // namespace ui
+
+#endif  // UI_BASE_CLIPBOARD_CLIPBOARD_MAC_H_
diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm
index 88a9ff1..63c1edf 100644
--- a/ui/base/clipboard/clipboard_mac.mm
+++ b/ui/base/clipboard/clipboard_mac.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_mac.h"
 
 #import <Cocoa/Cocoa.h>
 
@@ -165,16 +165,22 @@
   return type;
 }
 
-// Clipboard implementation.
-Clipboard::Clipboard() {
+// Clipboard factory method.
+// static
+Clipboard* Clipboard::Create() {
+  return new ClipboardMac;
+}
+
+// ClipboardMac implementation.
+ClipboardMac::ClipboardMac() {
   DCHECK(CalledOnValidThread());
 }
 
-Clipboard::~Clipboard() {
+ClipboardMac::~ClipboardMac() {
   DCHECK(CalledOnValidThread());
 }
 
-uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
+uint64 ClipboardMac::GetSequenceNumber(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -182,8 +188,8 @@
   return [pb changeCount];
 }
 
-bool Clipboard::IsFormatAvailable(const FormatType& format,
-                                  ClipboardType type) const {
+bool ClipboardMac::IsFormatAvailable(const FormatType& format,
+                                     ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -199,7 +205,7 @@
   return [types containsObject:format.ToNSString()];
 }
 
-void Clipboard::Clear(ClipboardType type) {
+void ClipboardMac::Clear(ClipboardType type) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -207,9 +213,9 @@
   [pb declareTypes:[NSArray array] owner:nil];
 }
 
-void Clipboard::ReadAvailableTypes(ClipboardType type,
-                                   std::vector<base::string16>* types,
-                                   bool* contains_filenames) const {
+void ClipboardMac::ReadAvailableTypes(ClipboardType type,
+                                      std::vector<base::string16>* types,
+                                      bool* contains_filenames) const {
   DCHECK(CalledOnValidThread());
   types->clear();
   if (IsFormatAvailable(Clipboard::GetPlainTextFormatType(), type))
@@ -230,7 +236,7 @@
   }
 }
 
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
+void ClipboardMac::ReadText(ClipboardType type, base::string16* result) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   NSPasteboard* pb = GetPasteboard();
@@ -239,7 +245,8 @@
   *result = base::SysNSStringToUTF16(contents);
 }
 
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
+void ClipboardMac::ReadAsciiText(ClipboardType type,
+                                 std::string* result) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   NSPasteboard* pb = GetPasteboard();
@@ -251,11 +258,11 @@
     result->assign([contents UTF8String]);
 }
 
-void Clipboard::ReadHTML(ClipboardType type,
-                         base::string16* markup,
-                         std::string* src_url,
-                         uint32* fragment_start,
-                         uint32* fragment_end) const {
+void ClipboardMac::ReadHTML(ClipboardType type,
+                            base::string16* markup,
+                            std::string* src_url,
+                            uint32* fragment_start,
+                            uint32* fragment_end) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -282,14 +289,14 @@
   *fragment_end = static_cast<uint32>(markup->length());
 }
 
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const {
+void ClipboardMac::ReadRTF(ClipboardType type, std::string* result) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
   return ReadData(GetRtfFormatType(), result);
 }
 
-SkBitmap Clipboard::ReadImage(ClipboardType type) const {
+SkBitmap ClipboardMac::ReadImage(ClipboardType type) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -307,9 +314,9 @@
   return bitmap;
 }
 
-void Clipboard::ReadCustomData(ClipboardType clipboard_type,
-                               const base::string16& type,
-                               base::string16* result) const {
+void ClipboardMac::ReadCustomData(ClipboardType clipboard_type,
+                                  const base::string16& type,
+                                  base::string16* result) const {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(clipboard_type, CLIPBOARD_TYPE_COPY_PASTE);
 
@@ -321,7 +328,7 @@
   }
 }
 
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
+void ClipboardMac::ReadBookmark(base::string16* title, std::string* url) const {
   DCHECK(CalledOnValidThread());
   NSPasteboard* pb = GetPasteboard();
 
@@ -339,7 +346,8 @@
   }
 }
 
-void Clipboard::ReadData(const FormatType& format, std::string* result) const {
+void ClipboardMac::ReadData(const FormatType& format,
+                            std::string* result) const {
   DCHECK(CalledOnValidThread());
   NSPasteboard* pb = GetPasteboard();
   NSData* data = [pb dataForType:format.ToNSString()];
@@ -347,35 +355,35 @@
     result->assign(static_cast<const char*>([data bytes]), [data length]);
 }
 
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) {
+void ClipboardMac::WriteObjects(ClipboardType type, const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
   NSPasteboard* pb = GetPasteboard();
   [pb declareTypes:[NSArray array] owner:nil];
 
-  for (ObjectMap::const_iterator iter = objects.begin();
-       iter != objects.end(); ++iter) {
+  for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
+       ++iter) {
     DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
   }
 }
 
-void Clipboard::WriteText(const char* text_data, size_t text_len) {
+void ClipboardMac::WriteText(const char* text_data, size_t text_len) {
   std::string text_str(text_data, text_len);
-  NSString *text = base::SysUTF8ToNSString(text_str);
+  NSString* text = base::SysUTF8ToNSString(text_str);
   NSPasteboard* pb = GetPasteboard();
   [pb addTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
   [pb setString:text forType:NSStringPboardType];
 }
 
-void Clipboard::WriteHTML(const char* markup_data,
-                          size_t markup_len,
-                          const char* url_data,
-                          size_t url_len) {
+void ClipboardMac::WriteHTML(const char* markup_data,
+                             size_t markup_len,
+                             const char* url_data,
+                             size_t url_len) {
   // We need to mark it as utf-8. (see crbug.com/11957)
   std::string html_fragment_str("<meta charset='utf-8'>");
   html_fragment_str.append(markup_data, markup_len);
-  NSString *html_fragment = base::SysUTF8ToNSString(html_fragment_str);
+  NSString* html_fragment = base::SysUTF8ToNSString(html_fragment_str);
 
   // TODO(avi): url_data?
   NSPasteboard* pb = GetPasteboard();
@@ -383,18 +391,18 @@
   [pb setString:html_fragment forType:NSHTMLPboardType];
 }
 
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) {
+void ClipboardMac::WriteRTF(const char* rtf_data, size_t data_len) {
   WriteData(GetRtfFormatType(), rtf_data, data_len);
 }
 
-void Clipboard::WriteBookmark(const char* title_data,
-                              size_t title_len,
-                              const char* url_data,
-                              size_t url_len) {
+void ClipboardMac::WriteBookmark(const char* title_data,
+                                 size_t title_len,
+                                 const char* url_data,
+                                 size_t url_len) {
   std::string title_str(title_data, title_len);
-  NSString *title =  base::SysUTF8ToNSString(title_str);
+  NSString* title = base::SysUTF8ToNSString(title_str);
   std::string url_str(url_data, url_len);
-  NSString *url =  base::SysUTF8ToNSString(url_str);
+  NSString* url = base::SysUTF8ToNSString(url_str);
 
   // TODO(playmobil): In the Windows version of this function, an HTML
   // representation of the bookmark is also added to the clipboard, to support
@@ -404,31 +412,29 @@
 
   NSPasteboard* pb = GetPasteboard();
   // passing UTIs into the pasteboard methods is valid >= 10.5
-  [pb addTypes:[NSArray arrayWithObjects:NSURLPboardType,
-                                         kUTTypeURLName,
-                                         nil]
+  [pb addTypes:[NSArray arrayWithObjects:NSURLPboardType, kUTTypeURLName, nil]
          owner:nil];
   [nsurl writeToPasteboard:pb];
   [pb setString:title forType:kUTTypeURLName];
 }
 
-void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
+void ClipboardMac::WriteBitmap(const SkBitmap& bitmap) {
   NSImage* image = gfx::SkBitmapToNSImageWithColorSpace(
       bitmap, base::mac::GetSystemColorSpace());
   // An API to ask the NSImage to write itself to the clipboard comes in 10.6 :(
   // For now, spit out the image as a TIFF.
   NSPasteboard* pb = GetPasteboard();
   [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil];
-  NSData *tiff_data = [image TIFFRepresentation];
+  NSData* tiff_data = [image TIFFRepresentation];
   LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard";
   if (tiff_data) {
     [pb setData:tiff_data forType:NSTIFFPboardType];
   }
 }
 
-void Clipboard::WriteData(const FormatType& format,
-                          const char* data_data,
-                          size_t data_len) {
+void ClipboardMac::WriteData(const FormatType& format,
+                             const char* data_data,
+                             size_t data_len) {
   NSPasteboard* pb = GetPasteboard();
   [pb addTypes:[NSArray arrayWithObject:format.ToNSString()] owner:nil];
   [pb setData:[NSData dataWithBytes:data_data length:data_len]
@@ -437,7 +443,7 @@
 
 // Write an extra flavor that signifies WebKit was the last to modify the
 // pasteboard. This flavor has no data.
-void Clipboard::WriteWebSmartPaste() {
+void ClipboardMac::WriteWebSmartPaste() {
   NSPasteboard* pb = GetPasteboard();
   NSString* format = GetWebKitSmartPasteFormatType().ToNSString();
   [pb addTypes:[NSArray arrayWithObject:format] owner:nil];
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc
index 18a42e2..b269351 100644
--- a/ui/base/clipboard/clipboard_win.cc
+++ b/ui/base/clipboard/clipboard_win.cc
@@ -5,7 +5,7 @@
 // Many of these functions are based on those found in
 // webkit/port/platform/PasteboardWin.cpp
 
-#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_win.h"
 
 #include <shellapi.h>
 #include <shlobj.h>
@@ -159,6 +159,31 @@
   }
 }
 
+void ParseBookmarkClipboardFormat(const base::string16& bookmark,
+                                  base::string16* title,
+                                  std::string* url) {
+  const base::string16 kDelim = base::ASCIIToUTF16("\r\n");
+
+  const size_t title_end = bookmark.find_first_of(kDelim);
+  if (title)
+    title->assign(bookmark.substr(0, title_end));
+
+  if (url) {
+    const size_t url_start = bookmark.find_first_not_of(kDelim, title_end);
+    if (url_start != base::string16::npos) {
+      *url =
+          base::UTF16ToUTF8(bookmark.substr(url_start, base::string16::npos));
+    }
+  }
+}
+
+void FreeData(unsigned int format, HANDLE data) {
+  if (format == CF_BITMAP)
+    ::DeleteObject(static_cast<HBITMAP>(data));
+  else
+    ::GlobalFree(data);
+}
+
 }  // namespace
 
 // Clipboard::FormatType implementation.
@@ -201,11 +226,11 @@
 }
 
 bool Clipboard::FormatType::operator<(const FormatType& other) const {
-  return ToUINT() < other.ToUINT();
+  return data_.cfFormat < other.data_.cfFormat;
 }
 
 bool Clipboard::FormatType::Equals(const FormatType& other) const {
-  return ToUINT() == other.ToUINT();
+  return data_.cfFormat == other.data_.cfFormat;
 }
 
 // Various predefined FormatTypes.
@@ -348,27 +373,33 @@
   return type;
 }
 
-// Clipboard implementation.
-Clipboard::Clipboard() {
+// Clipboard factory method.
+// static
+Clipboard* Clipboard::Create() {
+  return new ClipboardWin;
+}
+
+// ClipboardWin implementation.
+ClipboardWin::ClipboardWin() {
   if (base::MessageLoopForUI::IsCurrent())
     clipboard_owner_.reset(new base::win::MessageWindow());
 }
 
-Clipboard::~Clipboard() {
+ClipboardWin::~ClipboardWin() {
 }
 
-uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
+uint64 ClipboardWin::GetSequenceNumber(ClipboardType type) {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   return ::GetClipboardSequenceNumber();
 }
 
-bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format,
-                                  ClipboardType type) const {
+bool ClipboardWin::IsFormatAvailable(const Clipboard::FormatType& format,
+                                     ClipboardType type) const {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
-  return ::IsClipboardFormatAvailable(format.ToUINT()) != FALSE;
+  return ::IsClipboardFormatAvailable(format.ToFormatEtc().cfFormat) != FALSE;
 }
 
-void Clipboard::Clear(ClipboardType type) {
+void ClipboardWin::Clear(ClipboardType type) {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   ScopedClipboard clipboard;
   if (!clipboard.Acquire(GetClipboardWindow()))
@@ -377,20 +408,21 @@
   ::EmptyClipboard();
 }
 
-void Clipboard::ReadAvailableTypes(ClipboardType type,
-                                   std::vector<base::string16>* types,
-                                   bool* contains_filenames) const {
+void ClipboardWin::ReadAvailableTypes(ClipboardType type,
+                                      std::vector<base::string16>* types,
+                                      bool* contains_filenames) const {
   if (!types || !contains_filenames) {
     NOTREACHED();
     return;
   }
 
   types->clear();
-  if (::IsClipboardFormatAvailable(GetPlainTextFormatType().ToUINT()))
+  if (::IsClipboardFormatAvailable(
+          GetPlainTextFormatType().ToFormatEtc().cfFormat))
     types->push_back(base::UTF8ToUTF16(kMimeTypeText));
-  if (::IsClipboardFormatAvailable(GetHtmlFormatType().ToUINT()))
+  if (::IsClipboardFormatAvailable(GetHtmlFormatType().ToFormatEtc().cfFormat))
     types->push_back(base::UTF8ToUTF16(kMimeTypeHTML));
-  if (::IsClipboardFormatAvailable(GetRtfFormatType().ToUINT()))
+  if (::IsClipboardFormatAvailable(GetRtfFormatType().ToFormatEtc().cfFormat))
     types->push_back(base::UTF8ToUTF16(kMimeTypeRTF));
   if (::IsClipboardFormatAvailable(CF_DIB))
     types->push_back(base::UTF8ToUTF16(kMimeTypePNG));
@@ -401,7 +433,8 @@
   if (!clipboard.Acquire(GetClipboardWindow()))
     return;
 
-  HANDLE hdata = ::GetClipboardData(GetWebCustomDataFormatType().ToUINT());
+  HANDLE hdata =
+      ::GetClipboardData(GetWebCustomDataFormatType().ToFormatEtc().cfFormat);
   if (!hdata)
     return;
 
@@ -409,7 +442,7 @@
   ::GlobalUnlock(hdata);
 }
 
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
+void ClipboardWin::ReadText(ClipboardType type, base::string16* result) const {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   if (!result) {
     NOTREACHED();
@@ -431,7 +464,8 @@
   ::GlobalUnlock(data);
 }
 
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
+void ClipboardWin::ReadAsciiText(ClipboardType type,
+                                 std::string* result) const {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
   if (!result) {
     NOTREACHED();
@@ -453,11 +487,11 @@
   ::GlobalUnlock(data);
 }
 
-void Clipboard::ReadHTML(ClipboardType type,
-                         base::string16* markup,
-                         std::string* src_url,
-                         uint32* fragment_start,
-                         uint32* fragment_end) const {
+void ClipboardWin::ReadHTML(ClipboardType type,
+                            base::string16* markup,
+                            std::string* src_url,
+                            uint32* fragment_start,
+                            uint32* fragment_end) const {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
   markup->clear();
@@ -473,7 +507,7 @@
   if (!clipboard.Acquire(GetClipboardWindow()))
     return;
 
-  HANDLE data = ::GetClipboardData(GetHtmlFormatType().ToUINT());
+  HANDLE data = ::GetClipboardData(GetHtmlFormatType().ToFormatEtc().cfFormat);
   if (!data)
     return;
 
@@ -505,13 +539,13 @@
   *fragment_end = base::checked_cast<uint32>(offsets[1]);
 }
 
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const {
+void ClipboardWin::ReadRTF(ClipboardType type, std::string* result) const {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
   ReadData(GetRtfFormatType(), result);
 }
 
-SkBitmap Clipboard::ReadImage(ClipboardType type) const {
+SkBitmap ClipboardWin::ReadImage(ClipboardType type) const {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
   // Acquire the clipboard.
@@ -581,9 +615,9 @@
   return canvas.ExtractImageRep().sk_bitmap();
 }
 
-void Clipboard::ReadCustomData(ClipboardType clipboard_type,
-                               const base::string16& type,
-                               base::string16* result) const {
+void ClipboardWin::ReadCustomData(ClipboardType clipboard_type,
+                                  const base::string16& type,
+                                  base::string16* result) const {
   DCHECK_EQ(clipboard_type, CLIPBOARD_TYPE_COPY_PASTE);
 
   // Acquire the clipboard.
@@ -591,7 +625,8 @@
   if (!clipboard.Acquire(GetClipboardWindow()))
     return;
 
-  HANDLE hdata = ::GetClipboardData(GetWebCustomDataFormatType().ToUINT());
+  HANDLE hdata =
+      ::GetClipboardData(GetWebCustomDataFormatType().ToFormatEtc().cfFormat);
   if (!hdata)
     return;
 
@@ -599,7 +634,7 @@
   ::GlobalUnlock(hdata);
 }
 
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
+void ClipboardWin::ReadBookmark(base::string16* title, std::string* url) const {
   if (title)
     title->clear();
 
@@ -611,7 +646,7 @@
   if (!clipboard.Acquire(GetClipboardWindow()))
     return;
 
-  HANDLE data = ::GetClipboardData(GetUrlWFormatType().ToUINT());
+  HANDLE data = ::GetClipboardData(GetUrlWFormatType().ToFormatEtc().cfFormat);
   if (!data)
     return;
 
@@ -621,7 +656,8 @@
   ParseBookmarkClipboardFormat(bookmark, title, url);
 }
 
-void Clipboard::ReadData(const FormatType& format, std::string* result) const {
+void ClipboardWin::ReadData(const FormatType& format,
+                            std::string* result) const {
   if (!result) {
     NOTREACHED();
     return;
@@ -631,7 +667,7 @@
   if (!clipboard.Acquire(GetClipboardWindow()))
     return;
 
-  HANDLE data = ::GetClipboardData(format.ToUINT());
+  HANDLE data = ::GetClipboardData(format.ToFormatEtc().cfFormat);
   if (!data)
     return;
 
@@ -640,26 +676,7 @@
   ::GlobalUnlock(data);
 }
 
-// static
-void Clipboard::ParseBookmarkClipboardFormat(const base::string16& bookmark,
-                                             base::string16* title,
-                                             std::string* url) {
-  const base::string16 kDelim = base::ASCIIToUTF16("\r\n");
-
-  const size_t title_end = bookmark.find_first_of(kDelim);
-  if (title)
-    title->assign(bookmark.substr(0, title_end));
-
-  if (url) {
-    const size_t url_start = bookmark.find_first_not_of(kDelim, title_end);
-    if (url_start != base::string16::npos) {
-      *url = base::UTF16ToUTF8(
-          bookmark.substr(url_start, base::string16::npos));
-    }
-  }
-}
-
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) {
+void ClipboardWin::WriteObjects(ClipboardType type, const ObjectMap& objects) {
   DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
 
   ScopedClipboard clipboard;
@@ -668,13 +685,13 @@
 
   ::EmptyClipboard();
 
-  for (ObjectMap::const_iterator iter = objects.begin();
-       iter != objects.end(); ++iter) {
+  for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
+       ++iter) {
     DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
   }
 }
 
-void Clipboard::WriteText(const char* text_data, size_t text_len) {
+void ClipboardWin::WriteText(const char* text_data, size_t text_len) {
   base::string16 text;
   base::UTF8ToUTF16(text_data, text_len, &text);
   HGLOBAL glob = CreateGlobalData(text);
@@ -682,10 +699,10 @@
   WriteToClipboard(CF_UNICODETEXT, glob);
 }
 
-void Clipboard::WriteHTML(const char* markup_data,
-                          size_t markup_len,
-                          const char* url_data,
-                          size_t url_len) {
+void ClipboardWin::WriteHTML(const char* markup_data,
+                             size_t markup_len,
+                             const char* url_data,
+                             size_t url_len) {
   std::string markup(markup_data, markup_len);
   std::string url;
 
@@ -695,17 +712,17 @@
   std::string html_fragment = ClipboardUtil::HtmlToCFHtml(markup, url);
   HGLOBAL glob = CreateGlobalData(html_fragment);
 
-  WriteToClipboard(Clipboard::GetHtmlFormatType().ToUINT(), glob);
+  WriteToClipboard(Clipboard::GetHtmlFormatType().ToFormatEtc().cfFormat, glob);
 }
 
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) {
+void ClipboardWin::WriteRTF(const char* rtf_data, size_t data_len) {
   WriteData(GetRtfFormatType(), rtf_data, data_len);
 }
 
-void Clipboard::WriteBookmark(const char* title_data,
-                              size_t title_len,
-                              const char* url_data,
-                              size_t url_len) {
+void ClipboardWin::WriteBookmark(const char* title_data,
+                                 size_t title_len,
+                                 const char* url_data,
+                                 size_t url_len) {
   std::string bookmark(title_data, title_len);
   bookmark.append(1, L'\n');
   bookmark.append(url_data, url_len);
@@ -713,15 +730,16 @@
   base::string16 wide_bookmark = base::UTF8ToWide(bookmark);
   HGLOBAL glob = CreateGlobalData(wide_bookmark);
 
-  WriteToClipboard(GetUrlWFormatType().ToUINT(), glob);
+  WriteToClipboard(GetUrlWFormatType().ToFormatEtc().cfFormat, glob);
 }
 
-void Clipboard::WriteWebSmartPaste() {
+void ClipboardWin::WriteWebSmartPaste() {
   DCHECK(clipboard_owner_->hwnd() != NULL);
-  ::SetClipboardData(GetWebKitSmartPasteFormatType().ToUINT(), NULL);
+  ::SetClipboardData(GetWebKitSmartPasteFormatType().ToFormatEtc().cfFormat,
+                     NULL);
 }
 
-void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
+void ClipboardWin::WriteBitmap(const SkBitmap& bitmap) {
   HDC dc = ::GetDC(NULL);
 
   // This doesn't actually cost us a memcpy when the bitmap comes from the
@@ -740,7 +758,7 @@
   // ::CreateDIBSection allocates memory for us to copy our bitmap into.
   // Unfortunately, we can't write the created bitmap to the clipboard,
   // (see http://msdn2.microsoft.com/en-us/library/ms532292.aspx)
-  void *bits;
+  void* bits;
   HBITMAP source_hbitmap =
       ::CreateDIBSection(dc, &bm_info, DIB_RGB_COLORS, &bits, NULL, 0);
 
@@ -760,8 +778,21 @@
   ::ReleaseDC(NULL, dc);
 }
 
-void Clipboard::WriteBitmapFromHandle(HBITMAP source_hbitmap,
-                                      const gfx::Size& size) {
+void ClipboardWin::WriteData(const FormatType& format,
+                             const char* data_data,
+                             size_t data_len) {
+  HGLOBAL hdata = ::GlobalAlloc(GMEM_MOVEABLE, data_len);
+  if (!hdata)
+    return;
+
+  char* data = static_cast<char*>(::GlobalLock(hdata));
+  memcpy(data, data_data, data_len);
+  ::GlobalUnlock(data);
+  WriteToClipboard(format.ToFormatEtc().cfFormat, hdata);
+}
+
+void ClipboardWin::WriteBitmapFromHandle(HBITMAP source_hbitmap,
+                                         const gfx::Size& size) {
   // We would like to just call ::SetClipboardData on the source_hbitmap,
   // but that bitmap might not be of a sort we can write to the clipboard.
   // For this reason, we create a new bitmap, copy the bits over, and then
@@ -786,8 +817,17 @@
 
   // Now we need to blend it into an HBITMAP we can place on the clipboard
   BLENDFUNCTION bf = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
-  ::GdiAlphaBlend(compatible_dc, 0, 0, size.width(), size.height(),
-                  source_dc, 0, 0, size.width(), size.height(), bf);
+  ::GdiAlphaBlend(compatible_dc,
+                  0,
+                  0,
+                  size.width(),
+                  size.height(),
+                  source_dc,
+                  0,
+                  0,
+                  size.width(),
+                  size.height(),
+                  bf);
 
   // Clean up all the handles we just opened
   ::SelectObject(compatible_dc, old_hbitmap);
@@ -801,20 +841,7 @@
   WriteToClipboard(CF_BITMAP, hbitmap);
 }
 
-void Clipboard::WriteData(const FormatType& format,
-                          const char* data_data,
-                          size_t data_len) {
-  HGLOBAL hdata = ::GlobalAlloc(GMEM_MOVEABLE, data_len);
-  if (!hdata)
-    return;
-
-  char* data = static_cast<char*>(::GlobalLock(hdata));
-  memcpy(data, data_data, data_len);
-  ::GlobalUnlock(data);
-  WriteToClipboard(format.ToUINT(), hdata);
-}
-
-void Clipboard::WriteToClipboard(unsigned int format, HANDLE handle) {
+void ClipboardWin::WriteToClipboard(unsigned int format, HANDLE handle) {
   DCHECK(clipboard_owner_->hwnd() != NULL);
   if (handle && !::SetClipboardData(format, handle)) {
     DCHECK(ERROR_CLIPBOARD_NOT_OPEN != GetLastError());
@@ -822,15 +849,7 @@
   }
 }
 
-// static
-void Clipboard::FreeData(unsigned int format, HANDLE data) {
-  if (format == CF_BITMAP)
-    ::DeleteObject(static_cast<HBITMAP>(data));
-  else
-    ::GlobalFree(data);
-}
-
-HWND Clipboard::GetClipboardWindow() const {
+HWND ClipboardWin::GetClipboardWindow() const {
   if (!clipboard_owner_)
     return NULL;
 
diff --git a/ui/base/clipboard/clipboard_win.h b/ui/base/clipboard/clipboard_win.h
new file mode 100644
index 0000000..a0769ff
--- /dev/null
+++ b/ui/base/clipboard/clipboard_win.h
@@ -0,0 +1,77 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_WIN_H_
+#define UI_BASE_CLIPBOARD_CLIPBOARD_WIN_H_
+
+#include "ui/base/clipboard/clipboard.h"
+
+#include "base/memory/scoped_ptr.h"
+
+namespace ui {
+
+class ClipboardWin : public Clipboard {
+ private:
+  friend class Clipboard;
+
+  ClipboardWin();
+  ~ClipboardWin() override;
+
+  // Clipboard overrides:
+  uint64 GetSequenceNumber(ClipboardType type) override;
+  bool IsFormatAvailable(const FormatType& format,
+                         ClipboardType type) const override;
+  void Clear(ClipboardType type) override;
+  void ReadAvailableTypes(ClipboardType type,
+                          std::vector<base::string16>* types,
+                          bool* contains_filenames) const override;
+  void ReadText(ClipboardType type, base::string16* result) const override;
+  void ReadAsciiText(ClipboardType type, std::string* result) const override;
+  void ReadHTML(ClipboardType type,
+                base::string16* markup,
+                std::string* src_url,
+                uint32* fragment_start,
+                uint32* fragment_end) const override;
+  void ReadRTF(ClipboardType type, std::string* result) const override;
+  SkBitmap ReadImage(ClipboardType type) const override;
+  void ReadCustomData(ClipboardType clipboard_type,
+                      const base::string16& type,
+                      base::string16* result) const override;
+  void ReadBookmark(base::string16* title, std::string* url) const override;
+  void ReadData(const FormatType& format, std::string* result) const override;
+  void WriteObjects(ClipboardType type, const ObjectMap& objects) override;
+  void WriteText(const char* text_data, size_t text_len) override;
+  void WriteHTML(const char* markup_data,
+                 size_t markup_len,
+                 const char* url_data,
+                 size_t url_len) override;
+  void WriteRTF(const char* rtf_data, size_t data_len) override;
+  void WriteBookmark(const char* title_data,
+                     size_t title_len,
+                     const char* url_data,
+                     size_t url_len) override;
+  void WriteWebSmartPaste() override;
+  void WriteBitmap(const SkBitmap& bitmap) override;
+  void WriteData(const FormatType& format,
+                 const char* data_data,
+                 size_t data_len) override;
+
+  void WriteBitmapFromHandle(HBITMAP source_hbitmap, const gfx::Size& size);
+
+  // Safely write to system clipboard. Free |handle| on failure.
+  void WriteToClipboard(unsigned int format, HANDLE handle);
+
+  // Return the window that should be the clipboard owner, creating it
+  // if neccessary.  Marked const for lazily initialization by const methods.
+  HWND GetClipboardWindow() const;
+
+  // Mark this as mutable so const methods can still do lazy initialization.
+  mutable scoped_ptr<base::win::MessageWindow> clipboard_owner_;
+
+  DISALLOW_COPY_AND_ASSIGN(ClipboardWin);
+};
+
+}  // namespace ui
+
+#endif  // UI_BASE_CLIPBOARD_CLIPBOARD_WIN_H_
diff --git a/ui/base/ui_base.gyp b/ui/base/ui_base.gyp
index 0d7c90d..4655712 100644
--- a/ui/base/ui_base.gyp
+++ b/ui/base/ui_base.gyp
@@ -61,15 +61,19 @@
         'clipboard/clipboard.cc',
         'clipboard/clipboard.h',
         'clipboard/clipboard_android.cc',
-        'clipboard/clipboard_android_initialization.h',
+        'clipboard/clipboard_android.h',
         'clipboard/clipboard_aura.cc',
+        'clipboard/clipboard_aura.h',
         'clipboard/clipboard_aurax11.cc',
+        'clipboard/clipboard_aurax11.h',
         'clipboard/clipboard_constants.cc',
+        'clipboard/clipboard_mac.h',
         'clipboard/clipboard_mac.mm',
         'clipboard/clipboard_types.h',
         'clipboard/clipboard_util_win.cc',
         'clipboard/clipboard_util_win.h',
         'clipboard/clipboard_win.cc',
+        'clipboard/clipboard_win.h',
         'clipboard/custom_data_helper.cc',
         'clipboard/custom_data_helper.h',
         'clipboard/custom_data_helper_linux.cc',
diff --git a/ui/file_manager/video_player/js/media_controls.js b/ui/file_manager/video_player/js/media_controls.js
index e246c83..238c763 100644
--- a/ui/file_manager/video_player/js/media_controls.js
+++ b/ui/file_manager/video_player/js/media_controls.js
@@ -1095,7 +1095,7 @@
   this.toggleLoopedMode(on);
   if (on) {
     // TODO(mtomasz): Simplify, crbug.com/254318.
-    this.showTextBanner_('GALLERY_VIDEO_LOOPED_MODE');
+    this.showTextBanner_('VIDEO_PLAYER_LOOPED_MODE');
   }
 };
 
diff --git a/ui/file_manager/video_player/js/video_player.js b/ui/file_manager/video_player/js/video_player.js
index 479d1eb..cd5dc02 100644
--- a/ui/file_manager/video_player/js/video_player.js
+++ b/ui/file_manager/video_player/js/video_player.js
@@ -111,10 +111,10 @@
     if (this.casting)
       this.showErrorMessage('VIDEO_PLAYER_VIDEO_FILE_UNSUPPORTED_FOR_CAST');
     else
-      this.showErrorMessage('GALLERY_VIDEO_ERROR');
+      this.showErrorMessage('VIDEO_PLAYER_VIDEO_FILE_UNSUPPORTED');
     this.decodeErrorOccured = false;
   } else {
-    this.showErrorMessage('GALLERY_VIDEO_DECODING_ERROR');
+    this.showErrorMessage('VIDEO_PLAYER_PLAYBACK_ERROR');
     this.decodeErrorOccured = true;
   }
 
@@ -395,7 +395,8 @@
           videoPlayerElement.removeAttribute('loading');
           console.error('Failed to initialize the video element.',
                         error.stack || error);
-          this.controls_.showErrorMessage('GALLERY_VIDEO_ERROR');
+          this.controls_.showErrorMessage(
+              'VIDEO_PLAYER_VIDEO_FILE_UNSUPPORTED');
           callback();
         }.bind(this));
   }.wrap(this));
@@ -613,7 +614,7 @@
     this.currentSession_.removeUpdateListener(this.onCastSessionUpdateBound_);
     this.currentSession_ = null;
   }
-  this.controls.showErrorMessage('GALLERY_VIDEO_DECODING_ERROR');
+  this.controls.showErrorMessage('VIDEO_PLAYER_PLAYBACK_ERROR');
   this.unloadVideo();
 };
 
diff --git a/ui/gfx/gpu_memory_buffer.h b/ui/gfx/gpu_memory_buffer.h
index e33a189..237bf47 100644
--- a/ui/gfx/gpu_memory_buffer.h
+++ b/ui/gfx/gpu_memory_buffer.h
@@ -21,7 +21,6 @@
   EMPTY_BUFFER,
   SHARED_MEMORY_BUFFER,
   IO_SURFACE_BUFFER,
-  ANDROID_NATIVE_BUFFER,
   SURFACE_TEXTURE_BUFFER,
   X11_PIXMAP_BUFFER,
   OZONE_NATIVE_BUFFER,
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index 303c01e..b135cac 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -1521,9 +1521,10 @@
   # on the extension string or the GL version.
   file.write("""void Driver%s::InitializeDynamicBindings(GLContext* context) {
   DCHECK(context && context->IsCurrent(NULL));
-  const GLVersionInfo* ver ALLOW_UNUSED = context->GetVersionInfo();
-  std::string extensions ALLOW_UNUSED = context->GetExtensions();
-  extensions += " ";
+  const GLVersionInfo* ver = context->GetVersionInfo();
+  ALLOW_UNUSED_LOCAL(ver);
+  std::string extensions = context->GetExtensions() + " ";
+  ALLOW_UNUSED_LOCAL(extensions);
 
 """ % set_name.upper())
   for extension in sorted(used_extensions):
diff --git a/ui/gl/gl_surface_mac.cc b/ui/gl/gl_surface_mac.cc
index dec5a9a..d5a66f1 100644
--- a/ui/gl/gl_surface_mac.cc
+++ b/ui/gl/gl_surface_mac.cc
@@ -40,6 +40,7 @@
   virtual gfx::Size GetSize() override { return size_; }
   virtual void* GetHandle() override { return NULL; }
   virtual void* GetDisplay() override { return NULL; }
+  virtual bool IsSurfaceless() const override { return true; }
 
  protected:
   virtual ~NoOpGLSurface() {}
diff --git a/ui/login/screen_container.css b/ui/login/screen_container.css
index 54fc5ef..40d4004 100644
--- a/ui/login/screen_container.css
+++ b/ui/login/screen_container.css
@@ -165,7 +165,9 @@
   opacity: 1;
 }
 
-#oobe.reset #progress-dots {
+#oobe.reset #progress-dots,
+#oobe.host-pairing #progress-dots,
+#oobe.controller-pairing #progress-dots {
   visibility: hidden;
 }
 
diff --git a/ui/message_center/notifier_settings.h b/ui/message_center/notifier_settings.h
index 3e4af89..68ec9fd 100644
--- a/ui/message_center/notifier_settings.h
+++ b/ui/message_center/notifier_settings.h
@@ -13,7 +13,9 @@
 #include "ui/message_center/message_center_export.h"
 #include "url/gurl.h"
 
+class MessageCenterNotificationsTest;
 class MessageCenterTrayBridgeTest;
+class StubNotificationUIManager;
 
 namespace ash {
 class WebNotificationTrayTest;
@@ -24,6 +26,7 @@
 class MessagePopupCollectionTest;
 }
 
+class MessageCenterNotificationManagerTest;
 class NotifierSettingsDelegate;
 class NotifierSettingsProvider;
 
@@ -65,13 +68,16 @@
   std::string profile_id;
 
  private:
-  friend class ::MessageCenterTrayBridgeTest;
+  friend class MessageCenterNotificationManagerTest;
   friend class MessageCenterTrayTest;
-  friend class test::MessagePopupCollectionTest;
   friend class NotificationControllerTest;
   friend class PopupCollectionTest;
   friend class TrayViewControllerTest;
+  friend class ::MessageCenterNotificationsTest;
+  friend class ::MessageCenterTrayBridgeTest;
+  friend class ::StubNotificationUIManager;
   friend class ash::WebNotificationTrayTest;
+  friend class test::MessagePopupCollectionTest;
   FRIEND_TEST_ALL_PREFIXES(PopupControllerTest, Creation);
   FRIEND_TEST_ALL_PREFIXES(NotificationListTest, UnreadCountNoNegative);
   FRIEND_TEST_ALL_PREFIXES(NotificationListTest, TestHasNotificationOfType);
diff --git a/ui/native_theme/native_theme_mac.mm b/ui/native_theme/native_theme_mac.mm
index 60c049c..6b87f57 100644
--- a/ui/native_theme/native_theme_mac.mm
+++ b/ui/native_theme/native_theme_mac.mm
@@ -97,15 +97,17 @@
   // windowBackgroundColor; need to first convert colorspace." Hence the
   // conversion first to CGColor.
   CGColorRef cg_color = [color CGColor];
-  if (CGColorGetNumberOfComponents(cg_color) == 4)
+  const size_t component_count = CGColorGetNumberOfComponents(cg_color);
+  if (component_count == 4)
     return gfx::CGColorRefToSkColor(cg_color);
 
-  CHECK_EQ(2u, CGColorGetNumberOfComponents(cg_color));
-  // Two components means a grayscale channel and an alpha channel, which
+  CHECK(component_count == 1 || component_count == 2);
+  // 1-2 components means a grayscale channel and maybe an alpha channel, which
   // CGColorRefToSkColor will not like. But RGB is additive, so the conversion
   // is easy (RGB to grayscale is less easy).
   const CGFloat* components = CGColorGetComponents(cg_color);
-  return SkColorSetARGB(SkScalarRoundToInt(255.0 * components[1]),
+  CGFloat alpha = component_count == 2 ? components[1] : 1.0;
+  return SkColorSetARGB(SkScalarRoundToInt(255.0 * alpha),
                         SkScalarRoundToInt(255.0 * components[0]),
                         SkScalarRoundToInt(255.0 * components[0]),
                         SkScalarRoundToInt(255.0 * components[0]));
diff --git a/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc b/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc
index c9bee4c..ce1f9ca 100644
--- a/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc
+++ b/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "ui/gl/gl_image_egl.h"
+#include "ui/gl/gl_image_linux_dma_buffer.h"
 #include "ui/ozone/public/native_pixmap.h"
 #include "ui/ozone/public/surface_factory_ozone.h"
 #include "ui/ozone/public/surface_ozone_egl.h"
@@ -16,7 +17,7 @@
  public:
   explicit GLImageOzoneNativePixmap(const gfx::Size& size) : GLImageEGL(size) {}
 
-  bool Initialize(scoped_refptr<NativePixmap> pixmap) {
+  bool Initialize(NativePixmap* pixmap) {
     EGLint attrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
     if (!Initialize(EGL_NATIVE_PIXMAP_KHR, pixmap->GetEGLClientBuffer(), attrs))
       return false;
@@ -41,6 +42,38 @@
   scoped_refptr<NativePixmap> pixmap_;
 };
 
+class GLImageOzoneNativePixmapDmaBuf : public gfx::GLImageLinuxDMABuffer {
+ public:
+  explicit GLImageOzoneNativePixmapDmaBuf(const gfx::Size& size,
+                                          unsigned internalformat)
+      : GLImageLinuxDMABuffer(size, internalformat) {}
+
+  bool Initialize(NativePixmap* pixmap,
+                  gfx::GpuMemoryBuffer::Format format) {
+    base::FileDescriptor handle(pixmap->GetDmaBufFd(), false);
+    if (!GLImageLinuxDMABuffer::Initialize(
+            handle, format, pixmap->GetDmaBufPitch()))
+      return false;
+    pixmap_ = pixmap;
+    return true;
+  }
+
+  virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
+                                    int z_order,
+                                    gfx::OverlayTransform transform,
+                                    const gfx::Rect& bounds_rect,
+                                    const gfx::RectF& crop_rect) override {
+    return SurfaceFactoryOzone::GetInstance()->ScheduleOverlayPlane(
+        widget, z_order, transform, pixmap_, bounds_rect, crop_rect);
+  }
+
+ protected:
+  virtual ~GLImageOzoneNativePixmapDmaBuf() {}
+
+ private:
+  scoped_refptr<NativePixmap> pixmap_;
+};
+
 SurfaceFactoryOzone::BufferFormat GetOzoneFormatFor(
     gfx::GpuMemoryBuffer::Format format) {
   switch (format) {
@@ -96,17 +129,31 @@
 GpuMemoryBufferFactoryOzoneNativeBuffer::CreateImageForGpuMemoryBuffer(
     const gfx::GpuMemoryBufferId& id,
     const gfx::Size& size,
+    gfx::GpuMemoryBuffer::Format format,
     unsigned internalformat) {
   BufferToPixmapMap::iterator it = native_pixmap_map_.find(GetIndex(id));
   if (it == native_pixmap_map_.end()) {
     return scoped_refptr<gfx::GLImage>();
   }
-  scoped_refptr<GLImageOzoneNativePixmap> image =
-      new GLImageOzoneNativePixmap(size);
-  if (!image->Initialize(it->second)) {
-    return scoped_refptr<gfx::GLImage>();
+  NativePixmap* pixmap = it->second.get();
+  if (pixmap->GetEGLClientBuffer()) {
+    DCHECK_EQ(-1, pixmap->GetDmaBufFd());
+    scoped_refptr<GLImageOzoneNativePixmap> image =
+        new GLImageOzoneNativePixmap(size);
+    if (!image->Initialize(pixmap)) {
+      return scoped_refptr<gfx::GLImage>();
+    }
+    return image;
   }
-  return image;
+  if (pixmap->GetDmaBufFd() > 0) {
+    scoped_refptr<GLImageOzoneNativePixmapDmaBuf> image =
+        new GLImageOzoneNativePixmapDmaBuf(size, internalformat);
+    if (!image->Initialize(pixmap, format)) {
+      return scoped_refptr<gfx::GLImage>();
+    }
+    return image;
+  }
+  return scoped_refptr<gfx::GLImage>();
 }
 
 }  // namespace ui
diff --git a/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.h b/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.h
index b35487f..c65ce04 100644
--- a/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.h
+++ b/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.h
@@ -40,6 +40,7 @@
   scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
       const gfx::GpuMemoryBufferId& id,
       const gfx::Size& size,
+      gfx::GpuMemoryBuffer::Format format,
       unsigned internalformat);
 
  private:
diff --git a/ui/ozone/platform/dri/gbm_buffer.cc b/ui/ozone/platform/dri/gbm_buffer.cc
index 398064d..030dc3b 100644
--- a/ui/ozone/platform/dri/gbm_buffer.cc
+++ b/ui/ozone/platform/dri/gbm_buffer.cc
@@ -71,7 +71,10 @@
 }
 
 int GbmPixmap::GetDmaBufFd() {
-  NOTIMPLEMENTED();
+  return -1;
+}
+
+int GbmPixmap::GetDmaBufPitch() {
   return -1;
 }
 
diff --git a/ui/ozone/platform/dri/gbm_buffer.h b/ui/ozone/platform/dri/gbm_buffer.h
index 3451510..3fad2c5 100644
--- a/ui/ozone/platform/dri/gbm_buffer.h
+++ b/ui/ozone/platform/dri/gbm_buffer.h
@@ -42,6 +42,7 @@
   // NativePixmap:
   virtual void* GetEGLClientBuffer() override;
   virtual int GetDmaBufFd() override;
+  virtual int GetDmaBufPitch() override;
 
   scoped_refptr<GbmBuffer> buffer() { return buffer_; }
 
diff --git a/ui/ozone/public/native_pixmap.h b/ui/ozone/public/native_pixmap.h
index db7a6c8..8342ca2 100644
--- a/ui/ozone/public/native_pixmap.h
+++ b/ui/ozone/public/native_pixmap.h
@@ -17,6 +17,7 @@
 
   virtual void* /* EGLClientBuffer */ GetEGLClientBuffer() = 0;
   virtual int GetDmaBufFd() = 0;
+  virtual int GetDmaBufPitch() = 0;
 
  protected:
   virtual ~NativePixmap() {}
diff --git a/ui/views/cocoa/bridged_content_view.h b/ui/views/cocoa/bridged_content_view.h
index 2bc93ab..3a917cf 100644
--- a/ui/views/cocoa/bridged_content_view.h
+++ b/ui/views/cocoa/bridged_content_view.h
@@ -31,10 +31,16 @@
 
   // A tracking area installed to enable mouseMoved events.
   ui::ScopedCrTrackingArea trackingArea_;
+
+  // Set to ignore window visibility in a subsequent call to drawRect:. Views
+  // does not expect hidden windows to paint. However, when showing a window,
+  // Cocoa first paints before updating visibility.
+  BOOL willShow_;
 }
 
 @property(readonly, nonatomic) views::View* hostedView;
 @property(assign, nonatomic) ui::TextInputClient* textInputClient;
+@property(assign, nonatomic) BOOL willShow;
 
 // Initialize the NSView -> views::View bridge. |viewToHost| must be non-NULL.
 - (id)initWithView:(views::View*)viewToHost;
diff --git a/ui/views/cocoa/bridged_content_view.mm b/ui/views/cocoa/bridged_content_view.mm
index 66624a1..3a77207 100644
--- a/ui/views/cocoa/bridged_content_view.mm
+++ b/ui/views/cocoa/bridged_content_view.mm
@@ -30,6 +30,7 @@
 
 @synthesize hostedView = hostedView_;
 @synthesize textInputClient = textInputClient_;
+@synthesize willShow = willShow_;
 
 - (id)initWithView:(views::View*)viewToHost {
   DCHECK(viewToHost);
@@ -89,11 +90,13 @@
 }
 
 - (void)drawRect:(NSRect)dirtyRect {
-  if (!hostedView_)
+  // Note that on a Show, Cocoa calls drawRect: before changing
+  // -[NSWindow isVisible], hence the extra check.
+  if (!hostedView_ || (!willShow_ && ![[self window] isVisible]))
     return;
 
   gfx::CanvasSkiaPaint canvas(dirtyRect, false /* opaque */);
-  hostedView_->Paint(&canvas, views::CullSet());
+  hostedView_->GetWidget()->OnNativeWidgetPaint(&canvas);
 }
 
 // NSResponder implementation.
diff --git a/ui/views/cocoa/bridged_native_widget_unittest.mm b/ui/views/cocoa/bridged_native_widget_unittest.mm
index bd72331..fb4c679 100644
--- a/ui/views/cocoa/bridged_native_widget_unittest.mm
+++ b/ui/views/cocoa/bridged_native_widget_unittest.mm
@@ -20,6 +20,7 @@
 #include "ui/views/ime/input_method.h"
 #include "ui/views/view.h"
 #include "ui/views/widget/native_widget_mac.h"
+#include "ui/views/widget/root_view.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_observer.h"
 
@@ -223,7 +224,6 @@
   virtual void TearDown() override;
 
  protected:
-  // TODO(tapted): Make this a EventCountView from widget_unittest.cc.
   scoped_ptr<views::View> view_;
   scoped_ptr<BridgedNativeWidget> bridge_;
   BridgedContentView* ns_view_;  // Weak. Owned by bridge_.
@@ -255,7 +255,7 @@
 void BridgedNativeWidgetTest::SetUp() {
   BridgedNativeWidgetTestBase::SetUp();
 
-  view_.reset(new views::View);
+  view_.reset(new views::internal::RootView(widget_.get()));
   base::scoped_nsobject<NSWindow> window([test_window() retain]);
 
   // BridgedNativeWidget expects to be initialized with a hidden (deferred)
diff --git a/ui/views/cocoa/views_nswindow_delegate.h b/ui/views/cocoa/views_nswindow_delegate.h
index 799cb80..2f1104c 100644
--- a/ui/views/cocoa/views_nswindow_delegate.h
+++ b/ui/views/cocoa/views_nswindow_delegate.h
@@ -26,6 +26,16 @@
 // Initialize with the given |parent|.
 - (id)initWithBridgedNativeWidget:(views::BridgedNativeWidget*)parent;
 
+// Notify that the window is about to be reordered on screen. This ensures a
+// paint will occur, even if Cocoa has not yet updated the window visibility.
+- (void)onWindowOrderWillChange:(NSWindowOrderingMode)orderingMode;
+
+// Notify that the window has been reordered in (or removed from) the window
+// server's screen list. This is a substitute for -[NSWindowDelegate
+// windowDidExpose:], which is only sent for nonretained windows (those without
+// a backing store).
+- (void)onWindowOrderChanged;
+
 @end
 
 #endif  // UI_VIEWS_COCOA_VIEWS_NSWINDOW_DELEGATE_H_
diff --git a/ui/views/cocoa/views_nswindow_delegate.mm b/ui/views/cocoa/views_nswindow_delegate.mm
index 50f0021..038a844 100644
--- a/ui/views/cocoa/views_nswindow_delegate.mm
+++ b/ui/views/cocoa/views_nswindow_delegate.mm
@@ -5,6 +5,7 @@
 #import "ui/views/cocoa/views_nswindow_delegate.h"
 
 #include "base/logging.h"
+#import "ui/views/cocoa/bridged_content_view.h"
 #import "ui/views/cocoa/bridged_native_widget.h"
 #include "ui/views/widget/native_widget_mac.h"
 
@@ -22,6 +23,15 @@
   return parent_->native_widget_mac();
 }
 
+- (void)onWindowOrderWillChange:(NSWindowOrderingMode)orderingMode {
+  if (orderingMode != NSWindowOut)
+    [parent_->ns_view() setWillShow:YES];
+}
+
+- (void)onWindowOrderChanged {
+  [parent_->ns_view() setWillShow:NO];
+}
+
 // NSWindowDelegate implementation.
 
 - (void)windowDidFailToEnterFullScreen:(NSWindow*)window {
diff --git a/ui/views/focus/focus_manager.h b/ui/views/focus/focus_manager.h
index bb62085..bce8549 100644
--- a/ui/views/focus/focus_manager.h
+++ b/ui/views/focus/focus_manager.h
@@ -82,7 +82,6 @@
 
 class FocusManagerDelegate;
 class FocusSearch;
-class RootView;
 class View;
 class Widget;
 
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm
index c6d851d..b6aa717 100644
--- a/ui/views/widget/native_widget_mac.mm
+++ b/ui/views/widget/native_widget_mac.mm
@@ -18,10 +18,15 @@
 #include "ui/views/window/native_frame_view.h"
 
 @interface NativeWidgetMacNSWindow : NSWindow
+- (ViewsNSWindowDelegate*)viewsNSWindowDelegate;
 @end
 
 @implementation NativeWidgetMacNSWindow
 
+- (ViewsNSWindowDelegate*)viewsNSWindowDelegate {
+  return base::mac::ObjCCastStrict<ViewsNSWindowDelegate>([self delegate]);
+}
+
 // Override canBecome{Key,Main}Window to always return YES, otherwise Windows
 // with a styleMask of NSBorderlessWindowMask default to NO.
 - (BOOL)canBecomeKeyWindow {
@@ -32,6 +37,15 @@
   return YES;
 }
 
+// Override orderWindow to intercept visibility changes, since there is no way
+// to observe these changes via NSWindowDelegate.
+- (void)orderWindow:(NSWindowOrderingMode)orderingMode
+         relativeTo:(NSInteger)otherWindowNumber {
+  [[self viewsNSWindowDelegate] onWindowOrderWillChange:orderingMode];
+  [super orderWindow:orderingMode relativeTo:otherWindowNumber];
+  [[self viewsNSWindowDelegate] onWindowOrderChanged];
+}
+
 @end
 
 namespace views {
@@ -301,6 +315,12 @@
 }
 
 void NativeWidgetMac::Close() {
+  if (!bridge_)
+    return;
+
+  // Clear the view early to suppress repaints.
+  bridge_->SetRootView(NULL);
+
   NSWindow* window = GetNativeWindow();
   // Calling performClose: will momentarily highlight the close button, but
   // AppKit will reject it if there is no close button.
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index 12e3cc1..374435f 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -1125,12 +1125,13 @@
 class DesktopAuraTestValidPaintWidget : public views::Widget {
  public:
   DesktopAuraTestValidPaintWidget()
-    : expect_paint_(true),
-      received_paint_while_hidden_(false) {
-  }
+    : received_paint_(false),
+      expect_paint_(true),
+      received_paint_while_hidden_(false) {}
 
-  virtual ~DesktopAuraTestValidPaintWidget() {
-  }
+  virtual ~DesktopAuraTestValidPaintWidget() {}
+
+  void InitForTest(Widget::InitParams create_params);
 
   virtual void Show() override {
     expect_paint_ = true;
@@ -1148,58 +1149,66 @@
   }
 
   virtual void OnNativeWidgetPaint(gfx::Canvas* canvas) override {
+    received_paint_ = true;
     EXPECT_TRUE(expect_paint_);
     if (!expect_paint_)
       received_paint_while_hidden_ = true;
     views::Widget::OnNativeWidgetPaint(canvas);
   }
 
+  bool ReadReceivedPaintAndReset() {
+    bool result = received_paint_;
+    received_paint_ = false;
+    return result;
+  }
+
   bool received_paint_while_hidden() const {
     return received_paint_while_hidden_;
   }
 
  private:
+  bool received_paint_;
   bool expect_paint_;
   bool received_paint_while_hidden_;
+
+  DISALLOW_COPY_AND_ASSIGN(DesktopAuraTestValidPaintWidget);
 };
 
-TEST_F(WidgetTest, DesktopNativeWidgetNoPaintAfterCloseTest) {
+void DesktopAuraTestValidPaintWidget::InitForTest(InitParams init_params) {
+  init_params.bounds = gfx::Rect(0, 0, 200, 200);
+  init_params.ownership = InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+  init_params.native_widget = new PlatformDesktopNativeWidget(this);
+  Init(init_params);
+
   View* contents_view = new View;
   contents_view->SetFocusable(true);
+  SetContentsView(contents_view);
+
+  Show();
+  Activate();
+}
+
+TEST_F(WidgetTest, DesktopNativeWidgetNoPaintAfterCloseTest) {
   DesktopAuraTestValidPaintWidget widget;
-  Widget::InitParams init_params =
-      CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
-  init_params.bounds = gfx::Rect(0, 0, 200, 200);
-  init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-  init_params.native_widget = new PlatformDesktopNativeWidget(&widget);
-  widget.Init(init_params);
-  widget.SetContentsView(contents_view);
-  widget.Show();
-  widget.Activate();
+  widget.InitForTest(CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS));
   RunPendingMessages();
-  widget.SchedulePaintInRect(init_params.bounds);
+  EXPECT_TRUE(widget.ReadReceivedPaintAndReset());
+  widget.SchedulePaintInRect(widget.GetRestoredBounds());
   widget.Close();
   RunPendingMessages();
+  EXPECT_FALSE(widget.ReadReceivedPaintAndReset());
   EXPECT_FALSE(widget.received_paint_while_hidden());
 }
 
 TEST_F(WidgetTest, DesktopNativeWidgetNoPaintAfterHideTest) {
-  View* contents_view = new View;
-  contents_view->SetFocusable(true);
   DesktopAuraTestValidPaintWidget widget;
-  Widget::InitParams init_params =
-      CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
-  init_params.bounds = gfx::Rect(0, 0, 200, 200);
-  init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-  init_params.native_widget = new PlatformDesktopNativeWidget(&widget);
-  widget.Init(init_params);
-  widget.SetContentsView(contents_view);
-  widget.Show();
-  widget.Activate();
+  widget.InitForTest(CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS));
   RunPendingMessages();
-  widget.SchedulePaintInRect(init_params.bounds);
+  EXPECT_TRUE(widget.ReadReceivedPaintAndReset());
+  widget.SchedulePaintInRect(widget.GetRestoredBounds());
   widget.Hide();
   RunPendingMessages();
+  EXPECT_FALSE(widget.ReadReceivedPaintAndReset());
   EXPECT_FALSE(widget.received_paint_while_hidden());
   widget.Close();
 }
@@ -1221,6 +1230,8 @@
   NonClientFrameView* frame_view = new MinimumSizeFrameView(&widget);
   non_client_view->SetFrameView(frame_view);
 
+  widget.Show();
+  EXPECT_TRUE(IsNativeWindowVisible(widget.GetNativeWindow()));
   widget.Hide();
   EXPECT_FALSE(IsNativeWindowVisible(widget.GetNativeWindow()));
   widget.Show();