Update from https://crrev.com/311145 Includes updates to mojo/edk/test/multiprocess_test_helper.{h,cc} for the change to base::MultiProcessTest's API in https://crrev.com/311127. Review URL: https://codereview.chromium.org/833243008
diff --git a/DEPS b/DEPS index 96aab38..a9f7f84 100644 --- a/DEPS +++ b/DEPS
@@ -20,7 +20,7 @@ vars = { 'chromium_git': 'https://chromium.googlesource.com', 'sfntly_revision': '1bdaae8fc788a5ac8936d68bf24f37d977a13dac', - 'skia_revision': '0899696e9fec7d376b63655bedaed76871cb15c2', + 'skia_revision': '4fc48af0d7bec93a911d32330f251386a8adec98', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and V8 without interference from each other.
diff --git a/base/debug/stack_trace_unittest.cc b/base/debug/stack_trace_unittest.cc index eb0bd9a..b07fcdb 100644 --- a/base/debug/stack_trace_unittest.cc +++ b/base/debug/stack_trace_unittest.cc
@@ -146,9 +146,10 @@ // and e.g. mismatched new[]/delete would cause a hang because // of re-entering malloc. TEST_F(StackTraceTest, AsyncSignalUnsafeSignalHandlerHang) { - ProcessHandle child = SpawnChild("MismatchedMallocChildProcess"); - ASSERT_NE(kNullProcessHandle, child); - ASSERT_TRUE(WaitForSingleProcess(child, TestTimeouts::action_timeout())); + Process child = SpawnChild("MismatchedMallocChildProcess"); + ASSERT_TRUE(child.IsValid()); + ASSERT_TRUE(WaitForSingleProcess(child.Handle(), + TestTimeouts::action_timeout())); } #endif // !defined(OS_IOS)
diff --git a/base/memory/shared_memory_unittest.cc b/base/memory/shared_memory_unittest.cc index 265179a..6e5a4d8 100644 --- a/base/memory/shared_memory_unittest.cc +++ b/base/memory/shared_memory_unittest.cc
@@ -699,15 +699,15 @@ TEST_F(SharedMemoryProcessTest, Tasks) { SharedMemoryProcessTest::CleanUp(); - ProcessHandle handles[kNumTasks]; + Process processes[kNumTasks]; for (int index = 0; index < kNumTasks; ++index) { - handles[index] = SpawnChild("SharedMemoryTestMain"); - ASSERT_TRUE(handles[index]); + processes[index] = SpawnChild("SharedMemoryTestMain"); + ASSERT_TRUE(processes[index].IsValid()); } int exit_code = 0; for (int index = 0; index < kNumTasks; ++index) { - EXPECT_TRUE(WaitForExitCode(handles[index], &exit_code)); + EXPECT_TRUE(processes[index].WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); }
diff --git a/base/metrics/stats_table_unittest.cc b/base/metrics/stats_table_unittest.cc index 45b0a43..38a21cc 100644 --- a/base/metrics/stats_table_unittest.cc +++ b/base/metrics/stats_table_unittest.cc
@@ -200,19 +200,19 @@ // Spin up a set of processes to go bang on the various counters. // After we join the processes, we'll make sure the counters // contain the values we expected. - ProcessHandle procs[kMaxProcs]; + Process procs[kMaxProcs]; // Spawn the processes. for (int16 index = 0; index < kMaxProcs; index++) { procs[index] = SpawnChild("StatsTableMultipleProcessMain"); - EXPECT_NE(kNullProcessHandle, procs[index]); + EXPECT_TRUE(procs[index].IsValid()); } // Wait for the processes to finish. for (int index = 0; index < kMaxProcs; index++) { - EXPECT_TRUE(WaitForSingleProcess( - procs[index], base::TimeDelta::FromMinutes(1))); - CloseProcessHandle(procs[index]); + EXPECT_TRUE(WaitForSingleProcess(procs[index].Handle(), + base::TimeDelta::FromMinutes(1))); + procs[index].Close(); } StatsCounter zero_counter(kCounterZero);
diff --git a/base/process/process_util_unittest.cc b/base/process/process_util_unittest.cc index af88fe1..80e103d 100644 --- a/base/process/process_util_unittest.cc +++ b/base/process/process_util_unittest.cc
@@ -142,11 +142,10 @@ // TODO(viettrungluu): This should be in a "MultiProcessTestTest". TEST_F(ProcessUtilTest, SpawnChild) { - base::ProcessHandle handle = SpawnChild("SimpleChildProcess"); - ASSERT_NE(base::kNullProcessHandle, handle); - EXPECT_TRUE(base::WaitForSingleProcess( - handle, TestTimeouts::action_max_timeout())); - base::CloseProcessHandle(handle); + base::Process process = SpawnChild("SimpleChildProcess"); + ASSERT_TRUE(process.IsValid()); + EXPECT_TRUE(base::WaitForSingleProcess(process.Handle(), + TestTimeouts::action_max_timeout())); } MULTIPROCESS_TEST_MAIN(SlowChildProcess) { @@ -158,12 +157,11 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileSlow); remove(signal_file.c_str()); - base::ProcessHandle handle = SpawnChild("SlowChildProcess"); - ASSERT_NE(base::kNullProcessHandle, handle); + base::Process process = SpawnChild("SlowChildProcess"); + ASSERT_TRUE(process.IsValid()); SignalChildren(signal_file.c_str()); - EXPECT_TRUE(base::WaitForSingleProcess( - handle, TestTimeouts::action_max_timeout())); - base::CloseProcessHandle(handle); + EXPECT_TRUE(base::WaitForSingleProcess(process.Handle(), + TestTimeouts::action_max_timeout())); remove(signal_file.c_str()); } @@ -172,21 +170,20 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileSlow); remove(signal_file.c_str()); - base::ProcessHandle handle = SpawnChild("SlowChildProcess"); - ASSERT_NE(base::kNullProcessHandle, handle); + base::Process process = SpawnChild("SlowChildProcess"); + ASSERT_TRUE(process.IsValid()); int exit_code = 42; EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(handle, &exit_code)); + base::GetTerminationStatus(process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(handle, &exit_code); + WaitForChildTermination(process.Handle(), &exit_code); EXPECT_EQ(base::TERMINATION_STATUS_NORMAL_TERMINATION, status); EXPECT_EQ(0, exit_code); - base::CloseProcessHandle(handle); remove(signal_file.c_str()); } @@ -195,12 +192,11 @@ TEST_F(ProcessUtilTest, GetProcId) { base::ProcessId id1 = base::GetProcId(GetCurrentProcess()); EXPECT_NE(0ul, id1); - base::ProcessHandle handle = SpawnChild("SimpleChildProcess"); - ASSERT_NE(base::kNullProcessHandle, handle); - base::ProcessId id2 = base::GetProcId(handle); + base::Process process = SpawnChild("SimpleChildProcess"); + ASSERT_TRUE(process.IsValid()); + base::ProcessId id2 = process.pid(); EXPECT_NE(0ul, id2); EXPECT_NE(id1, id2); - base::CloseProcessHandle(handle); } #endif @@ -239,18 +235,18 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileCrash); remove(signal_file.c_str()); - base::ProcessHandle handle = SpawnChild("CrashingChildProcess"); - ASSERT_NE(base::kNullProcessHandle, handle); + base::Process process = SpawnChild("CrashingChildProcess"); + ASSERT_TRUE(process.IsValid()); int exit_code = 42; EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(handle, &exit_code)); + base::GetTerminationStatus(process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(handle, &exit_code); + WaitForChildTermination(process.Handle(), &exit_code); EXPECT_EQ(base::TERMINATION_STATUS_PROCESS_CRASHED, status); #if defined(OS_WIN) @@ -261,7 +257,6 @@ int signal = WTERMSIG(exit_code); EXPECT_EQ(SIGSEGV, signal); #endif - base::CloseProcessHandle(handle); // Reset signal handlers back to "normal". base::debug::EnableInProcessStackDumping(); @@ -286,18 +281,18 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileKill); remove(signal_file.c_str()); - base::ProcessHandle handle = SpawnChild("KilledChildProcess"); - ASSERT_NE(base::kNullProcessHandle, handle); + base::Process process = SpawnChild("KilledChildProcess"); + ASSERT_TRUE(process.IsValid()); int exit_code = 42; EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(handle, &exit_code)); + base::GetTerminationStatus(process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(handle, &exit_code); + WaitForChildTermination(process.Handle(), &exit_code); EXPECT_EQ(base::TERMINATION_STATUS_PROCESS_WAS_KILLED, status); #if defined(OS_WIN) EXPECT_EQ(kExpectedKilledExitCode, exit_code); @@ -307,7 +302,6 @@ int signal = WTERMSIG(exit_code); EXPECT_EQ(SIGKILL, signal); #endif - base::CloseProcessHandle(handle); remove(signal_file.c_str()); } @@ -535,9 +529,9 @@ fd_mapping_vec.push_back(std::pair<int, int>(fds[1], kChildPipe)); base::LaunchOptions options; options.fds_to_remap = &fd_mapping_vec; - base::ProcessHandle handle = + base::Process process = SpawnChildWithOptions("ProcessUtilsLeakFDChildProcess", options); - CHECK(handle); + CHECK(process.IsValid()); int ret = IGNORE_EINTR(close(fds[1])); DPCHECK(ret == 0); @@ -549,11 +543,12 @@ #if defined(THREAD_SANITIZER) // Compiler-based ThreadSanitizer makes this test slow. - CHECK(base::WaitForSingleProcess(handle, base::TimeDelta::FromSeconds(3))); + CHECK(base::WaitForSingleProcess(process.Handle(), + base::TimeDelta::FromSeconds(3))); #else - CHECK(base::WaitForSingleProcess(handle, base::TimeDelta::FromSeconds(1))); + CHECK(base::WaitForSingleProcess(process.Handle(), + base::TimeDelta::FromSeconds(1))); #endif - base::CloseProcessHandle(handle); ret = IGNORE_EINTR(close(fds[0])); DPCHECK(ret == 0); @@ -888,7 +883,7 @@ } TEST_F(ProcessUtilTest, DelayedTermination) { - base::Process child_process(SpawnChild("process_util_test_never_die")); + base::Process child_process = SpawnChild("process_util_test_never_die"); ASSERT_TRUE(child_process.IsValid()); base::EnsureProcessTerminated(child_process.Duplicate()); base::WaitForSingleProcess(child_process.Handle(), @@ -906,7 +901,7 @@ } TEST_F(ProcessUtilTest, ImmediateTermination) { - base::Process child_process(SpawnChild("process_util_test_die_immediately")); + base::Process child_process = SpawnChild("process_util_test_die_immediately"); ASSERT_TRUE(child_process.IsValid()); // Give it time to die. sleep(2);
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc index 707a4d7..af2e461 100644 --- a/base/test/launcher/test_launcher.cc +++ b/base/test/launcher/test_launcher.cc
@@ -287,7 +287,7 @@ new_options.allow_new_privs = true; #endif - ProcessHandle process_handle; + Process process; { // Note how we grab the lock before the process possibly gets created. @@ -295,19 +295,22 @@ // in the set. AutoLock lock(g_live_processes_lock.Get()); - if (!LaunchProcess(command_line, new_options, &process_handle)) + process = LaunchProcess(command_line, new_options); + if (!process.IsValid()) return -1; - g_live_processes.Get().insert(std::make_pair(process_handle, command_line)); + // TODO(rvargas) crbug.com/417532: Don't store process handles. + g_live_processes.Get().insert(std::make_pair(process.Handle(), + command_line)); } int exit_code = 0; - if (!WaitForExitCodeWithTimeout(process_handle, &exit_code, timeout)) { + if (!process.WaitForExitWithTimeout(timeout, &exit_code)) { *was_timeout = true; exit_code = -1; // Set a non-zero exit code to signal a failure. // Ensure that the process terminates. - KillProcess(process_handle, -1, true); + KillProcess(process.Handle(), -1, true); } { @@ -322,15 +325,13 @@ // or due to it timing out, we need to clean up any child processes that // it might have created. On Windows, child processes are automatically // cleaned up using JobObjects. - KillProcessGroup(process_handle); + KillProcessGroup(process.Handle()); } #endif - g_live_processes.Get().erase(process_handle); + g_live_processes.Get().erase(process.Handle()); } - CloseProcessHandle(process_handle); - return exit_code; }
diff --git a/base/test/multiprocess_test.cc b/base/test/multiprocess_test.cc index 306c109..b95ea98 100644 --- a/base/test/multiprocess_test.cc +++ b/base/test/multiprocess_test.cc
@@ -10,7 +10,7 @@ namespace base { #if !defined(OS_ANDROID) -ProcessHandle SpawnMultiProcessTestChild( +Process SpawnMultiProcessTestChild( const std::string& procname, const CommandLine& base_command_line, const LaunchOptions& options) { @@ -21,9 +21,7 @@ if (!command_line.HasSwitch(switches::kTestChildProcess)) command_line.AppendSwitchASCII(switches::kTestChildProcess, procname); - ProcessHandle handle = kNullProcessHandle; - LaunchProcess(command_line, options, &handle); - return handle; + return LaunchProcess(command_line, options); } #endif // !defined(OS_ANDROID) @@ -36,7 +34,7 @@ MultiProcessTest::MultiProcessTest() { } -ProcessHandle MultiProcessTest::SpawnChild(const std::string& procname) { +Process MultiProcessTest::SpawnChild(const std::string& procname) { LaunchOptions options; #if defined(OS_WIN) options.start_hidden = true; @@ -44,7 +42,7 @@ return SpawnChildWithOptions(procname, options); } -ProcessHandle MultiProcessTest::SpawnChildWithOptions( +Process MultiProcessTest::SpawnChildWithOptions( const std::string& procname, const LaunchOptions& options) { return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options);
diff --git a/base/test/multiprocess_test.h b/base/test/multiprocess_test.h index b830f73..e419503 100644 --- a/base/test/multiprocess_test.h +++ b/base/test/multiprocess_test.h
@@ -9,7 +9,7 @@ #include "base/basictypes.h" #include "base/process/launch.h" -#include "base/process/process_handle.h" +#include "base/process/process.h" #include "build/build_config.h" #include "testing/platform_test.h" @@ -58,7 +58,7 @@ // |command_line| should be as provided by // |GetMultiProcessTestChildBaseCommandLine()| (below), possibly with arguments // added. Note: On Windows, you probably want to set |options.start_hidden|. -ProcessHandle SpawnMultiProcessTestChild( +Process SpawnMultiProcessTestChild( const std::string& procname, const CommandLine& command_line, const LaunchOptions& options); @@ -105,14 +105,14 @@ // // do client work here // } // - // Returns the handle to the child, or NULL on failure - ProcessHandle SpawnChild(const std::string& procname); + // Returns the child process. + Process SpawnChild(const std::string& procname); // Run a child process using the given launch options. // // Note: On Windows, you probably want to set |options.start_hidden|. - ProcessHandle SpawnChildWithOptions(const std::string& procname, - const LaunchOptions& options); + Process SpawnChildWithOptions(const std::string& procname, + const LaunchOptions& options); // Set up the command line used to spawn the child process. // Override this to add things to the command line (calling this first in the
diff --git a/base/test/multiprocess_test_android.cc b/base/test/multiprocess_test_android.cc index 8f54b82..dc489d1 100644 --- a/base/test/multiprocess_test_android.cc +++ b/base/test/multiprocess_test_android.cc
@@ -19,9 +19,9 @@ // and we don't have an executable to exec*. This implementation does the bare // minimum to execute the method specified by procname (in the child process). // - All options except |fds_to_remap| are ignored. -ProcessHandle SpawnMultiProcessTestChild(const std::string& procname, - const CommandLine& base_command_line, - const LaunchOptions& options) { +Process SpawnMultiProcessTestChild(const std::string& procname, + const CommandLine& base_command_line, + const LaunchOptions& options) { // TODO(viettrungluu): The FD-remapping done below is wrong in the presence of // cycles (e.g., fd1 -> fd2, fd2 -> fd1). crbug.com/326576 FileHandleMappingVector empty; @@ -32,11 +32,11 @@ if (pid < 0) { PLOG(ERROR) << "fork"; - return kNullProcessHandle; + return Process(); } if (pid > 0) { // Parent process. - return pid; + return Process(pid); } // Child process. base::hash_set<int> fds_to_keep_open; @@ -69,7 +69,7 @@ command_line->AppendSwitchASCII(switches::kTestChildProcess, procname); _exit(multi_process_function_list::InvokeChildProcessTest(procname)); - return 0; + return Process(); } } // namespace base
diff --git a/build/sanitizers/tsan_suppressions.cc b/build/sanitizers/tsan_suppressions.cc index 42c71b1..578db19 100644 --- a/build/sanitizers/tsan_suppressions.cc +++ b/build/sanitizers/tsan_suppressions.cc
@@ -309,8 +309,8 @@ // https://code.google.com/p/skia/issues/detail?id=3294 "race:SkBaseMutex::acquire\n" -// https://crbug.com/447461 -"race:net::SSLConfig::SSLConfig\n" +// https://crbug.com/430533 +"race:TileTaskGraphRunner::Run\n" // End of suppressions. ; // Please keep this semicolon.
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 82a5474..77b9161 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -446,7 +446,10 @@ "resources/tile_priority.h", "resources/tiling_set_eviction_queue.cc", "resources/tiling_set_eviction_queue.h", - "resources/tiling_set_raster_queue.cc", + "resources/tiling_set_raster_queue_all.cc", + "resources/tiling_set_raster_queue_all.h", + "resources/tiling_set_raster_queue_required.cc", + "resources/tiling_set_raster_queue_required.h", "resources/tiling_set_raster_queue.h", "resources/transferable_resource.cc", "resources/transferable_resource.h",
diff --git a/cc/cc.gyp b/cc/cc.gyp index 1393ae7..dfe632f 100644 --- a/cc/cc.gyp +++ b/cc/cc.gyp
@@ -482,7 +482,10 @@ 'resources/tile_priority.h', 'resources/tiling_set_eviction_queue.cc', 'resources/tiling_set_eviction_queue.h', - 'resources/tiling_set_raster_queue.cc', + 'resources/tiling_set_raster_queue_all.cc', + 'resources/tiling_set_raster_queue_all.h', + 'resources/tiling_set_raster_queue_required.cc', + 'resources/tiling_set_raster_queue_required.h', 'resources/tiling_set_raster_queue.h', 'resources/transferable_resource.cc', 'resources/transferable_resource.h',
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index 718535b..8db30c6 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc
@@ -25,6 +25,7 @@ #include "cc/quads/solid_color_draw_quad.h" #include "cc/quads/tile_draw_quad.h" #include "cc/resources/tile_manager.h" +#include "cc/resources/tiling_set_raster_queue_all.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/occlusion.h" #include "ui/gfx/geometry/quad_f.h" @@ -94,24 +95,6 @@ layer_tree_impl()->UnregisterPictureLayerImpl(this); } -scoped_ptr<TilingSetEvictionQueue> PictureLayerImpl::CreateEvictionQueue( - TreePriority tree_priority) { - if (!tilings_) - return make_scoped_ptr(new TilingSetEvictionQueue()); - bool skip_shared_out_of_order_tiles = - GetPendingOrActiveTwinLayer() != nullptr; - return make_scoped_ptr(new TilingSetEvictionQueue( - tilings_.get(), tree_priority, skip_shared_out_of_order_tiles)); -} - -scoped_ptr<TilingSetRasterQueue> PictureLayerImpl::CreateRasterQueue( - bool prioritize_low_res) { - if (!tilings_) - return make_scoped_ptr(new TilingSetRasterQueue()); - return make_scoped_ptr( - new TilingSetRasterQueue(tilings_.get(), prioritize_low_res)); -} - const char* PictureLayerImpl::LayerTypeAsString() const { return "cc::PictureLayerImpl"; }
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h index 088477b..57947cc 100644 --- a/cc/layers/picture_layer_impl.h +++ b/cc/layers/picture_layer_impl.h
@@ -16,7 +16,6 @@ #include "cc/resources/picture_layer_tiling_set.h" #include "cc/resources/picture_pile_impl.h" #include "cc/resources/tiling_set_eviction_queue.h" -#include "cc/resources/tiling_set_raster_queue.h" #include "skia/ext/refptr.h" #include "third_party/skia/include/core/SkPicture.h" @@ -48,10 +47,6 @@ bool is_mask() const { return is_mask_; } - scoped_ptr<TilingSetEvictionQueue> CreateEvictionQueue( - TreePriority tree_priority); - scoped_ptr<TilingSetRasterQueue> CreateRasterQueue(bool prioritize_low_res); - // LayerImpl overrides. const char* LayerTypeAsString() const override; scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; @@ -95,6 +90,8 @@ bool CanHaveTilings() const; + PictureLayerTilingSet* picture_layer_tiling_set() { return tilings_.get(); } + // Functions used by tile manager. PictureLayerImpl* GetPendingOrActiveTwinLayer() const; bool IsOnActiveOrPendingTree() const;
diff --git a/cc/layers/picture_layer_impl_perftest.cc b/cc/layers/picture_layer_impl_perftest.cc index 94f8317..c1c0dbb 100644 --- a/cc/layers/picture_layer_impl_perftest.cc +++ b/cc/layers/picture_layer_impl_perftest.cc
@@ -5,6 +5,7 @@ #include "cc/layers/picture_layer_impl.h" #include "cc/debug/lap_timer.h" +#include "cc/resources/tiling_set_raster_queue_all.h" #include "cc/test/fake_impl_proxy.h" #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_output_surface.h" @@ -76,8 +77,8 @@ timer_.Reset(); do { int count = num_tiles; - scoped_ptr<TilingSetRasterQueue> queue = - pending_layer_->CreateRasterQueue(false); + scoped_ptr<TilingSetRasterQueue> queue(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); while (count--) { ASSERT_TRUE(!queue->IsEmpty()) << "count: " << count; ASSERT_TRUE(queue->Top() != nullptr) << "count: " << count; @@ -99,8 +100,8 @@ timer_.Reset(); do { - scoped_ptr<TilingSetRasterQueue> queue = - pending_layer_->CreateRasterQueue(false); + scoped_ptr<TilingSetRasterQueue> queue(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); timer_.NextLap(); } while (!timer_.HasTimeLimitExpired()); @@ -122,8 +123,9 @@ timer_.Reset(); do { int count = num_tiles; - scoped_ptr<TilingSetEvictionQueue> queue = - pending_layer_->CreateEvictionQueue(priorities[priority_count]); + scoped_ptr<TilingSetEvictionQueue> queue( + new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set(), + priorities[priority_count], false)); while (count--) { ASSERT_TRUE(!queue->IsEmpty()) << "count: " << count; ASSERT_TRUE(queue->Top() != nullptr) << "count: " << count; @@ -151,8 +153,9 @@ int priority_count = 0; timer_.Reset(); do { - scoped_ptr<TilingSetEvictionQueue> queue = - pending_layer_->CreateEvictionQueue(priorities[priority_count]); + scoped_ptr<TilingSetEvictionQueue> queue( + new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set(), + priorities[priority_count], false)); priority_count = (priority_count + 1) % arraysize(priorities); timer_.NextLap(); } while (!timer_.HasTimeLimitExpired());
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc index ebbec56..6709b10 100644 --- a/cc/layers/picture_layer_impl_unittest.cc +++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -14,6 +14,8 @@ #include "cc/layers/picture_layer.h" #include "cc/quads/draw_quad.h" #include "cc/quads/tile_draw_quad.h" +#include "cc/resources/tiling_set_raster_queue_all.h" +#include "cc/resources/tiling_set_raster_queue_required.h" #include "cc/test/begin_frame_args_test.h" #include "cc/test/fake_content_layer_client.h" #include "cc/test/fake_impl_proxy.h" @@ -1613,8 +1615,8 @@ int num_visible = 0; int num_offscreen = 0; - scoped_ptr<TilingSetRasterQueue> queue = - pending_layer_->CreateRasterQueue(false); + scoped_ptr<TilingSetRasterQueue> queue(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); for (; !queue->IsEmpty(); queue->Pop()) { const Tile* tile = queue->Top(); DCHECK(tile); @@ -2744,24 +2746,23 @@ host_impl_.SetViewportSize(gfx::Size(500, 500)); - gfx::Size tile_size(100, 100); + gfx::Size recording_tile_size(100, 100); gfx::Size layer_bounds(1000, 1000); scoped_refptr<FakePicturePileImpl> pending_pile = - FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); + FakePicturePileImpl::CreateFilledPile(recording_tile_size, layer_bounds); SetupPendingTree(pending_pile); EXPECT_EQ(2u, pending_layer_->num_tilings()); - scoped_ptr<TilingSetRasterQueue> queue = - pending_layer_->CreateRasterQueue(false); - std::set<Tile*> unique_tiles; bool reached_prepaint = false; - size_t non_ideal_tile_count = 0u; - size_t low_res_tile_count = 0u; - size_t high_res_tile_count = 0u; - queue = pending_layer_->CreateRasterQueue(false); + int non_ideal_tile_count = 0u; + int low_res_tile_count = 0u; + int high_res_tile_count = 0u; + int high_res_now_tiles = 0u; + scoped_ptr<TilingSetRasterQueue> queue(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); TilePriority priority = tile->priority(PENDING_TREE); @@ -2770,12 +2771,15 @@ // Non-high res tiles only get visible tiles. Also, prepaint should only // come at the end of the iteration. - if (priority.resolution != HIGH_RESOLUTION) + if (priority.resolution != HIGH_RESOLUTION) { EXPECT_EQ(TilePriority::NOW, priority.priority_bin); - else if (reached_prepaint) + } else if (reached_prepaint) { EXPECT_NE(TilePriority::NOW, priority.priority_bin); - else + } else { reached_prepaint = priority.priority_bin != TilePriority::NOW; + if (!reached_prepaint) + ++high_res_now_tiles; + } non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION; low_res_tile_count += priority.resolution == LOW_RESOLUTION; @@ -2786,11 +2790,37 @@ } EXPECT_TRUE(reached_prepaint); - EXPECT_EQ(0u, non_ideal_tile_count); - EXPECT_EQ(0u, low_res_tile_count); - EXPECT_EQ(16u, high_res_tile_count); + EXPECT_EQ(0, non_ideal_tile_count); + EXPECT_EQ(0, low_res_tile_count); + + // With layer size being 1000x1000 and default tile size 256x256, we expect to + // see 4 now tiles out of 16 total high res tiles. + EXPECT_EQ(16, high_res_tile_count); + EXPECT_EQ(4, high_res_now_tiles); EXPECT_EQ(low_res_tile_count + high_res_tile_count + non_ideal_tile_count, - unique_tiles.size()); + static_cast<int>(unique_tiles.size())); + + queue.reset(new TilingSetRasterQueueRequired( + pending_layer_->picture_layer_tiling_set(), + RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)); + EXPECT_TRUE(queue->IsEmpty()); + + queue.reset(new TilingSetRasterQueueRequired( + pending_layer_->picture_layer_tiling_set(), + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)); + EXPECT_FALSE(queue->IsEmpty()); + int required_for_activation_count = 0; + while (!queue->IsEmpty()) { + Tile* tile = queue->Top(); + EXPECT_TRUE(tile->required_for_activation()); + EXPECT_FALSE(tile->IsReadyToDraw()); + ++required_for_activation_count; + queue->Pop(); + } + + // All of the high res tiles should be required for activation, since there is + // no active twin. + EXPECT_EQ(high_res_now_tiles, required_for_activation_count); // No NOW tiles. time_ticks += base::TimeDelta::FromMilliseconds(200); @@ -2804,7 +2834,8 @@ unique_tiles.clear(); high_res_tile_count = 0u; - queue = pending_layer_->CreateRasterQueue(false); + queue.reset(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); TilePriority priority = tile->priority(PENDING_TREE); @@ -2821,8 +2852,8 @@ queue->Pop(); } - EXPECT_EQ(16u, high_res_tile_count); - EXPECT_EQ(high_res_tile_count, unique_tiles.size()); + EXPECT_EQ(16, high_res_tile_count); + EXPECT_EQ(high_res_tile_count, static_cast<int>(unique_tiles.size())); time_ticks += base::TimeDelta::FromMilliseconds(200); host_impl_.SetCurrentBeginFrameArgs( @@ -2845,7 +2876,8 @@ non_ideal_tile_count = 0; low_res_tile_count = 0; high_res_tile_count = 0; - queue = pending_layer_->CreateRasterQueue(true); + queue.reset(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), true)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); TilePriority priority = tile->priority(PENDING_TREE); @@ -2858,9 +2890,44 @@ queue->Pop(); } - EXPECT_EQ(0u, non_ideal_tile_count); - EXPECT_EQ(1u, low_res_tile_count); - EXPECT_EQ(0u, high_res_tile_count); + EXPECT_EQ(0, non_ideal_tile_count); + EXPECT_EQ(1, low_res_tile_count); + EXPECT_EQ(0, high_res_tile_count); +} + +TEST_F(PictureLayerImplTest, TilingSetRasterQueueActiveTree) { + base::TimeTicks time_ticks; + time_ticks += base::TimeDelta::FromMilliseconds(1); + host_impl_.SetCurrentBeginFrameArgs( + CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); + + host_impl_.SetViewportSize(gfx::Size(500, 500)); + + gfx::Size tile_size(100, 100); + gfx::Size layer_bounds(1000, 1000); + + scoped_refptr<FakePicturePileImpl> pending_pile = + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); + + SetupPendingTree(pending_pile); + ActivateTree(); + EXPECT_EQ(2u, active_layer_->num_tilings()); + + scoped_ptr<TilingSetRasterQueue> queue(new TilingSetRasterQueueRequired( + active_layer_->picture_layer_tiling_set(), + RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)); + EXPECT_FALSE(queue->IsEmpty()); + while (!queue->IsEmpty()) { + Tile* tile = queue->Top(); + EXPECT_TRUE(tile->required_for_draw()); + EXPECT_FALSE(tile->IsReadyToDraw()); + queue->Pop(); + } + + queue.reset(new TilingSetRasterQueueRequired( + active_layer_->picture_layer_tiling_set(), + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)); + EXPECT_TRUE(queue->IsEmpty()); } TEST_F(PictureLayerImplTest, TilingSetEvictionQueue) { @@ -2915,8 +2982,9 @@ EXPECT_GT(number_of_unmarked_tiles, 1u); // Tiles don't have resources yet. - scoped_ptr<TilingSetEvictionQueue> queue = - pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); + scoped_ptr<TilingSetEvictionQueue> queue( + new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set(), + SAME_PRIORITY_FOR_BOTH_TREES, false)); EXPECT_TRUE(queue->IsEmpty()); host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); @@ -2928,7 +2996,9 @@ Tile* last_tile = nullptr; size_t distance_decreasing = 0; size_t distance_increasing = 0; - queue = pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); + queue.reset( + new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set(), + SAME_PRIORITY_FOR_BOTH_TREES, false)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); if (!last_tile) @@ -3704,8 +3774,9 @@ Tile* last_tile = nullptr; std::set<Tile*> shared_tiles; - scoped_ptr<TilingSetEvictionQueue> queue = - layer->CreateEvictionQueue(tree_priority); + scoped_ptr<TilingSetEvictionQueue> queue( + new TilingSetEvictionQueue(layer->picture_layer_tiling_set(), + tree_priority, layer && twin_layer)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); if (!last_tile) @@ -3739,7 +3810,9 @@ // Count also shared tiles which are occluded in the tree but which were // not returned by the tiling set eviction queue. Those shared tiles // shall be returned by the twin tiling set eviction queue. - queue = twin_layer->CreateEvictionQueue(tree_priority); + queue.reset( + new TilingSetEvictionQueue(twin_layer->picture_layer_tiling_set(), + tree_priority, layer && twin_layer)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); if (tile->is_shared()) { @@ -3828,8 +3901,8 @@ // No occlusion. int unoccluded_tile_count = 0; - scoped_ptr<TilingSetRasterQueue> queue = - pending_layer_->CreateRasterQueue(false); + scoped_ptr<TilingSetRasterQueue> queue(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); @@ -3861,7 +3934,8 @@ host_impl_.pending_tree()->UpdateDrawProperties(); unoccluded_tile_count = 0; - queue = pending_layer_->CreateRasterQueue(false); + queue.reset(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); while (!queue->IsEmpty()) { Tile* tile = queue->Top(); @@ -3884,7 +3958,8 @@ host_impl_.pending_tree()->UpdateDrawProperties(); unoccluded_tile_count = 0; - queue = pending_layer_->CreateRasterQueue(false); + queue.reset(new TilingSetRasterQueueAll( + pending_layer_->picture_layer_tiling_set(), false)); while (!queue->IsEmpty()) { Tile* tile = queue->Top();
diff --git a/cc/resources/eviction_tile_priority_queue.cc b/cc/resources/eviction_tile_priority_queue.cc index fee074a..46fe5ee 100644 --- a/cc/resources/eviction_tile_priority_queue.cc +++ b/cc/resources/eviction_tile_priority_queue.cc
@@ -128,10 +128,17 @@ EvictionTilePriorityQueue::PairedTilingSetQueue::PairedTilingSetQueue( const PictureLayerImpl::Pair& layer_pair, TreePriority tree_priority) { - if (layer_pair.active) - active_queue = layer_pair.active->CreateEvictionQueue(tree_priority); - if (layer_pair.pending) - pending_queue = layer_pair.pending->CreateEvictionQueue(tree_priority); + bool skip_shared_out_of_order_tiles = layer_pair.active && layer_pair.pending; + if (layer_pair.active) { + active_queue = make_scoped_ptr(new TilingSetEvictionQueue( + layer_pair.active->picture_layer_tiling_set(), tree_priority, + skip_shared_out_of_order_tiles)); + } + if (layer_pair.pending) { + pending_queue = make_scoped_ptr(new TilingSetEvictionQueue( + layer_pair.pending->picture_layer_tiling_set(), tree_priority, + skip_shared_out_of_order_tiles)); + } } EvictionTilePriorityQueue::PairedTilingSetQueue::~PairedTilingSetQueue() {
diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h index 0d153b4..15fdb43 100644 --- a/cc/resources/picture_layer_tiling.h +++ b/cc/resources/picture_layer_tiling.h
@@ -233,7 +233,8 @@ protected: friend class CoverageIterator; - friend class TilingSetRasterQueue; + friend class TilingSetRasterQueueAll; + friend class TilingSetRasterQueueRequired; friend class TilingSetEvictionQueue; typedef std::pair<int, int> TileMapKey;
diff --git a/cc/resources/raster_tile_priority_queue.cc b/cc/resources/raster_tile_priority_queue.cc index 9b7942d..08862f6 100644 --- a/cc/resources/raster_tile_priority_queue.cc +++ b/cc/resources/raster_tile_priority_queue.cc
@@ -4,6 +4,9 @@ #include "cc/resources/raster_tile_priority_queue.h" +#include "cc/resources/tiling_set_raster_queue_all.h" +#include "cc/resources/tiling_set_raster_queue_required.h" + namespace cc { namespace { @@ -23,12 +26,12 @@ return b->IsEmpty() < a->IsEmpty(); WhichTree a_tree = a->NextTileIteratorTree(tree_priority_); - const auto* a_queue = - a_tree == ACTIVE_TREE ? a->active_queue.get() : a->pending_queue.get(); + const TilingSetRasterQueue* a_queue = + a_tree == ACTIVE_TREE ? a->active_queue() : a->pending_queue(); WhichTree b_tree = b->NextTileIteratorTree(tree_priority_); - const auto* b_queue = - b_tree == ACTIVE_TREE ? b->active_queue.get() : b->pending_queue.get(); + const TilingSetRasterQueue* b_queue = + b_tree == ACTIVE_TREE ? b->active_queue() : b->pending_queue(); const Tile* a_tile = a_queue->Top(); const Tile* b_tile = b_queue->Top(); @@ -124,6 +127,21 @@ } } +scoped_ptr<TilingSetRasterQueue> CreateTilingSetRasterQueue( + PictureLayerImpl* layer, + TreePriority tree_priority, + RasterTilePriorityQueue::Type type) { + if (!layer) + return nullptr; + PictureLayerTilingSet* tiling_set = layer->picture_layer_tiling_set(); + if (type == RasterTilePriorityQueue::Type::ALL) { + bool prioritize_low_res = tree_priority == SMOOTHNESS_TAKES_PRIORITY; + return make_scoped_ptr( + new TilingSetRasterQueueAll(tiling_set, prioritize_low_res)); + } + return make_scoped_ptr(new TilingSetRasterQueueRequired(tiling_set, type)); +} + } // namespace RasterTilePriorityQueue::RasterTilePriorityQueue() { @@ -134,14 +152,15 @@ void RasterTilePriorityQueue::Build( const std::vector<PictureLayerImpl::Pair>& paired_layers, - TreePriority tree_priority) { + TreePriority tree_priority, + Type type) { tree_priority_ = tree_priority; for (std::vector<PictureLayerImpl::Pair>::const_iterator it = paired_layers.begin(); it != paired_layers.end(); ++it) { paired_queues_.push_back( - make_scoped_ptr(new PairedTilingSetQueue(*it, tree_priority_))); + make_scoped_ptr(new PairedTilingSetQueue(*it, tree_priority_, type))); } paired_queues_.make_heap(RasterOrderComparator(tree_priority_)); } @@ -173,20 +192,29 @@ RasterTilePriorityQueue::PairedTilingSetQueue::PairedTilingSetQueue( const PictureLayerImpl::Pair& layer_pair, - TreePriority tree_priority) - : has_both_layers(layer_pair.active && layer_pair.pending) { - if (layer_pair.active) { - active_queue = layer_pair.active->CreateRasterQueue( - tree_priority == SMOOTHNESS_TAKES_PRIORITY); + TreePriority tree_priority, + Type type) + : has_both_layers_(false) { + switch (type) { + case RasterTilePriorityQueue::Type::ALL: + has_both_layers_ = layer_pair.active && layer_pair.pending; + active_queue_ = + CreateTilingSetRasterQueue(layer_pair.active, tree_priority, type); + pending_queue_ = + CreateTilingSetRasterQueue(layer_pair.pending, tree_priority, type); + break; + case RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION: + pending_queue_ = + CreateTilingSetRasterQueue(layer_pair.pending, tree_priority, type); + break; + case RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW: + active_queue_ = + CreateTilingSetRasterQueue(layer_pair.active, tree_priority, type); + break; } + DCHECK_IMPLIES(has_both_layers_, active_queue_ && pending_queue_); - if (layer_pair.pending) { - pending_queue = layer_pair.pending->CreateRasterQueue( - tree_priority == SMOOTHNESS_TAKES_PRIORITY); - } - - if (has_both_layers) - SkipTilesReturnedByTwin(tree_priority); + SkipTilesReturnedByTwin(tree_priority); TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"), "PairedTilingSetQueue::PairedTilingSetQueue", @@ -200,8 +228,8 @@ } bool RasterTilePriorityQueue::PairedTilingSetQueue::IsEmpty() const { - return (!active_queue || active_queue->IsEmpty()) && - (!pending_queue || pending_queue->IsEmpty()); + return (!active_queue_ || active_queue_->IsEmpty()) && + (!pending_queue_ || pending_queue_->IsEmpty()); } Tile* RasterTilePriorityQueue::PairedTilingSetQueue::Top( @@ -210,10 +238,11 @@ WhichTree next_tree = NextTileIteratorTree(tree_priority); TilingSetRasterQueue* next_queue = - next_tree == ACTIVE_TREE ? active_queue.get() : pending_queue.get(); + next_tree == ACTIVE_TREE ? active_queue_.get() : pending_queue_.get(); DCHECK(next_queue && !next_queue->IsEmpty()); Tile* tile = next_queue->Top(); - DCHECK(returned_tiles_for_debug.find(tile) == returned_tiles_for_debug.end()); + DCHECK(returned_tiles_for_debug_.find(tile) == + returned_tiles_for_debug_.end()); return tile; } @@ -223,13 +252,12 @@ WhichTree next_tree = NextTileIteratorTree(tree_priority); TilingSetRasterQueue* next_queue = - next_tree == ACTIVE_TREE ? active_queue.get() : pending_queue.get(); + next_tree == ACTIVE_TREE ? active_queue_.get() : pending_queue_.get(); DCHECK(next_queue && !next_queue->IsEmpty()); - DCHECK(returned_tiles_for_debug.insert(next_queue->Top()).second); + DCHECK(returned_tiles_for_debug_.insert(next_queue->Top()).second); next_queue->Pop(); - if (has_both_layers) - SkipTilesReturnedByTwin(tree_priority); + SkipTilesReturnedByTwin(tree_priority); // If no empty, use Top to do DCHECK the next iterator. DCHECK(IsEmpty() || Top(tree_priority)); @@ -237,12 +265,15 @@ void RasterTilePriorityQueue::PairedTilingSetQueue::SkipTilesReturnedByTwin( TreePriority tree_priority) { + if (!has_both_layers_) + return; + // We have both layers (active and pending) thus we can encounter shared // tiles twice (from the active iterator and from the pending iterator). while (!IsEmpty()) { WhichTree next_tree = NextTileIteratorTree(tree_priority); TilingSetRasterQueue* next_queue = - next_tree == ACTIVE_TREE ? active_queue.get() : pending_queue.get(); + next_tree == ACTIVE_TREE ? active_queue_.get() : pending_queue_.get(); DCHECK(next_queue && !next_queue->IsEmpty()); // Accept all non-shared tiles. @@ -265,14 +296,14 @@ DCHECK(!IsEmpty()); // If we only have one queue with tiles, return it. - if (!active_queue || active_queue->IsEmpty()) + if (!active_queue_ || active_queue_->IsEmpty()) return PENDING_TREE; - if (!pending_queue || pending_queue->IsEmpty()) + if (!pending_queue_ || pending_queue_->IsEmpty()) return ACTIVE_TREE; // Now both iterators have tiles, so we have to decide based on tree priority. - return HigherPriorityTree(tree_priority, active_queue.get(), - pending_queue.get(), nullptr); + return HigherPriorityTree(tree_priority, active_queue_.get(), + pending_queue_.get(), nullptr); } scoped_refptr<base::debug::ConvertableToTraceFormat> @@ -280,14 +311,14 @@ scoped_refptr<base::debug::TracedValue> state = new base::debug::TracedValue(); - bool active_queue_has_tile = active_queue && !active_queue->IsEmpty(); + bool active_queue_has_tile = active_queue_ && !active_queue_->IsEmpty(); TilePriority::PriorityBin active_priority_bin = TilePriority::EVENTUALLY; TilePriority::PriorityBin pending_priority_bin = TilePriority::EVENTUALLY; if (active_queue_has_tile) { active_priority_bin = - active_queue->Top()->priority(ACTIVE_TREE).priority_bin; + active_queue_->Top()->priority(ACTIVE_TREE).priority_bin; pending_priority_bin = - active_queue->Top()->priority(PENDING_TREE).priority_bin; + active_queue_->Top()->priority(PENDING_TREE).priority_bin; } state->BeginDictionary("active_queue"); @@ -296,14 +327,14 @@ state->SetInteger("pending_priority_bin", pending_priority_bin); state->EndDictionary(); - bool pending_queue_has_tile = pending_queue && !pending_queue->IsEmpty(); + bool pending_queue_has_tile = pending_queue_ && !pending_queue_->IsEmpty(); active_priority_bin = TilePriority::EVENTUALLY; pending_priority_bin = TilePriority::EVENTUALLY; if (pending_queue_has_tile) { active_priority_bin = - pending_queue->Top()->priority(ACTIVE_TREE).priority_bin; + pending_queue_->Top()->priority(ACTIVE_TREE).priority_bin; pending_priority_bin = - pending_queue->Top()->priority(PENDING_TREE).priority_bin; + pending_queue_->Top()->priority(PENDING_TREE).priority_bin; } state->BeginDictionary("pending_queue");
diff --git a/cc/resources/raster_tile_priority_queue.h b/cc/resources/raster_tile_priority_queue.h index 416a57a..65c9247 100644 --- a/cc/resources/raster_tile_priority_queue.h +++ b/cc/resources/raster_tile_priority_queue.h
@@ -16,12 +16,20 @@ namespace cc { +// TODO(vmpstr): Consider virtualizing this and adding ::Create with the +// parameters of ::Build that would create a simpler queue for required only +// tiles (ie, there's no need for the heap if all we're interested in are the +// required tiles. class CC_EXPORT RasterTilePriorityQueue { public: - struct PairedTilingSetQueue { + enum class Type { ALL, REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW }; + + class PairedTilingSetQueue { + public: PairedTilingSetQueue(); PairedTilingSetQueue(const PictureLayerImpl::Pair& layer_pair, - TreePriority tree_priority); + TreePriority tree_priority, + Type type); ~PairedTilingSetQueue(); bool IsEmpty() const; @@ -33,19 +41,28 @@ scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; - scoped_ptr<TilingSetRasterQueue> active_queue; - scoped_ptr<TilingSetRasterQueue> pending_queue; - bool has_both_layers; + const TilingSetRasterQueue* active_queue() const { + return active_queue_.get(); + } + const TilingSetRasterQueue* pending_queue() const { + return pending_queue_.get(); + } + + private: + scoped_ptr<TilingSetRasterQueue> active_queue_; + scoped_ptr<TilingSetRasterQueue> pending_queue_; + bool has_both_layers_; // Set of returned tiles (excluding the current one) for DCHECKing. - std::set<const Tile*> returned_tiles_for_debug; + std::set<const Tile*> returned_tiles_for_debug_; }; RasterTilePriorityQueue(); ~RasterTilePriorityQueue(); void Build(const std::vector<PictureLayerImpl::Pair>& paired_layers, - TreePriority tree_priority); + TreePriority tree_priority, + Type type); void Reset(); bool IsEmpty() const;
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index 9d9b247..38f79fb 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc
@@ -1049,6 +1049,13 @@ GLES2Interface* gl = resource_provider_->ContextGL(); DCHECK(gl); +#if defined(OS_CHROMEOS) + // TODO(reveman): GL_COMMANDS_ISSUED_CHROMIUM is used for synchronization + // on ChromeOS to avoid some performance issues. This only works with + // shared memory backed buffers. crbug.com/436314 + DCHECK_EQ(gpu_memory_buffer_->GetHandle().type, gfx::SHARED_MEMORY_BUFFER); +#endif + resource_->image_id = gl->CreateImageCHROMIUM(gpu_memory_buffer_->AsClientBuffer(), size_.width(), @@ -2070,8 +2077,16 @@ if (use_sync_query_) { if (!source_resource->gl_read_lock_query_id) gl->GenQueriesEXT(1, &source_resource->gl_read_lock_query_id); +#if defined(OS_CHROMEOS) + // TODO(reveman): This avoids a performance problem on some ChromeOS + // devices. This needs to be removed to support native GpuMemoryBuffer + // implementations. crbug.com/436314 + gl->BeginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM, + source_resource->gl_read_lock_query_id); +#else gl->BeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, source_resource->gl_read_lock_query_id); +#endif } DCHECK(!dest_resource->image_id); dest_resource->allocated = true; @@ -2084,7 +2099,11 @@ if (source_resource->gl_read_lock_query_id) { // End query and create a read lock fence that will prevent access to // source resource until CopyTextureCHROMIUM command has completed. +#if defined(OS_CHROMEOS) + gl->EndQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM); +#else gl->EndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM); +#endif source_resource->read_lock_fence = make_scoped_refptr( new CopyTextureFence(gl, source_resource->gl_read_lock_query_id)); } else {
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc index dff3a52..824dca9 100644 --- a/cc/resources/tile_manager.cc +++ b/cc/resources/tile_manager.cc
@@ -418,28 +418,6 @@ tiles_that_need_to_be_rasterized, resource_pool_, base::Bind(&TileManager::UpdateTileDrawInfo, base::Unretained(this))); - // Use on-demand raster for any required-for-activation tiles that have not - // been been assigned memory after reaching a steady memory state. This - // ensures that we activate even when OOM. Note that we have to rebuilt the - // queue in case the last AssignGpuMemoryToTiles evicted some tiles that would - // otherwise not be picked up by the old raster queue. - client_->BuildRasterQueue(&raster_priority_queue_, - global_state_.tree_priority); - - // Use on-demand raster for any tiles that have not been been assigned - // memory. This ensures that we draw even when OOM. - while (!raster_priority_queue_.IsEmpty()) { - Tile* tile = raster_priority_queue_.Top(); - TileDrawInfo& draw_info = tile->draw_info(); - - if (tile->required_for_draw() && !draw_info.IsReadyToDraw()) { - draw_info.set_rasterize_on_demand(); - client_->NotifyTileStateChanged(tile); - } - raster_priority_queue_.Pop(); - } - raster_priority_queue_.Reset(); - TRACE_EVENT_INSTANT1("cc", "DidRasterize", TRACE_EVENT_SCOPE_THREAD, "state", BasicStateAsValue()); @@ -580,8 +558,11 @@ resource_pool_->acquired_resource_count()); eviction_priority_queue_is_up_to_date_ = false; + // TODO(vmpstr): Take this as a parameter and have SynchronousRaster build a + // REQUIRED_FOR_DRAW queue. client_->BuildRasterQueue(&raster_priority_queue_, - global_state_.tree_priority); + global_state_.tree_priority, + RasterTilePriorityQueue::Type::ALL); while (!raster_priority_queue_.IsEmpty()) { Tile* tile = raster_priority_queue_.Top(); @@ -880,6 +861,8 @@ TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); + // TODO(vmpstr): Replace this with building a REQUIRED_TO_ACTIVATE raster + // queue and checking if it's empty. for (const auto& layer : layers) { if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) return false; @@ -891,6 +874,8 @@ bool TileManager::IsReadyToDraw() const { const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); + // TODO(vmpstr): Replace this with building a REQUIRED_TO_DRAW raster queue + // and checking if it's empty. for (const auto& layer : layers) { if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) return false; @@ -979,8 +964,10 @@ // ensures that we activate even when OOM. Note that we have to rebuilt the // queue in case the last AssignGpuMemoryToTiles evicted some tiles that // would otherwise not be picked up by the old raster queue. + // TODO(vmpstr): Make this use REQUIRED_FOR_ACTIVAITON queue. client_->BuildRasterQueue(&raster_priority_queue_, - global_state_.tree_priority); + global_state_.tree_priority, + RasterTilePriorityQueue::Type::ALL); bool ready_to_activate = true; while (!raster_priority_queue_.IsEmpty()) { Tile* tile = raster_priority_queue_.Top();
diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h index 3ae9715..f1d00fe 100644 --- a/cc/resources/tile_manager.h +++ b/cc/resources/tile_manager.h
@@ -61,7 +61,8 @@ // that will return tiles in order in which they should be rasterized. // Note if the queue was previous built, Reset must be called on it. virtual void BuildRasterQueue(RasterTilePriorityQueue* queue, - TreePriority tree_priority) = 0; + TreePriority tree_priority, + RasterTilePriorityQueue::Type type) = 0; // Given an empty eviction tile priority queue, this will build a priority // queue that will return tiles in order in which they should be evicted.
diff --git a/cc/resources/tile_manager_perftest.cc b/cc/resources/tile_manager_perftest.cc index e93e0b2..911e5c9 100644 --- a/cc/resources/tile_manager_perftest.cc +++ b/cc/resources/tile_manager_perftest.cc
@@ -181,7 +181,8 @@ timer_.Reset(); do { RasterTilePriorityQueue queue; - host_impl_.BuildRasterQueue(&queue, priorities[priority_count]); + host_impl_.BuildRasterQueue(&queue, priorities[priority_count], + RasterTilePriorityQueue::Type::ALL); priority_count = (priority_count + 1) % arraysize(priorities); timer_.NextLap(); } while (!timer_.HasTimeLimitExpired()); @@ -211,7 +212,8 @@ do { int count = tile_count; RasterTilePriorityQueue queue; - host_impl_.BuildRasterQueue(&queue, priorities[priority_count]); + host_impl_.BuildRasterQueue(&queue, priorities[priority_count], + RasterTilePriorityQueue::Type::ALL); while (count--) { ASSERT_FALSE(queue.IsEmpty()); ASSERT_TRUE(queue.Top() != NULL);
diff --git a/cc/resources/tile_manager_unittest.cc b/cc/resources/tile_manager_unittest.cc index 113cd72..aae4e3f 100644 --- a/cc/resources/tile_manager_unittest.cc +++ b/cc/resources/tile_manager_unittest.cc
@@ -6,6 +6,7 @@ #include "cc/resources/raster_tile_priority_queue.h" #include "cc/resources/tile.h" #include "cc/resources/tile_priority.h" +#include "cc/resources/tiling_set_raster_queue_all.h" #include "cc/test/begin_frame_args_test.h" #include "cc/test/fake_impl_proxy.h" #include "cc/test/fake_layer_tree_host_impl.h" @@ -151,7 +152,8 @@ SetupDefaultTrees(layer_bounds); RasterTilePriorityQueue queue; - host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); + host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); EXPECT_FALSE(queue.IsEmpty()); size_t tile_count = 0; @@ -169,7 +171,8 @@ // Sanity check, all tiles should be visible. std::set<Tile*> smoothness_tiles; queue.Reset(); - host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); + host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::ALL); bool had_low_res = false; while (!queue.IsEmpty()) { Tile* tile = queue.Top(); @@ -185,6 +188,33 @@ EXPECT_EQ(all_tiles, smoothness_tiles); EXPECT_TRUE(had_low_res); + // Check that everything is required for activation. + queue.Reset(); + host_impl_.BuildRasterQueue( + &queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); + std::set<Tile*> required_for_activation_tiles; + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + EXPECT_TRUE(tile->required_for_activation()); + required_for_activation_tiles.insert(tile); + queue.Pop(); + } + EXPECT_EQ(all_tiles, required_for_activation_tiles); + + // Check that everything is required for draw. + queue.Reset(); + host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); + std::set<Tile*> required_for_draw_tiles; + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + EXPECT_TRUE(tile->required_for_draw()); + required_for_draw_tiles.insert(tile); + queue.Pop(); + } + EXPECT_EQ(all_tiles, required_for_draw_tiles); + Region invalidation(gfx::Rect(0, 0, 500, 500)); // Invalidate the pending tree. @@ -239,7 +269,10 @@ size_t correct_order_tiles = 0u; // Here we expect to get increasing ACTIVE_TREE priority_bin. queue.Reset(); - host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); + host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::ALL); + std::set<Tile*> expected_required_for_draw_tiles; + std::set<Tile*> expected_required_for_activation_tiles; while (!queue.IsEmpty()) { Tile* tile = queue.Top(); EXPECT_TRUE(tile); @@ -275,6 +308,10 @@ last_tile = tile; ++tile_count; smoothness_tiles.insert(tile); + if (tile->required_for_draw()) + expected_required_for_draw_tiles.insert(tile); + if (tile->required_for_activation()) + expected_required_for_activation_tiles.insert(tile); queue.Pop(); } @@ -284,12 +321,43 @@ // should check that we're _mostly_ right. EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); + // Check that we have consistent required_for_activation tiles. + queue.Reset(); + host_impl_.BuildRasterQueue( + &queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); + required_for_activation_tiles.clear(); + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + EXPECT_TRUE(tile->required_for_activation()); + required_for_activation_tiles.insert(tile); + queue.Pop(); + } + EXPECT_EQ(expected_required_for_activation_tiles, + required_for_activation_tiles); + EXPECT_NE(all_tiles, required_for_activation_tiles); + + // Check that we have consistent required_for_draw tiles. + queue.Reset(); + host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); + required_for_draw_tiles.clear(); + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + EXPECT_TRUE(tile->required_for_draw()); + required_for_draw_tiles.insert(tile); + queue.Pop(); + } + EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); + EXPECT_NE(all_tiles, required_for_draw_tiles); + std::set<Tile*> new_content_tiles; last_tile = NULL; size_t increasing_distance_tiles = 0u; // Here we expect to get increasing PENDING_TREE priority_bin. queue.Reset(); - host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY); + host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::ALL); tile_count = 0; while (!queue.IsEmpty()) { Tile* tile = queue.Top(); @@ -325,6 +393,136 @@ // Since we don't guarantee increasing distance due to spiral iterator, we // should check that we're _mostly_ right. EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); + + // Check that we have consistent required_for_activation tiles. + queue.Reset(); + host_impl_.BuildRasterQueue( + &queue, NEW_CONTENT_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); + required_for_activation_tiles.clear(); + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + EXPECT_TRUE(tile->required_for_activation()); + required_for_activation_tiles.insert(tile); + queue.Pop(); + } + EXPECT_EQ(expected_required_for_activation_tiles, + required_for_activation_tiles); + EXPECT_NE(new_content_tiles, required_for_activation_tiles); + + // Check that we have consistent required_for_draw tiles. + queue.Reset(); + host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); + required_for_draw_tiles.clear(); + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + EXPECT_TRUE(tile->required_for_draw()); + required_for_draw_tiles.insert(tile); + queue.Pop(); + } + EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); + EXPECT_NE(new_content_tiles, required_for_draw_tiles); +} + +TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) { + const gfx::Size layer_bounds(1000, 1000); + host_impl_.SetViewportSize(gfx::Size(500, 500)); + SetupDefaultTrees(layer_bounds); + + // Use a tile's content rect as an invalidation. We should inset it a bit to + // ensure that border math doesn't invalidate neighbouring tiles. + gfx::Rect invalidation = + pending_layer_->HighResTiling()->TileAt(1, 0)->content_rect(); + invalidation.Inset(2, 2); + + pending_layer_->set_invalidation(invalidation); + pending_layer_->HighResTiling()->Invalidate(invalidation); + pending_layer_->LowResTiling()->Invalidate(invalidation); + + // Sanity checks: Tile at 0, 0 should be the same on both trees, tile at 1, 0 + // should be different. + EXPECT_TRUE(pending_layer_->HighResTiling()->TileAt(0, 0)); + EXPECT_TRUE(active_layer_->HighResTiling()->TileAt(0, 0)); + EXPECT_EQ(pending_layer_->HighResTiling()->TileAt(0, 0), + active_layer_->HighResTiling()->TileAt(0, 0)); + EXPECT_TRUE(pending_layer_->HighResTiling()->TileAt(1, 0)); + EXPECT_TRUE(active_layer_->HighResTiling()->TileAt(1, 0)); + EXPECT_NE(pending_layer_->HighResTiling()->TileAt(1, 0), + active_layer_->HighResTiling()->TileAt(1, 0)); + + std::set<Tile*> expected_now_tiles; + std::set<Tile*> expected_required_for_draw_tiles; + std::set<Tile*> expected_required_for_activation_tiles; + for (int i = 0; i <= 1; ++i) { + for (int j = 0; j <= 1; ++j) { + expected_now_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j)); + expected_now_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j)); + + expected_required_for_activation_tiles.insert( + pending_layer_->HighResTiling()->TileAt(i, j)); + expected_required_for_draw_tiles.insert( + active_layer_->HighResTiling()->TileAt(i, j)); + } + } + // Expect 3 shared tiles and 1 unshared tile in total. + EXPECT_EQ(5u, expected_now_tiles.size()); + // Expect 4 tiles for each draw and activation, but not all the same. + EXPECT_EQ(4u, expected_required_for_activation_tiles.size()); + EXPECT_EQ(4u, expected_required_for_draw_tiles.size()); + EXPECT_NE(expected_required_for_draw_tiles, + expected_required_for_activation_tiles); + + std::set<Tile*> expected_all_tiles; + for (int i = 0; i <= 3; ++i) { + for (int j = 0; j <= 3; ++j) { + expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j)); + expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j)); + } + } + // Expect 15 shared tiles and 1 unshared tile. + EXPECT_EQ(17u, expected_all_tiles.size()); + + // The actual test will now build different queues and verify that the queues + // return the same information as computed manually above. + RasterTilePriorityQueue queue; + host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); + std::set<Tile*> actual_now_tiles; + std::set<Tile*> actual_all_tiles; + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + queue.Pop(); + if (tile->combined_priority().priority_bin == TilePriority::NOW) + actual_now_tiles.insert(tile); + actual_all_tiles.insert(tile); + } + EXPECT_EQ(expected_now_tiles, actual_now_tiles); + EXPECT_EQ(expected_all_tiles, actual_all_tiles); + + queue.Reset(); + host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); + std::set<Tile*> actual_required_for_draw_tiles; + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + queue.Pop(); + actual_required_for_draw_tiles.insert(tile); + } + EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles); + + queue.Reset(); + host_impl_.BuildRasterQueue( + &queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); + std::set<Tile*> actual_required_for_activation_tiles; + while (!queue.IsEmpty()) { + Tile* tile = queue.Top(); + queue.Pop(); + actual_required_for_activation_tiles.insert(tile); + } + EXPECT_EQ(expected_required_for_activation_tiles, + actual_required_for_activation_tiles); } TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { @@ -356,7 +554,8 @@ RasterTilePriorityQueue queue; host_impl_.SetRequiresHighResToDraw(); - host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); + host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, + RasterTilePriorityQueue::Type::ALL); EXPECT_FALSE(queue.IsEmpty()); // Get all the tiles that are NOW or SOON and make sure they are ready to @@ -391,7 +590,8 @@ size_t tile_count = 0; RasterTilePriorityQueue raster_queue; - host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); + host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); while (!raster_queue.IsEmpty()) { ++tile_count; EXPECT_TRUE(raster_queue.Top()); @@ -588,7 +788,8 @@ std::set<Tile*> all_tiles; size_t tile_count = 0; RasterTilePriorityQueue raster_queue; - host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); + host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); while (!raster_queue.IsEmpty()) { ++tile_count; EXPECT_TRUE(raster_queue.Top()); @@ -793,7 +994,8 @@ SetupDefaultTrees(layer_bounds); RasterTilePriorityQueue queue; - host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); + host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); EXPECT_FALSE(queue.IsEmpty()); size_t tile_count = 0; @@ -817,7 +1019,8 @@ pending_layer_->AddChild(pending_layer.Pass()); } - host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); + host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); EXPECT_FALSE(queue.IsEmpty()); tile_count = 0; @@ -838,7 +1041,8 @@ SetupDefaultTrees(layer_bounds); RasterTilePriorityQueue raster_queue; - host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); + host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, + RasterTilePriorityQueue::Type::ALL); EXPECT_FALSE(raster_queue.IsEmpty()); size_t tile_count = 0; @@ -905,12 +1109,7 @@ tiling->set_resolution(HIGH_RESOLUTION); tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true); - - TilingSetRasterQueue empty_queue; - EXPECT_TRUE(empty_queue.IsEmpty()); - std::vector<Tile*> all_tiles = tiling->AllTilesForTesting(); - // Sanity check. EXPECT_EQ(841u, all_tiles.size()); @@ -922,7 +1121,8 @@ // 3. Third iteration ensures that no tiles are returned, since they were all // marked as ready to draw. for (int i = 0; i < 3; ++i) { - TilingSetRasterQueue queue(tiling_set.get(), false); + scoped_ptr<TilingSetRasterQueue> queue( + new TilingSetRasterQueueAll(tiling_set.get(), false)); // There are 3 bins in TilePriority. bool have_tiles[3] = {}; @@ -930,14 +1130,14 @@ // On the third iteration, we should get no tiles since everything was // marked as ready to draw. if (i == 2) { - EXPECT_TRUE(queue.IsEmpty()); + EXPECT_TRUE(queue->IsEmpty()); continue; } - EXPECT_FALSE(queue.IsEmpty()); + EXPECT_FALSE(queue->IsEmpty()); std::set<Tile*> unique_tiles; - unique_tiles.insert(queue.Top()); - Tile* last_tile = queue.Top(); + unique_tiles.insert(queue->Top()); + Tile* last_tile = queue->Top(); have_tiles[last_tile->priority(ACTIVE_TREE).priority_bin] = true; // On the second iteration, mark everything as ready to draw (solid color). @@ -945,12 +1145,12 @@ TileDrawInfo& draw_info = last_tile->draw_info(); draw_info.SetSolidColorForTesting(SK_ColorRED); } - queue.Pop(); + queue->Pop(); int eventually_bin_order_correct_count = 0; int eventually_bin_order_incorrect_count = 0; - while (!queue.IsEmpty()) { - Tile* new_tile = queue.Top(); - queue.Pop(); + while (!queue->IsEmpty()) { + Tile* new_tile = queue->Top(); + queue->Pop(); unique_tiles.insert(new_tile); TilePriority last_priority = last_tile->priority(ACTIVE_TREE); @@ -1031,12 +1231,13 @@ Tile* last_tile = NULL; int eventually_bin_order_correct_count = 0; int eventually_bin_order_incorrect_count = 0; - for (TilingSetRasterQueue queue(tiling_set.get(), false); !queue.IsEmpty(); - queue.Pop()) { + scoped_ptr<TilingSetRasterQueue> queue( + new TilingSetRasterQueueAll(tiling_set.get(), false)); + for (; !queue->IsEmpty(); queue->Pop()) { if (!last_tile) - last_tile = queue.Top(); + last_tile = queue->Top(); - Tile* new_tile = queue.Top(); + Tile* new_tile = queue->Top(); TilePriority last_priority = last_tile->priority(ACTIVE_TREE); TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
diff --git a/cc/resources/tiling_set_raster_queue.h b/cc/resources/tiling_set_raster_queue.h index e325036..0a131a9 100644 --- a/cc/resources/tiling_set_raster_queue.h +++ b/cc/resources/tiling_set_raster_queue.h
@@ -5,91 +5,17 @@ #ifndef CC_RESOURCES_TILING_SET_RASTER_QUEUE_H_ #define CC_RESOURCES_TILING_SET_RASTER_QUEUE_H_ -#include "cc/base/cc_export.h" -#include "cc/resources/picture_layer_tiling_set.h" -#include "cc/resources/tile.h" -#include "cc/resources/tile_priority.h" - namespace cc { +class Tile; -class CC_EXPORT TilingSetRasterQueue { +class TilingSetRasterQueue { public: - TilingSetRasterQueue(); - TilingSetRasterQueue(PictureLayerTilingSet* tiling_set, - bool prioritize_low_res); - ~TilingSetRasterQueue(); + virtual ~TilingSetRasterQueue() {} - Tile* Top(); - const Tile* Top() const; - void Pop(); - bool IsEmpty() const; - - private: - class TilingIterator { - public: - TilingIterator(); - explicit TilingIterator(PictureLayerTiling* tiling, - TilingData* tiling_data); - ~TilingIterator(); - - operator bool() const { return !!current_tile_; } - const Tile* operator*() const { return current_tile_; } - Tile* operator*() { return current_tile_; } - TilePriority::PriorityBin type() const { - switch (phase_) { - case VISIBLE_RECT: - return TilePriority::NOW; - case SKEWPORT_RECT: - case SOON_BORDER_RECT: - return TilePriority::SOON; - case EVENTUALLY_RECT: - return TilePriority::EVENTUALLY; - } - NOTREACHED(); - return TilePriority::EVENTUALLY; - } - - TilingIterator& operator++(); - - private: - enum Phase { - VISIBLE_RECT, - SKEWPORT_RECT, - SOON_BORDER_RECT, - EVENTUALLY_RECT - }; - - void AdvancePhase(); - bool TileNeedsRaster(Tile* tile) const { - return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); - } - - PictureLayerTiling* tiling_; - TilingData* tiling_data_; - - Phase phase_; - - Tile* current_tile_; - TilingData::Iterator visible_iterator_; - TilingData::SpiralDifferenceIterator spiral_iterator_; - }; - - enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS }; - - void AdvanceToNextStage(); - - PictureLayerTilingSet* tiling_set_; - - struct IterationStage { - IteratorType iterator_type; - TilePriority::PriorityBin tile_type; - }; - - size_t current_stage_; - - // One low res stage, and three high res stages. - IterationStage stages_[4]; - TilingIterator iterators_[NUM_ITERATORS]; + virtual Tile* Top() = 0; + virtual const Tile* Top() const = 0; + virtual void Pop() = 0; + virtual bool IsEmpty() const = 0; }; } // namespace cc
diff --git a/cc/resources/tiling_set_raster_queue.cc b/cc/resources/tiling_set_raster_queue_all.cc similarity index 82% rename from cc/resources/tiling_set_raster_queue.cc rename to cc/resources/tiling_set_raster_queue_all.cc index 53fc992..c4d949c 100644 --- a/cc/resources/tiling_set_raster_queue.cc +++ b/cc/resources/tiling_set_raster_queue_all.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 "cc/resources/tiling_set_raster_queue.h" +#include "cc/resources/tiling_set_raster_queue_all.h" #include <utility> @@ -12,12 +12,9 @@ namespace cc { -TilingSetRasterQueue::TilingSetRasterQueue() - : tiling_set_(nullptr), current_stage_(arraysize(stages_)) { -} - -TilingSetRasterQueue::TilingSetRasterQueue(PictureLayerTilingSet* tiling_set, - bool prioritize_low_res) +TilingSetRasterQueueAll::TilingSetRasterQueueAll( + PictureLayerTilingSet* tiling_set, + bool prioritize_low_res) : tiling_set_(tiling_set), current_stage_(0) { DCHECK(tiling_set_); @@ -58,69 +55,70 @@ IteratorType index = stages_[current_stage_].iterator_type; TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; - if (!iterators_[index] || iterators_[index].type() != tile_type) + if (iterators_[index].done() || iterators_[index].type() != tile_type) AdvanceToNextStage(); } -TilingSetRasterQueue::~TilingSetRasterQueue() { +TilingSetRasterQueueAll::~TilingSetRasterQueueAll() { } -bool TilingSetRasterQueue::IsEmpty() const { +bool TilingSetRasterQueueAll::IsEmpty() const { return current_stage_ >= arraysize(stages_); } -void TilingSetRasterQueue::Pop() { +void TilingSetRasterQueueAll::Pop() { IteratorType index = stages_[current_stage_].iterator_type; TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; // First advance the iterator. - DCHECK(iterators_[index]); + DCHECK(!iterators_[index].done()); DCHECK(iterators_[index].type() == tile_type); ++iterators_[index]; - if (!iterators_[index] || iterators_[index].type() != tile_type) + if (iterators_[index].done() || iterators_[index].type() != tile_type) AdvanceToNextStage(); } -Tile* TilingSetRasterQueue::Top() { +Tile* TilingSetRasterQueueAll::Top() { DCHECK(!IsEmpty()); IteratorType index = stages_[current_stage_].iterator_type; - DCHECK(iterators_[index]); + DCHECK(!iterators_[index].done()); DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type); return *iterators_[index]; } -const Tile* TilingSetRasterQueue::Top() const { +const Tile* TilingSetRasterQueueAll::Top() const { DCHECK(!IsEmpty()); IteratorType index = stages_[current_stage_].iterator_type; - DCHECK(iterators_[index]); + DCHECK(!iterators_[index].done()); DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type); return *iterators_[index]; } -void TilingSetRasterQueue::AdvanceToNextStage() { +void TilingSetRasterQueueAll::AdvanceToNextStage() { DCHECK_LT(current_stage_, arraysize(stages_)); ++current_stage_; while (current_stage_ < arraysize(stages_)) { IteratorType index = stages_[current_stage_].iterator_type; TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; - if (iterators_[index] && iterators_[index].type() == tile_type) + if (!iterators_[index].done() && iterators_[index].type() == tile_type) break; ++current_stage_; } } -TilingSetRasterQueue::TilingIterator::TilingIterator() +TilingSetRasterQueueAll::TilingIterator::TilingIterator() : tiling_(NULL), current_tile_(NULL) { } -TilingSetRasterQueue::TilingIterator::TilingIterator(PictureLayerTiling* tiling, - TilingData* tiling_data) +TilingSetRasterQueueAll::TilingIterator::TilingIterator( + PictureLayerTiling* tiling, + TilingData* tiling_data) : tiling_(tiling), tiling_data_(tiling_data), phase_(VISIBLE_RECT), @@ -147,10 +145,10 @@ tiling_->UpdateTileAndTwinPriority(current_tile_); } -TilingSetRasterQueue::TilingIterator::~TilingIterator() { +TilingSetRasterQueueAll::TilingIterator::~TilingIterator() { } -void TilingSetRasterQueue::TilingIterator::AdvancePhase() { +void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { DCHECK_LT(phase_, EVENTUALLY_RECT); do { @@ -206,8 +204,9 @@ tiling_->UpdateTileAndTwinPriority(current_tile_); } -TilingSetRasterQueue::TilingIterator& TilingSetRasterQueue::TilingIterator:: -operator++() { +TilingSetRasterQueueAll::TilingIterator& + TilingSetRasterQueueAll::TilingIterator:: + operator++() { current_tile_ = NULL; while (!current_tile_ || !TileNeedsRaster(current_tile_)) { std::pair<int, int> next_index;
diff --git a/cc/resources/tiling_set_raster_queue_all.h b/cc/resources/tiling_set_raster_queue_all.h new file mode 100644 index 0000000..bea70d3 --- /dev/null +++ b/cc/resources/tiling_set_raster_queue_all.h
@@ -0,0 +1,100 @@ +// 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 CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ +#define CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ + +#include "cc/base/cc_export.h" +#include "cc/resources/picture_layer_tiling_set.h" +#include "cc/resources/tile.h" +#include "cc/resources/tile_priority.h" +#include "cc/resources/tiling_set_raster_queue.h" + +namespace cc { + +// This queue returns all tiles required to be rasterized from HIGH_RESOLUTION +// and LOW_RESOLUTION tilings. +class CC_EXPORT TilingSetRasterQueueAll + : public NON_EXPORTED_BASE(TilingSetRasterQueue) { + public: + TilingSetRasterQueueAll(PictureLayerTilingSet* tiling_set, + bool prioritize_low_res); + ~TilingSetRasterQueueAll() override; + + Tile* Top() override; + const Tile* Top() const override; + void Pop() override; + bool IsEmpty() const override; + + private: + class TilingIterator { + public: + TilingIterator(); + explicit TilingIterator(PictureLayerTiling* tiling, + TilingData* tiling_data); + ~TilingIterator(); + + bool done() const { return current_tile_ == nullptr; } + const Tile* operator*() const { return current_tile_; } + Tile* operator*() { return current_tile_; } + TilePriority::PriorityBin type() const { + switch (phase_) { + case VISIBLE_RECT: + return TilePriority::NOW; + case SKEWPORT_RECT: + case SOON_BORDER_RECT: + return TilePriority::SOON; + case EVENTUALLY_RECT: + return TilePriority::EVENTUALLY; + } + NOTREACHED(); + return TilePriority::EVENTUALLY; + } + + TilingIterator& operator++(); + + private: + enum Phase { + VISIBLE_RECT, + SKEWPORT_RECT, + SOON_BORDER_RECT, + EVENTUALLY_RECT + }; + + void AdvancePhase(); + bool TileNeedsRaster(Tile* tile) const { + return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); + } + + PictureLayerTiling* tiling_; + TilingData* tiling_data_; + + Phase phase_; + + Tile* current_tile_; + TilingData::Iterator visible_iterator_; + TilingData::SpiralDifferenceIterator spiral_iterator_; + }; + + enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS }; + + void AdvanceToNextStage(); + + PictureLayerTilingSet* tiling_set_; + + struct IterationStage { + IteratorType iterator_type; + TilePriority::PriorityBin tile_type; + }; + + size_t current_stage_; + + // One low res stage, and three high res stages. + IterationStage stages_[4]; + TilingIterator iterators_[NUM_ITERATORS]; +}; + +} // namespace cc + +#endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_
diff --git a/cc/resources/tiling_set_raster_queue_required.cc b/cc/resources/tiling_set_raster_queue_required.cc new file mode 100644 index 0000000..7d76d2c --- /dev/null +++ b/cc/resources/tiling_set_raster_queue_required.cc
@@ -0,0 +1,136 @@ +// 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 "cc/resources/tiling_set_raster_queue_required.h" + +#include <utility> + +#include "cc/resources/picture_layer_tiling_set.h" +#include "cc/resources/tile.h" +#include "cc/resources/tile_priority.h" + +namespace cc { + +TilingSetRasterQueueRequired::TilingSetRasterQueueRequired( + PictureLayerTilingSet* tiling_set, + RasterTilePriorityQueue::Type type) + : type_(type) { + DCHECK_NE(static_cast<int>(type), + static_cast<int>(RasterTilePriorityQueue::Type::ALL)); + + // Any type of required tile would only come from a high resolution tiling. + // The functions that determine this value is + // PictureLayerTiling::IsTileRequiredFor*, which all return false if the + // resolution is not HIGH_RESOLUTION. + PictureLayerTiling* tiling = + tiling_set->FindTilingWithResolution(HIGH_RESOLUTION); + DCHECK(tiling); + iterator_ = TilingIterator(tiling, &tiling->tiling_data_); + while (!iterator_.done() && !IsTileRequired(*iterator_)) + ++iterator_; +} + +TilingSetRasterQueueRequired::~TilingSetRasterQueueRequired() { +} + +bool TilingSetRasterQueueRequired::IsEmpty() const { + return iterator_.done(); +} + +void TilingSetRasterQueueRequired::Pop() { + DCHECK(!IsEmpty()); + ++iterator_; + while (!iterator_.done() && !IsTileRequired(*iterator_)) + ++iterator_; +} + +Tile* TilingSetRasterQueueRequired::Top() { + DCHECK(!IsEmpty()); + return *iterator_; +} + +const Tile* TilingSetRasterQueueRequired::Top() const { + DCHECK(!IsEmpty()); + return *iterator_; +} + +bool TilingSetRasterQueueRequired::IsTileRequired(const Tile* tile) const { + return (type_ == RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION && + tile->required_for_activation()) || + (type_ == RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW && + tile->required_for_draw()); +} + +TilingSetRasterQueueRequired::TilingIterator::TilingIterator() + : tiling_(nullptr), current_tile_(nullptr) { +} + +TilingSetRasterQueueRequired::TilingIterator::TilingIterator( + PictureLayerTiling* tiling, + TilingData* tiling_data) + : tiling_(tiling), tiling_data_(tiling_data), current_tile_(nullptr) { + if (!tiling_->has_visible_rect_tiles()) { + // Verify that if we would create the iterator, then it would be empty (ie + // it would return false when evaluated as a bool). + DCHECK(!TilingData::Iterator(tiling_data_, tiling->current_visible_rect(), + false)); + return; + } + + visible_iterator_ = + TilingData::Iterator(tiling_data_, tiling_->current_visible_rect(), + false /* include_borders */); + if (!visible_iterator_) + return; + + current_tile_ = + tiling_->TileAt(visible_iterator_.index_x(), visible_iterator_.index_y()); + + // If this is a valid tile, return it. Note that we have to use a tiling check + // for occlusion, since the tile's internal state has not yet been updated. + if (current_tile_ && current_tile_->NeedsRaster() && + !tiling_->IsTileOccluded(current_tile_)) { + tiling_->UpdateTileAndTwinPriority(current_tile_); + return; + } + ++(*this); +} + +TilingSetRasterQueueRequired::TilingIterator::~TilingIterator() { +} + +TilingSetRasterQueueRequired::TilingIterator& + TilingSetRasterQueueRequired::TilingIterator:: + operator++() { + while (true) { + ++visible_iterator_; + if (!visible_iterator_) { + current_tile_ = nullptr; + return *this; + } + std::pair<int, int> next_index = visible_iterator_.index(); + current_tile_ = tiling_->TileAt(next_index.first, next_index.second); + // If the tile doesn't exist or if it exists but doesn't need raster work, + // we can move on to the next tile. + if (!current_tile_ || !current_tile_->NeedsRaster()) + continue; + + // If the tile is occluded, we also can skip it. Note that we use the tiling + // check for occlusion, since tile's internal state has not yet been updated + // (by UpdateTileAndTwinPriority). The tiling check does not rely on tile's + // internal state (it is, in fact, used to determine the tile's state). + if (tiling_->IsTileOccluded(current_tile_)) + continue; + + // If we get here, that means we have a valid tile that needs raster and is + // in the NOW bin, which means that it can be required. + break; + } + + if (current_tile_) + tiling_->UpdateTileAndTwinPriority(current_tile_); + return *this; +} + +} // namespace cc
diff --git a/cc/resources/tiling_set_raster_queue_required.h b/cc/resources/tiling_set_raster_queue_required.h new file mode 100644 index 0000000..5feb05b --- /dev/null +++ b/cc/resources/tiling_set_raster_queue_required.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 CC_RESOURCES_TILING_SET_RASTER_QUEUE_REQUIRED_H_ +#define CC_RESOURCES_TILING_SET_RASTER_QUEUE_REQUIRED_H_ + +#include "cc/base/cc_export.h" +#include "cc/resources/picture_layer_tiling_set.h" +#include "cc/resources/raster_tile_priority_queue.h" +#include "cc/resources/tile.h" +#include "cc/resources/tiling_set_raster_queue.h" + +namespace cc { + +// This queue only returns tiles that are required for either activation or +// draw, as specified by RasterTilePriorityQueue::Type passed in the +// constructor. +class CC_EXPORT TilingSetRasterQueueRequired + : public NON_EXPORTED_BASE(TilingSetRasterQueue) { + public: + TilingSetRasterQueueRequired(PictureLayerTilingSet* tiling_set, + RasterTilePriorityQueue::Type type); + ~TilingSetRasterQueueRequired() override; + + Tile* Top() override; + const Tile* Top() const override; + void Pop() override; + bool IsEmpty() const override; + + private: + // This iterator will return all tiles that are in the NOW bin on the given + // tiling. The queue can then use these tiles and further filter them based on + // whether they are required or not. + class TilingIterator { + public: + TilingIterator(); + explicit TilingIterator(PictureLayerTiling* tiling, + TilingData* tiling_data); + ~TilingIterator(); + + bool done() const { return current_tile_ == nullptr; } + const Tile* operator*() const { return current_tile_; } + Tile* operator*() { return current_tile_; } + TilingIterator& operator++(); + + private: + PictureLayerTiling* tiling_; + TilingData* tiling_data_; + + Tile* current_tile_; + TilingData::Iterator visible_iterator_; + }; + + bool IsTileRequired(const Tile* tile) const; + + TilingIterator iterator_; + RasterTilePriorityQueue::Type type_; +}; + +} // namespace cc + +#endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_REQUIRED_H_
diff --git a/cc/test/fake_tile_manager_client.h b/cc/test/fake_tile_manager_client.h index 94cfca6..843c59f 100644 --- a/cc/test/fake_tile_manager_client.h +++ b/cc/test/fake_tile_manager_client.h
@@ -22,7 +22,8 @@ void NotifyReadyToDraw() override {} void NotifyTileStateChanged(const Tile* tile) override {} void BuildRasterQueue(RasterTilePriorityQueue* queue, - TreePriority tree_priority) override {} + TreePriority tree_priority, + RasterTilePriorityQueue::Type type) override {} void BuildEvictionQueue(EvictionTilePriorityQueue* queue, TreePriority tree_priority) override {}
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 68a905e..db9b072 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -1240,11 +1240,12 @@ } void LayerTreeHostImpl::BuildRasterQueue(RasterTilePriorityQueue* queue, - TreePriority tree_priority) { + TreePriority tree_priority, + RasterTilePriorityQueue::Type type) { TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildRasterQueue"); picture_layer_pairs_.clear(); GetPictureLayerImplPairs(&picture_layer_pairs_, true); - queue->Build(picture_layer_pairs_, tree_priority); + queue->Build(picture_layer_pairs_, tree_priority, type); if (!queue->IsEmpty()) { // Only checking the Top() tile here isn't a definite answer that there is
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 97b6c40..98d7e4b 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -243,7 +243,8 @@ void NotifyReadyToDraw() override; void NotifyTileStateChanged(const Tile* tile) override; void BuildRasterQueue(RasterTilePriorityQueue* queue, - TreePriority tree_priority) override; + TreePriority tree_priority, + RasterTilePriorityQueue::Type type) override; void BuildEvictionQueue(EvictionTilePriorityQueue* queue, TreePriority tree_priority) override;
diff --git a/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc b/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc index a5ccb8b..4d60baf 100644 --- a/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc +++ b/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc
@@ -111,19 +111,6 @@ RunOnDemandRasterPixelTest(); } -class LayerTreeHostOnDemandRasterPixelTestWithGpuRasterizationForced - : public LayerTreeHostOnDemandRasterPixelTest { - void InitializeSettings(LayerTreeSettings* settings) override { - LayerTreeHostOnDemandRasterPixelTest::InitializeSettings(settings); - settings->gpu_rasterization_forced = true; - } -}; - -TEST_F(LayerTreeHostOnDemandRasterPixelTestWithGpuRasterizationForced, - RasterPictureLayer) { - RunOnDemandRasterPixelTest(); -} - } // namespace } // namespace cc
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index f7f0c77..2292c4d 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -1431,6 +1431,7 @@ 'BindBufferBase': { 'type': 'Bind', 'id_mapping': [ 'Buffer' ], + 'gen_func': 'GenBuffersARB', 'unsafe': True, }, 'BindFramebuffer': { @@ -2168,6 +2169,7 @@ 'IsSampler': { 'type': 'Is', 'id_mapping': [ 'Sampler' ], + 'expectation': False, 'unsafe': True, }, 'IsTexture': { @@ -2178,6 +2180,7 @@ 'IsTransformFeedback': { 'type': 'Is', 'id_mapping': [ 'TransformFeedback' ], + 'expectation': False, 'unsafe': True, }, 'LinkProgram': { @@ -3240,9 +3243,33 @@ def WriteHandlerImplementation(self, func, file): """Writes the handler implementation for this command.""" if func.IsUnsafe() and func.GetInfo('id_mapping'): + code_no_gen = """ if (!group_->Get%(type)sServiceId(%(var)s, &%(var)s)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "%(func)s", "invalid %(var)s id"); + return error::kNoError; + } +""" + code_gen = """ if (!group_->Get%(type)sServiceId(%(var)s, &%(var)s)) { + if (!group_->bind_generates_resource()) { + LOCAL_SET_GL_ERROR( + GL_INVALID_OPERATION, "%(func)s", "invalid %(var)s id"); + return error::kNoError; + } + GLuint client_id = %(var)s; + gl%(gen_func)s(1, &%(var)s); + Create%(type)s(client_id, %(var)s); + } +""" + gen_func = func.GetInfo('gen_func') for id_type in func.GetInfo('id_mapping'): - file.Write(" group_->Get%sServiceId(%s, &%s);\n" % - (id_type, id_type.lower(), id_type.lower())) + if gen_func and id_type in gen_func: + file.Write(code_gen % { 'type': id_type, + 'var': id_type.lower(), + 'func': func.GetGLFunctionName(), + 'gen_func': gen_func }) + else: + file.Write(code_no_gen % { 'type': id_type, + 'var': id_type.lower(), + 'func': func.GetGLFunctionName() }) file.Write(" %s(%s);\n" % (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) @@ -4399,22 +4426,42 @@ } """ if func.GetInfo("gen_func"): - valid_test += """ + valid_test += """ TEST_P(%(test_name)s, %(name)sValidArgsNewId) { - EXPECT_CALL(*gl_, %(gl_func_name)s(%(first_gl_arg)s, kNewServiceId)); + EXPECT_CALL(*gl_, + %(gl_func_name)s(%(all_except_last_gl_arg)s, kNewServiceId)); EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup<cmds::%(name)s, 0>(true); cmds::%(name)s cmd; - cmd.Init(%(first_arg)s, kNewClientId); + cmd.Init(%(all_except_last_arg)s, kNewClientId);""" + if func.IsUnsafe(): + valid_test += """ + decoder_->set_unsafe_es3_apis_enabled(true); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); + EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); + decoder_->set_unsafe_es3_apis_enabled(false); + EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); +} +""" + else: + valid_test += """ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); } """ + + all_except_last_arg = [ + arg.GetValidArg(func) for arg in func.GetOriginalArgs()[:-1] + ] + all_except_last_gl_arg = [ + arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[:-1] + ] self.WriteValidUnitTest(func, file, valid_test, { - 'first_arg': func.GetOriginalArgs()[0].GetValidArg(func), - 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func), + 'all_except_last_arg': ", ".join(all_except_last_arg), + 'all_except_last_gl_arg': ", ".join(all_except_last_gl_arg), 'resource_type': func.GetOriginalArgs()[-1].resource_type, 'gl_gen_func_name': func.GetInfo("gen_func"), }, *extras) @@ -4449,14 +4496,7 @@ for arg in func.GetOriginalArgs(): arg.WriteClientSideValidationCode(file, func) - if func.IsUnsafe(): - code = """ helper_->%(name)s(%(arg_string)s); - CheckGLError(); -} - -""" - else: - code = """ if (Is%(type)sReservedId(%(id)s)) { + code = """ if (Is%(type)sReservedId(%(id)s)) { SetGLError(GL_INVALID_OPERATION, "%(name)s\", \"%(id)s reserved id"); return; } @@ -6427,12 +6467,15 @@ """ file.Write(code % {'func_name': func.name}) func.WriteHandlerValidation(file) - if func.IsUnsafe() and func.GetInfo('id_mapping'): - for id_type in func.GetInfo('id_mapping'): - file.Write(" group_->Get%sServiceId(%s, &%s);\n" % - (id_type, id_type.lower(), id_type.lower())) - file.Write(" *result_dst = %s(%s);\n" % - (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) + if func.IsUnsafe(): + assert func.GetInfo('id_mapping') + assert len(func.GetInfo('id_mapping')) == 1 + id_type = func.GetInfo('id_mapping')[0] + file.Write(" *result_dst = group_->Get%sServiceId(%s, &%s);\n" % + (id_type, id_type.lower(), id_type.lower())) + else: + file.Write(" *result_dst = %s(%s);\n" % + (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) file.Write(" return error::kNoError;\n") file.Write("}\n") file.Write("\n")
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index 2b4cc9e..2d67491 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -2695,6 +2695,42 @@ helper_->CommandBufferHelper::Flush(); } +void GLES2Implementation::BindBufferBaseHelper( + GLenum target, GLuint index, GLuint buffer_id) { + // TODO(zmo): See note #1 above. + // TODO(zmo): There's a bug here. If the target or index is invalid the ID + // will not be used even though it's marked it as used here. + GetIdHandler(id_namespaces::kBuffers)->MarkAsUsedForBind( + this, target, index, buffer_id, &GLES2Implementation::BindBufferBaseStub); +} + +void GLES2Implementation::BindBufferBaseStub( + GLenum target, GLuint index, GLuint buffer) { + helper_->BindBufferBase(target, index, buffer); + if (share_group_->bind_generates_resource()) + helper_->CommandBufferHelper::Flush(); +} + +void GLES2Implementation::BindBufferRangeHelper( + GLenum target, GLuint index, GLuint buffer_id, + GLintptr offset, GLsizeiptr size) { + // TODO(zmo): See note #1 above. + // TODO(zmo): There's a bug here. If an arguments is invalid the ID will not + // be used even though it's marked it as used here. + GetIdHandler(id_namespaces::kBuffers)->MarkAsUsedForBind( + this, target, index, buffer_id, offset, size, + &GLES2Implementation::BindBufferRangeStub); +} + +void GLES2Implementation::BindBufferRangeStub( + GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size) { + // TODO(zmo): uncomment the below call once the helper function is added. + // helper_->BindBufferRange(target, index, buffer, offset, size); + if (share_group_->bind_generates_resource()) + helper_->CommandBufferHelper::Flush(); +} + void GLES2Implementation::BindFramebufferHelper( GLenum target, GLuint framebuffer) { // TODO(gman): See note #1 above. @@ -2777,6 +2813,11 @@ helper_->CommandBufferHelper::Flush(); } +void GLES2Implementation::BindSamplerHelper(GLuint unit, + GLuint sampler) { + helper_->BindSampler(unit, sampler); +} + void GLES2Implementation::BindTextureHelper(GLenum target, GLuint texture) { // TODO(gman): See note #1 above. // TODO(gman): Change this to false once we figure out why it's failing @@ -2820,6 +2861,11 @@ helper_->CommandBufferHelper::Flush(); } +void GLES2Implementation::BindTransformFeedbackHelper( + GLenum target, GLuint transformfeedback) { + helper_->BindTransformFeedback(target, transformfeedback); +} + void GLES2Implementation::BindVertexArrayOESHelper(GLuint array) { // TODO(gman): See note #1 above. bool changed = false;
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h index 25021fb..730171d 100644 --- a/gpu/command_buffer/client/gles2_implementation.h +++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -435,14 +435,22 @@ bool IsTransformFeedbackReservedId(GLuint id) { return false; } void BindBufferHelper(GLenum target, GLuint buffer); + void BindBufferBaseHelper(GLenum target, GLuint index, GLuint buffer); + void BindBufferRangeHelper(GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size); void BindFramebufferHelper(GLenum target, GLuint framebuffer); void BindRenderbufferHelper(GLenum target, GLuint renderbuffer); + void BindSamplerHelper(GLuint unit, GLuint sampler); void BindTextureHelper(GLenum target, GLuint texture); + void BindTransformFeedbackHelper(GLenum target, GLuint transformfeedback); void BindVertexArrayOESHelper(GLuint array); void BindValuebufferCHROMIUMHelper(GLenum target, GLuint valuebuffer); void UseProgramHelper(GLuint program); void BindBufferStub(GLenum target, GLuint buffer); + void BindBufferBaseStub(GLenum target, GLuint index, GLuint buffer); + void BindBufferRangeStub(GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size); void BindFramebufferStub(GLenum target, GLuint framebuffer); void BindRenderbufferStub(GLenum target, GLuint renderbuffer); void BindTextureStub(GLenum target, GLuint texture);
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h index 02551b4..23eb966 100644 --- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -41,7 +41,11 @@ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindBufferBase(" << GLES2Util::GetStringIndexedBufferTarget(target) << ", " << index << ", " << buffer << ")"); - helper_->BindBufferBase(target, index, buffer); + if (IsBufferReservedId(buffer)) { + SetGLError(GL_INVALID_OPERATION, "BindBufferBase", "buffer reserved id"); + return; + } + BindBufferBaseHelper(target, index, buffer); CheckGLError(); } @@ -77,7 +81,11 @@ GPU_CLIENT_SINGLE_THREAD_CHECK(); GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindSampler(" << unit << ", " << sampler << ")"); - helper_->BindSampler(unit, sampler); + if (IsSamplerReservedId(sampler)) { + SetGLError(GL_INVALID_OPERATION, "BindSampler", "sampler reserved id"); + return; + } + BindSamplerHelper(unit, sampler); CheckGLError(); } @@ -100,7 +108,12 @@ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTransformFeedback(" << GLES2Util::GetStringTransformFeedbackBindTarget(target) << ", " << transformfeedback << ")"); - helper_->BindTransformFeedback(target, transformfeedback); + if (IsTransformFeedbackReservedId(transformfeedback)) { + SetGLError(GL_INVALID_OPERATION, "BindTransformFeedback", + "transformfeedback reserved id"); + return; + } + BindTransformFeedbackHelper(target, transformfeedback); CheckGLError(); }
diff --git a/gpu/command_buffer/client/share_group.cc b/gpu/command_buffer/client/share_group.cc index 726714f..755614b 100644 --- a/gpu/command_buffer/client/share_group.cc +++ b/gpu/command_buffer/client/share_group.cc
@@ -76,6 +76,28 @@ (gl_impl->*bind_fn)(target, id); return result; } + bool MarkAsUsedForBind(GLES2Implementation* gl_impl, + GLenum target, + GLuint index, + GLuint id, + BindIndexedFn bind_fn) override { + base::AutoLock auto_lock(lock_); + bool result = id ? id_allocator_.MarkAsUsed(id) : true; + (gl_impl->*bind_fn)(target, index, id); + return result; + } + bool MarkAsUsedForBind(GLES2Implementation* gl_impl, + GLenum target, + GLuint index, + GLuint id, + GLintptr offset, + GLsizeiptr size, + BindIndexedRangeFn bind_fn) override { + base::AutoLock auto_lock(lock_); + bool result = id ? id_allocator_.MarkAsUsed(id) : true; + (gl_impl->*bind_fn)(target, index, id, offset, size); + return result; + } void FreeContext(GLES2Implementation* gl_impl) override {} @@ -166,6 +188,42 @@ (gl_impl->*bind_fn)(target, id); return true; } + bool MarkAsUsedForBind(GLES2Implementation* gl_impl, + GLenum target, + GLuint index, + GLuint id, + BindIndexedFn bind_fn) override { +#ifndef NDEBUG + if (id != 0) { + base::AutoLock auto_lock(lock_); + DCHECK(id_states_[id - 1] == kIdInUse); + } +#endif + // StrictIdHandler is used if |bind_generates_resource| is false. In that + // case, |bind_fn| will not use Flush() after helper->Bind*(), so it is OK + // to call |bind_fn| without holding the lock. + (gl_impl->*bind_fn)(target, index, id); + return true; + } + bool MarkAsUsedForBind(GLES2Implementation* gl_impl, + GLenum target, + GLuint index, + GLuint id, + GLintptr offset, + GLsizeiptr size, + BindIndexedRangeFn bind_fn) override { +#ifndef NDEBUG + if (id != 0) { + base::AutoLock auto_lock(lock_); + DCHECK(id_states_[id - 1] == kIdInUse); + } +#endif + // StrictIdHandler is used if |bind_generates_resource| is false. In that + // case, |bind_fn| will not use Flush() after helper->Bind*(), so it is OK + // to call |bind_fn| without holding the lock. + (gl_impl->*bind_fn)(target, index, id, offset, size); + return true; + } // Overridden from IdHandlerInterface. void FreeContext(GLES2Implementation* gl_impl) override { @@ -235,6 +293,24 @@ // This is only used for Shaders and Programs which have no bind. return false; } + bool MarkAsUsedForBind(GLES2Implementation* /* gl_impl */, + GLenum /* target */, + GLuint /* index */, + GLuint /* id */, + BindIndexedFn /* bind_fn */) override { + // This is only used for Shaders and Programs which have no bind. + return false; + } + bool MarkAsUsedForBind(GLES2Implementation* /* gl_impl */, + GLenum /* target */, + GLuint /* index */, + GLuint /* id */, + GLintptr /* offset */, + GLsizeiptr /* size */, + BindIndexedRangeFn /* bind_fn */) override { + // This is only used for Shaders and Programs which have no bind. + return false; + } void FreeContext(GLES2Implementation* gl_impl) override {}
diff --git a/gpu/command_buffer/client/share_group.h b/gpu/command_buffer/client/share_group.h index 09d960b..c150004 100644 --- a/gpu/command_buffer/client/share_group.h +++ b/gpu/command_buffer/client/share_group.h
@@ -20,6 +20,10 @@ typedef void (GLES2Implementation::*DeleteFn)(GLsizei n, const GLuint* ids); typedef void (GLES2Implementation::*BindFn)(GLenum target, GLuint id); +typedef void (GLES2Implementation::*BindIndexedFn)( \ + GLenum target, GLuint index, GLuint id); +typedef void (GLES2Implementation::*BindIndexedRangeFn)( \ + GLenum target, GLuint index, GLuint id, GLintptr offset, GLsizeiptr size); class ShareGroupContextData { public: @@ -61,6 +65,22 @@ GLenum target, GLuint id, BindFn bind_fn) = 0; + // This is for glBindBufferBase. + virtual bool MarkAsUsedForBind( + GLES2Implementation* gl_impl, + GLenum target, + GLuint index, + GLuint id, + BindIndexedFn bind_fn) = 0; + // This is for glBindBufferRange. + virtual bool MarkAsUsedForBind( + GLES2Implementation* gl_impl, + GLenum target, + GLuint index, + GLuint id, + GLintptr offset, + GLsizeiptr size, + BindIndexedRangeFn bind_fn) = 0; // Called when a context in the share group is destructed. virtual void FreeContext(GLES2Implementation* gl_impl) = 0;
diff --git a/gpu/command_buffer/service/buffer_manager.cc b/gpu/command_buffer/service/buffer_manager.cc index 7b1c90d..94a252c 100644 --- a/gpu/command_buffer/service/buffer_manager.cc +++ b/gpu/command_buffer/service/buffer_manager.cc
@@ -12,6 +12,7 @@ #include "gpu/command_buffer/service/feature_info.h" #include "gpu/command_buffer/service/memory_tracking.h" #include "ui/gl/gl_bindings.h" +#include "ui/gl/gl_implementation.h" namespace gpu { namespace gles2 { @@ -23,6 +24,7 @@ new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)), feature_info_(feature_info), allow_buffers_on_multiple_targets_(false), + allow_fixed_attribs_(false), buffer_count_(0), have_context_(true), use_client_side_arrays_for_stream_buffers_( @@ -251,10 +253,13 @@ Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data) { DCHECK(buffer); memory_tracker_->TrackMemFree(buffer->size()); - bool is_client_side_array = IsUsageClientSideArray(usage); - bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER || - allow_buffers_on_multiple_targets_ || - is_client_side_array; + const bool is_client_side_array = IsUsageClientSideArray(usage); + const bool support_fixed_attribs = + gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2; + const bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER || + allow_buffers_on_multiple_targets_ || + (allow_fixed_attribs_ && !support_fixed_attribs) || + is_client_side_array; buffer->SetInfo(size, usage, shadow, data, is_client_side_array); memory_tracker_->TrackMemAlloc(buffer->size()); }
diff --git a/gpu/command_buffer/service/buffer_manager.h b/gpu/command_buffer/service/buffer_manager.h index cc23f01..22a6e42 100644 --- a/gpu/command_buffer/service/buffer_manager.h +++ b/gpu/command_buffer/service/buffer_manager.h
@@ -217,6 +217,10 @@ allow_buffers_on_multiple_targets_ = allow; } + void set_allow_fixed_attribs(bool allow) { + allow_fixed_attribs_ = allow; + } + size_t mem_represented() const { return memory_tracker_->GetMemRepresented(); } @@ -270,6 +274,9 @@ // Whether or not buffers can be bound to multiple targets. bool allow_buffers_on_multiple_targets_; + // Whether or not allow using GL_FIXED type for vertex attribs. + bool allow_fixed_attribs_; + // Counts the number of Buffer allocated with 'this' as its manager. // Allows to check no Buffer will outlive this. unsigned int buffer_count_;
diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc index e9af883..d918526 100644 --- a/gpu/command_buffer/service/context_group.cc +++ b/gpu/command_buffer/service/context_group.cc
@@ -408,5 +408,14 @@ return result; } +bool ContextGroup::GetBufferServiceId( + GLuint client_id, GLuint* service_id) const { + Buffer* buffer = buffer_manager_->GetBuffer(client_id); + if (!buffer) + return false; + *service_id = buffer->service_id(); + return true; +} + } // namespace gles2 } // namespace gpu
diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h index 63e9a34..8eeaf53 100644 --- a/gpu/command_buffer/service/context_group.h +++ b/gpu/command_buffer/service/context_group.h
@@ -177,23 +177,7 @@ draw_buffer_ = buf; } - void AddBufferId(GLuint client_id, GLuint service_id) { - buffers_id_map_[client_id] = service_id; - } - - bool GetBufferServiceId(GLuint client_id, GLuint* service_id) const { - std::map<GLuint, GLuint>::const_iterator iter = - buffers_id_map_.find(client_id); - if (iter == buffers_id_map_.end()) - return false; - if (service_id) - *service_id = iter->second; - return true; - } - - void RemoveBufferId(GLuint client_id) { - buffers_id_map_.erase(client_id); - } + bool GetBufferServiceId(GLuint client_id, GLuint* service_id) const; void AddSamplerId(GLuint client_id, GLuint service_id) { samplers_id_map_[client_id] = service_id; @@ -283,7 +267,6 @@ std::vector<base::WeakPtr<gles2::GLES2Decoder> > decoders_; // Mappings from client side IDs to service side IDs. - std::map<GLuint, GLuint> buffers_id_map_; std::map<GLuint, GLuint> samplers_id_map_; std::map<GLuint, GLuint> transformfeedbacks_id_map_;
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index c4bf479..8bc3e4f 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h
@@ -123,7 +123,7 @@ } const gfx::GLVersionInfo& gl_version_info() const { - CHECK(gl_version_info_.get()); + DCHECK(gl_version_info_.get()); return *(gl_version_info_.get()); }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 0870c36..efd75dd 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -9882,7 +9882,7 @@ if (feature_str.compare("pepper3d_allow_buffers_on_multiple_targets") == 0) { buffer_manager()->set_allow_buffers_on_multiple_targets(true); } else if (feature_str.compare("pepper3d_support_fixed_attribs") == 0) { - buffer_manager()->set_allow_buffers_on_multiple_targets(true); + buffer_manager()->set_allow_fixed_attribs(true); // TODO(gman): decide how to remove the need for this const_cast. // I could make validators_ non const but that seems bad as this is the only // place it is needed. I could make some special friend class of validators
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index 82a519b..701df80 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -59,7 +59,16 @@ GLenum target = static_cast<GLenum>(c.target); GLuint index = static_cast<GLuint>(c.index); GLuint buffer = c.buffer; - group_->GetBufferServiceId(buffer, &buffer); + if (!group_->GetBufferServiceId(buffer, &buffer)) { + if (!group_->bind_generates_resource()) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBindBufferBase", + "invalid buffer id"); + return error::kNoError; + } + GLuint client_id = buffer; + glGenBuffersARB(1, &buffer); + CreateBuffer(client_id, buffer); + } glBindBufferBase(target, index, buffer); return error::kNoError; } @@ -105,7 +114,11 @@ (void)c; GLuint unit = static_cast<GLuint>(c.unit); GLuint sampler = c.sampler; - group_->GetSamplerServiceId(sampler, &sampler); + if (!group_->GetSamplerServiceId(sampler, &sampler)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBindSampler", + "invalid sampler id"); + return error::kNoError; + } glBindSampler(unit, sampler); return error::kNoError; } @@ -135,7 +148,12 @@ (void)c; GLenum target = static_cast<GLenum>(c.target); GLuint transformfeedback = c.transformfeedback; - group_->GetTransformFeedbackServiceId(transformfeedback, &transformfeedback); + if (!group_->GetTransformFeedbackServiceId(transformfeedback, + &transformfeedback)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBindTransformFeedback", + "invalid transformfeedback id"); + return error::kNoError; + } glBindTransformFeedback(target, transformfeedback); return error::kNoError; } @@ -1461,7 +1479,11 @@ if (result->size != 0) { return error::kInvalidArguments; } - group_->GetSamplerServiceId(sampler, &sampler); + if (!group_->GetSamplerServiceId(sampler, &sampler)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glGetSamplerParameterfv", + "invalid sampler id"); + return error::kNoError; + } glGetSamplerParameterfv(sampler, pname, params); GLenum error = glGetError(); if (error == GL_NO_ERROR) { @@ -1496,7 +1518,11 @@ if (result->size != 0) { return error::kInvalidArguments; } - group_->GetSamplerServiceId(sampler, &sampler); + if (!group_->GetSamplerServiceId(sampler, &sampler)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glGetSamplerParameteriv", + "invalid sampler id"); + return error::kNoError; + } glGetSamplerParameteriv(sampler, pname, params); GLenum error = glGetError(); if (error == GL_NO_ERROR) { @@ -1894,8 +1920,7 @@ if (!result_dst) { return error::kOutOfBounds; } - group_->GetSamplerServiceId(sampler, &sampler); - *result_dst = glIsSampler(sampler); + *result_dst = group_->GetSamplerServiceId(sampler, &sampler); return error::kNoError; } @@ -1946,8 +1971,8 @@ if (!result_dst) { return error::kOutOfBounds; } - group_->GetTransformFeedbackServiceId(transformfeedback, &transformfeedback); - *result_dst = glIsTransformFeedback(transformfeedback); + *result_dst = group_->GetTransformFeedbackServiceId(transformfeedback, + &transformfeedback); return error::kNoError; } @@ -2094,7 +2119,11 @@ GLuint sampler = c.sampler; GLenum pname = static_cast<GLenum>(c.pname); GLfloat param = static_cast<GLfloat>(c.param); - group_->GetSamplerServiceId(sampler, &sampler); + if (!group_->GetSamplerServiceId(sampler, &sampler)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glSamplerParameterf", + "invalid sampler id"); + return error::kNoError; + } glSamplerParameterf(sampler, pname, param); return error::kNoError; } @@ -2137,7 +2166,11 @@ GLuint sampler = c.sampler; GLenum pname = static_cast<GLenum>(c.pname); GLint param = static_cast<GLint>(c.param); - group_->GetSamplerServiceId(sampler, &sampler); + if (!group_->GetSamplerServiceId(sampler, &sampler)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glSamplerParameteri", + "invalid sampler id"); + return error::kNoError; + } glSamplerParameteri(sampler, pname, param); return error::kNoError; }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc index 2e7f4fc..db1c62f 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
@@ -41,15 +41,6 @@ INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest1, ::testing::Bool()); template <> -void GLES2DecoderTestBase::SpecializedSetup<cmds::BindBufferBase, 0>( - bool valid) { - if (valid) { - // TODO(zmo): This might affect the states of later tests. - group_->AddBufferId(client_buffer_id_, kServiceBufferId); - } -}; - -template <> void GLES2DecoderTestBase::SpecializedSetup<cmds::GenerateMipmap, 0>( bool valid) { DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h index 6ab1a88..1fb1386 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
@@ -67,6 +67,22 @@ EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } +TEST_P(GLES2DecoderTest1, BindBufferBaseValidArgsNewId) { + EXPECT_CALL(*gl_, + BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewServiceId)); + EXPECT_CALL(*gl_, GenBuffersARB(1, _)) + .WillOnce(SetArgumentPointee<1>(kNewServiceId)); + SpecializedSetup<cmds::BindBufferBase, 0>(true); + cmds::BindBufferBase cmd; + cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId); + decoder_->set_unsafe_es3_apis_enabled(true); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); + EXPECT_TRUE(GetBuffer(kNewClientId) != NULL); + decoder_->set_unsafe_es3_apis_enabled(false); + EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); +} + TEST_P(GLES2DecoderTest1, BindFramebufferValidArgs) { EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kServiceFramebufferId)); SpecializedSetup<cmds::BindFramebuffer, 0>(true);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h index 59cf54e..6cf75b8 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
@@ -103,7 +103,6 @@ } TEST_P(GLES2DecoderTest2, IsSamplerValidArgs) { - EXPECT_CALL(*gl_, IsSampler(kServiceSamplerId)); SpecializedSetup<cmds::IsSampler, 0>(true); cmds::IsSampler cmd; cmd.Init(client_sampler_id_, shared_memory_id_, shared_memory_offset_); @@ -115,7 +114,6 @@ } TEST_P(GLES2DecoderTest2, IsSamplerInvalidArgsBadSharedMemoryId) { - EXPECT_CALL(*gl_, IsSampler(kServiceSamplerId)).Times(0); SpecializedSetup<cmds::IsSampler, 0>(false); decoder_->set_unsafe_es3_apis_enabled(true); cmds::IsSampler cmd; @@ -161,7 +159,6 @@ } TEST_P(GLES2DecoderTest2, IsTransformFeedbackValidArgs) { - EXPECT_CALL(*gl_, IsTransformFeedback(kServiceTransformFeedbackId)); SpecializedSetup<cmds::IsTransformFeedback, 0>(true); cmds::IsTransformFeedback cmd; cmd.Init(client_transformfeedback_id_, shared_memory_id_, @@ -174,7 +171,6 @@ } TEST_P(GLES2DecoderTest2, IsTransformFeedbackInvalidArgsBadSharedMemoryId) { - EXPECT_CALL(*gl_, IsTransformFeedback(kServiceTransformFeedbackId)).Times(0); SpecializedSetup<cmds::IsTransformFeedback, 0>(false); decoder_->set_unsafe_es3_apis_enabled(true); cmds::IsTransformFeedback cmd;
diff --git a/mojo/edk/test/multiprocess_test_helper.cc b/mojo/edk/test/multiprocess_test_helper.cc index 758520a..6dd8b72 100644 --- a/mojo/edk/test/multiprocess_test_helper.cc +++ b/mojo/edk/test/multiprocess_test_helper.cc
@@ -14,14 +14,13 @@ namespace mojo { namespace test { -MultiprocessTestHelper::MultiprocessTestHelper() - : test_child_handle_(base::kNullProcessHandle) { +MultiprocessTestHelper::MultiprocessTestHelper() { platform_channel_pair_.reset(new embedder::PlatformChannelPair()); server_platform_handle = platform_channel_pair_->PassServerHandle(); } MultiprocessTestHelper::~MultiprocessTestHelper() { - CHECK_EQ(test_child_handle_, base::kNullProcessHandle); + CHECK(!test_child_.IsValid()); server_platform_handle.reset(); platform_channel_pair_.reset(); } @@ -29,7 +28,7 @@ void MultiprocessTestHelper::StartChild(const std::string& test_child_name) { CHECK(platform_channel_pair_); CHECK(!test_child_name.empty()); - CHECK_EQ(test_child_handle_, base::kNullProcessHandle); + CHECK(!test_child_.IsValid()); std::string test_child_main = test_child_name + "TestChildMain"; @@ -49,21 +48,20 @@ #error "Not supported yet." #endif - test_child_handle_ = + test_child_ = base::SpawnMultiProcessTestChild(test_child_main, command_line, options); platform_channel_pair_->ChildProcessLaunched(); - CHECK_NE(test_child_handle_, base::kNullProcessHandle); + CHECK(test_child_.IsValid()); } int MultiprocessTestHelper::WaitForChildShutdown() { - CHECK_NE(test_child_handle_, base::kNullProcessHandle); + CHECK(test_child_.IsValid()); int rv = -1; - CHECK(base::WaitForExitCodeWithTimeout(test_child_handle_, &rv, - TestTimeouts::action_timeout())); - base::CloseProcessHandle(test_child_handle_); - test_child_handle_ = base::kNullProcessHandle; + CHECK( + test_child_.WaitForExitWithTimeout(TestTimeouts::action_timeout(), &rv)); + test_child_.Close(); return rv; }
diff --git a/mojo/edk/test/multiprocess_test_helper.h b/mojo/edk/test/multiprocess_test_helper.h index d131460..e40b309 100644 --- a/mojo/edk/test/multiprocess_test_helper.h +++ b/mojo/edk/test/multiprocess_test_helper.h
@@ -8,7 +8,7 @@ #include <string> #include "base/macros.h" -#include "base/process/process_handle.h" +#include "base/process/process.h" #include "base/test/multiprocess_test.h" #include "base/test/test_timeouts.h" #include "mojo/edk/embedder/scoped_platform_handle.h" @@ -58,7 +58,7 @@ scoped_ptr<embedder::PlatformChannelPair> platform_channel_pair_; // Valid after |StartChild()| and before |WaitForChildShutdown()|. - base::ProcessHandle test_child_handle_; + base::Process test_child_; DISALLOW_COPY_AND_ASSIGN(MultiprocessTestHelper); };
diff --git a/net/android/keystore_openssl.cc b/net/android/keystore_openssl.cc index c0f308d..886b9ee 100644 --- a/net/android/keystore_openssl.cc +++ b/net/android/keystore_openssl.cc
@@ -12,6 +12,7 @@ #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/rsa.h> +#include <openssl/x509.h> #include "base/android/build_info.h" #include "base/android/jni_android.h" @@ -66,6 +67,9 @@ namespace { +using ScopedPKCS8_PRIV_KEY_INFO = + crypto::ScopedOpenSSL<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free>::Type; + extern const RSA_METHOD android_rsa_method; extern const ECDSA_METHOD android_ecdsa_method; @@ -318,8 +322,10 @@ // On success, this creates a new global JNI reference to the object // that is owned by and destroyed with the EVP_PKEY. I.e. caller can // free |private_key| after the call. -crypto::ScopedEVP_PKEY GetRsaPkeyWrapper(jobject private_key, - AndroidRSA* legacy_rsa) { +crypto::ScopedEVP_PKEY CreateRsaPkeyWrapper( + jobject private_key, + AndroidRSA* legacy_rsa, + const crypto::OpenSSLErrStackTracer& tracer) { crypto::ScopedRSA rsa( RSA_new_method(global_boringssl_engine.Get().engine())); @@ -387,18 +393,26 @@ s_instance.Get().LeakEngine(private_key); } -// Setup an EVP_PKEY to wrap an existing platform RSA PrivateKey object -// for Android 4.0 to 4.1.x. Must only be used on Android < 4.2. -// |private_key| is a JNI reference (local or global) to the object. -// |pkey| is the EVP_PKEY to setup as a wrapper. -// Returns true on success, false otherwise. -crypto::ScopedEVP_PKEY GetRsaLegacyKey(jobject private_key) { +// Creates an EVP_PKEY wrapper corresponding to the RSA key +// |private_key|. Returns nullptr on failure. +crypto::ScopedEVP_PKEY GetRsaPkeyWrapper(jobject private_key) { + const int kAndroid42ApiLevel = 17; + crypto::OpenSSLErrStackTracer tracer(FROM_HERE); + + if (base::android::BuildInfo::GetInstance()->sdk_int() >= + kAndroid42ApiLevel) { + return CreateRsaPkeyWrapper(private_key, nullptr, tracer); + } + + // Route around platform bug: if Android < 4.2, then + // base::android::RawSignDigestWithPrivateKey() cannot work, so instead, try + // to get the system OpenSSL's EVP_PKEY begin this PrivateKey object. AndroidEVP_PKEY* sys_pkey = GetOpenSSLSystemHandleForPrivateKey(private_key); if (sys_pkey != NULL) { if (sys_pkey->type != ANDROID_EVP_PKEY_RSA) { LOG(ERROR) << "Private key has wrong type!"; - return crypto::ScopedEVP_PKEY(); + return nullptr; } AndroidRSA* sys_rsa = sys_pkey->pkey.rsa; @@ -412,25 +426,29 @@ } } - return GetRsaPkeyWrapper(private_key, sys_rsa); + return CreateRsaPkeyWrapper(private_key, sys_rsa, tracer); } // GetOpenSSLSystemHandleForPrivateKey() will fail on Android 4.0.3 and // earlier. However, it is possible to get the key content with // PrivateKey.getEncoded() on these platforms. Note that this method may - // return NULL on 4.0.4 and later. - std::vector<uint8> encoded; - if (!GetPrivateKeyEncodedBytes(private_key, &encoded)) { + // return false on 4.0.4 and later. + std::vector<uint8_t> encoded; + if (!GetPrivateKeyEncodedBytes(private_key, &encoded) || encoded.empty()) { LOG(ERROR) << "Can't get private key data!"; - return crypto::ScopedEVP_PKEY(); + return nullptr; } - const unsigned char* p = - reinterpret_cast<const unsigned char*>(&encoded[0]); - int len = static_cast<int>(encoded.size()); - crypto::ScopedEVP_PKEY pkey(d2i_AutoPrivateKey(NULL, &p, len)); - if (!pkey) { - LOG(ERROR) << "Can't convert private key data!"; - return crypto::ScopedEVP_PKEY(); + const uint8_t* p = &encoded[0]; + ScopedPKCS8_PRIV_KEY_INFO pkcs8( + d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, encoded.size())); + if (!pkcs8.get() || p != &encoded[0] + encoded.size()) { + LOG(ERROR) << "Can't decode PrivateKeyInfo"; + return nullptr; + } + crypto::ScopedEVP_PKEY pkey(EVP_PKCS82PKEY(pkcs8.get())); + if (!pkey || EVP_PKEY_id(pkey.get()) != EVP_PKEY_RSA) { + LOG(ERROR) << "Can't decode RSA key"; + return nullptr; } return pkey.Pass(); } @@ -503,6 +521,7 @@ // is owned by and destroyed with the EVP_PKEY. I.e. the caller shall // always free |private_key| after the call. crypto::ScopedEVP_PKEY GetEcdsaPkeyWrapper(jobject private_key) { + crypto::OpenSSLErrStackTracer tracer(FROM_HERE); crypto::ScopedEC_KEY ec_key( EC_KEY_new_method(global_boringssl_engine.Get().engine())); @@ -553,29 +572,17 @@ } // namespace crypto::ScopedEVP_PKEY GetOpenSSLPrivateKeyWrapper(jobject private_key) { - const int kAndroid42ApiLevel = 17; - // Create sub key type, depending on private key's algorithm type. PrivateKeyType key_type = GetPrivateKeyType(private_key); switch (key_type) { case PRIVATE_KEY_TYPE_RSA: - // Route around platform bug: if Android < 4.2, then - // base::android::RawSignDigestWithPrivateKey() cannot work, so - // instead, obtain a raw EVP_PKEY* to the system object - // backing this PrivateKey object. - if (base::android::BuildInfo::GetInstance()->sdk_int() < - kAndroid42ApiLevel) { - return GetRsaLegacyKey(private_key); - } else { - // Running on Android 4.2. - return GetRsaPkeyWrapper(private_key, NULL); - } + return GetRsaPkeyWrapper(private_key); case PRIVATE_KEY_TYPE_ECDSA: return GetEcdsaPkeyWrapper(private_key); default: LOG(WARNING) << "GetOpenSSLPrivateKeyWrapper() called with invalid key type"; - return crypto::ScopedEVP_PKEY(); + return nullptr; } }
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h index c512902..1557880 100644 --- a/net/http/transport_security_state_static.h +++ b/net/http/transport_security_state_static.h
@@ -677,1807 +677,1211 @@ // 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[] = { - 0xec, 0xf2, 0x00, 0x80, 0xed, 0xae, 0xe7, 0x02, - 0xb5, 0xb1, 0xf1, 0x04, 0xb3, 0xb2, 0x05, 0x06, - 0xfa, 0x07, 0xf6, 0x08, 0xeb, 0x09, 0x0a, 0xe3, - 0xe1, 0x0b, 0x03, 0x0c, 0x01, 0x0d, 0xe2, 0xe8, - 0x0f, 0xf3, 0x10, 0xe5, 0xff, 0x11, 0xf4, 0xee, - 0xef, 0x13, 0xf7, 0xe4, 0xb9, 0xb7, 0xb6, 0x16, - 0xb8, 0x17, 0x18, 0xb0, 0xb4, 0x19, 0x1a, 0xea, - 0xf8, 0x1b, 0xad, 0x1c, 0xf9, 0xe6, 0x1d, 0x1e, - 0x15, 0x1f, 0xf0, 0xf5, 0x21, 0xe9, 0x20, 0x22, - 0x14, 0x23, 0x12, 0x24, 0x0e, 0x25, + 0xe9, 0xf2, 0x00, 0x80, 0xed, 0xae, 0xe7, 0x02, 0xb5, 0xb1, 0xf1, 0x04, + 0xb3, 0xb2, 0x05, 0x06, 0xfa, 0x07, 0xf6, 0x08, 0xeb, 0x09, 0x0a, 0xe3, + 0xe1, 0x0b, 0x03, 0x0c, 0x01, 0x0d, 0xe2, 0xe8, 0x0f, 0xf3, 0x10, 0xe5, + 0xff, 0x11, 0xf4, 0xee, 0xef, 0x13, 0xf7, 0xe4, 0xb9, 0xb7, 0xb6, 0x16, + 0xb8, 0x17, 0x18, 0xb0, 0xb4, 0x19, 0x1a, 0xea, 0xf8, 0x1b, 0xad, 0x1c, + 0x1d, 0xf0, 0x15, 0x1e, 0xf9, 0xe6, 0x20, 0xf5, 0x21, 0xec, 0x1f, 0x22, + 0x14, 0x23, 0x12, 0x24, 0x0e, 0x25, }; static const uint8 kPreloadedHSTSData[] = { - 0xfe, 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x25, 0x9f, - 0x02, 0x66, 0x21, 0xa2, 0x2d, 0x9a, 0xe9, 0x2a, - 0x4c, 0x54, 0xbc, 0x03, 0x4b, 0xe0, 0xb4, 0xfe, - 0xd5, 0x87, 0x8a, 0xfd, 0x4a, 0x59, 0xa8, 0x9f, - 0x9f, 0xbf, 0xba, 0xb7, 0x0e, 0x86, 0x3f, 0x3c, - 0x43, 0x9f, 0xe1, 0x6d, 0xfd, 0x19, 0x5f, 0x3a, - 0x4b, 0xb4, 0xd1, 0xba, 0xa1, 0xe1, 0xd8, 0x82, - 0x7f, 0x2e, 0xc1, 0x33, 0x10, 0xd1, 0x51, 0x4f, - 0xff, 0x6f, 0xfb, 0x5f, 0x7b, 0xba, 0x39, 0x6b, - 0xe4, 0xe9, 0xf0, 0x26, 0x62, 0x1a, 0x2b, 0xd9, - 0xf7, 0xdd, 0x93, 0xda, 0x0e, 0x92, 0xec, 0xf7, - 0x00, 0xc2, 0x7f, 0xe5, 0xe3, 0xd7, 0x60, 0x99, - 0x88, 0x68, 0x91, 0xa7, 0xff, 0x2d, 0x58, 0xf5, - 0xd8, 0x26, 0x62, 0x1a, 0x27, 0x89, 0xff, 0xcb, - 0x56, 0x3d, 0x76, 0x09, 0x98, 0x86, 0x89, 0xfe, - 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, 0x82, 0x66, 0x21, - 0xa2, 0x86, 0x9f, 0xfc, 0xb5, 0x63, 0xd7, 0x60, - 0x99, 0x88, 0x68, 0xa2, 0x27, 0xfd, 0x8f, 0x5d, - 0x82, 0x66, 0x21, 0xa2, 0x91, 0x9f, 0xff, 0xaf, - 0x9d, 0xb7, 0x65, 0xe8, 0x73, 0xca, 0xd5, 0xbc, - 0x2a, 0x4b, 0x52, 0x29, 0x3a, 0x91, 0xa7, 0xfe, - 0x5e, 0x3d, 0x76, 0x09, 0x98, 0x86, 0x89, 0x42, - 0x28, 0x5d, 0x81, 0x7c, 0x70, 0x28, 0x81, 0xd7, - 0x3b, 0x08, 0x57, 0xa8, 0x9b, 0x69, 0x9e, 0x29, - 0x3b, 0x8a, 0x55, 0x52, 0xf6, 0x1e, 0xce, 0xc5, - 0x93, 0xff, 0x96, 0xac, 0x7a, 0xec, 0x13, 0x31, - 0x0d, 0x13, 0x9c, 0xff, 0xe5, 0xab, 0x1e, 0xbb, - 0x04, 0xcc, 0x43, 0x45, 0x13, 0x3f, 0xf0, 0x3d, - 0x7b, 0xfd, 0x5c, 0x7f, 0xfc, 0x3a, 0x01, 0x1d, - 0x75, 0x52, 0xf5, 0x4a, 0x7f, 0x2e, 0xc1, 0x33, - 0x10, 0xd1, 0x0e, 0x4f, 0x81, 0x33, 0x10, 0xd1, - 0x17, 0xcf, 0xea, 0xdf, 0x3b, 0xbf, 0x30, 0xe9, - 0xab, 0x49, 0xd3, 0xda, 0x7b, 0x77, 0x2a, 0x14, - 0x6e, 0xb0, 0x5e, 0x4b, 0xb4, 0x5e, 0xb8, 0x60, - 0x2d, 0xb3, 0xff, 0x96, 0xac, 0x7a, 0xec, 0x13, - 0x31, 0x0d, 0x13, 0x24, 0xfe, 0x5d, 0x82, 0x66, - 0x21, 0xa2, 0xde, 0x9f, 0xfc, 0xb5, 0x63, 0xd7, - 0x60, 0x99, 0x88, 0x68, 0xa4, 0xe7, 0xdb, 0x5b, - 0xbf, 0xd6, 0xdd, 0xe3, 0xa1, 0x95, 0x22, 0x3e, - 0x1f, 0x16, 0x6b, 0x55, 0x27, 0x47, 0x7d, 0x94, - 0xa7, 0xf2, 0xec, 0x13, 0x31, 0x0d, 0x10, 0xec, - 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0x04, 0xcc, 0x43, - 0x44, 0xb1, 0x3f, 0x97, 0x60, 0x99, 0x88, 0x68, - 0x8c, 0x27, 0xc0, 0x99, 0x88, 0x68, 0x8f, 0x67, - 0xab, 0x94, 0xba, 0x3a, 0x79, 0x78, 0xf5, 0xd9, - 0xea, 0x68, 0xc2, 0x7f, 0x2e, 0xc1, 0x33, 0x10, - 0xd1, 0x61, 0xcf, 0xe5, 0xd8, 0x26, 0x62, 0x1a, - 0x2e, 0x78, 0x64, 0xf2, 0xa8, 0x3b, 0x7a, 0x97, - 0xe1, 0x1e, 0xa3, 0x8d, 0x1d, 0xcf, 0xe5, 0xd8, - 0x26, 0x62, 0x1a, 0x21, 0xe9, 0xf0, 0x26, 0x62, - 0x1a, 0x22, 0x69, 0xff, 0xd7, 0xac, 0xde, 0xd9, - 0xd3, 0xec, 0x18, 0xe9, 0xb4, 0xa3, 0xa7, 0xff, - 0x5e, 0xfb, 0x51, 0x56, 0xfd, 0x3a, 0x65, 0x1d, - 0x14, 0x9f, 0x1e, 0xc5, 0xa7, 0xb5, 0xee, 0x76, - 0x34, 0x42, 0xf2, 0x5d, 0xa6, 0x5f, 0xb3, 0x0a, - 0xc2, 0xaf, 0xd2, 0x39, 0xc1, 0x88, 0x74, 0xb6, - 0x74, 0x77, 0x35, 0x3e, 0x8c, 0xcf, 0x6b, 0x7f, - 0xd1, 0xd3, 0xff, 0xbe, 0xe3, 0xee, 0x97, 0xf4, - 0x56, 0x60, 0x9d, 0x36, 0x3b, 0x1d, 0x16, 0x88, - 0x6d, 0x91, 0x62, 0x64, 0xe0, 0xc4, 0x3a, 0x1d, - 0xf3, 0xc7, 0xee, 0x5d, 0x3e, 0xde, 0x6b, 0x1e, - 0x74, 0xfe, 0x7d, 0x5a, 0xbd, 0x6b, 0xf5, 0xbe, - 0xb6, 0x74, 0xf7, 0xeb, 0xff, 0x0e, 0x9d, 0xc7, - 0x1c, 0x15, 0x3e, 0xc1, 0xd6, 0xec, 0xa5, 0x97, - 0xf3, 0xec, 0xd3, 0x97, 0xa3, 0xa3, 0x94, 0x4e, - 0xf8, 0x84, 0x26, 0x93, 0xdb, 0xcc, 0xc3, 0xa7, - 0xfe, 0xf3, 0xee, 0x74, 0xdb, 0x7c, 0x3d, 0xeb, - 0x9d, 0x3f, 0xef, 0xf7, 0x61, 0x6a, 0xb7, 0xd4, - 0x74, 0xfd, 0x6e, 0xbd, 0x7d, 0xd4, 0xe9, 0xeb, - 0xe6, 0xe8, 0x3a, 0x2d, 0x51, 0xbd, 0x24, 0xdf, - 0x87, 0x2f, 0x5c, 0xc5, 0xc1, 0xfd, 0xa6, 0x89, - 0xf6, 0x8b, 0xe7, 0xeb, 0xe1, 0xaf, 0x9f, 0x9d, - 0x39, 0xbd, 0xf0, 0xe9, 0xff, 0xff, 0xc2, 0x34, - 0xb7, 0x71, 0xbe, 0x77, 0xf7, 0x3a, 0x56, 0xe9, - 0x78, 0x5f, 0x07, 0x4f, 0xbf, 0xaf, 0x5a, 0x83, - 0xa7, 0xff, 0xf5, 0xd2, 0xfa, 0xaa, 0xc7, 0xa3, - 0xb7, 0xf7, 0x47, 0xec, 0x0e, 0x9f, 0xff, 0xf7, - 0x1d, 0x06, 0xd3, 0x7f, 0x1b, 0xf6, 0x9d, 0x74, - 0xce, 0x2f, 0xb9, 0xd3, 0xfa, 0x97, 0xd7, 0xbf, - 0xad, 0x49, 0xd3, 0xfb, 0x38, 0xf5, 0xc6, 0xd6, - 0x1d, 0x0c, 0x8d, 0xff, 0xb9, 0x89, 0xc4, 0xf7, - 0x9a, 0xfd, 0x07, 0x4f, 0xf9, 0xb2, 0x86, 0x50, - 0xb5, 0x3e, 0x1d, 0x0c, 0xa9, 0xee, 0xdf, 0x7e, - 0x52, 0x11, 0xa2, 0xe1, 0x70, 0x92, 0x4d, 0xeb, - 0xce, 0x9d, 0x9a, 0xa9, 0xd3, 0x7b, 0x41, 0xd3, - 0xcc, 0x3a, 0x71, 0xe6, 0xcc, 0x06, 0xe7, 0xff, - 0xde, 0xb6, 0xba, 0x0f, 0xae, 0xdd, 0x2f, 0x5d, - 0x57, 0xa3, 0xa7, 0xfe, 0xdb, 0x77, 0xe9, 0xa1, - 0xcd, 0x36, 0x8e, 0x9f, 0xdd, 0x29, 0x7f, 0xf7, - 0xea, 0x8e, 0x8f, 0x0f, 0xf8, 0x51, 0xa7, 0xfc, - 0x0e, 0x74, 0xab, 0x7e, 0x8c, 0xd1, 0xd0, 0xc7, - 0xc7, 0xe9, 0x14, 0xff, 0xff, 0xf7, 0xa3, 0x50, - 0x16, 0x73, 0xa7, 0x6d, 0x7d, 0xf7, 0x4e, 0xad, - 0xd0, 0xdd, 0x4e, 0x93, 0x1d, 0x3f, 0x9f, 0x81, - 0xfa, 0xb5, 0x27, 0x4f, 0xff, 0xff, 0xef, 0xf9, - 0x51, 0xbc, 0xa7, 0xa7, 0x3b, 0xf7, 0xa0, 0xdd, - 0x2f, 0xbf, 0x68, 0x1b, 0xca, 0x4e, 0x9d, 0x98, - 0x86, 0x8a, 0x62, 0x2d, 0x17, 0xa9, 0x09, 0x79, - 0xff, 0x58, 0xd2, 0xfa, 0xe9, 0x81, 0xc3, 0xa7, - 0x5f, 0xfc, 0x3a, 0x56, 0x74, 0xea, 0x46, 0xfc, - 0x35, 0x6e, 0x87, 0x23, 0xe8, 0x9e, 0xc6, 0x99, - 0xfe, 0xc5, 0x73, 0xb6, 0xa2, 0xf8, 0x3a, 0x7f, - 0xff, 0x0d, 0xa6, 0xb4, 0xda, 0xab, 0x83, 0x7c, - 0x74, 0x67, 0x76, 0x74, 0xff, 0x91, 0x95, 0xbb, - 0xad, 0xfc, 0x4e, 0x86, 0x45, 0x16, 0xd9, 0xe7, - 0xc0, 0xce, 0x98, 0x0e, 0x9f, 0xb0, 0x7a, 0x72, - 0xc2, 0x74, 0x59, 0xfa, 0xfc, 0x8b, 0xd2, 0x68, - 0xa1, 0x77, 0x2f, 0x94, 0xae, 0xe6, 0xe9, 0x1a, - 0x0d, 0x24, 0x5f, 0x84, 0x1b, 0x81, 0xe1, 0x0e, - 0xf5, 0x43, 0x10, 0x48, 0xb5, 0x1a, 0x8c, 0xff, - 0xbb, 0x86, 0x71, 0xd3, 0x39, 0xca, 0x0e, 0x9e, - 0xb1, 0xef, 0xd7, 0x3a, 0x7f, 0xff, 0xfd, 0xbf, - 0xeb, 0x76, 0x0c, 0xeb, 0xa2, 0xbd, 0x76, 0xe9, - 0x74, 0xbe, 0xfd, 0x1f, 0x2a, 0x74, 0xb5, 0xf4, - 0x5a, 0xd4, 0x9a, 0x7f, 0xfd, 0x77, 0xbf, 0xa6, - 0xef, 0xa5, 0x7d, 0xdb, 0x75, 0xce, 0x9f, 0xfe, - 0xd6, 0xef, 0xce, 0x8a, 0x6b, 0xd7, 0x36, 0x27, - 0x4f, 0xf5, 0x3d, 0x14, 0xd6, 0x3a, 0xea, 0x3a, - 0x55, 0xb4, 0x47, 0x62, 0x8c, 0xbe, 0x29, 0x87, - 0xea, 0x1d, 0x13, 0xe7, 0xb5, 0x2f, 0xa9, 0xd3, - 0xff, 0xff, 0xfe, 0xb1, 0xef, 0xd3, 0xfb, 0xf5, - 0x6e, 0x7f, 0x4c, 0xa1, 0xce, 0xfb, 0xfa, 0xef, - 0x74, 0xf8, 0xdc, 0x95, 0x3f, 0xff, 0xf2, 0x7f, - 0x8e, 0x7d, 0x0e, 0x9e, 0xb5, 0x15, 0x4d, 0xfb, - 0xba, 0x73, 0x83, 0xa6, 0xf6, 0x8a, 0x53, 0x47, - 0xf9, 0x45, 0x61, 0x49, 0x0c, 0xab, 0xcb, 0x71, - 0x9c, 0x0c, 0x6e, 0xb3, 0xff, 0x94, 0x9d, 0x37, - 0x8f, 0xb5, 0x60, 0xf8, 0x74, 0xff, 0xfb, 0xe3, - 0xad, 0xdb, 0xb6, 0x9c, 0xbe, 0xbe, 0x0f, 0x87, - 0x4f, 0xfc, 0xc3, 0x40, 0xdb, 0xaa, 0xfa, 0xd4, - 0x9d, 0x15, 0x45, 0x17, 0xab, 0x93, 0xd7, 0xab, - 0x77, 0x0e, 0x9d, 0xd5, 0x7b, 0x3a, 0x6b, 0xe4, - 0xe8, 0xa1, 0x36, 0x97, 0xc3, 0xb2, 0xa4, 0x9a, - 0x25, 0x74, 0x3d, 0x3e, 0xfe, 0xab, 0x7e, 0x1d, - 0x3f, 0x72, 0xc3, 0xbc, 0x79, 0xd3, 0x9b, 0x96, - 0x3a, 0x7e, 0x7d, 0xea, 0xb8, 0xe7, 0x43, 0xc7, - 0x51, 0x64, 0x3d, 0x16, 0xce, 0x37, 0xcf, 0xce, - 0xdb, 0xce, 0xbb, 0x78, 0x74, 0xfe, 0x07, 0x06, - 0xf7, 0x9a, 0x3a, 0x2c, 0xf9, 0x7e, 0x69, 0x3f, - 0x37, 0x97, 0xae, 0xd4, 0x1d, 0x0f, 0x3d, 0x11, - 0x21, 0x9f, 0xff, 0xf6, 0x87, 0x3c, 0xad, 0x17, - 0xf1, 0xd0, 0xdb, 0xae, 0x95, 0xe0, 0x4e, 0x9f, - 0xf7, 0xed, 0xce, 0x95, 0x6d, 0xe7, 0x5c, 0xe9, - 0xfd, 0x94, 0xd7, 0x77, 0x80, 0x74, 0x72, 0x7e, - 0xba, 0x44, 0x9f, 0xeb, 0x0a, 0x1b, 0xe1, 0x62, - 0x74, 0x94, 0x77, 0x43, 0x6b, 0x38, 0x6f, 0x93, - 0xa1, 0x8d, 0xed, 0x24, 0x53, 0xf5, 0x35, 0xbb, - 0x1e, 0xe7, 0x4f, 0x2b, 0xb3, 0x78, 0x74, 0x59, - 0xe9, 0x7c, 0xba, 0x77, 0xb4, 0xf8, 0x74, 0x32, - 0xa2, 0xdb, 0x87, 0x2f, 0xe1, 0x2a, 0x0e, 0x62, - 0x43, 0x3f, 0xb5, 0xfa, 0x2f, 0x7e, 0xe8, 0xe9, - 0x38, 0x74, 0xfd, 0x7e, 0xde, 0xd2, 0x83, 0xa6, - 0xba, 0x58, 0xdf, 0x54, 0x46, 0x7e, 0xde, 0x3d, - 0x41, 0xf3, 0xa7, 0xdf, 0xf0, 0x2e, 0x93, 0xa3, - 0xba, 0x3c, 0xfe, 0xe7, 0xe1, 0x67, 0xa5, 0x93, - 0xff, 0xf0, 0x3f, 0x76, 0xe6, 0xd8, 0x7b, 0x8d, - 0xeb, 0x7e, 0x9d, 0x3f, 0xff, 0xbf, 0x74, 0xbe, - 0xba, 0xdb, 0x29, 0xbf, 0xcf, 0x46, 0x77, 0x67, - 0x4f, 0xff, 0xff, 0xbd, 0x1e, 0x9c, 0x65, 0x2f, - 0x0c, 0xf3, 0xa5, 0x7d, 0x6a, 0x77, 0x7f, 0x1b, - 0xee, 0x74, 0xff, 0xfb, 0xd0, 0x0b, 0xd5, 0x77, - 0xfb, 0xe9, 0xbf, 0x18, 0xe8, 0xb4, 0x71, 0xee, - 0x11, 0x93, 0xff, 0xcf, 0x76, 0xdd, 0xb0, 0xb8, - 0x37, 0xaa, 0xe1, 0xd3, 0xff, 0xee, 0x6d, 0x5d, - 0x1d, 0xb4, 0xd5, 0x71, 0xf8, 0x14, 0x1d, 0x3f, - 0xd6, 0x34, 0x74, 0xf3, 0x31, 0xc3, 0xa7, 0xf8, - 0x28, 0x6a, 0x28, 0xf4, 0x28, 0x3a, 0x7f, 0xbd, - 0x1e, 0x95, 0xf7, 0xab, 0xd0, 0x3a, 0x18, 0xff, - 0x2a, 0x79, 0x3f, 0xfa, 0x8e, 0x95, 0xdf, 0xbd, - 0x35, 0x5a, 0xb0, 0x1d, 0x3f, 0xff, 0xeb, 0xa6, - 0xbf, 0xbe, 0x3a, 0x6e, 0xf5, 0x5b, 0xa3, 0xa5, - 0xff, 0x93, 0xa2, 0xd1, 0x87, 0xf5, 0x08, 0xa1, - 0x5e, 0xea, 0x46, 0x9b, 0x49, 0x3f, 0xd4, 0x14, - 0xb9, 0x58, 0x5b, 0xea, 0x1c, 0x93, 0xfe, 0xc0, - 0xdd, 0xe9, 0x87, 0xfe, 0x1d, 0x3f, 0xd7, 0xc5, - 0x2f, 0xaf, 0x4d, 0x7c, 0xe9, 0xff, 0xff, 0x32, - 0x32, 0xba, 0x39, 0xbf, 0x8f, 0x3d, 0x3b, 0x20, - 0xde, 0xec, 0xe8, 0x44, 0x74, 0x89, 0xe3, 0xb1, - 0xec, 0xf7, 0xf5, 0xf6, 0x3a, 0x7f, 0xff, 0xfe, - 0xd3, 0x28, 0x7f, 0xdf, 0x78, 0xe7, 0x41, 0xf5, - 0xdb, 0xa5, 0xd2, 0xfb, 0xf4, 0x7c, 0xa9, 0xd0, - 0xf4, 0x5b, 0x7c, 0x86, 0x19, 0x7a, 0x8e, 0xe7, - 0x0e, 0x7f, 0x1b, 0x06, 0x43, 0x9e, 0x7b, 0x55, - 0xcf, 0x0e, 0x9f, 0xfb, 0x7f, 0xe9, 0xf0, 0xf6, - 0x8c, 0x04, 0x3a, 0x7b, 0xfb, 0xca, 0x0e, 0x9e, - 0x74, 0xda, 0x63, 0xa7, 0xed, 0xe5, 0x1d, 0x1f, - 0xa3, 0xa7, 0xd8, 0x03, 0x4f, 0xce, 0x8f, 0x9e, - 0xb6, 0x8c, 0x22, 0xd3, 0x24, 0xee, 0x44, 0x88, - 0xdf, 0x22, 0xd3, 0xc4, 0xf7, 0x6f, 0x72, 0xa7, - 0x4f, 0xff, 0xdf, 0x0e, 0x97, 0xfb, 0x1e, 0xfb, - 0xfd, 0xaa, 0xd0, 0xe9, 0xff, 0xfe, 0xfd, 0x00, - 0xca, 0xaf, 0xad, 0xd1, 0x81, 0xb9, 0xdb, 0x28, - 0xe8, 0xb4, 0x61, 0x82, 0xdc, 0xff, 0xff, 0xe0, - 0x0f, 0xd1, 0xd3, 0x77, 0xa1, 0x67, 0x37, 0x74, - 0x35, 0x3a, 0xf5, 0x0e, 0x9f, 0xff, 0xf9, 0xbb, - 0xed, 0xba, 0x0d, 0xfb, 0xdf, 0xa5, 0x2f, 0xaf, - 0xc7, 0xb3, 0x50, 0x74, 0xfa, 0x9a, 0xfe, 0xc4, - 0xe8, 0xb4, 0x52, 0x7a, 0xfb, 0x1f, 0x4d, 0x0b, - 0x71, 0x8f, 0xcf, 0xfc, 0xfa, 0xff, 0xbe, 0xdb, - 0xf4, 0x37, 0x73, 0xa7, 0xf8, 0x7d, 0x70, 0x6f, - 0x79, 0xa3, 0xa7, 0xfb, 0x9d, 0xb7, 0x1c, 0xef, - 0x14, 0x74, 0xff, 0xff, 0x60, 0x6e, 0xf5, 0xfb, - 0x1a, 0x2a, 0xd6, 0x3c, 0xed, 0x8e, 0x9e, 0xd7, - 0x4a, 0x00, 0xe8, 0xa5, 0x10, 0xf8, 0xc7, 0x3f, - 0x39, 0x4b, 0xfd, 0x6d, 0x1d, 0x3f, 0xdb, 0xc5, - 0x0d, 0xef, 0x34, 0x74, 0xf5, 0x87, 0x9c, 0x1d, - 0x0c, 0x88, 0x8a, 0x98, 0x68, 0xda, 0x7e, 0xbd, - 0x00, 0x5b, 0xce, 0x9f, 0x86, 0xf6, 0x36, 0x87, - 0x4f, 0x0d, 0xd7, 0xa3, 0x87, 0xa7, 0xa2, 0xa8, - 0xe5, 0x70, 0xe1, 0x23, 0x63, 0xa4, 0xab, 0xe9, - 0x20, 0x71, 0xb8, 0x61, 0x6a, 0x15, 0x6e, 0xa1, - 0x05, 0x3f, 0xf0, 0x8d, 0xf4, 0x0b, 0xd8, 0xdb, - 0x87, 0x43, 0x2e, 0xf6, 0x5c, 0xe8, 0xfe, 0x42, - 0x2e, 0x7c, 0x2c, 0xac, 0xe4, 0xe9, 0xfd, 0x6e, - 0x6e, 0xf4, 0xdc, 0x9d, 0x3f, 0xff, 0xfd, 0xbb, - 0xd5, 0x71, 0xce, 0x83, 0x74, 0xbe, 0xfd, 0xa0, - 0x6f, 0x9d, 0xfd, 0xc3, 0xa6, 0xf7, 0xb9, 0xd0, - 0x08, 0x9c, 0xd4, 0x20, 0xe7, 0xeb, 0xa0, 0x6e, - 0x9a, 0x9d, 0x3f, 0xf8, 0x29, 0x7d, 0x6d, 0x54, - 0xb6, 0xf6, 0xc7, 0x4a, 0xa7, 0x47, 0xa7, 0xb5, - 0xd9, 0x2a, 0x7f, 0x32, 0x86, 0xf7, 0x9a, 0x3a, - 0x7b, 0xa2, 0x51, 0xc1, 0xd3, 0xff, 0xfe, 0xd0, - 0xb7, 0x94, 0xbe, 0xbe, 0xb6, 0x86, 0xf9, 0xfd, - 0x83, 0x87, 0x47, 0xd5, 0x45, 0xb8, 0x4d, 0x90, - 0xcf, 0x12, 0x7a, 0xc2, 0x1f, 0xd2, 0x57, 0x46, - 0x1d, 0x89, 0x67, 0xcf, 0xf8, 0x5d, 0x27, 0x4f, - 0xae, 0xb4, 0x5f, 0x07, 0x45, 0x27, 0x9f, 0xb2, - 0x79, 0xff, 0xf7, 0xe8, 0xb4, 0xe7, 0x7f, 0xbe, - 0xfd, 0x3b, 0xfa, 0xc7, 0x4f, 0x3b, 0x6a, 0xf6, - 0x74, 0xff, 0xff, 0xce, 0xd4, 0xbf, 0x29, 0xe8, - 0x3e, 0xbb, 0x74, 0xba, 0x5f, 0x7e, 0x8f, 0x95, - 0x3a, 0x28, 0x45, 0x2d, 0x92, 0x4f, 0xff, 0xff, - 0x9a, 0x9a, 0xfa, 0xd4, 0xf4, 0xdd, 0xf3, 0xd0, - 0x6f, 0xde, 0xfd, 0x2b, 0xe7, 0x9f, 0xd1, 0xd3, - 0xe6, 0x1a, 0x72, 0x83, 0xa7, 0xff, 0xff, 0xff, - 0x5a, 0xad, 0x1b, 0x6c, 0xad, 0x5d, 0x6a, 0xc0, - 0x0c, 0x37, 0x45, 0xfb, 0x5f, 0x5c, 0x16, 0x51, - 0xd3, 0xfd, 0xe5, 0xf2, 0x37, 0xbc, 0xd1, 0xd3, - 0xfa, 0x8f, 0x5b, 0x4a, 0xfe, 0x8e, 0x9f, 0xf3, - 0x77, 0x76, 0xf6, 0xc5, 0xce, 0xca, 0x3a, 0x2c, - 0xfe, 0xe9, 0x35, 0x9f, 0xfe, 0xbd, 0x73, 0x77, - 0xe5, 0x7a, 0x05, 0x79, 0xa9, 0xd3, 0xd4, 0x7c, - 0x74, 0x74, 0x32, 0xbe, 0xcb, 0x23, 0xfc, 0x60, - 0x40, 0x46, 0xa8, 0x49, 0x6c, 0x9f, 0x21, 0x42, - 0x30, 0xb3, 0xa9, 0x17, 0xaa, 0x73, 0xb9, 0xe8, - 0xe1, 0xd3, 0xff, 0xd4, 0xbc, 0x5b, 0xa2, 0x85, - 0xbb, 0xeb, 0xf4, 0x1d, 0x16, 0x7e, 0x9f, 0x20, - 0x9f, 0xa8, 0x71, 0xfd, 0x60, 0x50, 0x74, 0xf9, - 0x5f, 0xe6, 0xf9, 0x3a, 0x4e, 0x1d, 0x33, 0x28, - 0xe9, 0x68, 0xe8, 0x03, 0x4b, 0x82, 0xb1, 0xc9, - 0xea, 0xec, 0xda, 0x7b, 0x55, 0xca, 0x4e, 0x99, - 0xcc, 0x3a, 0x7f, 0x6f, 0xe1, 0x4b, 0xc5, 0x8e, - 0x8e, 0xb6, 0x9a, 0x03, 0x1a, 0xdb, 0xf7, 0xc8, - 0xd4, 0x45, 0xe8, 0xb4, 0xfe, 0xaf, 0xe9, 0xe3, - 0x07, 0xc3, 0xa7, 0xff, 0xcc, 0x0c, 0x96, 0xa6, - 0x47, 0xfe, 0xbe, 0xa8, 0xe8, 0x71, 0x10, 0xfd, - 0x46, 0xb3, 0xf0, 0x5b, 0x77, 0x61, 0x3a, 0x70, - 0xe2, 0x8e, 0x9b, 0xc6, 0x3a, 0x1e, 0x7b, 0x7f, - 0x2b, 0x11, 0xa8, 0x77, 0x9d, 0x94, 0x7f, 0x59, - 0x0f, 0x16, 0x94, 0xc1, 0x43, 0xe3, 0xcb, 0x79, - 0x95, 0x31, 0x73, 0xc4, 0xbd, 0xe1, 0x72, 0x92, - 0xfa, 0xa9, 0x8e, 0x97, 0xf1, 0x84, 0xb9, 0x0d, - 0xa0, 0x94, 0x9c, 0xa8, 0xd1, 0x77, 0x3d, 0xc9, - 0x91, 0xba, 0x0c, 0xf1, 0xbd, 0x65, 0x64, 0x6a, - 0x72, 0xf1, 0xd4, 0x62, 0x5d, 0x51, 0xb0, 0xf6, - 0x87, 0x23, 0xb4, 0x20, 0xa7, 0xff, 0xef, 0x51, - 0x74, 0xe8, 0x1a, 0xe9, 0xeb, 0x39, 0xcc, 0xee, - 0x74, 0x2d, 0x51, 0x8f, 0xe3, 0xce, 0x9f, 0xcb, - 0xb0, 0x4c, 0xc4, 0x34, 0x53, 0xb3, 0xe0, 0x4c, - 0xc4, 0x34, 0x54, 0x73, 0xfe, 0xc7, 0xae, 0xc1, - 0x33, 0x10, 0xd1, 0x34, 0x49, 0x76, 0x7e, 0xca, - 0x30, 0x9f, 0xcb, 0xb0, 0x4c, 0xc4, 0x34, 0x55, - 0xf3, 0xe0, 0x4c, 0xc4, 0x34, 0x56, 0xd3, 0xfc, - 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x24, 0x19, 0x2e, - 0xcf, 0xc7, 0x0c, 0x27, 0xfe, 0x5e, 0x3d, 0x76, - 0x09, 0x98, 0x86, 0x89, 0x0e, 0x7f, 0xcf, 0xdb, - 0x6a, 0xae, 0xee, 0xae, 0xf0, 0x9d, 0x3e, 0xbb, - 0x1f, 0x2a, 0x74, 0xf8, 0x13, 0x31, 0x0d, 0x16, - 0x24, 0xfa, 0xc1, 0x87, 0xb9, 0xd3, 0xee, 0xdd, - 0x56, 0x0c, 0x74, 0xea, 0xb0, 0x9d, 0x2d, 0xb1, - 0xe2, 0x7c, 0xaa, 0x7f, 0xe6, 0xba, 0xd8, 0xf3, - 0xff, 0x18, 0x4e, 0x9c, 0x2d, 0x41, 0xd2, 0x78, - 0x9e, 0xef, 0xa8, 0x53, 0xba, 0xbf, 0xe1, 0xd3, - 0xef, 0xba, 0xf7, 0x2a, 0x74, 0xff, 0xce, 0xbd, - 0xba, 0x79, 0x75, 0xbb, 0xc7, 0x0e, 0x99, 0x9e, - 0x74, 0x59, 0xf0, 0x02, 0x5c, 0xfe, 0xb0, 0x7f, - 0x97, 0x6e, 0x1d, 0x3e, 0xc7, 0xf6, 0xdb, 0x1d, - 0x3f, 0x56, 0xa1, 0xfe, 0x3a, 0xe7, 0x43, 0x22, - 0x33, 0xe6, 0x58, 0x51, 0x3f, 0xfc, 0xf6, 0x53, - 0x3f, 0x91, 0x6d, 0xe5, 0x81, 0xd3, 0xf9, 0x06, - 0xdd, 0x0d, 0xd4, 0xe8, 0xa4, 0xff, 0x76, 0x99, - 0x3f, 0xbc, 0x6b, 0xd7, 0xc7, 0x82, 0xa7, 0xd7, - 0xba, 0x73, 0xae, 0x74, 0xf7, 0x95, 0x61, 0x3a, - 0x7f, 0x06, 0xf3, 0xf5, 0xfb, 0xa3, 0xa1, 0x8f, - 0x56, 0xc8, 0x60, 0x51, 0x41, 0x58, 0x40, 0x4f, - 0xd9, 0x46, 0x9a, 0x97, 0x9d, 0x3f, 0xe1, 0x6f, - 0xf3, 0xa1, 0xca, 0x6a, 0x74, 0x3b, 0xcb, 0xa7, - 0xfc, 0xa4, 0xd9, 0x37, 0x73, 0x04, 0x6a, 0xa6, - 0x10, 0x9f, 0x28, 0x70, 0x80, 0x21, 0x15, 0xb8, - 0x56, 0x64, 0x2a, 0xfc, 0x23, 0xac, 0x34, 0xf4, - 0x4f, 0xd8, 0xba, 0x7f, 0xed, 0xfd, 0xb5, 0xbc, - 0xef, 0x63, 0xe1, 0xd3, 0xff, 0xd7, 0x4b, 0xf5, - 0xed, 0x0b, 0xde, 0x2b, 0xf5, 0x3a, 0x6d, 0xae, - 0xd1, 0x30, 0x28, 0xb0, 0xb4, 0xed, 0x9a, 0x38, - 0x99, 0xfc, 0xbb, 0x04, 0xcc, 0x43, 0x45, 0x9b, - 0x35, 0xf2, 0x74, 0xff, 0xb1, 0xeb, 0xb0, 0x4c, - 0xc4, 0x34, 0x50, 0x12, 0x5d, 0x9e, 0xe2, 0x85, - 0xa6, 0xf7, 0x67, 0x4f, 0xd5, 0x65, 0x0b, 0x38, - 0x74, 0xfd, 0x7a, 0xf3, 0xb0, 0xb8, 0x74, 0x78, - 0x7b, 0x82, 0x59, 0x37, 0x4a, 0x9d, 0x3f, 0xdb, - 0xb0, 0xd0, 0xb2, 0xaa, 0x74, 0xf2, 0x66, 0x21, - 0xa2, 0xdf, 0x9f, 0xbb, 0x6b, 0x13, 0x00, 0xe8, - 0x03, 0xd7, 0xf0, 0xae, 0x7d, 0xa7, 0xd7, 0xb5, - 0x4e, 0x9f, 0x9d, 0x76, 0xd0, 0xb7, 0x87, 0x4f, - 0xb9, 0x6e, 0xbf, 0xaa, 0x3a, 0x18, 0xf7, 0xbe, - 0x63, 0x3d, 0x9f, 0x1d, 0x1d, 0x3f, 0xbd, 0xa6, - 0xac, 0x96, 0xa3, 0xa7, 0xb7, 0xdf, 0x95, 0x1d, - 0x35, 0xbc, 0xe8, 0xb3, 0x74, 0x24, 0xb2, 0x5b, - 0xbc, 0xaa, 0xc5, 0x9c, 0xde, 0x45, 0xc8, 0xc5, - 0xc2, 0x34, 0x08, 0xb7, 0x08, 0x8f, 0x08, 0x44, - 0x83, 0x4d, 0xb3, 0xfe, 0xc7, 0xae, 0xc1, 0x33, - 0x10, 0xd1, 0x4a, 0x4f, 0xf3, 0xd7, 0x60, 0x99, - 0x88, 0x68, 0x93, 0xa4, 0xb5, 0x22, 0x1f, 0x11, - 0xa1, 0x9f, 0x12, 0x66, 0x88, 0xda, 0xb9, 0xb6, - 0xa6, 0x56, 0x56, 0x90, 0xb1, 0xf9, 0x3f, 0x5e, - 0x15, 0x8e, 0x13, 0x2a, 0x7d, 0x07, 0x65, 0x3e, - 0x42, 0x5e, 0xb2, 0xb6, 0x1d, 0x46, 0x4f, 0x3e, - 0x04, 0xcc, 0x43, 0x44, 0x3f, 0x3f, 0xec, 0x7a, - 0xec, 0x13, 0x31, 0x0d, 0x12, 0x9c, 0x97, 0x67, - 0xec, 0xa3, 0x09, 0xfc, 0xbb, 0x04, 0xcc, 0x43, - 0x44, 0x4f, 0x3f, 0x97, 0x60, 0x99, 0x88, 0x68, - 0x8c, 0x67, 0xff, 0x2d, 0x58, 0xf5, 0xd8, 0x26, - 0x62, 0x1a, 0x27, 0x98, 0x64, 0x77, 0xd0, 0x4e, - 0xf3, 0xbd, 0x9d, 0xcf, 0x81, 0x33, 0x10, 0xd1, - 0x10, 0x4f, 0xfb, 0x1e, 0xbb, 0x04, 0xcc, 0x43, - 0x44, 0xa9, 0x25, 0xd9, 0xfb, 0x28, 0xc2, 0x7f, - 0x2e, 0xc1, 0x33, 0x10, 0xd1, 0x14, 0x4f, 0xe5, - 0xd8, 0x26, 0x62, 0x1a, 0x23, 0x29, 0xff, 0xcb, - 0x56, 0x3d, 0x76, 0x09, 0x98, 0x86, 0x89, 0x96, - 0x7f, 0x2e, 0xc1, 0x33, 0x10, 0xd1, 0x52, 0x4f, - 0xe5, 0xd8, 0x26, 0x62, 0x1a, 0x2b, 0xa9, 0xfc, - 0xbb, 0x04, 0xcc, 0x43, 0x45, 0x8b, 0x3f, 0xf2, - 0xb1, 0xeb, 0xb0, 0x4c, 0xc4, 0x34, 0x4f, 0x53, - 0xfd, 0xc2, 0xf1, 0xbf, 0xd5, 0xf7, 0x63, 0xa1, - 0x68, 0x8b, 0x64, 0xc9, 0xfb, 0xad, 0x7b, 0xd7, - 0xfd, 0xa9, 0xd3, 0xc0, 0xad, 0x52, 0x74, 0xe4, - 0xbd, 0x95, 0x39, 0x4d, 0x53, 0xa7, 0xff, 0xed, - 0x8e, 0x77, 0xf8, 0x33, 0xdf, 0x75, 0xf3, 0xc6, - 0x3a, 0x7f, 0xfe, 0x0f, 0xbb, 0x62, 0x96, 0xc0, - 0x1f, 0x76, 0x4f, 0x68, 0x3a, 0x7c, 0x9f, 0xdf, - 0x65, 0x1d, 0x3f, 0xfb, 0x2a, 0x37, 0xe2, 0xf7, - 0xf4, 0xc0, 0x3a, 0x7d, 0xad, 0xb2, 0x90, 0xe9, - 0xff, 0xc3, 0xd1, 0x98, 0x59, 0x5d, 0x3a, 0x6f, - 0xa8, 0xe9, 0xb2, 0x93, 0xa7, 0xf6, 0x57, 0x37, - 0xe8, 0xd0, 0x74, 0x09, 0xe4, 0xfa, 0x2d, 0x14, - 0x2a, 0x28, 0xf8, 0xd8, 0x2e, 0x29, 0x83, 0x65, - 0x22, 0x8f, 0xa2, 0x67, 0x68, 0x4c, 0xce, 0x1c, - 0xd1, 0xd3, 0x87, 0xf5, 0x3a, 0x5c, 0x3b, 0xe6, - 0xd5, 0x86, 0xa7, 0x81, 0xd6, 0x28, 0xe8, 0xb3, - 0xce, 0xf9, 0x64, 0xff, 0xbf, 0xbc, 0xd3, 0x39, - 0x5f, 0xa8, 0xe9, 0xf0, 0xf7, 0xfd, 0xd4, 0xe9, - 0xff, 0xaf, 0x8c, 0xf2, 0xd3, 0x79, 0xe5, 0x4e, - 0x8f, 0x9f, 0x60, 0x94, 0x4e, 0x53, 0x6c, 0xe9, - 0xe1, 0xe7, 0xa7, 0x73, 0xa7, 0xeb, 0xaf, 0x18, - 0x34, 0x1d, 0x16, 0x7d, 0xd8, 0x36, 0x24, 0xd3, - 0xef, 0x7b, 0xd7, 0x96, 0x3a, 0x2d, 0x1c, 0xdf, - 0x84, 0x7e, 0xcb, 0x27, 0xff, 0xff, 0x6d, 0xbe, - 0x00, 0xdd, 0xb5, 0xf1, 0xf5, 0xf7, 0x5e, 0x7d, - 0xc0, 0x79, 0xd3, 0xea, 0x39, 0x0f, 0xf0, 0x74, - 0xfd, 0xce, 0x07, 0x9d, 0x56, 0x74, 0xff, 0x87, - 0xef, 0xd6, 0xec, 0x3f, 0x53, 0xa7, 0xfd, 0x97, - 0xe3, 0x0e, 0x73, 0x7d, 0xce, 0x87, 0x9f, 0xdf, - 0x87, 0xb3, 0xfb, 0x29, 0xae, 0xb5, 0x7d, 0x73, - 0xa7, 0xff, 0x35, 0xd3, 0xad, 0xb6, 0x85, 0xbc, - 0xa9, 0xd3, 0xab, 0xb5, 0x1d, 0x1a, 0x3e, 0x5f, - 0x52, 0x67, 0xef, 0x6b, 0xaa, 0xde, 0x8e, 0x9d, - 0xc7, 0x1c, 0x15, 0x3f, 0xfb, 0x5f, 0xd5, 0x77, - 0xfe, 0xae, 0xc0, 0xcf, 0x29, 0x65, 0xfc, 0x7d, - 0x15, 0x7e, 0xa6, 0xc3, 0xd5, 0x7f, 0xdb, 0xcf, - 0xca, 0x82, 0x15, 0x6a, 0x23, 0x18, 0x4e, 0x6a, - 0x19, 0xd3, 0xfd, 0x4b, 0xeb, 0x5b, 0xe7, 0x34, - 0x74, 0xac, 0xe8, 0x63, 0xc9, 0xee, 0x75, 0x3e, - 0xe3, 0x4d, 0x4f, 0x07, 0x4e, 0x4e, 0x36, 0x74, - 0xfe, 0x6c, 0x0d, 0xf1, 0x9c, 0x95, 0x37, 0x1c, - 0x15, 0x1c, 0x9e, 0x57, 0x06, 0x53, 0xb5, 0xfe, - 0xb9, 0x4b, 0x34, 0x93, 0xde, 0xbf, 0xdd, 0x1d, - 0x15, 0x3d, 0x4e, 0xa3, 0x09, 0xb8, 0xa9, 0xd2, - 0xb3, 0xa5, 0x4d, 0x9a, 0x6d, 0x0b, 0xcf, 0xfd, - 0x5a, 0xf2, 0x2d, 0xce, 0xdb, 0x55, 0x3a, 0x18, - 0xfb, 0x3d, 0x27, 0x9f, 0xf6, 0xbe, 0x19, 0xe3, - 0xb6, 0xaf, 0x67, 0x4f, 0xec, 0x0d, 0x54, 0x7f, - 0xdc, 0xe8, 0x7a, 0x25, 0xbe, 0x45, 0x88, 0x33, - 0xd4, 0x5f, 0xc0, 0xe9, 0xff, 0x35, 0x3b, 0x65, - 0x26, 0xfe, 0xe1, 0xd1, 0x67, 0xc0, 0x04, 0x33, - 0xf6, 0x98, 0x39, 0xb1, 0x3a, 0x7f, 0x73, 0xb6, - 0x1e, 0x32, 0x93, 0xa7, 0xfe, 0xff, 0x3b, 0x64, - 0x6f, 0x30, 0x7c, 0x3a, 0x7f, 0xff, 0xdf, 0x56, - 0x0d, 0x2f, 0x5f, 0x17, 0xf7, 0x56, 0x37, 0xce, - 0x3c, 0xf1, 0x7a, 0xc3, 0x26, 0x3d, 0x85, 0x75, - 0x34, 0xf5, 0x12, 0x7f, 0xfa, 0xf5, 0x5b, 0x73, - 0x6c, 0xea, 0xf7, 0xb6, 0x3a, 0x7f, 0xff, 0xfd, - 0xfb, 0xa6, 0xbf, 0xbe, 0x3a, 0x5d, 0x2f, 0xaf, - 0xf5, 0x5f, 0xd3, 0xcf, 0x3e, 0xd0, 0x74, 0xff, - 0xfb, 0xe3, 0xcf, 0x4e, 0xda, 0xfd, 0x73, 0xe3, - 0xeb, 0xce, 0x81, 0x4c, 0xeb, 0x4a, 0x0e, 0xa1, - 0x1f, 0x36, 0x72, 0x74, 0xfc, 0x19, 0x5d, 0xe3, - 0xce, 0x95, 0x27, 0x4d, 0xfe, 0x0e, 0x9b, 0xb7, - 0x87, 0x43, 0x86, 0xc3, 0xc1, 0x79, 0xcf, 0xce, - 0x4e, 0x9b, 0x8e, 0x0e, 0x87, 0xa3, 0x66, 0xc5, - 0x90, 0xaf, 0xe8, 0x35, 0x23, 0xe0, 0x72, 0x76, - 0xbb, 0x78, 0x52, 0xcf, 0x5a, 0x7f, 0xff, 0xf6, - 0x9b, 0x9d, 0xfb, 0x9d, 0xd5, 0x9c, 0xdd, 0x8f, - 0x7a, 0xd6, 0xc7, 0xc3, 0xa2, 0x94, 0x56, 0x7c, - 0xc2, 0x7f, 0xaf, 0x5b, 0x60, 0xd5, 0xa1, 0xd3, - 0x98, 0x1c, 0x3a, 0x2d, 0x54, 0x36, 0x4a, 0x12, - 0x12, 0x4e, 0xa3, 0x59, 0xd5, 0xc7, 0x0e, 0x9e, - 0xbd, 0x63, 0xb1, 0xd1, 0x49, 0xbf, 0x11, 0xc9, - 0xff, 0xac, 0x02, 0xdc, 0xdd, 0xd7, 0x04, 0xe9, - 0xfc, 0x2c, 0x1e, 0xa6, 0xd8, 0xe9, 0xf7, 0xfb, - 0xef, 0x1e, 0x74, 0xfd, 0xf6, 0x55, 0x17, 0xc1, - 0xd3, 0x71, 0xc1, 0xd0, 0x87, 0xde, 0x05, 0x3c, - 0x17, 0x4f, 0xf5, 0xb9, 0x8e, 0x65, 0x2f, 0xa9, - 0x4b, 0x35, 0xd3, 0xfd, 0x77, 0xe5, 0xb8, 0xd4, - 0xd4, 0xe9, 0xff, 0xd6, 0x3e, 0x5e, 0xff, 0x4d, - 0x77, 0xed, 0x4e, 0x9f, 0x87, 0x3c, 0xe6, 0xc4, - 0xe9, 0xf9, 0x5f, 0xea, 0xb0, 0xee, 0x74, 0xee, - 0x38, 0xe0, 0xa9, 0xff, 0x98, 0x07, 0xdc, 0xed, - 0x6e, 0x32, 0x8e, 0x59, 0x7f, 0x1d, 0x75, 0x4d, - 0x6e, 0x43, 0x34, 0x52, 0xaa, 0x73, 0xa4, 0xcf, - 0x4b, 0x38, 0x50, 0x9f, 0xff, 0x67, 0x37, 0x63, - 0xdf, 0xb0, 0xb0, 0xd1, 0xf0, 0x3a, 0x76, 0x05, - 0x07, 0x90, 0x4a, 0x79, 0xf7, 0x4b, 0xcf, 0x20, - 0x94, 0xea, 0xff, 0x93, 0xc8, 0x25, 0x37, 0x1c, - 0x1e, 0x41, 0x28, 0x44, 0x53, 0x38, 0x51, 0xa2, - 0xfe, 0x0a, 0xa6, 0xcd, 0x16, 0x41, 0x22, 0xcd, - 0xf4, 0xfd, 0x7b, 0xbb, 0x1e, 0xe7, 0x4e, 0xc1, - 0xf1, 0x49, 0xcc, 0x8c, 0x67, 0x5a, 0x33, 0x9e, - 0xea, 0xbc, 0xd9, 0xd2, 0xbe, 0xb9, 0xf5, 0x78, - 0x8f, 0x3f, 0x9c, 0x7f, 0xb4, 0x6b, 0xf4, 0x15, - 0x3f, 0xbe, 0xff, 0x72, 0xbb, 0xf9, 0xd2, 0x79, - 0x53, 0xb0, 0x28, 0x2a, 0x0a, 0x86, 0x36, 0xa8, - 0x20, 0xa1, 0xb9, 0xe1, 0x6f, 0x10, 0xa5, 0x9a, - 0xc8, 0x64, 0x62, 0xdc, 0x25, 0x67, 0xbd, 0xc0, - 0x79, 0xd2, 0x51, 0xd3, 0x5b, 0xf9, 0x36, 0x2e, - 0x10, 0xcf, 0xb8, 0xb7, 0x3e, 0xa3, 0xa7, 0xe4, - 0x67, 0x1e, 0xde, 0x15, 0x2f, 0x9d, 0x3f, 0xd4, - 0x7a, 0xfe, 0x77, 0xee, 0x09, 0xd3, 0xf7, 0xd9, - 0x54, 0x5f, 0x07, 0x4f, 0xae, 0x85, 0x5a, 0x8e, - 0x9d, 0x5f, 0x81, 0xd0, 0x27, 0x85, 0xa2, 0x79, - 0xf8, 0x73, 0xcf, 0x3d, 0xa9, 0xd3, 0xf7, 0xfb, - 0xf6, 0x65, 0x2f, 0x94, 0xc3, 0x2c, 0x40, 0x0f, - 0x2a, 0xe1, 0xa2, 0x18, 0xb4, 0xf4, 0xfe, 0x52, - 0x31, 0x9c, 0xcf, 0x0d, 0xd1, 0xe9, 0xd0, 0xf5, - 0x7b, 0x16, 0x59, 0xb8, 0x7e, 0x8a, 0xbd, 0x65, - 0x00, 0xe8, 0xd6, 0x7f, 0xfd, 0x40, 0x05, 0xf3, - 0x8a, 0xde, 0x68, 0x59, 0xc3, 0xa7, 0xff, 0xff, - 0x7a, 0x1e, 0xb8, 0x39, 0xe5, 0x6b, 0x7d, 0xef, - 0xd0, 0xce, 0x5b, 0x6c, 0x74, 0xee, 0x38, 0xe0, - 0xa9, 0x9e, 0xc5, 0x2c, 0xbf, 0x86, 0x4c, 0x4a, - 0x85, 0x40, 0x84, 0xd4, 0xfd, 0x43, 0x8f, 0xeb, - 0x02, 0x83, 0xa7, 0xb7, 0x94, 0xf0, 0x74, 0xfa, - 0x80, 0xfb, 0x28, 0xe9, 0xff, 0xe6, 0xed, 0xa1, - 0x6f, 0x33, 0x5e, 0x76, 0x17, 0x9d, 0x1d, 0x6d, - 0x1a, 0x5f, 0x35, 0xc2, 0x3d, 0x13, 0xce, 0xed, - 0xcb, 0x87, 0x4e, 0x7f, 0xc4, 0xe9, 0xfb, 0x4c, - 0xe0, 0xfb, 0x53, 0xa2, 0x83, 0xe9, 0x79, 0x06, - 0x86, 0xe6, 0xca, 0x9d, 0x37, 0xae, 0xe1, 0xd0, - 0x26, 0xc7, 0xd1, 0x59, 0xb1, 0x6e, 0xf3, 0x7d, - 0x80, 0xee, 0x8d, 0xfa, 0xd6, 0x22, 0x69, 0x48, - 0x54, 0x43, 0xf5, 0xe4, 0x3c, 0xc7, 0x23, 0x72, - 0xcc, 0xfb, 0xc2, 0xed, 0x08, 0xe9, 0x2a, 0xfc, - 0x37, 0x9c, 0x8d, 0x34, 0x21, 0x1e, 0xa8, 0xcf, - 0xb7, 0x2f, 0xf7, 0x21, 0x0a, 0x24, 0x35, 0x95, - 0x57, 0xa9, 0xe4, 0xcf, 0x63, 0x75, 0xea, 0x8c, - 0x1f, 0xb4, 0x2a, 0xdd, 0x98, 0x67, 0xff, 0x2d, - 0x58, 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x28, 0xa9, - 0xfc, 0xbb, 0x04, 0xcc, 0x43, 0x45, 0xd1, 0x3f, - 0xf2, 0xf1, 0xeb, 0xb0, 0x4c, 0xc4, 0x34, 0x49, - 0x73, 0xf9, 0x76, 0x09, 0x98, 0x86, 0x8b, 0xca, - 0x19, 0xd1, 0xf7, 0xd0, 0x4e, 0xf3, 0xbb, 0x3b, - 0x45, 0x27, 0x0e, 0xd4, 0x77, 0xb8, 0x63, 0x0d, - 0x7d, 0xc5, 0x58, 0xf3, 0xb4, 0xa5, 0xe9, 0xdb, - 0xa4, 0xc9, 0xff, 0xcb, 0x56, 0x3d, 0x76, 0x09, - 0x98, 0x86, 0x89, 0x66, 0x6f, 0x76, 0x74, 0xf2, - 0x66, 0x21, 0xa2, 0x33, 0x9f, 0xbe, 0xca, 0xa2, - 0xf8, 0x3a, 0x61, 0x79, 0xd2, 0x51, 0xd3, 0xef, - 0x86, 0xf1, 0x60, 0x7a, 0x6a, 0x2e, 0xec, 0x2b, - 0x3f, 0x63, 0xfe, 0x18, 0x07, 0x4f, 0xfd, 0x5f, - 0xfb, 0x5b, 0x1f, 0x5f, 0x75, 0x3a, 0x75, 0x5a, - 0x93, 0xa0, 0x13, 0x55, 0x53, 0xf0, 0xa6, 0x54, - 0xab, 0x48, 0xb3, 0xff, 0x6b, 0xe1, 0x9e, 0x74, - 0xa5, 0xec, 0xa3, 0xa7, 0xc2, 0xcf, 0xae, 0x1d, - 0x1f, 0x3e, 0xc7, 0x48, 0xf3, 0xb3, 0xb3, 0xce, - 0x9f, 0xfe, 0xf7, 0x55, 0xa5, 0xec, 0x3e, 0x57, - 0xa7, 0xa2, 0x74, 0xe6, 0xd3, 0x1d, 0x2f, 0xf2, - 0x7d, 0xee, 0x95, 0x67, 0xfe, 0xb5, 0x6b, 0xfc, - 0x55, 0xb7, 0x9d, 0x73, 0xa7, 0xfd, 0xb6, 0xfe, - 0xfe, 0xc2, 0xe7, 0xa7, 0x4f, 0xeb, 0xab, 0x6a, - 0xbb, 0xf9, 0xd2, 0x5b, 0xbc, 0xae, 0xd6, 0xe3, - 0x6c, 0x72, 0x16, 0xbb, 0x24, 0xc8, 0x46, 0x09, - 0x5d, 0x52, 0x3a, 0x8f, 0xe7, 0xff, 0x2d, 0x58, - 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x26, 0x99, 0xff, - 0xcb, 0x56, 0x3d, 0x76, 0x09, 0x98, 0x86, 0x89, - 0xc6, 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, 0x82, 0x66, - 0x21, 0xa2, 0x81, 0x9f, 0x02, 0x66, 0x21, 0xa2, - 0xe0, 0x99, 0xbe, 0x74, 0xfe, 0x17, 0xb7, 0xf9, - 0xb5, 0x1d, 0x25, 0xd9, 0xfb, 0xec, 0xc3, 0xd1, - 0x59, 0xfd, 0xf5, 0xf6, 0x6f, 0x2f, 0x83, 0xa7, - 0xf9, 0xeb, 0xb0, 0x4c, 0xc4, 0x34, 0x49, 0x32, - 0x5e, 0xcf, 0xdf, 0x0d, 0xa2, 0x85, 0xed, 0x67, - 0xce, 0x03, 0xa4, 0x23, 0xdc, 0x52, 0xf1, 0x4a, - 0xb0, 0xc9, 0xd4, 0x2b, 0x27, 0xfd, 0xdf, 0x17, - 0x60, 0x99, 0x88, 0x68, 0xb5, 0x27, 0xfd, 0x8f, - 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x55, 0x83, 0xa4, - 0xbe, 0xe8, 0x98, 0x52, 0x43, 0xb2, 0x34, 0xfe, - 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x29, 0x9f, 0xcb, - 0xb0, 0x4c, 0xc4, 0x34, 0x46, 0x93, 0x7b, 0xb3, - 0xa7, 0x93, 0x31, 0x0d, 0x14, 0xfc, 0xda, 0x63, - 0xa0, 0x0f, 0x03, 0x45, 0x73, 0xff, 0x7b, 0xa0, - 0xf5, 0xca, 0xa6, 0x39, 0x53, 0xa7, 0xfe, 0xb7, - 0x3d, 0x1a, 0x2a, 0x98, 0xe5, 0x4e, 0x92, 0xdd, - 0xe4, 0xc1, 0x6d, 0x5c, 0x48, 0x74, 0x8f, 0x3f, - 0xf9, 0x6a, 0xc7, 0xae, 0xc1, 0x33, 0x10, 0xd1, - 0x35, 0x4f, 0xe5, 0xd8, 0x26, 0x62, 0x1a, 0x2b, - 0xb9, 0xe4, 0xcc, 0x43, 0x45, 0x7d, 0x3b, 0x8e, - 0x38, 0x2a, 0x42, 0x52, 0xcb, 0xf8, 0x03, 0xe8, - 0x52, 0x54, 0xe7, 0xb5, 0x27, 0x4f, 0xfa, 0xf7, - 0xc6, 0x6a, 0xad, 0x74, 0x1d, 0x2d, 0x1d, 0x3f, - 0xdf, 0x0b, 0xa3, 0xef, 0xbe, 0x4e, 0x80, 0x3c, - 0x9c, 0x10, 0x92, 0xed, 0x1c, 0x8e, 0x10, 0x88, - 0xe5, 0x61, 0x0f, 0x3f, 0xf9, 0x6a, 0xc7, 0xae, - 0xc1, 0x33, 0x10, 0xd1, 0x3d, 0xcf, 0xe5, 0xd8, - 0x26, 0x62, 0x1a, 0x2e, 0x19, 0xff, 0x97, 0x8f, - 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x4f, 0x86, 0x5c, - 0xf6, 0xa0, 0xed, 0xe7, 0x7d, 0xe3, 0x40, 0x44, - 0x77, 0x14, 0x82, 0x38, 0x7d, 0xa3, 0xd5, 0x49, - 0xd1, 0xdc, 0xfe, 0x5d, 0x82, 0x66, 0x21, 0xa2, - 0x2a, 0x9f, 0xcb, 0xb0, 0x4c, 0xc4, 0x34, 0x53, - 0x33, 0xff, 0x96, 0xac, 0x7a, 0xec, 0x13, 0x31, - 0x0d, 0x13, 0x3c, 0xff, 0xe5, 0xab, 0x1e, 0xbb, - 0x04, 0xcc, 0x43, 0x45, 0x1b, 0x14, 0x26, 0x35, - 0xc9, 0xdf, 0x73, 0xbd, 0x29, 0x4f, 0xfc, 0xbc, - 0x7a, 0xec, 0x13, 0x31, 0x0d, 0x11, 0xd4, 0xde, - 0xec, 0xe9, 0xfb, 0xf6, 0x3c, 0xdd, 0x07, 0x4f, - 0x81, 0x33, 0x10, 0xd1, 0x4d, 0x4f, 0xfe, 0xdf, - 0xf5, 0x5c, 0xa6, 0xdc, 0x6d, 0xd4, 0xe9, 0xff, - 0x9f, 0xbf, 0x8d, 0x15, 0xf5, 0x81, 0xc3, 0xa6, - 0x6e, 0xe7, 0x4f, 0xdf, 0x65, 0x51, 0x7c, 0x1d, - 0x3f, 0xfd, 0x7a, 0xdd, 0xbc, 0x30, 0x75, 0xbc, - 0x79, 0xd3, 0x37, 0x87, 0x4f, 0xec, 0xa5, 0x93, - 0xe8, 0xb0, 0x44, 0x80, 0x97, 0x76, 0x4c, 0x8d, - 0xa3, 0xfa, 0xb0, 0xa7, 0x92, 0xdd, 0xe5, 0x45, - 0x7c, 0x8b, 0xd9, 0x6a, 0x18, 0x52, 0x97, 0xa8, - 0xd1, 0x27, 0xc0, 0x99, 0x88, 0x68, 0xaa, 0xa7, - 0xfd, 0x8f, 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x6d, - 0x92, 0xec, 0xfd, 0x94, 0x61, 0x3f, 0x97, 0x60, - 0x99, 0x88, 0x68, 0xaf, 0xe7, 0xf2, 0xec, 0x13, - 0x31, 0x0d, 0x16, 0x34, 0xf8, 0x13, 0x31, 0x0d, - 0x16, 0xac, 0xff, 0xb1, 0xeb, 0xb0, 0x4c, 0xc4, - 0x34, 0x50, 0x52, 0x5d, 0x9f, 0xb2, 0x8c, 0x27, - 0xc0, 0x99, 0x88, 0x68, 0xb8, 0xa7, 0xb1, 0xdb, - 0xf4, 0x1d, 0x3c, 0xec, 0xed, 0xf4, 0x3a, 0x7f, - 0x32, 0xb1, 0xd3, 0x03, 0xb1, 0xd2, 0x5d, 0xa2, - 0xc7, 0x66, 0x18, 0x4b, 0xa2, 0x79, 0xf0, 0x26, - 0x62, 0x1a, 0x2e, 0x99, 0xf3, 0x0e, 0x72, 0xc7, - 0x49, 0x76, 0x7a, 0xbf, 0x30, 0x9f, 0xff, 0x94, - 0xbb, 0x7b, 0x07, 0x9d, 0x2b, 0xb6, 0x56, 0x09, - 0xd3, 0xff, 0xf6, 0xc7, 0xdc, 0xeb, 0xdb, 0xf7, - 0x7d, 0xef, 0x97, 0x3d, 0x3a, 0x64, 0xb3, 0xa1, - 0x8f, 0xdf, 0xbb, 0x1c, 0xff, 0x9f, 0x60, 0x18, - 0xfa, 0x2f, 0x83, 0xa7, 0x0e, 0x2c, 0x0f, 0x83, - 0x44, 0x73, 0xfe, 0x06, 0xa7, 0x79, 0x5d, 0x37, - 0x07, 0x4d, 0xee, 0xce, 0x9f, 0x0d, 0xef, 0x34, - 0x74, 0xfc, 0xfc, 0xb7, 0x4d, 0xc9, 0xd0, 0xef, - 0x9e, 0x9f, 0x5a, 0x89, 0x67, 0xef, 0x31, 0xc7, - 0xff, 0x47, 0x4f, 0xff, 0xf3, 0x73, 0xbb, 0xa7, - 0x43, 0x9b, 0xf3, 0x2b, 0x5c, 0x04, 0x3a, 0x7f, - 0x5d, 0xdf, 0x7e, 0xf8, 0xf3, 0xa3, 0xba, 0x26, - 0x74, 0xcb, 0x3f, 0xff, 0xdb, 0x61, 0xf6, 0xbb, - 0xfd, 0x75, 0xbb, 0xe7, 0xf5, 0xb1, 0x3a, 0x79, - 0x33, 0x10, 0xd1, 0x26, 0x4f, 0x93, 0xad, 0x3a, - 0xce, 0xb6, 0xef, 0x9d, 0x3f, 0xae, 0x9d, 0x6b, - 0x1f, 0x53, 0xa1, 0x8f, 0xc4, 0x0f, 0xa1, 0xe9, - 0x91, 0x83, 0x3a, 0xa1, 0x39, 0x3f, 0x73, 0xe3, - 0xbf, 0x5f, 0x3a, 0x8e, 0x9f, 0xfd, 0xbf, 0xea, - 0x94, 0xf8, 0x55, 0xc6, 0xc3, 0xa7, 0xd7, 0xaf, - 0xab, 0x0e, 0x9f, 0xff, 0x62, 0x03, 0x6c, 0x6f, - 0x56, 0xbe, 0x38, 0xe0, 0xa8, 0x79, 0xfd, 0x68, - 0x9a, 0x7e, 0x44, 0xf5, 0x05, 0x8e, 0x9f, 0xfd, - 0xe8, 0xe6, 0x98, 0x2b, 0xb6, 0x1d, 0x1d, 0x3b, - 0x8e, 0x38, 0x2a, 0x7e, 0x0c, 0xa1, 0x5f, 0xa9, - 0x4b, 0x2f, 0xe7, 0xd6, 0xa0, 0xbe, 0xb9, 0xd3, - 0xef, 0xea, 0x8b, 0xe0, 0xe9, 0xfe, 0x64, 0xd8, - 0xfb, 0xa6, 0xa9, 0xd3, 0xff, 0xed, 0x6e, 0xdf, - 0xd1, 0x37, 0xfd, 0x52, 0x9f, 0x03, 0xa0, 0x11, - 0x6e, 0xa2, 0x91, 0x37, 0x9f, 0xeb, 0xcf, 0x3a, - 0x5f, 0x38, 0xf3, 0xa7, 0xff, 0x65, 0x1b, 0xfb, - 0x0d, 0xb9, 0xf0, 0xf9, 0xd1, 0x68, 0xb1, 0xd1, - 0x77, 0x07, 0x53, 0xe1, 0xbd, 0xe6, 0x8e, 0x9f, - 0xf3, 0xd8, 0x68, 0xec, 0x03, 0xeb, 0xce, 0x8e, - 0xb9, 0xf2, 0xb8, 0x4b, 0x3d, 0xaa, 0x2f, 0x93, - 0xa7, 0xfb, 0xfd, 0xfb, 0x07, 0x8a, 0xfd, 0x4e, - 0x87, 0x0f, 0x87, 0xa8, 0x8e, 0x77, 0x1c, 0x70, - 0x74, 0xff, 0xfa, 0xd5, 0xa1, 0x6f, 0x2f, 0x9a, - 0xda, 0x99, 0x0a, 0x59, 0x7f, 0x16, 0x99, 0x7f, - 0xe1, 0x11, 0xb4, 0x59, 0x7c, 0xe9, 0xfb, 0x6d, - 0xd1, 0x3f, 0x41, 0xd3, 0xf0, 0x60, 0x0b, 0x3c, - 0xe8, 0x77, 0x47, 0xd1, 0xc8, 0x80, 0x17, 0xcc, - 0xf5, 0xbb, 0xcc, 0x8f, 0x0e, 0xb1, 0xa9, 0x8b, - 0xdf, 0x0c, 0x8b, 0x8d, 0x23, 0xb9, 0xaa, 0x1c, - 0xd3, 0x0c, 0x4f, 0x91, 0x38, 0x55, 0x8c, 0xc2, - 0x79, 0x58, 0xe4, 0x75, 0x1e, 0x27, 0x68, 0x4e, - 0xcf, 0xfe, 0x0b, 0xe3, 0x9d, 0xdb, 0x83, 0x60, - 0xf3, 0xa7, 0x05, 0xf5, 0xce, 0x95, 0x81, 0xf3, - 0xa9, 0x26, 0x7f, 0xeb, 0xd8, 0xb5, 0x1d, 0xb7, - 0xbc, 0xeb, 0x9d, 0x3f, 0x62, 0x2f, 0x8e, 0x38, - 0x3a, 0x4b, 0xb6, 0x64, 0xf2, 0x46, 0x64, 0x06, - 0x39, 0x49, 0x2e, 0x18, 0xdb, 0xea, 0x4c, 0xe9, - 0x26, 0x1e, 0xd9, 0x8e, 0xf3, 0x29, 0xde, 0x98, - 0x70, 0x01, 0x3a, 0x8e, 0xfc, 0x85, 0x8d, 0x61, - 0xb1, 0xa8, 0x4b, 0x7b, 0x4c, 0xc5, 0x9f, 0xcb, - 0xb0, 0x4c, 0xc4, 0x34, 0x46, 0xb3, 0xe0, 0x4c, - 0xc4, 0x34, 0x54, 0xb3, 0x62, 0x1a, 0x21, 0xa9, - 0x2e, 0xcf, 0x47, 0x0c, 0x27, 0xfe, 0x5e, 0x3d, - 0x76, 0x09, 0x98, 0x86, 0x88, 0xfa, 0x7f, 0x2e, - 0xc1, 0x33, 0x10, 0xd1, 0x63, 0xce, 0xeb, 0x45, - 0x77, 0x3a, 0x7e, 0x77, 0xc6, 0xf7, 0x9a, 0x3a, - 0x7f, 0x87, 0x3c, 0xae, 0x6b, 0x58, 0x74, 0xf7, - 0x8a, 0xf8, 0x1d, 0x3f, 0xff, 0xcc, 0x03, 0x7c, - 0xde, 0xf7, 0xf4, 0xdf, 0xf5, 0x5c, 0xa4, 0xe8, - 0xfa, 0x21, 0xf6, 0x45, 0x3b, 0x31, 0x0d, 0x16, - 0x84, 0xff, 0xb3, 0x87, 0x64, 0xc0, 0xa2, 0xf8, - 0x3a, 0x10, 0xf9, 0xc0, 0x9a, 0x7f, 0xff, 0xfb, - 0xe1, 0xbc, 0x1f, 0xb6, 0xbf, 0xb6, 0xae, 0xee, - 0xa1, 0x69, 0x7a, 0x3a, 0x01, 0x13, 0x1b, 0x20, - 0x9f, 0x9d, 0x76, 0xd0, 0xb7, 0x87, 0x4f, 0x9b, - 0x57, 0xb6, 0x3a, 0x7f, 0xfa, 0xf5, 0x5b, 0x73, - 0x6c, 0xea, 0xf7, 0xb6, 0x3a, 0x28, 0x3f, 0x51, - 0x25, 0x86, 0x46, 0x45, 0xc2, 0x9a, 0x7f, 0xde, - 0x32, 0x6f, 0xee, 0x66, 0x50, 0x74, 0xff, 0x7f, - 0xd1, 0x78, 0x35, 0xf2, 0x74, 0xff, 0xff, 0x6e, - 0xde, 0x9b, 0xfe, 0xda, 0xc1, 0xfa, 0x16, 0x55, - 0x4e, 0x95, 0xd5, 0x13, 0x7a, 0x38, 0x9f, 0x6b, - 0x78, 0x3d, 0xce, 0x9f, 0xe1, 0xf6, 0x8e, 0x77, - 0x62, 0xc7, 0x4c, 0x37, 0x67, 0xc2, 0x85, 0x13, - 0xfa, 0xf6, 0xe7, 0xf7, 0xf5, 0x1d, 0x3f, 0x9f, - 0x61, 0x51, 0x6a, 0x0e, 0x9d, 0x7b, 0xc3, 0xa7, - 0xce, 0x73, 0xef, 0xa2, 0x74, 0x72, 0x78, 0xb8, - 0x35, 0x3f, 0xd7, 0x7c, 0x5a, 0x25, 0xf0, 0x74, - 0x5a, 0x60, 0x54, 0x9a, 0x63, 0xb5, 0x48, 0xa7, - 0xaf, 0x79, 0xa3, 0xa7, 0xef, 0x8f, 0xaf, 0xba, - 0x9d, 0x3f, 0xff, 0xdf, 0x1f, 0x5f, 0x75, 0xe9, - 0x7a, 0x6a, 0x7c, 0xcd, 0xef, 0xe7, 0x47, 0x74, - 0x4b, 0xe8, 0xb6, 0x4b, 0x77, 0x97, 0xbb, 0x7a, - 0xc2, 0x56, 0x30, 0xe6, 0x17, 0xd7, 0x19, 0x16, - 0xe1, 0xd5, 0xe1, 0x30, 0xc3, 0x6a, 0xb0, 0x89, - 0xd4, 0x65, 0x9d, 0x47, 0xbd, 0xa1, 0x6f, 0x3f, - 0x3b, 0x7f, 0x91, 0x67, 0x0e, 0x9e, 0xbd, 0xe6, - 0x8e, 0x93, 0xbf, 0x67, 0xa2, 0x26, 0x33, 0xe0, - 0x4c, 0xc4, 0x34, 0x5a, 0xd3, 0xfe, 0xc7, 0xae, - 0xc1, 0x33, 0x10, 0xd1, 0x41, 0xc9, 0x7d, 0x62, - 0x28, 0x6c, 0xad, 0x46, 0x13, 0xff, 0x96, 0xac, - 0x7a, 0xec, 0x13, 0x31, 0x0d, 0x14, 0x5c, 0xfe, - 0x5d, 0x82, 0x66, 0x21, 0xa2, 0xea, 0x87, 0xb2, - 0xb0, 0x12, 0x11, 0x9f, 0x26, 0x52, 0x66, 0xe7, - 0xca, 0x3c, 0x8f, 0x4e, 0xa7, 0x5a, 0x52, 0x9f, - 0x02, 0x66, 0x21, 0xa2, 0x21, 0x9d, 0xbb, 0xe4, - 0xe9, 0x2e, 0xcf, 0x32, 0x93, 0x09, 0xfc, 0xbb, - 0x04, 0xcc, 0x43, 0x44, 0x6d, 0x3f, 0x97, 0x60, - 0x99, 0x88, 0x68, 0xa6, 0xe7, 0xf2, 0xec, 0x13, - 0x31, 0x0d, 0x15, 0x04, 0xfe, 0x5d, 0x82, 0x66, - 0x21, 0xa2, 0xa6, 0x9f, 0x02, 0x66, 0x21, 0xa2, - 0xb0, 0x9f, 0x7f, 0x8e, 0x7d, 0x03, 0xa7, 0xf9, - 0xeb, 0xb0, 0x4c, 0xc4, 0x34, 0x47, 0xf3, 0xad, - 0xa8, 0x3a, 0x4b, 0xb4, 0x5b, 0x21, 0x86, 0x15, - 0x0a, 0x0c, 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0x04, - 0xcc, 0x43, 0x44, 0xdf, 0x3f, 0xf2, 0xb1, 0xeb, - 0xb0, 0x4c, 0xc4, 0x34, 0x4f, 0xd3, 0xee, 0xb6, - 0xef, 0xf5, 0x5d, 0x27, 0x4b, 0x67, 0x43, 0xbb, - 0x3c, 0x6f, 0x4d, 0xa7, 0xdd, 0x3b, 0x86, 0x21, - 0xd3, 0xee, 0xb1, 0xdd, 0x79, 0xdd, 0x8e, 0x9f, - 0xfe, 0x66, 0x66, 0x66, 0x66, 0x66, 0xa6, 0xa7, - 0x4f, 0x83, 0xf4, 0x62, 0x8a, 0x9b, 0x8e, 0x0a, - 0x8b, 0x37, 0xfc, 0x13, 0xcb, 0xd2, 0x96, 0x68, - 0x61, 0x91, 0x95, 0x58, 0x54, 0xcf, 0xff, 0xd6, - 0xaa, 0xe8, 0x32, 0x8e, 0x76, 0xd5, 0xd7, 0xbb, - 0x3a, 0x7d, 0x89, 0xbf, 0x81, 0xd3, 0xff, 0xff, - 0x87, 0x3b, 0xfc, 0x19, 0xfd, 0x37, 0xf5, 0x72, - 0xdd, 0x3a, 0xbd, 0xdf, 0xc0, 0xe8, 0xe5, 0x30, - 0x30, 0x5d, 0xd9, 0x2c, 0xff, 0xf9, 0xd9, 0xa9, - 0x7e, 0x0f, 0x9d, 0x3c, 0xf8, 0x7f, 0xb9, 0xd3, - 0xd4, 0x2b, 0xef, 0x3a, 0x7d, 0x51, 0xf7, 0x1e, - 0x74, 0xfe, 0xdb, 0x29, 0x7e, 0x78, 0xc7, 0x48, - 0x18, 0xff, 0xac, 0x8f, 0xe4, 0xf3, 0xfe, 0x6a, - 0x79, 0xec, 0xdd, 0x7d, 0xfb, 0x53, 0xa7, 0x79, - 0x5b, 0x3a, 0x7f, 0xee, 0x5b, 0x59, 0x5b, 0xde, - 0xfe, 0xa3, 0xa7, 0x6b, 0xee, 0x1d, 0x0c, 0x7c, - 0x35, 0x44, 0x86, 0x56, 0x9d, 0xf8, 0xca, 0x9c, - 0x31, 0x08, 0x6e, 0x28, 0xc8, 0x51, 0xf4, 0xfb, - 0x39, 0xce, 0xca, 0x3a, 0x7f, 0xaf, 0x55, 0xbd, - 0x6e, 0xfc, 0x3a, 0x30, 0xf5, 0xc4, 0x7e, 0x6c, - 0x13, 0xa0, 0x0d, 0xa2, 0x88, 0x27, 0x71, 0xc7, - 0x07, 0x4f, 0x50, 0x3f, 0x62, 0x96, 0x5f, 0xcd, - 0x4b, 0xce, 0x9b, 0xe8, 0x74, 0xa9, 0x63, 0x59, - 0xa1, 0x78, 0x64, 0x61, 0x6c, 0xff, 0xd5, 0xc9, - 0xff, 0xa8, 0xf7, 0xcb, 0x1f, 0x5c, 0x6d, 0x61, - 0xd3, 0xff, 0x36, 0xfb, 0x73, 0xaf, 0xdb, 0x8c, - 0xa3, 0xa7, 0x9b, 0x55, 0x43, 0x44, 0x1d, 0x3f, - 0x66, 0xdb, 0xaf, 0xeb, 0xce, 0x80, 0x47, 0x62, - 0x91, 0xf4, 0x8e, 0xe8, 0xb6, 0x60, 0xe4, 0xe9, - 0xb8, 0xe0, 0xe8, 0x79, 0xae, 0xe0, 0x5a, 0x7a, - 0xad, 0xf7, 0x45, 0x2c, 0xd1, 0x4f, 0xab, 0xdb, - 0x9f, 0x2a, 0x74, 0x7c, 0xf7, 0xfb, 0x19, 0xce, - 0xe3, 0x8e, 0x0a, 0x82, 0x96, 0x5f, 0xcf, 0x7f, - 0x8f, 0xb8, 0x54, 0x21, 0xbd, 0xf8, 0xcc, 0x7d, - 0x38, 0xdd, 0xc3, 0xb4, 0x61, 0x01, 0x38, 0x7f, - 0x53, 0xa7, 0xb9, 0xc1, 0xf0, 0xe9, 0xff, 0x98, - 0x7c, 0x16, 0xa5, 0xc6, 0x1f, 0x0e, 0x8f, 0xa2, - 0x07, 0xc1, 0xba, 0x91, 0x4f, 0x9a, 0xc3, 0x7f, - 0x3a, 0x7b, 0x9b, 0x57, 0x5c, 0xe8, 0x70, 0xf2, - 0xdd, 0x12, 0xcf, 0xda, 0xb7, 0x05, 0x94, 0x78, - 0x80, 0xa7, 0xd8, 0x3c, 0xed, 0x8d, 0x10, 0x12, - 0xcd, 0xcc, 0xff, 0x30, 0x51, 0xd2, 0xdc, 0xfa, - 0x8e, 0x9e, 0x53, 0x5a, 0x8e, 0x9f, 0x37, 0x9f, - 0xa6, 0xa7, 0x4f, 0xe0, 0x72, 0xbf, 0x1d, 0x7c, - 0xe9, 0xea, 0x7c, 0x06, 0x2a, 0x6e, 0x38, 0x2a, - 0x18, 0xdd, 0x70, 0x45, 0x3f, 0x60, 0x3d, 0xe3, - 0xf2, 0x96, 0x68, 0x61, 0x95, 0x35, 0x5b, 0xe7, - 0xd7, 0xb6, 0x87, 0x87, 0x62, 0x41, 0xa2, 0x9f, - 0x61, 0x1d, 0x3e, 0xf7, 0x5e, 0xe7, 0x63, 0x44, - 0x0f, 0x3f, 0xed, 0xfb, 0x43, 0x74, 0x6d, 0x37, - 0x27, 0x4e, 0xc0, 0xa0, 0xe9, 0xb8, 0xe0, 0xe9, - 0xfc, 0x1f, 0xb7, 0x5d, 0x9e, 0xb4, 0x36, 0x7c, - 0x0d, 0xc7, 0x28, 0xc2, 0x07, 0x59, 0xff, 0x86, - 0xfb, 0xef, 0x1f, 0xdb, 0x29, 0x63, 0xa1, 0x8f, - 0xa6, 0xc8, 0xe7, 0xff, 0x5a, 0x95, 0x8f, 0xb0, - 0x4c, 0xc4, 0x34, 0x43, 0x11, 0xb3, 0xf1, 0x12, - 0x09, 0xf0, 0x26, 0x62, 0x1a, 0x20, 0xa9, 0xdb, - 0x65, 0x1d, 0x16, 0x79, 0x7f, 0x30, 0x9e, 0xd5, - 0x5b, 0xc2, 0xa7, 0x60, 0x50, 0x54, 0xf7, 0xa3, - 0x9d, 0xca, 0x9f, 0xdf, 0xa2, 0xf5, 0x56, 0xf0, - 0xa8, 0x2a, 0x7e, 0xb4, 0x6d, 0xb2, 0x8a, 0x9b, - 0x8e, 0x0a, 0x9f, 0x85, 0x86, 0x8f, 0x81, 0x51, - 0x69, 0x85, 0xa1, 0x12, 0x86, 0xf6, 0x47, 0xe1, - 0xa0, 0x85, 0x70, 0x55, 0xd8, 0x62, 0x6f, 0x81, - 0x4b, 0x3f, 0x39, 0x63, 0xd3, 0xc5, 0xdc, 0x73, - 0xf3, 0xfe, 0x67, 0xe0, 0xdd, 0x41, 0xaa, 0x74, - 0xff, 0x6b, 0x6c, 0xeb, 0x96, 0xf1, 0x8e, 0x9f, - 0xe6, 0xa5, 0xfd, 0x4c, 0x96, 0xa3, 0xa1, 0x8f, - 0xd7, 0x67, 0x73, 0xff, 0xf3, 0x99, 0x8f, 0xcd, - 0xf4, 0xba, 0x3d, 0xd7, 0xb9, 0xd8, 0xd1, 0x7d, - 0xcf, 0xbf, 0xa1, 0xb7, 0x9d, 0x3f, 0xe1, 0xfb, - 0xf5, 0xbb, 0x0f, 0xd4, 0xe9, 0xfd, 0xaf, 0x3b, - 0x0b, 0xf7, 0x67, 0x88, 0x06, 0x76, 0x03, 0xcf, - 0x10, 0x0c, 0x59, 0xf4, 0xfa, 0x85, 0x36, 0x3c, - 0xf1, 0x00, 0xcf, 0x60, 0xd2, 0xf3, 0xc4, 0x03, - 0x3f, 0xbe, 0x9b, 0xbf, 0x3c, 0x63, 0xc4, 0x03, - 0x3b, 0xe3, 0xc9, 0xe2, 0x01, 0x8e, 0x51, 0x72, - 0xa2, 0x2d, 0x97, 0x3a, 0x40, 0x9c, 0x0d, 0xa3, - 0xc4, 0x03, 0x07, 0x88, 0x06, 0x66, 0x51, 0xe2, - 0x01, 0x8e, 0x4d, 0xcf, 0xc5, 0xe7, 0xbe, 0xae, - 0x58, 0xf1, 0x00, 0xce, 0xd6, 0x21, 0xe2, 0x01, - 0x9f, 0xf0, 0xe3, 0xd7, 0xbf, 0xa6, 0x01, 0xe2, - 0x01, 0x9b, 0x39, 0x3c, 0x40, 0x33, 0xf8, 0x73, - 0x8a, 0xd5, 0xbc, 0x3c, 0x40, 0x33, 0xef, 0xf7, - 0xc1, 0xf0, 0xf1, 0x00, 0xcd, 0xfa, 0x9e, 0x20, - 0x18, 0x03, 0xd9, 0xd1, 0xb4, 0xfb, 0x42, 0xd4, - 0xbc, 0xd1, 0x00, 0xcd, 0xe3, 0x1e, 0x20, 0x15, - 0x9b, 0x49, 0xf7, 0xd9, 0x59, 0xc9, 0xe2, 0x01, - 0x9e, 0xf7, 0x05, 0x0f, 0x10, 0x0c, 0xe6, 0x04, - 0x3c, 0x40, 0x33, 0xfe, 0xba, 0x6b, 0xcb, 0x58, - 0xf9, 0x53, 0xc4, 0x03, 0x3e, 0xf7, 0x1e, 0xf6, - 0x3c, 0x40, 0x31, 0x68, 0x80, 0xda, 0x64, 0xc1, - 0xe1, 0xe2, 0x01, 0x87, 0xaa, 0x90, 0xe4, 0x8e, - 0xe1, 0x33, 0xf5, 0x5d, 0x99, 0xf8, 0x69, 0x52, - 0xdd, 0x42, 0x9b, 0xd2, 0x29, 0xf5, 0xea, 0xb9, - 0x49, 0xe2, 0x01, 0x9f, 0xdc, 0xb2, 0x38, 0x0d, - 0xa3, 0xc4, 0x03, 0xc9, 0xb4, 0x9c, 0x0d, 0xc1, - 0xe2, 0x01, 0x84, 0x3f, 0x80, 0x50, 0x9e, 0xf8, - 0xbe, 0xa7, 0x88, 0x06, 0x7e, 0xc7, 0x1f, 0x74, - 0xbc, 0xf1, 0x00, 0xc5, 0xa2, 0x27, 0xc2, 0x0f, - 0x4b, 0xa7, 0xfb, 0x6d, 0x55, 0xd7, 0xd0, 0xf0, - 0xf1, 0x00, 0xcb, 0xe7, 0x88, 0x06, 0x6c, 0xa3, - 0x93, 0xe4, 0xda, 0x3c, 0xc1, 0xe1, 0xe2, 0x01, - 0x9f, 0x66, 0xab, 0xfa, 0x4f, 0x10, 0x0c, 0xfd, - 0xf1, 0xf5, 0xf7, 0x53, 0xc4, 0x03, 0x0c, 0x89, - 0x21, 0x23, 0xd1, 0xac, 0x72, 0xc8, 0x10, 0xb8, - 0x6d, 0xb8, 0x80, 0x0c, 0x1b, 0x22, 0xc2, 0xff, - 0x09, 0xeb, 0x2b, 0x63, 0x51, 0xe0, 0xf5, 0x42, - 0x57, 0xb4, 0x30, 0x67, 0x66, 0x21, 0xa2, 0x01, - 0x5a, 0x2f, 0x67, 0xbb, 0xbb, 0xae, 0x54, 0x74, - 0xde, 0x31, 0x52, 0xee, 0x54, 0xed, 0xb5, 0x07, - 0x4d, 0xc7, 0x05, 0x47, 0xcf, 0x73, 0xae, 0x2c, - 0xe0, 0x97, 0x03, 0x93, 0x95, 0xfa, 0x94, 0xb3, - 0xc2, 0x8a, 0x19, 0x58, 0xef, 0x26, 0x4a, 0x4b, - 0x9f, 0xce, 0x3c, 0x86, 0x4c, 0xfe, 0xfe, 0xbb, - 0x3a, 0x74, 0xd5, 0x3a, 0x7e, 0x07, 0x1e, 0xc1, - 0x41, 0xd3, 0xfe, 0x7d, 0x7a, 0x0d, 0xa9, 0x83, - 0xb9, 0xd3, 0xff, 0x06, 0xf2, 0xde, 0xc1, 0xe7, - 0x65, 0x1d, 0x3f, 0x76, 0xe0, 0x3f, 0x7b, 0x2a, - 0x79, 0xcd, 0xe3, 0x87, 0x4f, 0xad, 0xc7, 0xb5, - 0x27, 0x4f, 0x58, 0xb3, 0xca, 0x80, 0x3e, 0xa1, - 0x23, 0x76, 0x28, 0x86, 0x4d, 0xea, 0xcb, 0x7e, - 0x81, 0xb4, 0x4c, 0x84, 0xcc, 0xf7, 0xc7, 0x55, - 0x3a, 0x77, 0xae, 0xe5, 0x4e, 0x9f, 0xfb, 0xc5, - 0x5a, 0x6f, 0xfc, 0xef, 0xde, 0xe7, 0x4f, 0xee, - 0x5a, 0x9a, 0xdd, 0x3a, 0x3a, 0x7f, 0x9b, 0x5f, - 0x4f, 0xf2, 0xda, 0x3a, 0x6d, 0x56, 0xcf, 0xb4, - 0x0d, 0x67, 0xf3, 0xee, 0xbd, 0xab, 0xab, 0x3a, - 0x19, 0x33, 0x8f, 0x91, 0x64, 0x2d, 0xbd, 0x2c, - 0x9f, 0x63, 0xae, 0x79, 0x63, 0xa6, 0xad, 0x4e, - 0x9d, 0xc7, 0x1c, 0x1d, 0x37, 0x98, 0x52, 0xcb, - 0xf8, 0x03, 0xda, 0xa9, 0xac, 0xff, 0xae, 0xa3, - 0x9d, 0xdc, 0x1f, 0xb8, 0x74, 0xec, 0xf2, 0xca, - 0x87, 0xa6, 0x00, 0xa8, 0x42, 0x6c, 0x87, 0xa9, - 0x02, 0x7f, 0x68, 0x6e, 0x9f, 0x3b, 0x3c, 0xe9, - 0xfe, 0x1b, 0x75, 0x6b, 0xe3, 0x8e, 0x0a, 0x9c, - 0xac, 0xd1, 0xd1, 0xb3, 0xd7, 0x74, 0x79, 0x3e, - 0xb7, 0x1e, 0xcf, 0x3a, 0x19, 0x31, 0xef, 0xa3, - 0x64, 0x23, 0x74, 0x49, 0x3f, 0x3b, 0x9f, 0x06, - 0x01, 0x3a, 0x7f, 0xf5, 0xf3, 0x8a, 0xba, 0x5f, - 0x7e, 0x5f, 0x27, 0x4d, 0xbc, 0x3a, 0x67, 0x2a, - 0x74, 0xfa, 0xdd, 0x7c, 0x79, 0xb3, 0x59, 0xd8, - 0x56, 0x3a, 0x22, 0xe1, 0x6e, 0xf3, 0xdc, 0xde, - 0xf0, 0xe9, 0xff, 0x9a, 0xc5, 0xfb, 0xb1, 0x16, - 0xe0, 0xe9, 0x7c, 0x11, 0x0c, 0x24, 0xba, 0x21, - 0x8a, 0x1b, 0x83, 0x17, 0xc7, 0xa9, 0xcc, 0xa3, - 0x1e, 0xe5, 0xe9, 0x0a, 0xff, 0x90, 0x85, 0x2c, - 0xd5, 0x4b, 0xbb, 0x8e, 0xcf, 0xc4, 0xd1, 0x8d, - 0x67, 0x52, 0x98, 0x3d, 0x41, 0x75, 0x1b, 0x6c, - 0xff, 0x58, 0x0b, 0x69, 0xf7, 0xb3, 0xa7, 0xe1, - 0xf2, 0xf9, 0xc7, 0x9d, 0x3e, 0xec, 0xe3, 0xdb, - 0xae, 0x54, 0x32, 0x24, 0x2c, 0xd7, 0xb1, 0x6c, - 0xff, 0xe0, 0xee, 0x3e, 0xe7, 0x6b, 0xaf, 0xd8, - 0x4e, 0x97, 0x63, 0x44, 0x0b, 0x2d, 0x1a, 0x81, - 0x49, 0x7f, 0x46, 0xf3, 0x81, 0xf9, 0xff, 0x7f, - 0xab, 0x7f, 0xec, 0xbf, 0x3c, 0x62, 0xa7, 0xff, - 0xf6, 0xd8, 0x3c, 0xb7, 0x5f, 0xad, 0x6c, 0x53, - 0x07, 0xc3, 0xa7, 0xfe, 0xae, 0x53, 0xd1, 0x4d, - 0x63, 0xae, 0xa3, 0xa3, 0x68, 0xa8, 0xd3, 0x04, - 0x32, 0x62, 0x3f, 0x87, 0x74, 0xff, 0xff, 0x05, - 0x17, 0xf7, 0x33, 0x1f, 0x56, 0x57, 0x3b, 0x61, - 0x43, 0xa7, 0x50, 0x2f, 0x3a, 0x19, 0x53, 0x4a, - 0xa1, 0x0f, 0xb8, 0xce, 0x70, 0xa3, 0xd6, 0x59, - 0xfc, 0xf7, 0x2c, 0x73, 0x76, 0x74, 0xff, 0xe0, - 0x41, 0xb7, 0x43, 0x6c, 0x0d, 0x53, 0xa7, 0xf6, - 0x39, 0xbb, 0x55, 0xd4, 0xe8, 0xb3, 0xf7, 0x74, - 0x8b, 0x3f, 0x7f, 0xbe, 0xae, 0xd4, 0x74, 0xfa, - 0xf9, 0xf8, 0x54, 0xe9, 0xff, 0xea, 0xea, 0x94, - 0xfe, 0xfa, 0x3b, 0x5e, 0xfe, 0xa3, 0xa4, 0xd4, - 0x1f, 0xef, 0x04, 0xf1, 0xf4, 0x7b, 0xec, 0x8f, - 0x50, 0xab, 0x9f, 0xf0, 0xff, 0xb5, 0x36, 0xea, - 0x96, 0xec, 0x74, 0xee, 0x70, 0x0e, 0x9f, 0x79, - 0x83, 0x6e, 0xc7, 0x43, 0x1e, 0x27, 0xa3, 0x73, - 0xcc, 0xaa, 0x5c, 0x3a, 0x19, 0x55, 0x13, 0xe3, - 0x9f, 0xb3, 0x5a, 0xc2, 0x27, 0x44, 0x53, 0xe6, - 0xa1, 0x9d, 0x98, 0xe9, 0xfb, 0xde, 0xdb, 0xba, - 0x6a, 0x74, 0xff, 0xff, 0xfc, 0xc0, 0xda, 0x1c, - 0x4f, 0xd5, 0xcf, 0x82, 0x35, 0x74, 0xd4, 0xb7, - 0x6b, 0xa9, 0xd3, 0xde, 0x65, 0x35, 0x3a, 0x6e, - 0x38, 0x3a, 0x2a, 0x6e, 0xf8, 0x23, 0x9f, 0x7f, - 0x79, 0x7b, 0x29, 0x66, 0x8a, 0x36, 0x9b, 0x9b, - 0xb8, 0x52, 0x26, 0x35, 0x87, 0x1c, 0xee, 0x38, - 0xe0, 0xa9, 0xe7, 0xea, 0xd0, 0xa5, 0x97, 0xf3, - 0xeb, 0xe7, 0xfe, 0x54, 0xf7, 0x7f, 0x4b, 0x00, - 0xf9, 0x44, 0xbe, 0x73, 0x05, 0x4e, 0x9f, 0x86, - 0x9a, 0xb9, 0x7a, 0x3a, 0x7f, 0xf8, 0x74, 0xe5, - 0x85, 0xe2, 0x9b, 0x7f, 0xe4, 0xe9, 0xf5, 0x1d, - 0x7f, 0xdd, 0x27, 0x4f, 0xbf, 0x56, 0xa1, 0x47, - 0xb3, 0xf6, 0x7c, 0xd8, 0x1e, 0x7a, 0x7b, 0x3f, - 0x66, 0xc7, 0x9e, 0xcf, 0xd9, 0xef, 0x5f, 0x75, - 0x3d, 0x9f, 0xb1, 0xc9, 0xe8, 0x89, 0x14, 0xf9, - 0xae, 0xb6, 0x27, 0xb3, 0xf6, 0x0f, 0x67, 0xec, - 0xd9, 0xa3, 0xd9, 0xfa, 0xa2, 0xde, 0x4f, 0x13, - 0xf9, 0xf5, 0x22, 0x7a, 0xfa, 0xbf, 0xe1, 0xec, - 0xfd, 0x83, 0xd9, 0xfb, 0x37, 0x8c, 0x7b, 0x3f, - 0x67, 0xfa, 0xfc, 0xc0, 0xb7, 0x57, 0xc9, 0xec, - 0xfd, 0x9f, 0xaf, 0x7f, 0xaf, 0xb4, 0x1e, 0xcf, - 0xd8, 0xf1, 0x14, 0xa2, 0x47, 0x54, 0x69, 0xe0, - 0xa1, 0xb4, 0x7b, 0x3f, 0x60, 0xf6, 0x7e, 0xd9, - 0xae, 0x9b, 0x8e, 0x0f, 0x67, 0xec, 0x3d, 0x58, - 0xa7, 0x26, 0xb7, 0x08, 0x5a, 0x61, 0x36, 0x05, - 0x0a, 0x32, 0xac, 0x2f, 0x34, 0xbd, 0xc1, 0x34, - 0xf5, 0xbd, 0xbb, 0x96, 0xcf, 0xd2, 0xd1, 0x21, - 0x3f, 0xeb, 0x4e, 0x6c, 0x38, 0xcd, 0xb8, 0x74, - 0xcf, 0xa0, 0xa8, 0xa1, 0x12, 0xf4, 0xa1, 0x09, - 0xf4, 0x02, 0xe4, 0xce, 0x4e, 0x34, 0x4f, 0xff, - 0x9e, 0x0c, 0xeb, 0x1c, 0x6e, 0x76, 0xca, 0xc7, - 0x0e, 0x9f, 0xce, 0xd9, 0x5f, 0xd5, 0xcb, 0x3a, - 0x29, 0x44, 0x68, 0x2b, 0xc3, 0x2f, 0x18, 0x3c, - 0x96, 0xc6, 0xbe, 0x5d, 0x93, 0x9c, 0xfe, 0xc2, - 0xe6, 0x7f, 0xdd, 0xda, 0x91, 0x6d, 0xef, 0xd4, - 0x3a, 0x7e, 0x1c, 0xef, 0xbc, 0x79, 0xd3, 0xb8, - 0xe3, 0x82, 0xa7, 0x76, 0x6f, 0x0a, 0x59, 0x7f, - 0x3f, 0xe1, 0xc7, 0xf6, 0x0b, 0x75, 0x80, 0x74, - 0xff, 0x0e, 0x79, 0xd1, 0xed, 0xe5, 0x27, 0x47, - 0x29, 0x99, 0xa9, 0x03, 0xc4, 0xc1, 0x2d, 0xd1, - 0xf4, 0xff, 0x84, 0x7f, 0xeb, 0xb9, 0x5e, 0xa6, - 0xd1, 0xd3, 0xb8, 0xe3, 0x82, 0xc4, 0x20, 0x9f, - 0x02, 0x66, 0x21, 0x62, 0x10, 0x2c, 0xd6, 0xce, - 0xe3, 0x8e, 0x0b, 0x10, 0x7a, 0x0b, 0x10, 0x79, - 0x66, 0xb6, 0x66, 0x55, 0xa2, 0x59, 0x1b, 0xa7, - 0xda, 0x6d, 0x32, 0x8e, 0x9e, 0x1f, 0xb7, 0x73, - 0xa7, 0x76, 0x6f, 0x0e, 0x8a, 0x0f, 0x01, 0x44, - 0x53, 0xe4, 0x6d, 0xb2, 0x8a, 0x9f, 0x0e, 0x08, - 0xd9, 0x53, 0x5a, 0x15, 0x37, 0x1c, 0x15, 0x16, - 0x7e, 0x95, 0x25, 0xd1, 0x1f, 0x02, 0x93, 0xf8, - 0x7b, 0x37, 0x9b, 0xb7, 0x62, 0x96, 0x6f, 0x21, - 0x93, 0x80, 0xfb, 0x36, 0x43, 0x4e, 0x7f, 0xe6, - 0xf2, 0xb7, 0x7c, 0xe0, 0xe7, 0x73, 0xa7, 0xff, - 0xd4, 0xbe, 0xbc, 0x30, 0x6d, 0xbf, 0xb6, 0x1f, - 0x9d, 0x1b, 0x44, 0xce, 0x22, 0x4f, 0xea, 0xf6, - 0x55, 0x78, 0xca, 0x4e, 0x86, 0x5c, 0x27, 0xb4, - 0xcf, 0xc6, 0x12, 0x11, 0xd6, 0x64, 0x33, 0x6a, - 0x45, 0x3b, 0x8e, 0x38, 0x2a, 0x7b, 0xcc, 0x1e, - 0x4a, 0x59, 0x7f, 0x3f, 0x76, 0xb0, 0xbb, 0x70, - 0xe8, 0x79, 0xef, 0x54, 0xc6, 0x7f, 0xf8, 0x69, - 0xe9, 0x4f, 0x8c, 0x29, 0x94, 0x0e, 0x1d, 0x3f, - 0xff, 0xff, 0xda, 0xaf, 0x6a, 0xf4, 0xde, 0x7f, - 0x5f, 0xda, 0x7f, 0xa3, 0xff, 0xbc, 0x1d, 0x3e, - 0xc2, 0xce, 0x9f, 0xfe, 0xb6, 0x5f, 0x22, 0xde, - 0xa5, 0xf7, 0xf8, 0x1d, 0x3c, 0xed, 0xbf, 0x1d, - 0x1d, 0x0f, 0x3f, 0x7c, 0x4f, 0x9f, 0xfc, 0xfb, - 0x0f, 0x15, 0xfa, 0xf6, 0xab, 0x59, 0xd3, 0xdf, - 0xe6, 0xd4, 0x74, 0x32, 0xa1, 0x17, 0x91, 0x5a, - 0x8e, 0x46, 0x20, 0x24, 0x3e, 0xa5, 0xcf, 0xdd, - 0x7a, 0xfc, 0x69, 0x79, 0xd3, 0xfe, 0xc0, 0xea, - 0xfe, 0xef, 0x29, 0xf0, 0xe9, 0xff, 0x56, 0xac, - 0x1a, 0x65, 0xf3, 0xf3, 0xa7, 0xfc, 0x38, 0xe6, - 0xf0, 0x03, 0xfc, 0x9d, 0x16, 0x8e, 0xe4, 0x32, - 0xfa, 0x0a, 0x8f, 0xa7, 0x9f, 0xda, 0xdc, 0x3a, - 0x7c, 0x1c, 0xdd, 0x89, 0xd3, 0xff, 0x75, 0xff, - 0x7b, 0x67, 0x55, 0xdb, 0x52, 0x74, 0x61, 0xf7, - 0xd4, 0x96, 0x7f, 0xfa, 0xf5, 0x5b, 0x73, 0x6c, - 0xea, 0xf7, 0xb6, 0x3a, 0x7a, 0xf5, 0xfa, 0x9d, - 0x3f, 0x3b, 0xb7, 0x05, 0xde, 0xa3, 0xd3, 0xa2, - 0xa7, 0xb9, 0xa2, 0x18, 0xe5, 0x1d, 0xe2, 0x43, - 0xa8, 0x56, 0x4f, 0xff, 0x7e, 0xb7, 0xce, 0xab, - 0xfe, 0xfb, 0xc1, 0xf9, 0xd3, 0xff, 0xf8, 0x75, - 0x7b, 0xfb, 0x6b, 0xfe, 0x33, 0xd7, 0xc7, 0x1c, - 0x15, 0x3d, 0xcd, 0xdf, 0x72, 0xa7, 0xb3, 0xcc, - 0xd1, 0xd3, 0x9e, 0x3e, 0x9a, 0x21, 0x99, 0xdc, - 0x71, 0xc1, 0x53, 0xac, 0x50, 0xa5, 0x97, 0xf3, - 0xfe, 0xba, 0x2f, 0x9c, 0x78, 0xb5, 0x07, 0x47, - 0x87, 0xcc, 0x25, 0x13, 0xf9, 0xe3, 0x7a, 0xd7, - 0xb4, 0x1d, 0x0c, 0x9d, 0x65, 0x0c, 0x9c, 0x91, - 0xd2, 0x42, 0x10, 0xae, 0xc2, 0x29, 0xef, 0xeb, - 0xec, 0x74, 0xfe, 0xf6, 0xc3, 0xcf, 0x3e, 0x27, - 0x4f, 0xff, 0x3f, 0xfc, 0xef, 0xb5, 0x6c, 0x13, - 0x31, 0x0d, 0x10, 0x64, 0xff, 0xe0, 0xc7, 0x56, - 0x29, 0xbf, 0xf9, 0xdb, 0x47, 0x43, 0x22, 0xa3, - 0xd5, 0xc8, 0xda, 0x3f, 0xf5, 0x0d, 0xc9, 0xb7, - 0xe9, 0xd3, 0xc1, 0xfe, 0x3a, 0xe7, 0x47, 0xcd, - 0xed, 0x45, 0xe7, 0xf7, 0x55, 0xd7, 0xaa, 0xc1, - 0x8e, 0x87, 0xa7, 0xb9, 0xf8, 0xc8, 0x2a, 0xcb, - 0xa2, 0x19, 0xff, 0xe6, 0x1a, 0x3a, 0x39, 0xf1, - 0xbe, 0x6c, 0x7b, 0x9d, 0x39, 0x81, 0xc3, 0xa1, - 0x97, 0xb6, 0xf9, 0x3b, 0xb8, 0xe0, 0x90, 0xd7, - 0xf1, 0xff, 0x64, 0xa3, 0x9f, 0x51, 0x3a, 0x94, - 0xe7, 0xd8, 0xac, 0xba, 0x9d, 0x3f, 0xfc, 0x8d, - 0x5a, 0xb2, 0xaf, 0x5f, 0xae, 0xf0, 0xe9, 0xfc, - 0x22, 0xcf, 0x53, 0x7c, 0xe9, 0xfd, 0xaf, 0xba, - 0xfe, 0x9e, 0xc5, 0x49, 0x47, 0x4f, 0xd6, 0x3d, - 0xc1, 0x97, 0xf3, 0xc5, 0xec, 0x6b, 0x16, 0x98, - 0x47, 0xd3, 0x6a, 0xeb, 0x3c, 0x1e, 0xd2, 0xf3, - 0xa7, 0xf0, 0xbc, 0x6d, 0x4c, 0x87, 0x4e, 0x57, - 0x36, 0x74, 0x31, 0xf7, 0x59, 0x1e, 0x17, 0xce, - 0xd7, 0xe8, 0x3a, 0x7f, 0xde, 0xea, 0xbd, 0x83, - 0xc5, 0x7e, 0xa7, 0x4f, 0xfc, 0xc3, 0x9b, 0x6f, - 0x16, 0x15, 0xa9, 0x51, 0xca, 0x21, 0x54, 0x87, - 0x3e, 0xdf, 0xff, 0x4d, 0x4e, 0x82, 0xa7, 0xea, - 0xf6, 0x60, 0x65, 0x15, 0x05, 0x41, 0x50, 0x54, - 0x15, 0x0f, 0x3d, 0xff, 0x85, 0x78, 0x5b, 0xe8, - 0x57, 0x50, 0x53, 0xb0, 0x54, 0xdb, 0xb2, 0xa7, - 0xec, 0xcd, 0x38, 0xca, 0x2b, 0xa1, 0x6b, 0x27, - 0x70, 0xa8, 0x2a, 0x0a, 0x87, 0x96, 0x9f, 0x0a, - 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, - 0xa0, 0xde, 0x72, 0x15, 0xf0, 0xaf, 0x02, 0xaa, - 0x14, 0xe8, 0x2a, 0x0a, 0x82, 0xa1, 0xe5, 0xa5, - 0x42, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa1, 0xe6, - 0xa3, 0xc0, 0xad, 0x05, 0x3b, 0x05, 0x41, 0x50, - 0x54, 0x15, 0x05, 0x45, 0x06, 0xa3, 0xb8, 0x50, - 0x05, 0x6c, 0x2a, 0x5d, 0xca, 0x82, 0xa0, 0xa8, - 0x2a, 0x0a, 0x8e, 0x4d, 0x45, 0x21, 0x5e, 0x05, - 0x7a, 0x15, 0x05, 0x41, 0x50, 0x54, 0xfb, 0x6d, - 0xe5, 0x6c, 0xa8, 0x2a, 0x1e, 0x79, 0xe8, 0x15, - 0xb0, 0xac, 0x0a, 0xf0, 0x9e, 0x48, 0x54, 0x15, - 0x05, 0x41, 0x50, 0x54, 0x3c, 0xd4, 0x52, 0x15, - 0xf0, 0xa7, 0x41, 0x50, 0x54, 0x15, 0x05, 0x41, - 0x50, 0xf3, 0x51, 0xc8, 0x56, 0xc2, 0x84, 0x2a, - 0x5b, 0x2a, 0x0a, 0x82, 0xa4, 0xf2, 0xa0, 0xaa, - 0x4b, 0x08, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0xa0, - 0xf9, 0x9e, 0x15, 0xdc, 0x69, 0x06, 0x9c, 0x0a, - 0xf0, 0x2b, 0x41, 0x52, 0xb2, 0xa0, 0xa8, 0x2a, - 0x4f, 0x2a, 0x0a, 0xa4, 0xb0, 0x82, 0xa0, 0xa8, - 0x63, 0xd2, 0x78, 0x57, 0xc6, 0x80, 0x69, 0x41, - 0x50, 0x54, 0x15, 0x05, 0x41, 0x50, 0x54, 0x31, - 0xb2, 0xa4, 0x28, 0x02, 0x94, 0x14, 0x21, 0x50, - 0x54, 0x15, 0x05, 0x40, 0x17, 0xd5, 0x0a, 0xd0, - 0x54, 0x15, 0x05, 0x41, 0x50, 0xa2, 0xf8, 0x42, - 0xb4, 0x15, 0x25, 0x15, 0x05, 0x41, 0x51, 0xe1, - 0x69, 0xe8, 0x54, 0x15, 0x05, 0x41, 0x50, 0x54, - 0x31, 0xa8, 0x70, 0x2b, 0x61, 0x5e, 0x85, 0x43, - 0x2f, 0xd9, 0x50, 0xe6, 0xf3, 0xde, 0x4a, 0x6d, - 0x71, 0x1b, 0xa9, 0x48, 0xfb, 0x3f, 0x5c, 0xf5, - 0xc3, 0xa0, 0x84, 0x72, 0x92, 0x36, 0x6f, 0x8c, - 0xde, 0x1d, 0x8b, 0xb5, 0x59, 0xf4, 0xc3, 0xeb, - 0xcb, 0xa6, 0x4e, 0x12, 0xba, 0x8b, 0x3b, 0x12, - 0x3b, 0x25, 0x4f, 0x9e, 0x2d, 0x75, 0x29, 0x69, - 0xac, 0x4e, 0xfb, 0x28, 0xa9, 0xef, 0xa6, 0x01, - 0xd3, 0xbf, 0xcd, 0x9d, 0x39, 0xbb, 0x2e, 0x94, - 0x47, 0x01, 0xc6, 0xc6, 0xf4, 0x3f, 0x3f, 0xb7, - 0xfe, 0x39, 0x06, 0xa0, 0xe8, 0xa5, 0x10, 0xae, - 0x28, 0x4d, 0xe3, 0x1d, 0x3f, 0x06, 0x0f, 0x66, - 0xf0, 0xe9, 0xb0, 0x0e, 0x97, 0xce, 0x42, 0xd2, - 0x48, 0x74, 0x94, 0x74, 0xdd, 0x4b, 0xfa, 0x25, - 0x00, 0x5b, 0x68, 0x38, 0x3d, 0xd8, 0x3e, 0x7f, - 0xb6, 0xca, 0xb7, 0x18, 0x68, 0x3a, 0x2d, 0x12, - 0x3e, 0x2c, 0xcf, 0xca, 0xff, 0x56, 0x0f, 0x87, - 0x4f, 0xff, 0x37, 0x4c, 0x00, 0xcf, 0x19, 0x7c, - 0x71, 0xc1, 0xd0, 0xc8, 0x82, 0xf4, 0xc2, 0x28, - 0x67, 0xba, 0x3e, 0x32, 0xde, 0x61, 0x3c, 0x85, - 0x9f, 0x85, 0x13, 0x84, 0x99, 0x4a, 0xa5, 0x18, - 0xd2, 0xb5, 0x0a, 0x59, 0xfc, 0xc3, 0xac, 0x1f, - 0x6c, 0xe9, 0xf9, 0xe3, 0xf7, 0xee, 0xce, 0x9f, - 0x51, 0xf0, 0x67, 0x9d, 0x00, 0x7a, 0x62, 0x59, - 0x3f, 0xed, 0xb0, 0x78, 0x37, 0xc6, 0x78, 0x74, - 0xeb, 0xb7, 0x0e, 0x95, 0xec, 0xf6, 0x7c, 0x3e, - 0x9f, 0xbd, 0x0f, 0x55, 0x82, 0x74, 0xf2, 0x9a, - 0xe8, 0x3a, 0x7d, 0x6e, 0x85, 0xa9, 0x3a, 0x3e, - 0x79, 0x35, 0x21, 0x9e, 0x61, 0xd2, 0x1d, 0x26, - 0xb4, 0xd6, 0x05, 0xe6, 0xa5, 0x1a, 0x76, 0xea, - 0x22, 0x9e, 0xf7, 0x01, 0xe7, 0x4f, 0x37, 0xae, - 0xe5, 0x4a, 0x9f, 0x3d, 0x7c, 0x71, 0xc1, 0xd0, - 0x27, 0xa5, 0xe9, 0x3c, 0x72, 0x89, 0x5b, 0x73, - 0x85, 0x2a, 0xe4, 0xf2, 0x3d, 0xbf, 0x61, 0xcd, - 0x3f, 0x07, 0xbe, 0x58, 0xa1, 0xd3, 0xfd, 0x40, - 0xdb, 0xf7, 0x7e, 0x54, 0xe9, 0xee, 0x79, 0x67, - 0x47, 0x4f, 0xff, 0x6d, 0x94, 0x8d, 0xab, 0x04, - 0xcc, 0x43, 0x45, 0xf1, 0x3b, 0x02, 0x83, 0x45, - 0xff, 0x0c, 0x7f, 0xc8, 0xad, 0x3f, 0xb8, 0xcd, - 0x55, 0xae, 0x83, 0xa7, 0xfe, 0x75, 0xae, 0xec, - 0x2f, 0xbd, 0xfd, 0x47, 0x4f, 0xd7, 0xc7, 0x6d, - 0xe6, 0x8e, 0x9f, 0xff, 0x6b, 0xb3, 0xd9, 0xd7, - 0xc7, 0xc0, 0xfb, 0x2a, 0xca, 0x9e, 0xdf, 0x6a, - 0x74, 0x74, 0x50, 0x8a, 0xcb, 0x2f, 0x45, 0x89, - 0xb5, 0x67, 0x4f, 0x83, 0xf4, 0x62, 0x8d, 0x30, - 0x9c, 0xf6, 0xbd, 0x6c, 0x34, 0xc2, 0x73, 0x78, - 0xc6, 0xa0, 0x4e, 0x7f, 0x0e, 0x77, 0xd3, 0x07, - 0x86, 0xa0, 0x4e, 0x7f, 0x56, 0xf7, 0xfa, 0xfb, - 0x41, 0xa6, 0x13, 0x9a, 0xf9, 0x34, 0xc2, 0x73, - 0x71, 0xc1, 0xe6, 0x13, 0x8b, 0x4d, 0x3e, 0x93, - 0x4f, 0x97, 0x28, 0x8e, 0xa8, 0x0e, 0x90, 0xb8, - 0x23, 0x96, 0x8b, 0x30, 0x99, 0x67, 0xd1, 0x2f, - 0xd2, 0x9f, 0xdf, 0x11, 0xe6, 0x46, 0x2b, 0x4f, - 0xac, 0x3c, 0xf5, 0x28, 0xaa, 0x7f, 0xf8, 0x6e, - 0xa0, 0xde, 0xe8, 0x7e, 0xeb, 0xb2, 0x8e, 0x86, - 0x5d, 0x0d, 0xe4, 0xe5, 0x21, 0x47, 0xb2, 0x0d, - 0x4b, 0x82, 0x74, 0x7b, 0x3e, 0xe6, 0xc3, 0xfd, - 0xce, 0x9f, 0x0d, 0xf6, 0xb7, 0x0e, 0x9f, 0xed, - 0xe2, 0xb7, 0xf6, 0xa5, 0xe7, 0x4f, 0xdd, 0x85, - 0xfd, 0x59, 0x41, 0xd1, 0xf3, 0xeb, 0xf0, 0xe6, - 0x05, 0x16, 0xda, 0x84, 0x9c, 0xff, 0xaf, 0x36, - 0xe7, 0xc7, 0x77, 0x49, 0xd0, 0xcb, 0xdc, 0x97, - 0x3a, 0x73, 0xf6, 0x7c, 0x86, 0xf8, 0x93, 0xcf, - 0xfe, 0x56, 0xab, 0xf1, 0xa5, 0xfa, 0xfd, 0x7e, - 0x74, 0xff, 0xfe, 0x1b, 0xa6, 0xeb, 0x83, 0xbf, - 0xb6, 0xb7, 0xee, 0x28, 0xe9, 0xf8, 0x7d, 0x57, - 0xf6, 0xc7, 0x4f, 0xff, 0xb0, 0x75, 0x99, 0xb1, - 0x6d, 0x57, 0x8b, 0xd9, 0xd3, 0x82, 0xb5, 0x3c, - 0x40, 0x73, 0xff, 0xdd, 0x81, 0xb6, 0xdd, 0x2c, - 0x13, 0x31, 0x0d, 0x10, 0x1a, 0xcd, 0x44, 0x78, - 0x8e, 0x4d, 0x3d, 0x45, 0xa6, 0x6b, 0xf8, 0xc4, - 0x67, 0x87, 0x5e, 0x7a, 0x74, 0xff, 0xfc, 0xfb, - 0xaf, 0xc0, 0x3e, 0xae, 0xda, 0xdd, 0xf1, 0xa3, - 0xa2, 0xd1, 0x01, 0x84, 0x73, 0xff, 0xfd, 0x8f, - 0xb1, 0x71, 0xf7, 0x4b, 0xfb, 0x37, 0x8b, 0xe3, - 0x8e, 0x0a, 0x8d, 0xa2, 0x38, 0x48, 0x67, 0xf3, - 0x58, 0x26, 0x62, 0x1a, 0x20, 0x99, 0xfe, 0x6d, - 0x58, 0x26, 0x62, 0x1a, 0x2f, 0x99, 0xf7, 0xdd, - 0x0d, 0xd7, 0x93, 0xfa, 0x43, 0xa9, 0xfd, 0xee, - 0xfa, 0xb7, 0xf4, 0xd9, 0xd3, 0xfe, 0xa3, 0x29, - 0xea, 0xbd, 0x0e, 0x3a, 0x3a, 0x77, 0x1c, 0x70, - 0x54, 0xfd, 0xad, 0xda, 0x60, 0x14, 0xb2, 0xfe, - 0x28, 0x44, 0xd8, 0xb1, 0x4f, 0xfd, 0x42, 0x9a, - 0x9a, 0x8d, 0xd1, 0xd9, 0xe7, 0x4f, 0xff, 0x76, - 0xa4, 0x7a, 0x26, 0xff, 0xe7, 0x8c, 0x0f, 0x3a, - 0x7f, 0xde, 0xd5, 0xac, 0x74, 0xef, 0xf0, 0x87, - 0x4e, 0xe3, 0x8e, 0x0a, 0x9f, 0xdd, 0xbc, 0x61, - 0xba, 0x74, 0x52, 0xcb, 0xf9, 0xff, 0xf9, 0xdc, - 0xe8, 0x9b, 0xff, 0x3c, 0xdf, 0x1d, 0x35, 0x5b, - 0xa0, 0xe9, 0x66, 0xd1, 0x59, 0xea, 0x24, 0x3d, - 0x58, 0x4f, 0x28, 0x1f, 0x86, 0x90, 0x11, 0xa9, - 0x20, 0x55, 0x75, 0x18, 0x74, 0xfb, 0x77, 0xa7, - 0x1e, 0x74, 0xff, 0xaf, 0x4c, 0x15, 0xdb, 0x0e, - 0x8f, 0x10, 0x44, 0xfe, 0x6b, 0x04, 0xcc, 0x43, - 0x44, 0x10, 0xb3, 0xc8, 0x9f, 0xb3, 0x60, 0x1f, - 0xe0, 0xe9, 0xfb, 0xaf, 0xcf, 0x18, 0x2f, 0x3a, - 0x04, 0xf7, 0xbd, 0x2c, 0x8d, 0xa6, 0x77, 0xe3, - 0x80, 0xc2, 0xa6, 0x7f, 0x98, 0x75, 0xda, 0xf7, - 0x94, 0x9d, 0x3f, 0xfd, 0x9c, 0x6a, 0xf6, 0xdf, - 0xd0, 0xde, 0xfe, 0x74, 0x3d, 0x10, 0xe2, 0x73, - 0x3f, 0xdb, 0x60, 0xd0, 0xb5, 0xd2, 0x74, 0xff, - 0xff, 0x7e, 0x86, 0x7d, 0x40, 0x3f, 0x4b, 0x8f, - 0xc0, 0x55, 0xd2, 0x74, 0xf6, 0xb7, 0x63, 0xca, - 0x27, 0xb6, 0x6d, 0x3f, 0x76, 0x55, 0x78, 0xca, - 0x4e, 0x86, 0x3e, 0xbd, 0x1d, 0x4f, 0x7d, 0xcf, - 0xf0, 0x74, 0xff, 0xfb, 0xda, 0x05, 0xaf, 0x6b, - 0x6d, 0x5e, 0xfd, 0x03, 0xa7, 0xd7, 0xaa, 0xf6, - 0xaf, 0x27, 0xf3, 0xd8, 0x92, 0x7e, 0x4d, 0xff, - 0xab, 0xfd, 0xce, 0x9f, 0x94, 0xdd, 0x7d, 0xdd, - 0x07, 0x4f, 0xff, 0xff, 0x7f, 0x58, 0xac, 0x1f, - 0x1f, 0xfa, 0xfa, 0xad, 0xfd, 0xb5, 0xbf, 0x71, - 0x47, 0x47, 0x28, 0xe3, 0xf9, 0x96, 0x18, 0xce, - 0x0e, 0xd5, 0x3a, 0x7f, 0xd8, 0x29, 0x60, 0x99, - 0x88, 0x68, 0x84, 0x61, 0x8f, 0x87, 0xd1, 0xd9, - 0xff, 0xcd, 0x74, 0xf6, 0xd7, 0xc7, 0xd7, 0xdd, - 0x4e, 0x9f, 0xfe, 0xcc, 0xa3, 0xb5, 0xef, 0x14, - 0xbe, 0x38, 0xe0, 0xe8, 0xe5, 0x14, 0x0e, 0x26, - 0x4f, 0xf7, 0x2d, 0x5a, 0xb5, 0x17, 0xc1, 0xd1, - 0x67, 0xbf, 0x84, 0xb3, 0xb8, 0xe3, 0x82, 0xa7, - 0xfa, 0xfc, 0xc0, 0xb7, 0x57, 0xc9, 0x4b, 0x2f, - 0xe6, 0xe3, 0x82, 0xa7, 0x71, 0xc7, 0x05, 0x4f, - 0xd9, 0x47, 0x3b, 0x6a, 0x94, 0xb2, 0xfe, 0x05, - 0x17, 0x9c, 0x24, 0x75, 0x1b, 0xcf, 0x93, 0xfc, - 0xf6, 0x51, 0x4b, 0x36, 0x73, 0xb8, 0xe3, 0x82, - 0xa7, 0x55, 0x80, 0xa5, 0x97, 0xf2, 0xf3, 0xe8, - 0x82, 0xd2, 0xcc, 0xfd, 0xc8, 0xb3, 0xf1, 0x0e, - 0x9f, 0xdd, 0x83, 0x9f, 0xba, 0x6e, 0x4e, 0x9f, - 0xfb, 0x78, 0xf1, 0xce, 0xee, 0x0f, 0xdc, 0x3a, - 0x7e, 0xdd, 0xba, 0xbd, 0x54, 0xe8, 0x43, 0xf4, - 0xd2, 0x34, 0x02, 0x3e, 0x36, 0x56, 0x30, 0xac, - 0x86, 0x4d, 0x56, 0xe3, 0x22, 0x9d, 0x4f, 0x5a, - 0xee, 0xec, 0xe9, 0xff, 0xd7, 0xd7, 0xc1, 0xf2, - 0xd1, 0xb6, 0xca, 0x3a, 0x7e, 0x4f, 0xd7, 0x7f, - 0x70, 0xa9, 0xfc, 0x37, 0x4b, 0xeb, 0xfe, 0xe7, - 0x4f, 0x66, 0x07, 0x73, 0xa3, 0xa1, 0xeb, 0x50, - 0x6b, 0x3c, 0xd8, 0xa7, 0x45, 0x4e, 0xe3, 0x8e, - 0x0a, 0x9f, 0xfe, 0xec, 0xde, 0x5d, 0x8e, 0xb7, - 0xf6, 0x1a, 0x0a, 0x59, 0x7f, 0x2b, 0x44, 0x50, - 0x29, 0x06, 0x19, 0x3e, 0x67, 0x96, 0x52, 0x95, - 0xf8, 0x42, 0x6e, 0x18, 0xb3, 0xff, 0xe5, 0x5a, - 0x30, 0xe6, 0xab, 0xcf, 0xb8, 0x0f, 0x3a, 0x7c, - 0xda, 0xab, 0xab, 0x3a, 0x18, 0xfe, 0xf4, 0xa7, - 0x3f, 0xfd, 0xf7, 0x56, 0x3c, 0x8e, 0x71, 0x63, - 0x9d, 0xce, 0x9f, 0xff, 0xee, 0x77, 0xfe, 0x2d, - 0xdb, 0xea, 0xcd, 0x57, 0xd7, 0xdd, 0x3a, 0x3a, - 0x2d, 0x17, 0xf8, 0xa3, 0x0c, 0xda, 0x53, 0x50, - 0x98, 0xf8, 0xe5, 0x39, 0x8c, 0xde, 0xe5, 0xd2, - 0xfe, 0x3a, 0xb7, 0x21, 0x7a, 0x11, 0x95, 0xaa, - 0x13, 0x5b, 0x8c, 0x9f, 0xc8, 0x48, 0x8c, 0x64, - 0x35, 0x96, 0x0b, 0xa9, 0x41, 0xde, 0xc3, 0x43, - 0x88, 0x70, 0x4e, 0x74, 0xc2, 0x74, 0xff, 0xf5, - 0x8a, 0xf5, 0xdf, 0xf4, 0xd7, 0x77, 0xe6, 0x1d, - 0x2a, 0x5e, 0x7d, 0xdc, 0x8e, 0x4f, 0xdb, 0x73, - 0xfb, 0xfa, 0x8e, 0x9f, 0xf0, 0xb6, 0xb7, 0x9e, - 0x65, 0x35, 0x3a, 0x73, 0x9e, 0x81, 0xd3, 0xfe, - 0xcf, 0x85, 0xd2, 0xbe, 0x38, 0xe0, 0xe8, 0xc3, - 0xde, 0xa8, 0xec, 0xff, 0xf0, 0xb3, 0xfa, 0x76, - 0xd7, 0xc7, 0xd7, 0xdd, 0x4e, 0x8b, 0x4c, 0xfd, - 0x0b, 0xf7, 0x09, 0xcf, 0x08, 0x67, 0xf3, 0x0b, - 0xc6, 0xef, 0xc3, 0xa7, 0xf3, 0xec, 0x2a, 0x2d, - 0x41, 0xd3, 0xff, 0xd7, 0xa6, 0x14, 0xbd, 0x6f, - 0xe1, 0xe2, 0x1d, 0x3e, 0xca, 0xd8, 0xe8, 0xe9, - 0xda, 0xce, 0xb9, 0xd3, 0xfb, 0x5b, 0xfa, 0xfc, - 0xcf, 0x9d, 0x1c, 0xa3, 0x10, 0x53, 0x34, 0x4b, - 0xe8, 0xfc, 0xfe, 0xf7, 0xc6, 0xdf, 0xf1, 0xe7, - 0x4f, 0xf2, 0x5e, 0x99, 0xd7, 0xc7, 0xc3, 0xa7, - 0xff, 0xef, 0x5b, 0x55, 0xb1, 0xe8, 0x0d, 0xfe, - 0x47, 0x1e, 0x74, 0x7d, 0x12, 0x82, 0x73, 0x3f, - 0xff, 0x0d, 0xd7, 0xde, 0x97, 0xbc, 0x1b, 0x71, - 0xed, 0x49, 0xd3, 0xfe, 0xba, 0xfb, 0x60, 0x99, - 0x88, 0x68, 0x81, 0xa7, 0xb5, 0xbc, 0x7f, 0x44, - 0x51, 0x8a, 0xe4, 0x32, 0x60, 0x17, 0x0c, 0x59, - 0xff, 0x60, 0x58, 0xf9, 0x5d, 0x56, 0x93, 0xa7, - 0xff, 0xff, 0xeb, 0xd6, 0xf0, 0x7b, 0xf4, 0xa8, - 0x66, 0x69, 0xd5, 0xf3, 0xd2, 0xd5, 0x83, 0x4b, - 0xcf, 0x10, 0x5c, 0xff, 0xb3, 0x3b, 0xa6, 0x73, - 0xd3, 0xbf, 0x07, 0x88, 0x2e, 0x7f, 0xed, 0xff, - 0x7f, 0x61, 0xd7, 0x4e, 0xfc, 0x1e, 0x20, 0xb9, - 0xfc, 0xdf, 0x1d, 0x74, 0xef, 0xc1, 0xe2, 0x0b, - 0x9f, 0x95, 0x7c, 0xf4, 0xef, 0xc1, 0xe2, 0x0b, - 0x9f, 0xff, 0xec, 0x11, 0xfa, 0xba, 0x55, 0x37, - 0xf0, 0xff, 0x7a, 0x2f, 0x83, 0xc4, 0x17, 0x35, - 0x3d, 0x39, 0x4e, 0x89, 0x14, 0x41, 0x5b, 0x11, - 0x05, 0x02, 0x19, 0x56, 0x96, 0xcf, 0x86, 0x51, - 0xec, 0xfe, 0xfb, 0x77, 0xae, 0xab, 0x49, 0xd3, - 0xd8, 0x1e, 0x61, 0xd3, 0xff, 0x6f, 0xfb, 0xfb, - 0x0e, 0xba, 0x77, 0xe0, 0xf1, 0x05, 0xcf, 0xf3, - 0x95, 0x4f, 0xd1, 0xd3, 0xbf, 0x07, 0x88, 0x2e, - 0x7d, 0xaa, 0xb2, 0xba, 0x22, 0x28, 0xfb, 0x2b, - 0x4f, 0xfe, 0xe8, 0x9b, 0xfa, 0x36, 0xab, 0xd3, - 0xbf, 0x07, 0x88, 0x2e, 0x7f, 0xff, 0xe1, 0x1f, - 0xab, 0xa7, 0xb7, 0xd2, 0xa9, 0xbf, 0x87, 0xfb, - 0xd1, 0x7c, 0x1e, 0x20, 0xb8, 0xb4, 0xc9, 0xa9, - 0x43, 0xc5, 0xd9, 0xfe, 0xdf, 0xc3, 0xfd, 0xe8, - 0xbe, 0x0f, 0x10, 0x5c, 0xff, 0xf6, 0x65, 0x2f, - 0xae, 0xff, 0xcf, 0x2c, 0x0c, 0x54, 0xff, 0xad, - 0xef, 0xf6, 0xa0, 0x34, 0x75, 0x1e, 0x20, 0xb8, - 0x44, 0x74, 0x02, 0x4d, 0x54, 0x27, 0xfc, 0x9f, - 0x0d, 0x67, 0x95, 0xe9, 0xc1, 0xe2, 0x0b, 0x9f, - 0xb7, 0xfd, 0xef, 0xfe, 0x1a, 0x00, 0xb9, 0xf5, - 0xf9, 0xd3, 0xbf, 0x07, 0x88, 0x2e, 0x6b, 0xd2, - 0x1f, 0xb6, 0xcf, 0x22, 0x94, 0x78, 0x56, 0x18, - 0x93, 0xf2, 0xaf, 0x9e, 0x9d, 0xf8, 0x3c, 0x41, - 0x73, 0xfe, 0x4d, 0xfc, 0x3f, 0xde, 0x8b, 0xe0, - 0xf1, 0x05, 0xcd, 0x7d, 0x31, 0x11, 0xd5, 0x40, - 0x9f, 0xde, 0xfd, 0x58, 0x34, 0xbc, 0xf1, 0x05, - 0xcf, 0xfa, 0xfe, 0xea, 0xc6, 0xf9, 0xc7, 0x9e, - 0x20, 0xb5, 0x1e, 0x0c, 0x72, 0xbc, 0x1e, 0x06, - 0xfe, 0x1b, 0x0c, 0x7d, 0x35, 0x8c, 0x63, 0x51, - 0x8f, 0x7b, 0x0b, 0x7e, 0x1c, 0x27, 0xde, 0x57, - 0xcf, 0x18, 0xd1, 0x05, 0xad, 0x11, 0xb3, 0xfe, - 0xb7, 0xef, 0x1e, 0xec, 0xed, 0xed, 0x07, 0x4e, - 0x53, 0x3c, 0xe9, 0xf5, 0xf3, 0xbf, 0x78, 0x3a, - 0x41, 0x87, 0x8a, 0x23, 0x73, 0xbf, 0xd5, 0x67, - 0x4e, 0xc0, 0xf0, 0xe9, 0x52, 0xc6, 0xe7, 0x43, - 0xd3, 0xf5, 0xd1, 0x9b, 0x6e, 0xb9, 0xd1, 0xf4, - 0x5a, 0xe2, 0xf0, 0x93, 0xce, 0xc0, 0xa0, 0xe9, - 0xbc, 0x63, 0xa7, 0xbe, 0xca, 0xb3, 0xa0, 0xe9, - 0xfb, 0x3b, 0xe9, 0x83, 0xc3, 0xa3, 0x93, 0x70, - 0x21, 0x53, 0xff, 0xf9, 0xbf, 0xc8, 0xb7, 0xa9, - 0xab, 0x4e, 0x59, 0x3b, 0x28, 0xe9, 0xbc, 0x63, - 0xa6, 0x6e, 0xe7, 0x4f, 0xf5, 0xea, 0xac, 0xae, - 0xd6, 0xe1, 0xd3, 0xfa, 0xb7, 0xbf, 0xd7, 0xda, - 0x0e, 0x9b, 0x8e, 0x0a, 0x9f, 0xe1, 0xb7, 0x58, - 0xfa, 0xff, 0x93, 0xa1, 0x13, 0xf9, 0xf8, 0xd8, - 0x0b, 0x29, 0x63, 0x64, 0x3e, 0x30, 0xbb, 0x82, - 0xc2, 0x2f, 0x53, 0xae, 0x0d, 0x7b, 0x0c, 0x4e, - 0xe3, 0x8e, 0x0a, 0x92, 0x8a, 0x59, 0x7f, 0x3e, - 0xc7, 0x33, 0x00, 0xa5, 0xa3, 0x77, 0xb4, 0x2f, - 0xa7, 0xf5, 0x3a, 0x6b, 0xdd, 0xd0, 0x74, 0x33, - 0x66, 0xed, 0x71, 0xb4, 0xf7, 0x42, 0xa4, 0xc3, - 0xf0, 0xf5, 0x03, 0xed, 0xc7, 0x91, 0x94, 0x99, - 0x51, 0x49, 0xac, 0x68, 0x1e, 0xcb, 0x04, 0x74, - 0x97, 0x3d, 0x68, 0xda, 0x3a, 0x7a, 0xd5, 0x7a, - 0x3a, 0x7f, 0xed, 0xfb, 0x47, 0xab, 0xdf, 0xd3, - 0x00, 0xe9, 0xec, 0xa3, 0xb3, 0xce, 0x86, 0x45, - 0x4d, 0x23, 0xfa, 0x20, 0x76, 0x46, 0x9f, 0x87, - 0xde, 0x55, 0x8f, 0x3a, 0x7f, 0xfa, 0x97, 0x8b, - 0x74, 0x50, 0xb7, 0x7d, 0x7e, 0x83, 0xa7, 0xf5, - 0x74, 0xea, 0xc6, 0xf9, 0x3a, 0x19, 0x16, 0xdf, - 0x2e, 0xc5, 0x49, 0xd9, 0xd3, 0xb1, 0xd3, 0xff, - 0xc2, 0xfe, 0x97, 0xcf, 0xeb, 0x4e, 0xbd, 0xca, - 0x9d, 0x1d, 0x0f, 0xce, 0xc7, 0xe7, 0xea, 0x1c, - 0x7f, 0x58, 0x14, 0x1d, 0x33, 0xe8, 0x3a, 0x7d, - 0xbb, 0xfb, 0xea, 0x74, 0xff, 0xf6, 0xdb, 0xb2, - 0xf4, 0x39, 0xe5, 0x6a, 0xde, 0x15, 0x3f, 0xbc, - 0xb0, 0x4c, 0xc4, 0x3c, 0x40, 0x93, 0xb5, 0xfa, - 0x0e, 0x87, 0xa3, 0x4b, 0x92, 0x70, 0x52, 0x51, - 0xe4, 0xce, 0xcf, 0x3a, 0x7b, 0x54, 0x60, 0x9d, - 0x3d, 0x4d, 0x73, 0x47, 0x45, 0x07, 0xb9, 0x63, - 0x3b, 0x21, 0x9f, 0xc3, 0x9c, 0x56, 0xad, 0xe1, - 0xd3, 0xb8, 0xe3, 0x83, 0xd5, 0xf5, 0x3b, 0x07, - 0x92, 0xd5, 0xf4, 0x59, 0xac, 0x8e, 0x51, 0x31, - 0xe2, 0xfc, 0xff, 0xfa, 0xc7, 0xfd, 0xd7, 0x5d, - 0x6f, 0xdc, 0x7b, 0xd8, 0xe8, 0xa0, 0xff, 0x3b, - 0x92, 0xcf, 0xb0, 0x47, 0xea, 0x3a, 0x3a, 0xda, - 0xb4, 0x47, 0x9a, 0xdc, 0x3a, 0x7f, 0x09, 0x9c, - 0x8d, 0x0c, 0x49, 0x67, 0xdf, 0xd3, 0x6a, 0xa5, - 0x4f, 0x23, 0x6a, 0xa5, 0x4d, 0xc7, 0x05, 0x43, - 0xcf, 0x7e, 0xc9, 0xf8, 0x20, 0x9a, 0xf8, 0x29, - 0x66, 0xbe, 0x7f, 0xfd, 0x7a, 0x64, 0xbb, 0x1d, - 0x6f, 0xec, 0x34, 0x1d, 0x1e, 0x1f, 0xbf, 0x04, - 0xd3, 0xff, 0xf9, 0x9d, 0x7c, 0x7c, 0xe9, 0xaa, - 0xda, 0x6f, 0x07, 0x55, 0x3a, 0x7f, 0x39, 0x4b, - 0xf7, 0xeb, 0x01, 0xd3, 0x9f, 0x80, 0x74, 0xf9, - 0xf7, 0xab, 0xe4, 0xa9, 0x7d, 0xc3, 0xc1, 0xd0, - 0xd4, 0xf6, 0xbb, 0xde, 0xce, 0x9b, 0xc6, 0x3a, - 0x6f, 0x18, 0xe9, 0xf7, 0xaf, 0xb1, 0x5f, 0xcd, - 0x67, 0x82, 0xd0, 0xc8, 0x8e, 0x14, 0xf9, 0xff, - 0xb5, 0xbb, 0x57, 0x66, 0xf2, 0xe9, 0xd1, 0xd3, - 0xfa, 0x94, 0xf8, 0x76, 0x6e, 0x4e, 0x9e, 0xf1, - 0x58, 0xfa, 0x9f, 0xe6, 0x91, 0xe7, 0x75, 0x5d, - 0x27, 0x4f, 0x78, 0x1f, 0x03, 0xa1, 0x8f, 0xeb, - 0x0e, 0xb8, 0x1f, 0x9e, 0xaf, 0xb4, 0xe8, 0xe9, - 0xdc, 0x71, 0xc1, 0x53, 0xeb, 0xee, 0x3e, 0xd4, - 0xa5, 0x97, 0xf3, 0xeb, 0x5f, 0x1c, 0x70, 0x74, - 0x31, 0xf1, 0x68, 0xe2, 0x7b, 0x8c, 0x17, 0x9d, - 0x3f, 0xda, 0x6a, 0x7c, 0xcd, 0xef, 0xe7, 0x4b, - 0x67, 0x45, 0x9e, 0x52, 0x1d, 0x4e, 0xe3, 0x8e, - 0x0a, 0x9f, 0xbf, 0x9d, 0xf7, 0xfd, 0x14, 0xb2, - 0xfe, 0x7d, 0x7e, 0x5d, 0xb8, 0x74, 0xab, 0xd1, - 0x14, 0x80, 0x7e, 0x27, 0xd3, 0xdf, 0x1f, 0x5f, - 0xca, 0x68, 0xb7, 0x18, 0x7c, 0x32, 0xea, 0x33, - 0xc9, 0x2d, 0x8f, 0xbb, 0xb0, 0x42, 0xdf, 0x71, - 0x8b, 0xe1, 0x75, 0x61, 0x4b, 0xa8, 0xd9, 0xa7, - 0xe6, 0x50, 0x06, 0x68, 0xe9, 0xff, 0xef, 0xaa, - 0x97, 0xd7, 0xa5, 0x88, 0xdf, 0xfc, 0x3a, 0x36, - 0x7f, 0x9a, 0x2a, 0x92, 0xdd, 0xe8, 0x4c, 0x53, - 0xf5, 0xa8, 0xa7, 0xad, 0x0a, 0x5a, 0x71, 0x36, - 0x88, 0xef, 0x1f, 0x2a, 0xa7, 0x99, 0x64, 0xb7, - 0x5c, 0x53, 0x77, 0x8e, 0x35, 0x25, 0x4c, 0xd3, - 0x2b, 0xe3, 0xf1, 0xe4, 0x39, 0x3d, 0xf6, 0x13, - 0xb7, 0xea, 0x95, 0xeb, 0xba, 0x41, 0x2e, 0x53, - 0xff, 0x3c, 0x97, 0x14, 0x33, 0xe4, 0x75, 0xad, - 0x3f, 0x35, 0x5a, 0x8b, 0x7b, 0x1b, 0xdb, 0xa8, - 0x7b, 0x71, 0x0a, 0x1e, 0xa9, 0x6c, 0xfd, 0xa7, - 0xad, 0xdd, 0xa3, 0x11, 0x85, 0xc2, 0x6e, 0x05, - 0xf8, 0x99, 0x39, 0x9f, 0xcb, 0xb0, 0x4c, 0xc4, - 0x34, 0x5c, 0x73, 0xf9, 0x76, 0x09, 0x98, 0x86, - 0x8b, 0xae, 0x7f, 0xe5, 0xe3, 0xd7, 0x60, 0x99, - 0x88, 0x68, 0x94, 0x61, 0xa1, 0x3d, 0xac, 0xf2, - 0x8e, 0x4e, 0xfb, 0x9d, 0xa1, 0xdf, 0xe1, 0xe3, - 0xd7, 0x3f, 0xcc, 0x4d, 0xe9, 0xd4, 0xe3, 0x47, - 0x6e, 0xc7, 0x73, 0xff, 0x96, 0xac, 0x7a, 0xec, - 0x13, 0x31, 0x0d, 0x12, 0xd4, 0xf8, 0x13, 0x31, - 0x0d, 0x11, 0xbc, 0xff, 0xb1, 0xeb, 0xb0, 0x4c, - 0xc4, 0x34, 0x4b, 0xf2, 0x5d, 0x9f, 0xb2, 0x8c, - 0x27, 0xf2, 0xec, 0x13, 0x31, 0x0d, 0x15, 0x5c, - 0xff, 0x77, 0xb1, 0xba, 0x75, 0x8a, 0x3a, 0x6e, - 0x7e, 0x74, 0xfd, 0x60, 0x99, 0x88, 0x68, 0x90, - 0x23, 0xa1, 0xe6, 0x2c, 0x5e, 0x7d, 0x5c, 0x1c, - 0xa4, 0xe8, 0x79, 0xe5, 0x52, 0x49, 0x3f, 0xfa, - 0xdc, 0xde, 0x2b, 0x5b, 0x6d, 0x7a, 0xa3, 0xa3, - 0xba, 0x67, 0xb9, 0x0c, 0xfe, 0xc4, 0x73, 0xff, - 0x0d, 0xd0, 0xbe, 0xa6, 0x11, 0xbd, 0x1d, 0x0b, - 0x3f, 0xd0, 0x39, 0x9f, 0xcb, 0xb0, 0x4c, 0xc4, - 0x34, 0x59, 0x13, 0xf9, 0x76, 0x09, 0x98, 0x86, - 0x8b, 0x5e, 0x7f, 0x2e, 0xc1, 0x33, 0x10, 0xd1, - 0x72, 0x4f, 0x81, 0x33, 0x10, 0xd1, 0x76, 0x4f, - 0xfb, 0x1e, 0xbb, 0x04, 0xcc, 0x43, 0x45, 0x1d, - 0x25, 0xd9, 0xfb, 0x28, 0xc2, 0x7c, 0x09, 0x98, - 0x86, 0x8a, 0x56, 0x7f, 0xff, 0xfb, 0x6d, 0x43, - 0x6f, 0xee, 0xb3, 0x9d, 0xfd, 0x69, 0xbf, 0xb9, - 0xb6, 0xa2, 0xce, 0x9f, 0x2d, 0x58, 0xf5, 0xda, - 0x2c, 0x9c, 0x30, 0x8a, 0x17, 0x51, 0x5f, 0x0c, - 0x8a, 0x49, 0xff, 0x1f, 0xaa, 0x88, 0x7c, 0x3b, - 0xa9, 0xde, 0xa1, 0x62, 0xea, 0x1b, 0x33, 0xfc, - 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x23, 0x89, 0xfe, - 0xfa, 0xec, 0x13, 0x31, 0x0d, 0x15, 0xac, 0x97, - 0x88, 0x82, 0xd2, 0x0c, 0xff, 0xe5, 0xab, 0x1e, - 0xbb, 0x04, 0xcc, 0x43, 0x44, 0xb7, 0x35, 0xd2, - 0x74, 0xfe, 0xe6, 0xd4, 0xa6, 0xfd, 0x4e, 0x8a, - 0x4f, 0x27, 0xe2, 0xd3, 0xb7, 0xcb, 0xce, 0x9c, - 0xf5, 0x21, 0xd3, 0xff, 0xf6, 0xf2, 0x9f, 0x39, - 0xde, 0x3e, 0xea, 0x3e, 0xe7, 0x63, 0xa0, 0xd1, - 0x0d, 0xcf, 0xfb, 0x1e, 0xbb, 0x04, 0xcc, 0x43, - 0x44, 0xc1, 0x38, 0x3d, 0xf0, 0xa9, 0xfc, 0x37, - 0xad, 0x30, 0x54, 0xe9, 0x2d, 0x93, 0x64, 0xa0, - 0x8f, 0x91, 0xdb, 0x1b, 0x45, 0xf5, 0x0b, 0xe9, - 0x1b, 0xb0, 0xec, 0xe5, 0x7a, 0x05, 0x4f, 0xfb, - 0x1e, 0xbb, 0x04, 0xcc, 0x43, 0x44, 0xc7, 0x25, - 0xfc, 0xf8, 0x94, 0x39, 0x3f, 0x35, 0x7a, 0x6a, - 0xf6, 0x74, 0xe6, 0x1a, 0x0e, 0x9f, 0xff, 0xfe, - 0x7d, 0x77, 0x7e, 0xf1, 0x5d, 0xda, 0x5d, 0x7a, - 0x5d, 0x2f, 0xaf, 0xc7, 0xe7, 0x4f, 0x26, 0x62, - 0x1a, 0x2b, 0x19, 0xff, 0x75, 0x5e, 0x86, 0xfd, - 0x61, 0xd1, 0xd1, 0xdd, 0x33, 0x44, 0x2e, 0xa4, - 0x6c, 0x21, 0x03, 0xa2, 0xb9, 0xff, 0xcc, 0x3a, - 0xef, 0xeb, 0x0d, 0xa3, 0x01, 0xd3, 0xfd, 0xce, - 0xee, 0xb4, 0xbd, 0xb6, 0x74, 0xff, 0x35, 0x2f, - 0x71, 0xf8, 0x14, 0x1d, 0x16, 0x7e, 0x9f, 0x3a, - 0x9f, 0xf5, 0xf2, 0x1f, 0xf6, 0x8f, 0x2a, 0xf3, - 0xa7, 0xff, 0xfe, 0x1f, 0x68, 0xb4, 0xe8, 0x3e, - 0xbb, 0x74, 0xba, 0x5f, 0x7e, 0x8f, 0x95, 0x3a, - 0x7f, 0x75, 0xba, 0x1c, 0x7f, 0x58, 0x14, 0x1d, - 0x3f, 0xfa, 0xdc, 0xde, 0x2b, 0x5b, 0x6d, 0x7a, - 0xa3, 0xa7, 0x6f, 0xeb, 0xb5, 0x4e, 0xe8, 0xa3, - 0xb8, 0x5d, 0x89, 0x0e, 0x90, 0xba, 0x9f, 0x3b, - 0x20, 0xcd, 0xdb, 0xc3, 0xa6, 0xf5, 0xc3, 0xa7, - 0xd8, 0x34, 0x7b, 0x53, 0xa3, 0xc3, 0xd9, 0x11, - 0x9a, 0x8c, 0x4f, 0xbd, 0xa6, 0x86, 0xee, 0x74, - 0xf9, 0x56, 0x2c, 0xf3, 0xa7, 0x98, 0x30, 0x4e, - 0x9e, 0xad, 0x5b, 0xc3, 0xa1, 0x8f, 0x97, 0x64, - 0xbc, 0x0f, 0x4f, 0x99, 0xfe, 0x7a, 0xf3, 0xa7, - 0x30, 0xbc, 0xe8, 0x70, 0xf0, 0xf4, 0x53, 0x3b, - 0x7d, 0x94, 0x74, 0xfc, 0xca, 0xb1, 0xff, 0x73, - 0xa5, 0x53, 0xa3, 0xe6, 0xf7, 0x0b, 0x66, 0xf1, - 0x8a, 0x9b, 0x8e, 0x0a, 0x8f, 0x9a, 0xee, 0x05, - 0xa7, 0xf6, 0x3c, 0x6f, 0x5b, 0xf9, 0x4b, 0x34, - 0x53, 0xdc, 0xe5, 0x35, 0x3a, 0x73, 0x0b, 0x87, - 0x4c, 0x2c, 0x74, 0x38, 0x6b, 0xc0, 0x6e, 0x7f, - 0xee, 0xff, 0x14, 0xab, 0x2b, 0x29, 0xd1, 0xd3, - 0xbc, 0xb7, 0x63, 0xa3, 0xb9, 0xf2, 0x02, 0x2c, - 0xbb, 0x9d, 0x30, 0x77, 0x3a, 0x3e, 0x6a, 0x7b, - 0x09, 0x43, 0x26, 0x8d, 0x6a, 0x5f, 0x84, 0x2e, - 0xd3, 0x26, 0xde, 0x8e, 0x9f, 0xbc, 0x6d, 0xdb, - 0xac, 0x3a, 0x7e, 0xfe, 0xaf, 0x79, 0xdc, 0xe9, - 0xdc, 0x71, 0xc1, 0x53, 0xff, 0x5a, 0x72, 0xd4, - 0x76, 0xbd, 0xe5, 0x25, 0x2c, 0xbf, 0x9e, 0xf8, - 0x3b, 0x72, 0x74, 0x80, 0xe9, 0xf2, 0xbf, 0xaf, - 0x30, 0xe8, 0xa0, 0xf7, 0x3a, 0xe4, 0xbe, 0x87, - 0xcf, 0xe4, 0xfd, 0x46, 0xdd, 0x61, 0xd3, 0x5e, - 0x8e, 0x8a, 0x4f, 0x1f, 0x66, 0x53, 0xda, 0x1b, - 0x79, 0xd3, 0xff, 0xbf, 0x5d, 0xdf, 0x23, 0x6e, - 0x86, 0xea, 0x74, 0x01, 0xf5, 0x68, 0x82, 0x4b, - 0x65, 0xe5, 0x4a, 0x0b, 0xf9, 0x84, 0x8d, 0xb9, - 0x7c, 0x8c, 0x16, 0xd4, 0xe1, 0xb8, 0xe1, 0xf1, - 0x07, 0xc1, 0x67, 0x70, 0xb8, 0x53, 0x6b, 0x0b, - 0x1d, 0x3e, 0x76, 0x84, 0x6c, 0xf8, 0x13, 0x31, - 0x0d, 0x15, 0xbc, 0xff, 0xb1, 0xeb, 0xb0, 0x4c, - 0xc4, 0x34, 0x4e, 0x12, 0x5d, 0x9f, 0xb2, 0x8c, - 0x26, 0xf7, 0x67, 0x4f, 0x81, 0x33, 0x10, 0xd1, - 0x68, 0xcd, 0xfe, 0xe7, 0x4f, 0xff, 0xa8, 0x6d, - 0x37, 0x20, 0xdb, 0xca, 0x8d, 0xf8, 0x74, 0xff, - 0x9a, 0x9c, 0xeb, 0xec, 0x73, 0xaf, 0x41, 0xd0, - 0xc8, 0x9a, 0xda, 0xa4, 0xad, 0xc4, 0x6a, 0x56, - 0x16, 0x52, 0x5b, 0xbc, 0x9a, 0x4d, 0x8b, 0xee, - 0x30, 0x49, 0xe4, 0xcc, 0x43, 0x45, 0xb5, 0x3f, - 0x6d, 0x94, 0xdf, 0xe4, 0xe9, 0x58, 0x1e, 0xc6, - 0x8a, 0xe7, 0xf9, 0x7d, 0xfb, 0xe0, 0x73, 0xe8, - 0x9d, 0x0b, 0x3e, 0x3f, 0x09, 0xa7, 0xf2, 0xec, - 0x13, 0x31, 0x0d, 0x17, 0x2c, 0xfe, 0x5d, 0x82, - 0x66, 0x21, 0xa2, 0xed, 0x86, 0x6c, 0x9a, 0xe8, - 0x28, 0x7c, 0x7f, 0xfc, 0xc3, 0x6f, 0xbc, 0xbd, - 0x3f, 0xcf, 0x96, 0x75, 0xe3, 0x65, 0xdc, 0x6e, - 0x03, 0x0f, 0xca, 0x91, 0xe8, 0xee, 0x7f, 0x2e, - 0xc1, 0x33, 0x10, 0xd1, 0x53, 0xcd, 0xfd, 0x1d, - 0x3c, 0x99, 0x88, 0x68, 0xae, 0x67, 0xf2, 0xec, - 0x13, 0x31, 0x0d, 0x16, 0x74, 0x01, 0xf3, 0x6c, - 0xae, 0x7c, 0x09, 0x98, 0x86, 0x89, 0x0a, 0x7f, - 0xbf, 0x4d, 0x74, 0x2c, 0xaa, 0x9d, 0x33, 0xd7, - 0x67, 0xd3, 0xe1, 0x84, 0xf3, 0xbd, 0xb6, 0x51, - 0xd3, 0xfa, 0xf7, 0x5a, 0xd8, 0x50, 0x74, 0x97, - 0xca, 0x71, 0x96, 0xf9, 0x90, 0x8a, 0xa9, 0x76, - 0x89, 0xa7, 0xff, 0x2d, 0x58, 0xf5, 0xd8, 0x26, - 0x62, 0x1a, 0x27, 0xc8, 0x45, 0x4d, 0xdd, 0x78, - 0xf1, 0xf6, 0xab, 0x3e, 0x04, 0xcc, 0x43, 0x45, - 0x65, 0x3f, 0xec, 0x7a, 0xec, 0x13, 0x31, 0x0d, - 0x13, 0x74, 0xdf, 0x5d, 0x9f, 0xb2, 0x8c, 0x27, - 0xc0, 0x99, 0x88, 0x68, 0x95, 0xa7, 0xfb, 0xbe, - 0xff, 0xd3, 0xd4, 0xba, 0x9d, 0x3e, 0x5a, 0xb1, - 0xeb, 0xb3, 0xed, 0xc3, 0x09, 0xff, 0x7e, 0xbe, - 0xa8, 0x7e, 0xeb, 0xdc, 0x3a, 0x7f, 0x0b, 0x05, - 0xba, 0xc5, 0x1d, 0x0f, 0x3f, 0x3f, 0xa1, 0x4f, - 0x81, 0x33, 0x10, 0xd1, 0x2e, 0x4f, 0xf7, 0xf1, - 0xfa, 0x16, 0x55, 0x4e, 0x9e, 0x75, 0xf1, 0x63, - 0xa7, 0xcb, 0x56, 0x3d, 0x6c, 0x8a, 0xbb, 0x22, - 0xd9, 0x86, 0x1b, 0xcf, 0xfc, 0xbc, 0x7a, 0xec, - 0x13, 0x31, 0x0d, 0x11, 0xdc, 0xff, 0x6b, 0x76, - 0xf5, 0xe0, 0xd4, 0xe9, 0xfb, 0xac, 0x16, 0x4b, - 0x13, 0xa6, 0xf7, 0x67, 0x4f, 0xce, 0xf8, 0xde, - 0xf3, 0x47, 0x4f, 0xeb, 0xe2, 0xac, 0x3a, 0xa9, - 0xd3, 0xe0, 0x4c, 0xc4, 0x34, 0x54, 0x33, 0xdb, - 0xd5, 0xd0, 0x74, 0xfa, 0xe8, 0xc1, 0x74, 0x74, - 0xff, 0xff, 0xfe, 0x67, 0xf4, 0xd6, 0xfe, 0xd5, - 0xe9, 0x7e, 0xa3, 0x3a, 0xe9, 0x60, 0x16, 0xeb, - 0xdc, 0xd9, 0xd1, 0x68, 0xe0, 0x12, 0x2a, 0x94, - 0x4f, 0xff, 0xf7, 0xb9, 0xd7, 0xfd, 0x1b, 0xcf, - 0xe9, 0xb7, 0xfd, 0x56, 0xf9, 0x3a, 0x4b, 0x77, - 0xd5, 0x29, 0x3b, 0xc5, 0xdd, 0x60, 0xbd, 0x06, - 0x16, 0x65, 0xa8, 0xc4, 0x3a, 0x8b, 0xa7, 0xc0, - 0x99, 0x88, 0x68, 0xaa, 0x27, 0xfd, 0x8f, 0x5d, - 0x82, 0x66, 0x21, 0xa2, 0x6b, 0x92, 0xec, 0xfd, - 0x94, 0x61, 0x3f, 0x97, 0x60, 0x99, 0x88, 0x68, - 0xab, 0x27, 0xfe, 0x5e, 0x3d, 0x76, 0x09, 0x98, - 0x86, 0x89, 0x12, 0x7c, 0x09, 0x98, 0x86, 0x8b, - 0x4a, 0x7f, 0xd8, 0xf5, 0xd8, 0x26, 0x62, 0x1a, - 0x27, 0xd9, 0x2e, 0xcf, 0xd9, 0x46, 0x13, 0xff, - 0x96, 0xac, 0x7a, 0xec, 0x13, 0x31, 0x0d, 0x14, - 0x24, 0xfb, 0x7f, 0xa1, 0x80, 0xe9, 0xf0, 0x26, - 0x62, 0x1a, 0x28, 0xf9, 0xff, 0x0b, 0x38, 0xc2, - 0xce, 0x6d, 0x8e, 0x9f, 0xff, 0xaf, 0x9d, 0xb7, - 0x65, 0xe8, 0x73, 0xca, 0xd5, 0xbc, 0x2a, 0x7c, - 0xb5, 0x63, 0xd6, 0xc8, 0xf1, 0xb2, 0x7d, 0x18, - 0x75, 0x1e, 0x43, 0x32, 0x1a, 0xa8, 0x8d, 0x6d, - 0xea, 0xf6, 0x99, 0xde, 0x54, 0x4a, 0x43, 0xea, - 0x92, 0x77, 0x0e, 0xf7, 0x0c, 0x2f, 0x09, 0xf5, - 0x1a, 0x1c, 0xfe, 0x5d, 0x82, 0x66, 0x21, 0xa2, - 0x22, 0x9f, 0xac, 0x13, 0x31, 0x0d, 0x11, 0x5c, - 0xff, 0x75, 0xd7, 0x60, 0x99, 0x88, 0x68, 0xae, - 0x21, 0x67, 0xf5, 0x86, 0xb3, 0xd7, 0xbc, 0xd1, - 0xd3, 0xfa, 0xfe, 0x1e, 0x79, 0xed, 0x4e, 0x93, - 0xbe, 0x27, 0xab, 0x52, 0x09, 0xff, 0xfb, 0x55, - 0xfe, 0xf3, 0xef, 0xf8, 0xeb, 0xdd, 0x85, 0x9d, - 0x3e, 0x04, 0xcc, 0x43, 0x45, 0x3d, 0x3f, 0x5d, - 0x7a, 0x0e, 0x3c, 0xe8, 0xeb, 0x11, 0xc8, 0xc5, - 0x96, 0xb6, 0x26, 0x13, 0xff, 0xb1, 0xeb, 0xe4, - 0x73, 0x8a, 0xd5, 0xbc, 0x3a, 0x16, 0x88, 0xae, - 0x4f, 0xe7, 0x2f, 0x9b, 0x3a, 0x7c, 0xcf, 0xf3, - 0xd7, 0x9d, 0x3c, 0x99, 0x88, 0x68, 0xac, 0xe1, - 0xc3, 0xd4, 0x02, 0x99, 0xfa, 0x85, 0x30, 0xbe, - 0xa7, 0x4e, 0x6a, 0x3e, 0x74, 0xfb, 0x5e, 0x76, - 0x17, 0x9d, 0x3b, 0xdc, 0xa9, 0xd3, 0xeb, 0x72, - 0x8f, 0x7c, 0x3a, 0x4b, 0xb4, 0x6e, 0x01, 0x16, - 0xcb, 0x70, 0x70, 0x4a, 0xbb, 0x0e, 0x4f, 0xfc, - 0xbc, 0x7a, 0xec, 0x13, 0x31, 0x0d, 0x12, 0x2c, - 0xfd, 0x60, 0x99, 0x88, 0x68, 0xb2, 0x67, 0xff, - 0x6a, 0xbd, 0xaa, 0xbb, 0xa3, 0xe2, 0xfa, 0x9d, - 0x0b, 0x44, 0x15, 0x9a, 0xcf, 0xe5, 0xd8, 0x26, - 0x62, 0x1a, 0x2d, 0x89, 0xd7, 0x5b, 0x3a, 0x79, - 0x33, 0x10, 0xd1, 0x6d, 0xcf, 0x56, 0x8c, 0x03, - 0xa0, 0x0f, 0x33, 0x45, 0x72, 0x5b, 0xd1, 0x0f, - 0x6c, 0xd3, 0xa8, 0xdf, 0xce, 0x9f, 0xf7, 0x59, - 0xd6, 0x3b, 0xad, 0x6e, 0xc5, 0xbc, 0x3a, 0x7e, - 0x61, 0x7f, 0x3e, 0xa8, 0xe9, 0xf0, 0x26, 0x62, - 0x1a, 0x2f, 0x09, 0xed, 0x75, 0x5e, 0xce, 0x9f, - 0xf9, 0xbb, 0x2a, 0x97, 0xea, 0xc7, 0x55, 0x3a, - 0x7d, 0x63, 0xe3, 0xb3, 0x1d, 0x3e, 0x6e, 0xde, - 0xe5, 0x4e, 0x9d, 0xa6, 0xf0, 0xe9, 0x2f, 0xac, - 0x4e, 0x87, 0xad, 0x43, 0xb4, 0x27, 0x59, 0x75, - 0x26, 0x1b, 0x24, 0xf1, 0x18, 0x4a, 0x74, 0x53, - 0x3b, 0xf7, 0x49, 0xd3, 0xe0, 0x4c, 0xc4, 0x34, - 0x5e, 0x93, 0xfe, 0x1c, 0xd3, 0xdb, 0xbe, 0xbf, - 0x41, 0xd3, 0xeb, 0x56, 0xf3, 0x93, 0xa4, 0xbe, - 0x51, 0x67, 0x63, 0x9d, 0x8c, 0x1d, 0x90, 0x21, - 0x99, 0x2d, 0xb4, 0x42, 0xd6, 0xe3, 0xe4, 0x42, - 0x4f, 0xc6, 0x98, 0x0b, 0x6a, 0x86, 0x77, 0x84, - 0x43, 0x0c, 0x2f, 0x63, 0xc9, 0xe2, 0x34, 0x69, - 0xbd, 0xd9, 0xd3, 0xd7, 0xbc, 0xd1, 0xd3, 0xfa, - 0xfe, 0x1e, 0x79, 0xed, 0x4e, 0x93, 0xbe, 0x27, - 0xab, 0x52, 0x09, 0xf7, 0xf4, 0xd4, 0xd0, 0x74, - 0xf8, 0x13, 0x31, 0x0d, 0x11, 0x1c, 0xff, 0xf6, - 0xfd, 0xad, 0x6d, 0x43, 0x6e, 0xba, 0x33, 0xbb, - 0x3a, 0x7f, 0xcf, 0x6a, 0x02, 0xf5, 0xaf, 0xe8, - 0xe9, 0xfe, 0xb0, 0xba, 0xde, 0x0d, 0x07, 0x4f, - 0xff, 0xf3, 0x6f, 0x3f, 0xa6, 0xd8, 0xde, 0xb7, - 0xfd, 0xdf, 0xf8, 0x3a, 0x6a, 0x14, 0x54, 0xdc, - 0x70, 0x54, 0xff, 0x96, 0x9b, 0xfb, 0x9b, 0x6a, - 0x17, 0xe1, 0xaf, 0xe0, 0x5e, 0x79, 0xd3, 0x69, - 0x8e, 0x87, 0x9f, 0xdf, 0xd6, 0x67, 0xee, 0xb8, - 0xde, 0xf3, 0x47, 0x4f, 0xcd, 0xde, 0xc7, 0xfd, - 0xce, 0x9f, 0xaf, 0x4e, 0xda, 0xbd, 0x9d, 0x16, - 0x88, 0xd1, 0x2f, 0xa9, 0x7c, 0xff, 0xfc, 0x8b, - 0x0c, 0x1f, 0xe9, 0x60, 0xda, 0x1c, 0xf0, 0xe8, - 0x77, 0x97, 0x00, 0x3a, 0xc6, 0xc6, 0x2c, 0xb2, - 0x94, 0x30, 0xa5, 0x67, 0xe7, 0xc0, 0x6b, 0x91, - 0x87, 0xea, 0x15, 0xee, 0x8b, 0xa7, 0xc0, 0x99, - 0x88, 0x68, 0x8b, 0xa7, 0xda, 0xf3, 0xb0, 0xbc, - 0xa9, 0x2e, 0xcf, 0x6b, 0x0c, 0x21, 0x69, 0x97, - 0x3e, 0x30, 0x89, 0xff, 0x95, 0x8f, 0x5d, 0x82, - 0x66, 0x21, 0xa2, 0x66, 0x9f, 0xba, 0xd1, 0xdd, - 0x3b, 0xf5, 0x6d, 0x1d, 0x3a, 0x96, 0xa9, 0xd3, - 0x93, 0xea, 0x3a, 0x6e, 0xae, 0xb6, 0x74, 0xfd, - 0xab, 0xa2, 0xfc, 0x70, 0xe8, 0xeb, 0x67, 0x9c, - 0xe0, 0xfc, 0xf9, 0x33, 0x7f, 0x70, 0xe9, 0xff, - 0xf7, 0x94, 0xbf, 0x7e, 0xb0, 0x2f, 0x7f, 0x4c, - 0x03, 0xa7, 0xfe, 0x76, 0xfe, 0xbe, 0x9f, 0xe7, - 0x56, 0x87, 0x4f, 0xff, 0xf7, 0xb8, 0x28, 0x37, - 0xce, 0xfd, 0xe9, 0xb6, 0x78, 0x35, 0x07, 0x43, - 0x26, 0x0b, 0x6a, 0xdb, 0x47, 0x9f, 0xff, 0x73, - 0xf1, 0xa2, 0xeb, 0xfc, 0xda, 0xf8, 0xe3, 0x82, - 0xa7, 0xea, 0x5f, 0x5f, 0x3d, 0x70, 0xe9, 0xe4, - 0xcc, 0x43, 0x45, 0x9f, 0x3f, 0xef, 0xed, 0x9f, - 0xfd, 0x36, 0xaa, 0x74, 0xff, 0xf7, 0xc3, 0x79, - 0xd2, 0xdd, 0x0d, 0xd6, 0xc4, 0xe9, 0xdc, 0x71, - 0xc1, 0x53, 0xfe, 0xc7, 0xd4, 0x6d, 0x39, 0xb0, - 0x29, 0x65, 0xfc, 0xff, 0x36, 0xff, 0xc8, 0xe6, - 0x38, 0x74, 0xff, 0x7c, 0x79, 0xed, 0xcf, 0xba, - 0xa9, 0xd0, 0x8a, 0x88, 0xdc, 0x5a, 0x03, 0x25, - 0x15, 0xec, 0xfb, 0xc6, 0xed, 0x25, 0x3a, 0x38, - 0x9f, 0xe0, 0xce, 0x37, 0xf6, 0x06, 0x3a, 0x7f, - 0xff, 0xfe, 0xbb, 0xf2, 0xb7, 0x63, 0xdf, 0xb0, - 0x0b, 0x5e, 0xd7, 0x51, 0xba, 0x15, 0x6a, 0x3a, - 0x75, 0x5a, 0x83, 0xa7, 0x75, 0x5e, 0xce, 0x87, - 0xa3, 0x0a, 0xb0, 0x88, 0xd0, 0xe4, 0xed, 0xfb, - 0xc1, 0xd3, 0xbc, 0xf5, 0x0e, 0x9d, 0xab, 0xec, - 0x74, 0x72, 0x7b, 0x14, 0x8f, 0x7c, 0x76, 0x7e, - 0x0f, 0xba, 0xb1, 0xa9, 0xd3, 0xed, 0x8b, 0x58, - 0x19, 0x3f, 0xef, 0x83, 0xec, 0x28, 0xf7, 0x39, - 0x34, 0x41, 0xab, 0x34, 0x93, 0xec, 0x4f, 0xa9, - 0x8e, 0x9f, 0x9f, 0xb1, 0xca, 0x74, 0x74, 0xad, - 0x0f, 0x48, 0x49, 0x67, 0xfe, 0xb1, 0xa7, 0x56, - 0x1f, 0xa3, 0x14, 0x74, 0xdf, 0x13, 0xa7, 0xec, - 0xe3, 0x57, 0xbd, 0x31, 0xec, 0x77, 0x43, 0x86, - 0x4f, 0x09, 0xea, 0x37, 0x0a, 0xe1, 0x7d, 0x9f, - 0x82, 0xf9, 0xae, 0xd8, 0xe9, 0xff, 0xfd, 0xe8, - 0xe7, 0x7e, 0x9d, 0x87, 0x35, 0x5f, 0xd3, 0xbf, - 0xf0, 0x74, 0xff, 0x95, 0x7a, 0xaf, 0x6a, 0xe3, - 0xec, 0xe9, 0xfa, 0xb5, 0x60, 0xd3, 0x1c, 0xb3, - 0x7f, 0x3d, 0xbb, 0xfb, 0xa3, 0xa7, 0xea, 0xfc, - 0x2f, 0xd0, 0x3a, 0x3e, 0x88, 0xad, 0x9d, 0xe8, - 0x8e, 0x65, 0x3b, 0xe6, 0x8b, 0xf2, 0x7f, 0xe7, - 0xeb, 0xd7, 0xbd, 0x5a, 0xd3, 0x28, 0xe9, 0xff, - 0xbf, 0x63, 0x77, 0x5e, 0x8f, 0xaa, 0x8e, 0x8a, - 0x51, 0x15, 0x54, 0x69, 0xbe, 0xe1, 0xd3, 0xb5, - 0xfa, 0x0e, 0x9c, 0x2c, 0x87, 0x47, 0x43, 0xcd, - 0x50, 0xb8, 0x8e, 0xc3, 0x27, 0x07, 0xc9, 0x85, - 0xc2, 0xcb, 0x1c, 0x67, 0xff, 0xfe, 0x76, 0x6d, - 0xfd, 0x4b, 0x71, 0xf8, 0x1d, 0xb7, 0xfa, 0x6a, - 0x9f, 0xa0, 0xe9, 0xee, 0x32, 0xea, 0x74, 0xff, - 0x3d, 0x58, 0xfd, 0x55, 0xbb, 0x9d, 0x0c, 0x7b, - 0x78, 0x43, 0x3d, 0x75, 0xf8, 0x9d, 0x02, 0x78, - 0x1e, 0x90, 0x4f, 0x76, 0xf7, 0x2a, 0x74, 0xfc, - 0xed, 0xab, 0xc1, 0x43, 0xa7, 0xfa, 0xbe, 0x7e, - 0x9a, 0x5f, 0x7a, 0x3a, 0x36, 0x7d, 0x3a, 0x2d, - 0x86, 0x45, 0x7d, 0xc2, 0x36, 0x67, 0x3d, 0x3a, - 0x4a, 0x3a, 0x29, 0x35, 0x0e, 0xe0, 0xc4, 0xfe, - 0xcc, 0xa5, 0xe2, 0xdc, 0x9d, 0x3f, 0xf8, 0x7e, - 0xd5, 0x1c, 0x7f, 0x4a, 0xd8, 0x1d, 0x3f, 0xff, - 0xed, 0xfe, 0x9d, 0x5d, 0x3a, 0x00, 0x6d, 0x79, - 0xd8, 0x5f, 0xbb, 0x3a, 0x7b, 0x9e, 0x70, 0x4e, - 0x9f, 0xf6, 0x6d, 0x3f, 0x9d, 0x2b, 0x9b, 0x3a, - 0x19, 0x37, 0x0e, 0x49, 0xec, 0xc9, 0x12, 0x3e, - 0xdf, 0xb2, 0x29, 0xff, 0xac, 0x69, 0xd5, 0x87, - 0xe8, 0xc5, 0x1d, 0x3e, 0xbd, 0x3d, 0x5b, 0x3a, - 0x7d, 0x4d, 0x45, 0x94, 0x74, 0x32, 0x24, 0x6a, - 0x87, 0xe9, 0x3c, 0xde, 0x6c, 0xe9, 0xfa, 0x87, - 0x1f, 0xd6, 0x05, 0x07, 0x4f, 0xee, 0xfb, 0xbd, - 0x6f, 0xfa, 0x3a, 0x6f, 0x81, 0xd1, 0xd6, 0xcf, - 0xff, 0xe6, 0xbb, 0x35, 0x9f, 0xfb, 0x96, 0xe4, - 0x1b, 0x5f, 0x4f, 0xf2, 0x74, 0xfd, 0xbf, 0x68, - 0x73, 0x7f, 0x3a, 0x39, 0x3f, 0x6d, 0xa2, 0xc9, - 0x7d, 0x6d, 0xb1, 0xd9, 0x77, 0x8f, 0xdd, 0xd0, - 0xe3, 0x34, 0xd0, 0x53, 0xcc, 0x65, 0x97, 0x29, - 0x4b, 0xbb, 0xad, 0x30, 0xf8, 0xfc, 0x23, 0x5c, - 0x8f, 0xcc, 0x10, 0x14, 0x59, 0xb9, 0x56, 0xb8, - 0x83, 0xe4, 0x62, 0xa3, 0x0d, 0x1a, 0xc7, 0x7d, - 0xa8, 0x73, 0xf0, 0x61, 0xd5, 0x09, 0x6e, 0xd0, - 0xab, 0x85, 0xb6, 0x76, 0x9b, 0xac, 0x89, 0x67, - 0xff, 0x2d, 0x58, 0xf5, 0xd8, 0x26, 0x62, 0x1a, - 0x26, 0xc9, 0xfc, 0xbb, 0x04, 0xcc, 0x43, 0x45, - 0x5b, 0x3f, 0x9e, 0xff, 0x74, 0x2c, 0xf3, 0xa7, - 0xaf, 0x79, 0xa3, 0xa4, 0xef, 0xd9, 0xe9, 0x89, - 0x9c, 0xf8, 0x13, 0x31, 0x0d, 0x15, 0xa4, 0xff, - 0xf2, 0x30, 0x5f, 0x98, 0xac, 0x7b, 0x7d, 0x0e, - 0x9f, 0xfe, 0x7d, 0x6c, 0x59, 0x59, 0x7a, 0xd3, - 0x28, 0xe9, 0xb5, 0xa6, 0x44, 0xbe, 0x25, 0xcf, - 0xe6, 0x75, 0xdb, 0x42, 0xde, 0x1d, 0x3f, 0x51, - 0x7b, 0xfd, 0xa8, 0xe9, 0xfe, 0xb7, 0x61, 0x6e, - 0x29, 0x7d, 0x4e, 0x9f, 0xcf, 0xbd, 0x60, 0xf9, - 0xe9, 0xd2, 0x5f, 0x58, 0x9f, 0x8d, 0x95, 0xfe, - 0x18, 0xfb, 0x2d, 0xc3, 0x61, 0x2d, 0xd1, 0xe4, - 0xfe, 0x5d, 0x82, 0x66, 0x21, 0xa2, 0xc0, 0x9f, - 0x02, 0x66, 0x21, 0xa2, 0x75, 0x9f, 0xff, 0xdb, - 0x6a, 0x39, 0xb5, 0x2e, 0xb5, 0xbd, 0xfe, 0xbe, - 0xd0, 0x74, 0xf9, 0x6a, 0xc7, 0xae, 0xd1, 0x2a, - 0xe1, 0x84, 0xf8, 0x13, 0x31, 0x0d, 0x16, 0xcc, - 0xff, 0xbc, 0x6a, 0xaf, 0x7f, 0x4c, 0x03, 0xa4, - 0xbb, 0x3e, 0xdc, 0x30, 0x9e, 0x4c, 0xc4, 0x34, - 0x5c, 0xd2, 0x51, 0xd0, 0x06, 0xef, 0x82, 0xb9, - 0x9c, 0x51, 0xd2, 0x5d, 0x9b, 0x8e, 0x08, 0x67, - 0xf2, 0xec, 0x13, 0x31, 0x0d, 0x17, 0x7c, 0xf2, - 0xfb, 0xf3, 0xe1, 0xd0, 0xcd, 0xcf, 0x8d, 0xd6, - 0x7b, 0xc8, 0x65, 0x4a, 0x97, 0xe5, 0x3f, 0x83, - 0x92, 0xa1, 0xa1, 0xe4, 0x2b, 0x6b, 0x09, 0x9d, - 0x13, 0xf6, 0x3b, 0x9f, 0x56, 0xaa, 0xc7, 0x9d, - 0x3f, 0xf5, 0x29, 0xee, 0x53, 0xab, 0xb1, 0xee, - 0x74, 0xe1, 0xc5, 0xb1, 0xf6, 0xe8, 0x9e, 0x7f, - 0x0d, 0x16, 0xed, 0xa6, 0xee, 0x74, 0xf8, 0x13, - 0x31, 0x0d, 0x12, 0xbc, 0xff, 0x87, 0x38, 0xe7, - 0x6d, 0x45, 0xf0, 0x74, 0xf7, 0xb8, 0x0f, 0x3a, - 0x7f, 0xff, 0x7f, 0x58, 0xac, 0x1f, 0x37, 0xc6, - 0x0d, 0x09, 0xfa, 0x0e, 0x8e, 0x51, 0x07, 0x84, - 0x31, 0xca, 0x39, 0xb7, 0x0c, 0x39, 0xd8, 0xf5, - 0xb2, 0x6e, 0xd6, 0x6f, 0x58, 0xc5, 0xa7, 0x69, - 0xb9, 0x2a, 0x7f, 0xf6, 0xf3, 0xfa, 0x67, 0xfc, - 0x28, 0xf7, 0xc2, 0xa7, 0xf6, 0x22, 0xf9, 0x07, - 0x71, 0x6c, 0x7d, 0x15, 0x1c, 0x92, 0xd1, 0x55, - 0x1a, 0xa3, 0xa7, 0x75, 0x0a, 0xe9, 0xff, 0xcb, - 0x56, 0x3d, 0x76, 0x09, 0x98, 0x86, 0x89, 0x86, - 0x7f, 0xf0, 0xb3, 0xa1, 0x6a, 0x57, 0xd6, 0xdd, - 0xd5, 0x5e, 0x74, 0xff, 0xe0, 0xcf, 0x17, 0xdf, - 0x4f, 0xe1, 0xaa, 0xf3, 0xa6, 0xb5, 0xf2, 0x8a, - 0x4e, 0xca, 0xf3, 0xff, 0x3b, 0xf7, 0x4b, 0xfd, - 0xcd, 0x0b, 0x3c, 0xe9, 0xfc, 0xd9, 0x46, 0xbb, - 0xe0, 0x1d, 0x3e, 0xc0, 0x7e, 0x28, 0xe8, 0x13, - 0xd8, 0xf4, 0xce, 0x7e, 0x53, 0x58, 0xeb, 0xa8, - 0xe9, 0x54, 0xe9, 0xf3, 0x58, 0xeb, 0xa8, 0xe9, - 0xfb, 0x7f, 0xd5, 0x72, 0x9e, 0x87, 0xcc, 0xe1, - 0x72, 0x84, 0x27, 0xff, 0xfc, 0x37, 0xc3, 0xb6, - 0xaf, 0x7d, 0x06, 0xe8, 0xfd, 0x8d, 0x2f, 0xa9, - 0xd3, 0xff, 0xcd, 0xa1, 0xcf, 0x37, 0x7f, 0xe7, - 0xdd, 0x54, 0xe9, 0xf9, 0xd7, 0x6d, 0x0b, 0x78, - 0x74, 0xff, 0xe6, 0xd7, 0x8c, 0xfb, 0xa7, 0x54, - 0x7b, 0xc1, 0xd0, 0xc7, 0xff, 0xf3, 0x19, 0xfa, - 0xbf, 0xee, 0xac, 0xd1, 0xd3, 0xff, 0xfe, 0x0b, - 0x74, 0xc3, 0xae, 0x9d, 0x85, 0xb7, 0x9f, 0xd3, - 0x6a, 0xa7, 0x4a, 0xe9, 0x44, 0xe8, 0x17, 0xcf, - 0xff, 0xb6, 0x37, 0xad, 0xfe, 0xe9, 0xd5, 0xba, - 0x6a, 0x9d, 0x39, 0xbc, 0xec, 0x74, 0x59, 0xfa, - 0x0a, 0xb4, 0xf6, 0x76, 0xe6, 0xce, 0x92, 0xfa, - 0xc5, 0xc5, 0xde, 0x61, 0x42, 0x90, 0x88, 0x71, - 0x58, 0x1c, 0x77, 0x0d, 0x01, 0x85, 0xf6, 0xa1, - 0x39, 0xe9, 0x04, 0xf8, 0x13, 0x31, 0x0d, 0x15, - 0x74, 0xff, 0x3d, 0x76, 0x09, 0x98, 0x86, 0x88, - 0xf2, 0x4b, 0xb3, 0xf1, 0xc3, 0x09, 0xfc, 0xbb, - 0x04, 0xcc, 0x43, 0x45, 0x83, 0x3f, 0x97, 0x60, - 0x99, 0x88, 0x68, 0xb2, 0xa7, 0xf2, 0xec, 0x13, - 0x31, 0x0d, 0x16, 0x9c, 0xfe, 0xba, 0xf4, 0x00, - 0xf7, 0x67, 0x4f, 0x26, 0x62, 0x1a, 0x2d, 0xc9, - 0xff, 0x9a, 0xc2, 0xc7, 0xa6, 0xee, 0x9e, 0x0e, - 0x80, 0x3e, 0xfa, 0x95, 0xcf, 0xf3, 0x0f, 0xaa, - 0x6a, 0xeb, 0xe7, 0x4f, 0xec, 0xca, 0x39, 0x6b, - 0x03, 0xa7, 0xfd, 0x8f, 0x5d, 0x82, 0x66, 0x21, - 0xa2, 0x87, 0x9f, 0xf9, 0x59, 0xcb, 0x73, 0xbf, - 0x8f, 0xd4, 0x74, 0xff, 0xde, 0xbf, 0x78, 0x14, - 0xe9, 0xbf, 0x41, 0xd3, 0xfe, 0xf4, 0x3c, 0x0c, - 0x1d, 0x5f, 0x87, 0x4f, 0xd5, 0xca, 0x6b, 0xaf, - 0x9d, 0x3f, 0x0f, 0x59, 0x60, 0xd5, 0x3a, 0x7f, - 0xfe, 0xbe, 0x76, 0xdd, 0x97, 0xa1, 0xcf, 0x2b, - 0x56, 0xf0, 0xa9, 0x2d, 0xea, 0xbd, 0xee, 0x14, - 0x7f, 0x21, 0x70, 0xe1, 0x46, 0x38, 0x8d, 0xe2, - 0x2d, 0x51, 0xb4, 0x7d, 0xe9, 0x77, 0x51, 0x7c, - 0xfe, 0x5d, 0x82, 0x66, 0x21, 0xa2, 0xf3, 0x86, - 0x65, 0xc8, 0x3d, 0x13, 0x98, 0x7b, 0x5c, 0xe4, - 0x75, 0x31, 0x8b, 0x01, 0x32, 0x8e, 0xf6, 0x76, - 0x32, 0xcc, 0x9d, 0x42, 0xa6, 0x7f, 0x2e, 0xc1, - 0x33, 0x10, 0xd1, 0x4b, 0x4f, 0xe5, 0xd8, 0x26, - 0x62, 0x1a, 0x2c, 0x29, 0xfc, 0xbb, 0x04, 0xcc, - 0x43, 0x45, 0x97, 0x3c, 0xbe, 0xfd, 0x68, 0xee, - 0xce, 0x9c, 0xbe, 0xca, 0x3a, 0x79, 0x16, 0xd5, - 0x43, 0xcf, 0xf4, 0xc6, 0x7f, 0xf2, 0xd5, 0x8f, - 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x8c, 0x9f, 0xcb, - 0x67, 0x4c, 0x0d, 0xe1, 0xd0, 0xf4, 0xef, 0x40, - 0xed, 0x47, 0x79, 0x08, 0xaa, 0x9c, 0x69, 0x4a, - 0x7f, 0xe5, 0xe3, 0xd7, 0x60, 0x99, 0x88, 0x68, - 0x8e, 0x67, 0xff, 0x2d, 0x58, 0xf5, 0xd8, 0x26, - 0x62, 0x1a, 0x27, 0x29, 0xfc, 0xbb, 0x04, 0xcc, - 0x43, 0x45, 0x99, 0x3f, 0xf2, 0xdb, 0xc0, 0x6d, - 0x6f, 0x29, 0x79, 0xd3, 0xf9, 0x76, 0x09, 0x98, - 0x86, 0x8b, 0x76, 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, - 0x82, 0x66, 0x21, 0xa2, 0x90, 0x9f, 0xf9, 0x78, - 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x25, 0x28, 0xa1, - 0x3f, 0x67, 0x13, 0x14, 0xa5, 0xe1, 0xd8, 0xa2, - 0x68, 0xed, 0xd9, 0x4a, 0x7f, 0xd8, 0xf5, 0xd8, - 0x26, 0x62, 0x1a, 0x27, 0x69, 0xff, 0xf7, 0xf9, - 0xf5, 0x4c, 0xed, 0x9c, 0x8b, 0x0d, 0xa1, 0xd2, - 0x5a, 0x91, 0x3b, 0x88, 0xd3, 0xff, 0x62, 0xb7, - 0x69, 0x9b, 0x6e, 0xcf, 0x3a, 0x7f, 0xe1, 0xbd, - 0xe5, 0x17, 0x51, 0xca, 0x4e, 0x9b, 0xa9, 0x7c, - 0xa2, 0x16, 0xa8, 0x70, 0xa4, 0x70, 0x75, 0x42, - 0xb6, 0x7c, 0x09, 0x98, 0x86, 0x88, 0xb2, 0x7f, - 0xd8, 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x25, 0xd9, - 0xff, 0xfa, 0xf9, 0xdb, 0x76, 0x5e, 0x87, 0x3c, - 0xad, 0x5b, 0xc2, 0xa4, 0xbb, 0x46, 0xa2, 0x8c, - 0x3a, 0x91, 0xa7, 0xff, 0x2d, 0x58, 0xf5, 0xd8, - 0x26, 0x62, 0x1a, 0x26, 0x29, 0xf0, 0x26, 0x62, - 0x1a, 0x2a, 0x99, 0x59, 0xd1, 0x66, 0xff, 0xb9, - 0x84, 0xff, 0xff, 0xe0, 0xcd, 0xd2, 0xfb, 0xd2, - 0xf7, 0x95, 0x0f, 0xf1, 0xad, 0xfc, 0x1e, 0x74, - 0x2d, 0x13, 0x58, 0x45, 0x3f, 0xf9, 0x6a, 0xc7, - 0xae, 0xc1, 0x33, 0x10, 0xd1, 0x3a, 0x4f, 0xef, - 0xe0, 0x33, 0xf1, 0xd1, 0xd3, 0xe7, 0x19, 0xc6, - 0xa9, 0xd3, 0xf7, 0x17, 0xf7, 0x56, 0x27, 0x47, - 0xcf, 0x5a, 0xa5, 0x13, 0xbf, 0xb6, 0x39, 0x66, - 0x8a, 0x7f, 0xef, 0x6b, 0xa6, 0xa5, 0x7e, 0xb9, - 0xf5, 0x1d, 0x0a, 0x3f, 0x4d, 0x95, 0xcf, 0xfb, - 0x1e, 0xbb, 0x04, 0xcc, 0x43, 0x44, 0xef, 0x3e, - 0xd7, 0xb8, 0xaf, 0x95, 0x25, 0xf2, 0x9d, 0x75, - 0xc6, 0x3c, 0xa2, 0x2c, 0x46, 0x9f, 0xfc, 0xb5, - 0x63, 0xd7, 0x60, 0x99, 0x88, 0x68, 0xa1, 0x67, - 0xff, 0x2d, 0x58, 0xf5, 0xd8, 0x26, 0x62, 0x1a, - 0x29, 0x29, 0xff, 0xfd, 0x75, 0x5f, 0x6b, 0x73, - 0x78, 0xad, 0x6d, 0xb5, 0xea, 0x8e, 0x8a, 0x17, - 0x35, 0x9e, 0x70, 0x91, 0x95, 0x81, 0x12, 0xa5, - 0x00, 0x78, 0x93, 0xea, 0x97, 0x52, 0x94, 0xfe, - 0x5d, 0x82, 0x66, 0x21, 0xa2, 0x24, 0x9f, 0xfc, - 0xb5, 0x63, 0xd7, 0x60, 0x99, 0x88, 0x68, 0x97, - 0xa7, 0xc1, 0xe2, 0xbf, 0x53, 0xa7, 0x78, 0xda, - 0x3a, 0x7f, 0xec, 0x72, 0xac, 0xeb, 0x36, 0xd4, - 0xb8, 0x74, 0x7d, 0x11, 0x6e, 0x14, 0x00, 0xe4, - 0xff, 0x7f, 0x07, 0xdd, 0x38, 0xdd, 0xce, 0x9f, - 0x02, 0x66, 0x21, 0xa2, 0x97, 0x9f, 0x0e, 0xa8, - 0xbe, 0x0e, 0x9f, 0xef, 0x2a, 0x0d, 0x4b, 0xfe, - 0xa3, 0xa7, 0xfb, 0x28, 0xe9, 0x47, 0xae, 0x37, - 0x5c, 0xe9, 0xad, 0xec, 0x7f, 0x9e, 0x9d, 0x4c, - 0xfb, 0x3a, 0x73, 0x79, 0x53, 0xa3, 0x93, 0x63, - 0xc0, 0xac, 0xff, 0xdf, 0x56, 0x73, 0xd9, 0xc7, - 0xb0, 0xd2, 0x74, 0xf5, 0x7f, 0xc6, 0x8e, 0x8d, - 0x9f, 0x5e, 0x92, 0x27, 0xfb, 0x37, 0x8e, 0x7c, - 0x1a, 0x83, 0xa7, 0xce, 0xdf, 0x53, 0x54, 0xe9, - 0xf6, 0x3a, 0xb0, 0xa9, 0xd2, 0x6e, 0x4f, 0x45, - 0x45, 0x52, 0x5b, 0x2a, 0xfe, 0xe4, 0xc2, 0xce, - 0xe9, 0x30, 0x72, 0x14, 0x9b, 0x5e, 0xc8, 0x47, - 0x54, 0x8b, 0x50, 0x89, 0x9f, 0xcb, 0xb0, 0x4c, - 0xc4, 0x34, 0x53, 0x93, 0xfe, 0xf8, 0x65, 0x77, - 0x76, 0x28, 0x74, 0xff, 0xaf, 0x6c, 0x16, 0xbe, - 0x38, 0xe0, 0xa9, 0xbf, 0xc1, 0xd3, 0x50, 0xbe, - 0x51, 0x21, 0xd4, 0x74, 0xec, 0x7f, 0x3e, 0x04, - 0xcc, 0x43, 0x45, 0x79, 0x3f, 0xff, 0x5f, 0x3b, - 0x6e, 0xcb, 0xd0, 0xe7, 0x95, 0xab, 0x78, 0x54, - 0x97, 0x68, 0x8e, 0xea, 0x30, 0x9f, 0xf9, 0x78, - 0xf5, 0xd8, 0x26, 0x62, 0x1a, 0x24, 0x79, 0xdf, - 0xf1, 0x8e, 0x9c, 0x96, 0xa2, 0x96, 0x5e, 0x4f, - 0x81, 0x33, 0x10, 0xd1, 0x24, 0x4f, 0x2f, 0x1e, - 0xb6, 0x3d, 0x9b, 0x29, 0x9f, 0xf9, 0x78, 0xf5, - 0xd8, 0x26, 0x62, 0x1a, 0x24, 0xa9, 0xf0, 0x26, - 0x62, 0x1a, 0x2f, 0x19, 0xf5, 0x6b, 0xab, 0x43, - 0xa7, 0xf9, 0xeb, 0xb0, 0x4c, 0xc4, 0x34, 0x49, - 0xb2, 0x5d, 0xa2, 0x5c, 0x0c, 0x30, 0x9a, 0x19, - 0x91, 0x03, 0x41, 0xdb, 0xe5, 0xed, 0xf3, 0x09, - 0x5f, 0xc3, 0x2d, 0xc8, 0x69, 0x28, 0xaf, 0x70, - 0xc1, 0xd1, 0xbf, 0xb0, 0xe3, 0x86, 0x8e, 0xd8, - 0xaa, 0x88, 0xec, 0x1f, 0x29, 0xd3, 0x99, 0x45, - 0x57, 0x78, 0x9e, 0xdd, 0xe5, 0x2d, 0x25, 0xa4, - 0xa2, 0xa6, 0x7e, 0x93, 0xf3, 0xc1, 0xdd, 0x78, - 0xed, 0xdc, 0xac, 0xd7, 0xc2, 0x96, 0xd4, 0xac, - 0x4f, 0xd5, 0x6e, 0x77, 0xfb, 0x2b, 0x38, 0x8f, - 0x25, 0x9e, 0x3b, 0x90, 0xb1, 0x1a, 0x48, 0x25, - 0x69, 0x45, 0x3a, 0xaf, 0xf8, 0x7d, 0xa7, 0xae, - 0xba, 0x94, 0xd7, 0xc4, 0xa5, 0x1e, 0xa8, 0xf9, - 0xfb, 0x4e, 0xea, 0xbb, 0x52, 0x41, 0xa0, + 0xfe, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x12, 0xcf, 0xbe, 0x99, 0x88, 0x68, + 0x8b, 0x66, 0xba, 0x4a, 0x93, 0x15, 0x2e, 0xfe, 0x69, 0x7b, 0x16, 0x9f, + 0xda, 0xbf, 0xf6, 0xa0, 0xa9, 0x4b, 0x35, 0x33, 0xf3, 0xf6, 0x0e, 0xad, + 0xc3, 0xa1, 0x8f, 0xcb, 0x10, 0xe7, 0xf8, 0x5b, 0x60, 0x8c, 0xa0, 0x3a, + 0x4b, 0xb4, 0xd1, 0x7a, 0xa1, 0xe3, 0xe0, 0x82, 0x7f, 0x2e, 0xfe, 0x99, + 0x88, 0x68, 0xa8, 0xa7, 0xff, 0xb6, 0x1b, 0x5f, 0x9b, 0xba, 0x39, 0x6b, + 0xe4, 0xe9, 0xf7, 0xd3, 0x31, 0x0d, 0x15, 0xec, 0xf8, 0x1d, 0x93, 0xda, + 0x0e, 0x92, 0xec, 0xf7, 0x3e, 0x63, 0x3f, 0xf2, 0xf1, 0xeb, 0xbf, 0xa6, + 0x62, 0x1a, 0x24, 0x69, 0xff, 0xcb, 0x56, 0x3d, 0x77, 0xf4, 0xcc, 0x43, + 0x44, 0xf1, 0x3f, 0xf9, 0x6a, 0xc7, 0xae, 0xfe, 0x99, 0x88, 0x68, 0x9f, + 0xe7, 0xff, 0x2d, 0x58, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x14, 0x34, 0xff, + 0xe5, 0xab, 0x1e, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0x88, 0x9f, 0xf6, 0x3d, + 0x77, 0xf4, 0xcc, 0x43, 0x45, 0x23, 0x3f, 0xff, 0x5f, 0x3b, 0x6f, 0x0b, + 0xd0, 0xe7, 0x75, 0xab, 0x76, 0x54, 0x96, 0xa4, 0x52, 0xf5, 0x23, 0xcf, + 0xfc, 0xbc, 0x7a, 0xef, 0xe9, 0x98, 0x86, 0x89, 0x42, 0x28, 0x5d, 0x89, + 0x7c, 0x70, 0x28, 0x81, 0xd7, 0x3c, 0xfc, 0x2b, 0x94, 0x4f, 0xb4, 0xde, + 0xd4, 0xdd, 0xc5, 0x3a, 0xa9, 0xfb, 0x0f, 0x87, 0x62, 0xc9, 0xff, 0xcb, + 0x56, 0x3d, 0x77, 0xf4, 0xcc, 0x43, 0x44, 0xe7, 0x3f, 0xf9, 0x6a, 0xc7, + 0xae, 0xfe, 0x99, 0x88, 0x68, 0xa2, 0x67, 0xfe, 0xfb, 0xd7, 0xb0, 0xab, + 0x8f, 0x0e, 0xce, 0x8f, 0xa3, 0xb2, 0xaa, 0x7e, 0xa9, 0xcf, 0xe5, 0xdf, + 0xd3, 0x31, 0x0d, 0x10, 0xe4, 0xfb, 0xe9, 0x98, 0x86, 0x88, 0xbe, 0x7f, + 0x56, 0xf9, 0xdd, 0xf7, 0x87, 0x4d, 0x5a, 0x4e, 0x9e, 0xd3, 0xdb, 0xc9, + 0x50, 0xa3, 0x75, 0x82, 0xf2, 0x5d, 0xa2, 0xf9, 0xc3, 0x11, 0x6d, 0x9f, + 0xfc, 0xb5, 0x63, 0xd7, 0x7f, 0x4c, 0xc4, 0x34, 0x4c, 0x93, 0xf9, 0x77, + 0xf4, 0xcc, 0x43, 0x45, 0xbd, 0x3f, 0xf9, 0x6a, 0xc7, 0xae, 0xfe, 0x99, + 0x88, 0x68, 0xa4, 0xe7, 0xdb, 0x5b, 0xbf, 0xd6, 0xdd, 0xe3, 0xa1, 0x95, + 0x24, 0xbe, 0x1f, 0x56, 0x6b, 0x55, 0x37, 0x47, 0x9e, 0x14, 0xe7, 0xf2, + 0xef, 0xe9, 0x98, 0x86, 0x88, 0x76, 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, 0xfd, + 0x33, 0x10, 0xd1, 0x2c, 0x4f, 0xe5, 0xdf, 0xd3, 0x31, 0x0d, 0x11, 0x84, + 0xfb, 0xe9, 0x98, 0x86, 0x88, 0xf6, 0x7a, 0xb9, 0x4b, 0xa3, 0xa7, 0x97, + 0x8f, 0x5d, 0x9e, 0xae, 0x8c, 0x67, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8b, + 0x0e, 0x7f, 0x2e, 0xfe, 0x99, 0x88, 0x68, 0xb9, 0xe1, 0x93, 0xd0, 0xa0, + 0xf1, 0xea, 0x61, 0x09, 0x15, 0x1c, 0x68, 0xf2, 0x7f, 0x2e, 0xfe, 0x99, + 0x88, 0x68, 0x87, 0xa7, 0xdf, 0x4c, 0xc4, 0x34, 0x44, 0xd3, 0xff, 0xaf, + 0x59, 0xbd, 0xb3, 0xa7, 0xdf, 0xd8, 0xe9, 0xb4, 0xa3, 0xa7, 0xff, 0x5e, + 0xfc, 0x51, 0x56, 0x0a, 0x74, 0xca, 0x3a, 0x29, 0x3e, 0x2d, 0x8b, 0x4f, + 0x6b, 0xdc, 0xf0, 0x68, 0x85, 0xe4, 0xbb, 0x4c, 0xc3, 0x66, 0x35, 0x85, + 0x5f, 0xa4, 0x73, 0xbf, 0x88, 0x74, 0xb6, 0x74, 0x79, 0x35, 0x5e, 0x8d, + 0x4f, 0x6b, 0x61, 0xa3, 0xa7, 0xff, 0x03, 0x8f, 0xba, 0x5f, 0xd1, 0x59, + 0x82, 0x74, 0xd8, 0xec, 0x74, 0x5a, 0x21, 0x36, 0x43, 0x89, 0x73, 0xbf, + 0x88, 0x74, 0x3b, 0xe7, 0x91, 0xe4, 0xba, 0x7d, 0xbc, 0xd6, 0x3c, 0xe9, + 0xfc, 0xfa, 0xb5, 0x7a, 0xd7, 0xeb, 0x7d, 0x6c, 0xe9, 0xe0, 0xa8, 0x76, + 0x74, 0xee, 0x38, 0xe0, 0xa9, 0xf6, 0x0e, 0xb7, 0x65, 0x2c, 0xbf, 0x9f, + 0x66, 0x9c, 0xbd, 0x1d, 0x1c, 0xa2, 0x6f, 0xb4, 0x01, 0x34, 0x9e, 0xde, + 0x66, 0x1d, 0x3f, 0xf7, 0x60, 0xe7, 0x4d, 0xb0, 0x7f, 0xde, 0xb9, 0xd3, + 0xfe, 0x0f, 0x2c, 0x2d, 0x56, 0x05, 0x1d, 0x3f, 0x5b, 0xaf, 0x5f, 0x75, + 0x3a, 0x7a, 0xf9, 0xba, 0x0e, 0x8b, 0x54, 0x65, 0x49, 0x30, 0x43, 0x8f, + 0xae, 0x62, 0xe0, 0xfe, 0xd3, 0x04, 0xf3, 0x45, 0xf3, 0xf5, 0xf0, 0xd7, + 0xc8, 0x1d, 0x39, 0xbd, 0xec, 0xe9, 0xff, 0xff, 0xc2, 0x34, 0xb7, 0x91, + 0xbe, 0x76, 0x0e, 0x74, 0xad, 0xd2, 0xff, 0xdf, 0x07, 0x4f, 0x83, 0x5e, + 0xb5, 0x07, 0x4f, 0xff, 0xeb, 0xa5, 0xf5, 0x55, 0x8f, 0x47, 0x60, 0xdd, + 0x01, 0x7f, 0x3a, 0x7f, 0xff, 0xdc, 0x74, 0x1b, 0x4d, 0x80, 0xdf, 0xb4, + 0xeb, 0xa6, 0x71, 0x7e, 0x4e, 0x9f, 0xd4, 0xbe, 0xbe, 0x7d, 0x6a, 0x4e, + 0x9f, 0xd9, 0xc7, 0xae, 0x36, 0xb0, 0xe8, 0x64, 0x6f, 0x03, 0x90, 0x9c, + 0x4f, 0x77, 0xa0, 0xa0, 0xe9, 0xff, 0x36, 0x50, 0xca, 0x16, 0xa7, 0xb3, + 0xa1, 0x95, 0x3b, 0x5b, 0xe8, 0x14, 0x7e, 0x34, 0x3c, 0x2d, 0x12, 0x39, + 0xbd, 0x79, 0xd3, 0xb3, 0x55, 0x3a, 0x6f, 0x68, 0x3a, 0x79, 0x87, 0x4e, + 0x3c, 0xd9, 0xfc, 0x6e, 0x7f, 0xfd, 0xeb, 0x6b, 0xa0, 0xfa, 0xed, 0xd2, + 0xf5, 0xd5, 0x7a, 0x3a, 0x7f, 0xed, 0xb7, 0x9e, 0x9a, 0x1c, 0xd3, 0x68, + 0xe9, 0xfd, 0xd2, 0x97, 0x86, 0xfd, 0x51, 0xd1, 0xd9, 0xfe, 0x8a, 0x34, + 0xff, 0xbe, 0xe7, 0x4a, 0xb0, 0x51, 0x9a, 0x3a, 0x18, 0xf8, 0xfd, 0x22, + 0x9f, 0xff, 0xfe, 0xf4, 0x6b, 0xf1, 0x67, 0x3a, 0x78, 0xd0, 0x3e, 0xe9, + 0xd5, 0xba, 0x1b, 0xa9, 0xd2, 0x63, 0xa7, 0xf3, 0xf3, 0xe1, 0x56, 0xa4, + 0xe9, 0xff, 0xff, 0xfc, 0x1d, 0xd4, 0x6f, 0x29, 0xe9, 0xce, 0xfd, 0xe8, + 0x37, 0x4b, 0xef, 0xda, 0x06, 0xf2, 0x93, 0xa7, 0x66, 0x21, 0xa2, 0x98, + 0x8b, 0x45, 0xe2, 0x42, 0x5a, 0x7f, 0xd6, 0x34, 0xbe, 0xba, 0x6f, 0xb8, + 0x74, 0xeb, 0x0e, 0xce, 0x95, 0x9d, 0x3a, 0x91, 0xbe, 0xcd, 0x53, 0xa1, + 0xb8, 0x04, 0x4f, 0x63, 0x4c, 0xff, 0x62, 0xb9, 0xdb, 0x51, 0x7c, 0x1d, + 0x3f, 0xff, 0x86, 0xd3, 0x5a, 0x6d, 0x55, 0xc1, 0xbe, 0x3a, 0x33, 0xbb, + 0x3a, 0x7f, 0xc8, 0xca, 0xdd, 0xd6, 0xc0, 0x4e, 0x86, 0x45, 0x0e, 0xd9, + 0xe7, 0xdf, 0x67, 0x4d, 0xf3, 0xa7, 0xec, 0x1e, 0x9c, 0xb0, 0x9d, 0x16, + 0x7e, 0xe0, 0x45, 0xe9, 0x44, 0x50, 0xbb, 0x93, 0xca, 0x57, 0x93, 0x84, + 0x8d, 0x02, 0x92, 0x20, 0x84, 0x1b, 0x81, 0xff, 0x87, 0x72, 0xa1, 0x88, + 0x24, 0x3a, 0x8d, 0x4a, 0x7f, 0xde, 0x7f, 0x9c, 0x74, 0xce, 0x72, 0x83, + 0xa7, 0xac, 0x7c, 0xf5, 0xce, 0x9f, 0xff, 0xff, 0x6c, 0x35, 0xbb, 0xfb, + 0x3a, 0xe8, 0xaf, 0x5d, 0xba, 0x5d, 0x2f, 0xbf, 0x47, 0xba, 0x9d, 0x2d, + 0x02, 0x2d, 0x6a, 0x4d, 0x3f, 0xfe, 0xbb, 0xd8, 0x26, 0xef, 0xa5, 0x7d, + 0xdb, 0x75, 0xce, 0x9f, 0xfe, 0xd6, 0xef, 0xbe, 0x8a, 0x6b, 0xd7, 0x36, + 0x27, 0x4f, 0xf5, 0x3d, 0x14, 0xd6, 0x3a, 0xea, 0x3a, 0x55, 0xb4, 0x47, + 0x62, 0x8c, 0x80, 0x53, 0x0e, 0xd4, 0x39, 0xe7, 0xcf, 0x6a, 0x5f, 0x53, + 0xa7, 0xff, 0xff, 0xfd, 0x63, 0xe7, 0xa0, 0x6f, 0xd5, 0xb8, 0x1a, 0x65, + 0x0e, 0x79, 0xd8, 0x2e, 0xf7, 0x4f, 0x6d, 0xc9, 0x53, 0xff, 0xff, 0x20, + 0x71, 0xcf, 0xbf, 0xe9, 0xeb, 0x51, 0x54, 0xdf, 0xbb, 0xa7, 0x38, 0x3a, + 0x6f, 0x68, 0xa5, 0x34, 0x40, 0x28, 0xac, 0x28, 0x61, 0x95, 0x75, 0xee, + 0x33, 0x61, 0x8d, 0xc6, 0x7f, 0xf2, 0x93, 0xa6, 0xf1, 0xf6, 0xac, 0x1e, + 0xce, 0x9f, 0xff, 0x00, 0xeb, 0x76, 0xed, 0xa7, 0x2f, 0xaf, 0x83, 0xd9, + 0xd3, 0xff, 0x30, 0xd0, 0x36, 0xea, 0xbe, 0xb5, 0x27, 0x45, 0x51, 0x43, + 0xea, 0xdc, 0xf5, 0xea, 0xdd, 0xc3, 0xa7, 0x75, 0x5e, 0xce, 0x9a, 0xf9, + 0x3a, 0x28, 0x4d, 0xa1, 0xf0, 0xeb, 0xa9, 0x26, 0x89, 0x5d, 0x0f, 0x4f, + 0x83, 0x55, 0xbe, 0xce, 0x9f, 0xb9, 0x61, 0xde, 0x3c, 0xe9, 0xcd, 0xcb, + 0x1d, 0x3f, 0x3e, 0xf5, 0x5c, 0x73, 0xa1, 0xe3, 0xa8, 0xb2, 0x1e, 0x8b, + 0x57, 0x1b, 0xa7, 0xe7, 0x6d, 0xe7, 0x5d, 0xbb, 0x3a, 0x7f, 0x7d, 0xc1, + 0xbd, 0xe6, 0x8e, 0x8b, 0x3e, 0x60, 0x34, 0x9f, 0x9b, 0xbb, 0xd7, 0x8a, + 0x0e, 0x87, 0x9e, 0x80, 0x90, 0x4f, 0xff, 0xfb, 0x43, 0x9d, 0xd6, 0x8b, + 0x01, 0xd0, 0xdb, 0xae, 0x95, 0xe0, 0x4e, 0x9f, 0xf0, 0x5b, 0x9d, 0x2a, + 0xdb, 0xce, 0xb9, 0xd3, 0xfb, 0x29, 0xae, 0xef, 0x3e, 0x74, 0x72, 0x7e, + 0xba, 0x43, 0x9f, 0xeb, 0xfd, 0x0c, 0x1f, 0xb1, 0x3a, 0x4a, 0x3b, 0xa1, + 0xb6, 0x9c, 0x37, 0xc9, 0xd0, 0xc6, 0xf6, 0x92, 0x29, 0xfa, 0x9a, 0xdd, + 0x8f, 0x93, 0xa7, 0x95, 0xe1, 0xbb, 0x3a, 0x2c, 0xf4, 0x80, 0xba, 0x77, + 0xb4, 0xf6, 0x74, 0x32, 0xa2, 0xcb, 0x87, 0x20, 0x42, 0x5b, 0xee, 0x62, + 0x41, 0x3f, 0xb4, 0x14, 0x5e, 0xfd, 0xd1, 0xd2, 0x70, 0xe9, 0xfa, 0xfd, + 0xbd, 0xa5, 0x07, 0x4d, 0x74, 0xb1, 0xbe, 0xa8, 0x8c, 0xfd, 0xbc, 0x7a, + 0xbe, 0x07, 0x4f, 0x83, 0xbf, 0xdd, 0x27, 0x47, 0x94, 0x79, 0x03, 0x97, + 0x65, 0x9e, 0x96, 0x4f, 0xff, 0xdf, 0x7e, 0xed, 0xcd, 0xb0, 0xf9, 0x1b, + 0xd6, 0xfd, 0x3a, 0x7f, 0xff, 0x05, 0xd2, 0xfa, 0xeb, 0x6c, 0xa6, 0x0e, + 0x7a, 0x33, 0xbb, 0x3a, 0x7f, 0xff, 0xfd, 0xe8, 0xf4, 0xe3, 0x29, 0x7f, + 0xf3, 0xbe, 0x95, 0xf5, 0xa9, 0xdd, 0x80, 0xdf, 0x93, 0xa7, 0xff, 0xde, + 0xff, 0xf7, 0xaa, 0xec, 0x2f, 0xa6, 0xfb, 0x63, 0xa2, 0xd1, 0xc9, 0xb8, + 0x46, 0x4f, 0xff, 0x3d, 0xdb, 0x76, 0xc2, 0xe0, 0xde, 0xab, 0x87, 0x4f, + 0xff, 0xb9, 0xb5, 0x74, 0x76, 0xd3, 0x55, 0xc7, 0xe7, 0xe8, 0x3a, 0x7f, + 0xac, 0x68, 0xe9, 0xde, 0x63, 0x87, 0x4f, 0xf7, 0xe8, 0x6a, 0x28, 0xf7, + 0xf4, 0x1d, 0x3f, 0xde, 0x8f, 0x4a, 0xfb, 0xd5, 0xef, 0xce, 0x86, 0x3f, + 0xfa, 0x9f, 0x4f, 0xfe, 0xa3, 0xa5, 0x77, 0xef, 0x4d, 0x56, 0xad, 0xf3, + 0xa7, 0xff, 0xfd, 0x74, 0xd4, 0x2f, 0x8e, 0x9b, 0xbd, 0x56, 0xe8, 0xe9, + 0x61, 0xc9, 0xd1, 0x68, 0xc2, 0x05, 0x18, 0xa1, 0x5e, 0xf2, 0x46, 0x99, + 0x49, 0x38, 0x28, 0x29, 0x76, 0xb0, 0xba, 0xd4, 0x38, 0xe7, 0xfd, 0x9f, + 0xdd, 0xe9, 0x84, 0x3b, 0x3a, 0x7f, 0xaf, 0x8a, 0x5f, 0x5e, 0x9a, 0x03, + 0xa7, 0xff, 0xfc, 0xc8, 0xca, 0xe8, 0xe6, 0xc0, 0x79, 0xe9, 0xe1, 0x06, + 0xf7, 0x67, 0x42, 0x23, 0x9c, 0x4f, 0x1d, 0x8f, 0x27, 0x83, 0x40, 0xc7, + 0x4f, 0xff, 0xff, 0xda, 0x65, 0x08, 0x79, 0xde, 0x39, 0xd0, 0x7d, 0x76, + 0xe9, 0x74, 0xbe, 0xfd, 0x1e, 0xea, 0x74, 0x3d, 0x16, 0x60, 0x3f, 0x0c, + 0xbd, 0x3d, 0x73, 0x87, 0x61, 0x1a, 0xee, 0x43, 0x92, 0x7b, 0x55, 0xce, + 0xce, 0x9f, 0xfb, 0x61, 0xd0, 0x3f, 0xed, 0x19, 0xf4, 0x3a, 0x78, 0x37, + 0x94, 0x1d, 0x3c, 0xe9, 0xb4, 0xc7, 0x4f, 0xdb, 0xca, 0x3a, 0x3f, 0x47, + 0x4f, 0xb3, 0xe3, 0x48, 0x1d, 0x00, 0x7a, 0xda, 0x30, 0x8b, 0x4c, 0x8b, + 0xc9, 0x12, 0x23, 0x01, 0x0e, 0x9e, 0x27, 0xbc, 0x7b, 0x95, 0x3a, 0x7f, + 0xfe, 0x0f, 0xf4, 0xb0, 0xb1, 0xf3, 0xb0, 0xb5, 0x5a, 0x1d, 0x3f, 0xff, + 0xc1, 0x47, 0xd9, 0x55, 0xf5, 0xba, 0x37, 0xdb, 0x9d, 0xb2, 0x8e, 0x8b, + 0x46, 0x17, 0xd6, 0x67, 0xff, 0xff, 0x7f, 0xe1, 0x47, 0x4d, 0xde, 0x85, + 0x9c, 0xdd, 0xd0, 0xd4, 0xeb, 0xd4, 0x3a, 0x7f, 0xff, 0xe6, 0xf3, 0xb6, + 0xe8, 0x37, 0xef, 0x9e, 0x94, 0xbe, 0xa0, 0x3e, 0x1a, 0x83, 0xa7, 0xd4, + 0xd4, 0x2c, 0x4e, 0x8b, 0x45, 0x17, 0xaf, 0x90, 0x09, 0xa0, 0xee, 0x31, + 0xe9, 0xff, 0x9f, 0x50, 0xf3, 0xb6, 0x0a, 0x1b, 0xc9, 0xd3, 0xfc, 0x3e, + 0xb8, 0x37, 0xbc, 0xd1, 0xd3, 0xfd, 0xce, 0xdb, 0x8e, 0x77, 0x8a, 0x3a, + 0x7f, 0xff, 0xb3, 0xfb, 0xbd, 0x05, 0x8d, 0x15, 0x6b, 0x1e, 0x76, 0xc7, + 0x4f, 0x6b, 0xa5, 0x1f, 0x3a, 0x29, 0x44, 0x46, 0x31, 0xcf, 0xce, 0x52, + 0xff, 0x5b, 0x47, 0x4f, 0xf6, 0xf1, 0x43, 0x7b, 0xcd, 0x1d, 0x3d, 0x7f, + 0xef, 0x83, 0xa1, 0x91, 0x13, 0x53, 0x0d, 0x1b, 0x4f, 0xd7, 0xaf, 0xfe, + 0xde, 0x74, 0xfc, 0x37, 0xb1, 0xb4, 0x3a, 0x78, 0x6e, 0xbd, 0x1c, 0x3d, + 0x5d, 0x16, 0x47, 0x2b, 0x87, 0x29, 0x1b, 0x1d, 0x25, 0x20, 0x8f, 0xf3, + 0x8d, 0xc3, 0x0f, 0x50, 0xac, 0x75, 0x08, 0x49, 0xff, 0x84, 0x6f, 0xa7, + 0xef, 0x63, 0x6e, 0x1d, 0x0c, 0xbb, 0xdb, 0x73, 0xa3, 0xf9, 0x08, 0xb9, + 0xf0, 0xb2, 0xb3, 0x93, 0xa7, 0xf5, 0xb9, 0xbb, 0xd3, 0x72, 0x74, 0xff, + 0xff, 0xf6, 0xef, 0x55, 0xc7, 0x3a, 0x0d, 0xd2, 0xfb, 0xf6, 0x81, 0xbe, + 0x76, 0x0e, 0x1d, 0x37, 0xbe, 0x4e, 0x8f, 0xa2, 0x6f, 0x50, 0x82, 0x9f, + 0xae, 0x81, 0xba, 0x6a, 0x74, 0xff, 0xef, 0xd2, 0xfa, 0xda, 0xa9, 0x6d, + 0xed, 0x8e, 0x95, 0x4e, 0x8f, 0x4f, 0x6f, 0xc2, 0x5c, 0xfe, 0x65, 0x0d, + 0xef, 0x34, 0x74, 0xf7, 0x44, 0xa3, 0x83, 0xa7, 0xff, 0xfd, 0xa1, 0x6e, + 0xe9, 0x7d, 0x7d, 0x6d, 0x0d, 0xf2, 0x17, 0xf7, 0x0e, 0x80, 0x55, 0x18, + 0xe1, 0x36, 0x43, 0x38, 0x4a, 0x2b, 0x08, 0x8f, 0x49, 0x5d, 0x18, 0x78, + 0x25, 0x9f, 0x3c, 0x3f, 0x74, 0x9d, 0x3e, 0xba, 0xd1, 0x7c, 0x1d, 0x14, + 0x9e, 0x7e, 0xc9, 0xe7, 0xff, 0xc1, 0x45, 0xa7, 0x3b, 0x0b, 0xf3, 0xd3, + 0xcf, 0xac, 0x74, 0xf3, 0xb6, 0xaf, 0x67, 0x4f, 0xff, 0xfc, 0xed, 0x4b, + 0xf2, 0x9e, 0x83, 0xeb, 0xb7, 0x4b, 0xa5, 0xf7, 0xe8, 0xf7, 0x53, 0xa2, + 0x84, 0x52, 0xd9, 0x24, 0xff, 0xff, 0xf9, 0xa9, 0xaf, 0xad, 0x4f, 0x4d, + 0xdf, 0x3d, 0x06, 0xfd, 0xf3, 0xd2, 0xbd, 0xf6, 0x1a, 0x3a, 0x7c, 0xc3, + 0x4e, 0x50, 0x74, 0xff, 0xff, 0xff, 0xeb, 0x55, 0xa3, 0x6d, 0x95, 0xab, + 0xad, 0x5b, 0xff, 0x61, 0xba, 0x2f, 0xda, 0xfa, 0xe0, 0xb2, 0x8e, 0x9f, + 0xee, 0xef, 0x91, 0xbd, 0xe6, 0x8e, 0x9f, 0xd4, 0x7a, 0xda, 0x50, 0x68, + 0xe9, 0xff, 0x37, 0x97, 0x6f, 0x6c, 0x5c, 0xf0, 0xa3, 0xa2, 0xcf, 0xea, + 0x93, 0x49, 0xff, 0xeb, 0xd7, 0x37, 0x7d, 0xd7, 0xa7, 0xeb, 0xcd, 0x4e, + 0x9e, 0xa0, 0x07, 0x47, 0x43, 0x2b, 0xea, 0xb2, 0x30, 0x8c, 0x03, 0xe4, + 0x6a, 0x84, 0x8e, 0xc9, 0xf2, 0x14, 0x63, 0x0b, 0x2a, 0x91, 0x7a, 0xa9, + 0x3b, 0x9e, 0x8e, 0x1d, 0x3f, 0xfd, 0x4b, 0xc5, 0xba, 0x28, 0x5b, 0xce, + 0x82, 0x83, 0xa2, 0xcf, 0xcc, 0x08, 0x27, 0xea, 0x1c, 0x7f, 0x59, 0xfa, + 0x0e, 0x9f, 0x28, 0x39, 0xbe, 0x4e, 0x93, 0x87, 0x4c, 0xca, 0x3a, 0x5a, + 0x3a, 0x3e, 0x69, 0x70, 0x56, 0x39, 0x3d, 0x6d, 0x9b, 0x4f, 0x6a, 0xb9, + 0x49, 0xd3, 0x39, 0x87, 0x4f, 0xed, 0x87, 0xe9, 0x78, 0xb1, 0xd1, 0xd6, + 0xd3, 0x41, 0x63, 0x6b, 0x7e, 0x02, 0x35, 0x11, 0x7a, 0x2d, 0x3f, 0xaa, + 0x14, 0xf1, 0x83, 0xd9, 0xd3, 0xff, 0xe6, 0xfb, 0x25, 0xa9, 0x91, 0xe1, + 0x5f, 0x54, 0x74, 0x38, 0x88, 0x6e, 0xa3, 0x49, 0xfb, 0xf6, 0xde, 0x58, + 0x4e, 0x9c, 0x38, 0xa3, 0xa6, 0xed, 0x8e, 0x87, 0x9e, 0xe0, 0x16, 0x08, + 0xd4, 0x3b, 0xce, 0xc9, 0xa3, 0xac, 0x87, 0x83, 0x4a, 0x5b, 0xa1, 0xed, + 0xe5, 0x9c, 0xca, 0x93, 0xb9, 0xe2, 0x3f, 0x30, 0xb9, 0x49, 0x7c, 0x94, + 0xc7, 0x48, 0x11, 0x84, 0x39, 0x0d, 0xaf, 0xca, 0x4d, 0x54, 0x68, 0x9b, + 0x9e, 0xde, 0xc8, 0xdc, 0x46, 0x78, 0xde, 0xb2, 0xb2, 0x75, 0x39, 0x72, + 0xea, 0x31, 0x1e, 0xa8, 0xd8, 0x7c, 0x43, 0x89, 0xda, 0x10, 0x73, 0xff, + 0xf7, 0xa8, 0xba, 0x75, 0xf6, 0xba, 0x7a, 0xce, 0x73, 0x3c, 0x9d, 0x0b, + 0x54, 0x64, 0x11, 0xe7, 0x4f, 0xe5, 0xdf, 0xd3, 0x31, 0x0d, 0x14, 0xec, + 0xfb, 0xe9, 0x98, 0x86, 0x8a, 0x8e, 0x7f, 0xd8, 0xf5, 0xdf, 0xd3, 0x31, + 0x0d, 0x13, 0x44, 0x97, 0x67, 0xf0, 0xa3, 0x19, 0xfc, 0xbb, 0xfa, 0x66, + 0x21, 0xa2, 0xaf, 0x9f, 0x7d, 0x33, 0x10, 0xd1, 0x5b, 0x4f, 0xf3, 0xd7, + 0x7f, 0x4c, 0xc4, 0x34, 0x48, 0x32, 0x5d, 0x9f, 0x9e, 0x18, 0xcf, 0xfc, + 0xbc, 0x7a, 0xef, 0xe9, 0x98, 0x86, 0x89, 0x0e, 0x7f, 0xcf, 0xdb, 0x6a, + 0xae, 0xee, 0xae, 0xf0, 0x9d, 0x3e, 0xbb, 0x1e, 0xea, 0x74, 0xfb, 0xe9, + 0x98, 0x86, 0x8b, 0x12, 0x7d, 0x7f, 0x61, 0xf2, 0x74, 0xfb, 0xc7, 0x55, + 0xfd, 0x8e, 0x9d, 0x56, 0x13, 0xa5, 0xb6, 0x3c, 0x50, 0x2b, 0x9f, 0xf9, + 0xae, 0xb6, 0x3c, 0x87, 0x6c, 0x27, 0x4e, 0x16, 0xa0, 0xe9, 0x3c, 0x4f, + 0x73, 0xd4, 0x19, 0xdd, 0x41, 0xd9, 0xd3, 0xe0, 0x75, 0xee, 0x54, 0xe9, + 0xff, 0x9d, 0x7b, 0x74, 0xf2, 0xeb, 0x77, 0x8e, 0x1d, 0x33, 0x3c, 0xe8, + 0xb3, 0xe0, 0xfa, 0x5c, 0xfe, 0xbf, 0xbf, 0xbb, 0xb7, 0x0e, 0x9f, 0x63, + 0xfc, 0x6d, 0x8e, 0x9f, 0xab, 0x5f, 0x87, 0x1d, 0x73, 0xa1, 0x91, 0x1a, + 0x06, 0x78, 0x51, 0x3f, 0xfc, 0xf6, 0x53, 0x3f, 0x91, 0x6d, 0xe5, 0xfc, + 0xe9, 0xfc, 0x83, 0x6e, 0x86, 0xea, 0x74, 0x52, 0x7f, 0xdb, 0x4d, 0x9f, + 0xdd, 0xb5, 0xe8, 0x07, 0x82, 0xa7, 0xd7, 0xba, 0x73, 0xae, 0x74, 0xf7, + 0x75, 0x61, 0x3a, 0x7f, 0x7f, 0x78, 0x15, 0x07, 0x47, 0x43, 0x1e, 0xa5, + 0x90, 0xc0, 0xa2, 0x7e, 0xaf, 0xf3, 0xf6, 0x51, 0xa6, 0xa5, 0xe7, 0x4f, + 0xf8, 0x58, 0x39, 0xd0, 0xe5, 0x35, 0x3a, 0x1d, 0xe5, 0xd3, 0x8e, 0x52, + 0x6c, 0x9b, 0xc9, 0x8a, 0x36, 0x53, 0x08, 0x20, 0x28, 0x70, 0x7f, 0xf0, + 0x89, 0xdc, 0x2b, 0xb2, 0x15, 0x7d, 0x91, 0xd6, 0x1a, 0x3a, 0x22, 0xf0, + 0x5d, 0x3f, 0xf6, 0xc1, 0xb5, 0xbc, 0xf3, 0x63, 0xd9, 0xd3, 0xff, 0xd7, + 0x4b, 0xf5, 0xed, 0x0b, 0xde, 0x28, 0x2a, 0x74, 0xdb, 0x5d, 0xa2, 0x58, + 0x51, 0x21, 0x69, 0xda, 0x34, 0x70, 0xf3, 0xf9, 0x77, 0xf4, 0xcc, 0x43, + 0x45, 0x9b, 0x35, 0xf2, 0x74, 0xff, 0xb1, 0xeb, 0xbf, 0xa6, 0x62, 0x1a, + 0x28, 0x09, 0x2e, 0xcf, 0x75, 0x42, 0xd3, 0x7b, 0xb3, 0xa7, 0xea, 0xb2, + 0x85, 0x9c, 0x3a, 0x7e, 0xbd, 0x77, 0xe0, 0x5c, 0x3a, 0x3b, 0x3d, 0xc1, + 0x2c, 0x9b, 0xa5, 0x4e, 0x9f, 0xed, 0xdf, 0xf4, 0x2c, 0xaa, 0x9d, 0x3c, + 0x99, 0x88, 0x68, 0xb7, 0xe7, 0xef, 0x1a, 0xc4, 0xcf, 0x9d, 0x1f, 0x3d, + 0x8e, 0xca, 0xe7, 0xda, 0x7d, 0x7c, 0x54, 0xe9, 0xf9, 0xd7, 0x8d, 0x0b, + 0x76, 0x74, 0xfb, 0x96, 0xeb, 0xfa, 0xa3, 0xa1, 0x8f, 0x78, 0x0c, 0x67, + 0xb0, 0x07, 0x47, 0x4f, 0xef, 0x69, 0xab, 0x25, 0xa8, 0xe9, 0xed, 0xf9, + 0xe5, 0x47, 0x4d, 0x6f, 0x3a, 0x2c, 0xdd, 0x09, 0x2c, 0x96, 0xef, 0x2a, + 0xb2, 0x67, 0x37, 0x91, 0x72, 0x31, 0x70, 0x8f, 0xf9, 0x1e, 0xe1, 0x11, + 0xd9, 0x00, 0x8f, 0xe9, 0xb6, 0x7f, 0xd8, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, + 0x14, 0xa4, 0xff, 0x3d, 0x77, 0xf4, 0xcc, 0x43, 0x44, 0x9d, 0x25, 0xa9, + 0x11, 0x38, 0x8f, 0x0c, 0xf8, 0x8f, 0x34, 0x46, 0xd9, 0xcd, 0xb5, 0x0d, + 0xb2, 0xa4, 0x85, 0xa0, 0x13, 0xf5, 0xe1, 0x5e, 0xe1, 0x32, 0xa7, 0xce, + 0x76, 0x53, 0xdc, 0x26, 0x6b, 0x2b, 0x65, 0xd4, 0x65, 0x53, 0xef, 0xa6, + 0x62, 0x1a, 0x21, 0xf9, 0xff, 0x63, 0xd7, 0x7f, 0x4c, 0xc4, 0x34, 0x4a, + 0x72, 0x5d, 0x9f, 0xc2, 0x8c, 0x67, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x88, + 0x9e, 0x7f, 0x2e, 0xfe, 0x99, 0x88, 0x68, 0x8c, 0x67, 0xff, 0x2d, 0x58, + 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x13, 0xcc, 0x32, 0x3c, 0xa8, 0x27, 0x79, + 0xe6, 0xcf, 0x27, 0xdf, 0x4c, 0xc4, 0x34, 0x44, 0x13, 0xfe, 0xc7, 0xae, + 0xfe, 0x99, 0x88, 0x68, 0x95, 0x24, 0xbb, 0x3f, 0x85, 0x18, 0xcf, 0xe5, + 0xdf, 0xd3, 0x31, 0x0d, 0x11, 0x44, 0xfe, 0x5d, 0xfd, 0x33, 0x10, 0xd1, + 0x19, 0x4f, 0xfe, 0x5a, 0xb1, 0xeb, 0xbf, 0xa6, 0x62, 0x1a, 0x26, 0x59, + 0xfc, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0xa4, 0x9f, 0xcb, 0xbf, 0xa6, 0x62, + 0x1a, 0x2b, 0xa9, 0xfc, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0xc5, 0x9f, 0xf9, + 0x58, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x13, 0xd4, 0xff, 0x70, 0xbc, 0x60, + 0xea, 0x07, 0x63, 0xa1, 0x68, 0x8a, 0x64, 0xd9, 0xfb, 0xad, 0x7b, 0xd0, + 0x7b, 0x53, 0xa7, 0xbe, 0xad, 0x52, 0x74, 0xe4, 0xbd, 0x95, 0x39, 0x4d, + 0x53, 0xa7, 0xff, 0xed, 0x8e, 0x79, 0x0f, 0xb3, 0xdf, 0x75, 0xef, 0xb6, + 0x3a, 0x7f, 0xfe, 0xf8, 0x3b, 0x62, 0x96, 0xdf, 0xf8, 0x3b, 0x27, 0xb4, + 0x1d, 0x3e, 0x40, 0xdf, 0x85, 0x1d, 0x3f, 0xfb, 0x2a, 0x37, 0xda, 0xf6, + 0x09, 0x9f, 0x3a, 0x7d, 0xad, 0xb2, 0x90, 0xe9, 0xff, 0xc3, 0xd1, 0x98, + 0x59, 0x5d, 0x3a, 0x6f, 0xa8, 0xe9, 0xb2, 0x93, 0xa7, 0xf6, 0x57, 0x37, + 0xe8, 0xd0, 0x74, 0x09, 0xe4, 0xfa, 0x2d, 0x14, 0x2a, 0x28, 0x01, 0xbf, + 0xae, 0x29, 0x87, 0x65, 0x02, 0x8f, 0xa2, 0x67, 0x68, 0x4c, 0xce, 0x1c, + 0xd1, 0xd3, 0x84, 0x2a, 0x74, 0xb8, 0x77, 0xcd, 0xa3, 0x0d, 0x4f, 0x7d, + 0xd6, 0x28, 0xe8, 0xb3, 0xcf, 0x02, 0xc9, 0xff, 0x06, 0xf3, 0x4c, 0xe5, + 0x41, 0x47, 0x4f, 0x87, 0xc8, 0x5d, 0x4e, 0x9f, 0xfa, 0xf8, 0xce, 0xed, + 0x37, 0x9d, 0xd4, 0xe8, 0x03, 0xeb, 0x12, 0x79, 0xca, 0x6d, 0x9d, 0x3c, + 0x3c, 0xf4, 0xf2, 0x74, 0xfd, 0x75, 0xe3, 0x06, 0x83, 0xa2, 0xcf, 0xbb, + 0x06, 0xc4, 0x9a, 0x7d, 0xef, 0x9a, 0xf2, 0xc7, 0x45, 0xa3, 0x94, 0x21, + 0x1d, 0xb2, 0xc9, 0xff, 0xff, 0xdb, 0x60, 0xff, 0xdb, 0xc6, 0x80, 0x7d, + 0x7d, 0xd7, 0x9f, 0x73, 0xef, 0x3a, 0x7d, 0x47, 0x3f, 0x0e, 0x0e, 0x9f, + 0xb9, 0xcf, 0xf7, 0xd5, 0x67, 0x4f, 0xf8, 0x41, 0xfa, 0xdd, 0xfc, 0x2a, + 0x74, 0xff, 0xb2, 0xfb, 0x61, 0xce, 0x6f, 0xc9, 0xd0, 0xf3, 0xfa, 0xec, + 0xf2, 0x7f, 0x65, 0x35, 0xd6, 0xaf, 0xae, 0x74, 0xff, 0xe6, 0xba, 0x75, + 0xb6, 0xd0, 0xb7, 0x75, 0x3a, 0x75, 0x76, 0xa3, 0xa3, 0x47, 0xcb, 0xea, + 0x4c, 0xfd, 0xed, 0x75, 0x5b, 0xd1, 0xd3, 0xb8, 0xe3, 0x82, 0xa7, 0xff, + 0x68, 0x35, 0x5d, 0x87, 0x57, 0x8f, 0xb3, 0xca, 0x59, 0x7f, 0x00, 0x8a, + 0xaf, 0x53, 0x61, 0xea, 0xbf, 0xad, 0xe8, 0x0a, 0xbf, 0x0a, 0xb5, 0x11, + 0x8c, 0x27, 0x35, 0x0c, 0xd9, 0xfe, 0xa5, 0xf5, 0xad, 0xf3, 0x9a, 0x3a, + 0x56, 0x74, 0x31, 0xe4, 0xf9, 0x3a, 0x9f, 0x71, 0xa6, 0xa7, 0x83, 0xa7, + 0x27, 0x1b, 0x3a, 0x7f, 0x36, 0x7f, 0x7c, 0x67, 0x25, 0x4d, 0xc7, 0x05, + 0x47, 0x27, 0x97, 0xc1, 0x9c, 0xed, 0x07, 0x5c, 0xa5, 0x9a, 0x49, 0xef, + 0x5f, 0xee, 0x8e, 0x8a, 0x9e, 0x9f, 0x51, 0x7c, 0xdc, 0x54, 0xe9, 0x59, + 0xd2, 0xa6, 0xcd, 0x36, 0x85, 0xe7, 0xfe, 0xad, 0x79, 0x16, 0xe7, 0x6d, + 0xaa, 0x9d, 0x0c, 0x7d, 0x9e, 0x93, 0xcf, 0xfb, 0x41, 0xfc, 0xed, 0xdb, + 0x57, 0xb3, 0xa7, 0xf6, 0x7f, 0x55, 0x10, 0xf2, 0x74, 0x3d, 0x12, 0xc0, + 0x45, 0x88, 0x33, 0xd4, 0x58, 0x7c, 0xe9, 0xff, 0x35, 0x3b, 0x65, 0x26, + 0xc1, 0xc3, 0xa2, 0xcf, 0x7f, 0xe4, 0x33, 0xf6, 0x9b, 0xfc, 0xd8, 0x9d, + 0x3f, 0xb9, 0xdb, 0x0f, 0x19, 0x49, 0xd3, 0xff, 0x07, 0x3b, 0x64, 0x6e, + 0xf0, 0x7b, 0x3a, 0x7f, 0xff, 0xc0, 0xac, 0x1a, 0x5e, 0xbe, 0x2c, 0x1d, + 0x58, 0xdf, 0x38, 0xf3, 0xc5, 0xeb, 0x0c, 0x98, 0xe6, 0x16, 0x54, 0xd3, + 0xd4, 0x39, 0xff, 0xeb, 0xd5, 0x6d, 0xcd, 0xb3, 0xab, 0xde, 0xd8, 0xe9, + 0xff, 0xff, 0xf0, 0x5d, 0x35, 0x0b, 0xe3, 0xa5, 0xd2, 0xfa, 0x86, 0xaa, + 0x14, 0xf3, 0xcf, 0xb4, 0x1d, 0x3f, 0xfe, 0x01, 0xe7, 0xa7, 0x8d, 0x05, + 0x70, 0x07, 0xd7, 0x9d, 0x02, 0x99, 0x9e, 0x94, 0x1d, 0x42, 0x2e, 0x6c, + 0xe4, 0xe9, 0xfb, 0xf9, 0x5d, 0xe3, 0xce, 0x95, 0x27, 0x4c, 0x1c, 0x1d, + 0x37, 0x8e, 0xce, 0x87, 0x0d, 0x7f, 0x62, 0xd3, 0x9f, 0x9c, 0x9d, 0x37, + 0x1c, 0x1d, 0x0f, 0x46, 0xcd, 0x8b, 0x21, 0x60, 0x20, 0x54, 0x8f, 0x81, + 0xc9, 0xda, 0xf1, 0xd9, 0x4b, 0x3d, 0x59, 0xff, 0xff, 0xda, 0x6e, 0x77, + 0xee, 0x79, 0x56, 0x73, 0x76, 0x3e, 0x6b, 0x5b, 0x1e, 0xce, 0x8a, 0x51, + 0x58, 0x06, 0x13, 0xfd, 0x7a, 0xdb, 0x7f, 0x56, 0x87, 0x4e, 0x6f, 0xb8, + 0x74, 0x5a, 0xa8, 0x6c, 0x94, 0x22, 0x24, 0x7d, 0x46, 0xd3, 0xab, 0x8e, + 0x1d, 0x3d, 0x7a, 0xc7, 0x63, 0xa2, 0x93, 0x7e, 0x23, 0x93, 0xff, 0x5f, + 0xff, 0x6e, 0x6e, 0xeb, 0x82, 0x74, 0xfe, 0x16, 0xff, 0xa9, 0xb6, 0x3a, + 0x7c, 0x1e, 0x77, 0x8f, 0x3a, 0x7e, 0x06, 0x55, 0x17, 0xc1, 0xd3, 0x71, + 0xc1, 0xd0, 0x87, 0xdb, 0xf2, 0x8e, 0x0b, 0x67, 0xfa, 0xdc, 0xc7, 0x32, + 0x97, 0xd4, 0xa5, 0x9a, 0xf9, 0xfe, 0xbb, 0xee, 0xdc, 0x6a, 0x6a, 0x74, + 0xff, 0xeb, 0x1e, 0xef, 0x61, 0x4d, 0x77, 0xed, 0x4e, 0x9f, 0x87, 0x3b, + 0xe6, 0xc4, 0xe9, 0xf9, 0x41, 0xd5, 0x7f, 0xf2, 0x74, 0xee, 0x38, 0xe0, + 0xa9, 0xff, 0x9b, 0xe3, 0xee, 0x78, 0xb7, 0x19, 0x47, 0x2c, 0xbf, 0x8e, + 0xba, 0xa6, 0xb7, 0x21, 0x9a, 0x29, 0x55, 0x39, 0xd2, 0x5f, 0xa5, 0x9c, + 0x28, 0x4f, 0xff, 0xb3, 0x9b, 0xb1, 0xf3, 0xe0, 0x58, 0x68, 0x0f, 0x9d, + 0x3b, 0x3f, 0x41, 0xe4, 0x12, 0x9e, 0x7d, 0xd2, 0xf3, 0xc8, 0x25, 0x3a, + 0xa1, 0xc9, 0xe4, 0x12, 0x9b, 0x8e, 0x0f, 0x20, 0x94, 0x22, 0x29, 0x9c, + 0x29, 0xd1, 0x7f, 0x05, 0x33, 0x66, 0x8b, 0x20, 0x91, 0x66, 0xfa, 0x7e, + 0xbd, 0xdd, 0x8f, 0x93, 0xa7, 0x60, 0xf6, 0xa4, 0xe6, 0x46, 0x33, 0xad, + 0x19, 0xcf, 0x75, 0x5e, 0x6c, 0xe9, 0x5f, 0x5c, 0xfa, 0xbb, 0x47, 0x9f, + 0xce, 0x3f, 0xda, 0x34, 0x14, 0x15, 0x3f, 0x81, 0xfe, 0xe5, 0x76, 0x07, + 0x49, 0xe5, 0x4e, 0xcf, 0xd0, 0x54, 0x15, 0x0c, 0x6d, 0x90, 0x41, 0x43, + 0x93, 0xc2, 0xdd, 0xa1, 0x4b, 0x35, 0x90, 0xc8, 0xc4, 0xb8, 0x4a, 0x4f, + 0x7b, 0x9f, 0x79, 0xd2, 0x51, 0xd3, 0x5b, 0xf9, 0x36, 0x4e, 0x11, 0x4f, + 0xb8, 0xb7, 0x01, 0x47, 0x4f, 0xc8, 0xce, 0x3d, 0xbb, 0x2a, 0x40, 0x74, + 0xff, 0x51, 0xeb, 0xf9, 0xdf, 0xb8, 0x27, 0x4f, 0xc0, 0xca, 0xa2, 0xf8, + 0x3a, 0x7d, 0x74, 0x2a, 0xd4, 0x74, 0xea, 0x87, 0xce, 0x81, 0x3c, 0x2d, + 0x13, 0xcf, 0xc3, 0x9d, 0xf7, 0xed, 0x4e, 0x9f, 0x83, 0xcf, 0x86, 0x52, + 0xf9, 0x4c, 0x2a, 0xc3, 0xfe, 0x79, 0x56, 0xfd, 0x10, 0xc5, 0xa7, 0xa0, + 0x05, 0x03, 0x19, 0xbc, 0xf0, 0xdd, 0x1e, 0x9d, 0x0f, 0x57, 0xa7, 0x65, + 0x9b, 0x87, 0xd8, 0xac, 0x56, 0x3f, 0xed, 0x1a, 0x4f, 0xff, 0xa8, 0xff, + 0xef, 0x9c, 0x56, 0xf3, 0x42, 0xce, 0x1d, 0x3f, 0xff, 0xfb, 0xdf, 0xfa, + 0xe0, 0xe7, 0x75, 0xad, 0xf9, 0xbf, 0x7f, 0x9c, 0xb6, 0xd8, 0xe9, 0xdc, + 0x71, 0xc1, 0x53, 0x3d, 0x8a, 0x59, 0x7f, 0x0c, 0x98, 0xb5, 0x0a, 0xdf, + 0x84, 0xe4, 0xfd, 0x43, 0x8f, 0xeb, 0x3f, 0x41, 0xd3, 0xdb, 0xca, 0x78, + 0x3a, 0x7d, 0x47, 0xc1, 0x94, 0x74, 0xff, 0xf3, 0x78, 0xd0, 0xb7, 0x79, + 0xae, 0xfc, 0x0b, 0xce, 0x8e, 0xb6, 0x8d, 0x30, 0x36, 0xc2, 0x3d, 0x13, + 0xce, 0xf1, 0xcb, 0x87, 0x4e, 0x78, 0x09, 0xd3, 0xf6, 0x99, 0xc1, 0xf6, + 0xa7, 0x45, 0x07, 0xd0, 0xf2, 0x0d, 0x0d, 0x4d, 0x95, 0x3a, 0x6f, 0x5d, + 0xc3, 0xa0, 0x4d, 0x8f, 0xa2, 0xb3, 0x62, 0xdd, 0xe6, 0xfa, 0xbd, 0xdd, + 0x1b, 0x75, 0xac, 0x46, 0xd2, 0x90, 0xa8, 0x87, 0xeb, 0xc8, 0x39, 0x8e, + 0x36, 0xe5, 0x98, 0xf9, 0x85, 0xda, 0x11, 0xd2, 0x54, 0x10, 0xde, 0x72, + 0x34, 0xdf, 0xc2, 0x35, 0x51, 0x9e, 0xee, 0x5f, 0xb6, 0x42, 0x14, 0x48, + 0x6b, 0x2a, 0xb7, 0x53, 0xc8, 0xfe, 0xc6, 0xf1, 0xd5, 0x18, 0x4f, 0x88, + 0x54, 0xbb, 0x30, 0xcf, 0xfe, 0x5a, 0xb1, 0xeb, 0xbf, 0xa6, 0x62, 0x1a, + 0x28, 0xa9, 0xfc, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0xe8, 0x9f, 0xf9, 0x78, + 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x12, 0x5c, 0xfe, 0x5d, 0xfd, 0x33, 0x10, + 0xd1, 0x79, 0x43, 0x3a, 0x3e, 0x7a, 0x09, 0xde, 0x79, 0x67, 0x88, 0xa6, + 0xe1, 0xe2, 0x8f, 0x37, 0x0c, 0x61, 0xaf, 0xb4, 0x6b, 0x1e, 0x76, 0x94, + 0xfd, 0x3c, 0x74, 0x9b, 0x3f, 0xf9, 0x6a, 0xc7, 0xae, 0xfe, 0x99, 0x88, + 0x68, 0x96, 0x66, 0xf7, 0x67, 0x4f, 0x26, 0x62, 0x1a, 0x23, 0x39, 0xf8, + 0x19, 0x54, 0x5f, 0x07, 0x4c, 0x2f, 0x3a, 0x4a, 0x3a, 0x7c, 0x1f, 0xde, + 0x2f, 0xe7, 0xa4, 0xa2, 0xdf, 0x02, 0xb3, 0xf6, 0x3c, 0x3f, 0x9f, 0x3a, + 0x7f, 0xea, 0x87, 0xb5, 0xb1, 0xf5, 0xf7, 0x53, 0xa7, 0x55, 0xa9, 0x3a, + 0x3e, 0x9a, 0xaa, 0x9f, 0x45, 0x36, 0xa5, 0x7a, 0x44, 0x9f, 0xfb, 0x41, + 0xfc, 0xef, 0xa5, 0x2f, 0x65, 0x1d, 0x3e, 0x16, 0x7d, 0x70, 0xe8, 0x03, + 0xec, 0x74, 0x8f, 0x3b, 0x3c, 0x3c, 0xe9, 0xff, 0xef, 0x75, 0x5a, 0x5e, + 0xc3, 0xdd, 0x7a, 0x7a, 0x27, 0x4e, 0x6d, 0x31, 0xd2, 0x0e, 0x4f, 0xbd, + 0xd2, 0xac, 0xff, 0xd6, 0xad, 0x07, 0x15, 0x6d, 0xe7, 0x5c, 0xe9, 0xff, + 0x6d, 0x83, 0x60, 0xc2, 0xe7, 0xa7, 0x4f, 0xeb, 0xab, 0x6a, 0xbb, 0x03, + 0xa4, 0xb7, 0x79, 0x5d, 0x85, 0xc6, 0xd8, 0xe4, 0x2d, 0xb6, 0x47, 0x90, + 0x8c, 0x12, 0xaa, 0xa3, 0xf5, 0x1e, 0xcf, 0xfe, 0x5a, 0xb1, 0xeb, 0xbf, + 0xa6, 0x62, 0x1a, 0x26, 0x99, 0xff, 0xcb, 0x56, 0x3d, 0x77, 0xf4, 0xcc, + 0x43, 0x44, 0xe3, 0x3f, 0xf9, 0x6a, 0xc7, 0xae, 0xfe, 0x99, 0x88, 0x68, + 0xa0, 0x67, 0xdf, 0x4c, 0xc4, 0x34, 0x5c, 0x13, 0x30, 0x1d, 0x3f, 0x85, + 0xec, 0x1c, 0xda, 0x8e, 0x92, 0xec, 0xfd, 0xb6, 0x63, 0xe8, 0xa4, 0xfe, + 0x05, 0xf8, 0x6e, 0xef, 0x83, 0xa7, 0xf9, 0xeb, 0xbf, 0xa6, 0x62, 0x1a, + 0x24, 0x99, 0x2f, 0x67, 0xef, 0x86, 0xb1, 0x42, 0xf6, 0xa3, 0xe7, 0x00, + 0xd2, 0x11, 0xee, 0x29, 0xf6, 0xa7, 0x58, 0x64, 0xea, 0x15, 0x93, 0xfe, + 0xf3, 0x8b, 0xbf, 0xa6, 0x62, 0x1a, 0x2d, 0x49, 0xff, 0x63, 0xd7, 0x7f, + 0x4c, 0xc4, 0x34, 0x4a, 0xb0, 0x74, 0x97, 0xe5, 0x13, 0x4a, 0x49, 0x76, + 0x47, 0x9f, 0xcb, 0xbf, 0xa6, 0x62, 0x1a, 0x22, 0x99, 0xfc, 0xbb, 0xfa, + 0x66, 0x21, 0xa2, 0x34, 0x9b, 0xdd, 0x9d, 0x3c, 0x99, 0x88, 0x68, 0xa7, + 0xe6, 0xd3, 0x1d, 0x1f, 0x3c, 0x0d, 0x15, 0xcf, 0xfd, 0xee, 0xbf, 0xeb, + 0x95, 0x4c, 0x72, 0xa7, 0x4f, 0xfd, 0x6e, 0x7a, 0x34, 0x55, 0x31, 0xca, + 0x9d, 0x25, 0xbb, 0xc9, 0x83, 0xda, 0xb8, 0x91, 0x69, 0x22, 0x7f, 0xf2, + 0xd5, 0x8f, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x35, 0x4f, 0xe5, 0xdf, 0xd3, + 0x31, 0x0d, 0x15, 0xdc, 0xf2, 0x66, 0x21, 0xa2, 0xbe, 0x9d, 0xc7, 0x1c, + 0x15, 0x21, 0x29, 0x65, 0xfc, 0x7c, 0xfa, 0x14, 0x95, 0x39, 0xed, 0x49, + 0xd3, 0xfe, 0xbd, 0xf1, 0x9a, 0xab, 0x5d, 0x07, 0x4b, 0x47, 0x4f, 0xf0, + 0x7e, 0xe8, 0x07, 0xdf, 0x27, 0x47, 0xcf, 0x23, 0x04, 0x24, 0xbb, 0x47, + 0x2b, 0x84, 0x42, 0x39, 0x58, 0x43, 0x4f, 0xfe, 0x5a, 0xb1, 0xeb, 0xbf, + 0xa6, 0x62, 0x1a, 0x27, 0xb9, 0xfc, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0xe1, + 0x9f, 0xf9, 0x78, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x12, 0x7c, 0x32, 0xe8, + 0x05, 0x07, 0x6f, 0x3c, 0xf3, 0x1a, 0x1a, 0x23, 0xb8, 0xa7, 0xf8, 0xe2, + 0x76, 0x8f, 0x55, 0x37, 0x47, 0x93, 0xf9, 0x77, 0xf4, 0xcc, 0x43, 0x44, + 0x55, 0x3f, 0x97, 0x7f, 0x4c, 0xc4, 0x34, 0x53, 0x33, 0xff, 0x96, 0xac, + 0x7a, 0xef, 0xe9, 0x98, 0x86, 0x89, 0x9e, 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, + 0xfd, 0x33, 0x10, 0xd1, 0x46, 0xc5, 0x09, 0x8f, 0x72, 0x79, 0xe4, 0xf3, + 0x4a, 0x73, 0xff, 0x2f, 0x1e, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0x3a, 0x9b, + 0xdd, 0x9d, 0x3f, 0x05, 0x8f, 0x37, 0x41, 0xd3, 0xef, 0xa6, 0x62, 0x1a, + 0x29, 0xa9, 0xff, 0xdb, 0x0d, 0x57, 0x29, 0xb7, 0x1b, 0x75, 0x3a, 0x7f, + 0xe7, 0xec, 0x06, 0x8a, 0xfa, 0xdf, 0x70, 0xe9, 0x9b, 0xc9, 0xd3, 0xf0, + 0x32, 0xa8, 0xbe, 0x0e, 0x9f, 0xfe, 0xbd, 0x6e, 0xdf, 0xfc, 0x1d, 0x6f, + 0x1e, 0x74, 0xcd, 0xd9, 0xd3, 0xfb, 0x29, 0x64, 0x04, 0x5f, 0xd1, 0x20, + 0x25, 0xbe, 0x13, 0x63, 0x68, 0xfe, 0xac, 0x29, 0xe4, 0xb7, 0x79, 0x51, + 0x57, 0x22, 0xf6, 0x58, 0x86, 0x34, 0xa5, 0x6a, 0x34, 0x49, 0xf7, 0xd3, + 0x31, 0x0d, 0x15, 0x54, 0xff, 0xb1, 0xeb, 0xbf, 0xa6, 0x62, 0x1a, 0x26, + 0xd9, 0x2e, 0xcf, 0xe1, 0x46, 0x33, 0xf9, 0x77, 0xf4, 0xcc, 0x43, 0x45, + 0x7f, 0x3f, 0x97, 0x7f, 0x4c, 0xc4, 0x34, 0x58, 0xd3, 0xef, 0xa6, 0x62, + 0x1a, 0x2d, 0x59, 0xff, 0x63, 0xd7, 0x7f, 0x4c, 0xc4, 0x34, 0x50, 0x52, + 0x5d, 0x9f, 0xc2, 0x8c, 0x67, 0xdf, 0x4c, 0xc4, 0x34, 0x5c, 0x53, 0xd8, + 0xec, 0x14, 0x1d, 0x3c, 0xec, 0xec, 0x08, 0x74, 0xfe, 0x65, 0x63, 0xa6, + 0xfb, 0xb1, 0xd2, 0x5d, 0xa2, 0xc7, 0x66, 0x38, 0x49, 0xa2, 0x69, 0xf7, + 0xd3, 0x31, 0x0d, 0x17, 0x4c, 0xf9, 0x87, 0x39, 0x63, 0xa4, 0xbb, 0x3d, + 0x60, 0x31, 0x9f, 0xff, 0x94, 0xbb, 0x7b, 0x7f, 0xbe, 0x95, 0xdb, 0x2b, + 0x04, 0xe9, 0xff, 0xfb, 0x63, 0xee, 0x75, 0xed, 0xfb, 0xbf, 0x37, 0xcb, + 0x9e, 0x9d, 0x32, 0x59, 0xd0, 0xc7, 0xef, 0xe5, 0x8e, 0x7f, 0xcf, 0xbf, + 0xff, 0x1f, 0x45, 0xf0, 0x74, 0xe1, 0xc5, 0xfc, 0xf8, 0xb4, 0x47, 0x3f, + 0xef, 0xb5, 0x3b, 0xca, 0xe9, 0xb8, 0x3a, 0x6f, 0x76, 0x74, 0xf8, 0x6f, + 0x79, 0xa3, 0xa7, 0xe7, 0xe5, 0xba, 0x6e, 0x4e, 0x87, 0x7c, 0xf4, 0xfa, + 0xd4, 0x4b, 0x3f, 0x77, 0x8e, 0x3c, 0x34, 0x74, 0xff, 0xff, 0x37, 0x3b, + 0xba, 0x74, 0x39, 0xbe, 0xf2, 0xb5, 0xcf, 0xa1, 0xd3, 0xfa, 0xee, 0xfc, + 0xf9, 0xc7, 0x9d, 0x1e, 0x51, 0x35, 0xa6, 0x69, 0xff, 0xfe, 0xdb, 0x0f, + 0xb5, 0xd8, 0x57, 0x5b, 0xbe, 0x42, 0xb6, 0x27, 0x4f, 0x26, 0x62, 0x1a, + 0x24, 0xc9, 0xf2, 0x75, 0xa7, 0x59, 0xd6, 0xdd, 0xf3, 0xa7, 0xf5, 0xd3, + 0xad, 0x63, 0xea, 0x74, 0x31, 0xf8, 0xfc, 0xfa, 0x1e, 0x99, 0x17, 0xd9, + 0x55, 0x09, 0xc9, 0xfb, 0x9e, 0xdd, 0xfa, 0xf7, 0xd4, 0x74, 0xff, 0xed, + 0x86, 0xa9, 0x40, 0xfd, 0x5c, 0x6c, 0x3a, 0x7d, 0x7a, 0x05, 0x61, 0xd3, + 0xff, 0xec, 0x4f, 0xb6, 0xc6, 0xf5, 0x6b, 0xe3, 0x8e, 0x0a, 0x87, 0x9f, + 0xd6, 0x89, 0x67, 0xe4, 0x4f, 0x50, 0x58, 0xe9, 0xff, 0xde, 0x8e, 0x69, + 0xbf, 0x5d, 0xb0, 0xe8, 0xe9, 0xdc, 0x71, 0xc1, 0x53, 0xf7, 0xf2, 0x85, + 0x05, 0x4a, 0x59, 0x7f, 0x3e, 0xb5, 0x7e, 0xfa, 0xe7, 0x4f, 0x83, 0x54, + 0x5f, 0x07, 0x4f, 0xf3, 0x26, 0xc7, 0xdd, 0x35, 0x4e, 0x9f, 0xff, 0x6b, + 0x76, 0xfe, 0x89, 0xb0, 0xd5, 0x28, 0x1f, 0x3a, 0x3e, 0x8b, 0x55, 0x14, + 0x09, 0xbc, 0xff, 0x5e, 0x77, 0xd2, 0xf9, 0xc7, 0x9d, 0x3f, 0xfb, 0x28, + 0xd8, 0x30, 0xdb, 0x81, 0xf0, 0x3a, 0x2d, 0x16, 0x1a, 0x2f, 0xe0, 0xea, + 0x7c, 0x37, 0xbc, 0xd1, 0xd3, 0xfe, 0x7b, 0x0d, 0x1e, 0x3e, 0x3e, 0xbc, + 0xe8, 0xeb, 0x9f, 0x33, 0x84, 0xb3, 0xda, 0xa2, 0xf9, 0x3a, 0x7f, 0x83, + 0xcf, 0x8f, 0xf6, 0xa0, 0xa9, 0xd0, 0xe1, 0xf0, 0x75, 0x11, 0xce, 0xe3, + 0x8e, 0x0e, 0x9f, 0xff, 0x5a, 0xb4, 0x2d, 0xdd, 0xf3, 0x5b, 0x53, 0x21, + 0x4b, 0x2f, 0xe2, 0xd3, 0x2e, 0x08, 0x43, 0xed, 0x16, 0x40, 0x74, 0xfd, + 0xb6, 0xe8, 0x81, 0x41, 0xd3, 0xf7, 0xf3, 0xe2, 0xcf, 0x3a, 0x1d, 0xd1, + 0xf4, 0x72, 0x1f, 0xf2, 0xe9, 0x9e, 0xb7, 0x79, 0x91, 0xdd, 0xd6, 0x35, + 0x31, 0x7b, 0xe1, 0x91, 0x71, 0xa3, 0xf9, 0x36, 0x43, 0x9a, 0x61, 0x86, + 0x04, 0x4e, 0x15, 0x63, 0x38, 0x9e, 0x56, 0x38, 0xfd, 0x47, 0x89, 0xe2, + 0x13, 0x93, 0xff, 0xbf, 0x7c, 0x73, 0xbb, 0x70, 0x6f, 0xef, 0x3a, 0x77, + 0xef, 0xae, 0x74, 0xaf, 0xe7, 0xd4, 0xa4, 0xb9, 0xff, 0xaf, 0x62, 0xd4, + 0x78, 0xde, 0xf3, 0xae, 0x74, 0xfd, 0x88, 0xbe, 0x38, 0xe0, 0xe9, 0x2e, + 0xd9, 0x94, 0x89, 0x19, 0xaf, 0xcc, 0xb2, 0x92, 0x5a, 0x31, 0xb8, 0xd4, + 0x9d, 0xd2, 0x4c, 0x3d, 0xb3, 0x2a, 0xe6, 0x53, 0xbd, 0x30, 0xe2, 0xf9, + 0x3a, 0x8f, 0x3b, 0x85, 0xa5, 0x61, 0xb1, 0xa8, 0x4b, 0xfb, 0x4c, 0xca, + 0x9f, 0xcb, 0xbf, 0xa6, 0x62, 0x1a, 0x23, 0x59, 0xf7, 0xd3, 0x31, 0x0d, + 0x15, 0x2c, 0xd8, 0x86, 0x88, 0x6a, 0x4b, 0xb3, 0xd2, 0xc3, 0x19, 0xff, + 0x97, 0x8f, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x1f, 0x4f, 0xe5, 0xdf, 0xd3, + 0x31, 0x0d, 0x16, 0x3c, 0xee, 0xb4, 0x57, 0x93, 0xa7, 0xe7, 0x7c, 0x6f, + 0x79, 0xa3, 0xa7, 0xf8, 0x73, 0xba, 0xe6, 0xb5, 0x87, 0x4f, 0x76, 0xa0, + 0xf9, 0xd3, 0xff, 0xfc, 0xdf, 0x1b, 0xe6, 0xf7, 0xb0, 0x4d, 0x86, 0xab, + 0x94, 0x9d, 0x00, 0x88, 0x6d, 0x91, 0x4e, 0xcc, 0x43, 0x45, 0xa1, 0x3f, + 0xec, 0xe1, 0xd9, 0x33, 0xf4, 0x5f, 0x07, 0x42, 0x1f, 0x47, 0xc9, 0xa7, + 0xff, 0xff, 0x83, 0xfb, 0xc1, 0x06, 0xd0, 0x6d, 0xab, 0xbb, 0xaf, 0xed, + 0x2f, 0x47, 0x47, 0xd1, 0x31, 0xb2, 0x19, 0xf9, 0xd7, 0x8d, 0x0b, 0x76, + 0x74, 0xf9, 0xb5, 0x7b, 0x63, 0xa7, 0xff, 0xaf, 0x55, 0xb7, 0x36, 0xce, + 0xaf, 0x7b, 0x63, 0xa2, 0x83, 0xf5, 0x12, 0x58, 0x64, 0x64, 0x5c, 0x29, + 0xa7, 0xfd, 0xdb, 0x26, 0xc1, 0xcc, 0xca, 0x0e, 0x9f, 0xe0, 0xf4, 0x5f, + 0xf6, 0xbe, 0x4e, 0x9f, 0xff, 0xed, 0xdb, 0xd3, 0x61, 0xb6, 0xbf, 0xbf, + 0x42, 0xca, 0xa9, 0xd2, 0xba, 0xa2, 0x6f, 0x47, 0x13, 0xed, 0x6f, 0x07, + 0xc9, 0xd3, 0xfc, 0x3e, 0xd1, 0xce, 0xec, 0x58, 0xe9, 0x86, 0xec, 0xf8, + 0x50, 0xa2, 0x7f, 0x5e, 0xdc, 0x0d, 0x82, 0x8e, 0x9f, 0xcf, 0xbf, 0xd4, + 0x5a, 0x83, 0xa7, 0x5e, 0xf0, 0xe9, 0xf3, 0x9c, 0xfb, 0xe8, 0x9d, 0x1c, + 0x9e, 0x2e, 0x0d, 0x4f, 0xf5, 0xdf, 0x16, 0x89, 0x7c, 0x1d, 0x16, 0x98, + 0x0d, 0x26, 0x58, 0xef, 0x52, 0x29, 0xeb, 0xde, 0x68, 0xe9, 0xf8, 0x07, + 0xd7, 0xdd, 0x4e, 0x9f, 0xff, 0xe0, 0x1f, 0x5f, 0x75, 0xe9, 0x7a, 0x6a, + 0x7b, 0xcd, 0xec, 0x0e, 0x8f, 0x28, 0x94, 0xd1, 0x64, 0x96, 0xef, 0x2f, + 0x74, 0x75, 0x84, 0xac, 0x61, 0xcc, 0x2f, 0x6e, 0x32, 0x2d, 0xc3, 0xaf, + 0xb2, 0x61, 0x86, 0xcd, 0x61, 0x13, 0xa8, 0xca, 0xfa, 0x8f, 0x7c, 0x42, + 0xd2, 0x7e, 0x76, 0x0e, 0x45, 0x9c, 0x3a, 0x7a, 0xf7, 0x9a, 0x3a, 0x4e, + 0xfd, 0x9e, 0x80, 0x98, 0x4f, 0xbe, 0x99, 0x88, 0x68, 0xb5, 0xa7, 0xfd, + 0x8f, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x41, 0xc9, 0x7d, 0x62, 0x28, 0xec, + 0xad, 0x46, 0x33, 0xff, 0x96, 0xac, 0x7a, 0xef, 0xe9, 0x98, 0x86, 0x8a, + 0x2e, 0x7f, 0x2e, 0xfe, 0x99, 0x88, 0x68, 0xba, 0xa1, 0xec, 0xac, 0x24, + 0x84, 0x70, 0x13, 0x29, 0x37, 0x73, 0xe4, 0x9d, 0xc7, 0xa9, 0x53, 0xad, + 0x29, 0xcf, 0xbe, 0x99, 0x88, 0x68, 0x88, 0x67, 0x6e, 0xf9, 0x3a, 0x4b, + 0xb3, 0xcd, 0xa4, 0xc6, 0x7f, 0x2e, 0xfe, 0x99, 0x88, 0x68, 0x8d, 0xa7, + 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8a, 0x6e, 0x7f, 0x2e, 0xfe, 0x99, 0x88, + 0x68, 0xa8, 0x27, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8a, 0x9a, 0x7d, 0xf4, + 0xcc, 0x43, 0x45, 0x61, 0x3e, 0x0e, 0x39, 0xf7, 0xe7, 0x4f, 0xf3, 0xd7, + 0x7f, 0x4c, 0xc4, 0x34, 0x47, 0xf3, 0xad, 0xa8, 0x3a, 0x4b, 0xb4, 0x5c, + 0x21, 0x8e, 0x15, 0x0a, 0x14, 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0xfa, 0x66, + 0x21, 0xa2, 0x6f, 0x9f, 0xf9, 0x58, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x13, + 0xf4, 0xfb, 0xad, 0xbb, 0xfd, 0x57, 0x49, 0xd2, 0xd9, 0xd0, 0xee, 0xcf, + 0x1b, 0xd3, 0x69, 0xf7, 0x4f, 0x3f, 0xc4, 0x3a, 0x7d, 0xd6, 0x3b, 0xae, + 0xfc, 0xb1, 0xd3, 0xff, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xd4, 0xd4, 0xe9, + 0xf7, 0xc2, 0x8c, 0x51, 0x53, 0x71, 0xc1, 0x51, 0x66, 0xff, 0x82, 0x79, + 0x7a, 0x52, 0xcd, 0x0c, 0x32, 0x32, 0xab, 0x0a, 0x99, 0xff, 0xfa, 0xd5, + 0x5d, 0x7f, 0x28, 0xe7, 0x6d, 0x5d, 0x7b, 0xb3, 0xa7, 0xd8, 0x9b, 0x0f, + 0x9d, 0x3f, 0xff, 0xf8, 0x73, 0xc8, 0x7d, 0x9f, 0xd3, 0x60, 0xae, 0x5b, + 0xa7, 0x57, 0xbb, 0x0f, 0x9d, 0x1c, 0xa6, 0x07, 0xf5, 0xed, 0x92, 0xcf, + 0xff, 0x9d, 0x9a, 0x97, 0xe0, 0xf7, 0xd3, 0xb0, 0xf8, 0x79, 0x3a, 0x7a, + 0x85, 0x03, 0xce, 0x9f, 0x54, 0x7d, 0xc7, 0x9d, 0x3f, 0xb6, 0xca, 0x5f, + 0x7d, 0xb1, 0xd2, 0xfb, 0x1f, 0xed, 0x91, 0x01, 0x3c, 0xff, 0x9a, 0x9e, + 0x7c, 0x37, 0x5f, 0x7e, 0xd4, 0xe9, 0xdd, 0xd6, 0xce, 0x9f, 0xfb, 0x96, + 0xd6, 0x56, 0xf7, 0xb0, 0x51, 0xd3, 0xb4, 0x0e, 0x1d, 0x0c, 0x7b, 0xf5, + 0x43, 0x86, 0x56, 0x96, 0x11, 0x95, 0x38, 0x65, 0xf8, 0x6d, 0x28, 0xc8, + 0x51, 0xf4, 0xf7, 0x39, 0xcf, 0x0a, 0x3a, 0x7f, 0xaf, 0x55, 0xbd, 0x6e, + 0xfb, 0x3a, 0x30, 0xf5, 0xc4, 0x7e, 0x6c, 0x13, 0xa3, 0xe6, 0xd1, 0x44, + 0x13, 0xb8, 0xe3, 0x83, 0xa7, 0xa8, 0x10, 0x62, 0x96, 0x5f, 0xcd, 0x4b, + 0xce, 0x98, 0x10, 0xe9, 0x52, 0xc6, 0xaf, 0x42, 0xf0, 0xc8, 0xc1, 0xda, + 0x07, 0xab, 0x53, 0xff, 0x51, 0xef, 0x76, 0x3e, 0xb8, 0xda, 0xc3, 0xa7, + 0xfe, 0x6d, 0xf8, 0xe7, 0x41, 0x6e, 0x32, 0x8e, 0x9e, 0x6d, 0x55, 0x0d, + 0x10, 0x74, 0xfd, 0x9b, 0x6e, 0xbf, 0xaf, 0x3a, 0x3e, 0x8e, 0xb5, 0x23, + 0xe9, 0x19, 0xd1, 0x6c, 0xdf, 0xe4, 0xe9, 0xb8, 0xe0, 0xe8, 0x79, 0xaf, + 0xe0, 0x5e, 0x7a, 0xac, 0x0e, 0x8a, 0x59, 0xa2, 0x9f, 0x57, 0xc7, 0x3d, + 0xd4, 0xe8, 0x03, 0xde, 0xf0, 0x65, 0x3b, 0x8e, 0x38, 0x2a, 0x0a, 0x59, + 0x7f, 0x3c, 0x1c, 0x03, 0x85, 0x42, 0x1b, 0xb0, 0x19, 0x80, 0x4e, 0x2b, + 0x70, 0xee, 0x17, 0xd9, 0xc2, 0x15, 0x3a, 0x7b, 0x9c, 0x1e, 0xce, 0x9f, + 0xf9, 0x87, 0xb1, 0x6a, 0x5c, 0x61, 0xec, 0xe8, 0x04, 0x40, 0x76, 0x35, + 0x52, 0x29, 0xf3, 0x5f, 0xf6, 0x07, 0x4f, 0x73, 0x6a, 0xeb, 0x9d, 0x0e, + 0x1e, 0x5b, 0xa2, 0x59, 0xfb, 0x56, 0xe0, 0xb2, 0x8f, 0x10, 0x14, 0xfb, + 0x07, 0x9d, 0xb1, 0xa2, 0x02, 0x59, 0xb9, 0x9f, 0xe6, 0xfd, 0x1d, 0x2d, + 0xc0, 0x51, 0xd3, 0xca, 0x6b, 0x51, 0xd3, 0xe6, 0xec, 0x29, 0xa9, 0xd3, + 0xfb, 0xee, 0x54, 0x07, 0x40, 0x74, 0xf5, 0x3d, 0xfd, 0x8a, 0x9b, 0x8e, + 0x0a, 0x86, 0x37, 0x7c, 0x11, 0xcf, 0xd9, 0xf7, 0xbc, 0x40, 0xa5, 0x9a, + 0x18, 0x65, 0x4d, 0x16, 0xf6, 0x0b, 0xdb, 0x43, 0xc3, 0xb1, 0x20, 0xd1, + 0x47, 0xb0, 0x8e, 0x9f, 0x7b, 0xaf, 0x73, 0xc1, 0xa2, 0x07, 0x9f, 0xf6, + 0xfd, 0xa1, 0xba, 0x36, 0x9b, 0x93, 0xa7, 0x67, 0xe8, 0x3a, 0x6e, 0x38, + 0x3a, 0x7f, 0x7c, 0x2d, 0xd7, 0x87, 0xad, 0x0d, 0xa7, 0x03, 0x91, 0xca, + 0x30, 0xfe, 0xed, 0x3f, 0xf0, 0xdf, 0x9d, 0xe3, 0xfc, 0x65, 0x2c, 0x74, + 0x31, 0xf5, 0x59, 0x24, 0xff, 0xeb, 0x52, 0xb1, 0xf7, 0xf4, 0xcc, 0x43, + 0x44, 0x31, 0x1b, 0x3f, 0x21, 0x20, 0x9f, 0x7d, 0x33, 0x10, 0xd1, 0x05, + 0x4e, 0xdb, 0x28, 0xe8, 0xb3, 0xcc, 0x03, 0x19, 0xed, 0x55, 0xbb, 0x2a, + 0x76, 0x7e, 0x82, 0xa7, 0xbd, 0x1c, 0xf2, 0x54, 0xfe, 0x0a, 0x2f, 0x55, + 0x6e, 0xca, 0x82, 0xa7, 0xeb, 0x46, 0xdb, 0x28, 0xa9, 0xb8, 0xe0, 0xa9, + 0xf8, 0x58, 0x68, 0x0f, 0x95, 0x16, 0x98, 0x5a, 0x11, 0x28, 0x73, 0x64, + 0x7d, 0x99, 0x88, 0x57, 0x05, 0x5e, 0x06, 0x26, 0x0f, 0x94, 0xb3, 0xf3, + 0x96, 0x3d, 0x3c, 0x4d, 0xc7, 0x3d, 0x3f, 0xe6, 0x7e, 0x0d, 0xd7, 0xed, + 0x53, 0xa7, 0xfb, 0x5b, 0x67, 0x5c, 0xb7, 0x6c, 0x74, 0xff, 0x35, 0x2f, + 0xea, 0x64, 0xb5, 0x1d, 0x0c, 0x7e, 0xbb, 0x3b, 0x9f, 0xff, 0x9c, 0xcc, + 0x7e, 0x6f, 0xa5, 0xd1, 0xee, 0xbd, 0xcf, 0x06, 0x8b, 0xee, 0x7c, 0x1a, + 0x1b, 0x79, 0xd3, 0xfe, 0x10, 0x7e, 0xb7, 0x7f, 0x0a, 0x9d, 0x3f, 0xb5, + 0xdf, 0x81, 0x7e, 0xec, 0xf1, 0x00, 0xce, 0xcf, 0xbc, 0xf1, 0x00, 0xc5, + 0x9f, 0x57, 0xa8, 0x53, 0x63, 0xcf, 0x10, 0x0c, 0xf6, 0x0d, 0x2f, 0x3c, + 0x40, 0x33, 0xf8, 0x13, 0x77, 0xdf, 0x6c, 0x78, 0x80, 0x67, 0x00, 0xf2, + 0x78, 0x80, 0x63, 0x94, 0x5b, 0xa8, 0x8b, 0x65, 0xce, 0x8f, 0xe7, 0x7d, + 0xb4, 0x78, 0x80, 0x60, 0xf1, 0x00, 0xcc, 0xca, 0x3c, 0x40, 0x31, 0xc9, + 0xb9, 0x01, 0x79, 0xe0, 0x57, 0x2c, 0x78, 0x80, 0x67, 0x6b, 0x10, 0xf1, + 0x00, 0xcf, 0xf8, 0x71, 0xeb, 0xd8, 0x26, 0x7c, 0xf1, 0x00, 0xcd, 0x9c, + 0x9e, 0x20, 0x19, 0xfc, 0x39, 0xc5, 0x6a, 0xdd, 0x9e, 0x20, 0x19, 0xf0, + 0x79, 0xc1, 0xec, 0xf1, 0x00, 0xcc, 0x15, 0x3c, 0x40, 0x31, 0xf3, 0xd7, + 0xd1, 0xac, 0xfb, 0x42, 0xd4, 0xbc, 0xd1, 0x00, 0xcd, 0xdb, 0x1e, 0x20, + 0x15, 0x9b, 0x49, 0xf0, 0x32, 0xb3, 0x93, 0xc4, 0x03, 0x3d, 0xee, 0x0a, + 0x1e, 0x20, 0x19, 0xcd, 0xf4, 0x3c, 0x40, 0x33, 0xfe, 0xba, 0x6b, 0xcb, + 0x58, 0xf7, 0x53, 0xc4, 0x03, 0x3e, 0xf7, 0x1e, 0xf6, 0x3c, 0x40, 0x31, + 0x68, 0x80, 0xda, 0x64, 0xdf, 0xec, 0xf1, 0x00, 0xc3, 0xd5, 0x48, 0x72, + 0x47, 0x70, 0x97, 0x05, 0x6d, 0x99, 0xf6, 0x67, 0x52, 0xdd, 0x42, 0x9f, + 0xd2, 0x29, 0xf5, 0xea, 0xb9, 0x49, 0xe2, 0x01, 0x9f, 0xdc, 0xb2, 0x39, + 0xf6, 0xd1, 0xe2, 0x01, 0xe4, 0xda, 0x4e, 0xfb, 0x70, 0x78, 0x80, 0x61, + 0x0f, 0xeb, 0xea, 0x33, 0xc0, 0x2f, 0xa9, 0xe2, 0x01, 0x9f, 0xb1, 0xc7, + 0xdd, 0x2f, 0x3c, 0x40, 0x31, 0x68, 0x89, 0xec, 0x87, 0xd2, 0xd9, 0xfe, + 0xdb, 0x55, 0x75, 0xf7, 0xfd, 0x9e, 0x20, 0x19, 0x01, 0xe2, 0x01, 0x9b, + 0x28, 0xe4, 0xf9, 0x36, 0x91, 0x37, 0xfb, 0x3c, 0x40, 0x33, 0xec, 0xd5, + 0x42, 0x93, 0xc4, 0x03, 0x3f, 0x00, 0xfa, 0xfb, 0xa9, 0xe2, 0x01, 0x86, + 0x44, 0x88, 0x92, 0x68, 0xd2, 0x39, 0x64, 0x06, 0xdc, 0x36, 0x5c, 0x40, + 0xfb, 0x0e, 0xc8, 0x70, 0xbb, 0xb2, 0x7a, 0xca, 0xd8, 0xd4, 0x78, 0x5d, + 0x50, 0x95, 0xf1, 0x0c, 0x09, 0xd9, 0x88, 0x68, 0x80, 0x56, 0x8b, 0xe9, + 0xef, 0x2e, 0xeb, 0x95, 0x1d, 0x37, 0x6c, 0x54, 0xbc, 0x95, 0x3b, 0x6d, + 0x41, 0xd3, 0x71, 0xc1, 0x50, 0x07, 0xb9, 0xd7, 0x16, 0x70, 0x4b, 0x81, + 0xc9, 0xca, 0x0a, 0x94, 0xb3, 0xc1, 0x8a, 0x19, 0x58, 0x4f, 0x25, 0x4a, + 0x4b, 0x88, 0x1c, 0x77, 0x0c, 0x89, 0xfc, 0x1a, 0xf0, 0xe9, 0xd3, 0x54, + 0xe9, 0xfb, 0xee, 0x3d, 0xbf, 0x41, 0xd3, 0xfe, 0x7d, 0x7a, 0x0d, 0xa9, + 0xbf, 0xe4, 0xe9, 0xff, 0xbf, 0xbc, 0xb7, 0xb7, 0xfb, 0xf0, 0xa3, 0xa7, + 0xef, 0x1c, 0x7c, 0x2f, 0x65, 0x4f, 0x39, 0xbc, 0x70, 0xe9, 0xf5, 0xb8, + 0xf6, 0xa4, 0xe9, 0xeb, 0x16, 0x79, 0x51, 0xf3, 0xea, 0x12, 0x37, 0x62, + 0x88, 0x64, 0xe0, 0x2c, 0xbc, 0x10, 0x76, 0x8d, 0x90, 0x99, 0x9e, 0x01, + 0xd5, 0x4e, 0x9d, 0xeb, 0xb9, 0x53, 0xa7, 0xfe, 0xed, 0x56, 0x9b, 0x0e, + 0x77, 0xef, 0x93, 0xa7, 0xf7, 0x2d, 0x4d, 0x6e, 0x9d, 0x1d, 0x3f, 0xcd, + 0xa0, 0x40, 0xe5, 0xb4, 0x74, 0xda, 0xad, 0x9f, 0x5f, 0xcd, 0x67, 0xf3, + 0xee, 0xbe, 0x2b, 0xab, 0x3a, 0x19, 0x33, 0x60, 0x22, 0xc8, 0x59, 0xfa, + 0x5b, 0x3e, 0xc7, 0x5c, 0xf2, 0xc7, 0x4d, 0x5a, 0x9d, 0x3b, 0x8e, 0x38, + 0x3a, 0x6e, 0xf0, 0xa5, 0x97, 0xf1, 0xf3, 0xda, 0xa9, 0xac, 0xff, 0xae, + 0xa3, 0x9e, 0x5c, 0x10, 0x70, 0xe9, 0xd9, 0xdd, 0x95, 0x0f, 0x4c, 0x01, + 0x50, 0x84, 0xd9, 0x17, 0x51, 0xfc, 0xfe, 0xd0, 0xdd, 0x3d, 0xf8, 0x79, + 0xd3, 0xfc, 0x36, 0xea, 0xd7, 0xc7, 0x1c, 0x15, 0x39, 0x59, 0xa3, 0xa3, + 0x67, 0xae, 0xe8, 0xf2, 0x7d, 0x6e, 0x3d, 0x9e, 0x74, 0x32, 0x63, 0xc0, + 0x8d, 0x90, 0x8d, 0xd1, 0x24, 0xfc, 0xee, 0x07, 0xdb, 0xe2, 0x74, 0xff, + 0xeb, 0xe7, 0x15, 0x74, 0xbe, 0xfb, 0xbe, 0x4e, 0x9b, 0x78, 0x74, 0xce, + 0x54, 0xe9, 0xf5, 0xba, 0x01, 0xe6, 0xcd, 0x67, 0x81, 0x58, 0xe8, 0x8b, + 0x75, 0xbb, 0xcf, 0x73, 0x7b, 0xc3, 0xa7, 0xfe, 0x6b, 0x17, 0xee, 0xc4, + 0x5b, 0x83, 0xa4, 0x1f, 0x44, 0x30, 0x92, 0xe8, 0x86, 0x28, 0x6e, 0x0b, + 0x9f, 0x1e, 0xbf, 0x32, 0x8c, 0x7c, 0x97, 0xa4, 0x2c, 0x00, 0x87, 0xf4, + 0xb3, 0x05, 0x2e, 0x6e, 0x3b, 0x8e, 0xd3, 0x06, 0x35, 0x6d, 0x4a, 0x5f, + 0xf5, 0x01, 0xd4, 0x6d, 0xb3, 0xfd, 0x7f, 0x16, 0xd3, 0xef, 0x67, 0x4f, + 0xc3, 0xdd, 0xf3, 0x8f, 0x3a, 0x7d, 0xe1, 0xc7, 0xb7, 0x5c, 0xa8, 0x64, + 0x48, 0xd9, 0xb7, 0x82, 0xd9, 0xff, 0xdf, 0xf2, 0x3e, 0xe7, 0x8b, 0xa8, + 0x30, 0x9d, 0x2f, 0x06, 0x88, 0x16, 0x5a, 0x35, 0x02, 0x92, 0x0d, 0x1b, + 0xce, 0x07, 0xe7, 0xfc, 0x1d, 0x5b, 0x0f, 0x0b, 0xef, 0xb6, 0x2a, 0x7f, + 0xff, 0x6d, 0xbf, 0xdd, 0xba, 0x0a, 0xd6, 0xc5, 0x30, 0x7b, 0x3a, 0x7f, + 0xea, 0xe5, 0x3d, 0x14, 0xd6, 0x3a, 0xea, 0x3a, 0x36, 0x8a, 0x8d, 0x30, + 0x43, 0x26, 0x1e, 0x10, 0xec, 0x9f, 0xff, 0xef, 0xd1, 0x60, 0xe6, 0x63, + 0xea, 0xca, 0xe7, 0x6c, 0x28, 0x74, 0xea, 0x05, 0xe7, 0x43, 0x2a, 0x65, + 0x54, 0x21, 0xf7, 0x19, 0xb6, 0x13, 0xfa, 0xcb, 0x3f, 0x9e, 0xe5, 0x8e, + 0x6e, 0xce, 0x9f, 0xfd, 0xf4, 0x1b, 0x74, 0x36, 0xdf, 0x6a, 0x9d, 0x3f, + 0xb1, 0xcd, 0xda, 0xae, 0xa7, 0x45, 0x9f, 0xcb, 0xa4, 0x79, 0xf8, 0x3c, + 0xea, 0xed, 0x47, 0x4f, 0xaf, 0x90, 0xfd, 0x4e, 0x9f, 0xfe, 0xae, 0xa9, + 0x40, 0xdf, 0x47, 0x6b, 0xd8, 0x28, 0xe9, 0x35, 0x07, 0xf7, 0xc1, 0x3c, + 0x02, 0x3d, 0x36, 0x47, 0xa8, 0x54, 0x4f, 0xf8, 0x43, 0xc5, 0x36, 0xea, + 0x96, 0xf0, 0x74, 0xee, 0x73, 0xe7, 0x4f, 0xbb, 0xc1, 0xb7, 0x63, 0xa1, + 0x8f, 0x17, 0xd1, 0xc9, 0xe6, 0x55, 0x2e, 0x1d, 0x0c, 0xaa, 0x81, 0xf1, + 0xcf, 0x59, 0xa5, 0x61, 0x13, 0xa2, 0x29, 0xf3, 0x50, 0xce, 0xcc, 0x74, + 0xfd, 0xef, 0x8d, 0xdd, 0x35, 0x3a, 0x7f, 0xff, 0xfe, 0x6f, 0xb6, 0x87, + 0x10, 0x2a, 0xe0, 0x7d, 0x1a, 0xba, 0x6a, 0x5b, 0xc5, 0xd4, 0xe9, 0xee, + 0xf2, 0x9a, 0x9d, 0x37, 0x1c, 0x1d, 0x15, 0x37, 0x7c, 0x11, 0xcf, 0x83, + 0x79, 0x7b, 0x29, 0x66, 0x8a, 0x36, 0x9b, 0x93, 0xb8, 0x52, 0x26, 0x35, + 0x87, 0x1c, 0xee, 0x38, 0xe0, 0xa9, 0xe7, 0xea, 0xd0, 0xa5, 0x97, 0xf3, + 0xeb, 0xe4, 0x3b, 0xa9, 0xee, 0xfe, 0x96, 0x7c, 0xf9, 0x04, 0xbe, 0x73, + 0x7e, 0xa7, 0x4f, 0xc3, 0x4d, 0x5c, 0xbd, 0x1d, 0x3f, 0xfc, 0x3a, 0x72, + 0xff, 0x78, 0xa6, 0xd8, 0x72, 0x74, 0xfa, 0x8e, 0xb8, 0x5d, 0x27, 0x4f, + 0x82, 0xad, 0x42, 0x8f, 0x67, 0xec, 0xf9, 0xb3, 0xfd, 0xfa, 0x7b, 0x3f, + 0x66, 0xc7, 0x9e, 0xcf, 0xd9, 0xef, 0x5f, 0x75, 0x3d, 0x9f, 0xb1, 0xc9, + 0xe8, 0x89, 0x14, 0xf9, 0xae, 0xb6, 0x27, 0xb3, 0xf6, 0x0f, 0x67, 0xec, + 0xd9, 0xa3, 0xd9, 0xfa, 0xa2, 0xde, 0x4f, 0x13, 0xf9, 0xf5, 0x22, 0x7a, + 0xfa, 0x83, 0xb3, 0xd9, 0xfb, 0x07, 0xb3, 0xf6, 0x6e, 0xd8, 0xf6, 0x7e, + 0xcf, 0xf5, 0xf7, 0x9f, 0xb7, 0x57, 0xc9, 0xec, 0xfd, 0x9f, 0xaf, 0x61, + 0x5f, 0x68, 0x3d, 0x9f, 0xb1, 0xda, 0x29, 0x44, 0x8e, 0xa8, 0xf3, 0xdf, + 0xa1, 0xb4, 0x7b, 0x3f, 0x60, 0xf6, 0x7e, 0xd9, 0xaf, 0x9b, 0x8e, 0x0f, + 0x67, 0xec, 0x3d, 0x58, 0xa7, 0x26, 0x97, 0x08, 0x6a, 0x61, 0x37, 0xf2, + 0x85, 0x18, 0xd6, 0x17, 0x9a, 0x5f, 0xe0, 0x9a, 0x7a, 0xde, 0xde, 0x4b, + 0x67, 0xe9, 0x68, 0x91, 0x9f, 0xf5, 0xa7, 0x37, 0xfe, 0x33, 0x6e, 0x1d, + 0x33, 0xe8, 0x2a, 0x28, 0x44, 0xc5, 0x28, 0x42, 0x7f, 0x1f, 0x5c, 0x9a, + 0xc9, 0xc6, 0x99, 0xff, 0xf3, 0xfe, 0xce, 0xb1, 0xc6, 0xe7, 0x6c, 0xac, + 0x70, 0xe9, 0xfc, 0xed, 0x95, 0x0a, 0xb9, 0x67, 0x45, 0x28, 0x8d, 0xfa, + 0xc4, 0x32, 0xf1, 0xab, 0xc9, 0xac, 0x6c, 0x0b, 0xb2, 0x73, 0xa3, 0xd8, + 0x5d, 0x4f, 0xfb, 0xcb, 0x52, 0x2d, 0xbd, 0xfa, 0x87, 0x4f, 0xc3, 0x9e, + 0x77, 0x8f, 0x3a, 0x77, 0x1c, 0x70, 0x54, 0xef, 0x0d, 0xd9, 0x4b, 0x2f, + 0xe7, 0xfc, 0x38, 0xff, 0x1f, 0xb7, 0x59, 0xf3, 0xa7, 0xf8, 0x73, 0xbe, + 0x8f, 0x6e, 0xe9, 0x3a, 0x39, 0x4c, 0xd5, 0x48, 0x1d, 0xa6, 0x09, 0x6e, + 0x90, 0x27, 0xfc, 0x22, 0x1e, 0xbb, 0x95, 0xea, 0x6d, 0x1d, 0x3b, 0x8e, + 0x38, 0x2c, 0x42, 0x09, 0xf7, 0xd3, 0x31, 0x0b, 0x10, 0x81, 0x66, 0xb6, + 0x77, 0x1c, 0x70, 0x58, 0x83, 0xd0, 0x58, 0x83, 0xcb, 0x35, 0xb3, 0x32, + 0xad, 0x12, 0xe8, 0xdf, 0x3e, 0xd3, 0x69, 0x94, 0x74, 0xf0, 0x83, 0x79, + 0x3a, 0x77, 0x86, 0xec, 0xe8, 0xa0, 0xdf, 0xa8, 0x86, 0x7c, 0x8d, 0xb6, + 0x51, 0x53, 0xe1, 0xc1, 0x1b, 0x2a, 0x6b, 0x42, 0xa6, 0xe3, 0x82, 0xa2, + 0xcf, 0xd2, 0xa4, 0xba, 0x23, 0xe0, 0x52, 0x7f, 0x0f, 0x86, 0xef, 0x76, + 0xec, 0x52, 0xcd, 0xe4, 0x32, 0x6f, 0xc0, 0xcb, 0x90, 0xd2, 0x9f, 0xf9, + 0xbb, 0xad, 0xdf, 0x38, 0x39, 0xe4, 0xe9, 0xff, 0xf5, 0x2f, 0xaf, 0x0d, + 0xfd, 0xb0, 0x6d, 0x84, 0x0e, 0x8d, 0xa2, 0x63, 0x11, 0x27, 0xf5, 0x7c, + 0x2a, 0xbc, 0x65, 0x27, 0x43, 0x2e, 0x11, 0xda, 0x60, 0x46, 0x13, 0xf8, + 0xea, 0xb2, 0x19, 0x75, 0x22, 0x9d, 0xc7, 0x1c, 0x15, 0x3d, 0xde, 0x0f, + 0x25, 0x2c, 0xbf, 0x9f, 0xbc, 0x5f, 0xee, 0xdc, 0x3a, 0x1e, 0x7b, 0xf5, + 0x31, 0x9f, 0xfe, 0x1a, 0x7a, 0x53, 0xdb, 0x0a, 0x65, 0x03, 0x87, 0x4f, + 0xff, 0xff, 0xf6, 0xab, 0xe2, 0xbd, 0x37, 0x81, 0xa0, 0xda, 0x07, 0x47, + 0x86, 0xf0, 0x74, 0xfb, 0xfd, 0x9d, 0x3f, 0xfd, 0x6c, 0xbe, 0x45, 0xbd, + 0x4b, 0xf2, 0x1f, 0x3a, 0x79, 0xdb, 0x7d, 0xba, 0x3a, 0x1e, 0x7e, 0xf8, + 0x9f, 0x3f, 0xf9, 0xf7, 0xfe, 0xd4, 0x15, 0xf1, 0x56, 0xb3, 0xa7, 0x83, + 0x9b, 0x51, 0xd0, 0xca, 0x83, 0x5e, 0x45, 0x6a, 0x39, 0x18, 0x68, 0x90, + 0xfa, 0x97, 0x3f, 0x75, 0xea, 0x03, 0x4b, 0xce, 0x9f, 0xf6, 0x7f, 0xa8, + 0x37, 0x79, 0x4f, 0x67, 0x4f, 0xfa, 0xb5, 0x6f, 0xe9, 0x97, 0xc8, 0x1d, + 0x3f, 0xe1, 0xc7, 0x37, 0x9f, 0xf8, 0x72, 0x74, 0x5a, 0x3b, 0x90, 0xc4, + 0x10, 0x54, 0x7d, 0x3c, 0xff, 0x16, 0xe1, 0xd3, 0xef, 0xf3, 0x76, 0x27, + 0x4f, 0xfd, 0xd7, 0x0b, 0xdb, 0x3a, 0xae, 0xda, 0x93, 0xa3, 0x0f, 0xbe, + 0xa4, 0xd3, 0xff, 0xd7, 0xaa, 0xdb, 0x9b, 0x67, 0x57, 0xbd, 0xb1, 0xd3, + 0xd7, 0xa0, 0xa9, 0xd3, 0xf3, 0xbb, 0x70, 0x5d, 0xea, 0x3d, 0x3a, 0x2a, + 0x7b, 0x7a, 0x20, 0x8e, 0x51, 0xdc, 0x24, 0x3a, 0x85, 0x5c, 0xff, 0xf0, + 0x56, 0xf9, 0xd5, 0x43, 0xce, 0xf0, 0x40, 0xe9, 0xff, 0xfc, 0x3a, 0xbd, + 0x83, 0x68, 0x3b, 0x67, 0xaf, 0x8e, 0x38, 0x2a, 0x7b, 0x9b, 0xbf, 0x25, + 0x4f, 0x67, 0x79, 0xa3, 0xa7, 0x3c, 0x7d, 0x34, 0x43, 0x33, 0xb8, 0xe3, + 0x82, 0xa7, 0x58, 0xa1, 0x4b, 0x2f, 0xe7, 0xfd, 0x74, 0x5f, 0x38, 0xf1, + 0x6a, 0x0e, 0x8e, 0xcf, 0x98, 0x4a, 0x27, 0xf3, 0xc6, 0xf5, 0xaf, 0x68, + 0x3a, 0x19, 0x3a, 0xaa, 0x18, 0xb9, 0x23, 0xa4, 0x87, 0xf0, 0xae, 0xc2, + 0x29, 0xe0, 0xd0, 0x31, 0xd3, 0xfb, 0xdb, 0xff, 0x7d, 0x80, 0x9d, 0x3f, + 0xfc, 0xf0, 0xe7, 0x7e, 0x2b, 0x7f, 0x4c, 0xc4, 0x34, 0x41, 0x93, 0xff, + 0xbf, 0x8e, 0xac, 0x53, 0x61, 0xdf, 0x8d, 0x1d, 0x0c, 0x8a, 0x8f, 0x57, + 0x23, 0x68, 0xff, 0xd4, 0x37, 0x26, 0xdf, 0xa7, 0x4f, 0x7c, 0x38, 0xeb, + 0x9d, 0x00, 0x6f, 0x6a, 0x2f, 0x3f, 0xba, 0xae, 0xbd, 0x57, 0xf6, 0x3a, + 0x1e, 0x9e, 0xd0, 0x46, 0x3d, 0x56, 0x5d, 0x10, 0x4f, 0xff, 0x30, 0xd1, + 0xd1, 0xc0, 0x1b, 0xe6, 0xc7, 0xc9, 0xd3, 0x9b, 0xee, 0x1d, 0x0c, 0xbd, + 0xa5, 0xc9, 0xd5, 0xc7, 0x02, 0x86, 0xa1, 0x1f, 0xce, 0x4a, 0x38, 0xf5, + 0x0f, 0xa9, 0x4a, 0x7d, 0x8a, 0xcb, 0xa9, 0xd3, 0xff, 0xc8, 0xd5, 0xab, + 0x2a, 0xf4, 0x15, 0xde, 0x1d, 0x3f, 0x84, 0x59, 0xea, 0x60, 0x3a, 0x7f, + 0x68, 0x1d, 0x06, 0x9e, 0xc5, 0x49, 0x47, 0x4f, 0xd6, 0x3e, 0x7e, 0xcb, + 0x03, 0xc3, 0xf0, 0x67, 0x16, 0x98, 0x20, 0x26, 0x55, 0xca, 0x7b, 0xfe, + 0xd2, 0xf3, 0xa7, 0xf0, 0xbc, 0x6d, 0x4c, 0x87, 0x4e, 0x57, 0x36, 0x74, + 0x31, 0xf7, 0xd9, 0x26, 0x17, 0xce, 0xd0, 0x50, 0x74, 0xff, 0xbd, 0xd5, + 0x7c, 0x7f, 0xb5, 0x05, 0x4e, 0x9f, 0xd5, 0x6a, 0x2c, 0x43, 0xc9, 0xd3, + 0xff, 0x30, 0xe6, 0xdb, 0xb5, 0xfe, 0xb5, 0x2a, 0x39, 0x45, 0xcd, 0xa1, + 0xa8, 0xce, 0x7d, 0xb0, 0x0a, 0x6a, 0x74, 0xff, 0xfa, 0xf9, 0xe9, 0x81, + 0x75, 0x6a, 0x2c, 0x43, 0xc9, 0xd0, 0x54, 0xfd, 0x5f, 0x0d, 0xf6, 0x51, + 0x50, 0x54, 0x15, 0x05, 0x41, 0x50, 0xf3, 0xe0, 0x00, 0xae, 0xcb, 0xbd, + 0x0a, 0xea, 0x0a, 0x76, 0x0a, 0x9b, 0x76, 0x54, 0xfd, 0x99, 0xa7, 0x19, + 0x45, 0x74, 0x2d, 0x64, 0xee, 0x15, 0x05, 0x41, 0x50, 0xf2, 0xd0, 0x02, + 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x28, 0x37, 0x9c, 0x85, + 0x00, 0x57, 0x61, 0x55, 0x0a, 0x74, 0x15, 0x05, 0x41, 0x50, 0xf2, 0xd2, + 0xa1, 0x50, 0x54, 0x15, 0x05, 0x41, 0x50, 0xf3, 0x51, 0xd8, 0x56, 0x82, + 0x9d, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa2, 0x83, 0x51, 0xe4, 0x2b, + 0xe1, 0x5b, 0x0a, 0x97, 0x92, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa3, 0x93, + 0x51, 0x48, 0x57, 0x61, 0x5e, 0x85, 0x41, 0x50, 0x54, 0x15, 0x3e, 0xdb, + 0x77, 0x5b, 0x2a, 0x0a, 0x87, 0x9e, 0x7a, 0x05, 0x6c, 0x2b, 0x02, 0xbb, + 0x27, 0x92, 0x15, 0x05, 0x41, 0x50, 0x54, 0x15, 0x0f, 0x35, 0x14, 0x85, + 0x00, 0x53, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x79, 0xa8, 0xe4, + 0x2b, 0x61, 0x42, 0x15, 0x2d, 0x95, 0x05, 0x41, 0x52, 0x79, 0x50, 0x55, + 0x25, 0x84, 0x15, 0x05, 0x41, 0x50, 0x54, 0x50, 0x7c, 0xcf, 0x0a, 0xf2, + 0x34, 0x83, 0x4e, 0x05, 0x76, 0x15, 0xa0, 0xa9, 0x59, 0x50, 0x54, 0x15, + 0x27, 0x95, 0x05, 0x52, 0x58, 0x41, 0x50, 0x54, 0x31, 0xe9, 0x3c, 0x28, + 0x06, 0xbe, 0x34, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x18, + 0xd9, 0x52, 0x15, 0xf0, 0xa5, 0x05, 0x08, 0x54, 0x15, 0x05, 0x41, 0x51, + 0xf2, 0xfa, 0xa1, 0x5a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x14, 0x5f, 0x08, + 0x56, 0x82, 0xa4, 0xa2, 0xa0, 0xa8, 0x2a, 0x3b, 0x2d, 0x3d, 0x0a, 0x82, + 0xa0, 0xa8, 0x2a, 0x0a, 0x86, 0x35, 0x0e, 0x05, 0x6c, 0x2b, 0xd0, 0xa8, + 0x65, 0xfb, 0x1a, 0x1c, 0x9e, 0x7b, 0xc9, 0x4d, 0xad, 0xa3, 0x6d, 0x29, + 0x00, 0xcf, 0xd7, 0x3e, 0x70, 0xeb, 0xf0, 0x8e, 0x52, 0x46, 0xcd, 0xf1, + 0x97, 0xb3, 0xb1, 0x76, 0xab, 0x3e, 0x98, 0x7d, 0x79, 0x74, 0xcb, 0xc2, + 0x5f, 0x51, 0x67, 0x82, 0x47, 0x64, 0xa9, 0xf3, 0xc5, 0xae, 0xa5, 0x2d, + 0x35, 0x89, 0xc0, 0xca, 0x2a, 0x78, 0x13, 0x3e, 0x74, 0xe0, 0xe6, 0xce, + 0x9c, 0xde, 0x17, 0x4a, 0x23, 0x3e, 0x71, 0xb1, 0xad, 0x0f, 0xcf, 0xed, + 0x87, 0x1c, 0xfd, 0xa8, 0x3a, 0x29, 0x44, 0x33, 0x8a, 0x33, 0x76, 0xc7, + 0x4f, 0xdf, 0xc1, 0xf0, 0xdd, 0x9d, 0x36, 0x7c, 0xe9, 0x01, 0xc8, 0x5a, + 0xc9, 0x0e, 0x92, 0x8e, 0x9b, 0xa9, 0x60, 0x89, 0x5f, 0x8b, 0x6d, 0x0f, + 0x07, 0x7c, 0x07, 0xcf, 0xf6, 0xd9, 0x56, 0xe3, 0x0d, 0x07, 0x45, 0xa2, + 0x47, 0xb5, 0x99, 0xf9, 0x41, 0xd5, 0x83, 0xd9, 0xd3, 0xff, 0xcd, 0xd3, + 0x3f, 0xfc, 0xed, 0x97, 0xc7, 0x1c, 0x1d, 0x0c, 0x88, 0x3f, 0x4b, 0xe2, + 0x86, 0xc0, 0x11, 0xf1, 0x94, 0xf3, 0x09, 0xe4, 0x2c, 0x08, 0x6a, 0xb8, + 0x60, 0xa2, 0x7c, 0xa5, 0x68, 0x8c, 0x69, 0x7a, 0x85, 0x34, 0xfe, 0x61, + 0xd6, 0x0f, 0xb6, 0x74, 0xfc, 0xf1, 0x07, 0xee, 0xce, 0x9f, 0x50, 0x1f, + 0x67, 0x9d, 0x1f, 0x3d, 0x21, 0x2b, 0x9f, 0xf6, 0xdb, 0xfd, 0x8d, 0xf1, + 0x9d, 0x9d, 0x3a, 0xed, 0xc3, 0xa5, 0x7b, 0x3d, 0xae, 0xcf, 0xe7, 0xef, + 0x7f, 0xea, 0xb0, 0x4e, 0x9e, 0x53, 0x5d, 0x07, 0x4f, 0xad, 0xd0, 0xb5, + 0x27, 0x40, 0x1e, 0x4d, 0x48, 0x67, 0x98, 0x74, 0x87, 0x49, 0xad, 0x35, + 0xa1, 0x7b, 0xa9, 0x46, 0x9d, 0xfa, 0x88, 0x67, 0xbd, 0xcf, 0xbc, 0xe9, + 0xe6, 0xf5, 0xdc, 0xa9, 0x53, 0xe7, 0xaf, 0x8e, 0x38, 0x3a, 0x04, 0xf4, + 0xbd, 0x27, 0x8e, 0x51, 0x2d, 0x6e, 0x90, 0xa5, 0x5c, 0xdd, 0xc7, 0xb9, + 0xec, 0x39, 0xe7, 0xef, 0xfb, 0xdd, 0x8a, 0x1d, 0x3f, 0xd4, 0x0d, 0xbf, + 0x77, 0xdd, 0x4e, 0x9e, 0xe7, 0x96, 0x74, 0x74, 0xff, 0xf6, 0xd9, 0x48, + 0xda, 0xbf, 0xa6, 0x62, 0x1a, 0x2f, 0x89, 0xd9, 0xfa, 0x0d, 0x17, 0xfc, + 0x32, 0x20, 0x11, 0x5e, 0x7f, 0x71, 0x9a, 0xab, 0x5d, 0x07, 0x4f, 0xfc, + 0xeb, 0x5e, 0x58, 0x5f, 0x7b, 0x05, 0x1d, 0x3f, 0x5f, 0x1e, 0x37, 0x9a, + 0x3a, 0x7f, 0xfd, 0xaf, 0x0f, 0x67, 0x40, 0x3d, 0xfc, 0x19, 0x56, 0x54, + 0xf6, 0xfc, 0x53, 0xa3, 0xa2, 0x84, 0x55, 0xd9, 0x7a, 0x2b, 0xcd, 0xab, + 0x3a, 0x7d, 0xf0, 0xa3, 0x14, 0x69, 0x84, 0xe7, 0xb5, 0xeb, 0x61, 0xa6, + 0x13, 0x9b, 0xb6, 0x35, 0x02, 0x73, 0xf8, 0x73, 0xce, 0x9b, 0xfd, 0x9a, + 0x81, 0x39, 0xfd, 0x5b, 0xd8, 0x57, 0xda, 0x0d, 0x30, 0x9c, 0xd7, 0xc9, + 0xa6, 0x13, 0x9b, 0x8e, 0x0f, 0x30, 0x9c, 0x5a, 0x69, 0xf4, 0x9a, 0x01, + 0x72, 0x88, 0xea, 0x82, 0xe9, 0x07, 0x82, 0x39, 0x68, 0xb3, 0x09, 0x96, + 0x7c, 0xf2, 0x0a, 0x53, 0xfa, 0xe2, 0x3c, 0xb8, 0xc5, 0x69, 0x75, 0x87, + 0x8e, 0xa5, 0x14, 0xcf, 0xff, 0x0d, 0xd7, 0xed, 0xee, 0x84, 0x1d, 0x78, + 0x51, 0xd0, 0xcb, 0xa1, 0x9c, 0x9c, 0xa4, 0x29, 0x76, 0x43, 0xa9, 0x6f, + 0xce, 0x8f, 0x67, 0xdc, 0xdf, 0xc3, 0xc9, 0xd3, 0xe1, 0xbf, 0x16, 0xe1, + 0xd3, 0xfd, 0xbc, 0x56, 0xc1, 0xa9, 0x79, 0xd3, 0xf7, 0x81, 0x7f, 0x56, + 0x50, 0x74, 0x01, 0xf5, 0x76, 0x71, 0x02, 0x8b, 0x4d, 0x42, 0x4a, 0x7f, + 0xd7, 0x9b, 0x70, 0x07, 0x77, 0x49, 0xd0, 0xcb, 0xdc, 0x37, 0x3a, 0x72, + 0x0c, 0xf9, 0x0d, 0xd1, 0x27, 0x9f, 0xfc, 0xad, 0x54, 0x06, 0x97, 0xe8, + 0x2a, 0x07, 0x4f, 0xff, 0xe1, 0xba, 0x6e, 0xb8, 0x3b, 0x06, 0xd6, 0xfd, + 0xc5, 0x1d, 0x3f, 0x0f, 0xaa, 0x0d, 0xb1, 0xd3, 0xff, 0xec, 0x1d, 0x66, + 0x6c, 0x5b, 0x55, 0xe2, 0xf6, 0x74, 0xef, 0xd6, 0xa7, 0x88, 0x0e, 0x7f, + 0xfb, 0xc7, 0xdb, 0x6d, 0xd2, 0xfe, 0x99, 0x88, 0x68, 0x80, 0xd6, 0x6a, + 0x63, 0xb4, 0x73, 0xe9, 0xee, 0x2d, 0x33, 0x70, 0x8c, 0x4e, 0x78, 0x75, + 0xdf, 0xa7, 0x4f, 0xff, 0xcf, 0xba, 0x87, 0xfe, 0x0a, 0xf1, 0xad, 0xdf, + 0x1a, 0x3a, 0x2d, 0x10, 0x18, 0x47, 0x3f, 0xff, 0xd8, 0xfb, 0x17, 0x1f, + 0x74, 0xbf, 0xc3, 0x76, 0xbe, 0x38, 0xe0, 0xa8, 0xda, 0x23, 0x84, 0x86, + 0x7f, 0x35, 0xfd, 0x33, 0x10, 0xd1, 0x04, 0xcf, 0xf3, 0x6a, 0xfe, 0x99, + 0x88, 0x68, 0xbe, 0x67, 0xc0, 0xe8, 0x6e, 0xbc, 0x9f, 0xe2, 0x1d, 0xcf, + 0xef, 0x77, 0xd5, 0xb0, 0x4d, 0x9d, 0x3f, 0xea, 0x32, 0x9e, 0xab, 0xd0, + 0xe3, 0xa3, 0xa7, 0x71, 0xc7, 0x05, 0x4f, 0xda, 0xdd, 0xa6, 0x7c, 0xa5, + 0x97, 0xf1, 0x42, 0x27, 0x05, 0x8a, 0x7f, 0xea, 0x14, 0xd4, 0xd4, 0x6e, + 0x8f, 0x0f, 0x3a, 0x7f, 0xfb, 0xc5, 0x23, 0xd1, 0x36, 0x1d, 0xf6, 0xdf, + 0x79, 0xd3, 0xfe, 0xf6, 0xad, 0x63, 0xa7, 0x7f, 0x84, 0x3a, 0x77, 0x1c, + 0x70, 0x54, 0xfe, 0xf1, 0xdb, 0x0d, 0xd3, 0xa2, 0x96, 0x5f, 0xcf, 0xff, + 0xce, 0xe7, 0x44, 0xd8, 0x73, 0xcd, 0xf1, 0xd3, 0x55, 0xba, 0x0e, 0x96, + 0x6d, 0x15, 0x7e, 0xa2, 0x43, 0xd5, 0x83, 0xf2, 0x7e, 0x10, 0xd2, 0xf9, + 0x1a, 0x92, 0x05, 0x57, 0x51, 0x86, 0xcf, 0xb7, 0x7a, 0x71, 0xe7, 0x4f, + 0xfa, 0xf4, 0xdf, 0xae, 0xd8, 0x74, 0x78, 0x82, 0x27, 0xf3, 0x5f, 0xd3, + 0x31, 0x0d, 0x10, 0x42, 0xcf, 0x26, 0x7e, 0xcd, 0xff, 0xe1, 0xc1, 0xd3, + 0xf7, 0x5f, 0x9e, 0x30, 0x5e, 0x74, 0x09, 0xef, 0xfa, 0x5b, 0x1b, 0x4c, + 0xfb, 0xb7, 0x11, 0x85, 0x5c, 0xff, 0x30, 0xeb, 0xc5, 0xef, 0x29, 0x3a, + 0x7f, 0xfb, 0x38, 0xd5, 0xed, 0x83, 0x43, 0x7b, 0x03, 0xa1, 0xe8, 0x85, + 0x13, 0x99, 0xfe, 0xdb, 0x7f, 0x42, 0xd7, 0x49, 0xd3, 0xff, 0xfc, 0x14, + 0x33, 0xeb, 0xff, 0x85, 0x2e, 0x3f, 0x3e, 0xab, 0xa4, 0xe9, 0xed, 0x6e, + 0xc7, 0x94, 0x50, 0x6c, 0xde, 0x7e, 0xf0, 0xaa, 0xf1, 0x94, 0x9d, 0x0c, + 0x7d, 0x7a, 0x3a, 0x9e, 0x07, 0x03, 0x83, 0xa7, 0xff, 0xde, 0xd0, 0x2d, + 0x7b, 0x5b, 0x6a, 0xf7, 0xef, 0xce, 0x9f, 0x5e, 0xab, 0xe2, 0xbc, 0x9f, + 0xc7, 0x82, 0x29, 0xf9, 0x36, 0x1d, 0x41, 0xe4, 0xe9, 0xf9, 0x4d, 0xd7, + 0xdd, 0xd0, 0x74, 0xff, 0xff, 0xf0, 0x6b, 0x15, 0x83, 0xdb, 0xc2, 0xbe, + 0xab, 0x60, 0xda, 0xdf, 0xb8, 0xa3, 0xa3, 0x94, 0x6f, 0x01, 0x86, 0x18, + 0xce, 0xff, 0x8a, 0x9d, 0x3f, 0xec, 0x14, 0xbf, 0xa6, 0x62, 0x1a, 0x21, + 0x18, 0x63, 0xe3, 0xf4, 0x7a, 0x7f, 0xf3, 0x5d, 0x3e, 0x34, 0x03, 0xeb, + 0xee, 0xa7, 0x4f, 0xff, 0x66, 0x51, 0xe2, 0xf7, 0x8a, 0x5f, 0x1c, 0x70, + 0x74, 0x72, 0x89, 0xf7, 0x12, 0xe7, 0xfb, 0x96, 0xad, 0x5a, 0x8b, 0xe0, + 0xe8, 0xb3, 0xdf, 0xc2, 0x59, 0xdc, 0x71, 0xc1, 0x53, 0xfd, 0x7d, 0xe7, + 0xed, 0xd5, 0xf2, 0x52, 0xcb, 0xf9, 0xb8, 0xe0, 0xa9, 0xdc, 0x71, 0xc1, + 0x53, 0xf6, 0x51, 0xce, 0xda, 0xa5, 0x2c, 0xbf, 0x81, 0x45, 0xef, 0x09, + 0x3d, 0x46, 0xf3, 0xe4, 0x0e, 0x7c, 0x28, 0xa5, 0x9b, 0x39, 0xdc, 0x71, + 0xc1, 0x53, 0xaa, 0xdf, 0x29, 0x65, 0xfc, 0xbb, 0x04, 0x41, 0x69, 0x62, + 0x7e, 0xe4, 0x59, 0xf8, 0x87, 0x4f, 0xef, 0x1f, 0xe4, 0x1d, 0x37, 0x27, + 0x4f, 0xfd, 0xbc, 0x78, 0xe7, 0x97, 0x04, 0x1c, 0x3a, 0x7e, 0xdd, 0xba, + 0xbd, 0x54, 0xe8, 0x43, 0xf3, 0xd2, 0x2c, 0x7d, 0x1e, 0xfb, 0x2b, 0x18, + 0x55, 0xc3, 0x26, 0xa9, 0x71, 0x90, 0x4e, 0xa7, 0xad, 0x77, 0x76, 0x74, + 0xff, 0xeb, 0xeb, 0xe0, 0xf7, 0x68, 0xdb, 0x65, 0x1d, 0x3f, 0x20, 0x57, + 0x60, 0xe1, 0x53, 0xf8, 0x6e, 0x97, 0xd4, 0x3c, 0x9d, 0x3d, 0x99, 0xff, + 0x27, 0x47, 0x43, 0xd6, 0xa0, 0xd2, 0x79, 0xb1, 0x4e, 0x8a, 0x9d, 0xc7, + 0x1c, 0x15, 0x3f, 0xfd, 0xe1, 0xbb, 0xbb, 0x1d, 0x6c, 0x18, 0x68, 0x29, + 0x65, 0xfc, 0xad, 0x11, 0x3e, 0xa4, 0x18, 0x64, 0xf8, 0xde, 0x59, 0x4a, + 0x50, 0x42, 0x0b, 0x70, 0xc4, 0x9f, 0xff, 0x2a, 0xd1, 0x87, 0x35, 0x5e, + 0x7d, 0xcf, 0xbc, 0xe9, 0xf3, 0x6a, 0xae, 0xac, 0xe8, 0x63, 0xfc, 0xd2, + 0xa4, 0xff, 0xf0, 0x3a, 0xb1, 0xe4, 0x73, 0x8b, 0x1c, 0xf2, 0x74, 0xff, + 0xff, 0x73, 0xb0, 0xe2, 0xdd, 0x81, 0x59, 0xaa, 0xfa, 0xfb, 0xa7, 0x47, + 0x45, 0xa2, 0xf3, 0x14, 0x21, 0x9b, 0x49, 0xaa, 0x12, 0x5f, 0x1c, 0xaf, + 0x31, 0x9b, 0x5c, 0xba, 0x50, 0x8e, 0xb9, 0xc8, 0x5d, 0xfe, 0x32, 0xd5, + 0x42, 0x67, 0x71, 0x91, 0x77, 0x09, 0x21, 0x8c, 0x82, 0xb2, 0xc1, 0x75, + 0x28, 0x2f, 0xd8, 0x68, 0x71, 0x0d, 0xd9, 0xce, 0x98, 0x4e, 0x9f, 0xfe, + 0xb1, 0x5e, 0xbc, 0x85, 0x35, 0xdd, 0xf7, 0x87, 0x4a, 0x97, 0x9f, 0x6f, + 0x23, 0x93, 0xf6, 0xdc, 0x0d, 0x82, 0x8e, 0x9f, 0xf0, 0xb6, 0xb7, 0x9d, + 0xe5, 0x35, 0x3a, 0x73, 0x9e, 0xfc, 0xe9, 0xff, 0x60, 0x7e, 0xe9, 0x5f, + 0x1c, 0x70, 0x74, 0x61, 0xef, 0xd4, 0x7a, 0x7f, 0xf8, 0x59, 0xfd, 0x3c, + 0x68, 0x07, 0xd7, 0xdd, 0x4e, 0x8b, 0x4c, 0xf5, 0x0b, 0x77, 0x09, 0xde, + 0xc8, 0x67, 0xf3, 0x0b, 0xc6, 0xef, 0xb3, 0xa7, 0xf3, 0xef, 0xf5, 0x16, + 0xa0, 0xe9, 0xff, 0xeb, 0xd3, 0x0a, 0x5e, 0xb6, 0x1f, 0xed, 0x0e, 0x9f, + 0x65, 0x6c, 0x74, 0x74, 0xed, 0x67, 0x5c, 0xe9, 0xfd, 0xad, 0x82, 0xfb, + 0xc0, 0x3a, 0x39, 0x46, 0x10, 0xa6, 0x68, 0x97, 0xd1, 0xf9, 0xfd, 0xef, + 0x6d, 0xb0, 0xc7, 0x9d, 0x3f, 0xc9, 0x7a, 0x67, 0x40, 0x3d, 0x9d, 0x3f, + 0xff, 0x7a, 0xda, 0xad, 0x8f, 0x4f, 0xb0, 0x72, 0x38, 0xf3, 0xa0, 0x11, + 0x26, 0x27, 0x13, 0xff, 0xf0, 0xdd, 0x7d, 0xe9, 0x7b, 0xc1, 0xb7, 0x1e, + 0xd4, 0x9d, 0x3f, 0xeb, 0xaf, 0xb7, 0xf4, 0xcc, 0x43, 0x44, 0x0d, 0x3d, + 0xad, 0xe3, 0xfa, 0x22, 0x90, 0x57, 0x21, 0x93, 0x00, 0xb8, 0x62, 0xcf, + 0xfb, 0x3f, 0x63, 0xdd, 0x75, 0x5a, 0x4e, 0x9f, 0xff, 0xff, 0xaf, 0x5b, + 0xc1, 0xf3, 0xd2, 0xbf, 0xcc, 0xd3, 0xab, 0xe7, 0xa5, 0xab, 0x06, 0x97, + 0x9e, 0x20, 0xb9, 0xff, 0x66, 0x79, 0x4c, 0xe7, 0xa7, 0x9e, 0x0f, 0x10, + 0x5c, 0xff, 0xdb, 0x0d, 0x83, 0x0e, 0xba, 0x79, 0xe0, 0xf1, 0x05, 0xcf, + 0xe6, 0x01, 0xd7, 0x4f, 0x3c, 0x1e, 0x20, 0xb9, 0xf9, 0x57, 0xcf, 0x4f, + 0x3c, 0x1e, 0x20, 0xb9, 0xff, 0xfe, 0xc1, 0x10, 0x57, 0x4a, 0xa6, 0xc3, + 0xe1, 0xe6, 0x8b, 0xe0, 0xf1, 0x05, 0xcd, 0x4f, 0x4e, 0x53, 0x9d, 0x45, + 0x1f, 0xaa, 0x62, 0x18, 0xa0, 0x43, 0x2a, 0xd0, 0xd9, 0xf8, 0xca, 0x39, + 0x9f, 0xc0, 0xde, 0x6b, 0xaa, 0xd2, 0x74, 0xf6, 0x7f, 0xbc, 0x3a, 0x7f, + 0xed, 0x86, 0xc1, 0x87, 0x5d, 0x3c, 0xf0, 0x78, 0x82, 0xe7, 0xf9, 0xca, + 0xa0, 0x51, 0xd3, 0xcf, 0x07, 0x88, 0x2e, 0x7d, 0xaa, 0xb2, 0xba, 0x22, + 0x28, 0x3c, 0x2a, 0x4f, 0xfe, 0xe8, 0x9b, 0x04, 0x6d, 0x57, 0xa7, 0x9e, + 0x0f, 0x10, 0x5c, 0xff, 0xff, 0xc2, 0x20, 0xae, 0x9e, 0xdf, 0x4a, 0xa6, + 0xc3, 0xe1, 0xe6, 0x8b, 0xe0, 0xf1, 0x05, 0xc5, 0xa6, 0x47, 0x4a, 0x1e, + 0x2e, 0x4f, 0xf6, 0xc3, 0xe1, 0xe6, 0x8b, 0xe0, 0xf1, 0x05, 0xcf, 0xff, + 0x66, 0x52, 0xfa, 0xec, 0x39, 0xe5, 0xbe, 0xc5, 0x4f, 0xfa, 0xde, 0xff, + 0x6b, 0xf1, 0xa3, 0xa8, 0xf1, 0x05, 0xc2, 0x23, 0xa3, 0xe9, 0x15, 0x50, + 0x9f, 0xf2, 0x07, 0xf5, 0x9d, 0xd7, 0xa7, 0x07, 0x88, 0x2e, 0x7e, 0xd8, + 0x6f, 0x61, 0xd9, 0xa0, 0x0b, 0x9f, 0x5f, 0x7d, 0x3c, 0xf0, 0x78, 0x82, + 0xe6, 0xbd, 0x21, 0xfa, 0x6c, 0xea, 0x29, 0x47, 0x75, 0x61, 0x85, 0x3f, + 0x2a, 0xf9, 0xe9, 0xe7, 0x83, 0xc4, 0x17, 0x3f, 0xe4, 0xd8, 0x7c, 0x3c, + 0xd1, 0x7c, 0x1e, 0x20, 0xb9, 0xaf, 0xa6, 0x22, 0x36, 0xa8, 0x13, 0xfb, + 0xd0, 0x56, 0x0d, 0x2f, 0x3c, 0x41, 0x73, 0xfe, 0xb0, 0x75, 0x63, 0x7c, + 0xe3, 0xcf, 0x10, 0x5a, 0x8f, 0x02, 0x39, 0x5e, 0x05, 0xf9, 0xbf, 0x66, + 0xa3, 0x1f, 0x25, 0x63, 0x18, 0xd4, 0x63, 0xbe, 0xc2, 0xdb, 0x86, 0xf9, + 0xf7, 0x75, 0xef, 0xb6, 0x34, 0x41, 0x6b, 0x44, 0x74, 0xff, 0xad, 0xfb, + 0xc7, 0xbb, 0x3b, 0x7b, 0x41, 0xd3, 0x94, 0xcf, 0x3a, 0x7d, 0x7c, 0xef, + 0xde, 0x0e, 0x97, 0xf0, 0xf1, 0x44, 0x6e, 0x70, 0x75, 0x59, 0xd3, 0xb3, + 0xfd, 0x9d, 0x2a, 0x58, 0xdc, 0xe8, 0x76, 0x7e, 0xba, 0x33, 0x6d, 0xd7, + 0x3a, 0x01, 0x16, 0xd8, 0xbe, 0x24, 0xf3, 0xb3, 0xf4, 0x1d, 0x37, 0x6c, + 0x74, 0xf0, 0x32, 0xac, 0xe8, 0x3a, 0x7e, 0xcf, 0x3a, 0x6f, 0xf6, 0x74, + 0x72, 0x6e, 0x44, 0x2a, 0x7f, 0xff, 0x30, 0x72, 0x2d, 0xea, 0x6a, 0xd3, + 0x96, 0x4f, 0x0a, 0x3a, 0x6e, 0xd8, 0xe9, 0x9b, 0xc9, 0xd3, 0xfd, 0x7a, + 0xab, 0x2b, 0xc5, 0xb8, 0x74, 0xfe, 0xad, 0xec, 0x2b, 0xed, 0x07, 0x4d, + 0xc7, 0x05, 0x4f, 0xf0, 0xdb, 0xac, 0x7d, 0x43, 0x93, 0xa1, 0x13, 0xf7, + 0x01, 0xcf, 0x8b, 0x29, 0x63, 0x64, 0x3d, 0xb0, 0x3b, 0x82, 0xc2, 0x2f, + 0x53, 0xae, 0x0d, 0x3c, 0x0c, 0x4e, 0xe3, 0x8e, 0x0a, 0x92, 0x8a, 0x59, + 0x7f, 0x3e, 0xc7, 0x33, 0x3e, 0x52, 0xd1, 0xbb, 0xe2, 0x17, 0xd3, 0xfa, + 0x9d, 0x35, 0xee, 0xe8, 0x3a, 0x19, 0xb3, 0x65, 0xb8, 0xd9, 0xfc, 0xa1, + 0x52, 0x60, 0x10, 0xf4, 0xf9, 0xf6, 0xe3, 0xc6, 0xca, 0x4c, 0x50, 0xa4, + 0xd6, 0x34, 0x1f, 0x65, 0x80, 0xba, 0x4c, 0x9e, 0xb4, 0x6d, 0x1d, 0x3d, + 0x6a, 0xbd, 0x1d, 0x3f, 0xf6, 0xfd, 0xa3, 0xd5, 0xec, 0x13, 0x3e, 0x74, + 0xf6, 0x51, 0xe1, 0xe7, 0x43, 0x22, 0xa6, 0x91, 0xfd, 0x10, 0x3b, 0x23, + 0x4f, 0xc3, 0xef, 0x2a, 0xc7, 0x9d, 0x3f, 0xfd, 0x4b, 0xc5, 0xba, 0x28, + 0x5b, 0xce, 0x82, 0x83, 0xa7, 0xf5, 0x74, 0xea, 0xc6, 0xf9, 0x3a, 0x19, + 0x16, 0xa0, 0x5d, 0x8a, 0x73, 0xb3, 0xa7, 0x83, 0xa7, 0xff, 0x85, 0xfd, + 0x2f, 0x90, 0xad, 0x3a, 0xf7, 0x2a, 0x74, 0x74, 0x3f, 0x2b, 0x1f, 0x9f, + 0xa8, 0x71, 0xfd, 0x67, 0xe8, 0x3a, 0x67, 0xd0, 0x74, 0xfb, 0x76, 0x0f, + 0xa9, 0xd3, 0xff, 0xdb, 0x6f, 0x0b, 0xd0, 0xe7, 0x75, 0xab, 0x76, 0x54, + 0xfe, 0xee, 0xfe, 0x99, 0x88, 0x78, 0x81, 0x27, 0x68, 0x28, 0x3a, 0x1e, + 0x8d, 0x1e, 0x49, 0xbe, 0xa4, 0xa3, 0xd9, 0x9d, 0x9e, 0x74, 0xf6, 0xa8, + 0xc1, 0x3a, 0x7a, 0x9a, 0xe6, 0x8e, 0x8a, 0x0f, 0x72, 0xc6, 0x76, 0x43, + 0x3f, 0x87, 0x38, 0xad, 0x5b, 0xb3, 0xa7, 0x71, 0xc7, 0x07, 0xab, 0xea, + 0x76, 0x0f, 0x25, 0xab, 0xe8, 0xb3, 0x59, 0x1c, 0xa2, 0x63, 0xb5, 0xf9, + 0xff, 0xf5, 0x88, 0x79, 0x5d, 0x75, 0xbf, 0x71, 0xef, 0x63, 0xa2, 0x83, + 0xfb, 0xf2, 0x4b, 0x3e, 0xc1, 0x10, 0x51, 0xd1, 0xd6, 0xd5, 0xa1, 0xbc, + 0xda, 0xe1, 0xd0, 0x10, 0x9a, 0xc8, 0xd0, 0x84, 0x96, 0x7c, 0x1a, 0x6d, + 0x54, 0xa9, 0xe4, 0x6d, 0x54, 0xa9, 0xb8, 0xe0, 0xa8, 0x79, 0xef, 0x59, + 0x37, 0x04, 0x13, 0x5f, 0x05, 0x2c, 0xd7, 0xcf, 0xff, 0xaf, 0x4c, 0x97, + 0x63, 0xad, 0x83, 0x0d, 0x07, 0x47, 0x67, 0xed, 0xc1, 0x34, 0xff, 0xfe, + 0x67, 0x40, 0x3d, 0xf4, 0xd5, 0x6d, 0x37, 0x83, 0xaa, 0x9d, 0x3f, 0x9c, + 0xa5, 0xfb, 0xf5, 0xbe, 0x74, 0xe7, 0xe7, 0xce, 0x9f, 0x3e, 0xf5, 0x7c, + 0x95, 0x20, 0x70, 0xf0, 0xb4, 0x37, 0x3d, 0xaf, 0x37, 0xb3, 0xa6, 0xed, + 0x8e, 0x9b, 0xb6, 0x3a, 0x7d, 0xeb, 0xec, 0x56, 0x06, 0xb3, 0xb1, 0x68, + 0x64, 0x46, 0x8a, 0x7c, 0xff, 0xda, 0xdd, 0xab, 0xc3, 0x77, 0x74, 0xe8, + 0xe9, 0xfd, 0x4a, 0x07, 0xfc, 0x37, 0x27, 0x4f, 0x76, 0xac, 0x7d, 0x4f, + 0xf3, 0x48, 0xf3, 0xba, 0xae, 0x93, 0xa7, 0xbb, 0xf8, 0x7c, 0xe8, 0x63, + 0xfb, 0xc3, 0xae, 0x07, 0xe7, 0xab, 0xed, 0x3a, 0x3a, 0x77, 0x1c, 0x70, + 0x54, 0xfa, 0xfc, 0x8f, 0xb5, 0x29, 0x65, 0xfc, 0xfa, 0xd7, 0xc7, 0x1c, + 0x1d, 0x0c, 0x7c, 0x5a, 0x38, 0x9e, 0xe3, 0x05, 0xe7, 0x4f, 0xf6, 0x9a, + 0x9e, 0xf3, 0x7b, 0x03, 0xa5, 0xb3, 0xa2, 0xcf, 0x25, 0x0e, 0x67, 0x71, + 0xc7, 0x05, 0x4f, 0xc1, 0x9e, 0x76, 0x1a, 0x29, 0x65, 0xfc, 0xfa, 0xfb, + 0xbb, 0x70, 0xe9, 0x57, 0xa2, 0x28, 0xbe, 0x7e, 0x27, 0x93, 0xc0, 0x3e, + 0xbf, 0x94, 0xd0, 0xee, 0x30, 0xc8, 0x65, 0xd4, 0x37, 0x92, 0x5b, 0x17, + 0x97, 0x8f, 0xc2, 0xd7, 0x71, 0x8c, 0x61, 0x75, 0x61, 0x4b, 0xa8, 0xd9, + 0x27, 0xe6, 0x57, 0xff, 0x9a, 0x3a, 0x7f, 0xf8, 0x15, 0x4b, 0xeb, 0xd2, + 0xc4, 0x6c, 0x3b, 0x3a, 0x36, 0x7f, 0x9a, 0x2c, 0x92, 0xdd, 0xe8, 0x4c, + 0x7a, 0xf5, 0xa8, 0xa7, 0xad, 0x0a, 0x9a, 0x71, 0x2a, 0x88, 0xee, 0xdf, + 0x2a, 0x97, 0x99, 0x63, 0x97, 0x5c, 0x51, 0x79, 0x8e, 0x39, 0x25, 0x4a, + 0xd3, 0x2b, 0xd8, 0x23, 0xc7, 0x72, 0x7b, 0xff, 0xf3, 0xb7, 0x8a, 0x95, + 0xe5, 0xba, 0x40, 0xe6, 0x56, 0x11, 0x7d, 0xcb, 0x99, 0x19, 0xf2, 0x0a, + 0xd6, 0x9d, 0xfa, 0xad, 0x41, 0x3d, 0x8d, 0xed, 0xd4, 0x3d, 0x78, 0x84, + 0xff, 0x54, 0xb6, 0x6f, 0x13, 0xd6, 0x2e, 0xd1, 0x89, 0x42, 0xe1, 0x37, + 0xa2, 0xfc, 0x4c, 0xc4, 0x4f, 0xe5, 0xdf, 0xd3, 0x31, 0x0d, 0x17, 0x1c, + 0xfe, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x75, 0xcf, 0xfc, 0xbc, 0x7a, 0xef, + 0xe9, 0x98, 0x86, 0x89, 0x46, 0x1a, 0x13, 0xe6, 0x0f, 0x28, 0xe4, 0xf3, + 0xc9, 0xe2, 0x1e, 0x04, 0x3d, 0x3a, 0xe7, 0xf9, 0x89, 0xc2, 0x4a, 0x9c, + 0x68, 0xf1, 0xd8, 0xf2, 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, 0xfd, 0x33, 0x10, + 0xd1, 0x2d, 0x4f, 0xbe, 0x99, 0x88, 0x68, 0x8d, 0xe7, 0xfd, 0x8f, 0x5d, + 0xfd, 0x33, 0x10, 0xd1, 0x2f, 0xc9, 0x76, 0x7f, 0x0a, 0x31, 0x9f, 0xcb, + 0xbf, 0xa6, 0x62, 0x1a, 0x2a, 0xb9, 0xfe, 0xf3, 0x63, 0x74, 0xeb, 0x14, + 0x74, 0xdc, 0x81, 0xd3, 0xf5, 0xfd, 0x33, 0x10, 0xd1, 0x20, 0x47, 0x43, + 0xcc, 0x58, 0xb4, 0xfa, 0xb8, 0x39, 0x49, 0xd0, 0xf3, 0xca, 0xa4, 0x92, + 0x7f, 0xf5, 0xb9, 0xbc, 0x56, 0xb6, 0xda, 0xf5, 0x47, 0x47, 0x94, 0xcf, + 0x72, 0x19, 0xfe, 0x08, 0xe7, 0xfe, 0x1b, 0xa1, 0x7d, 0x4c, 0x23, 0x7a, + 0x3a, 0x16, 0x7f, 0xbf, 0x39, 0x9f, 0xcb, 0xbf, 0xa6, 0x62, 0x1a, 0x2c, + 0x89, 0xfc, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0xd7, 0x9f, 0xcb, 0xbf, 0xa6, + 0x62, 0x1a, 0x2e, 0x49, 0xf7, 0xd3, 0x31, 0x0d, 0x17, 0x64, 0xff, 0xb1, + 0xeb, 0xbf, 0xa6, 0x62, 0x1a, 0x28, 0xe9, 0x2e, 0xcf, 0xe1, 0x46, 0x33, + 0xef, 0xa6, 0x62, 0x1a, 0x29, 0x59, 0xff, 0xff, 0xed, 0xb5, 0x0d, 0xb0, + 0x75, 0x9c, 0xec, 0x16, 0x9b, 0x07, 0x36, 0xd4, 0x59, 0xd3, 0xe5, 0xab, + 0x1e, 0xbb, 0x45, 0x83, 0x86, 0x31, 0x42, 0xea, 0x6b, 0xe1, 0x97, 0x49, + 0x38, 0x47, 0xec, 0xa2, 0x2e, 0xcf, 0x2a, 0x79, 0xa8, 0x5a, 0x3a, 0x86, + 0xbc, 0xff, 0x3d, 0x77, 0xf4, 0xcc, 0x43, 0x44, 0x71, 0x3f, 0xc0, 0xbb, + 0xfa, 0x66, 0x21, 0xa2, 0xb5, 0x92, 0xf1, 0x10, 0x7a, 0x42, 0x9f, 0xfc, + 0xb5, 0x63, 0xd7, 0x7f, 0x4c, 0xc4, 0x34, 0x4b, 0x73, 0x5d, 0x27, 0x4f, + 0xee, 0x6d, 0x4a, 0x60, 0xa9, 0xd1, 0x49, 0xe4, 0x00, 0xb4, 0xed, 0xf2, + 0xf3, 0xa7, 0x3d, 0x48, 0x74, 0xff, 0xfd, 0xbc, 0xa7, 0xbe, 0x77, 0x8f, + 0xba, 0x8f, 0xb9, 0xe0, 0xe8, 0x34, 0x43, 0x73, 0xfe, 0xc7, 0xae, 0xfe, + 0x99, 0x88, 0x68, 0x98, 0x27, 0x7f, 0xde, 0xca, 0x9f, 0xc3, 0x7a, 0xd3, + 0x7e, 0xa7, 0x49, 0x6c, 0x9b, 0x35, 0x04, 0x5c, 0x8e, 0xd8, 0xda, 0x2f, + 0xa8, 0x5f, 0x48, 0xfe, 0x07, 0xa7, 0x2b, 0xdf, 0x95, 0x3f, 0xec, 0x7a, + 0xef, 0xe9, 0x98, 0x86, 0x89, 0x8e, 0x4b, 0x03, 0xe4, 0x50, 0xec, 0xfc, + 0xd5, 0xe9, 0xab, 0xd9, 0xd3, 0x98, 0x68, 0x3a, 0x7f, 0xff, 0xf9, 0xf5, + 0xdd, 0xfb, 0xc5, 0x77, 0x69, 0x75, 0xe9, 0x74, 0xbe, 0xa0, 0x20, 0x74, + 0xf2, 0x66, 0x21, 0xa2, 0xb1, 0x9f, 0xf7, 0x55, 0xe8, 0x6f, 0xd6, 0x1d, + 0x1d, 0x1e, 0x53, 0x32, 0x42, 0xea, 0x46, 0xfe, 0xff, 0xa2, 0xb9, 0xff, + 0xcc, 0x3a, 0xf3, 0xeb, 0x0d, 0xa3, 0x7c, 0xe9, 0xfe, 0xe7, 0x77, 0x5a, + 0x5e, 0xdb, 0x3a, 0x7f, 0x9a, 0x97, 0xb8, 0xfc, 0xfd, 0x07, 0x45, 0x9f, + 0xa8, 0x1d, 0x4f, 0xfa, 0xf9, 0xf8, 0x7b, 0x47, 0x75, 0x79, 0xd3, 0xff, + 0xff, 0x0f, 0xb4, 0x5a, 0x74, 0x1f, 0x5d, 0xba, 0x5d, 0x2f, 0xbf, 0x47, + 0xba, 0x9d, 0x3f, 0xba, 0xdd, 0x0e, 0x3f, 0xac, 0xfd, 0x07, 0x4f, 0xfe, + 0xb7, 0x37, 0x8a, 0xd6, 0xdb, 0x5e, 0xa8, 0xe9, 0xdb, 0x05, 0xda, 0xa7, + 0x54, 0x4d, 0xdc, 0x2f, 0x44, 0x83, 0x48, 0x5d, 0x4f, 0x9e, 0x10, 0xa6, + 0xf1, 0xd9, 0xd3, 0x7a, 0xe1, 0xd3, 0xec, 0x1a, 0x3d, 0xa9, 0xd1, 0xd9, + 0xec, 0x88, 0xcd, 0x46, 0x27, 0xde, 0xd3, 0x43, 0x79, 0x3a, 0x7c, 0xab, + 0x16, 0x79, 0xd3, 0xcd, 0xfc, 0x13, 0xa7, 0xab, 0x56, 0xec, 0xe8, 0x63, + 0xe6, 0xd9, 0x2f, 0x03, 0xf3, 0xe6, 0x7f, 0x7e, 0xbc, 0xe9, 0xcc, 0x2f, + 0x3a, 0x1c, 0x3c, 0x3d, 0x14, 0xce, 0xdf, 0x85, 0x1d, 0x3f, 0x32, 0xac, + 0x43, 0xc9, 0xd2, 0xa9, 0xd0, 0x06, 0xf3, 0x0b, 0x26, 0xed, 0x8a, 0x9b, + 0x8e, 0x0a, 0x80, 0x35, 0xdc, 0x0b, 0x4f, 0xec, 0x78, 0xde, 0xb6, 0x05, + 0x2c, 0xd0, 0xcf, 0x73, 0x94, 0xd4, 0xe9, 0xcc, 0x2e, 0x1d, 0x30, 0xb1, + 0xd0, 0xe1, 0xaf, 0xf8, 0xdc, 0xff, 0xde, 0x40, 0x52, 0xac, 0xac, 0xa7, + 0x47, 0x4e, 0xee, 0xdd, 0x8e, 0x8f, 0x27, 0xc7, 0xf4, 0x49, 0x79, 0x3a, + 0x6f, 0xf9, 0x3a, 0x00, 0xd5, 0x78, 0x12, 0x86, 0x4d, 0x1e, 0xd4, 0x82, + 0x10, 0xbb, 0x4e, 0x9b, 0x7a, 0x3a, 0x7e, 0xed, 0xb7, 0x6e, 0xb0, 0xe9, + 0xf8, 0x35, 0x7b, 0xcf, 0x27, 0x4e, 0xe3, 0x8e, 0x0a, 0x9f, 0xfa, 0xd3, + 0x96, 0xa3, 0xc5, 0xef, 0x29, 0x29, 0x65, 0xfc, 0xf0, 0x7d, 0xdb, 0x93, + 0xa5, 0xf3, 0xa7, 0xca, 0x0d, 0x77, 0x87, 0x45, 0x07, 0xb9, 0xd7, 0x25, + 0xf4, 0x42, 0x7f, 0x20, 0x54, 0x6d, 0xd6, 0x1d, 0x35, 0xe8, 0xe8, 0xa4, + 0xf1, 0xb6, 0x63, 0x3d, 0xa1, 0xb7, 0x9d, 0x3f, 0xf8, 0x2b, 0xbb, 0xe4, + 0x6d, 0xd0, 0xdd, 0x4e, 0x8f, 0x9f, 0x4e, 0x88, 0x24, 0xb6, 0x5e, 0x4f, + 0xa0, 0xbf, 0x98, 0x49, 0x5b, 0x90, 0x11, 0xfd, 0x69, 0x4d, 0xdb, 0x8e, + 0x1f, 0x10, 0x3b, 0x16, 0x77, 0x0b, 0x85, 0x32, 0xb0, 0xb1, 0xd3, 0xdf, + 0x88, 0x46, 0x4f, 0xbe, 0x99, 0x88, 0x68, 0xad, 0xe7, 0xfd, 0x8f, 0x5d, + 0xfd, 0x33, 0x10, 0xd1, 0x38, 0x49, 0x76, 0x7f, 0x0a, 0x31, 0x9b, 0xdd, + 0x9d, 0x3e, 0xfa, 0x66, 0x21, 0xa2, 0xd1, 0x98, 0x3c, 0x9d, 0x3f, 0xfe, + 0xa1, 0xb4, 0xdc, 0xfd, 0xb7, 0x95, 0x1b, 0xec, 0xe9, 0xff, 0x35, 0x39, + 0xd7, 0xd8, 0xe7, 0x5e, 0x83, 0xa1, 0x91, 0x37, 0xb5, 0x59, 0x5b, 0x88, + 0xd4, 0xac, 0x2c, 0xa4, 0xb7, 0x79, 0x34, 0xab, 0x17, 0xdc, 0x60, 0xb3, + 0xc9, 0x98, 0x86, 0x8b, 0x6a, 0x7e, 0xdb, 0x29, 0x83, 0x93, 0xa5, 0x7f, + 0x3d, 0x7d, 0x15, 0xcf, 0xf2, 0xfc, 0xf9, 0xcf, 0xf3, 0xe8, 0x9d, 0x0b, + 0x3e, 0x5e, 0xc9, 0xe7, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8b, 0x96, 0x7f, + 0x2e, 0xfe, 0x99, 0x88, 0x68, 0xbb, 0x61, 0x9b, 0x26, 0xaa, 0x0a, 0x1f, + 0x28, 0x07, 0x98, 0x6e, 0xf9, 0x97, 0x9c, 0x13, 0xe4, 0xdd, 0x78, 0xd9, + 0xf7, 0x1b, 0x88, 0xc3, 0xf6, 0xa4, 0x7a, 0x3c, 0x9f, 0xcb, 0xbf, 0xa6, + 0x62, 0x1a, 0x2a, 0x79, 0x83, 0x47, 0x4f, 0x26, 0x62, 0x1a, 0x2b, 0x99, + 0xfc, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0xce, 0x8f, 0x9f, 0x3e, 0xca, 0xe7, + 0xdf, 0x4c, 0xc4, 0x34, 0x48, 0x53, 0xfc, 0x14, 0xd7, 0x42, 0xca, 0xa9, + 0xd3, 0x3d, 0x76, 0x7d, 0x3d, 0x98, 0xcf, 0x3b, 0xdb, 0x65, 0x1d, 0x3f, + 0xaf, 0x75, 0xad, 0xfe, 0x83, 0xa4, 0xbe, 0x53, 0x8e, 0xb7, 0xcc, 0x84, + 0x5d, 0x4b, 0xb4, 0x4d, 0x3f, 0xf9, 0x6a, 0xc7, 0xae, 0xfe, 0x99, 0x88, + 0x68, 0x9f, 0x21, 0x15, 0x39, 0x75, 0xe3, 0xca, 0xda, 0xac, 0xfb, 0xe9, + 0x98, 0x86, 0x8a, 0xca, 0x7f, 0xd8, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x13, + 0x74, 0xc0, 0xbb, 0x3f, 0x85, 0x18, 0xcf, 0xbe, 0x99, 0x88, 0x68, 0x95, + 0xa7, 0xfb, 0xce, 0xc3, 0xa7, 0xa9, 0x75, 0x3a, 0x7c, 0xb5, 0x63, 0xd7, + 0x67, 0xdb, 0x86, 0x33, 0xfe, 0x0a, 0xfa, 0xa1, 0x07, 0x5e, 0xe1, 0xd3, + 0xf8, 0x5b, 0xf6, 0xeb, 0x14, 0x74, 0x3c, 0xfc, 0x81, 0x02, 0x7d, 0xf4, + 0xcc, 0x43, 0x44, 0xb9, 0x3f, 0xc1, 0x8f, 0xd0, 0xb2, 0xaa, 0x74, 0xf3, + 0xa0, 0x16, 0x3a, 0x7c, 0xb5, 0x63, 0xd6, 0xc8, 0xa9, 0xb2, 0x1d, 0x98, + 0xe1, 0xb4, 0xff, 0xcb, 0xc7, 0xae, 0xfe, 0x99, 0x88, 0x68, 0x8e, 0xe7, + 0xfb, 0x5b, 0xb7, 0xaf, 0x06, 0xa7, 0x4f, 0xdd, 0x60, 0xb2, 0x58, 0x9d, + 0x37, 0xbb, 0x3a, 0x7e, 0x77, 0xc6, 0xf7, 0x9a, 0x3a, 0x7f, 0x5f, 0x15, + 0x61, 0xd5, 0x4e, 0x9f, 0x7d, 0x33, 0x10, 0xd1, 0x50, 0xcf, 0x6f, 0x57, + 0x41, 0xd3, 0xeb, 0xa3, 0x05, 0xd1, 0xd3, 0xff, 0xff, 0xf9, 0x9f, 0xd3, + 0x5b, 0x06, 0xaf, 0x4b, 0xf5, 0x19, 0xd7, 0x4b, 0xff, 0xed, 0xd7, 0xb9, + 0xb3, 0xa2, 0xd1, 0xc2, 0x24, 0x55, 0x28, 0x9f, 0xff, 0xef, 0x73, 0xae, + 0x14, 0x6f, 0x03, 0x4d, 0xb0, 0xd5, 0x6f, 0x93, 0xa4, 0xb7, 0x7d, 0x52, + 0x8b, 0xbc, 0x5d, 0xd6, 0x0b, 0xd0, 0x61, 0x66, 0x5a, 0x8c, 0x4b, 0xa8, + 0xba, 0x7d, 0xf4, 0xcc, 0x43, 0x45, 0x51, 0x3f, 0xec, 0x7a, 0xef, 0xe9, + 0x98, 0x86, 0x89, 0xae, 0x4b, 0xb3, 0xf8, 0x51, 0x8c, 0xfe, 0x5d, 0xfd, + 0x33, 0x10, 0xd1, 0x56, 0x4f, 0xfc, 0xbc, 0x7a, 0xef, 0xe9, 0x98, 0x86, + 0x89, 0x12, 0x7d, 0xf4, 0xcc, 0x43, 0x45, 0xa5, 0x3f, 0xec, 0x7a, 0xef, + 0xe9, 0x98, 0x86, 0x89, 0xf6, 0x4b, 0xb3, 0xf8, 0x51, 0x8c, 0xff, 0xe5, + 0xab, 0x1e, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0x84, 0x9f, 0x6c, 0x28, 0x6f, + 0x9d, 0x3e, 0xfa, 0x66, 0x21, 0xa2, 0x8f, 0x9f, 0xf0, 0xb3, 0x8c, 0x2c, + 0xe6, 0xd8, 0xe9, 0xff, 0xfa, 0xf9, 0xdb, 0x78, 0x5e, 0x87, 0x3b, 0xad, + 0x5b, 0xb2, 0xa7, 0xcb, 0x56, 0x3d, 0x6c, 0x8f, 0x2b, 0x27, 0xd1, 0x8f, + 0x51, 0xe4, 0x33, 0x21, 0xbe, 0x88, 0xd6, 0x1e, 0xaf, 0x69, 0xbe, 0x65, + 0x44, 0x24, 0x3f, 0x29, 0x27, 0x70, 0xf3, 0x70, 0xc5, 0xec, 0x9f, 0x51, + 0xa2, 0xcf, 0xe5, 0xdf, 0xd3, 0x31, 0x0d, 0x11, 0x14, 0xfd, 0x7f, 0x4c, + 0xc4, 0x34, 0x45, 0x73, 0xfd, 0xd7, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x5c, + 0x42, 0xcf, 0xf3, 0x0d, 0xa7, 0xaf, 0x79, 0xa3, 0xa7, 0xf5, 0x87, 0xfb, + 0xef, 0xda, 0x9d, 0x27, 0x7c, 0x4f, 0x56, 0xa4, 0x13, 0xff, 0xf6, 0xaa, + 0x1b, 0xc0, 0x78, 0x0e, 0xbd, 0xdf, 0xec, 0xe9, 0xf7, 0xd3, 0x31, 0x0d, + 0x14, 0xf4, 0xfd, 0x75, 0xe8, 0x38, 0xf3, 0xa3, 0xac, 0x47, 0x1b, 0x16, + 0x5a, 0xc8, 0x98, 0xcf, 0xfe, 0xc7, 0xaf, 0x91, 0xce, 0x2b, 0x56, 0xec, + 0xe8, 0x5a, 0x22, 0xb9, 0x3f, 0x9c, 0xbe, 0x6c, 0xe9, 0xf3, 0x3f, 0xbf, + 0x5e, 0x74, 0xf2, 0x66, 0x21, 0xa2, 0xb3, 0x87, 0x0f, 0x53, 0xe5, 0x33, + 0xf5, 0x0a, 0x61, 0x7d, 0x4e, 0x9c, 0xd4, 0x01, 0xd3, 0xed, 0x77, 0xe0, + 0x5e, 0x74, 0xef, 0x72, 0xa7, 0x4f, 0xad, 0xca, 0x3d, 0xec, 0xe9, 0x2e, + 0xd1, 0xb9, 0xf2, 0x3d, 0x96, 0xe0, 0xd8, 0x95, 0x78, 0x1c, 0x9f, 0xf9, + 0x78, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x12, 0x2c, 0xfd, 0x7f, 0x4c, 0xc4, + 0x34, 0x59, 0x33, 0xff, 0xb5, 0x5f, 0x15, 0x5d, 0xd0, 0x02, 0xfa, 0x9d, + 0x0b, 0x44, 0x15, 0x9b, 0x4f, 0xe5, 0xdf, 0xd3, 0x31, 0x0d, 0x16, 0xc4, + 0xeb, 0xad, 0x9d, 0x3c, 0x99, 0x88, 0x68, 0xb6, 0xe7, 0xab, 0x46, 0x7c, + 0xe8, 0xf9, 0xe6, 0xe8, 0xae, 0x4b, 0x7a, 0x22, 0x6d, 0x9e, 0x75, 0x1b, + 0x03, 0xa7, 0xfd, 0xd6, 0x75, 0x8e, 0xeb, 0x5b, 0xb1, 0x6e, 0xce, 0x9f, + 0x98, 0x5f, 0xcf, 0xaa, 0x3a, 0x7d, 0xf4, 0xcc, 0x43, 0x45, 0xe1, 0x3d, + 0xae, 0xab, 0xd9, 0xd3, 0xff, 0x37, 0x85, 0x52, 0xfd, 0x58, 0xea, 0xa7, + 0x4f, 0xac, 0x7b, 0x76, 0x63, 0xa7, 0xcd, 0xe3, 0xdc, 0xa9, 0xd3, 0xb4, + 0xdd, 0x9d, 0x25, 0xf5, 0x89, 0xd0, 0xf5, 0xa8, 0x72, 0x84, 0xeb, 0x2e, + 0xa4, 0xc7, 0x64, 0x9d, 0xa3, 0x09, 0x4e, 0x8a, 0x67, 0x05, 0xd2, 0x74, + 0xfb, 0xe9, 0x98, 0x86, 0x8b, 0xd2, 0x7f, 0xc3, 0x9a, 0x7b, 0x79, 0xd0, + 0x50, 0x74, 0xfa, 0xd5, 0xbc, 0xe4, 0xe9, 0x2f, 0x94, 0x59, 0x58, 0xdf, + 0x83, 0x17, 0x63, 0xf8, 0x66, 0x4b, 0x9d, 0x10, 0xb8, 0xb8, 0xf8, 0xd0, + 0x90, 0x23, 0x4c, 0xfa, 0xe2, 0xa1, 0x9f, 0xd9, 0x10, 0xc3, 0x17, 0xd8, + 0xf2, 0x78, 0x8d, 0x16, 0x6f, 0x76, 0x74, 0xf5, 0xef, 0x34, 0x74, 0xfe, + 0xb0, 0xff, 0x7d, 0xfb, 0x53, 0xa4, 0xef, 0x89, 0xea, 0xd4, 0x82, 0x7c, + 0x1a, 0x6a, 0x68, 0x3a, 0x7d, 0xf4, 0xcc, 0x43, 0x44, 0x47, 0x3f, 0xfd, + 0xbf, 0x6b, 0x5b, 0x50, 0xdb, 0xae, 0x8c, 0xee, 0xce, 0x9f, 0xf3, 0xda, + 0x8f, 0xde, 0xb4, 0x1a, 0x3a, 0x7f, 0xaf, 0xf7, 0x5b, 0xc1, 0xa0, 0xe9, + 0xff, 0xfe, 0x6d, 0xe0, 0x69, 0xb6, 0x37, 0xad, 0x86, 0xec, 0x38, 0x3a, + 0x6a, 0x14, 0x54, 0xdc, 0x70, 0x54, 0xff, 0x96, 0x9b, 0x07, 0x36, 0xd4, + 0x2f, 0xb3, 0x5f, 0xc0, 0xbc, 0xf3, 0xa6, 0xd3, 0x1d, 0x0f, 0x3f, 0xa0, + 0x58, 0x9f, 0xba, 0xe3, 0x7b, 0xcd, 0x1d, 0x3f, 0x37, 0x9b, 0x10, 0xf2, + 0x74, 0xfd, 0x7a, 0x76, 0xd5, 0xec, 0xe8, 0xb4, 0x46, 0x09, 0x7d, 0x4b, + 0xa7, 0xff, 0xe4, 0x5f, 0xf0, 0x43, 0x4b, 0xfb, 0x68, 0x73, 0xb3, 0xa1, + 0xde, 0x57, 0xf9, 0xd6, 0x36, 0x31, 0x65, 0x94, 0x21, 0x8d, 0x2b, 0x20, + 0x7d, 0xf3, 0x6c, 0x8c, 0x2f, 0x50, 0xad, 0x74, 0x5d, 0x3e, 0xfa, 0x66, + 0x21, 0xa2, 0x2e, 0x9f, 0x6b, 0xbf, 0x02, 0xf2, 0xa4, 0xbb, 0x3d, 0xbc, + 0x31, 0x85, 0xa6, 0x5c, 0xf8, 0xc2, 0x27, 0xfe, 0x56, 0x3d, 0x77, 0xf4, + 0xcc, 0x43, 0x44, 0xcd, 0x3f, 0x75, 0xa3, 0xba, 0x77, 0xea, 0xda, 0x3a, + 0x75, 0x2d, 0x53, 0xa7, 0x20, 0x28, 0xe9, 0xba, 0xba, 0xd9, 0xd3, 0xf6, + 0xae, 0x8b, 0xed, 0xc3, 0xa3, 0xad, 0x9e, 0x73, 0x83, 0xf3, 0xe4, 0xcd, + 0x83, 0x87, 0x4f, 0xff, 0xbb, 0xa5, 0xfb, 0xf5, 0xbe, 0xbd, 0x82, 0x67, + 0xce, 0x9f, 0xf9, 0xd8, 0x34, 0x08, 0x1c, 0xea, 0xd0, 0xe9, 0xff, 0xfe, + 0xf7, 0x05, 0x06, 0xf9, 0xdf, 0xbd, 0x36, 0xcf, 0xfb, 0x50, 0x74, 0x32, + 0x60, 0x96, 0xaf, 0xb4, 0x49, 0xff, 0xf7, 0x20, 0x34, 0x5d, 0x43, 0x36, + 0xbe, 0x38, 0xe0, 0xa9, 0xfa, 0x97, 0xd7, 0xbf, 0x5c, 0x3a, 0x79, 0x33, + 0x10, 0xd1, 0x67, 0xcf, 0xf8, 0x36, 0xcf, 0x0d, 0x36, 0xaa, 0x74, 0xff, + 0xf0, 0x7f, 0x79, 0xd2, 0xdd, 0x0d, 0xd6, 0xc4, 0xe9, 0xdc, 0x71, 0xc1, + 0x53, 0xfe, 0xc7, 0xd4, 0x6d, 0x39, 0xbf, 0x94, 0xb2, 0xfe, 0x7f, 0x9b, + 0x61, 0xc8, 0xe6, 0x38, 0x74, 0xff, 0x00, 0xf3, 0xe3, 0x9f, 0x75, 0x53, + 0xa1, 0x15, 0x0f, 0x38, 0xb1, 0xf3, 0x25, 0x15, 0xec, 0xf3, 0xb6, 0xed, + 0x25, 0xba, 0x37, 0x9f, 0xef, 0xe7, 0x1b, 0x06, 0xfb, 0x1d, 0x3f, 0xff, + 0xff, 0x5d, 0xf7, 0x5b, 0xb1, 0xf3, 0xe3, 0xe2, 0xd7, 0xb5, 0xd4, 0x6e, + 0x85, 0x5a, 0x8e, 0x9d, 0x56, 0xa0, 0xe9, 0xdd, 0x57, 0xb3, 0xa1, 0xe8, + 0xc3, 0xac, 0x22, 0x74, 0x39, 0x3b, 0x7e, 0xf0, 0x74, 0xee, 0xfd, 0x43, + 0xa7, 0x6a, 0xfc, 0x1d, 0x1c, 0x9e, 0xc5, 0x23, 0xc0, 0x3b, 0x3f, 0x7c, + 0x1d, 0x58, 0xd4, 0xe9, 0xf6, 0xc5, 0xaf, 0xe6, 0x4f, 0xf8, 0x3e, 0xfb, + 0xfd, 0x1e, 0xe7, 0x26, 0x88, 0x35, 0x66, 0x96, 0x7d, 0x88, 0x0a, 0x63, + 0xa7, 0xe7, 0xec, 0x72, 0x9d, 0x1d, 0x2b, 0x43, 0xd1, 0x12, 0x49, 0xff, + 0xac, 0x69, 0xd5, 0xfc, 0x28, 0xc5, 0x1d, 0x30, 0x09, 0xd3, 0xf6, 0x71, + 0xab, 0xde, 0x98, 0xf5, 0xfc, 0xa1, 0xc3, 0x27, 0x84, 0xf5, 0x2b, 0x85, + 0x70, 0xbe, 0x4f, 0xdf, 0xbe, 0x6b, 0xb6, 0x3a, 0x7f, 0xff, 0x7a, 0x39, + 0xe7, 0xa7, 0x81, 0xcd, 0x54, 0x29, 0xd8, 0x70, 0x74, 0xff, 0x95, 0x7a, + 0xaf, 0x8a, 0xe3, 0xec, 0xe9, 0xfa, 0xb5, 0x6f, 0xe9, 0x8e, 0x59, 0xbf, + 0x9e, 0xdd, 0x83, 0xa3, 0xa7, 0xea, 0x87, 0xef, 0xdf, 0x9d, 0x00, 0x88, + 0xbd, 0x9e, 0x68, 0x8a, 0x65, 0x3b, 0xe6, 0x8b, 0xf2, 0x7f, 0xe7, 0xeb, + 0xd7, 0xbd, 0x5a, 0xd3, 0x28, 0xe9, 0xff, 0x82, 0xc6, 0xee, 0xbd, 0x1f, + 0x55, 0x1d, 0x14, 0xa2, 0x26, 0xa8, 0xd3, 0x03, 0x87, 0x4e, 0xd0, 0x50, + 0x74, 0xe1, 0x64, 0x3a, 0x3a, 0x1e, 0x5a, 0x85, 0x84, 0x72, 0x19, 0x37, + 0xfe, 0x4b, 0xee, 0x16, 0x38, 0xdf, 0x3f, 0xff, 0xf3, 0xb3, 0x6c, 0x14, + 0xb7, 0x1f, 0x9f, 0xf1, 0xb0, 0xa6, 0xa8, 0x14, 0x1d, 0x3d, 0xc6, 0x5d, + 0x4e, 0x9f, 0xe7, 0xab, 0x1f, 0xaa, 0xb7, 0x93, 0xa1, 0x8f, 0x6f, 0x08, + 0x67, 0xae, 0xa0, 0x27, 0x40, 0x9b, 0xff, 0x48, 0x27, 0xbc, 0x7b, 0x95, + 0x3a, 0x7e, 0x76, 0xd5, 0xe0, 0xa1, 0xd3, 0xfd, 0x5e, 0xc2, 0x9a, 0x5f, + 0x7a, 0x3a, 0x36, 0x7d, 0x1a, 0x2d, 0x86, 0x45, 0x75, 0xc2, 0x32, 0x67, + 0x3d, 0x3a, 0x4a, 0x3a, 0x29, 0x35, 0x0e, 0xe0, 0xc4, 0xfe, 0xcc, 0xa5, + 0xe2, 0xdc, 0x9d, 0x3f, 0xf8, 0x41, 0xaa, 0x38, 0xfe, 0x95, 0xbf, 0x9d, + 0x3f, 0xff, 0xed, 0x85, 0x3a, 0xba, 0x75, 0xff, 0xb6, 0xbb, 0xf0, 0x2f, + 0xdd, 0x9d, 0x3d, 0xcf, 0x38, 0x27, 0x4f, 0xfb, 0x36, 0x81, 0x9d, 0x2b, + 0x9b, 0x3a, 0x19, 0x37, 0x0e, 0x49, 0xec, 0xc9, 0x12, 0x01, 0xc3, 0x64, + 0x53, 0xff, 0x58, 0xd3, 0xab, 0xf8, 0x51, 0x8a, 0x3a, 0x7d, 0x7a, 0x7a, + 0xb6, 0x74, 0xfa, 0x9a, 0x8b, 0x28, 0xe8, 0x64, 0x48, 0xd5, 0x0f, 0xd2, + 0x79, 0xbb, 0xd9, 0xd3, 0xf5, 0x0e, 0x3f, 0xac, 0xfd, 0x07, 0x4f, 0xef, + 0x3b, 0xbd, 0x6c, 0x34, 0x74, 0xc1, 0xf3, 0xa3, 0xad, 0x9f, 0xf8, 0x1b, + 0x6c, 0xd2, 0x7f, 0xee, 0x5b, 0x9f, 0xb6, 0x81, 0x03, 0x93, 0xa7, 0xed, + 0xfb, 0x43, 0x9b, 0x03, 0xa3, 0x93, 0xf4, 0xda, 0x24, 0x97, 0xd6, 0xdb, + 0x1c, 0x67, 0x78, 0xfd, 0xdd, 0x0e, 0x33, 0x45, 0x05, 0x3c, 0xc6, 0x55, + 0x72, 0x93, 0x7c, 0xbb, 0x53, 0x0f, 0xa0, 0x84, 0x6b, 0x91, 0xf9, 0x7d, + 0x01, 0x45, 0xbb, 0x95, 0x61, 0x88, 0x3d, 0xc6, 0x24, 0x30, 0xcf, 0xac, + 0x77, 0xda, 0x87, 0x37, 0x06, 0x1d, 0x50, 0x96, 0xf1, 0x0a, 0x88, 0x5b, + 0x67, 0x45, 0xba, 0xc8, 0x4e, 0x7f, 0xf2, 0xd5, 0x8f, 0x5d, 0xfd, 0x33, + 0x10, 0xd1, 0x36, 0x4f, 0xe5, 0xdf, 0xd3, 0x31, 0x0d, 0x15, 0x6c, 0xfe, + 0x7b, 0xfd, 0xd0, 0xb3, 0xce, 0x9e, 0xbd, 0xe6, 0x8e, 0x93, 0xbf, 0x67, + 0xa6, 0x26, 0x73, 0xef, 0xa6, 0x62, 0x1a, 0x2b, 0x49, 0xff, 0xe4, 0x6f, + 0xdf, 0x78, 0xac, 0x7b, 0x02, 0x1d, 0x3f, 0xfc, 0xfa, 0xd8, 0xb2, 0xb2, + 0xf5, 0xa6, 0x51, 0xd3, 0x6b, 0x4c, 0x89, 0x7c, 0x4b, 0x9f, 0xcc, 0xeb, + 0xc6, 0x85, 0xbb, 0x3a, 0x7e, 0xa2, 0xf6, 0x16, 0xa3, 0xa7, 0xfa, 0xdd, + 0x85, 0xb8, 0xa5, 0xf5, 0x3a, 0x7f, 0x3e, 0xf5, 0x83, 0xdf, 0xa7, 0x49, + 0x7d, 0x62, 0x7e, 0x36, 0x56, 0x10, 0xc8, 0xd9, 0x6e, 0x1b, 0x09, 0x66, + 0x8f, 0x27, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8b, 0x02, 0x7d, 0xf4, 0xcc, + 0x43, 0x44, 0xeb, 0x3f, 0xff, 0xb6, 0xd4, 0x73, 0x6a, 0x5d, 0x6b, 0x7b, + 0x0a, 0xfb, 0x41, 0xd3, 0xe5, 0xab, 0x1e, 0xbb, 0x44, 0xab, 0x86, 0x33, + 0xef, 0xa6, 0x62, 0x1a, 0x2d, 0x99, 0xff, 0x76, 0xd5, 0x5e, 0xc1, 0x33, + 0xe7, 0x49, 0x76, 0x7d, 0xd8, 0x63, 0x3c, 0x99, 0x88, 0x68, 0xb9, 0xa4, + 0xa3, 0xa3, 0xe6, 0xef, 0x82, 0xb9, 0x9c, 0x51, 0xd2, 0x5d, 0x9b, 0x9e, + 0x08, 0xa7, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8b, 0xbe, 0x79, 0x7e, 0x79, + 0xec, 0xe8, 0x66, 0xe7, 0x92, 0xeb, 0x3c, 0xc4, 0x32, 0xa5, 0x4c, 0x25, + 0x40, 0x7d, 0xc5, 0x50, 0xd1, 0xee, 0x15, 0xd5, 0x84, 0xd6, 0x89, 0xfc, + 0x1e, 0x4f, 0xab, 0x55, 0x63, 0xce, 0x9f, 0xfa, 0x94, 0xf7, 0x29, 0xd5, + 0xd8, 0xf9, 0x3a, 0x70, 0xe2, 0xd8, 0xfb, 0x74, 0x4f, 0x3f, 0x86, 0x8b, + 0x76, 0xd3, 0x79, 0x3a, 0x7d, 0xf4, 0xcc, 0x43, 0x44, 0xaf, 0x3f, 0xe1, + 0xce, 0x39, 0xdb, 0x51, 0x7c, 0x1d, 0x3d, 0xee, 0x7d, 0xe7, 0x4f, 0xff, + 0xe0, 0xd6, 0x2b, 0x07, 0xbd, 0xf1, 0x83, 0x42, 0x05, 0x07, 0x47, 0x28, + 0x82, 0xc2, 0x28, 0xe5, 0x1c, 0xbb, 0x86, 0x14, 0xec, 0x7a, 0xd9, 0x37, + 0x6b, 0x37, 0xac, 0x62, 0xd3, 0xb4, 0xdc, 0x95, 0x3f, 0xfb, 0x78, 0x1a, + 0x67, 0x87, 0xe8, 0xf7, 0xb2, 0xa7, 0xf6, 0x22, 0xf9, 0xfb, 0xb8, 0xb6, + 0x3e, 0x7a, 0x8e, 0x49, 0x68, 0xaa, 0x8d, 0x51, 0xd3, 0xba, 0x85, 0x6c, + 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0xfa, 0x66, 0x21, 0xa2, 0x61, 0x9f, 0xfc, + 0x2c, 0xe8, 0x5a, 0x95, 0xf5, 0xb7, 0x75, 0x57, 0x9d, 0x3f, 0xfb, 0xf9, + 0xda, 0xfc, 0xe9, 0xfc, 0x35, 0x5e, 0x74, 0xd6, 0xbe, 0x51, 0x4b, 0xe1, + 0x5e, 0x7f, 0xe7, 0x7e, 0xe9, 0x7f, 0xb9, 0xa1, 0x67, 0x9d, 0x3f, 0x9b, + 0x28, 0xd7, 0x9c, 0xf9, 0xd3, 0xec, 0xfb, 0xf1, 0x47, 0x40, 0x9e, 0xd7, + 0xa6, 0x93, 0xf2, 0x9a, 0xc7, 0x5d, 0x47, 0x4a, 0xa7, 0x4f, 0x9a, 0xc7, + 0x5d, 0x47, 0x4f, 0xdb, 0x0d, 0x57, 0x29, 0xe8, 0x7c, 0xce, 0x17, 0x28, + 0x42, 0x7f, 0xff, 0xc3, 0x7c, 0x3b, 0x6a, 0xf7, 0xd0, 0x6e, 0x80, 0xb1, + 0xa5, 0xf5, 0x3a, 0x7f, 0xf9, 0xb4, 0x39, 0xde, 0xec, 0x39, 0xf7, 0x55, + 0x3a, 0x7e, 0x75, 0xe3, 0x42, 0xdd, 0x9d, 0x3f, 0xf9, 0xb5, 0xdb, 0x3e, + 0xe9, 0xd5, 0x1e, 0xf0, 0x74, 0x31, 0xff, 0x81, 0x8c, 0xfd, 0x50, 0xf2, + 0xac, 0xd1, 0xd3, 0xff, 0xfe, 0xfd, 0xba, 0x61, 0xd7, 0x4f, 0x02, 0xdb, + 0xc0, 0xd3, 0x6a, 0xa7, 0x4a, 0xe9, 0x44, 0xe7, 0xcb, 0xa7, 0xff, 0xdb, + 0x1b, 0xd6, 0xc2, 0xe9, 0xd5, 0xba, 0x6a, 0x9d, 0x39, 0xbb, 0xf0, 0x74, + 0x59, 0xf9, 0x8a, 0xac, 0xf6, 0x78, 0xe6, 0xce, 0x92, 0xfa, 0xc5, 0xc5, + 0xae, 0x61, 0x46, 0x90, 0x88, 0x71, 0x57, 0xee, 0x1b, 0x86, 0x78, 0xc2, + 0xf3, 0x50, 0x9c, 0xf4, 0x82, 0x7d, 0xf4, 0xcc, 0x43, 0x45, 0x5d, 0x3f, + 0xcf, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x1e, 0x49, 0x76, 0x7e, 0x78, 0x63, + 0x3f, 0x97, 0x7f, 0x4c, 0xc4, 0x34, 0x58, 0x33, 0xf9, 0x77, 0xf4, 0xcc, + 0x43, 0x45, 0x95, 0x3f, 0x97, 0x7f, 0x4c, 0xc4, 0x34, 0x5a, 0x73, 0xfa, + 0xeb, 0xd3, 0xff, 0xf7, 0x67, 0x4f, 0x26, 0x62, 0x1a, 0x2d, 0xc9, 0xff, + 0x9a, 0xff, 0x63, 0xd3, 0x77, 0x4f, 0x07, 0x47, 0xcf, 0xc2, 0xa5, 0x73, + 0xfc, 0xc3, 0xea, 0x9a, 0xba, 0x03, 0xa7, 0xf6, 0x65, 0x1c, 0xb5, 0xfc, + 0xe9, 0xff, 0x63, 0xd7, 0x7f, 0x4c, 0xc4, 0x34, 0x50, 0xf3, 0xff, 0x2b, + 0x39, 0x6e, 0x76, 0x02, 0x0a, 0x3a, 0x7f, 0xef, 0x5f, 0xbc, 0xfd, 0x3a, + 0x60, 0xa0, 0xe9, 0xff, 0x7b, 0xfe, 0xff, 0x83, 0xab, 0xec, 0xe9, 0xfa, + 0xb9, 0x4d, 0x74, 0x07, 0x4f, 0xc3, 0xd6, 0x5f, 0xda, 0xa7, 0x4f, 0xff, + 0xd7, 0xce, 0xdb, 0xc2, 0xf4, 0x39, 0xdd, 0x6a, 0xdd, 0x95, 0x25, 0xbd, + 0x57, 0xe5, 0xc2, 0x98, 0x08, 0x9c, 0x37, 0x51, 0x96, 0x23, 0xf6, 0x87, + 0x54, 0x6d, 0x20, 0x7a, 0x5b, 0xd4, 0x61, 0x3f, 0x97, 0x7f, 0x4c, 0xc4, + 0x34, 0x5e, 0x70, 0xcc, 0xb9, 0xa7, 0xa2, 0x73, 0x0f, 0x8b, 0x9c, 0x8b, + 0xa6, 0x31, 0x9f, 0x93, 0x28, 0xf3, 0x67, 0x83, 0x2c, 0xe1, 0xd4, 0x2a, + 0x27, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8a, 0x5a, 0x7f, 0x2e, 0xfe, 0x99, + 0x88, 0x68, 0xb0, 0xa7, 0xf2, 0xef, 0xe9, 0x98, 0x86, 0x8b, 0x2e, 0x79, + 0x7e, 0x7a, 0xd1, 0xdd, 0x9d, 0x39, 0x7e, 0x14, 0x74, 0xf2, 0x2d, 0xaa, + 0x87, 0x9f, 0xe9, 0x8c, 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0xfa, 0x66, 0x21, + 0xa2, 0x8c, 0x9f, 0xcb, 0x67, 0x4d, 0xf6, 0xec, 0xe8, 0x7a, 0x78, 0x5f, + 0x3c, 0x51, 0xe6, 0x42, 0x2e, 0xa7, 0x1a, 0x53, 0x9f, 0xf9, 0x78, 0xf5, + 0xdf, 0xd3, 0x31, 0x0d, 0x11, 0xcc, 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0xfa, + 0x66, 0x21, 0xa2, 0x72, 0x9f, 0xcb, 0xbf, 0xa6, 0x62, 0x1a, 0x2c, 0xc9, + 0xff, 0x96, 0xdd, 0xfd, 0xb5, 0xbc, 0xa5, 0xe7, 0x4f, 0xe5, 0xdf, 0xd3, + 0x31, 0x0d, 0x16, 0xec, 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0xfa, 0x66, 0x21, + 0xa2, 0x90, 0x9f, 0xf9, 0x78, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x12, 0x94, + 0x50, 0x9f, 0xeb, 0x89, 0xaa, 0x53, 0xec, 0xf0, 0x51, 0x74, 0x78, 0xec, + 0xa7, 0x3f, 0xec, 0x7a, 0xef, 0xe9, 0x98, 0x86, 0x89, 0xda, 0x7f, 0xfc, + 0x1c, 0xfa, 0xa6, 0x76, 0xce, 0x45, 0x86, 0xd0, 0xe9, 0x2d, 0x48, 0x9d, + 0xc4, 0x79, 0xff, 0xb1, 0x5b, 0xb4, 0xcd, 0xb7, 0x87, 0x9d, 0x3f, 0xf0, + 0xde, 0xf2, 0x8b, 0xa8, 0xe5, 0x27, 0x4d, 0xd4, 0xbe, 0x51, 0x0b, 0x54, + 0x38, 0x52, 0x38, 0x3a, 0xa1, 0x5b, 0x3e, 0xfa, 0x66, 0x21, 0xa2, 0x2c, + 0x9f, 0xf6, 0x3d, 0x77, 0xf4, 0xcc, 0x43, 0x44, 0xbb, 0x3f, 0xff, 0x5f, + 0x3b, 0x6f, 0x0b, 0xd0, 0xe7, 0x75, 0xab, 0x76, 0x54, 0x97, 0x68, 0xd6, + 0x51, 0x8f, 0x52, 0x3c, 0xff, 0xe5, 0xab, 0x1e, 0xbb, 0xfa, 0x66, 0x21, + 0xa2, 0x62, 0x9f, 0x7d, 0x33, 0x10, 0xd1, 0x54, 0xca, 0xce, 0x8b, 0x3c, + 0x0f, 0x26, 0x33, 0xff, 0xff, 0xbf, 0x9b, 0xa5, 0xf7, 0xa5, 0xef, 0x2b, + 0xf0, 0xe3, 0x5b, 0x0f, 0xbc, 0xe8, 0x5a, 0x27, 0x30, 0x8e, 0x7f, 0xf2, + 0xd5, 0x8f, 0x5d, 0xfd, 0x33, 0x10, 0xd1, 0x3a, 0x4f, 0xe0, 0xcf, 0xb3, + 0xf1, 0xd1, 0xd3, 0xe7, 0x19, 0xc6, 0xa9, 0xd3, 0xf7, 0x16, 0x0e, 0xac, + 0x4e, 0x80, 0x3d, 0x5a, 0x94, 0x4e, 0x0d, 0xb1, 0xcb, 0x34, 0x33, 0xff, + 0x7b, 0x5d, 0x35, 0x2b, 0xf5, 0xc0, 0x51, 0xd0, 0xa3, 0xf2, 0xd9, 0x54, + 0xff, 0xb1, 0xeb, 0xbf, 0xa6, 0x62, 0x1a, 0x27, 0x79, 0xf6, 0xbd, 0xc5, + 0x01, 0x52, 0x5f, 0x29, 0xd5, 0x5c, 0x63, 0x4a, 0x22, 0xc4, 0x79, 0xff, + 0xcb, 0x56, 0x3d, 0x77, 0xf4, 0xcc, 0x43, 0x45, 0x0b, 0x3f, 0xf9, 0x6a, + 0xc7, 0xae, 0xfe, 0x99, 0x88, 0x68, 0xa4, 0xa7, 0xff, 0xf5, 0xd5, 0x7e, + 0x2d, 0xcd, 0xe2, 0xb5, 0xb6, 0xd7, 0xaa, 0x3a, 0x28, 0x5c, 0xd9, 0x79, + 0xc2, 0x46, 0x5f, 0xf2, 0x25, 0x47, 0xfb, 0xda, 0x4f, 0xaa, 0x7d, 0x4a, + 0x73, 0xf9, 0x77, 0xf4, 0xcc, 0x43, 0x44, 0x49, 0x3f, 0xf9, 0x6a, 0xc7, + 0xae, 0xfe, 0x99, 0x88, 0x68, 0x97, 0xa7, 0xdf, 0xed, 0x41, 0x53, 0xa7, + 0x76, 0xda, 0x3a, 0x7f, 0xec, 0x72, 0xac, 0xeb, 0x36, 0xd4, 0xb8, 0x74, + 0x02, 0x22, 0xdc, 0x28, 0xf8, 0xe4, 0xff, 0x06, 0x0f, 0xba, 0x71, 0xbc, + 0x9d, 0x3e, 0xfa, 0x66, 0x21, 0xa2, 0x97, 0x9f, 0x0e, 0xa8, 0xbe, 0x0e, + 0x9f, 0xee, 0xeb, 0xf6, 0xa5, 0xe0, 0xa3, 0xa7, 0xfb, 0x28, 0xe9, 0x47, + 0xae, 0x37, 0x5c, 0xe9, 0xad, 0xec, 0x7f, 0x9e, 0x9d, 0x4c, 0xfb, 0x3a, + 0x73, 0x77, 0x53, 0xa3, 0x93, 0x63, 0xc0, 0xac, 0xff, 0xc0, 0xac, 0xe7, + 0xc3, 0x8f, 0x61, 0xa4, 0xe9, 0xea, 0x87, 0x1a, 0x3a, 0x36, 0x7d, 0x3a, + 0x47, 0x9f, 0xec, 0xde, 0x38, 0x1f, 0x6a, 0x0e, 0x9f, 0x3b, 0x02, 0x9a, + 0xa7, 0x4f, 0xb1, 0xd5, 0xfe, 0xa7, 0x49, 0xb9, 0x3d, 0x15, 0x14, 0xc9, + 0x6c, 0xab, 0xf3, 0x93, 0x0b, 0x3a, 0xa4, 0xc5, 0xc8, 0x52, 0x6d, 0x7b, + 0x21, 0x19, 0x52, 0x2d, 0x42, 0x26, 0x7f, 0x2e, 0xfe, 0x99, 0x88, 0x68, + 0xa7, 0x27, 0xfc, 0x1f, 0xca, 0xee, 0xec, 0x50, 0xe9, 0xff, 0x5e, 0xdb, + 0xf6, 0xbe, 0x38, 0xe0, 0xa9, 0x83, 0x83, 0xa6, 0xa1, 0x7c, 0xa2, 0x43, + 0xa8, 0xe9, 0xd9, 0x02, 0x7d, 0xf4, 0xcc, 0x43, 0x45, 0x79, 0x3f, 0xff, + 0x5f, 0x3b, 0x6f, 0x0b, 0xd0, 0xe7, 0x75, 0xab, 0x76, 0x54, 0x97, 0x68, + 0x8f, 0xea, 0x31, 0x9f, 0xf9, 0x78, 0xf5, 0xdf, 0xd3, 0x31, 0x0d, 0x12, + 0x3c, 0xe0, 0xed, 0x8e, 0x9c, 0x96, 0xa2, 0x96, 0x5d, 0xcf, 0xbe, 0x99, + 0x88, 0x68, 0x92, 0x27, 0x97, 0x8f, 0x5b, 0x1e, 0xd5, 0x94, 0xcf, 0xfc, + 0xbc, 0x7a, 0xef, 0xe9, 0x98, 0x86, 0x89, 0x2a, 0x7d, 0xf4, 0xcc, 0x43, + 0x45, 0xe3, 0x3e, 0xad, 0x75, 0x68, 0x74, 0xff, 0x3d, 0x77, 0xf4, 0xcc, + 0x43, 0x44, 0x9b, 0x25, 0xda, 0x26, 0x7e, 0x63, 0x84, 0xd0, 0xcc, 0x88, + 0x8a, 0x0f, 0x1f, 0x2f, 0x6b, 0x98, 0x4a, 0x84, 0x33, 0x1c, 0x86, 0x9a, + 0x8a, 0xf7, 0x0c, 0x2d, 0x1b, 0xfb, 0x0e, 0x68, 0x68, 0xed, 0xad, 0xa8, + 0x8e, 0xc9, 0xf2, 0x9e, 0xb9, 0x94, 0x61, 0x77, 0x89, 0xab, 0xe6, 0x52, + 0xf2, 0x5a, 0x49, 0xca, 0x67, 0xe8, 0x82, 0x78, 0x6b, 0xaf, 0x1d, 0xe3, + 0x95, 0x9b, 0x67, 0xe9, 0x6d, 0xaa, 0xc5, 0x00, 0x26, 0xe7, 0x81, 0x72, + 0xb3, 0x87, 0xee, 0x5a, 0x03, 0xb9, 0x0b, 0x31, 0xa4, 0x84, 0x56, 0x94, + 0x5f, 0xaa, 0xff, 0x43, 0xda, 0x7b, 0x3b, 0xa9, 0x4e, 0x3c, 0x4a, 0x59, + 0xea, 0x8f, 0x9f, 0xc4, 0xee, 0xd3, 0xb5, 0x24, 0x36, 0x00, }; -static const unsigned kPreloadedHSTSBits = 114165; +static const unsigned kPreloadedHSTSBits = 114313; -static const unsigned kHSTSRootPosition = 113579; +static const unsigned kHSTSRootPosition = 113727; #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 c941427..7fceeaa 100644 --- a/net/http/transport_security_state_static.json +++ b/net/http/transport_security_state_static.json
@@ -1726,7 +1726,9 @@ { "name": "thyngster.com", "include_subdomains": true, "mode": "force-https" }, { "name": "tid.jp", "include_subdomains": true, "mode": "force-https" }, { "name": "tonywebster.com", "include_subdomains": true, "mode": "force-https" }, - { "name": "tucuxi.org", "include_subdomains": true, "mode": "force-https" } + { "name": "tucuxi.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "firebaseio.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "firebaseio-demo.com", "include_subdomains": true, "mode": "force-https" } ], // |ReportUMAOnPinFailure| uses these to report which domain was associated
diff --git a/net/quic/quic_crypto_client_stream.cc b/net/quic/quic_crypto_client_stream.cc index 2a82aad..3310f73 100644 --- a/net/quic/quic_crypto_client_stream.cc +++ b/net/quic/quic_crypto_client_stream.cc
@@ -231,6 +231,11 @@ void QuicCryptoClientStream::DoInitialize( QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoInitialize")); + if (!cached->IsEmpty() && !cached->signature().empty() && server_id_.is_https()) { // Note that we verify the proof even if the cached proof is valid. @@ -248,6 +253,11 @@ void QuicCryptoClientStream::DoSendCHLO( const CryptoHandshakeMessage* in, QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoSendCHLO")); + // Send the client hello in plaintext. session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_NONE); if (num_client_hellos_ > kMaxClientHellos) { @@ -336,6 +346,11 @@ void QuicCryptoClientStream::DoReceiveREJ( const CryptoHandshakeMessage* in, QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoReceiveREJ")); + // We sent a dummy CHLO because we didn't have enough information to // perform a handshake, or we sent a full hello that the server // rejected. Here we hope to have a REJ that contains the information @@ -374,6 +389,11 @@ QuicAsyncStatus QuicCryptoClientStream::DoVerifyProof( QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoVerifyProof")); + ProofVerifier* verifier = crypto_config_->proof_verifier(); DCHECK(verifier); next_state_ = STATE_VERIFY_PROOF_COMPLETE; @@ -412,6 +432,11 @@ void QuicCryptoClientStream::DoVerifyProofComplete( QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoVerifyProofComplete")); + if (!verify_ok_) { next_state_ = STATE_NONE; client_session()->OnProofVerifyDetailsAvailable(*verify_details_); @@ -439,6 +464,11 @@ QuicAsyncStatus QuicCryptoClientStream::DoGetChannelID( QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoGetChannelID")); + next_state_ = STATE_GET_CHANNEL_ID_COMPLETE; channel_id_key_.reset(); if (!RequiresChannelID(cached)) { @@ -472,6 +502,11 @@ } void QuicCryptoClientStream::DoGetChannelIDComplete() { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoGetChannelIDComplete")); + if (!channel_id_key_.get()) { next_state_ = STATE_NONE; CloseConnectionWithDetails(QUIC_INVALID_CHANNEL_ID_SIGNATURE, @@ -484,6 +519,11 @@ void QuicCryptoClientStream::DoReceiveSHLO( const CryptoHandshakeMessage* in, QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoReceiveSHLO")); + next_state_ = STATE_NONE; // We sent a CHLO that we expected to be accepted and now we're hoping // for a SHLO from the server to confirm that. @@ -554,6 +594,11 @@ void QuicCryptoClientStream::DoInitializeServerConfigUpdate( QuicCryptoClientConfig::CachedState* cached) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicCryptoClientStream::DoInitializeServerConfigUpdate")); + bool update_ignored = false; if (!server_id_.is_https()) { // We don't check the certificates for insecure QUIC connections.
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc index 5c0d2f9..ec3eecd 100644 --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc
@@ -1130,6 +1130,11 @@ void QuicStreamFactory::InitializeCachedStateInCryptoConfig( const QuicServerId& server_id, const scoped_ptr<QuicServerInfo>& server_info) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile1( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicStreamFactory::InitializeCachedStateInCryptoConfig1")); + // |server_info| will be NULL, if a non-empty server config already exists in // the memory cache. This is a minor optimization to avoid LookupOrCreate. if (!server_info) @@ -1161,6 +1166,11 @@ } } + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile2( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 QuicStreamFactory::InitializeCachedStateInCryptoConfig2")); + if (!cached->Initialize(server_info->state().server_config, server_info->state().source_address_token, server_info->state().certs,
diff --git a/net/quic/reliable_quic_stream.cc b/net/quic/reliable_quic_stream.cc index e6abe76..17c4870 100644 --- a/net/quic/reliable_quic_stream.cc +++ b/net/quic/reliable_quic_stream.cc
@@ -5,6 +5,7 @@ #include "net/quic/reliable_quic_stream.h" #include "base/logging.h" +#include "base/profiler/scoped_tracker.h" #include "net/quic/iovector.h" #include "net/quic/quic_flow_controller.h" #include "net/quic/quic_session.h" @@ -230,6 +231,11 @@ } void ReliableQuicStream::CloseConnection(QuicErrorCode error) { + // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "422516 ReliableQuicStream::CloseConnection")); + session()->connection()->SendConnectionClose(error); }
diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc index 161184b..483c5e7 100644 --- a/net/socket/ssl_client_socket_nss.cc +++ b/net/socket/ssl_client_socket_nss.cc
@@ -2877,6 +2877,7 @@ // static uint16 SSLClientSocket::GetMaxSupportedSSLVersion() { + crypto::EnsureNSSInit(); if (PK11_TokenExists(CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256)) { return SSL_PROTOCOL_VERSION_TLS1_2; } else {
diff --git a/net/socket/ssl_client_socket_openssl_unittest.cc b/net/socket/ssl_client_socket_openssl_unittest.cc index 1c226bd..ba45a0c 100644 --- a/net/socket/ssl_client_socket_openssl_unittest.cc +++ b/net/socket/ssl_client_socket_openssl_unittest.cc
@@ -50,8 +50,6 @@ // These client auth tests are currently dependent on OpenSSL's struct X509. #if defined(USE_OPENSSL_CERTS) -const SSLConfig kDefaultSSLConfig; - // Loads a PEM-encoded private key file into a scoped EVP_PKEY object. // |filepath| is the private key file path. // |*pkey| is reset to the new EVP_PKEY on success, untouched otherwise. @@ -154,7 +152,7 @@ // Returns true on succes, false otherwise. Success means that the socket // could be created and its Connect() was called, not that the connection // itself was a success. - bool CreateAndConnectSSLClientSocket(SSLConfig& ssl_config, + bool CreateAndConnectSSLClientSocket(const SSLConfig& ssl_config, int* result) { sock_ = CreateSSLClientSocket(transport_.Pass(), test_server_->host_port_pair(), @@ -200,10 +198,9 @@ ASSERT_TRUE(ConnectToTestServer(ssl_options)); base::FilePath certs_dir = GetTestCertsDirectory(); - SSLConfig ssl_config = kDefaultSSLConfig; int rv; - ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); + ASSERT_TRUE(CreateAndConnectSSLClientSocket(SSLConfig(), &rv)); EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); EXPECT_FALSE(sock_->IsConnected()); @@ -220,7 +217,7 @@ ASSERT_TRUE(ConnectToTestServer(ssl_options)); base::FilePath certs_dir = GetTestCertsDirectory(); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.send_client_cert = true; ssl_config.client_cert = NULL; @@ -242,7 +239,7 @@ ASSERT_TRUE(ConnectToTestServer(ssl_options)); base::FilePath certs_dir = GetTestCertsDirectory(); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.send_client_cert = true; ssl_config.client_cert = ImportCertFromFile(certs_dir, "client_1.pem");
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc index d14f1fd..2fc6523 100644 --- a/net/socket/ssl_client_socket_unittest.cc +++ b/net/socket/ssl_client_socket_unittest.cc
@@ -45,8 +45,6 @@ namespace { -const SSLConfig kDefaultSSLConfig; - // WrappedStreamSocket is a base class that wraps an existing StreamSocket, // forwarding the Socket and StreamSocket interfaces to the underlying // transport. @@ -791,7 +789,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); rv = sock->Connect(callback.callback()); @@ -1012,7 +1010,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); @@ -1054,7 +1052,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); @@ -1098,7 +1096,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); @@ -1142,7 +1140,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); @@ -1200,7 +1198,7 @@ rv = callback.WaitForResult(); EXPECT_EQ(OK, rv); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.send_client_cert = true; ssl_config.client_cert = NULL; @@ -1258,7 +1256,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -1543,7 +1541,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -1821,10 +1819,8 @@ EXPECT_EQ(OK, rv); SynchronousErrorStreamSocket* raw_transport = transport.get(); - scoped_ptr<SSLClientSocket> sock( - CreateSSLClientSocket(transport.Pass(), - test_server.host_port_pair(), - kDefaultSSLConfig)); + scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( + transport.Pass(), test_server.host_port_pair(), SSLConfig())); raw_transport->SetNextReadError(0); @@ -1939,7 +1935,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -1993,7 +1989,7 @@ ASSERT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = callback.GetResult(sock->Connect(callback.callback())); ASSERT_EQ(OK, rv); @@ -2043,7 +2039,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -2094,7 +2090,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -2180,7 +2176,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -2285,11 +2281,9 @@ scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle()); socket_handle->SetSocket(transport.Pass()); - scoped_ptr<SSLClientSocket> sock( - socket_factory_->CreateSSLClientSocket(socket_handle.Pass(), - test_server.host_port_pair(), - kDefaultSSLConfig, - context_)); + scoped_ptr<SSLClientSocket> sock(socket_factory_->CreateSSLClientSocket( + socket_handle.Pass(), test_server.host_port_pair(), SSLConfig(), + context_)); EXPECT_FALSE(sock->IsConnected()); rv = sock->Connect(callback.callback()); @@ -2319,7 +2313,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -2404,7 +2398,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); rv = sock->Connect(callback.callback()); rv = callback.GetResult(rv); @@ -2511,7 +2505,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); EXPECT_FALSE(sock->IsConnected()); rv = sock->Connect(callback.callback()); @@ -2759,7 +2753,7 @@ EXPECT_EQ(OK, rv); scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( - transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig)); + transport.Pass(), test_server.host_port_pair(), SSLConfig())); rv = sock->Connect(callback.callback()); if (rv == ERR_IO_PENDING) @@ -2855,7 +2849,7 @@ rv = callback.WaitForResult(); EXPECT_EQ(OK, rv); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.false_start_enabled = false; scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( @@ -2892,7 +2886,7 @@ rv = callback.WaitForResult(); EXPECT_EQ(OK, rv); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.false_start_enabled = false; scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( @@ -3052,7 +3046,7 @@ ASSERT_TRUE(ConnectToTestServer(ssl_options)); EnableChannelID(); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.channel_id_enabled = true; int rv; @@ -3074,7 +3068,7 @@ ASSERT_TRUE(ConnectToTestServer(ssl_options)); EnableFailingChannelID(); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.channel_id_enabled = true; int rv; @@ -3096,7 +3090,7 @@ ASSERT_TRUE(ConnectToTestServer(ssl_options)); EnableAsyncFailingChannelID(); - SSLConfig ssl_config = kDefaultSSLConfig; + SSLConfig ssl_config; ssl_config.channel_id_enabled = true; int rv;
diff --git a/sandbox/linux/suid/client/setuid_sandbox_client.cc b/sandbox/linux/suid/client/setuid_sandbox_client.cc index 8a50a3b..f0b5cef 100644 --- a/sandbox/linux/suid/client/setuid_sandbox_client.cc +++ b/sandbox/linux/suid/client/setuid_sandbox_client.cc
@@ -208,11 +208,6 @@ return true; } -bool SetuidSandboxClient::CreateNewSession() { - // This could fail if the process is already a process group leader. - return 0 < setsid(); -} - bool SetuidSandboxClient::CreateInitProcessReaper( base::Closure* post_fork_parent_callback) { return sandbox::CreateInitProcessReaper(post_fork_parent_callback);
diff --git a/sandbox/linux/suid/client/setuid_sandbox_client.h b/sandbox/linux/suid/client/setuid_sandbox_client.h index 9596738..e6a3e4c 100644 --- a/sandbox/linux/suid/client/setuid_sandbox_client.h +++ b/sandbox/linux/suid/client/setuid_sandbox_client.h
@@ -38,10 +38,7 @@ // If B dies, all the processes in the namespace will die. // B can fork() and the parent can assume the role of init(1), by using // CreateInitProcessReaper(). -// 8. B uses CreateNewSession() to move to a new session ID and process group. -// This prevents a sandboxed process from signaling its process group and -// get signals delivered across the PID namespace boundary. -// 9. B requests being chroot-ed through ChrootMe() and +// 8. B requests being chroot-ed through ChrootMe() and // requests other sandboxing status via the status functions. class SANDBOX_EXPORT SetuidSandboxClient { public: @@ -55,9 +52,6 @@ // to an empty directory. // Will only work if we have been launched through the setuid helper. bool ChrootMe(); - // Create a new session and a new process group. This helps isolate processes - // outside of the sandbox from processes inside. - bool CreateNewSession(); // When a new PID namespace is created, the process with pid == 1 should // assume the role of init. // See sandbox/linux/services/init_process_reaper.h for more information