Import Cobalt 4.13031
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index 4860db9..ec9b96f 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-12959
\ No newline at end of file
+13031
\ No newline at end of file
diff --git a/src/cobalt/build/config/base.gypi b/src/cobalt/build/config/base.gypi
index 02d4c04..36b2f95 100644
--- a/src/cobalt/build/config/base.gypi
+++ b/src/cobalt/build/config/base.gypi
@@ -238,6 +238,11 @@
     'linux_use_tcmalloc': 0,
 
     'enable_webdriver%': 0,
+
+    # The event polling mechanism available on this platform to support libevent.
+    # Platforms may redefine to 'poll' if necessary.
+    # Other mechanisms, e.g. devpoll, kqueue, select, are not yet supported.
+    'sb_libevent_method%': 'epoll',
   },
 
   'target_defaults': {
diff --git a/src/cobalt/speech/SpeechRecognition.idl b/src/cobalt/speech/SpeechRecognition.idl
index 1db9e80..1bb1a24 100644
--- a/src/cobalt/speech/SpeechRecognition.idl
+++ b/src/cobalt/speech/SpeechRecognition.idl
@@ -28,7 +28,7 @@
   attribute unsigned long maxAlternatives;
 
   // methods to drive the speech interaction
-  void start();
+  [RaisesException] void start();
   void stop();
   void abort();
 
diff --git a/src/cobalt/speech/speech_recognition.cc b/src/cobalt/speech/speech_recognition.cc
index e1155d6..761b2e5 100644
--- a/src/cobalt/speech/speech_recognition.cc
+++ b/src/cobalt/speech/speech_recognition.cc
@@ -35,11 +35,13 @@
       config_("" /*lang*/, false /*continuous*/, false /*interim_results*/,
               1 /*max alternatives*/) {}
 
-void SpeechRecognition::Start() { manager_.Start(config_); }
+void SpeechRecognition::Start(script::ExceptionState* exception_state) {
+  manager_.Start(config_, exception_state);
+}
 
 void SpeechRecognition::Stop() { manager_.Stop(); }
 
-void SpeechRecognition::Abort() { NOTIMPLEMENTED(); }
+void SpeechRecognition::Abort() { manager_.Abort(); }
 
 bool SpeechRecognition::OnEventAvailable(
     const scoped_refptr<dom::Event>& event) {
diff --git a/src/cobalt/speech/speech_recognition.h b/src/cobalt/speech/speech_recognition.h
index 9a24a85..020229f 100644
--- a/src/cobalt/speech/speech_recognition.h
+++ b/src/cobalt/speech/speech_recognition.h
@@ -36,7 +36,7 @@
 
   // When the start method is called, it represents the moment in time the web
   // application wishes to begin recognition.
-  void Start();
+  void Start(script::ExceptionState* exception_state);
   // The stop method represents an instruction to the recognition service to
   // stop listening to more audio, and to try and return a result using just the
   // audio that it has already received for this recognition.
diff --git a/src/cobalt/speech/speech_recognition_manager.cc b/src/cobalt/speech/speech_recognition_manager.cc
index d7cd9dd..2c69fc2 100644
--- a/src/cobalt/speech/speech_recognition_manager.cc
+++ b/src/cobalt/speech/speech_recognition_manager.cc
@@ -17,6 +17,7 @@
 #include "cobalt/speech/speech_recognition_manager.h"
 
 #include "base/bind.h"
+#include "cobalt/dom/dom_exception.h"
 
 namespace cobalt {
 namespace speech {
@@ -42,22 +43,54 @@
           base::Bind(&SpeechRecognitionManager::OnDataCompletion,
                      base::Unretained(this)),
           base::Bind(&SpeechRecognitionManager::OnMicError,
-                     base::Unretained(this))))) {}
+                     base::Unretained(this))))),
+      state_(kStopped) {}
 
 SpeechRecognitionManager::~SpeechRecognitionManager() { Stop(); }
 
-void SpeechRecognitionManager::Start(const SpeechRecognitionConfig& config) {
+void SpeechRecognitionManager::Start(const SpeechRecognitionConfig& config,
+                                     script::ExceptionState* exception_state) {
   DCHECK(main_message_loop_->BelongsToCurrentThread());
 
+  // If the start method is called on an already started object, the user agent
+  // MUST throw an InvalidStateError exception and ignore the call.
+  if (state_ == kStarted) {
+    dom::DOMException::Raise(dom::DOMException::kInvalidStateErr,
+                             exception_state);
+    return;
+  }
+
   recognizer_.Start(config, kSampleRate);
   mic_->Start();
+  state_ = kStarted;
 }
 
 void SpeechRecognitionManager::Stop() {
   DCHECK(main_message_loop_->BelongsToCurrentThread());
 
+  // If the stop method is called on an object which is already stopped or being
+  // stopped, the user agent MUST ignore the call.
+  if (state_ != kStarted) {
+    return;
+  }
+
   mic_->Stop();
   recognizer_.Stop();
+  state_ = kStopped;
+}
+
+void SpeechRecognitionManager::Abort() {
+  DCHECK(main_message_loop_->BelongsToCurrentThread());
+
+  // If the abort method is called on an object which is already stopped or
+  // aborting, the user agent MUST ignore the call.
+  if (state_ != kStarted) {
+    return;
+  }
+
+  mic_->Stop();
+  recognizer_.Stop();
+  state_ = kAborted;
 }
 
 void SpeechRecognitionManager::OnDataReceived(scoped_ptr<AudioBus> audio_bus) {
@@ -69,7 +102,10 @@
     return;
   }
 
-  recognizer_.RecognizeAudio(audio_bus.Pass(), false);
+  // Stop recognizing if in the abort state.
+  if (state_ != kAborted) {
+    recognizer_.RecognizeAudio(audio_bus.Pass(), false);
+  }
 }
 
 void SpeechRecognitionManager::OnDataCompletion() {
@@ -81,14 +117,17 @@
     return;
   }
 
-  // The encoder requires a non-empty final buffer, so encoding a packet of
-  // silence at the end in case encoder had no data already.
-  size_t dummy_frames =
-      static_cast<size_t>(kSampleRate * kAudioPacketDurationInSeconds);
-  scoped_ptr<AudioBus> dummy_audio_bus =
-      AudioBus::Create(1, static_cast<int>(dummy_frames));
-  memset(dummy_audio_bus->channel(0), 0, dummy_frames);
-  recognizer_.RecognizeAudio(dummy_audio_bus.Pass(), true);
+  // Stop recognizing if in the abort state.
+  if (state_ != kAborted) {
+    // The encoder requires a non-empty final buffer, so encoding a packet of
+    // silence at the end in case encoder had no data already.
+    size_t dummy_frames =
+        static_cast<size_t>(kSampleRate * kAudioPacketDurationInSeconds);
+    scoped_ptr<AudioBus> dummy_audio_bus =
+        AudioBus::Create(1, static_cast<int>(dummy_frames));
+    memset(dummy_audio_bus->channel(0), 0, dummy_frames);
+    recognizer_.RecognizeAudio(dummy_audio_bus.Pass(), true);
+  }
 }
 
 void SpeechRecognitionManager::OnRecognizerEvent(
@@ -101,7 +140,10 @@
     return;
   }
 
-  event_callback_.Run(event);
+  // Do not return any information if in the abort state.
+  if (state_ != kAborted) {
+    event_callback_.Run(event);
+  }
 }
 
 void SpeechRecognitionManager::OnMicError() {
@@ -116,6 +158,10 @@
   event_callback_.Run(
       scoped_refptr<SpeechRecognitionError>(new SpeechRecognitionError(
           SpeechRecognitionError::kAborted, "Mic Disconnected.")));
+
+  // An error is occured in Mic, so stopping the recognizer.
+  recognizer_.Stop();
+  state_ = kAborted;
 }
 
 }  // namespace speech
diff --git a/src/cobalt/speech/speech_recognition_manager.h b/src/cobalt/speech/speech_recognition_manager.h
index 4c20577..dcc9457 100644
--- a/src/cobalt/speech/speech_recognition_manager.h
+++ b/src/cobalt/speech/speech_recognition_manager.h
@@ -20,6 +20,7 @@
 #include <string>
 
 #include "cobalt/network/network_module.h"
+#include "cobalt/script/exception_state.h"
 #include "cobalt/speech/mic.h"
 #include "cobalt/speech/speech_recognition_config.h"
 #include "cobalt/speech/speech_recognition_error.h"
@@ -45,10 +46,18 @@
 
   // Start/Stop speech recognizer and microphone. Multiple calls would be
   // managed by their own class.
-  void Start(const SpeechRecognitionConfig& config);
+  void Start(const SpeechRecognitionConfig& config,
+             script::ExceptionState* exception_state);
   void Stop();
+  void Abort();
 
  private:
+  enum State {
+    kStarted,
+    kStopped,
+    kAborted,
+  };
+
   // Callbacks from mic.
   void OnDataReceived(scoped_ptr<AudioBus> audio_bus);
   void OnDataCompletion();
@@ -67,6 +76,7 @@
   EventCallback event_callback_;
   SpeechRecognizer recognizer_;
   scoped_ptr<Mic> mic_;
+  State state_;
 };
 
 }  // namespace speech
diff --git a/src/cobalt/speech/speech_recognizer.cc b/src/cobalt/speech/speech_recognizer.cc
index a9f27b0..bdd0688 100644
--- a/src/cobalt/speech/speech_recognizer.cc
+++ b/src/cobalt/speech/speech_recognizer.cc
@@ -289,6 +289,8 @@
 
   // Clear the final results.
   final_results_.clear();
+  // Clear any remaining audio data.
+  chunked_byte_buffer_.Clear();
 }
 
 void SpeechRecognizer::UploadAudioDataInternal(scoped_ptr<AudioBus> audio_bus,
@@ -312,6 +314,8 @@
 
 void SpeechRecognizer::ProcessAndFireSuccessEvent(
     const SpeechRecognitionResults& new_results) {
+  DCHECK_EQ(thread_.message_loop(), MessageLoop::current());
+
   SpeechRecognitionResults success_results;
   size_t total_size = final_results_.size() + new_results.size();
   success_results.reserve(total_size);
diff --git a/src/media/base/starboard_player.cc b/src/media/base/starboard_player.cc
index 6febc39..ce5197c 100644
--- a/src/media/base/starboard_player.cc
+++ b/src/media/base/starboard_player.cc
@@ -50,6 +50,10 @@
   video_config_.CopyFrom(video_config);
 
   CreatePlayer();
+
+  message_loop->PostTask(
+      FROM_HERE,
+      base::Bind(&StarboardPlayer::ClearDecoderBufferCache, weak_this_));
 }
 
 StarboardPlayer::~StarboardPlayer() {
@@ -177,17 +181,21 @@
 void StarboardPlayer::GetInfo(uint32* video_frames_decoded,
                               uint32* video_frames_dropped,
                               base::TimeDelta* media_time) {
-  DCHECK(video_frames_decoded);
-  DCHECK(video_frames_dropped);
-  DCHECK(media_time);
+  DCHECK(video_frames_decoded || video_frames_dropped || media_time);
 
   base::AutoLock auto_lock(lock_);
   if (state_ == kSuspended) {
     DCHECK(!SbPlayerIsValid(player_));
 
-    *video_frames_decoded = cached_video_frames_decoded_;
-    *video_frames_dropped = cached_video_frames_dropped_;
-    *media_time = preroll_timestamp_;
+    if (video_frames_decoded) {
+      *video_frames_decoded = cached_video_frames_decoded_;
+    }
+    if (video_frames_dropped) {
+      *video_frames_dropped = cached_video_frames_dropped_;
+    }
+    if (media_time) {
+      *media_time = preroll_timestamp_;
+    }
     return;
   }
 
@@ -195,9 +203,15 @@
 
   SbPlayerInfo info;
   SbPlayerGetInfo(player_, &info);
-  *video_frames_decoded = info.total_video_frames;
-  *video_frames_dropped = info.dropped_video_frames;
-  *media_time = SbMediaTimeToTimeDelta(info.current_media_pts);
+  if (video_frames_decoded) {
+    *video_frames_decoded = info.total_video_frames;
+  }
+  if (video_frames_dropped) {
+    *video_frames_dropped = info.dropped_video_frames;
+  }
+  if (media_time) {
+    *media_time = SbMediaTimeToTimeDelta(info.current_media_pts);
+  }
 }
 
 void StarboardPlayer::Suspend() {
@@ -275,6 +289,20 @@
   set_bounds_helper_->SetPlayer(this);
 }
 
+void StarboardPlayer::ClearDecoderBufferCache() {
+  DCHECK(message_loop_->BelongsToCurrentThread());
+
+  base::TimeDelta media_time;
+  GetInfo(NULL, NULL, &media_time);
+  decoder_buffer_cache_.ClearSegmentsBeforeMediaTime(media_time);
+
+  message_loop_->PostDelayedTask(
+      FROM_HERE,
+      base::Bind(&StarboardPlayer::ClearDecoderBufferCache, weak_this_),
+      base::TimeDelta::FromMilliseconds(
+          kClearDecoderCacheIntervalInMilliseconds));
+}
+
 void StarboardPlayer::OnDecoderStatus(SbPlayer player,
                                       SbMediaType type,
                                       SbPlayerDecoderState state,
diff --git a/src/media/base/starboard_player.h b/src/media/base/starboard_player.h
index bf2bb5a..0f71acb 100644
--- a/src/media/base/starboard_player.h
+++ b/src/media/base/starboard_player.h
@@ -81,6 +81,8 @@
     kResuming,
   };
 
+  static const int64 kClearDecoderCacheIntervalInMilliseconds = 1000;
+
   // A map from raw data pointer returned by DecoderBuffer::GetData() to the
   // DecoderBuffer and a reference count.  The reference count indicates how
   // many instances of the DecoderBuffer is currently being decoded in the
@@ -89,6 +91,7 @@
       DecodingBuffers;
 
   void CreatePlayer();
+  void ClearDecoderBufferCache();
 
   void OnDecoderStatus(SbPlayer player,
                        SbMediaType type,
diff --git a/src/media/player/web_media_player_impl.cc b/src/media/player/web_media_player_impl.cc
index d3b4a19..2440c62 100644
--- a/src/media/player/web_media_player_impl.cc
+++ b/src/media/player/web_media_player_impl.cc
@@ -1172,8 +1172,8 @@
   DLOG(INFO) << "Trying to stop media pipeline.";
   pipeline_->Stop(
       base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter)));
-  DLOG(INFO) << "Media pipeline stopped.";
   waiter.Wait();
+  DLOG(INFO) << "Media pipeline stopped.";
 
   message_loop_factory_.reset();
 
diff --git a/src/starboard/configuration.h b/src/starboard/configuration.h
index 1334ac8..bfdf8d8 100644
--- a/src/starboard/configuration.h
+++ b/src/starboard/configuration.h
@@ -35,7 +35,7 @@
 
 // The maximum API version allowed by this version of the Starboard headers,
 // inclusive.
-#define SB_MAXIMUM_API_VERSION 1
+#define SB_MAXIMUM_API_VERSION 2
 
 // --- Common Detected Features ----------------------------------------------
 
@@ -356,6 +356,10 @@
 #error "Your platform must define SB_MAX_THREAD_NAME_LENGTH."
 #endif
 
+#if SB_VERSION(2) && !defined(SB_HAS_MICROPHONE)
+#error "Your platform must define SB_HAS_MICROPHONE in API versions 2 or later."
+#endif
+
 #if SB_HAS(PLAYER)
 #if !SB_IS(PLAYER_COMPOSITED) && !SB_IS(PLAYER_PUNCHED_OUT) && \
     !SB_IS(PLAYER_PRODUCING_TEXTURE)
diff --git a/src/starboard/creator/ci20/atomic_public.h b/src/starboard/creator/ci20/atomic_public.h
new file mode 100644
index 0000000..3b48d2e
--- /dev/null
+++ b/src/starboard/creator/ci20/atomic_public.h
@@ -0,0 +1,20 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_CREATOR_CI20_ATOMIC_PUBLIC_H_
+#define STARBOARD_CREATOR_CI20_ATOMIC_PUBLIC_H_
+
+#include "starboard/linux/shared/atomic_public.h"
+
+#endif  // STARBOARD_CREATOR_CI20_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/creator/ci20/configuration_public.h b/src/starboard/creator/ci20/configuration_public.h
new file mode 100644
index 0000000..cd85a36
--- /dev/null
+++ b/src/starboard/creator/ci20/configuration_public.h
@@ -0,0 +1,95 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The Starboard configuration for Creator Ci20 Debian.
+
+// Other source files should never include this header directly, but should
+// include the generic "starboard/configuration.h" instead.
+
+#ifndef STARBOARD_CREATOR_CI20_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_CREATOR_CI20_CONFIGURATION_PUBLIC_H_
+
+// --- Architecture Configuration --------------------------------------------
+
+// Whether the current platform is big endian. SB_IS_LITTLE_ENDIAN will be
+// automatically set based on this.
+#define SB_IS_BIG_ENDIAN 0
+
+// Whether the current platform is an ARM architecture.
+#define SB_IS_ARCH_ARM 0
+
+// Whether the current platform is a MIPS architecture.
+#define SB_IS_ARCH_MIPS 1
+
+// Whether the current platform is a PPC architecture.
+#define SB_IS_ARCH_PPC 0
+
+// Whether the current platform is an x86 architecture.
+#define SB_IS_ARCH_X86 0
+
+// Whether the current platform is a 32-bit architecture.
+#define SB_IS_32_BIT 1
+
+// Whether the current platform is a 64-bit architecture.
+#define SB_IS_64_BIT 0
+
+// Whether the current platform's pointers are 32-bit.
+// Whether the current platform's longs are 32-bit.
+#if SB_IS(32_BIT)
+#define SB_HAS_32_BIT_POINTERS 1
+#define SB_HAS_32_BIT_LONG 1
+#else
+#define SB_HAS_32_BIT_POINTERS 0
+#define SB_HAS_32_BIT_LONG 0
+#endif
+
+// Whether the current platform's pointers are 64-bit.
+// Whether the current platform's longs are 64-bit.
+#if SB_IS(64_BIT)
+#define SB_HAS_64_BIT_POINTERS 1
+#define SB_HAS_64_BIT_LONG 1
+#else
+#define SB_HAS_64_BIT_POINTERS 0
+#define SB_HAS_64_BIT_LONG 0
+#endif
+
+// Configuration parameters that allow the application to make some general
+// compile-time decisions with respect to the the number of cores likely to be
+// available on this platform. For a definitive measure, the application should
+// still call SbSystemGetNumberOfProcessors at runtime.
+
+// Whether the current platform is expected to have many cores (> 6), or a
+// wildly varying number of cores.
+#define SB_HAS_MANY_CORES 0
+
+// Whether the current platform is expected to have exactly 1 core.
+#define SB_HAS_1_CORE 0
+
+// Whether the current platform is expected to have exactly 2 cores.
+#define SB_HAS_2_CORES 1
+
+// Whether the current platform is expected to have exactly 4 cores.
+#define SB_HAS_4_CORES 0
+
+// Whether the current platform is expected to have exactly 6 cores.
+#define SB_HAS_6_CORES 0
+
+// Whether the current platform's thread scheduler will automatically balance
+// threads between cores, as opposed to systems where threads will only ever run
+// on the specifically pinned core.
+#define SB_HAS_CROSS_CORE_SCHEDULER 1
+
+#include "starboard/creator/shared/configuration_public.h"
+
+#endif  // STARBOARD_CREATOR_CI20_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/creator/ci20/gyp_configuration.gypi b/src/starboard/creator/ci20/gyp_configuration.gypi
new file mode 100644
index 0000000..045e41c
--- /dev/null
+++ b/src/starboard/creator/ci20/gyp_configuration.gypi
@@ -0,0 +1,164 @@
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{
+  'variables': {
+    'target_arch': 'mips',
+    'target_os': 'linux',
+
+    'enable_webdriver': 0,
+    'in_app_dial%': 0,
+    'gl_type': 'system_gles2',
+    'image_cache_size_in_bytes': 32 * 1024 * 1024,
+
+    'scratch_surface_cache_size_in_bytes' : 0,
+
+    # This should have a default value in cobalt/base.gypi. See the comment
+    # there for acceptable values for this variable.
+    'javascript_engine': 'mozjs',
+    'cobalt_enable_jit': 0,
+
+    # Define platform specific compiler and linker flags.
+    # Refer to base.gypi for a list of all available variables.
+    'compiler_flags_host': [
+      '-O2',
+    ],
+    'compiler_flags': [
+      # We'll pretend not to be Linux, but Starboard instead.
+      '-U__linux__',
+      '--sysroot=<(sysroot)',
+      '-EL',
+    ],
+    'linker_flags': [
+      '--sysroot=<(sysroot)',
+      '-EL',
+
+      # We don't wrap these symbols, but this ensures that they aren't
+      # linked in.
+      '-Wl,--wrap=malloc',
+      '-Wl,--wrap=calloc',
+      '-Wl,--wrap=realloc',
+      '-Wl,--wrap=memalign',
+      '-Wl,--wrap=reallocalign',
+      '-Wl,--wrap=free',
+      '-Wl,--wrap=strdup',
+      '-Wl,--wrap=malloc_usable_size',
+      '-Wl,--wrap=malloc_stats_fast',
+      '-Wl,--wrap=__cxa_demangle',
+    ],
+    'compiler_flags_debug': [
+      '-O0',
+    ],
+    'compiler_flags_cc_debug': [
+      '-frtti',
+    ],
+    'compiler_flags_devel': [
+      '-O2',
+    ],
+    'compiler_flags_cc_devel': [
+      '-frtti',
+    ],
+    'compiler_flags_qa': [
+      '-O2',
+    ],
+    'compiler_flags_cc_qa': [
+      '-fno-rtti',
+    ],
+    'compiler_flags_gold': [
+      '-O2',
+    ],
+    'compiler_flags_cc_gold': [
+      '-fno-rtti',
+    ],
+    'platform_libraries': [
+      '-lasound',
+      '-lavcodec',
+      '-lavformat',
+      '-lavresample',
+      '-lavutil',
+      '-lEGL',
+      '-lGLESv2',
+      '-lm',
+      '-lpthread',
+      '-lpulse',
+      '-lrt',
+      '-lX11',
+      '-lXcomposite',
+      '-lXext',
+      '-lXrender',
+    ],
+    'conditions': [
+      ['cobalt_fastbuild==0', {
+        'compiler_flags_debug': [
+          '-g',
+        ],
+        'compiler_flags_devel': [
+          '-g',
+        ],
+        'compiler_flags_qa': [
+        ],
+        'compiler_flags_gold': [
+        ],
+      }],
+    ],
+  },
+
+  'target_defaults': {
+    'defines': [
+      # Cobalt on Linux flag
+      'COBALT_LINUX',
+      '__STDC_FORMAT_MACROS', # so that we get PRI*
+      # Enable GNU extensions to get prototypes like ffsl.
+      '_GNU_SOURCE=1',
+    ],
+    'cflags_c': [
+      '-std=c11',
+    ],
+    'cflags_cc': [
+      '-std=gnu++11',
+      '-Wno-literal-suffix',
+    ],
+    'default_configuration': 'creator-ci20_debug',
+    'configurations': {
+      'creator-ci20_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'creator-ci20_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'creator-ci20_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'creator-ci20_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+    'target_conditions': [
+      ['cobalt_code==1', {
+        'cflags': [
+          '-Wall',
+          '-Wextra',
+          '-Wunreachable-code',
+        ],
+      },{
+        'cflags': [
+          # Do not warn about unused function params.
+          '-Wno-unused-parameter',
+          # Do not warn for implicit type conversions that may change a value.
+          '-Wno-conversion',
+        ],
+      }],
+    ],
+  }, # end of target_defaults
+}
diff --git a/src/starboard/creator/ci20/gyp_configuration.py b/src/starboard/creator/ci20/gyp_configuration.py
new file mode 100644
index 0000000..10bb683
--- /dev/null
+++ b/src/starboard/creator/ci20/gyp_configuration.py
@@ -0,0 +1,81 @@
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Starboard ci20 platform configuration for gyp_cobalt."""
+
+import logging
+import os
+import sys
+
+import config.starboard
+
+
+def CreatePlatformConfig():
+  try:
+    return _PlatformConfig('creator-ci20')
+  except RuntimeError as e:
+    logging.critical(e)
+    return None
+
+
+class _PlatformConfig(config.starboard.PlatformConfigStarboard):
+  """Starboard ci20 platform configuration."""
+
+  def __init__(self, platform):
+    super(_PlatformConfig, self).__init__(platform)
+
+  def _GetCi20Home(self):
+    try:
+      ci20_home = os.environ['CI20_HOME']
+    except KeyError:
+      logging.critical('ci20 builds require the `CI20_HOME\' '
+                       'environment variable to be set.')
+      sys.exit(1)
+    return ci20_home
+
+  def GetVariables(self, configuration):
+    ci20_home = self._GetCi20Home()
+
+    sysroot = os.path.join(ci20_home, 'mips-mti-linux-gnu', '2016.05-03',
+                           'sysroot')
+
+    if not os.path.isdir(sysroot):
+      logging.critical(
+          'ci20 builds require '
+          '$CI20_HOME/mips-mti-linux-gnu/2016.05-03/sysroot to be a valid '
+          'directory.')
+      sys.exit(1)
+    variables = super(_PlatformConfig, self).GetVariables(configuration)
+    variables.update({
+        'clang': 0,
+        'sysroot': sysroot,
+    })
+
+    return variables
+
+  def GetEnvironmentVariables(self):
+    ci20_home = self._GetCi20Home()
+
+    toolchain_bin_dir = os.path.join(ci20_home, 'mips-mti-linux-gnu',
+                                     '2016.05-03', 'bin')
+
+    env_variables = {
+        'CC': os.path.join(toolchain_bin_dir, 'mips-mti-linux-gnu-gcc'),
+        'CXX': os.path.join(toolchain_bin_dir, 'mips-mti-linux-gnu-g++'),
+        'CC_host': 'gcc',
+        'CXX_host': 'g++',
+        'LD_host': 'g++',
+        'ARFLAGS_host': 'rcs',
+        'ARTHINFLAGS_host': 'rcsT',
+    }
+    return env_variables
diff --git a/src/starboard/creator/ci20/main.cc b/src/starboard/creator/ci20/main.cc
new file mode 100644
index 0000000..7086895
--- /dev/null
+++ b/src/starboard/creator/ci20/main.cc
@@ -0,0 +1,29 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/configuration.h"
+#include "starboard/shared/signal/crash_signals.h"
+#include "starboard/shared/signal/suspend_signals.h"
+#include "starboard/shared/x11/application_x11.h"
+
+extern "C" SB_EXPORT_PLATFORM int main(int argc, char** argv) {
+  tzset();
+  starboard::shared::signal::InstallCrashSignalHandlers();
+  starboard::shared::signal::InstallSuspendSignalHandlers();
+  starboard::shared::x11::ApplicationX11 application;
+  int result = application.Run(argc, argv);
+  starboard::shared::signal::UninstallSuspendSignalHandlers();
+  starboard::shared::signal::UninstallCrashSignalHandlers();
+  return result;
+}
diff --git a/src/starboard/creator/ci20/starboard_platform.gyp b/src/starboard/creator/ci20/starboard_platform.gyp
new file mode 100644
index 0000000..c6a9f11
--- /dev/null
+++ b/src/starboard/creator/ci20/starboard_platform.gyp
@@ -0,0 +1,298 @@
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+{
+  'targets': [
+    {
+      'target_name': 'starboard_base_symbolize',
+      'type': 'static_library',
+      'sources': [
+        '<(DEPTH)/base/third_party/symbolize/demangle.cc',
+        '<(DEPTH)/base/third_party/symbolize/symbolize.cc',
+      ],
+    },
+    {
+      'target_name': 'starboard_platform',
+      'type': 'static_library',
+      'sources': [
+        '<(DEPTH)/starboard/creator/ci20/configuration_public.h',
+        '<(DEPTH)/starboard/creator/ci20/system_get_property.cc',
+        '<(DEPTH)/starboard/linux/shared/atomic_public.h',
+        '<(DEPTH)/starboard/linux/shared/system_get_connection_type.cc',
+        '<(DEPTH)/starboard/linux/shared/system_get_device_type.cc',
+        '<(DEPTH)/starboard/linux/shared/system_get_path.cc',
+        '<(DEPTH)/starboard/linux/shared/system_has_capability.cc',
+        '<(DEPTH)/starboard/linux/x64x11/main.cc',
+        '<(DEPTH)/starboard/shared/alsa/alsa_audio_sink_type.cc',
+        '<(DEPTH)/starboard/shared/alsa/alsa_audio_sink_type.h',
+        '<(DEPTH)/starboard/shared/alsa/alsa_util.cc',
+        '<(DEPTH)/starboard/shared/alsa/alsa_util.h',
+        '<(DEPTH)/starboard/shared/alsa/audio_sink_get_max_channels.cc',
+        '<(DEPTH)/starboard/shared/alsa/audio_sink_get_nearest_supported_sample_frequency.cc',
+        '<(DEPTH)/starboard/shared/alsa/audio_sink_is_audio_frame_storage_type_supported.cc',
+        '<(DEPTH)/starboard/shared/alsa/audio_sink_is_audio_sample_type_supported.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_allocate_aligned_unchecked.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_allocate_unchecked.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_free.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_free_aligned.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_map.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_reallocate_unchecked.cc',
+        '<(DEPTH)/starboard/shared/dlmalloc/memory_unmap.cc',
+        '<(DEPTH)/starboard/shared/ffmpeg/ffmpeg_audio_decoder.cc',
+        '<(DEPTH)/starboard/shared/ffmpeg/ffmpeg_audio_decoder.h',
+        '<(DEPTH)/starboard/shared/ffmpeg/ffmpeg_common.cc',
+        '<(DEPTH)/starboard/shared/ffmpeg/ffmpeg_common.h',
+        '<(DEPTH)/starboard/shared/ffmpeg/ffmpeg_video_decoder.cc',
+        '<(DEPTH)/starboard/shared/ffmpeg/ffmpeg_video_decoder.h',
+        '<(DEPTH)/starboard/shared/gcc/atomic_gcc_public.h',
+        '<(DEPTH)/starboard/shared/iso/character_is_alphanumeric.cc',
+        '<(DEPTH)/starboard/shared/iso/character_is_digit.cc',
+        '<(DEPTH)/starboard/shared/iso/character_is_hex_digit.cc',
+        '<(DEPTH)/starboard/shared/iso/character_is_space.cc',
+        '<(DEPTH)/starboard/shared/iso/character_is_upper.cc',
+        '<(DEPTH)/starboard/shared/iso/character_to_lower.cc',
+        '<(DEPTH)/starboard/shared/iso/character_to_upper.cc',
+        '<(DEPTH)/starboard/shared/iso/directory_close.cc',
+        '<(DEPTH)/starboard/shared/iso/directory_get_next.cc',
+        '<(DEPTH)/starboard/shared/iso/directory_open.cc',
+        '<(DEPTH)/starboard/shared/iso/double_absolute.cc',
+        '<(DEPTH)/starboard/shared/iso/double_exponent.cc',
+        '<(DEPTH)/starboard/shared/iso/double_floor.cc',
+        '<(DEPTH)/starboard/shared/iso/double_is_finite.cc',
+        '<(DEPTH)/starboard/shared/iso/double_is_nan.cc',
+        '<(DEPTH)/starboard/shared/iso/memory_compare.cc',
+        '<(DEPTH)/starboard/shared/iso/memory_copy.cc',
+        '<(DEPTH)/starboard/shared/iso/memory_find_byte.cc',
+        '<(DEPTH)/starboard/shared/iso/memory_move.cc',
+        '<(DEPTH)/starboard/shared/iso/memory_set.cc',
+        '<(DEPTH)/starboard/shared/iso/string_compare.cc',
+        '<(DEPTH)/starboard/shared/iso/string_compare_all.cc',
+        '<(DEPTH)/starboard/shared/iso/string_find_character.cc',
+        '<(DEPTH)/starboard/shared/iso/string_find_last_character.cc',
+        '<(DEPTH)/starboard/shared/iso/string_find_string.cc',
+        '<(DEPTH)/starboard/shared/iso/string_get_length.cc',
+        '<(DEPTH)/starboard/shared/iso/string_get_length_wide.cc',
+        '<(DEPTH)/starboard/shared/iso/string_parse_double.cc',
+        '<(DEPTH)/starboard/shared/iso/string_parse_signed_integer.cc',
+        '<(DEPTH)/starboard/shared/iso/string_parse_uint64.cc',
+        '<(DEPTH)/starboard/shared/iso/string_parse_unsigned_integer.cc',
+        '<(DEPTH)/starboard/shared/iso/string_scan.cc',
+        '<(DEPTH)/starboard/shared/iso/system_binary_search.cc',
+        '<(DEPTH)/starboard/shared/iso/system_sort.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_add.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_create.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_destroy.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_internal.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_remove.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_wait.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_wait_timed.cc',
+        '<(DEPTH)/starboard/shared/libevent/socket_waiter_wake_up.cc',
+        '<(DEPTH)/starboard/shared/linux/byte_swap.cc',
+        '<(DEPTH)/starboard/shared/linux/get_home_directory.cc',
+        '<(DEPTH)/starboard/shared/linux/memory_get_stack_bounds.cc',
+        '<(DEPTH)/starboard/shared/linux/page_internal.cc',
+        '<(DEPTH)/starboard/shared/linux/socket_get_local_interface_address.cc',
+        '<(DEPTH)/starboard/shared/linux/system_get_random_data.cc',
+        '<(DEPTH)/starboard/shared/linux/system_get_stack.cc',
+        '<(DEPTH)/starboard/shared/linux/system_get_total_cpu_memory.cc',
+        '<(DEPTH)/starboard/shared/linux/system_get_used_cpu_memory.cc',
+        '<(DEPTH)/starboard/shared/linux/system_is_debugger_attached.cc',
+        '<(DEPTH)/starboard/shared/linux/system_symbolize.cc',
+        '<(DEPTH)/starboard/shared/linux/thread_get_id.cc',
+        '<(DEPTH)/starboard/shared/linux/thread_get_name.cc',
+        '<(DEPTH)/starboard/shared/linux/thread_set_name.cc',
+        '<(DEPTH)/starboard/shared/nouser/user_get_current.cc',
+        '<(DEPTH)/starboard/shared/nouser/user_get_property.cc',
+        '<(DEPTH)/starboard/shared/nouser/user_get_signed_in.cc',
+        '<(DEPTH)/starboard/shared/nouser/user_internal.cc',
+        '<(DEPTH)/starboard/shared/posix/directory_create.cc',
+        '<(DEPTH)/starboard/shared/posix/file_can_open.cc',
+        '<(DEPTH)/starboard/shared/posix/file_close.cc',
+        '<(DEPTH)/starboard/shared/posix/file_delete.cc',
+        '<(DEPTH)/starboard/shared/posix/file_exists.cc',
+        '<(DEPTH)/starboard/shared/posix/file_flush.cc',
+        '<(DEPTH)/starboard/shared/posix/file_get_info.cc',
+        '<(DEPTH)/starboard/shared/posix/file_get_path_info.cc',
+        '<(DEPTH)/starboard/shared/posix/file_open.cc',
+        '<(DEPTH)/starboard/shared/posix/file_read.cc',
+        '<(DEPTH)/starboard/shared/posix/file_seek.cc',
+        '<(DEPTH)/starboard/shared/posix/file_truncate.cc',
+        '<(DEPTH)/starboard/shared/posix/file_write.cc',
+        '<(DEPTH)/starboard/shared/posix/log.cc',
+        '<(DEPTH)/starboard/shared/posix/log_flush.cc',
+        '<(DEPTH)/starboard/shared/posix/log_format.cc',
+        '<(DEPTH)/starboard/shared/posix/log_is_tty.cc',
+        '<(DEPTH)/starboard/shared/posix/log_raw.cc',
+        '<(DEPTH)/starboard/shared/posix/memory_flush.cc',
+        '<(DEPTH)/starboard/shared/posix/set_non_blocking_internal.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_accept.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_bind.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_clear_last_error.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_connect.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_create.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_destroy.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_free_resolution.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_get_last_error.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_get_local_address.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_internal.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_is_connected.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_is_connected_and_idle.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_join_multicast_group.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_listen.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_receive_from.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_resolve.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_send_to.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_broadcast.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_receive_buffer_size.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_reuse_address.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_send_buffer_size.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_tcp_keep_alive.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_tcp_no_delay.cc',
+        '<(DEPTH)/starboard/shared/posix/socket_set_tcp_window_scaling.cc',
+        '<(DEPTH)/starboard/shared/posix/string_compare_no_case.cc',
+        '<(DEPTH)/starboard/shared/posix/string_compare_no_case_n.cc',
+        '<(DEPTH)/starboard/shared/posix/string_compare_wide.cc',
+        '<(DEPTH)/starboard/shared/posix/string_format.cc',
+        '<(DEPTH)/starboard/shared/posix/string_format_wide.cc',
+        '<(DEPTH)/starboard/shared/posix/system_break_into_debugger.cc',
+        '<(DEPTH)/starboard/shared/posix/system_clear_last_error.cc',
+        '<(DEPTH)/starboard/shared/posix/system_get_error_string.cc',
+        '<(DEPTH)/starboard/shared/posix/system_get_last_error.cc',
+        '<(DEPTH)/starboard/shared/posix/system_get_locale_id.cc',
+        '<(DEPTH)/starboard/shared/posix/system_get_number_of_processors.cc',
+        '<(DEPTH)/starboard/shared/posix/thread_sleep.cc',
+        '<(DEPTH)/starboard/shared/posix/time_get_monotonic_now.cc',
+        '<(DEPTH)/starboard/shared/posix/time_get_now.cc',
+        '<(DEPTH)/starboard/shared/posix/time_zone_get_current.cc',
+        '<(DEPTH)/starboard/shared/posix/time_zone_get_dst_name.cc',
+        '<(DEPTH)/starboard/shared/posix/time_zone_get_name.cc',
+        '<(DEPTH)/starboard/shared/pthread/condition_variable_broadcast.cc',
+        '<(DEPTH)/starboard/shared/pthread/condition_variable_create.cc',
+        '<(DEPTH)/starboard/shared/pthread/condition_variable_destroy.cc',
+        '<(DEPTH)/starboard/shared/pthread/condition_variable_signal.cc',
+        '<(DEPTH)/starboard/shared/pthread/condition_variable_wait.cc',
+        '<(DEPTH)/starboard/shared/pthread/condition_variable_wait_timed.cc',
+        '<(DEPTH)/starboard/shared/pthread/mutex_acquire.cc',
+        '<(DEPTH)/starboard/shared/pthread/mutex_acquire_try.cc',
+        '<(DEPTH)/starboard/shared/pthread/mutex_create.cc',
+        '<(DEPTH)/starboard/shared/pthread/mutex_destroy.cc',
+        '<(DEPTH)/starboard/shared/pthread/mutex_release.cc',
+        '<(DEPTH)/starboard/shared/pthread/once.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_create.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_create_local_key.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_destroy_local_key.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_detach.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_get_current.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_get_local_value.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_is_equal.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_join.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_set_local_value.cc',
+        '<(DEPTH)/starboard/shared/pthread/thread_yield.cc',
+        '<(DEPTH)/starboard/shared/signal/crash_signals.h',
+        '<(DEPTH)/starboard/shared/signal/crash_signals_sigaction.cc',
+        '<(DEPTH)/starboard/shared/signal/suspend_signals.cc',
+        '<(DEPTH)/starboard/shared/signal/suspend_signals.h',
+        '<(DEPTH)/starboard/shared/starboard/application.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_create.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_destroy.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_internal.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_is_valid.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/stub_audio_sink_type.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/stub_audio_sink_type.h',
+        '<(DEPTH)/starboard/shared/starboard/directory_can_open.cc',
+        '<(DEPTH)/starboard/shared/starboard/event_cancel.cc',
+        '<(DEPTH)/starboard/shared/starboard/event_schedule.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_mode_string_to_flags.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_storage/storage_close_record.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_storage/storage_delete_record.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_storage/storage_get_record_size.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_storage/storage_open_record.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_storage/storage_read_record.cc',
+        '<(DEPTH)/starboard/shared/starboard/file_storage/storage_write_record.cc',
+        '<(DEPTH)/starboard/shared/starboard/log_message.cc',
+        '<(DEPTH)/starboard/shared/starboard/log_raw_dump_stack.cc',
+        '<(DEPTH)/starboard/shared/starboard/log_raw_format.cc',
+        '<(DEPTH)/starboard/shared/starboard/media/media_can_play_mime_and_key_system.cc',
+        '<(DEPTH)/starboard/shared/starboard/media/media_is_output_protected.cc',
+        '<(DEPTH)/starboard/shared/starboard/media/media_set_output_protection.cc',
+        '<(DEPTH)/starboard/shared/starboard/media/mime_parser.cc',
+        '<(DEPTH)/starboard/shared/starboard/media/mime_parser.h',
+        '<(DEPTH)/starboard/shared/starboard/new.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/audio_decoder_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/audio_renderer_internal.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/audio_renderer_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/video_decoder_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/video_renderer_internal.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/filter/video_renderer_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/player/input_buffer_internal.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/input_buffer_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/player/player_create.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_destroy.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_get_info.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_internal.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/player/player_seek.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_set_bounds.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_set_pause.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_set_volume.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_worker.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_worker.h',
+        '<(DEPTH)/starboard/shared/starboard/player/player_write_end_of_stream.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/player_write_sample.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/video_frame_internal.cc',
+        '<(DEPTH)/starboard/shared/starboard/player/video_frame_internal.h',
+        '<(DEPTH)/starboard/shared/starboard/queue_application.cc',
+        '<(DEPTH)/starboard/shared/starboard/string_concat.cc',
+        '<(DEPTH)/starboard/shared/starboard/string_concat_wide.cc',
+        '<(DEPTH)/starboard/shared/starboard/string_copy.cc',
+        '<(DEPTH)/starboard/shared/starboard/string_copy_wide.cc',
+        '<(DEPTH)/starboard/shared/starboard/string_duplicate.cc',
+        '<(DEPTH)/starboard/shared/starboard/system_get_random_uint64.cc',
+        '<(DEPTH)/starboard/shared/starboard/system_request_stop.cc',
+        '<(DEPTH)/starboard/shared/starboard/window_set_default_options.cc',
+        '<(DEPTH)/starboard/shared/stub/drm_close_session.cc',
+        '<(DEPTH)/starboard/shared/stub/drm_create_system.cc',
+        '<(DEPTH)/starboard/shared/stub/drm_destroy_system.cc',
+        '<(DEPTH)/starboard/shared/stub/drm_generate_session_update_request.cc',
+        '<(DEPTH)/starboard/shared/stub/drm_system_internal.h',
+        '<(DEPTH)/starboard/shared/stub/drm_update_session.cc',
+        '<(DEPTH)/starboard/shared/stub/media_is_supported.cc',
+        '<(DEPTH)/starboard/shared/stub/system_clear_platform_error.cc',
+        '<(DEPTH)/starboard/shared/stub/system_get_total_gpu_memory.cc',
+        '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc',
+        '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc',
+        '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc',
+        '<(DEPTH)/starboard/shared/x11/application_x11.cc',
+        '<(DEPTH)/starboard/shared/x11/window_create.cc',
+        '<(DEPTH)/starboard/shared/x11/window_destroy.cc',
+        '<(DEPTH)/starboard/shared/x11/window_get_platform_handle.cc',
+        '<(DEPTH)/starboard/shared/x11/window_get_size.cc',
+        '<(DEPTH)/starboard/shared/x11/window_internal.cc',
+      ],
+      'defines': [
+        # This must be defined when building Starboard, and must not when
+        # building Starboard client code.
+        'STARBOARD_IMPLEMENTATION',
+      ],
+      'dependencies': [
+        '<(DEPTH)/starboard/common/common.gyp:common',
+        '<(DEPTH)/third_party/dlmalloc/dlmalloc.gyp:dlmalloc',
+        '<(DEPTH)/third_party/libevent/libevent.gyp:libevent',
+        'starboard_base_symbolize',
+      ],
+    },
+  ],
+}
diff --git a/src/starboard/creator/ci20/system_get_property.cc b/src/starboard/creator/ci20/system_get_property.cc
new file mode 100644
index 0000000..8a7a795
--- /dev/null
+++ b/src/starboard/creator/ci20/system_get_property.cc
@@ -0,0 +1,69 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/system.h"
+
+#include "starboard/log.h"
+#include "starboard/string.h"
+
+namespace {
+
+const char* kFriendlyName = "Creator Ci20";
+const char* kPlatformName = "Creator Ci20 JZ4780";
+
+bool CopyStringAndTestIfSuccess(char* out_value,
+                                int value_length,
+                                const char* from_value) {
+  if (SbStringGetLength(from_value) + 1 > value_length)
+    return false;
+  SbStringCopy(out_value, from_value, value_length);
+  return true;
+}
+
+}  // namespace
+
+bool SbSystemGetProperty(SbSystemPropertyId property_id,
+                         char* out_value,
+                         int value_length) {
+  if (!out_value || !value_length) {
+    return false;
+  }
+
+  switch (property_id) {
+    case kSbSystemPropertyBrandName:
+    case kSbSystemPropertyChipsetModelNumber:
+    case kSbSystemPropertyFirmwareVersion:
+    case kSbSystemPropertyModelName:
+    case kSbSystemPropertyModelYear:
+    case kSbSystemPropertyNetworkOperatorName:
+      return false;
+
+    case kSbSystemPropertyFriendlyName:
+      return CopyStringAndTestIfSuccess(out_value, value_length, kFriendlyName);
+
+    case kSbSystemPropertyPlatformName:
+      return CopyStringAndTestIfSuccess(out_value, value_length, kPlatformName);
+
+    case kSbSystemPropertyPlatformUuid:
+      SB_NOTIMPLEMENTED();
+      return CopyStringAndTestIfSuccess(out_value, value_length, "N/A");
+
+    default:
+      SB_DLOG(WARNING) << __FUNCTION__
+                       << ": Unrecognized property: " << property_id;
+      break;
+  }
+
+  return false;
+}
diff --git a/src/starboard/creator/ci20/thread_types_public.h b/src/starboard/creator/ci20/thread_types_public.h
new file mode 100644
index 0000000..ec9eedf
--- /dev/null
+++ b/src/starboard/creator/ci20/thread_types_public.h
@@ -0,0 +1,20 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_CREATOR_CI20_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_CREATOR_CI20_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/linux/shared/thread_types_public.h"
+
+#endif  // STARBOARD_CREATOR_CI20_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/creator/shared/configuration_public.h b/src/starboard/creator/shared/configuration_public.h
new file mode 100644
index 0000000..8144c15
--- /dev/null
+++ b/src/starboard/creator/shared/configuration_public.h
@@ -0,0 +1,380 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The shared Starboard configuration for Creator devices.
+
+#ifndef STARBOARD_CREATOR_SHARED_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_CREATOR_SHARED_CONFIGURATION_PUBLIC_H_
+
+// The API version implemented by this platform.
+#define SB_API_VERSION 1
+
+// --- System Header Configuration -------------------------------------------
+
+// Any system headers listed here that are not provided by the platform will be
+// emulated in starboard/types.h.
+
+// Whether the current platform provides the standard header stdarg.h.
+#define SB_HAS_STDARG_H 1
+
+// Whether the current platform provides the standard header stdbool.h.
+#define SB_HAS_STDBOOL_H 1
+
+// Whether the current platform provides the standard header stddef.h.
+#define SB_HAS_STDDEF_H 1
+
+// Whether the current platform provides the standard header stdint.h.
+#define SB_HAS_STDINT_H 1
+
+// Whether the current platform provides the standard header inttypes.h.
+#define SB_HAS_INTTYPES_H 1
+
+// Whether the current platform provides the standard header wchar.h.
+#define SB_HAS_WCHAR_H 1
+
+// Whether the current platform provides the standard header limits.h.
+#define SB_HAS_LIMITS_H 1
+
+// Whether the current platform provides the standard header float.h.
+#define SB_HAS_FLOAT_H 1
+
+// Type detection for wchar_t.
+#if defined(__WCHAR_MAX__) && \
+    (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
+#define SB_IS_WCHAR_T_UTF32 1
+#elif defined(__WCHAR_MAX__) && \
+    (__WCHAR_MAX__ == 0x7fff || __WCHAR_MAX__ == 0xffff)
+#define SB_IS_WCHAR_T_UTF16 1
+#endif
+
+// Chrome only defines these two if ARMEL or MIPSEL are defined.
+#if defined(__ARMEL__)
+// Chrome has an exclusion for iOS here, we should too when we support iOS.
+#define SB_IS_WCHAR_T_UNSIGNED 1
+#elif defined(__MIPSEL__)
+#define SB_IS_WCHAR_T_SIGNED 1
+#endif
+
+// --- Architecture Configuration --------------------------------------------
+
+// On the current version of Raspbian, real time thread scheduling seems to be
+// broken in that higher priority threads do not always have priority over lower
+// priority threads.  It looks like the thread created last will always have the
+// highest priority.
+#define SB_HAS_THREAD_PRIORITY_SUPPORT 0
+
+// --- Attribute Configuration -----------------------------------------------
+
+// The platform's annotation for forcing a C function to be inlined.
+#define SB_C_FORCE_INLINE __inline__ __attribute__((always_inline))
+
+// The platform's annotation for marking a C function as suggested to be
+// inlined.
+#define SB_C_INLINE inline
+
+// The platform's annotation for marking a C function as forcibly not
+// inlined.
+#define SB_C_NOINLINE __attribute__((noinline))
+
+// The platform's annotation for marking a symbol as exported outside of the
+// current shared library.
+#define SB_EXPORT_PLATFORM __attribute__((visibility("default")))
+
+// The platform's annotation for marking a symbol as imported from outside of
+// the current linking unit.
+#define SB_IMPORT_PLATFORM
+
+// --- Extensions Configuration ----------------------------------------------
+
+// GCC/Clang doesn't define a long long hash function, except for Android and
+// Game consoles.
+#define SB_HAS_LONG_LONG_HASH 0
+
+// GCC/Clang doesn't define a string hash function, except for Game Consoles.
+#define SB_HAS_STRING_HASH 0
+
+// Desktop Linux needs a using statement for the hash functions.
+#define SB_HAS_HASH_USING 0
+
+// Set this to 1 if hash functions for custom types can be defined as a
+// hash_value() function. Otherwise, they need to be placed inside a
+// partially-specified hash struct template with an operator().
+#define SB_HAS_HASH_VALUE 0
+
+// Set this to 1 if use of hash_map or hash_set causes a deprecation warning
+// (which then breaks the build).
+#define SB_HAS_HASH_WARNING 1
+
+// The location to include hash_map on this platform.
+#define SB_HASH_MAP_INCLUDE <ext/hash_map>
+
+// C++'s hash_map and hash_set are often found in different namespaces depending
+// on the compiler.
+#define SB_HASH_NAMESPACE __gnu_cxx
+
+// The location to include hash_set on this platform.
+#define SB_HASH_SET_INCLUDE <ext/hash_set>
+
+// Define this to how this platform copies varargs blocks.
+#define SB_VA_COPY(dest, source) va_copy(dest, source)
+
+// --- Filesystem Configuration ----------------------------------------------
+
+// The current platform's maximum length of the name of a single directory
+// entry, not including the absolute path.
+#define SB_FILE_MAX_NAME 64
+
+// The current platform's maximum length of an absolute path.
+#define SB_FILE_MAX_PATH 4096
+
+// The current platform's maximum number of files that can be opened at the
+// same time by one process.
+#define SB_FILE_MAX_OPEN 256
+
+// The current platform's file path component separator character. This is the
+// character that appears after a directory in a file path. For example, the
+// absolute canonical path of the file "/path/to/a/file.txt" uses '/' as a path
+// component separator character.
+#define SB_FILE_SEP_CHAR '/'
+
+// The current platform's alternate file path component separator character.
+// This is like SB_FILE_SEP_CHAR, except if your platform supports an alternate
+// character, then you can place that here. For example, on windows machines,
+// the primary separator character is probably '\', but the alternate is '/'.
+#define SB_FILE_ALT_SEP_CHAR '/'
+
+// The current platform's search path component separator character. When
+// specifying an ordered list of absolute paths of directories to search for a
+// given reason, this is the character that appears between entries. For
+// example, the search path of "/etc/search/first:/etc/search/second" uses ':'
+// as a search path component separator character.
+#define SB_PATH_SEP_CHAR ':'
+
+// The string form of SB_FILE_SEP_CHAR.
+#define SB_FILE_SEP_STRING "/"
+
+// The string form of SB_FILE_ALT_SEP_CHAR.
+#define SB_FILE_ALT_SEP_STRING "/"
+
+// The string form of SB_PATH_SEP_CHAR.
+#define SB_PATH_SEP_STRING ":"
+
+// --- Memory Configuration --------------------------------------------------
+
+// The memory page size, which controls the size of chunks on memory that
+// allocators deal with, and the alignment of those chunks. This doesn't have to
+// be the hardware-defined physical page size, but it should be a multiple of
+// it.
+#define SB_MEMORY_PAGE_SIZE 4096
+
+// Whether this platform has and should use an MMAP function to map physical
+// memory to the virtual address space.
+#define SB_HAS_MMAP 1
+
+// Whether this platform can map executable memory. Implies SB_HAS_MMAP. This is
+// required for platforms that want to JIT.
+#define SB_CAN_MAP_EXECUTABLE_MEMORY 1
+
+// Whether this platform has and should use an growable heap (e.g. with sbrk())
+// to map physical memory to the virtual address space.
+#define SB_HAS_VIRTUAL_REGIONS 0
+
+// Specifies the alignment for IO Buffers, in bytes. Some low-level network APIs
+// may require buffers to have a specific alignment, and this is the place to
+// specify that.
+#define SB_NETWORK_IO_BUFFER_ALIGNMENT 16
+
+// Determines the alignment that allocations should have on this platform.
+#define SB_MALLOC_ALIGNMENT ((size_t)16U)
+
+// Determines the threshhold of allocation size that should be done with mmap
+// (if available), rather than allocated within the core heap.
+#define SB_DEFAULT_MMAP_THRESHOLD ((size_t)(256 * 1024U))
+
+// Defines the path where memory debugging logs should be written to.
+#define SB_MEMORY_LOG_PATH "/tmp/starboard"
+
+// --- Thread Configuration --------------------------------------------------
+
+// Defines the maximum number of simultaneous threads for this platform. Some
+// platforms require sharing thread handles with other kinds of system handles,
+// like mutexes, so we want to keep this managable.
+#define SB_MAX_THREADS 90
+
+// The maximum number of thread local storage keys supported by this platform.
+#define SB_MAX_THREAD_LOCAL_KEYS 512
+
+// The maximum length of the name for a thread, including the NULL-terminator.
+#define SB_MAX_THREAD_NAME_LENGTH 16;
+
+// --- Graphics Configuration ------------------------------------------------
+
+// Specifies whether this platform supports a performant accelerated blitter
+// API. The basic requirement is a scaled, clipped, alpha-blended blit.
+#define SB_HAS_BLITTER 0
+
+// Specifies the preferred byte order of color channels in a pixel. Refer to
+// starboard/configuration.h for the possible values. EGL/GLES platforms should
+// generally prefer a byte order of RGBA, regardless of endianness.
+#define SB_PREFERRED_RGBA_BYTE_ORDER SB_PREFERRED_RGBA_BYTE_ORDER_RGBA
+
+// Indicates whether or not the given platform supports bilinear filtering.
+// This can be checked to enable/disable renderer tests that verify that this is
+// working properly.
+#define SB_HAS_BILINEAR_FILTERING_SUPPORT 1
+
+// Indicates whether or not the given platform supports rendering of NV12
+// textures. These textures typically originate from video decoders.
+#define SB_HAS_NV12_TEXTURE_SUPPORT 1
+
+// Whether the current platform should frequently flip their display buffer.
+// If this is not required (e.g. SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER is set
+// to 0), then optimizations where the display buffer is not flipped if the
+// scene hasn't changed are enabled.
+#define SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER 0
+
+// --- Media Configuration ---------------------------------------------------
+
+// Specifies whether this platform has support for a possibly-decrypting
+// elementary stream player for at least H.264/AAC (and AES-128-CTR, if
+// decrypting). A player is responsible for ingesting an audio and video
+// elementary stream, optionally-encrypted, and ultimately producing
+// synchronized audio/video. If a player is defined, it must choose one of the
+// supported composition methods below.
+#define SB_HAS_PLAYER 1
+
+// Specifies whether this platform's player will produce an OpenGL texture that
+// the client must draw every frame with its graphics rendering. It may be that
+// we get a texture handle, but cannot perform operations like GlReadPixels on
+// it if it is DRM-protected.
+#define SB_IS_PLAYER_PRODUCING_TEXTURE 0
+
+// Specifies whether this platform's player is composited with a formal
+// compositor, where the client must specify how video is to be composited into
+// the graphicals scene.
+#define SB_IS_PLAYER_COMPOSITED 0
+
+// Specifies whether this platform's player uses a "punch-out" model, where
+// video is rendered to the far background, and the graphics plane is
+// automatically composited on top of the video by the platform. The client must
+// punch an alpha hole out of the graphics plane for video to show through.  In
+// this case, changing the video bounds must be tightly synchronized between the
+// player and the graphics plane.
+#define SB_IS_PLAYER_PUNCHED_OUT 1
+
+// Specifies the maximum amount of memory used by audio buffers of media source
+// before triggering a garbage collection.  A large value will cause more memory
+// being used by audio buffers but will also make JavaScript app less likely to
+// re-download audio data.  Note that the JavaScript app may experience
+// significant difficulty if this value is too low.
+#define SB_MEDIA_SOURCE_BUFFER_STREAM_AUDIO_MEMORY_LIMIT (3U * 1024U * 1024U)
+
+// Specifies the maximum amount of memory used by video buffers of media source
+// before triggering a garbage collection.  A large value will cause more memory
+// being used by video buffers but will also make JavaScript app less likely to
+// re-download video data.  Note that the JavaScript app may experience
+// significant difficulty if this value is too low.
+#define SB_MEDIA_SOURCE_BUFFER_STREAM_VIDEO_MEMORY_LIMIT (16U * 1024U * 1024U)
+
+// Specifies how much memory to reserve up-front for the main media buffer
+// (usually resides inside the CPU memory) used by media source and demuxers.
+// The main media buffer can work in one of the following two ways:
+// 1. If GPU buffer is used (i.e. SB_MEDIA_GPU_BUFFER_BUDGET is non-zero), the
+//    main buffer will be used as a cache so a media buffer will be copied from
+//    GPU memory to main memory before sending to the decoder for further
+//    processing.  In this case this macro should be set to a value that is
+//    large enough to hold all media buffers being decoded.
+// 2. If GPU buffer is not used (i.e. SB_MEDIA_GPU_BUFFER_BUDGET is zero) all
+//    media buffers will reside in the main memory buffer.  In this case the
+//    macro should be set to a value that is greater than the sum of the above
+//    source buffer stream memory limits with extra room to take account of
+//    fragmentations and memory used by demuxers.
+#define SB_MEDIA_MAIN_BUFFER_BUDGET (32U * 1024U * 1024U)
+
+// Specifies how much GPU memory to reserve up-front for media source buffers.
+// This should only be set to non-zero on system with limited CPU memory and
+// excess GPU memory so the app can store media buffer in GPU memory.
+// SB_MEDIA_MAIN_BUFFER_BUDGET has to be set to a non-zero value to avoid
+// media buffers being decoded when being stored in GPU.
+#define SB_MEDIA_GPU_BUFFER_BUDGET 0U
+
+// Specifies whether this platform has webm/vp9 support.  This should be set to
+// non-zero on platforms with webm/vp9 support.
+#define SB_HAS_MEDIA_WEBM_VP9_SUPPORT 0
+
+// Specifies the stack size for threads created inside media stack.  Set to 0 to
+// use the default thread stack size.  Set to non-zero to explicitly set the
+// stack size for media stack threads.
+#define SB_MEDIA_THREAD_STACK_SIZE 0U
+
+// --- Decoder-only Params ---
+
+// Specifies how media buffers must be aligned on this platform as some
+// decoders may have special requirement on the alignment of buffers being
+// decoded.
+#define SB_MEDIA_BUFFER_ALIGNMENT 128U
+
+// Specifies how video frame buffers must be aligned on this platform.
+#define SB_MEDIA_VIDEO_FRAME_ALIGNMENT 256U
+
+// The encoded video frames are compressed in different ways, their decoding
+// time can vary a lot.  Occasionally a single frame can take longer time to
+// decode than the average time per frame.  The player has to cache some frames
+// to account for such inconsistency.  The number of frames being cached are
+// controlled by the following two macros.
+//
+// Specify the number of video frames to be cached before the playback starts.
+// Note that set this value too large may increase the playback start delay.
+#define SB_MEDIA_MAXIMUM_VIDEO_PREROLL_FRAMES 4
+
+// Specify the number of video frames to be cached during playback.  A large
+// value leads to more stable fps but also causes the app to use more memory.
+#define SB_MEDIA_MAXIMUM_VIDEO_FRAMES 12
+
+// --- Network Configuration -------------------------------------------------
+
+// Specifies whether this platform supports IPV6.
+#define SB_HAS_IPV6 1
+
+// Specifies whether this platform supports pipe.
+#define SB_HAS_PIPE 1
+
+// --- Tuneable Parameters ---------------------------------------------------
+
+// Specifies the network receive buffer size in bytes, set via
+// SbSocketSetReceiveBufferSize().
+//
+// Setting this to 0 indicates that SbSocketSetReceiveBufferSize() should
+// not be called. Use this for OSs (such as Linux) where receive buffer
+// auto-tuning is better.
+//
+// On some platforms, this may affect max TCP window size which may
+// dramatically affect throughput in the presence of latency.
+//
+// If your platform does not have a good TCP auto-tuning mechanism,
+// a setting of (128 * 1024) here is recommended.
+#define SB_NETWORK_RECEIVE_BUFFER_SIZE (0)
+
+// --- User Configuration ----------------------------------------------------
+
+// The maximum number of users that can be signed in at the same time.
+#define SB_USER_MAX_SIGNED_IN 1
+
+// --- Platform Specific Audits ----------------------------------------------
+
+#if !defined(__GNUC__)
+#error "CREATOR_SHARED builds need a GCC-like compiler (for the moment)."
+#endif
+
+#endif  // STARBOARD_CREATOR_SHARED_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/shared/gyp_configuration.py b/src/starboard/linux/shared/gyp_configuration.py
index cb6edb4..0baa281 100644
--- a/src/starboard/linux/shared/gyp_configuration.py
+++ b/src/starboard/linux/shared/gyp_configuration.py
@@ -49,10 +49,18 @@
     # set to 1 in the environment.
     use_asan_default = self.asan_default if not use_tsan and configuration in (
         Configs.DEBUG, Configs.DEVEL) else 0
+
+    # Set environmental variable to enable_mtm: 'USE_MTM'
+    # Terminal: `export {varname}={value}`
+    # Note: must also edit gyp_configuration.gypi per internal instructions.
+    mtm_on_by_default = 0
+    mtm_enabled = int(os.environ.get('USE_MTM', mtm_on_by_default))
+
     variables.update({
         'clang': 1,
         'use_asan': int(os.environ.get('USE_ASAN', use_asan_default)),
         'use_tsan': use_tsan,
+        'enable_mtm': mtm_enabled
     })
 
     if variables.get('use_asan') == 1 and variables.get('use_tsan') == 1:
diff --git a/src/starboard/microphone.h b/src/starboard/microphone.h
new file mode 100644
index 0000000..9ca8816
--- /dev/null
+++ b/src/starboard/microphone.h
@@ -0,0 +1,178 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Microphone creation, control, audio data fetching and destruction.
+// Multiple calls to |SbMicrophoneOpen| and |SbMicrophoneClose| are allowed, and
+// the implementation also should take care of same calls of open and close in a
+// row on a microphone.
+// This API is not threadsafe and must be called from a single thread.
+//
+// How to use this API:
+// 1) |SbMicrophoneGetAvailableInfos| to get a list of available microphone
+//    information.
+// 2) Choose one to create microphone |SbMicrophoneCreate| with enough buffer
+//    size and sample rate. The sample rate can be verified by
+//    |SbMicrophoneIsSampleRateSupported|.
+// 3) Open the microphone port and start recording audio data by
+//    |SbMicrophoneOpen|.
+// 4) Periodically read out the data from microphone by |SbMicrophoneRead|.
+// 5) Close the microphone port and stop recording audio data by
+//    |SbMicrophoneClose|.
+// 6) Destroy the microphone |SbMicrophoneDestroy|.
+
+#ifndef STARBOARD_MICROPHONE_H_
+#define STARBOARD_MICROPHONE_H_
+
+#include "starboard/configuration.h"
+#include "starboard/export.h"
+#include "starboard/types.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// All possible microphone types.
+typedef enum SbMicrophoneType {
+  // Build-in microphone in camera.
+  kSbMicrophoneCamera,
+
+  // Microphone in the headset which can be wire or wireless USB headset.
+  kSbMicrophoneUSBHeadset,
+
+  // Microphone in the VR headset.
+  kSbMicrophoneVRHeadset,
+
+  // Microphone in the analog headset.
+  kSBMicrophoneAnalogHeadset,
+
+  // Unknown microphone type. Microphone other than those listed or could be
+  // either of those listed.
+  kSbMicrophoneUnknown,
+} SbMicrophoneType;
+
+// An opaque handle to an implementation-private structure representing a
+// microphone id.
+typedef struct SbMicrophoneIdPrivate* SbMicrophoneId;
+
+// Well-defined value for an invalid microphone id handle.
+#define kSbMicrophoneIdInvalid ((SbMicrophoneId)NULL)
+
+// Returns whether the given microphone id is valid.
+static SB_C_INLINE bool SbMicrophoneIdIsValid(SbMicrophoneId id) {
+  return id != kSbMicrophoneIdInvalid;
+}
+
+// Microphone information.
+typedef struct SbMicrophoneInfo {
+  // Microphone id.
+  SbMicrophoneId id;
+
+  // Microphone type.
+  SbMicrophoneType type;
+
+  // Microphone max supported sampling rate.
+  int max_sample_rate_hz;
+} SbMicrophoneInfo;
+
+// An opaque handle to an implementation-private structure representing a
+// microphone.
+typedef struct SbMicrophonePrivate* SbMicrophone;
+
+// Well-defined value for an invalid microphone handle.
+#define kSbMicrophoneInvalid ((SbMicrophone)NULL)
+
+// Returns whether the given microphone is valid.
+static SB_C_INLINE bool SbMicrophoneIsValid(SbMicrophone microphone) {
+  return microphone != kSbMicrophoneInvalid;
+}
+
+// Gets all currently-available microphone information and the results are
+// stored in |out_info_array|. |info_array_size| is the size of
+// |out_info_array|.
+// Return value is the number of the available microphones. A negative return
+// value indicates that either the |info_array_size| is too small or an internal
+// error is occurred.
+SB_EXPORT int SbMicrophoneGetAvailable(SbMicrophoneInfo* out_info_array,
+                                       int info_array_size);
+
+// Returns true if the sample rate is supported by the microphone.
+SB_EXPORT bool SbMicrophoneIsSampleRateSupported(SbMicrophoneId id,
+                                                 int sample_rate_in_hz);
+
+// Creates a microphone with |id|, audio sample rate in HZ, and the size of
+// the cached audio buffer.
+//
+// If you try to create a microphone that has already been initialized or
+// the sample rate is unavailable or the buffer size is invalid, it should
+// return |kSbMicrophoneInvalid|. |buffer_size_bytes| is the size of the buffer
+// where signed 16-bit integer audio data is temporarily cached to during the
+// capturing. The audio data will be removed from the audio buffer if it has
+// been read. New audio data can be read from this buffer in smaller chunks than
+// this size. |buffer_size_bytes| must be set to a value greater than zero and
+// the ideal size is 2^n. We only require support for creating one microphone at
+// a time, and that implementations may return an error if a second microphone
+// is created before destroying the first.
+SB_EXPORT SbMicrophone SbMicrophoneCreate(SbMicrophoneId id,
+                                          int sample_rate_in_hz,
+                                          int buffer_size_bytes);
+
+// Opens the microphone port and starts recording audio on |microphone|.
+//
+// Once started, the client will have to periodically call |SbMicrophoneRead| to
+// receive the audio data. If the microphone has already been started, this call
+// will clear the unread buffer. The return value indicates if the microphone is
+// open.
+SB_EXPORT bool SbMicrophoneOpen(SbMicrophone microphone);
+
+// Closes the microphone port and stops recording audio on |microphone|.
+//
+// Clear the unread buffer if it is not empty. If the microphone has already
+// been stopped, this call would be ignored. The return value indicates if the
+// microphone is closed.
+SB_EXPORT bool SbMicrophoneClose(SbMicrophone microphone);
+
+// Gets the recorded audio data from the microphone.
+//
+// |out_audio_data| is where the recorded audio data is written to.
+// |audio_data_size| is the number of requested bytes. The return value is zero
+// or the positive number of bytes that were read. Neither the return value nor
+// |audio_data_size| exceeds the buffer size. Negative return value indicates
+// an error. This function should be called frequently, otherwise microphone
+// only buffers |buffer_size| bytes which is configured in |SbMicrophoneCreate|
+// and the new audio data will be thrown out. No audio data will be read from a
+// stopped microphone.
+SB_EXPORT int SbMicrophoneRead(SbMicrophone microphone,
+                               void* out_audio_data,
+                               int audio_data_size);
+
+// Destroys a microphone. If the microphone is in started state, it will be
+// stopped first and then be destroyed. Any data that has been recorded and not
+// read will be thrown away.
+SB_EXPORT void SbMicrophoneDestroy(SbMicrophone microphone);
+
+// Returns the Google Speech API key. The platform manufacturer is responsible
+// for registering a Google Speech API key for their products. In the API
+// Console (http://developers.google.com/console), you are able to enable the
+// Speech APIs and generate a Speech API key.
+SB_EXPORT const char* SbMicrophoneGetSpeechApiKey();
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+#endif  // STARBOARD_MICROPHONE_H_
diff --git a/src/starboard/nplb/include_all.c b/src/starboard/nplb/include_all.c
index 1ff7637..74f0e84 100644
--- a/src/starboard/nplb/include_all.c
+++ b/src/starboard/nplb/include_all.c
@@ -32,6 +32,7 @@
 #include "starboard/log.h"
 #include "starboard/media.h"
 #include "starboard/memory.h"
+#include "starboard/microphone.h"
 #include "starboard/mutex.h"
 #include "starboard/once.h"
 #include "starboard/player.h"
diff --git a/src/starboard/nplb/microphone_close_test.cc b/src/starboard/nplb/microphone_close_test.cc
new file mode 100644
index 0000000..662eb0a
--- /dev/null
+++ b/src/starboard/nplb/microphone_close_test.cc
@@ -0,0 +1,79 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "starboard/nplb/microphone_helpers.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneCloseTest, SunnyDayCloseAreCalledMultipleTimes) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_info_array =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_info_array, 0);
+
+  if (available_info_array != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+    bool success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCloseTest, SunnyDayOpenIsNotCalled) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_info_array =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_info_array, 0);
+
+  if (available_info_array != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    bool success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCloseTest, RainyDayCloseWithInvalidMicrophone) {
+  bool success = SbMicrophoneClose(kSbMicrophoneInvalid);
+  EXPECT_FALSE(success);
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_create_test.cc b/src/starboard/nplb/microphone_create_test.cc
new file mode 100644
index 0000000..f89be07
--- /dev/null
+++ b/src/starboard/nplb/microphone_create_test.cc
@@ -0,0 +1,182 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "starboard/nplb/microphone_helpers.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneCreateTest, SunnyDayOnlyOneMicrophone) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    EXPECT_TRUE(SbMicrophoneIsValid(microphone));
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayOneMicrophoneIsCreatedMultipleTimes) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    EXPECT_TRUE(SbMicrophoneIsValid(microphone));
+
+    SbMicrophone microphone_1 = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone_1));
+
+    SbMicrophone microphone_2 = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone_2));
+
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidMicrophoneId) {
+  SbMicrophone microphone = SbMicrophoneCreate(
+      kSbMicrophoneIdInvalid, kNormallyUsedSampleRateInHz, kBufferSize);
+  EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidFrequency_0) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_FALSE(SbMicrophoneIsSampleRateSupported(info_array[0].id, 0));
+    SbMicrophone microphone =
+        SbMicrophoneCreate(info_array[0].id, 0, kBufferSize);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidFrequency_Negative) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_FALSE(SbMicrophoneIsSampleRateSupported(info_array[0].id, -8000));
+    SbMicrophone microphone =
+        SbMicrophoneCreate(info_array[0].id, -8000, kBufferSize);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidFrequency_MoreThanMax) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_FALSE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz + 1));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz + 1, kBufferSize);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidBufferSize_0) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, 0);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCreateTest, SunnyDayBufferSize_1) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, 1);
+    EXPECT_TRUE(SbMicrophoneIsValid(microphone));
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidBufferSize_Negative) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, -1024);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneCreateTest, RainyDayInvalidBufferSize_2G) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone =
+        SbMicrophoneCreate(info_array[0].id, info_array[0].max_sample_rate_hz,
+                           2 * 1024 * 1024 * 1024L);
+    EXPECT_FALSE(SbMicrophoneIsValid(microphone));
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_destroy_test.cc b/src/starboard/nplb/microphone_destroy_test.cc
new file mode 100644
index 0000000..707a3f1
--- /dev/null
+++ b/src/starboard/nplb/microphone_destroy_test.cc
@@ -0,0 +1,30 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneDestroyTest, DestroyInvalidMicrophone) {
+  SbMicrophoneDestroy(kSbMicrophoneInvalid);
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_get_available_test.cc b/src/starboard/nplb/microphone_get_available_test.cc
new file mode 100644
index 0000000..14a7ed0
--- /dev/null
+++ b/src/starboard/nplb/microphone_get_available_test.cc
@@ -0,0 +1,57 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "starboard/nplb/microphone_helpers.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneGetAvailableTest, SunnyDay) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+}
+
+TEST(SbMicrophoneGetAvailableTest, RainyDay0NumberOfMicrophone) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  if (SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone) > 0) {
+    int available_microphones = SbMicrophoneGetAvailable(info_array, 0);
+    EXPECT_LE(available_microphones, 0);
+  }
+}
+
+TEST(SbMicrophoneGetAvailableTest, RainyDayNegativeNumberOfMicrophone) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones = SbMicrophoneGetAvailable(info_array, -10);
+  EXPECT_LT(available_microphones, 0);
+}
+
+TEST(SbMicrophoneGetAvailableTest, RainyDayNULLInfoArray) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  if (SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone) > 0) {
+    int available_microphones =
+        SbMicrophoneGetAvailable(NULL, kMaxNumberOfMicrophone);
+    EXPECT_LT(available_microphones, 0);
+  }
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_get_speech_api_key_test.cc b/src/starboard/nplb/microphone_get_speech_api_key_test.cc
new file mode 100644
index 0000000..67b5347
--- /dev/null
+++ b/src/starboard/nplb/microphone_get_speech_api_key_test.cc
@@ -0,0 +1,33 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneGetSpeechApiKeyTest, SunnyDay) {
+  const char* speech_api_key = SbMicrophoneGetSpeechApiKey();
+
+  ASSERT_NE(speech_api_key, static_cast<const char*>(NULL));
+  EXPECT_NE(speech_api_key[0], '\0');
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_helpers.h b/src/starboard/nplb/microphone_helpers.h
new file mode 100644
index 0000000..06d4c37
--- /dev/null
+++ b/src/starboard/nplb/microphone_helpers.h
@@ -0,0 +1,32 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_NPLB_MICROPHONE_HELPERS_H_
+#define STARBOARD_NPLB_MICROPHONE_HELPERS_H_
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+namespace starboard {
+namespace nplb {
+const int kMaxNumberOfMicrophone = 20;
+const int kBufferSize = 32 * 1024;
+const int kNormallyUsedSampleRateInHz = 16000;
+}  // namespace nplb
+}  // namespace starboard
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+#endif  // STARBOARD_NPLB_MICROPHONE_HELPERS_H_
diff --git a/src/starboard/nplb/microphone_is_sample_rate_supported_test.cc b/src/starboard/nplb/microphone_is_sample_rate_supported_test.cc
new file mode 100644
index 0000000..1016b8d
--- /dev/null
+++ b/src/starboard/nplb/microphone_is_sample_rate_supported_test.cc
@@ -0,0 +1,55 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "starboard/nplb/microphone_helpers.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneIsSampleRateSupportedTest, SunnyDay) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    EXPECT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+  }
+}
+
+TEST(SbMicrophoneIsSampleRateSupportedTest, RainyDayInvalidSampleRate) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    EXPECT_FALSE(SbMicrophoneIsSampleRateSupported(info_array[0].id, 0));
+  }
+}
+
+TEST(SbMicrophoneIsSampleRateSupportedTest, RainyDayInvalidMicrophoneId) {
+  EXPECT_FALSE(SbMicrophoneIsSampleRateSupported(kSbMicrophoneIdInvalid,
+                                                 kNormallyUsedSampleRateInHz));
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_open_test.cc b/src/starboard/nplb/microphone_open_test.cc
new file mode 100644
index 0000000..2853457
--- /dev/null
+++ b/src/starboard/nplb/microphone_open_test.cc
@@ -0,0 +1,98 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "starboard/nplb/microphone_helpers.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneOpenTest, SunnyDay) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+    bool success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneOpenTest, SunnyDayNoClose) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+    bool success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneOpenTest, SunnyDayMultipleOpenCalls) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+    bool success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneOpenTest, RainyDayOpenWithInvalidMicrophone) {
+  bool success = SbMicrophoneOpen(kSbMicrophoneInvalid);
+  EXPECT_FALSE(success);
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/microphone_read_test.cc b/src/starboard/nplb/microphone_read_test.cc
new file mode 100644
index 0000000..6f80656
--- /dev/null
+++ b/src/starboard/nplb/microphone_read_test.cc
@@ -0,0 +1,197 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+#include "starboard/nplb/microphone_helpers.h"
+#include "starboard/thread.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+TEST(SbMicrophoneReadTest, SunnyDay) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    bool success = SbMicrophoneOpen(microphone);
+    ASSERT_TRUE(success);
+
+    void* audio_data[1024];
+    int read_bytes =
+        SbMicrophoneRead(microphone, audio_data, sizeof(audio_data));
+    EXPECT_GE(read_bytes, 0);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneReadTest, SunnyDayOpenSleepCloseAndOpenRead) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    bool success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    SbThreadSleep(50 * kSbTimeMillisecond);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    void* audio_data[16 * 1024];
+    int read_bytes =
+        SbMicrophoneRead(microphone, audio_data, sizeof(audio_data));
+    EXPECT_GE(read_bytes, 0);
+    EXPECT_LT(read_bytes, sizeof(audio_data));
+
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneReadTest, RainyDayAudioBufferIsNULL) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    bool success = SbMicrophoneOpen(microphone);
+    ASSERT_TRUE(success);
+
+    int read_bytes = SbMicrophoneRead(microphone, NULL, 0);
+    EXPECT_EQ(read_bytes, 0);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneReadTest, RainyDayAudioBufferSizeIsSmallerThanRequestedSize) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    bool success = SbMicrophoneOpen(microphone);
+    ASSERT_TRUE(success);
+
+    int read_bytes = SbMicrophoneRead(microphone, NULL, 1024);
+    EXPECT_LE(read_bytes, 0);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneReadTest, RainyDayOpenIsNotCalled) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    void* audio_data[1024];
+    int read_bytes =
+        SbMicrophoneRead(microphone, audio_data, sizeof(audio_data));
+    EXPECT_EQ(read_bytes, 0);
+
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneReadTest, RainyDayOpenCloseAndRead) {
+  SbMicrophoneInfo info_array[kMaxNumberOfMicrophone];
+  int available_microphones =
+      SbMicrophoneGetAvailable(info_array, kMaxNumberOfMicrophone);
+  EXPECT_GE(available_microphones, 0);
+
+  if (available_microphones != 0) {
+    ASSERT_TRUE(SbMicrophoneIsSampleRateSupported(
+        info_array[0].id, info_array[0].max_sample_rate_hz));
+    SbMicrophone microphone = SbMicrophoneCreate(
+        info_array[0].id, info_array[0].max_sample_rate_hz, kBufferSize);
+    ASSERT_TRUE(SbMicrophoneIsValid(microphone));
+
+    bool success = SbMicrophoneOpen(microphone);
+    EXPECT_TRUE(success);
+
+    success = SbMicrophoneClose(microphone);
+    EXPECT_TRUE(success);
+
+    void* audio_data[1024];
+    int read_bytes =
+        SbMicrophoneRead(microphone, audio_data, sizeof(audio_data));
+    // No data can be read.
+    EXPECT_EQ(read_bytes, 0);
+
+    SbMicrophoneDestroy(microphone);
+  }
+}
+
+TEST(SbMicrophoneReadTest, RainyDayMicrophoneIsInvalid) {
+  void* audio_data[1024];
+  int read_bytes =
+      SbMicrophoneRead(kSbMicrophoneInvalid, audio_data, sizeof(audio_data));
+  EXPECT_LT(read_bytes, 0);
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/nplb.gyp b/src/starboard/nplb/nplb.gyp
index da63d88..437cc92 100644
--- a/src/starboard/nplb/nplb.gyp
+++ b/src/starboard/nplb/nplb.gyp
@@ -121,6 +121,14 @@
         'memory_move_test.cc',
         'memory_reallocate_test.cc',
         'memory_set_test.cc',
+        'microphone_close_test.cc',
+        'microphone_create_test.cc',
+        'microphone_destroy_test.cc',
+        'microphone_get_available_test.cc',
+        'microphone_get_speech_api_key_test.cc',
+        'microphone_is_sample_rate_supported_test.cc',
+        'microphone_open_test.cc',
+        'microphone_read_test.cc',
         'mutex_acquire_test.cc',
         'mutex_acquire_try_test.cc',
         'mutex_create_test.cc',
diff --git a/src/starboard/shared/pthread/types_public.h b/src/starboard/shared/pthread/types_public.h
index 5475df8..59ee65e 100644
--- a/src/starboard/shared/pthread/types_public.h
+++ b/src/starboard/shared/pthread/types_public.h
@@ -52,6 +52,6 @@
 typedef pthread_t SbThread;
 
 // Well-defined constant value to mean "no thread handle."
-#define kSbThreadInvalid (SbThread) - 1
+#define kSbThreadInvalid (SbThread)-1
 
 #endif  // STARBOARD_SHARED_PTHREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/shared/stub/microphone_close.cc b/src/starboard/shared/stub/microphone_close.cc
new file mode 100644
index 0000000..fd1bd15
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_close.cc
@@ -0,0 +1,23 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+bool SbMicrophoneClose(SbMicrophone microphone) {
+  return false;
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_create.cc b/src/starboard/shared/stub/microphone_create.cc
new file mode 100644
index 0000000..eeb5c13
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_create.cc
@@ -0,0 +1,25 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+SbMicrophone SbMicrophoneCreate(SbMicrophoneId id,
+                                int sample_rate_in_hz,
+                                int buffer_size) {
+  return kSbMicrophoneInvalid;
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_destroy.cc b/src/starboard/shared/stub/microphone_destroy.cc
new file mode 100644
index 0000000..11b1ce7
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_destroy.cc
@@ -0,0 +1,21 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+void SbMicrophoneDestroy(SbMicrophone microphone) {}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_get_available.cc b/src/starboard/shared/stub/microphone_get_available.cc
new file mode 100644
index 0000000..126149d
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_get_available.cc
@@ -0,0 +1,24 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+int SbMicrophoneGetAvailable(SbMicrophoneInfo* out_info_array,
+                             int info_array_size) {
+  return -1;
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_get_speech_api_key.cc b/src/starboard/shared/stub/microphone_get_speech_api_key.cc
new file mode 100644
index 0000000..98038b4
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_get_speech_api_key.cc
@@ -0,0 +1,23 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+const char* SbMicrophoneGetSpeechApiKey() {
+  return "";
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_is_sample_rate_supported.cc b/src/starboard/shared/stub/microphone_is_sample_rate_supported.cc
new file mode 100644
index 0000000..d33766f
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_is_sample_rate_supported.cc
@@ -0,0 +1,24 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+bool SbMicrophoneIsSampleRateSupported(SbMicrophoneId id,
+                                       int sample_rate_in_hz) {
+  return false;
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_open.cc b/src/starboard/shared/stub/microphone_open.cc
new file mode 100644
index 0000000..0ce049b
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_open.cc
@@ -0,0 +1,23 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+bool SbMicrophoneOpen(SbMicrophone microphone) {
+  return false;
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/microphone_read.cc b/src/starboard/shared/stub/microphone_read.cc
new file mode 100644
index 0000000..430195f
--- /dev/null
+++ b/src/starboard/shared/stub/microphone_read.cc
@@ -0,0 +1,25 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/microphone.h"
+
+#if SB_HAS(MICROPHONE) && SB_VERSION(2)
+
+int SbMicrophoneRead(SbMicrophone microphone,
+                     void* out_audio_data,
+                     int audio_data_size) {
+  return 0;
+}
+
+#endif  // SB_HAS(MICROPHONE) && SB_VERSION(2)
diff --git a/src/starboard/shared/stub/thread_types_public.h b/src/starboard/shared/stub/thread_types_public.h
index 8680b8b..543aa50 100644
--- a/src/starboard/shared/stub/thread_types_public.h
+++ b/src/starboard/shared/stub/thread_types_public.h
@@ -47,6 +47,6 @@
 typedef void* SbThread;
 
 // Well-defined constant value to mean "no thread handle."
-#define kSbThreadInvalid (SbThread) - 1
+#define kSbThreadInvalid (SbThread)-1
 
 #endif  // STARBOARD_SHARED_STUB_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/starboard.gyp b/src/starboard/starboard.gyp
index a76467a..5677568 100644
--- a/src/starboard/starboard.gyp
+++ b/src/starboard/starboard.gyp
@@ -40,6 +40,7 @@
         'log.h',
         'media.h',
         'memory.h',
+        'microphone.h',
         'mutex.h',
         'once.h',
         'player.h',
diff --git a/src/starboard/stub/configuration_public.h b/src/starboard/stub/configuration_public.h
index 99b64df..f243cfa 100644
--- a/src/starboard/stub/configuration_public.h
+++ b/src/starboard/stub/configuration_public.h
@@ -94,7 +94,7 @@
 #define SB_HAS_CROSS_CORE_SCHEDULER 1
 
 // The API version implemented by this platform.
-#define SB_API_VERSION 1
+#define SB_API_VERSION 2
 
 // --- System Header Configuration -------------------------------------------
 
@@ -125,6 +125,9 @@
 // Whether the current platform provides the standard header float.h.
 #define SB_HAS_FLOAT_H 1
 
+// Whether the current platform has microphone supported.
+#define SB_HAS_MICROPHONE 1
+
 // Type detection for wchar_t.
 #if defined(__WCHAR_MAX__) && \
     (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
@@ -341,6 +344,15 @@
 // player and the graphics plane.
 #define SB_IS_PLAYER_PUNCHED_OUT 1
 
+// After a seek is triggerred, the default behavior is to append video frames
+// from the last key frame before the seek time and append audio frames from the
+// seek time because usually all audio frames are key frames.  On platforms that
+// cannot decode video frames without displaying them, this will cause the video
+// being played without audio for several seconds after seeking.  When the
+// following macro is defined, the app will append audio frames start from the
+// timestamp that is before the timestamp of the video key frame being appended.
+#undef SB_HAS_QUIRK_SEEK_TO_KEYFRAME
+
 // Specifies the maximum amount of memory used by audio buffers of media source
 // before triggering a garbage collection.  A large value will cause more memory
 // being used by audio buffers but will also make JavaScript app less likely to
diff --git a/src/starboard/stub/starboard_platform.gyp b/src/starboard/stub/starboard_platform.gyp
index ed61292..bfacb36 100644
--- a/src/starboard/stub/starboard_platform.gyp
+++ b/src/starboard/stub/starboard_platform.gyp
@@ -98,6 +98,14 @@
         '<(DEPTH)/starboard/shared/stub/memory_reallocate_unchecked.cc',
         '<(DEPTH)/starboard/shared/stub/memory_set.cc',
         '<(DEPTH)/starboard/shared/stub/memory_unmap.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_close.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_create.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_destroy.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_get_available.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_get_speech_api_key.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_is_sample_rate_supported.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_open.cc',
+        '<(DEPTH)/starboard/shared/stub/microphone_read.cc',
         '<(DEPTH)/starboard/shared/stub/mutex_acquire.cc',
         '<(DEPTH)/starboard/shared/stub/mutex_acquire_try.cc',
         '<(DEPTH)/starboard/shared/stub/mutex_create.cc',
diff --git a/src/testing/gtest/include/gtest/internal/gtest-port.h b/src/testing/gtest/include/gtest/internal/gtest-port.h
index 4a01619..156858f 100644
--- a/src/testing/gtest/include/gtest/internal/gtest-port.h
+++ b/src/testing/gtest/include/gtest/internal/gtest-port.h
@@ -1788,7 +1788,7 @@
 inline void Flush() { SbLogFlush(); }
 
 inline void *Malloc(size_t n) { return SbMemoryAllocate(n); }
-inline void Free(void *p) { return SbMemoryFree(p); }
+inline void Free(void *p) { return SbMemoryDeallocate(p); }
 
 #else // GTEST_OS_STARBOARD
 
diff --git a/src/third_party/WebKit/Source/WTF/wtf/FastMalloc.cpp b/src/third_party/WebKit/Source/WTF/wtf/FastMalloc.cpp
index 1dcf403..945a1f9 100644
--- a/src/third_party/WebKit/Source/WTF/wtf/FastMalloc.cpp
+++ b/src/third_party/WebKit/Source/WTF/wtf/FastMalloc.cpp
@@ -290,7 +290,7 @@
 
 void portFree(void* ptr) {
 #if OS(STARBOARD)
-    return SbMemoryFree(ptr);
+    return SbMemoryDeallocate(ptr);
 #else
     return free(ptr);
 #endif
diff --git a/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.cpp b/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.cpp
index 2eb965d..0450d7f 100644
--- a/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.cpp
+++ b/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.cpp
@@ -100,7 +100,7 @@
         updateAllocatedPages(-page_count);
         SbMemoryUnmap(addr, size);
     } else {
-        SbMemoryFreeAligned(addr);
+        SbMemoryDeallocateAligned(addr);
         non_page_blocks_.erase(it);
     }
 }
diff --git a/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.h b/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.h
index b23711c..e610c1d 100644
--- a/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.h
+++ b/src/third_party/WebKit/Source/WTF/wtf/OSAllocatorStarboard.h
@@ -133,8 +133,8 @@
 class StarboardPageAllocatorFixed : public StarboardPageAllocator {
  public:
   ~StarboardPageAllocatorFixed() {
-    SbMemoryFree(buffer_orig_);
-    SbMemoryFree(free_bitmap_);
+    SbMemoryDeallocate(buffer_orig_);
+    SbMemoryDeallocate(free_bitmap_);
   }
 
   static StarboardPageAllocatorFixed* Create() {
@@ -155,7 +155,7 @@
   // Free a block that was allocated with allocateBlock()
   void freeBlock(void* ptr) {
     void* orig_ptr = *(void**)((uintptr_t)ptr - sizeof(void*));
-    SbMemoryFree(orig_ptr);
+    SbMemoryDeallocate(orig_ptr);
   }
 
   void* buffer_;
diff --git a/src/third_party/WebKit/Source/WTF/wtf/unicode/icu/CollatorICU.cpp b/src/third_party/WebKit/Source/WTF/wtf/unicode/icu/CollatorICU.cpp
index 96d1422..f04c958 100644
--- a/src/third_party/WebKit/Source/WTF/wtf/unicode/icu/CollatorICU.cpp
+++ b/src/third_party/WebKit/Source/WTF/wtf/unicode/icu/CollatorICU.cpp
@@ -46,7 +46,7 @@
 #include "starboard/memory.h"
 #include "starboard/string.h"
 #define strdup SbStringDuplicate
-#define free SbMemoryFree
+#define free SbMemoryDeallocate
 #endif
 
 namespace WTF {
diff --git a/src/third_party/freetype2/include/freetype/config/ftstdlib.h b/src/third_party/freetype2/include/freetype/config/ftstdlib.h
index 38dc546..625f1eb 100644
--- a/src/third_party/freetype2/include/freetype/config/ftstdlib.h
+++ b/src/third_party/freetype2/include/freetype/config/ftstdlib.h
@@ -182,7 +182,7 @@
   SbMemorySet(memory, 0, size);

   return memory;

 }

-#define ft_sfree     SbMemoryFree

+#define ft_sfree     SbMemoryDeallocate

 #define ft_smalloc   SbMemoryAllocate

 #define ft_srealloc  SbMemoryReallocate

 #else

diff --git a/src/third_party/libevent/compat/sys/_libevent_time.h b/src/third_party/libevent/compat/sys/_libevent_time.h
index 8cabb0d..6dec7d7 100644
--- a/src/third_party/libevent/compat/sys/_libevent_time.h
+++ b/src/third_party/libevent/compat/sys/_libevent_time.h
@@ -35,7 +35,9 @@
 #ifndef _SYS_TIME_H_
 #define _SYS_TIME_H_
 
+#ifndef STARBOARD
 #include <sys/types.h>
+#endif
 
 /*
  * Structure returned by gettimeofday(2) system call,
diff --git a/src/third_party/libevent/epoll.c b/src/third_party/libevent/epoll.c
index 30ae3e6..e1fb79d 100644
--- a/src/third_party/libevent/epoll.c
+++ b/src/third_party/libevent/epoll.c
@@ -28,6 +28,18 @@
 #include "config.h"
 #endif
 
+#ifdef STARBOARD
+#include "epoll-internal.h"
+#include "libevent-starboard.h"
+
+// Use libevent's local compatibility  versions of these.
+#include "third_party/libevent/compat/sys/queue.h"
+
+// Include Starboard poems after all system headers.
+#include "starboard/client_porting/poem/stdio_poem.h"
+#include "starboard/client_porting/poem/stdlib_poem.h"
+#include "starboard/client_porting/poem/string_poem.h"
+#else  // STARBOARD
 #include <stdint.h>
 #include <sys/types.h>
 #ifdef HAVE_SYS_TIME_H
@@ -36,11 +48,9 @@
 #include <sys/_libevent_time.h>
 #endif
 #include <sys/queue.h>
-#ifndef STARBOARD
 #include <signal.h>
 #include <sys/epoll.h>
 #include <sys/resource.h>
-#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -49,6 +59,7 @@
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
+#endif  // STARBOARD
 
 #include "event.h"
 #include "event-internal.h"
@@ -57,10 +68,6 @@
 #endif
 #include "log.h"
 
-#ifdef STARBOARD
-#include "epoll-internal.h"
-#endif
-
 /* due to limitations in the epoll interface, we need to keep track of
  * all file descriptors outself.
  */
diff --git a/src/third_party/libevent/event-internal.h b/src/third_party/libevent/event-internal.h
index d3b303e..af92f7b 100644
--- a/src/third_party/libevent/event-internal.h
+++ b/src/third_party/libevent/event-internal.h
@@ -37,10 +37,6 @@
 #include "evsignal.h"
 #endif
 
-#ifdef STARBOARD
-#include "event-starboard-internal.h"
-#endif
-
 struct eventop {
 	const char *name;
 	void *(*init)(struct event_base *);
diff --git a/src/third_party/libevent/event.c b/src/third_party/libevent/event.c
index 0f0f36d..8564bed 100644
--- a/src/third_party/libevent/event.c
+++ b/src/third_party/libevent/event.c
@@ -28,6 +28,16 @@
 #include "config.h"
 #endif
 
+#ifdef STARBOARD
+#include "libevent-starboard.h"
+
+#include "compat/sys/queue.h"
+
+// Include Starboard poems after all system headers.
+#include "starboard/client_porting/poem/assert_poem.h"
+#include "starboard/client_porting/poem/stdio_poem.h"
+#include "starboard/client_porting/poem/stdlib_poem.h"
+#else  // STARBOARD
 #ifdef WIN32
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -52,6 +62,7 @@
 #include <string.h>
 #include <assert.h>
 #include <time.h>
+#endif  // STARBOARD
 
 #include "event.h"
 #include "event-internal.h"
diff --git a/src/third_party/libevent/event.h b/src/third_party/libevent/event.h
index 72e9b8b..2ab00d1 100644
--- a/src/third_party/libevent/event.h
+++ b/src/third_party/libevent/event.h
@@ -159,6 +159,9 @@
 extern "C" {
 #endif
 
+#ifdef STARBOARD
+#include "starboard/types.h"
+#else
 #include "event-config.h"
 #ifdef _EVENT_HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -170,6 +173,7 @@
 #include <stdint.h>
 #endif
 #include <stdarg.h>
+#endif  // STARBOARD
 
 /* For int types. */
 #include "evutil.h"
@@ -724,10 +728,10 @@
 /* These functions deal with buffering input and output */
 
 struct evbuffer {
-	u_char *buffer;
-	u_char *orig_buffer;
+  uint8_t* buffer;
+  uint8_t* orig_buffer;
 
-	size_t misalign;
+        size_t misalign;
 	size_t totallen;
 	size_t off;
 
@@ -1111,7 +1115,7 @@
   @param len the length of the search string
   @return a pointer to the beginning of the search string, or NULL if the search failed.
  */
-u_char *evbuffer_find(struct evbuffer *, const u_char *, size_t);
+uint8_t* evbuffer_find(struct evbuffer*, const uint8_t*, size_t);
 
 /**
   Set a callback to invoke when the evbuffer is modified.
diff --git a/src/third_party/libevent/evutil.c b/src/third_party/libevent/evutil.c
index e5c71ab..e707f88 100644
--- a/src/third_party/libevent/evutil.c
+++ b/src/third_party/libevent/evutil.c
@@ -28,6 +28,15 @@
 #include "config.h"
 #endif
 
+#ifdef STARBOARD
+#include "libevent-starboard.h"
+
+#include "compat/sys/queue.h"
+
+// Include Starboard poems after all system headers.
+#include "starboard/client_porting/poem/stdio_poem.h"
+#include "starboard/client_porting/poem/stdlib_poem.h"
+#else
 #ifdef WIN32
 #include <winsock2.h>
 #define WIN32_LEAN_AND_MEAN
@@ -53,11 +62,10 @@
 #include <sys/timeb.h>
 #endif
 #include <stdio.h>
-#ifndef STARBOARD
 #include <signal.h>
+#include <sys/queue.h>
 #endif
 
-#include <sys/queue.h>
 #include "event.h"
 #include "event-internal.h"
 #include "evutil.h"
@@ -172,14 +180,17 @@
 		ioctlsocket(fd, FIONBIO, (unsigned long*) &nonblocking);
 	}
 #else
+#ifdef HAVE_FCNTL
 	if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) {
 		event_warn("fcntl(O_NONBLOCK)");
 		return -1;
-}	
+  }
+#endif
 #endif
 	return 0;
 }
 
+#ifndef STARBOARD
 ev_int64_t
 evutil_strtoll(const char *s, char **endptr, int base)
 {
@@ -207,6 +218,7 @@
 #error "I don't know how to parse 64-bit integers."
 #endif
 }
+#endif
 
 #ifndef _EVENT_HAVE_GETTIMEOFDAY
 int
diff --git a/src/third_party/libevent/evutil.h b/src/third_party/libevent/evutil.h
index 8b664b9..a2c8f59 100644
--- a/src/third_party/libevent/evutil.h
+++ b/src/third_party/libevent/evutil.h
@@ -39,6 +39,8 @@
 #endif
 
 #include "event-config.h"
+
+#ifndef STARBOARD
 #ifdef _EVENT_HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -51,6 +53,7 @@
 #include <sys/types.h>
 #endif
 #include <stdarg.h>
+#endif  // STARBOARD
 
 #ifdef _EVENT_HAVE_UINT64_T
 #define ev_uint64_t uint64_t
@@ -160,10 +163,10 @@
 #define	evutil_timerisset(tvp)	((tvp)->tv_sec || (tvp)->tv_usec)
 #endif
 
-
+#ifndef STARBOARD
 /* big-int related functions */
 ev_int64_t evutil_strtoll(const char *s, char **endptr, int base);
-
+#endif
 
 #ifdef _EVENT_HAVE_GETTIMEOFDAY
 #define evutil_gettimeofday(tv, tz) gettimeofday((tv), (tz))
diff --git a/src/third_party/libevent/libevent.gyp b/src/third_party/libevent/libevent.gyp
index 99eb2df..d82ba5c 100644
--- a/src/third_party/libevent/libevent.gyp
+++ b/src/third_party/libevent/libevent.gyp
@@ -16,6 +16,7 @@
           'toolsets': ['host', 'target'],
           'sources': [
             'buffer.c',
+            'epoll.c',
             'evbuffer.c',
             'evdns.c',
             'event.c',
@@ -39,7 +40,6 @@
             # SbSocketWaiter API. This means the Libevent is below the Starboard
             # platform abstraction line.
             [ 'OS == "starboard"', {
-              'sources': [ 'epoll.c' ],
               'sources!': [
                 'buffer.c',
                 'evbuffer.c',
@@ -47,13 +47,18 @@
                 'event_tagging.c',
                 'evrpc.c',
                 'http.c',
-                'poll.c',
                 'select.c',
                 'signal.c',
                 'strlcpy.c',
               ],
               'include_dirs': [ 'starboard' ],
               'conditions': [
+                [ 'sb_libevent_method == "epoll"', {
+                  'sources!': [ 'poll.c' ],
+                }],
+                [ 'sb_libevent_method == "poll"', {
+                  'sources!': [ 'epoll.c' ],
+                }],
                 [ 'target_os == "linux"', {
                   'sources': [ 'epoll_sub.c' ],
                   'include_dirs': [ 'starboard/linux' ],
@@ -66,7 +71,11 @@
                 [ 'target_os == "orbis"', {
                   'include_dirs': [ 'starboard/ps4' ],
                   }
-                ]
+                ],
+                [ 'target_os == "cell"', {
+                  'include_dirs': [ 'starboard/ps3' ],
+                  },
+                ],
               ],
             }],
             # libevent has platform-specific implementation files.  Since its
diff --git a/src/third_party/libevent/log.c b/src/third_party/libevent/log.c
index 48ebb26..804b6b0 100644
--- a/src/third_party/libevent/log.c
+++ b/src/third_party/libevent/log.c
@@ -41,6 +41,15 @@
 #include "config.h"
 #endif
 
+#ifdef STARBOARD
+#include "libevent-starboard.h"
+#include "starboard/log.h"
+#include "starboard/system.h"
+#include "starboard/types.h"
+
+// Include Starboard poems after all system headers.
+#include "starboard/client_porting/poem/string_poem.h"
+#else  // STARBOARD
 #ifdef WIN32
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -57,8 +66,9 @@
 #include <stdarg.h>
 #include <string.h>
 #include <errno.h>
-#include "event.h"
+#endif  // STARBOARD
 
+#include "event.h"
 #include "log.h"
 #include "evutil.h"
 
@@ -74,7 +84,11 @@
 	va_start(ap, fmt);
 	_warn_helper(_EVENT_LOG_ERR, errno, fmt, ap);
 	va_end(ap);
+#ifdef STARBOARD
+  SbSystemBreakIntoDebugger();
+#else
 	exit(eval);
+#endif
 }
 
 void
@@ -95,7 +109,11 @@
 	va_start(ap, fmt);
 	_warn_helper(_EVENT_LOG_ERR, -1, fmt, ap);
 	va_end(ap);
+#ifdef STARBOARD
+  SbSystemBreakIntoDebugger();
+#else
 	exit(eval);
+#endif
 }
 
 void
@@ -139,6 +157,7 @@
 	else
 		buf[0] = '\0';
 
+#ifndef STARBOARD
 	if (log_errno >= 0) {
 		len = strlen(buf);
 		if (len < sizeof(buf) - 3) {
@@ -146,6 +165,7 @@
 			    strerror(log_errno));
 		}
 	}
+#endif
 
 	event_log(severity, buf);
 }
@@ -161,6 +181,26 @@
 static void
 event_log(int severity, const char *msg)
 {
+#ifdef STARBOARD
+  SbLogPriority log_priority;
+  switch (severity) {
+    case _EVENT_LOG_DEBUG:
+		case _EVENT_LOG_MSG:
+      log_priority = kSbLogPriorityInfo;
+      break;
+    case _EVENT_LOG_WARN:
+      log_priority = kSbLogPriorityWarning;
+      break;
+    case _EVENT_LOG_ERR:
+      log_priority = kSbLogPriorityError;
+      break;
+    default:
+      SB_NOTREACHED();
+      log_priority = kSbLogPriorityUnknown;
+      break;
+  }
+  SbLog(log_priority, msg);
+#else  // STARBOARD
 	if (log_fn)
 		log_fn(severity, msg);
 	else {
@@ -184,4 +224,5 @@
 		}
 		(void)fprintf(stderr, "[%s] %s\n", severity_str, msg);
 	}
+#endif  // STARBOARD
 }
diff --git a/src/third_party/libevent/min_heap.h b/src/third_party/libevent/min_heap.h
index de8ad2a..4fc83c0 100644
--- a/src/third_party/libevent/min_heap.h
+++ b/src/third_party/libevent/min_heap.h
@@ -30,11 +30,6 @@
 #include "event.h"
 #include "evutil.h"
 
-#if defined(STARBOARD)
-#include "event-starboard-internal.h"
-#endif
-
-
 typedef struct min_heap
 {
     struct event** p;
diff --git a/src/third_party/libevent/poll.c b/src/third_party/libevent/poll.c
index 2aa245b..5a880bf 100644
--- a/src/third_party/libevent/poll.c
+++ b/src/third_party/libevent/poll.c
@@ -30,6 +30,17 @@
 #include "config.h"
 #endif
 
+#ifdef STARBOARD
+#include "libevent-starboard.h"
+
+// Use libevent's local compatibility  versions of these.
+#include "third_party/libevent/compat/sys/queue.h"
+#include "third_party/libevent/compat/sys/_libevent_time.h"
+
+// Include Starboard poems after all system headers.
+#include "starboard/client_porting/poem/stdio_poem.h"
+#include "starboard/client_porting/poem/string_poem.h"
+#else  // STARBOARD
 #include <sys/types.h>
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
@@ -47,10 +58,13 @@
 #ifdef CHECK_INVARIANTS
 #include <assert.h>
 #endif
+#endif  // STARBOARD
 
 #include "event.h"
 #include "event-internal.h"
+#ifndef STARBOARD
 #include "evsignal.h"
+#endif  // STARBOARD
 #include "log.h"
 
 struct pollop {
@@ -93,7 +107,9 @@
 	if (!(pollop = calloc(1, sizeof(struct pollop))))
 		return (NULL);
 
+#ifndef STARBOARD
 	evsignal_init(base);
+#endif
 
 	return (pollop);
 }
@@ -152,11 +168,16 @@
 			return (-1);
 		}
 
+#ifndef STARBOARD
 		evsignal_process(base);
+#endif
 		return (0);
-	} else if (base->sig.evsignal_caught) {
+	}
+#ifndef STARBOARD
+  else if (base->sig.evsignal_caught) {
 		evsignal_process(base);
 	}
+#endif
 
 	event_debug(("%s: poll reports %d", __func__, res));
 
@@ -208,8 +229,10 @@
 	struct pollfd *pfd = NULL;
 	int i;
 
+#ifndef STARBOARD
 	if (ev->ev_events & EV_SIGNAL)
 		return (evsignal_add(ev));
+#endif
 	if (!(ev->ev_events & (EV_READ|EV_WRITE)))
 		return (0);
 
@@ -313,8 +336,10 @@
 	struct pollfd *pfd = NULL;
 	int i;
 
+#ifndef STARBOARD
 	if (ev->ev_events & EV_SIGNAL)
 		return (evsignal_del(ev));
+#endif
 
 	if (!(ev->ev_events & (EV_READ|EV_WRITE)))
 		return (0);
@@ -364,7 +389,10 @@
 {
 	struct pollop *pop = arg;
 
+#ifndef STARBOARD
 	evsignal_dealloc(base);
+#endif
+
 	if (pop->event_set)
 		free(pop->event_set);
 	if (pop->event_r_back)
diff --git a/src/third_party/libevent/starboard/config.h b/src/third_party/libevent/starboard/config.h
index e728c20..abc2003 100644
--- a/src/third_party/libevent/starboard/config.h
+++ b/src/third_party/libevent/starboard/config.h
@@ -1,6 +1,8 @@
 /* config.h.  Generated from config.h.in by configure.  */
 /* config.h.in.  Generated from configure.in by autoheader.  */
 
+#include "starboard/configuration.h"
+
 /* Define if clock_gettime is available in libc */
 #define DNS_USE_CPU_CLOCK_FOR_ID 1
 
@@ -17,19 +19,19 @@
 #define HAVE_DLFCN_H 1
 
 /* Define if your system supports the epoll system calls */
-#define HAVE_EPOLL 1
+/* #undef HAVE_EPOLL */
 
 /* Define to 1 if you have the `epoll_ctl' function. */
-#define HAVE_EPOLL_CTL 1
+/* #undef HAVE_EPOLL_CTL */
 
 /* Define if your system supports event ports */
 /* #undef HAVE_EVENT_PORTS */
 
 /* Define to 1 if you have the `fcntl' function. */
-#define HAVE_FCNTL 1
+/* #undef HAVE_FCNTL */
 
 /* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
+/* #undef HAVE_FCNTL_H */
 
 /* Define to 1 if the system has the type `fd_mask'. */
 #define HAVE_FD_MASK 1
diff --git a/src/third_party/libevent/starboard/event-config.h b/src/third_party/libevent/starboard/event-config.h
index 5a52a61..920c3e8 100644
--- a/src/third_party/libevent/starboard/event-config.h
+++ b/src/third_party/libevent/starboard/event-config.h
@@ -8,6 +8,8 @@
 /* config.h.  Generated from config.h.in by configure.  */
 /* config.h.in.  Generated from configure.in by autoheader.  */
 
+#include "starboard/configuration.h"
+
 /* Define if clock_gettime is available in libc */
 #define _EVENT_DNS_USE_CPU_CLOCK_FOR_ID 1
 
@@ -24,19 +26,19 @@
 #define _EVENT_HAVE_DLFCN_H 1
 
 /* Define if your system supports the epoll system calls */
-#define _EVENT_HAVE_EPOLL 1
+/* #undef _EVENT_HAVE_EPOLL */
 
 /* Define to 1 if you have the `epoll_ctl' function. */
-#define _EVENT_HAVE_EPOLL_CTL 1
+/* #undef _EVENT_HAVE_EPOLL_CTL */
 
 /* Define if your system supports event ports */
 /* #undef _EVENT_HAVE_EVENT_PORTS */
 
 /* Define to 1 if you have the `fcntl' function. */
-#define _EVENT_HAVE_FCNTL 1
+/* #undef _EVENT_HAVE_FCNTL */
 
 /* Define to 1 if you have the <fcntl.h> header file. */
-#define _EVENT_HAVE_FCNTL_H 1
+/* #undef _EVENT_HAVE_FCNTL_H */
 
 /* Define to 1 if the system has the type `fd_mask'. */
 #define _EVENT_HAVE_FD_MASK 1
@@ -99,7 +101,7 @@
 /* #undef _EVENT_HAVE_PORT_H */
 
 /* Define to 1 if you have the `select' function. */
-#define _EVENT_HAVE_SELECT 1
+/* #undef _EVENT_HAVE_SELECT */
 
 /* Define if F_SETFD is defined in <fcntl.h> */
 #define _EVENT_HAVE_SETFD 1
diff --git a/src/third_party/libevent/starboard/event-starboard-internal.h b/src/third_party/libevent/starboard/event-starboard-internal.h
deleted file mode 100644
index 33a0747..0000000
--- a/src/third_party/libevent/starboard/event-starboard-internal.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _EVENT_STARBOARD_INTERNAL_H_
-#define _EVENT_STARBOARD_INTERNAL_H_
-
-#include "starboard/memory.h"
-
-#define calloc SbMemoryCalloc
-#define free SbMemoryDeallocate
-#define malloc SbMemoryAllocate
-#define realloc SbMemoryReallocate
-
-#endif  /* _EVENT_STARBOARD_INTERNAL_H_ */
diff --git a/src/third_party/libevent/starboard/linux/epoll-internal.h b/src/third_party/libevent/starboard/linux/epoll-internal.h
index 34469db..48d10e2 100644
--- a/src/third_party/libevent/starboard/linux/epoll-internal.h
+++ b/src/third_party/libevent/starboard/linux/epoll-internal.h
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
+#ifndef _EPOLL_INTERNAL_H_
+#define _EPOLL_INTERNAL_H_
+
 #include <sys/epoll.h>
 #include <sys/resource.h>
 
 #define epoll_ctl_del epoll_ctl
+
+#endif  // _EPOLL_INTERNAL_H_
diff --git a/src/third_party/libevent/starboard/linux/libevent-starboard.h b/src/third_party/libevent/starboard/linux/libevent-starboard.h
new file mode 100644
index 0000000..a43c24b
--- /dev/null
+++ b/src/third_party/libevent/starboard/linux/libevent-starboard.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LIBEVENT_STARBOARD_H_
+#define _LIBEVENT_STARBOARD_H_
+
+#include "starboard/types.h"
+
+#include <errno.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+
+#define HAVE_EPOLL 1
+#define HAVE_EPOLL_CTL 1
+
+#endif  // _LIBEVENT_STARBOARD_H_
diff --git a/src/third_party/mozjs/cobalt_config/include/jscustomallocator.h b/src/third_party/mozjs/cobalt_config/include/jscustomallocator.h
index 4dcd88e..8999fd0 100644
--- a/src/third_party/mozjs/cobalt_config/include/jscustomallocator.h
+++ b/src/third_party/mozjs/cobalt_config/include/jscustomallocator.h
@@ -55,7 +55,7 @@
       AllocationMetadata::GetMetadataFromUserAddress(p);
   MemoryAllocatorReporter::Get()->UpdateAllocatedBytes(-static_cast<ssize_t>(
       AllocationMetadata::GetSizeOfAllocationFromMetadata(metadata)));
-  SbMemoryFree(metadata);
+  SbMemoryDeallocate(metadata);
 }
 
 static JS_INLINE void* js_realloc(void* p, size_t bytes) {
diff --git a/src/third_party/mozjs/intl/icu/APIChangeReport.html b/src/third_party/mozjs/intl/icu/APIChangeReport.html
deleted file mode 100644
index 639e8d8..0000000
--- a/src/third_party/mozjs/intl/icu/APIChangeReport.html
+++ /dev/null
@@ -1,1457 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html><!--
-	 Copyright (C)  2012, International Business Machines Corporation, All Rights Reserved. 
-	-->
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>ICU4C API Comparison: 49 with 50 r32649M</title>
-<link type="text/css" href="icu4c.css" rel="stylesheet">
-</head>
-<body>
-<a name="#_top"></a>
-<h1>ICU4C API Comparison: 49 with 50 (r32649M)</h1>
-<div id="toc">
-<ul>
-<li>
-<a href="#removed">Removed from 49</a>
-</li>
-<li>
-<a href="#deprecated">Deprecated or Obsoleted in 50</a>
-</li>
-<li>
-<a href="#changed">Changed in  50</a>
-</li>
-<li>
-<a href="#promoted">Promoted to stable in 50</a>
-</li>
-<li>
-<a href="#added">Added in 50</a>
-</li>
-<li>
-<a href="#other">Other existing drafts in 50</a>
-</li>
-<li>
-<a href="#purevirtual">Signature Simplifications</a><sup style="background-color: yellow; font-size: smallest;">(new)</sup>
-</li>
-</ul>
-<hr>
-</div>
-<a name="removed"></a>
-<h2>Removed from 49</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>49</th><th>50</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">const Locale icu::Collator::getLocale(ULocDataLocaleType, UErrorCode&amp;)</td><td class="">Deprecated<br>3.0.</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">coll.h</td><td class="proto">uint32_t icu::Collator::setVariableTop(const UnicodeString, UErrorCode&amp;)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">void icu::Collator::setVariableTop(const uint32_t, UErrorCode&amp;)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">plurfmt.h</td><td class="proto">void icu::PluralFormat::init(const PluralRules*, UErrorCode&amp;)</td><td class=""></td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">smpdtfmt.h</td><td class="proto">UnicodeString&amp; icu::SimpleDateFormat::format(Calendar&amp;, const UDateFormatContextType*, const UDateFormatContextValue*, int32_t, UnicodeString&amp;, FieldPosition&amp;)</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">smpdtfmt.h</td><td class="proto">int32_t icu::SimpleDateFormat::getDefaultContext(UDateFormatContextType, UErrorCode&amp;)</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">smpdtfmt.h</td><td class="proto">void icu::SimpleDateFormat::setDefaultContext(UDateFormatContextType, UDateFormatContextValue, UErrorCode&amp;)</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">Collator* icu::RuleBasedCollator::safeClone()</td><td class="stabchange">Stable<br>2.2</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">ECollationStrength icu::RuleBasedCollator::getStrength()</td><td class="">Deprecated</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">EComparisonResult icu::RuleBasedCollator::compare(const UChar*, int32_t, const UChar*, int32_t)</td><td class="">Deprecated</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">EComparisonResult icu::RuleBasedCollator::compare(const UnicodeString&amp;, const UnicodeString&amp;)</td><td class="">Deprecated</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">EComparisonResult icu::RuleBasedCollator::compare(const UnicodeString&amp;, const UnicodeString&amp;, int32_t)</td><td class="">Deprecated</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">UBool icu::RuleBasedCollator::operator!=(const Collator&amp;)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">const Locale icu::RuleBasedCollator::getLocale(ULocDataLocaleType, UErrorCode&amp;)</td><td class="">Deprecated</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">uint32_t icu::RuleBasedCollator::setVariableTop(const UnicodeString, UErrorCode&amp;)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">void icu::RuleBasedCollator::setStrength(ECollationStrength)</td><td class="">Deprecated</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">void icu::RuleBasedCollator::setVariableTop(const uint32_t, UErrorCode&amp;)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">int32_t icu::TimeZoneFormat::getDefaultParseOptions()</td><td class="">Internal</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setDefaultParseOptions(int32_t)</td><td class="">Internal</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uconfig.h</td><td class="proto"><tt>#define</tt> ICU_USE_THREADS</td><td class="">Internal</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uconfig.h</td><td class="proto"><tt>#define</tt> UCONFIG_INTERNAL_DIGITLIST</td><td class="">Internal</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatContextType::UDAT_CAPITALIZATION</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatContextValue::UDAT_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatContextValue::UDAT_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatContextValue::UDAT_CAPITALIZATION_FOR_STANDALONE</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatContextValue::UDAT_CAPITALIZATION_FOR_UI_LIST_OR_MENU</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatContextValue::UDAT_CONTEXT_UNKNOWN</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto">int32_t udat_getDefaultContext(UDateFormat*, UDateFormatContextType, UErrorCode*)</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto">void udat_setDefaultContext(UDateFormat*, UDateFormatContextType, UDateFormatContextValue, UErrorCode*)</td><td class="">Draft<br>49</td><td>None<br>
-<span class=""><span></span></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="deprecated"></a>
-<h2>Deprecated or Obsoleted in 50</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>49</th><th>50</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">Collator* icu::Collator::safeClone()</td><td class="stabchange">Stable<br>2.2</td><td>Deprecated<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">coll.h</td><td class="proto">Locale icu::Collator::getLocale(ULocDataLocaleType, UErrorCode&amp;)</td><td class="">None</td><td>Deprecated<br>
-<span class=""><span>3.0.</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">plurfmt.h</td><td class="proto">void icu::PluralFormat::setLocale(const Locale&amp;, UErrorCode&amp;)</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">Locale icu::RuleBasedCollator::getLocale(ULocDataLocaleType, UErrorCode&amp;)</td><td class="">None</td><td>Deprecated<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_HIRAGANA_QUATERNARY_MODE</td><td class="stabchange">Stable<br>2.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_STANDALONE_MONTH</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_GENERIC_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_MINUTE_GENERIC_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_MINUTE_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_STANDALONE_MONTH</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="changed"></a>
-<h2>Changed in  50 (old, new)</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>49</th><th>50</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">CollationKey&amp; icu::Collator::getCollationKey(const UChar*, int32_t, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">coll.h</td><td class="proto">CollationKey&amp; icu::Collator::getCollationKey(const UnicodeString&amp;, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">Collator* icu::Collator::safeClone()</td><td class="stabchange">Stable<br>2.2</td><td>Deprecated<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">plurfmt.h</td><td class="proto">void icu::PluralFormat::setLocale(const Locale&amp;, UErrorCode&amp;)</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">UBool icu::CollationKey::isBogus()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">UBool icu::CollationKey::operator!=(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">UBool icu::CollationKey::operator==(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">UClassID icu::CollationKey::getDynamicClassID()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.2</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">UCollationResult icu::CollationKey::compareTo(const CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.6</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">const CollationKey&amp; icu::CollationKey::operator=(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">const uint8_t* icu::CollationKey::getByteArray(int32_t&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::CollationKey()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::CollationKey(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::CollationKey(const uint8_t*, int32_t)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::~CollationKey()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">int32_t icu::CollationKey::hashCode()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto"><tt>static</tt> UClassID icu::CollationKey::getStaticClassID()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.2</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">CollationKey&amp; icu::RuleBasedCollator::getCollationKey(const UChar*, int32_t, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">CollationKey&amp; icu::RuleBasedCollator::getCollationKey(const UnicodeString&amp;, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">Format* icu::TimeZoneFormat::clone()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">TimeZone* icu::TimeZoneFormat::parse(UTimeZoneFormatStyle, const UnicodeString&amp;, ParsePosition&amp;, UTimeZoneFormatTimeType*timeType=)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">TimeZone* icu::TimeZoneFormat::parse(UTimeZoneFormatStyle, const UnicodeString&amp;, ParsePosition&amp;, int32_t, UTimeZoneFormatTimeType*timeType=)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">TimeZoneFormat&amp; icu::TimeZoneFormat::operator=(const TimeZoneFormat&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">UBool icu::TimeZoneFormat::operator==(const Format&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">UClassID icu::TimeZoneFormat::getDynamicClassID()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::format(UTimeZoneFormatStyle, const TimeZone&amp;, UDate, UnicodeString&amp;, UTimeZoneFormatTimeType*timeType=)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::format(const Formattable&amp;, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::formatOffsetISO8601(int32_t, UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::formatOffsetLocalizedGMT(int32_t, UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::formatOffsetRFC822(int32_t, UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::getGMTOffsetDigits(UnicodeString&amp;)</td><td class=""></td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::getGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::getGMTPattern(UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneFormat::getGMTZeroFormat(UnicodeString&amp;)</td><td class=""></td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">const TimeZoneNames* icu::TimeZoneFormat::getTimeZoneNames()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatGMTOffsetPatternType::UTZFMT_PAT_NEGATIVE_HMS</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatGMTOffsetPatternType::UTZFMT_PAT_NEGATIVE_HM</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatGMTOffsetPatternType::UTZFMT_PAT_POSITIVE_HMS</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatGMTOffsetPatternType::UTZFMT_PAT_POSITIVE_HM</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatParseOption::UTZFMT_PARSE_OPTION_ALL_STYLES</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatParseOption::UTZFMT_PARSE_OPTION_NONE</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_GENERIC_LOCATION</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_GENERIC_LONG</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_GENERIC_SHORT</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_ISO8601</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_LOCALIZED_GMT</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_RFC822</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_SPECIFIC_LONG</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatStyle::UTZFMT_STYLE_SPECIFIC_SHORT</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatTimeType::UTZFMT_TIME_TYPE_DAYLIGHT</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatTimeType::UTZFMT_TIME_TYPE_STANDARD</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>enum</tt> UTimeZoneFormatTimeType::UTZFMT_TIME_TYPE_UNKNOWN</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">icu::TimeZoneFormat::TimeZoneFormat(const TimeZoneFormat&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">icu::TimeZoneFormat::~TimeZoneFormat()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">int32_t icu::TimeZoneFormat::parseOffsetISO8601(const UnicodeString&amp;, ParsePosition&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">int32_t icu::TimeZoneFormat::parseOffsetLocalizedGMT(const UnicodeString&amp;, ParsePosition&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">int32_t icu::TimeZoneFormat::parseOffsetRFC822(const UnicodeString&amp;, ParsePosition&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto"><tt>static</tt> TimeZoneFormat* icu::TimeZoneFormat::createInstance(const Locale&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto"><tt>static</tt> UClassID icu::TimeZoneFormat::getStaticClassID()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::adoptTimeZoneNames(TimeZoneNames*)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setGMTOffsetDigits(const UnicodeString&amp;, UErrorCode&amp;)</td><td class=""></td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType, const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setGMTPattern(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setGMTZeroFormat(const UnicodeString&amp;, UErrorCode&amp;)</td><td class=""></td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setTimeZoneNames(const TimeZoneNames&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">MatchInfoCollection* icu::TimeZoneNames::find(const UnicodeString&amp;, int32_t, uint32_t, UErrorCode&amp;)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">StringEnumeration* icu::TimeZoneNames::getAvailableMetaZoneIDs(UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">StringEnumeration* icu::TimeZoneNames::getAvailableMetaZoneIDs(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">TimeZoneNames* icu::TimeZoneNames::clone()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">UBool icu::TimeZoneNames::MatchInfoCollection::getMetaZoneIDAt(int32_t, UnicodeString&amp;)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">UBool icu::TimeZoneNames::MatchInfoCollection::getTimeZoneIDAt(int32_t, UnicodeString&amp;)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">UBool icu::TimeZoneNames::operator!=(const TimeZoneNames&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">UBool icu::TimeZoneNames::operator==(const TimeZoneNames&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">UTimeZoneNameType icu::TimeZoneNames::MatchInfoCollection::getNameTypeAt(int32_t)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneNames::getDisplayName(const UnicodeString&amp;, UTimeZoneNameType, UDate, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneNames::getExemplarLocationName(const UnicodeString&amp;, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneNames::getMetaZoneDisplayName(const UnicodeString&amp;, UTimeZoneNameType, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneNames::getMetaZoneID(const UnicodeString&amp;, UDate, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneNames::getReferenceZoneID(const UnicodeString&amp;, const char*, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">UnicodeString&amp; icu::TimeZoneNames::getTimeZoneDisplayName(const UnicodeString&amp;, UTimeZoneNameType, UnicodeString&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_LONG_DAYLIGHT</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_LONG_GENERIC</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_LONG_STANDARD</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_SHORT_DAYLIGHT</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_SHORT_GENERIC</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_SHORT_STANDARD</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto"><tt>enum</tt> UTimeZoneNameType::UTZNM_UNKNOWN</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">icu::TimeZoneNames::MatchInfoCollection::MatchInfoCollection()</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">icu::TimeZoneNames::MatchInfoCollection::~MatchInfoCollection()</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">icu::TimeZoneNames::~TimeZoneNames()</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">int32_t icu::TimeZoneNames::MatchInfoCollection::getMatchLengthAt(int32_t)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">int32_t icu::TimeZoneNames::MatchInfoCollection::size()</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto"><tt>static</tt> TimeZoneNames* icu::TimeZoneNames::createInstance(const Locale&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">void icu::TimeZoneNames::MatchInfoCollection::addMetaZone(UTimeZoneNameType, int32_t, const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">void icu::TimeZoneNames::MatchInfoCollection::addZone(UTimeZoneNameType, int32_t, const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">Internal</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_LIMIT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.6</td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_START</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.6</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_SCRIPT_EXTENSIONS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.6</td>
-</tr>
-<tr class="row0">
-<td class="file">ucnv.h</td><td class="proto"><tt>enum</tt> UConverterType::UCNV_COMPOUND_TEXT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.8</td>
-</tr>
-<tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_HIRAGANA_QUATERNARY_MODE</td><td class="stabchange">Stable<br>2.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_NUMERIC_COLLATION</td><td class="stabchange">Stable<br>2.0</td><td>Stable<br>
-<span class="verchange"><span>2.8</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uconfig.h</td><td class="proto"><tt>#define</tt> UCONFIG_FORMAT_FASTPATHS_49</td><td class=""></td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_STANDALONE_MONTH</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_GENERIC_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_MINUTE_GENERIC_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_MINUTE_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR_TZ</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_STANDALONE_MONTH</td><td class="stabchange">Stable<br>4.0</td><td>Deprecated<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatStyle::UDAT_IGNORE</td><td class="stabchange">Stable<br>2.6</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> U_STRING_CASE_MAPPER_DEFINED</td><td class=""></td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ustring.h</td><td class="proto"><tt>#define</tt> UBRK_TYPEDEF_UBREAK_ITERATOR</td><td class="stabchange">Stable<br>2.1</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="promoted"></a>
-<h2>Promoted to stable in 50</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>49</th><th>50</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">CollationKey&amp; icu::Collator::getCollationKey(const UChar*, int32_t, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">coll.h</td><td class="proto">CollationKey&amp; icu::Collator::getCollationKey(const UnicodeString&amp;, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">uint32_t icu::Collator::setVariableTop(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">coll.h</td><td class="proto">void icu::Collator::setVariableTop(uint32_t, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">UBool icu::CollationKey::isBogus()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">UBool icu::CollationKey::operator!=(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">UBool icu::CollationKey::operator==(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">UClassID icu::CollationKey::getDynamicClassID()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.2</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">UCollationResult icu::CollationKey::compareTo(const CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.6</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">const CollationKey&amp; icu::CollationKey::operator=(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">const uint8_t* icu::CollationKey::getByteArray(int32_t&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::CollationKey()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::CollationKey(const CollationKey&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::CollationKey(const uint8_t*, int32_t)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto">icu::CollationKey::~CollationKey()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">sortkey.h</td><td class="proto">int32_t icu::CollationKey::hashCode()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">sortkey.h</td><td class="proto"><tt>static</tt> UClassID icu::CollationKey::getStaticClassID()</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.2</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">CollationKey&amp; icu::RuleBasedCollator::getCollationKey(const UChar*, int32_t, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">CollationKey&amp; icu::RuleBasedCollator::getCollationKey(const UnicodeString&amp;, CollationKey&amp;, UErrorCode&amp;)</td><td class="">Deprecated</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">uint32_t icu::RuleBasedCollator::setVariableTop(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">void icu::RuleBasedCollator::setVariableTop(uint32_t, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_REGIONAL_INDICATOR</td><td class="">None</td><td>Stable<br>
-<span class=""><span>3.4</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_REGIONAL_INDICATOR</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.2</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_LIMIT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.6</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_START</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.6</td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_SCRIPT_EXTENSIONS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.6</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_REGIONAL_INDICATOR</td><td class="">None</td><td>Stable<br>
-<span class=""><span>3.4</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ucnv.h</td><td class="proto"><tt>enum</tt> UConverterType::UCNV_COMPOUND_TEXT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>4.8</td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="added"></a>
-<h2>Added in 50</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>49</th><th>50</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">Locale icu::Collator::getLocale(ULocDataLocaleType, UErrorCode&amp;)</td><td class="">None</td><td>Deprecated<br>
-<span class=""><span>3.0.</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">coll.h</td><td class="proto">uint32_t icu::Collator::setVariableTop(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">coll.h</td><td class="proto">void icu::Collator::setVariableTop(uint32_t, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">DecimalFormat&amp; icu::DecimalFormat::setAttribute(UNumberFormatAttribute, int32_t, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UBool icu::EnumSet&lt; T, minValue, limitValue &gt;::isValidEnum(T)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UBool icu::EnumSet&lt; T, minValue, limitValue &gt;::isValidValue(int32_t)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString&amp; icu::DecimalFormat::format(double, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString&amp; icu::DecimalFormat::format(int32_t, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString&amp; icu::DecimalFormat::format(int64_t, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">const EnumSet&lt;T,minValue,limitValue&gt;&amp; icu::EnumSet&lt; T, minValue, limitValue &gt;::operator=(const EnumSet&lt;,, limitValue &gt;&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">icu::EnumSet&lt; T, minValue, limitValue &gt;::EnumSet()</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">icu::EnumSet&lt; T, minValue, limitValue &gt;::EnumSet(const EnumSet&lt;,, limitValue &gt;&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">icu::EnumSet&lt; T, minValue, limitValue &gt;::~EnumSet()</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">int32_t icu::DecimalFormat::getAttribute(UNumberFormatAttribute, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">int32_t icu::EnumSet&lt; T, minValue, limitValue &gt;::contains(T)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">int32_t icu::EnumSet&lt; T, minValue, limitValue &gt;::get(T)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">uint32_t icu::EnumSet&lt; T, minValue, limitValue &gt;::getAll()</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::EnumSet&lt; T, minValue, limitValue &gt;::add(T)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">void icu::EnumSet&lt; T, minValue, limitValue &gt;::clear()</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::EnumSet&lt; T, minValue, limitValue &gt;::remove(T)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">void icu::EnumSet&lt; T, minValue, limitValue &gt;::set(T, int32_t)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">DigitList* icu::Formattable::getInternalDigitList()</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">gender.h</td><td class="proto">UGender icu::GenderInfo::getListGender(const UGender*, int32_t, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">gender.h</td><td class="proto">icu::GenderInfo::~GenderInfo()</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">gender.h</td><td class="proto"><tt>static</tt> const GenderInfo* icu::GenderInfo::getInstance(const Locale&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">UnicodeString&amp; icu::ListFormatter::format(const UnicodeString items[], int32_t, UnicodeString&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto">icu::ListFormatter::ListFormatter(const ListFormatData&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">icu::ListFormatter::~ListFormatter()</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> void icu::ListFormatter::getFallbackLocale(const Locale&amp;, Locale&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">locdspnm.h</td><td class="proto">UDisplayContext icu::LocaleDisplayNames::getContext(UDisplayContextType)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">locdspnm.h</td><td class="proto"><tt>static</tt> LocaleDisplayNames* icu::LocaleDisplayNames::createInstance(const Locale&amp;, UDisplayContext*, int32_t)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">messagepattern.h</td><td class="proto"><tt>#define</tt> UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">messagepattern.h</td><td class="proto"><tt>enum</tt> UMessagePatternArgType::UMSGPAT_ARG_TYPE_SELECTORDINAL</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString&amp; icu::NumberFormat::format(double, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString&amp; icu::NumberFormat::format(int32_t, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString&amp; icu::NumberFormat::format(int64_t, UnicodeString&amp;, FieldPosition&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_ALLOC_SIZE_ATTR2</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_ALLOC_SIZE_ATTR</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_GCC_MAJOR_MINOR</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_MALLOC_ATTR</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_attribute</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">plurfmt.h</td><td class="proto">icu::PluralFormat::PluralFormat(const Locale&amp;, UPluralType, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">plurfmt.h</td><td class="proto">icu::PluralFormat::PluralFormat(const Locale&amp;, UPluralType, const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">plurfmt.h</td><td class="proto">void icu::PluralFormat::init(const PluralRules*, UPluralType, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">plurrule.h</td><td class="proto"><tt>static</tt> PluralRules* icu::PluralRules::forLocale(const Locale&amp;, UPluralType, UErrorCode&amp;)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">smpdtfmt.h</td><td class="proto">UDisplayContext icu::SimpleDateFormat::getContext(UDisplayContextType, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">smpdtfmt.h</td><td class="proto">void icu::SimpleDateFormat::setContext(UDisplayContext, UErrorCode&amp;)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">Locale icu::RuleBasedCollator::getLocale(ULocDataLocaleType, UErrorCode&amp;)</td><td class="">None</td><td>Deprecated<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tblcoll.h</td><td class="proto">uint32_t icu::RuleBasedCollator::setVariableTop(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tblcoll.h</td><td class="proto">void icu::RuleBasedCollator::setVariableTop(uint32_t, UErrorCode&amp;)</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">tzfmt.h</td><td class="proto">uint32_t icu::TimeZoneFormat::getDefaultParseOptions()</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">tzfmt.h</td><td class="proto">void icu::TimeZoneFormat::setDefaultParseOptions(uint32_t)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ucal.h</td><td class="proto">UBool ucal_getTimeZoneTransitionDate(const UCalendar*, UTimeZoneTransitionType, UDate*, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneTransitionType::UCAL_TZ_TRANSITION_NEXT_INCLUSIVE</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneTransitionType::UCAL_TZ_TRANSITION_NEXT</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneTransitionType::UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneTransitionType::UCAL_TZ_TRANSITION_PREVIOUS</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_REGIONAL_INDICATOR</td><td class="">None</td><td>Stable<br>
-<span class=""><span>3.4</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_REGIONAL_INDICATOR</td><td class="">None</td><td>Stable<br>
-<span class=""><span>2.2</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_REGIONAL_INDICATOR</td><td class="">None</td><td>Stable<br>
-<span class=""><span>3.4</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ucol.h</td><td class="proto">UCollationResult ucol_strcollUTF8(const UCollator*, const char*, int32_t, const char*, int32_t, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_GENERIC_TZ</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_QUARTER</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_SPECIFIC_TZ</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_UTC_TZ</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_ABBR_WEEKDAY</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_GENERIC_TZ</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_HOUR24</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_LOCATION_TZ</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_MINUTE</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_QUARTER</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_SECOND</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_SPECIFIC_TZ</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>#define</tt> UDAT_WEEKDAY</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto">UDisplayContext udat_getContext(UDateFormat*, UDisplayContextType, UErrorCode*)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatStyle::UDAT_PATTERN</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto">void udat_setContext(UDateFormat*, UDisplayContext, UErrorCode*)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_CAPITALIZATION_FOR_STANDALONE</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_CAPITALIZATION_NONE</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_DIALECT_NAMES</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_STANDARD_NAMES</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_CAPITALIZATION</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_DIALECT_HANDLING</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uenum.h</td><td class="proto">UEnumeration* uenum_openCharStringsEnumeration(const char*const strings[], int32_t, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uenum.h</td><td class="proto">UEnumeration* uenum_openUCharStringsEnumeration(const UChar*const strings[], int32_t, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ugender.h</td><td class="proto">UGender ugender_getListGender(const UGenderInfo*, const UGender*, int32_t, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ugender.h</td><td class="proto">const UGenderInfo* ugender_getInstance(const char*, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ugender.h</td><td class="proto"><tt>enum</tt> UGender::UGENDER_FEMALE</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ugender.h</td><td class="proto"><tt>enum</tt> UGender::UGENDER_MALE</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ugender.h</td><td class="proto"><tt>enum</tt> UGender::UGENDER_OTHER</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uldnames.h</td><td class="proto">UDisplayContext uldn_getContext(const ULocaleDisplayNames*, UDisplayContextType, UErrorCode*)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uldnames.h</td><td class="proto">ULocaleDisplayNames* uldn_openForContext(const char*, UDisplayContext*, int32_t, UErrorCode*)</td><td class="">None</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_LIMIT_BOOLEAN_ATTRIBUTE</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_MAX_NONBOOLEAN_ATTRIBUTE</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_NUMERIC_ATTRIBUTE_COUNT</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_PARSE_NO_EXPONENT</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto">UPluralRules* uplrules_openForType(const char*, UPluralType, UErrorCode*)</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_CARDINAL</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_COUNT</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_ORDINAL</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_COUNT_TRAIL_BYTES_UNSAFE</td><td class="">None</td><td>Internal<br>
-<span class=""></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UCOL_STRCOLLUTF8</td><td class="">None</td><td>Draft<br>
-<span class=""><span>50</span></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="other"></a>
-<h2>Other existing drafts in 50</h2>
-<div class="other">
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>49</th><th>50</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">brkiter.h</td><td class="proto">BreakIterator&amp; icu::BreakIterator::refreshInputText(UText*, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">calendar.h</td><td class="proto">UCalendarWallTimeOption icu::Calendar::getRepeatedWallTimeOption()</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">calendar.h</td><td class="proto">UCalendarWallTimeOption icu::Calendar::getSkippedWallTimeOption()</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">calendar.h</td><td class="proto">const char* icu::Calendar::getType()</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">calendar.h</td><td class="proto">void icu::Calendar::setRepeatedWallTimeOption(UCalendarWallTimeOption)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">calendar.h</td><td class="proto">void icu::Calendar::setSkippedWallTimeOption(UCalendarWallTimeOption)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">CurrencyAmount* icu::DecimalFormat::parseCurrency(const UnicodeString&amp;, ParsePosition&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">gregocal.h</td><td class="proto">const char* icu::GregorianCalendar::getType()</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">icudataver.h</td><td class="proto"><tt>#define</tt> U_ICU_DATA_KEY</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">icudataver.h</td><td class="proto"><tt>#define</tt> U_ICU_VERSION_BUNDLE</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">icudataver.h</td><td class="proto">void u_getDataVersion(UVersionInfo, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::setKeywordValue(const char*, const char*, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">normalizer2.h</td><td class="proto">UBool icu::FilteredNormalizer2::getRawDecomposition(UChar32, UnicodeString&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">normalizer2.h</td><td class="proto">UBool icu::Normalizer2::getRawDecomposition(UChar32, UnicodeString&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">normalizer2.h</td><td class="proto">UChar32 icu::FilteredNormalizer2::composePair(UChar32, UChar32)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">normalizer2.h</td><td class="proto">UChar32 icu::Normalizer2::composePair(UChar32, UChar32)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">normalizer2.h</td><td class="proto"><tt>static</tt> const Normalizer2* icu::Normalizer2::getNFCInstance(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">normalizer2.h</td><td class="proto"><tt>static</tt> const Normalizer2* icu::Normalizer2::getNFDInstance(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">normalizer2.h</td><td class="proto"><tt>static</tt> const Normalizer2* icu::Normalizer2::getNFKCCasefoldInstance(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">normalizer2.h</td><td class="proto"><tt>static</tt> const Normalizer2* icu::Normalizer2::getNFKCInstance(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">normalizer2.h</td><td class="proto"><tt>static</tt> const Normalizer2* icu::Normalizer2::getNFKDInstance(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">normalizer2.h</td><td class="proto">uint8_t icu::FilteredNormalizer2::getCombiningClass(UChar32)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">normalizer2.h</td><td class="proto">uint8_t icu::Normalizer2::getCombiningClass(UChar32)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">CurrencyAmount* icu::NumberFormat::parseCurrency(const UnicodeString&amp;, ParsePosition&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">numsys.h</td><td class="proto">const char* icu::NumberingSystem::getName()</td><td class="" colspan="2" align="center">Draft<br>4.6</td>
-</tr>
-<tr class="row0">
-<td class="file">rbbi.h</td><td class="proto">RuleBasedBreakIterator&amp; icu::RuleBasedBreakIterator::refreshInputText(UText*, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">rbnf.h</td><td class="proto">void icu::RuleBasedNumberFormat::adoptDecimalFormatSymbols(DecimalFormatSymbols*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">rbnf.h</td><td class="proto">void icu::RuleBasedNumberFormat::setDecimalFormatSymbols(const DecimalFormatSymbols&amp;)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">timezone.h</td><td class="proto"><tt>static</tt> const TimeZone&amp; icu::TimeZone::getUnknown()</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">ubrk.h</td><td class="proto">void ubrk_refreshUText(UBreakIterator*, UText*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarAttribute::UCAL_REPEATED_WALL_TIME</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarAttribute::UCAL_SKIPPED_WALL_TIME</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarWallTimeOption::UCAL_WALLTIME_FIRST</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarWallTimeOption::UCAL_WALLTIME_LAST</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarWallTimeOption::UCAL_WALLTIME_NEXT_VALID</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">uconfig.h</td><td class="proto"><tt>#define</tt> U_NO_DEFAULT_INCLUDE_UTF_HEADERS</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">ucurr.h</td><td class="proto">int32_t ucurr_getNumericCode(const UChar*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_YEAR_NAME_FIELD</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">uidna.h</td><td class="proto"><tt>enum</tt> (anonymous)::UIDNA_CHECK_CONTEXTO</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">uidna.h</td><td class="proto"><tt>enum</tt> (anonymous)::UIDNA_ERROR_CONTEXTO_DIGITS</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">uidna.h</td><td class="proto"><tt>enum</tt> (anonymous)::UIDNA_ERROR_CONTEXTO_PUNCTUATION</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> UNISTR_FROM_CHAR_EXPLICIT</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> UNISTR_FROM_STRING_EXPLICIT</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">unorm2.h</td><td class="proto">UChar32 unorm2_composePair(const UNormalizer2*, UChar32, UChar32)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">unorm2.h</td><td class="proto">const UNormalizer2* unorm2_getNFCInstance(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">unorm2.h</td><td class="proto">const UNormalizer2* unorm2_getNFDInstance(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">unorm2.h</td><td class="proto">const UNormalizer2* unorm2_getNFKCCasefoldInstance(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">unorm2.h</td><td class="proto">const UNormalizer2* unorm2_getNFKCInstance(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">unorm2.h</td><td class="proto">const UNormalizer2* unorm2_getNFKDInstance(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">unorm2.h</td><td class="proto">int32_t unorm2_getRawDecomposition(const UNormalizer2*, UChar32, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">unorm2.h</td><td class="proto">uint8_t unorm2_getCombiningClass(const UNormalizer2*, UChar32)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">uregex.h</td><td class="proto"><tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ</td><td class="" colspan="2" align="center">Draft<br>2.4</td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto">UBool uscript_hasScript(UChar32, UScriptCode)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto">int32_t uscript_getScriptExtensions(UChar32, UScriptCode*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">ustdio.h</td><td class="proto">UFILE* u_get_stdout()</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row0">
-<td class="file">ustdio.h</td><td class="proto">int32_t u_printf(const char*,...)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-<tr class="row1">
-<td class="file">ustdio.h</td><td class="proto">int32_t u_printf_u(const UChar*,...)</td><td class="" colspan="2" align="center">Draft<br>49</td>
-</tr>
-</table>
-</div>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="purevirtual"></a>
-<h2>Signature Simplifications</h2>
-<i>This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
-    	all possible variations in "original" form.</i>
-<div class="other">
-<ul>
-<li>
-<b>Collator* icu::Collator::safeClone()</b>
-<br>Collator* icu::Collator::safeClone() const<br>Collator* icu::Collator::safeClone()=0<br>
-</li>
-<li>
-<b>ECollationStrength icu::Collator::getStrength()</b>
-<br>ECollationStrength icu::Collator::getStrength() const<br>ECollationStrength icu::Collator::getStrength() const=0<br>
-</li>
-<li>
-<b>UColAttributeValue icu::Collator::getAttribute(UColAttribute, UErrorCode&amp;)</b>
-<br>UColAttributeValue icu::Collator::getAttribute(UColAttribute, UErrorCode&amp;) const=0<br>UColAttributeValue icu::Collator::getAttribute(UColAttribute, UErrorCode&amp;)=0<br>
-</li>
-</ul>
-</div>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<p>
-<i><font size="-1">Contents generated by StableAPI (r32649M) tool on Wed Oct 17 17:01:17 PDT 2012<br>Copyright (C) 2012, International Business Machines Corporation, All Rights Reserved.</font></i>
-</p>
-</body>
-</html>
diff --git a/src/third_party/mozjs/intl/icu/SVN-INFO b/src/third_party/mozjs/intl/icu/SVN-INFO
deleted file mode 100644
index 857ad0f..0000000
--- a/src/third_party/mozjs/intl/icu/SVN-INFO
+++ /dev/null
@@ -1,10 +0,0 @@
-Path: release-50-1-2
-URL: http://source.icu-project.org/repos/icu/icu/tags/release-50-1-2
-Repository Root: http://source.icu-project.org/repos/icu
-Repository UUID: 251d0590-4201-4cf1-90de-194747b24ca1
-Revision: 33305
-Node Kind: directory
-Last Changed Author: mow
-Last Changed Rev: 33098
-Last Changed Date: 2013-01-30 15:54:50 -0800 (Wed, 30 Jan 2013)
-
diff --git a/src/third_party/mozjs/intl/icu/as_is/bomlist.py b/src/third_party/mozjs/intl/icu/as_is/bomlist.py
deleted file mode 100644
index 22bf38b..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/bomlist.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2011 IBM Corporation and Others. All Rights Reserved.
-#
-# run in icu/
-# will create file icu/as_is/bomlist.txt
-#
-# Usage: 
-#   ( python as_is/bomlist.py > as_is/bomlist.txt ) || rm -f as_is/bomlist.txt
-
-import os
-import codecs
-
-tree = os.walk(".")
-
-nots=0
-notutf8=0
-noprops=0
-utf8=0
-fixed=0
-tfiles=0
-bom=codecs.BOM_UTF8
-
-
-for ent in tree:
-    (path,dirs,files) = ent
-    if(path.find("/.svn") != -1):
-        continue
-    for file in files:
-        tfiles=tfiles+1
-        fp = (path + "/" + file)
-        if not os.path.isfile(fp):
-            continue
-        f = open(fp, 'rb')
-        bytes=f.read(3)
-        if bytes and (bytes == bom):
-            print 'icu/'+fp[2::]
-        f.close()
diff --git a/src/third_party/mozjs/intl/icu/as_is/os390/unpax-icu.sh b/src/third_party/mozjs/intl/icu/as_is/os390/unpax-icu.sh
deleted file mode 100755
index f13d8c1..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os390/unpax-icu.sh
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2001-2010, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-# Authors:
-# Ami Fixler
-# Steven R. Loomis
-# George Rhoten
-#
-# Shell script to unpax ICU and convert the files to an EBCDIC codepage.
-# After extracting to EBCDIC, binary files are re-extracted without the
-# EBCDIC conversion, thus restoring them to original codepage.
-#
-# Set the following variable to the list of binary file suffixes (extensions)
-
-#binary_suffixes='ico ICO bmp BMP jpg JPG gif GIF brk BRK'
-#ICU specific binary files
-binary_suffixes='brk BRK bin BIN res RES cnv CNV dat DAT icu ICU spp SPP xml XML nrm NRM'
-
-usage()
-{
-    echo "Enter archive filename as a parameter: $0 icu-archive.tar"
-}
-# first make sure we at least one arg and it's a file we can read
-if [ $# -eq 0 ]; then
-    usage
-    exit
-fi
-tar_file=$1
-if [ ! -r $tar_file ]; then
-    echo "$tar_file does not exist or cannot be read."
-    usage
-    exit
-fi
-
-echo ""
-echo "Extracting from $tar_file ..."
-echo ""
-# extract files while converting them to EBCDIC
-pax -rvf $tar_file -o to=IBM-1047,from=ISO8859-1 -o setfiletag
-
-echo ""
-echo "Determining binary files ..."
-echo ""
-
-# When building in ASCII mode, text files are converted as ASCII
-if [ "${ICU_ENABLE_ASCII_STRINGS}" -eq 1 ]; then
-    binary_suffixes="$binary_suffixes txt TXT ucm UCM"
-else
-	for file in `find ./icu \( -name \*.txt -print \) | sed -e 's/^\.\///'`; do
-		bom8=`head -c 3 $file|\
-			od -t x1|\
-			head -n 1|\
-			sed 's/  */ /g'|\
-			cut -f2-4 -d ' '|\
-			tr 'A-Z' 'a-z'`;
-		#Find a converted UTF-8 BOM
-		if [ "$bom8" = "57 8b ab" ]
-		then
-			binary_files="$binary_files $file";
-		fi
-	done
-fi
-
-for i in $(pax -f $tar_file 2>/dev/null)
-do
-	case $i in
-	*/) ;;		# then this entry is a directory
-	*.*)		# then this entry has a dot in the filename
-		for j in $binary_suffixes
-		do
-			# We substitute the suffix more than once
-			# to handle files like NormalizationTest-3.2.0.txt
-			suf=${i#*.*}
-			suf=${suf#*.*}
-			suf=${suf#*.*}
-			if [ "$suf" = "$j" ]
-			then
-				binary_files="$binary_files $i"
-				break
-			fi
-		done
-		;;
-	*) ;;		# then this entry does not have a dot in it
-    esac
-done
-
-# now see if a re-extract of binary files is necessary
-if [ ${#binary_files} -eq 0 ]; then
-    echo ""
-    echo "There are no binary files to restore."
-else
-    echo "Restoring binary files ..."
-    echo ""
-    rm $binary_files
-    pax -rvf $tar_file $binary_files
-    # Tag the files as binary for proper interaction with the _BPXK_AUTOCVT
-    # environment setting
-    chtag -b $binary_files
-fi
-echo ""
-echo "$0 has completed extracting ICU from $tar_file."
diff --git a/src/third_party/mozjs/intl/icu/as_is/os400/bldiculd.sh b/src/third_party/mozjs/intl/icu/as_is/os400/bldiculd.sh
deleted file mode 100755
index 710b6ff..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os400/bldiculd.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-#  /* Copyright (C) 2011-2012 IBM Corporation and Others. All Rights Reserved */
-icc -o iculd iculd.c
-icc -o cxxfilt cxxfilt.cpp
-
-
diff --git a/src/third_party/mozjs/intl/icu/as_is/os400/convertConfigure.sed b/src/third_party/mozjs/intl/icu/as_is/os400/convertConfigure.sed
deleted file mode 100644
index 731aa1d..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os400/convertConfigure.sed
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (C) 2006-2011, International Business Machines Corporation
-# and others.  All Rights Reserved.
-#
-# Use "test -x" instead of "test -f" most of the time.
-# due to how executables are created in a different file system.
-s/as_executable_p="test -f"/as_executable_p="test -x"/g
-s/test -f "$ac_file"/test -x "$ac_file"/g
-s/test -f $ac_dir\/install-sh/test -x $ac_dir\/install-sh/g
-s/test -f $ac_dir\/install.sh/test -x $ac_dir\/install.sh/g
-s/test -f $ac_dir\/shtool/test -x $ac_dir\/shtool/g
-# Use the more efficient del instead of rm command.
-s/rm[ ]*-r[ ]*-f/del -f/g
-s/rm[ ]*-f[ ]*-r/del -f/g
-s/rm[ ]*-rf/del -f/g
-s/rm[ ]*-fr/del -f/g
-s/rm[ ]*-f/del -f/g
-##don't clean up some awks for debugging
-#s/[ ]*del -f [^ ]*.awk/#&/
-# Borne shell isn't always available on i5/OS
-s/\/bin\/sh/\/usr\/bin\/qsh/g
-# no diff in qsh the equivalent is cmp
-s/ diff / cmp -s /g
-## srl
-# trouble w/ redirects.
-s% >&$3%%g
-s% >&$4% >$4%g
-s%^ac_cr=%# AWK reads ASCII, not EBCDIC\
-touch -C 819 $tmp/defines.awk $tmp/subs.awk $tmp/subs1.awk conf$$subs.awk\
-\
-&%
-##OBSOLETE
-#(REPLACED BY CPP in runConfigureICU) Use -c qpponly instead of -E to enable the preprocessor on the compiler
-#s/\$CC -E/\$CC -c -qpponly/g
diff --git a/src/third_party/mozjs/intl/icu/as_is/os400/cxxfilt.cpp b/src/third_party/mozjs/intl/icu/as_is/os400/cxxfilt.cpp
deleted file mode 100644
index 4cf49b7..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os400/cxxfilt.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 2012 IBM Corporation and Others. All Rights Reserved */
-
-#include <stdio.h>
-#include <demangle.h>
-
-void showSym(char *str) {
-  char *rest;
-  struct Name *name = Demangle(str, rest); // "f__1XFi"
-
-  printf("# '%s'\n", str);
-  if(*rest) printf("\trest: '%s'\n", rest);
-  if(name->Kind() == MemberFunction) {
-    //((MemberFunctionName *) name)->Scope()->Text() is "X"
-    //((MemberFunctionName *) name)->RootName() is "f"
-    //((MemberFunctionName *) name)->Text() is "X::f(int)"
-    printf("\t=> %s\n", ((MemberFunctionName *) name)->Text());
-  } else {
-    printf("\t(not MemberFunction)\n");
-  }
-}
-
-
-
-
-
-int main(int argc, /*const*/ char *argv[]) {
-  if(argc>1) {
-    for(int i=1;i<argc;i++) {
-       showSym(argv[i]);
-    }
-  } else {
-    printf("Usage: %s <symbol> ...\n", argv[0]);
-  }
-
-
-
-}
diff --git a/src/third_party/mozjs/intl/icu/as_is/os400/fixup-icu.sh b/src/third_party/mozjs/intl/icu/as_is/os400/fixup-icu.sh
deleted file mode 100755
index 092c748..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os400/fixup-icu.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/qsh
-#   Copyright (C) 2000-2011, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-# Authors:
-# Ami Fixler
-# Barry Novinger
-# Steven R. Loomis
-# George Rhoten
-# Jason Spieth
-#
-#
-# This script detects if any UTF-8 files were incorrectly converted to EBCDIC, and 
-# converts them back.
-
-if [ -z "$QSH_VERSION" ];
-then
-	QSH=0
-    echo "QSH not detected (QSH_VERSION not set) - just testing."
-else
-	QSH=1
-	#echo "QSH version $QSH_VERSION"
-fi
-export QSH
-
-tar_file=$1
-echo ""
-echo "Determining binary files by BOM ..."
-echo ""
-bin_count=0
-binary_files=""
-# Process BOMs
-   for file in `find ./icu/source/data/unidata \( -name \*.txt -print \)`; do
-    bom8=`od -t x1 -N 3 $file|\
-          head -n 1|\
-          cut -c10-18`;
-    #Find a converted UTF-8 BOM
-    echo "file $file bom /${bom8}/"
-    if [ "$bom8" = "57 8b ab" ]
-    then
-        file="`echo $file | cut -d / -f2-`"
-        echo "converting ${file}"
-        if [ `echo $binary_files | wc -w` -lt 200 ]
-        then
-            bin_count=`expr $bin_count + 1`
-            binary_files="$binary_files $file";
-        else
-            echo "Restoring binary files by BOM ($bin_count)..."
-            rm $binary_files;
-            pax -C 819 -rvf $tar_file $binary_files;
-            echo "Determining binary files by BOM ($bin_count)..."
-            binary_files="$file";
-            bin_count=`expr $bin_count + 1`
-        fi
-    fi
-  done
-    if [ `echo $binary_files | wc -w` -gt 0 ]
-      then
-        echo restoring
-        rm $binary_files
-               pax -C 819 -rvf $tar_file $binary_files
-       fi
-
-
-
diff --git a/src/third_party/mozjs/intl/icu/as_is/os400/iculd.c b/src/third_party/mozjs/intl/icu/as_is/os400/iculd.c
deleted file mode 100644
index 5ff30b5..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os400/iculd.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* Copyright (C) 2011 IBM Corporation and Others. All Rights Reserved */
-
-/**
-   Input:
-       -o makeconv  makeconv.o ucnvstat.o ../../lib/libicuuc48.so -qOPTION='*DUPPROC *DUPVAR*'
-
-CRTPGM PGM(SRLICU/MAKECONV) MODULE(SRLICU/MAKECONV  SRLICU/UCNVSTAT SRLICU/GENMBCS SRLICU/GENCNVEX) BNDSRVPGM(SRLICU/LIBICUUC48 SRLICU/LIBICUTU48 SRLICU/LIBICUIN48) OPTION(*DUPPROC *DUPVAR) REPLACE(*YES) 
-
-Handles  .o ( modules ), .so ( srvpgm ), .a ( bnddir ).
-
-TODO:
-
- - cleanup
- - much better error handling
- - factor common code
- - instead of caring about .o vs .so vs .a, just read the link - if it ends in .srvpgm then treat it as a service program, etc.  
-
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#ifndef TEST_MODE
-#define TEST_MODE 0
-#endif
-
-
-#if !TEST_MODE
-#include <qp0z1170.h>
-#else
-static int Qp0zSystem(const char *cmd) {
-  printf("CL: %s\n", cmd);
-  return 0;
-}
-#endif
-
-static int runcmd(const char *cmd) {
-  int rc;
-  printf("%s\n", cmd);
-  rc = Qp0zSystem(cmd);
-  if(rc==0) {
-    printf("..ok\n");
-    return 0;
-  } else if(rc<0){
-    printf("..Qp0zSystem failed.\n");
-    return 1;
-  } else {
-    printf("..System call failed.\n");
-    return 1;
-  }
-}
-
-int main(int argc, const char *argv[]) {
-  int i;
-
-  char buf[8048];
-  char opt[4100];
-  char objs[4024];
-  char libs[4024];
-  char bnddirs[4024];
-  const char *prog="";
-  const char *progshort=prog;
-  const char *outputdir=getenv("OUTPUTDIR");
-
-  printf("# OUTPUTDIR=%s ",outputdir);
-  for(i=0;i<argc;i++) {
-    printf("%s ", argv[i]);
-  }
-  printf("\n");
-
-  buf[0]=0;
-  opt[0]=0;
-  objs[0]=0;
-  libs[0]=0;
-  bnddirs[0]=0;
-
-  for(i=1;i<argc;i++) {
-    if(argv[i][0]=='-') {
-      switch(argv[i][1]) {
-      case 'O':
-        printf(".. ignoring optimization: %s\n", argv[i]);
-        break;
-      case 'g':
-        printf(".. ignoring debugging: %s\n", argv[i]);
-        break;
-      case 'l':
-        printf(".. ignoring lib: %s\n", argv[i]);
-        break;
-      case 'v':
-        printf(".. already verbose\n");
-        break;
-      case 'o':
-        i++;
-        prog=argv[i];
-        progshort=strrchr(prog,'/');
-        if(!progshort) {
-          progshort=prog;
-        } else {
-          progshort++; /*  / */
-        }
-        break;
-      case 'q':
-        if(!strncmp(argv[i]+2,"OPTION=",7)) {
-          strcat(opt,argv[i]+9);
-        } else {
-          printf("Unknown -q option: %s\n", argv[i]);
-          return 1;
-        }
-        break;
-      default:
-        printf("Unknown option: %s\n", argv[i]);
-        return 1;
-      }
-    } else {
-      int n = strlen(argv[i]);
-      if(argv[i][n-1]=='o' &&
-         argv[i][n-2]=='.') {
-        const char *b = argv[i];
-        char linkbuf[200];
-        char outbuf[100];
-        int nlen = n-2;
-
-        if(nlen >= 10) {
-          nlen = 10;
-        }
-
-        if(readlink(b,linkbuf,200)>0) {
-          /* printf("linkbuf %s for %s\n", linkbuf, b); */
-          /* /qsys.lib/srlicu.lib/currtest.module */
-          char *mend = strrchr(linkbuf,'.');  
-          if(mend) {
-            *mend=0;
-            mend = strrchr(linkbuf,'/');
-            if(mend) {
-              mend++;
-              strcpy(outbuf,mend);
-              b=outbuf;
-              nlen=strlen(b);
-            }
-          }
-        } else {
-          /* perror("readlink");
-             puts(b); */
-        }
-
-        strcat(objs,outputdir);
-        strcat(objs,"/");
-        strncat(objs,b,nlen);
-        strcat(objs, " ");
-      } else if(argv[i][n-1]=='a' &&
-         argv[i][n-2]=='.') {
-        const char *b = argv[i];
-        char linkbuf[200];
-        char outbuf[100];
-        int nlen = n-2;
-
-        if(nlen >= 10) {
-          nlen = 10;
-        }
-
-        if(readlink(b,linkbuf,200)>0) {
-          /* printf("linkbuf %s for %s\n", linkbuf, b); */
-          /* /qsys.lib/srlicu.lib/currtest.srvpgm */
-          char *mend = strrchr(linkbuf,'.');  
-          if(mend) {
-            *mend=0;
-            mend = strrchr(linkbuf,'/');
-            if(mend) {
-              mend++;
-              strcpy(outbuf,mend);
-              b=outbuf;
-              nlen=strlen(b);
-            }
-          }
-        } else {
-          /* perror("readlink");
-             puts(b); */
-        }
-
-        strcat(bnddirs,outputdir);
-        strcat(bnddirs,"/");
-        strncat(bnddirs,b,nlen);
-        strcat(bnddirs, " ");
-      } else if(argv[i][n-1]=='o' &&
-         argv[i][n-2]=='s' &&
-         argv[i][n-3]=='.') {
-        const char *p = strrchr(argv[i],'/');
-        if(!p) {
-          printf("Can't find trailing slash in %s\n", argv[i]);
-          return 1;
-        }
-        strcat(libs,outputdir);
-        strcat(libs,"/");
-        strncat(libs,p+1,strlen(p)-4);
-        strcat(libs," ");
-      } else {
-        printf("Unknown input file: %s\n", argv[i]);
-        return 1;
-      }
-    }
-  }
-
-  if(prog[0]==0) {
-    printf("no program (-o) option specified.\n");
-    return 1;
-  }
-
-  sprintf(buf,"CRTPGM PGM(%s/%s) MODULE(%s) BNDSRVPGM(%s) BNDDIR(%s) OPTION(%s) REPLACE(*YES)",
-          outputdir,progshort,
-
-          objs,
-
-          libs,
-
-          bnddirs,
-
-          opt);
-
-
-  if(runcmd(buf)) {
-    return 1;
-  }
-
-  /* -- OK */
-  {
-    char path1[1000];
-    sprintf(path1,"/qsys.lib/%s.lib/%s.pgm",
-            outputdir,
-            progshort);
-    printf("# ln -s %s %s\n", path1, prog);
-    if((!TEST_MODE) && symlink(path1,prog)) {
-      perror("symlink");
-      if(errno!=EEXIST) { /* ignored */
-        return 1;
-      }
-    }
-  }
-  return 0;
-}
-
-
-
-
-
-
-
-
diff --git a/src/third_party/mozjs/intl/icu/as_is/os400/unpax-icu.sh b/src/third_party/mozjs/intl/icu/as_is/os400/unpax-icu.sh
deleted file mode 100755
index 16e1cba..0000000
--- a/src/third_party/mozjs/intl/icu/as_is/os400/unpax-icu.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/qsh
-#   Copyright (C) 2000-2011, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-# Authors:
-# Ami Fixler
-# Barry Novinger
-# Steven R. Loomis
-# George Rhoten
-# Jason Spieth
-#
-# Shell script to unpax ICU and convert the files to an EBCDIC codepage.
-# After extracting to EBCDIC, binary files are re-extracted without the
-# EBCDIC conversion, thus restoring them to original codepage.
-
-if [ -z "$QSH_VERSION" ];
-then
-	QSH=0
-    echo "QSH not detected (QSH_VERSION not set) - just testing."
-else
-	QSH=1
-	#echo "QSH version $QSH_VERSION"
-fi
-export QSH
-
-# Set the following variable to the list of binary file suffixes (extensions)
-
-
-#****************************************************************************
-#binary_suffixes='ico ICO bmp BMP jpg JPG gif GIF brk BRK'
-#ICU specific binary files
-#****************************************************************************
-binary_suffixes='brk BRK bin BIN res RES cnv CNV dat DAT icu ICU spp SPP xml XML nrm NRM'
-data_files='icu/source/data/brkitr/* icu/source/data/locales/* icu/source/data/coll/* icu/source/data/rbnf/* icu/source/data/mappings/* icu/source/data/misc/* icu/source/data/translit/* icu/source/data/unidata/* icu/source/test/testdata/*'
-
-#****************************************************************************
-# Function:     usage
-# Description:  Prints out text that describes how to call this script
-# Input:        None
-# Output:       None
-#****************************************************************************
-usage()
-{
-  echo "Enter archive filename as a parameter: $0 icu-archive.tar"
-}
-
-#****************************************************************************
-# first make sure we at least one arg and it's a file we can read
-#****************************************************************************
-
-# check for no arguments
-if [ $# -eq 0 ]; then
-  usage
-  exit
-fi
-
-# tar file is argument 1
-tar_file=$1
-
-# check that the file is valid
-if [ ! -r $tar_file ]; then
-  echo "$tar_file does not exist or cannot be read."
-  usage
-  exit
-fi
-
-# treat all data files as ebcdic
-ebcdic_data=$data_files
-
-#****************************************************************************
-# Extract files.  We do this in two passes.  One pass for 819 files and a
-# second pass for 37 files
-#****************************************************************************
-echo ""
-echo "Extracting from $tar_file ..."
-echo ""
-
-# extract everything as iso-8859-1 except these directories
-pax -C 819 -rcvf $tar_file $ebcdic_data
-
-# extract files while converting them to EBCDIC
-echo ""
-echo "Extracting files which must be in ibm-37 ..."
-echo ""
-pax -C 37 -rvf $tar_file $ebcdic_data
-
-#****************************************************************************
-# For files we have restored as CCSID 37, check the BOM to see if they    
-# should be processed as 819.  Also handle files with special paths. Files
-# that match will be added to binary files lists.  The lists will in turn
-# be processed to restore files as 819.
-#****************************************************************************
-echo ""
-echo "Determining binary files by BOM ..."
-echo ""
-bin_count=0
-# Process BOMs
-if [ -f icu/as_is/bomlist.txt ];
-then
-    echo "Using icu/as_is/bomlist.txt"
-    pax -C 819 -rvf $tar_file `cat icu/as_is/bomlist.txt`
-else 
-   for file in `find ./icu \( -name \*.txt -print \)`; do
-    bom8=`head -n 1 $file|\
-          od -t x1|\
-          head -n 1|\
-          sed 's/  */ /g'|\
-          cut -f2-4 -d ' '|\
-          tr 'A-Z' 'a-z'`;
-    #Find a converted UTF-8 BOM
-    if [ "$bom8" = "057 08b 0ab" -o "$bom8" = "57 8b ab" ]
-    then
-        file="`echo $file | cut -d / -f2-`"
-
-        if [ `echo $binary_files | wc -w` -lt 200 ]
-        then
-            bin_count=`expr $bin_count + 1`
-            binary_files="$binary_files $file";
-        else
-            echo "Restoring binary files by BOM ($bin_count)..."
-            rm $binary_files;
-            pax -C 819 -rvf $tar_file $binary_files;
-            echo "Determining binary files by BOM ($bin_count)..."
-            binary_files="$file";
-            bin_count=`expr $bin_count + 1`
-        fi
-    fi
-  done
-  # now see if a re-extract of binary files is necessary
-  if [ `echo $binary_files | wc -w` -gt 0 ]
-  then
-      echo "Restoring binary files ($bin_count) ..."
-      rm $binary_files
-      pax -C 819 -rvf $tar_file $binary_files
-  fi
-fi
-
-echo "# Processing special paths."
-# Process special paths
-more_bin_files=$(find icu -type f \( -name '*.zzz' `echo $binary_suffixes | sed -e 's%[a-zA-Z]*%-o -name \*.&%g'` \)  -print)
-echo "Restoring binary files by special paths ($bin_count) ..."
-rm $more_bin_files
-pax -C 819 -rvf $tar_file $more_bin_files
-
-#****************************************************************************
-# Generate and run the configure script
-#****************************************************************************
-
-echo ""
-echo "Generating qsh compatible configure ..."
-echo ""
-
-sed -f icu/as_is/os400/convertConfigure.sed icu/source/configure > icu/source/configureTemp
-del -f icu/source/configure
-mv icu/source/configureTemp icu/source/configure
-chmod 755 icu/source/configure
-
-echo ""
-echo "$0 has completed extracting ICU from $tar_file - $bin_count binary files extracted."
-
diff --git a/src/third_party/mozjs/intl/icu/icu4c.css b/src/third_party/mozjs/intl/icu/icu4c.css
deleted file mode 100644
index b43f5fa..0000000
--- a/src/third_party/mozjs/intl/icu/icu4c.css
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- * Default CSS style sheet for the ICU4C Open Source readme
- * Copyright (C) 2005-2011, International Business Machines
- * Corporation and others.  All Rights Reserved.
- */
-
-/* Global styles */
-
-body,p,li,ol,ul,th,td {
-	font-size: 1em;
-	font-family: "Arial", "Helvetica", sans-serif;
-}
-
-body {
-	margin: 1em;
-}
-
-body.draft {
-	background-image: url(images/draftbg.png);
-}
-
-.mainbody {
-	padding: 1em;
-}
-
-/*
- * Customize the headers to have less space around them than usual
- */
-
-h1 {
-	margin-bottom: .5em;
-	margin-top: .5em;
-	padding-bottom: .5em;
-	padding-top: .5em;
-	font-weight: 700;
-	font-size: 20pt;
-	font-family: Georgia, "Times New Roman", Times, serif;
-	border-width: 2px;
-	border-style: solid;
-	text-align: center;
-	width: 100%;
-	font-size: 200%;
-	font-weight: bold;
-}
-
-h2 {
-	border-top: 2px solid #22d;
-	border-left: 2px solid #22d;
-	margin-bottom: 0.5em;
-	padding-left: 4px;
-	margin-top: 12pt;
-	font-weight: 700;
-	font-size: 2em;
-	font-family: Georgia, "Times New Roman", Times, serif;
-	background-color: #eee;
-	page-break-before: always;
-}
-
-h2 a {
-	text-decoration: none;
-	color: black;
-}
-
-h2 a:hover {
-	color: blue;
-	text-decoration: underline;
-}
-
-h3 {
-	border-top: 1px solid gray;
-	color: #1e1c46;
-	margin-bottom: 0pt;
-	margin-top: 12pt;
-	padding-left: 0;
-	margin-left: 1em;
-	margin-top: 0.2em;
-	padding-bottom: 0.4em;
-	font-size: 1.5em;
-	font-family: Georgia, "Times New Roman", Times, serif;
-}
-
-h3 a {
-	text-decoration: none;
-	color: black;
-}
-
-h3 a:hover {
-	color: blue;
-	text-decoration: underline;
-}
-
-h4 {
-	margin-left: 1.5em;
-	margin-bottom: 0pt;
-	margin-top: 12pt;
-	font-size: 1.0em;
-	font-weight: bolder;
-	font-family: Georgia, "Times New Roman", Times, serif;
-}
-
-h4 a {
-	text-decoration: none;
-	color: black;
-}
-
-h4 a:hover {
-	color: blue;
-	text-decoration: underline;
-}
-
-h5, h6 {
-	margin-left: 1.8em;
-	margin-bottom: 0pt;
-	margin-top: 12pt;
-	padding-left: 0.75em;
-	font-size: x-small;
-	font-family: Georgia, "Times New Roman", Times, serif;
-}
-
-p,pre,table,ul,ol,dl {
-	margin-left: 2em;
-}
-
-/*
- * Navigation sidebar on the left hand of most pages
- */
-
-td.sidebar1 {
-	background-color: #99CCFF;
-	font-weight: 700;
-	margin-top: 0px;
-	margin-bottom: 0px;
-	padding-top: 1em;
-	padding-left: 0.2em;
-	white-space: nowrap;
-}
-
-td.sidebar2 {
-	background-color: #99CCFF;
-	margin-top: 0px;
-	margin-bottom: 0px;
-	margin-left: 0px;
-	padding-top: 1px;
-	padding-bottom: 1px;
-	padding-left: 1px;
-	padding-right: 0.5em;
-	white-space: nowrap;
-	text-decoration: none;
-	display: block;
-}
-
-td.sidebar2:hover {
-	background-color: #EEEEFF;
-	padding-top: 1px;
-	padding-bottom: 1px;
-	padding-left: 1px;
-	padding-right: 0.5em;
-}
-
-a.sidebar2 {
-	text-decoration: none;
-	display: block;
-	width: 100%;
-}
-
-a.sidebar2:link {
-	color: #000099;
-	display: block;
-}
-
-a.sidebar2:hover {
-	background-color: #EEEEFF;
-	display: block;
-}
-
-.underlinehover:hover {
-	background-color: #EEEEFF;
-	text-decoration: underline;
-}
-
-/* This is the faded header at the top */
-
-td.fadedtop {
-	background-color: #006699;
-	background-image: url(http://www.icu-project.org/images/gr100.gif);
-}
-
-/* Related site on the left */
-
-p.relatedsite {
-	color: White;
-	font-weight: 700;
-	font-size: 10pt;
-	margin-top: 1em;
-	margin-bottom: 0;
-	padding-left: 0.2em;
-	white-space: nowrap;
-}
-
-/* Related site on the left */
-
-p.sidebar3 {
-	margin-top: 0.75em;
-	margin-bottom: 0;
-	padding-left: 0.8em;
-}
-
-a.sidebar3 {
-	font-size: 0.9em;
-	text-decoration: none;
-}
-
-a.sidebar3:link {
-	text-decoration: none;
-	color: White;
-}
-
-a.sidebar3:hover {
-	text-decoration: underline;
-}
-
-/* FAQ */
-
-li.faq_contents {
-	font-weight: 500;
-}
-
-p.faq_q {
-	font-weight: 700;
-	margin-bottom: 0px;
-}
-
-p.faq_a {
-	margin-top: 0px;
-}
-
-/* News items */
-
-table.newsItem {
-	padding-left: 1em;
-	padding-right: 1em;
-	border-width: medium;
-}
-
-th.newsItem {
-	background-color: #666666;
-	color: White;
-}
-
-td.newsItem {
-	background-color: #CCCCCC;
-}
-
-td.release-line,th.release-line {
-	padding-left: 0.5em;
-	padding-right: 0.5em;
-	white-space: nowrap;
-	border: 1px;
-}
-
-.note {
-	font-style: italic;
-	font-size: small;
-	margin-left: 1em;
-}
-
-samp {
-	margin-left: 1em;
-	margin-right: 2em;
-	border-style: groove;
-	padding: 1em;
-	display: block;
-	background-color: #EEEEEE
-}
-
-table.rtable caption {
-	margin-left: 2px;
-	margin-right: 2px;
-	padding: 3px;
-	font-weight: bold;
-	background-color: #dee2ff;
-	text-align: left;
-}
-
-table.rtable tr th {
-	background-color: #dee2ff;
-	text-align: left;
-}
-
-table.rtable tr td {
-	background-color: #c0c0fd;
-	padding: 3px;
-}
-
-table.rtable tr.broken td {
-	background-color: #fbb;
-	border: 1px dashed gray;
-	padding: 3px;
-	font-weight: bold;
-}
-
-table.rtable tr.rarely td {
-	background-color: #efe9c2;
-	padding: 3px;
-	font-style: italic;
-}
-
-/*  APIChangeReport specific things */
-
-.row0 {
-	background-color: white;
-}
-
-.row1 {
-	background-color: #dfd;
-}
-
-.verchange {
-	color: red;
-	font-weight: bold;
-	font-size: large;
-}
-
-.stabchange {
-	color: red;
-	font-size: large;
-}
-
-.bigwarn {
-	color: red;
-	background-color: white;
-	font-size: large;
-	margin: 0.5 em;
-}
-
-
-td.bornstable {
-	
-}
-td.bornstable .bigwarn {
-	font-size: small;
-	white-space: nowrap;
-}
-
-table.genTable {
-	border-collapse: collapse;
-	border: 1px solid black;
-}
-
-/* 'everything inc version */
-
-table.gentable td {
-	border: 1px solid gray;
-	padding: 0.25em;
-	font-size: small;
-}
-
-/* not version */
-
-table.genTable td.file,
-table.genTable td.proto {
-	border: none;
-	font-size: medium;
-}
-
-table.genTable td.file {
-	font-family: monospace;
-	font-weight: bold;
-}
-
-div.other .row0 {
-	background-color: white;
-}
-
-div.other .row1 {
-	background-color: #ddf;
-}
-
-table.docTable {
-	border-collapse: collapse;
-	border: 1px solid black;
-}
-
-/* 'everything inc version */
-
-table.docTable td,
-table.docTable th {
-	border: 1px solid gray;
-	padding: 0.25em;
-	font-size: small;
-}
-
-/* not version */
-
-table.docTable td.file,
-table.docTable td.proto {
-	border: none;
-	font-size: medium;
-}
-
-table.docTable td.file {
-	font-family: monospace;
-	font-weight: bold;
-}
-
-abbr {
-	border-bottom: 1px dashed #0B0;
-}
-
-h2.TOC {
-	page-break-before: auto;
-}
-
-body.readme {
-	
-}
-
-caption {
-	font-weight: bold;
-	text-align: left
-}
-
-div.indent {
-	margin-left: 2em
-}
-
-ul.TOC {
-	list-style-type: none;
-	padding-left: 1em;
-	font-size: larger;
-}
-
-ul.TOC li a {
-	font-weight: bold;
-}
-
-ul.TOC li ul li a {
-	font-weight: normal;
-	list-style-type: none;
-	font-size: small;
-}
-
-ul.TOC li ul {
-	margin-left: 0;
-	padding-left: 2em;
-	font-weight: normal;
-	list-style-type: none;
-}
-
-pre.samp,samp {
-	margin-left: 1em;
-	border-style: groove;
-	padding: 1em;
-	display: block;
-	background-color: #EEEEEE
-}
-
-td.proto {
-	font-size: smaller;
-}
-
-
-
-@media print {
-	div#toc {
-		display: none;
-	}
-	
-	table,tr,td,div {
-		page-break-inside: auto;
-	}
-}
diff --git a/src/third_party/mozjs/intl/icu/license.html b/src/third_party/mozjs/intl/icu/license.html
deleted file mode 100644
index 9f4e052..0000000
--- a/src/third_party/mozjs/intl/icu/license.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
-<title>ICU License - ICU 1.8.1 and later</title>
-</head>
-
-<body BGCOLOR="#ffffff">
-<h2>ICU License - ICU 1.8.1 and later</h2>
-
-<p>COPYRIGHT AND PERMISSION NOTICE</p>
-
-<p>
-Copyright (c) 1995-2012 International Business Machines Corporation and others
-</p>
-<p>
-All rights reserved.
-</p>
-<p>
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, and/or sell
-copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies
-of the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-</p>
-<p>
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
-THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM,
-OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
-RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
-USE OR PERFORMANCE OF THIS SOFTWARE.
-</p>
-<p>
-Except as contained in this notice, the name of a copyright holder shall not be
-used in advertising or otherwise to promote the sale, use or other dealings in
-this Software without prior written authorization of the copyright holder.
-</p>
-
-<hr style="color:gray;background-color:gray">
-<p><small>
-All trademarks and registered trademarks mentioned herein are the property of their respective owners.
-</small></p>
-
-<hr style="height:3px;color:black;background-color:black">
-
-<h2>Third-Party Software Licenses</h2>
-This section contains third-party software notices and/or additional terms for licensed
-third-party software components included within ICU libraries.
-
-<h3>1. Unicode Data Files and Software</h3>
-
-<h3 align="center"><a name="Exhibit1">EXHIBIT 1</a><br>
-UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE</h3>
-<blockquote>
-<p>Unicode Data Files include all data files under the directories 
-<a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>, 
-<a href="http://www.unicode.org/reports/">http://www.unicode.org/reports/</a>, 
-and
-<a title="http://www.unicode.org/cldr/data/" onClick="return top.js.OpenExtLink(window,event,this)" target="_blank" href="http://www.unicode.org/cldr/data/">
-http://www.unicode.org/cldr/data/</a>. Unicode Data Files do not include PDF online code charts under the directory  <a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>. Software includes any source code 
-published in the Unicode Standard or under the directories <a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>,
-<a href="http://www.unicode.org/reports/">http://www.unicode.org/reports/</a>, 
-and
-<a title="http://www.unicode.org/cldr/data/" onClick="return top.js.OpenExtLink(window,event,this)" target="_blank" href="http://www.unicode.org/cldr/data/">
-http://www.unicode.org/cldr/data/</a>.</p>
-
-<p>NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.</p>
-<p>COPYRIGHT AND PERMISSION NOTICE</p>
-
-<p>Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in 
-<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a>.</p>
-
-<p>Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and 
-any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear 
-with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.</p>
-
-<p>THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THE DATA FILES OR SOFTWARE.</p>
-
-<p>Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.</p>
-
-            <hr width="80%">
-
-<p>Unicode and the Unicode logo are trademarks of Unicode, Inc. in the United States and other countries. All third party trademarks referenced herein are the property of their respective owners.</p>
-
-
-</blockquote>
-
-<h3>2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)</h3>
-<pre>
- #    The Google Chrome software developed by Google is licensed under the BSD license. Other software included in this distribution is provided under other licenses, as set forth below.
- #	
- #	The BSD License
- #	http://opensource.org/licenses/bsd-license.php 
- #	Copyright (C) 2006-2008, Google Inc.
- #	
- #	All rights reserved.
- #	
- #	Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- #	
- #	Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- #	Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- #	Neither the name of  Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
- #	 
- #	
- #	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- #	
- #	                                             
- #	The word list in cjdict.txt are generated by combining three word lists listed
- #	below with further processing for compound word breaking. The frequency is generated
- #	with an iterative training against Google web corpora. 
- #	
- #	* Libtabe (Chinese)
- #	  - https://sourceforge.net/project/?group_id=1519
- #	  - Its license terms and conditions are shown below.
- #	
- #	* IPADIC (Japanese)
- #	  - http://chasen.aist-nara.ac.jp/chasen/distribution.html
- #	  - Its license terms and conditions are shown below.
- #	
- #	---------COPYING.libtabe ---- BEGIN--------------------
- #	
- #	/*
- #	 * Copyrighy (c) 1999 TaBE Project.
- #	 * Copyright (c) 1999 Pai-Hsiang Hsiao.
- #	 * All rights reserved.
- #	 *
- #	 * Redistribution and use in source and binary forms, with or without
- #	 * modification, are permitted provided that the following conditions
- #	 * are met:
- #	 *
- #	 * . Redistributions of source code must retain the above copyright
- #	 *   notice, this list of conditions and the following disclaimer.
- #	 * . Redistributions in binary form must reproduce the above copyright
- #	 *   notice, this list of conditions and the following disclaimer in
- #	 *   the documentation and/or other materials provided with the
- #	 *   distribution.
- #	 * . Neither the name of the TaBE Project nor the names of its
- #	 *   contributors may be used to endorse or promote products derived
- #	 *   from this software without specific prior written permission.
- #	 *
- #	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- #	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- #	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- #	 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- #	 * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- #	 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- #	 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- #	 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- #	 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- #	 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- #	 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- #	 * OF THE POSSIBILITY OF SUCH DAMAGE.
- #	 */
- #	
- #	/*
- #	 * Copyright (c) 1999 Computer Systems and Communication Lab,
- #	 *                    Institute of Information Science, Academia Sinica.
- #	 * All rights reserved.
- #	 *
- #	 * Redistribution and use in source and binary forms, with or without
- #	 * modification, are permitted provided that the following conditions
- #	 * are met:
- #	 *
- #	 * . Redistributions of source code must retain the above copyright
- #	 *   notice, this list of conditions and the following disclaimer.
- #	 * . Redistributions in binary form must reproduce the above copyright
- #	 *   notice, this list of conditions and the following disclaimer in
- #	 *   the documentation and/or other materials provided with the
- #	 *   distribution.
- #	 * . Neither the name of the Computer Systems and Communication Lab
- #	 *   nor the names of its contributors may be used to endorse or
- #	 *   promote products derived from this software without specific
- #	 *   prior written permission.
- #	 *
- #	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- #	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- #	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- #	 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- #	 * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- #	 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- #	 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- #	 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- #	 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- #	 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- #	 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- #	 * OF THE POSSIBILITY OF SUCH DAMAGE.
- #	 */
- #	
- #	Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois
- #	c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
- #	
- #	---------------COPYING.libtabe-----END------------------------------------
- #	
- #	
- #	---------------COPYING.ipadic-----BEGIN------------------------------------
- #	
- #	Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
- #	and Technology.  All Rights Reserved.
- #	
- #	Use, reproduction, and distribution of this software is permitted.
- #	Any copy of this software, whether in its original form or modified,
- #	must include both the above copyright notice and the following
- #	paragraphs.
- #	
- #	Nara Institute of Science and Technology (NAIST),
- #	the copyright holders, disclaims all warranties with regard to this
- #	software, including all implied warranties of merchantability and
- #	fitness, in no event shall NAIST be liable for
- #	any special, indirect or consequential damages or any damages
- #	whatsoever resulting from loss of use, data or profits, whether in an
- #	action of contract, negligence or other tortuous action, arising out
- #	of or in connection with the use or performance of this software.
- #	
- #	A large portion of the dictionary entries
- #	originate from ICOT Free Software.  The following conditions for ICOT
- #	Free Software applies to the current dictionary as well.
- #	
- #	Each User may also freely distribute the Program, whether in its
- #	original form or modified, to any third party or parties, PROVIDED
- #	that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
- #	on, or be attached to, the Program, which is distributed substantially
- #	in the same form as set out herein and that such intended
- #	distribution, if actually made, will neither violate or otherwise
- #	contravene any of the laws and regulations of the countries having
- #	jurisdiction over the User or the intended distribution itself.
- #	
- #	NO WARRANTY
- #	
- #	The program was produced on an experimental basis in the course of the
- #	research and development conducted during the project and is provided
- #	to users as so produced on an experimental basis.  Accordingly, the
- #	program is provided without any warranty whatsoever, whether express,
- #	implied, statutory or otherwise.  The term "warranty" used herein
- #	includes, but is not limited to, any warranty of the quality,
- #	performance, merchantability and fitness for a particular purpose of
- #	the program and the nonexistence of any infringement or violation of
- #	any right of any third party.
- #	
- #	Each user of the program will agree and understand, and be deemed to
- #	have agreed and understood, that there is no warranty whatsoever for
- #	the program and, accordingly, the entire risk arising from or
- #	otherwise connected with the program is assumed by the user.
- #	
- #	Therefore, neither ICOT, the copyright holder, or any other
- #	organization that participated in or was otherwise related to the
- #	development of the program and their respective officials, directors,
- #	officers and other employees shall be held liable for any and all
- #	damages, including, without limitation, general, special, incidental
- #	and consequential damages, arising out of or otherwise in connection
- #	with the use or inability to use the program or any product, material
- #	or result produced or otherwise obtained by using the program,
- #	regardless of whether they have been advised of, or otherwise had
- #	knowledge of, the possibility of such damages at any time during the
- #	project or thereafter.  Each user will be deemed to have agreed to the
- #	foregoing by his or her commencement of use of the program.  The term
- #	"use" as used herein includes, but is not limited to, the use,
- #	modification, copying and distribution of the program and the
- #	production of secondary products from the program.
- #	
- #	In the case where the program, whether in its original form or
- #	modified, was distributed or delivered to or received by a user from
- #	any person, organization or entity other than ICOT, unless it makes or
- #	grants independently of ICOT any specific warranty to the user in
- #	writing, such person, organization or entity, will also be exempted
- #	from and not be held liable to the user for any such damages as noted
- #	above as far as the program is concerned.
- #	
- #	---------------COPYING.ipadic-----END------------------------------------
-</pre>
-
-<h3>3. Time Zone Database</h3>
-<p>ICU uses the public domain data and code derived from <a href="http://www.iana.org/time-zones">
-Time Zone Database</a> for its time zone support. The ownership of the TZ database is explained
-in <a href="http://tools.ietf.org/html/rfc6557">BCP 175: Procedure for Maintaining the Time Zone
-Database</a> section 7.<p>
-
-<pre>
-7.  Database Ownership
-
-   The TZ database itself is not an IETF Contribution or an IETF
-   document.  Rather it is a pre-existing and regularly updated work
-   that is in the public domain, and is intended to remain in the public
-   domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do not apply
-   to the TZ Database or contributions that individuals make to it.
-   Should any claims be made and substantiated against the TZ Database,
-   the organization that is providing the IANA Considerations defined in
-   this RFC, under the memorandum of understanding with the IETF,
-   currently ICANN, may act in accordance with all competent court
-   orders.  No ownership claims will be made by ICANN or the IETF Trust
-   on the database or the code.  Any person making a contribution to the
-   database or code waives all rights to future claims in that
-   contribution or in the TZ Database.
-
-</pre>
-
-
-</body>
-</html>
diff --git a/src/third_party/mozjs/intl/icu/packaging/PACKAGES b/src/third_party/mozjs/intl/icu/packaging/PACKAGES
deleted file mode 100644
index 12b3523..0000000
--- a/src/third_party/mozjs/intl/icu/packaging/PACKAGES
+++ /dev/null
@@ -1,159 +0,0 @@
-Copyright (C) 2000-2003, International Business Machines
-Corporation and others.  All Rights Reserved.
-ICU is packaged into a number of small, interdependent packages. This
-file describes what these packages are, what their name should be
-like, and what their contents are. It is useful as a reference and a
-guide when packaging ICU on a new system.
-
-+ List of ICU packages.
-
-ICU is distributed as the following packages:
-
-- ICU libraries. This package contains the runtime libraries needed by
-applications that use ICU. All the other packages require this package
-to be installed.
-- ICU. This package contains the converters data, the timezones data,
-and all the ICU tools.
-- ICU locales. This package adds locales and break data.
-- ICU development. This package contains the files necessary to build
-applications that use ICU, i.e. header files, links to shared
-libraries used by the linker, static libraries, etc... It also
-contains sample applications and documentation.
-- ICU docs. This package contains further documentation for ICU,
-including a complete API reference.
-- ICU data. This package contains the source for the compiled data
-contained by the ICU package.
-- ICU international data. This package contains the source for the
-compiled data contained by the ICU locales package.
-
-In this file, we will refer to Autoconf variables as in $(bindir). In
-addition to these, we will use the following variables to denote
-ICU-specific directories or information:
-
-  VERSION       ICU's dotted version number, e.g. 1.6.0.1 as of this
-		writing.
-
-  ICUDATADIR	The directory where portable ICU data are. This is
-	        defined as $(datadir)/icu/$(VERSION).
-  ICULIBDIR	The directory where platform-specific ICU data
-		are. This is defined as $(libdir)/icu/$(VERSION).
-  ICUSYSCONFDIR	The directory where ICU configuration files are. This
-		is defined as $(sysconfdir)/icu.
-
-When referring to libraries, .so will be used to denote the extension
-of a shared library, and .a to denote the extension of a static
-library. These extensions will actually be different on some platforms.
-
-+ Configuration and compilation of ICU
-
-ICU should be configured with the following options:
-
-  --with-data-packaging=files
-  --disable-rpath
-  --enable-shared
-  --enable-static
-  --without-samples
-
-in addition to platform-specific settings (like a specific mandir or
-sysconfdir). Note that the use of --disable-rpath assumes that the
-packaging is made for a standard location, or that the package
-installation/deinstallation will correctly manage the configuration
-of the system's dyanmic loader. This is the right way of doing things.
-
-The configure script invokation should also be done with
-
-  CFLAGS="-O2"
-
-set, as in:
-
-  $ CFLAGS="-O2" ./configure ...
-
-The files packaging mode is chosen because it offers the maximum
-flexibility. Packages can be split easily, and system administrators
-can add converters, aliases, and other resources with little
-effort. Ideally, the ICU build will be modified to allow for distributing a
-libicudata.so with all the converters and locales, but indexes and aliases
-as separate files. But for now, this is the easiest way to get started.
-
-+ The ICU libraries package
-
-The ICU libraries package is typically named `libicuXX' where XX is
-the major number of ICU's libraries. This number is ICU's version
-number multiplied by 10 and rounded down to the nearest integer (it is
-also the value of the LIB_VERSION_MAJOR configure substitution
-variable). For example, for ICU 1.6.0.1, it is 16, so the package name
-is `libicu16'. The major version is part of the package name to allow
-for the simultaneous installation of different ICU releases.
-
-This package contains:
-
-- All the shared libraries, and their major number symbolic link, but
-not the .so symbolic link that is only used at link time (this one is
-part of the development package). These are $(libdir)/libicu*.so.* and
-$(libdir)/libustdio.so.* at the time of this writing.
-
-+ The ICU package
-
-The ICU package is simply named `icu'.  It provides data used by the ICU
-libraries package and commands to create and manipulate that data.
-
-This package contains:
-
-- The Unicode data files (uprops.dat and unames.dat as of this writing).
-- The time zones data files (tz.dat).
-- All the binary data files for converters (.cnv files).
-- All the ICU commands.
-- The manual pages for ICU commands and file formats.
-
-+ The ICU locales package
-
-The ICU locales package is named `icu-locales'. It provides data used by
-internationalization support in ICU.
-
-This package contains:
-
-- All the data for locales in ICU (.dat files).
-- All the break data for specific locales (.brk files).
-
-+ The ICU development package
-
-The ICU developpment package is named `libicu-dev'. It provides all
-the files necessary to write applications that use ICU, along with
-examples and some documentation.
-
-This package contains:
-
-- The /usr/include/unicode directory which contains all the ICU
-headers.
-- The .so symbolic links used by the linker to link against the
-latest version of the libraries.
-- A sample Makefile fragment that can be included by applications
-using ICU, to faciliate their building, along with a platform-specific
-configuration file included by this fragment.
-- The sample applications from the ICU source tree, in an appropriate
-location for the system that the package is installed on (for example,
-on Debian, in /usr/share/doc/libicu-dev/examples).
-
-This package depends on the ICU libraries package with the exact same
-version, since it provides .so symbolic links to the latest libraries.
-
-+ The ICU docs package
-
-The ICU docs package is named `libicu-doc'. It contains the files
-generated by doxygen when the `make doc' command is executed, in a
-location appropriate for the system that the package is installed on.
-
-+ The ICU data package
-
-The ICU data package is named `icu-data'. It contains source files for
-the data found in the ICU package. These files are installed in
-$(ICUDATADIR).
-
-+ The ICU international data package
-
-The ICU data package is named `icu-i18ndata'. It contains source files for
-the dat founf in the ICU locales package. These files are installed in
-$(ICUDATADIR).
-
-----
-Yves Arrouye <yves@realnames.com>
diff --git a/src/third_party/mozjs/intl/icu/packaging/README b/src/third_party/mozjs/intl/icu/packaging/README
deleted file mode 100644
index 1bfe85a..0000000
--- a/src/third_party/mozjs/intl/icu/packaging/README
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (C) 2000-2003, International Business Machines
-Corporation and others.  All Rights Reserved.
-
-This directory contains information, input files and scripts for
-packaging ICU using specific packaging tools. We assume that the
-packager is familiar with the tools and procedures needed to build a
-package for a given packaging method (for example, how to use
-dpkg-buildpackage(1) on Debian GNU/Linux, or rpm(8) on distributions that
-use RPM packages).
-
-Please read the file PACKAGES if you are interested in packaging ICU
-yourself. It describes what the different packages should be, and what
-their contents are.
diff --git a/src/third_party/mozjs/intl/icu/packaging/rpm/icu.spec b/src/third_party/mozjs/intl/icu/packaging/rpm/icu.spec
deleted file mode 100644
index 6a1e63b..0000000
--- a/src/third_party/mozjs/intl/icu/packaging/rpm/icu.spec
+++ /dev/null
@@ -1,228 +0,0 @@
-#   Copyright (C) 2000-2005, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-# RPM specification file for ICU.
-#
-# Neal Probert <nprobert@walid.com> is the current maintainer.
-# Yves Arrouye <yves@realnames.com> is the original author.
-
-# This file can be freely redistributed under the same license as ICU.
-
-Name: icu
-Version: 3.4
-Release: 1
-Requires: libicu34 >= %{version}
-Summary: International Components for Unicode
-Packager: Ian Holsman (CNET Networks) <ianh@cnet.com>
-Copyright: X License
-Group: System Environment/Libraries
-Source: icu-%{version}.tgz
-BuildRoot: /var/tmp/%{name}-%{version}
-%description
-ICU is a set of C and C++ libraries that provides robust and full-featured
-Unicode and locale support. The library provides calendar support, conversions
-for many character sets, language sensitive collation, date
-and time formatting, support for many locales, message catalogs
-and resources, message formatting, normalization, number and currency
-formatting, time zones support, transliteration, word, line and
-sentence breaking, etc.
-
-This package contains the Unicode character database and derived
-properties, along with converters and time zones data.
-
-This package contains the runtime libraries for ICU. It does
-not contain any of the data files needed at runtime and present in the
-`icu' and `icu-locales` packages.
-
-%package -n libicu34
-Summary: International Components for Unicode (libraries)
-Group: Development/Libraries
-%description -n libicu34
-ICU is a set of C and C++ libraries that provides robust and full-featured
-Unicode support. This package contains the runtime libraries for ICU. It does
-not contain any of the data files needed at runtime and present in the
-`icu' and `icu-locales` packages.
-
-%package -n libicu-devel
-Summary: International Components for Unicode (development files)
-Group: Development/Libraries
-Requires: libicu34 = %{version}
-%description -n libicu-devel
-ICU is a set of C and C++ libraries that provides robust and full-featured
-Unicode support. This package contains the development files for ICU.
-
-%package locales
-Summary: Locale data for ICU
-Group: System Environment/Libraries
-Requires: libicu34 >= %{version}
-%description locales
-The locale data are used by ICU to provide localization (l10n), 
-internationalization (i18n) and timezone support to ICU applications.
-This package also contains break data for various languages,
-and transliteration data.
-
-%post
-# Adjust the current ICU link in /usr/lib/icu
-
-icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
-cd /usr/lib/icu
-rm -f /usr/lib/icu/current
-if test x"$icucurrent" != x
-then
-    ln -s "$icucurrent" current
-fi
-
-#ICU_DATA=/usr/share/icu/%{version}
-#export ICU_DATA
-
-%preun
-# Adjust the current ICU link in /usr/lib/icu
-
-icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
-cd /usr/lib/icu
-rm -f /usr/lib/icu/current
-if test x"$icucurrent" != x
-then
-    ln -s "$icucurrent" current
-fi
-
-%post -n libicu34
-ldconfig
-
-# Adjust the current ICU link in /usr/lib/icu
-
-icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
-cd /usr/lib/icu
-rm -f /usr/lib/icu/current
-if test x"$icucurrent" != x
-then
-    ln -s "$icucurrent" current
-fi
-
-%preun -n libicu34
-# Adjust the current ICU link in /usr/lib/icu
-
-icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
-cd /usr/lib/icu
-rm -f /usr/lib/icu/current
-if test x"$icucurrent" != x
-then
-    ln -s "$icucurrent" current
-fi
-
-%prep
-%setup -q -n icu
-
-%build
-cd source
-chmod a+x ./configure
-CFLAGS="-O3" CXXFLAGS="-O" ./configure --prefix=/usr --sysconfdir=/etc --with-data-packaging=files --enable-shared --enable-static --disable-samples
-echo 'CPPFLAGS += -DICU_DATA_DIR=\"/usr/share/icu/%{version}\"' >> icudefs.mk
-make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
-
-%install
-rm -rf $RPM_BUILD_ROOT
-cd source
-make install DESTDIR=$RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-%doc readme.html
-%doc license.html
-/usr/share/icu/%{version}/license.html
-/usr/share/icu/%{version}/icudt34l/*.cnv
-/usr/share/icu/%{version}/icudt34l/*.icu
-/usr/share/icu/%{version}/icudt34l/*.spp
-
-/usr/bin/derb
-/usr/bin/genbrk
-/usr/bin/gencnval
-/usr/bin/genrb
-/usr/bin/icu-config
-/usr/bin/makeconv
-/usr/bin/pkgdata
-/usr/bin/uconv
-
-/usr/sbin/decmn
-/usr/sbin/genccode
-/usr/sbin/gencmn
-/usr/sbin/gensprep
-/usr/sbin/genuca
-/usr/sbin/icuswap
-/usr/share/icu/%{version}/mkinstalldirs
-
-/usr/man/man1/derb.1.*
-/usr/man/man1/gencnval.1.*
-/usr/man/man1/genrb.1.*
-/usr/man/man1/icu-config.1.*
-/usr/man/man1/makeconv.1.*
-/usr/man/man1/pkgdata.1.*
-/usr/man/man1/uconv.1.*
-/usr/man/man8/decmn.8.*
-/usr/man/man8/genccode.8.*
-/usr/man/man8/gencmn.8.*
-/usr/man/man8/gensprep.8.*
-/usr/man/man8/genuca.8.*
-
-%files -n icu-locales
-/usr/share/icu/%{version}/icudt34l/*.brk
-/usr/share/icu/%{version}/icudt34l/*.res
-/usr/share/icu/%{version}/icudt34l/coll/*.res
-/usr/share/icu/%{version}/icudt34l/rbnf/*.res
-/usr/share/icu/%{version}/icudt34l/translit/*.res
-
-%files -n libicu34
-%doc license.html
-/usr/lib/libicui18n.so.34
-/usr/lib/libicui18n.so.34.0
-/usr/lib/libicutu.so.34
-/usr/lib/libicutu.so.34.0
-/usr/lib/libicuuc.so.34
-/usr/lib/libicuuc.so.34.0
-/usr/lib/libicudata.so.34
-/usr/lib/libicudata.so.34.0
-/usr/lib/libicuio.so.34
-/usr/lib/libicuio.so.34.0
-/usr/lib/libiculx.so.34
-/usr/lib/libiculx.so.34.0
-/usr/lib/libicule.so.34
-/usr/lib/libicule.so.34.0
-
-%files -n libicu-devel
-%doc readme.html
-%doc license.html
-/usr/lib/libicui18n.so
-/usr/lib/libsicui18n.a
-/usr/lib/libicuuc.so
-/usr/lib/libsicuuc.a
-/usr/lib/libicutu.so
-/usr/lib/libsicutu.a
-/usr/lib/libicuio.so
-/usr/lib/libsicuio.a
-/usr/lib/libicudata.so
-/usr/lib/libsicudata.a
-/usr/lib/libicule.so
-/usr/lib/libsicule.a
-/usr/lib/libiculx.so
-/usr/lib/libsiculx.a
-/usr/include/unicode/*.h
-/usr/include/layout/*.h
-/usr/lib/icu/%{version}/Makefile.inc
-/usr/lib/icu/Makefile.inc
-/usr/share/icu/%{version}/config
-/usr/share/doc/icu-%{version}/*
-
-%changelog
-* Mon Jun 07 2004 Alexei Dets <adets@idsk.com>
-- update to 3.0
-* Tue Aug 16 2003 Steven Loomis <srl@jtcsv.com>
-- update to 2.6.1 - include license
-* Thu Jun 05 2003 Steven Loomis <srl@jtcsv.com>
-- Update to 2.6
-* Fri Dec 27 2002 Steven Loomis <srl@jtcsv.com>
-- Update to 2.4 spec
-* Fri Sep 27 2002 Steven Loomis <srl@jtcsv.com>
-- minor updates to 2.2 spec. Rpath is off by default, don't pass it as an option.
-* Mon Sep 16 2002 Ian Holsman <ian@holsman.net> 
-- update to icu 2.2
-
diff --git a/src/third_party/mozjs/intl/icu/readme.html b/src/third_party/mozjs/intl/icu/readme.html
deleted file mode 100644
index d1db2a4..0000000
--- a/src/third_party/mozjs/intl/icu/readme.html
+++ /dev/null
@@ -1,1773 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
-  <head>
-    <title>ReadMe for ICU 50.1.2</title>
-    <meta name="COPYRIGHT" content=
-    "Copyright (c) 1997-2013 IBM Corporation and others. All Rights Reserved." />
-    <meta name="KEYWORDS" content=
-    "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
-    <meta name="DESCRIPTION" content=
-    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
-    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
-  </head>
-
-  <body class="draft">
-    <h1>International Components for Unicode<br />
-     <abbr title="International Components for Unicode">ICU</abbr> 50.1.2 ReadMe</h1>
-
-    <!--<p><b>Note:</b> This is a development milestone release of ICU4C 50.
-    This milestone is intended for those wishing to get an early look at ICU 50 new features and API changes.
-    It is not recommended for production use.</p>-->
-    <!--<p><b>Note:</b> This is a release candidate version of ICU4C 50.
-    It is not recommended for production use.</p>-->
-
-    <p>Last updated: 2013-Jan-10<br />
-     Copyright &copy; 1997-2013 International Business Machines Corporation and
-    others. All Rights Reserved.</p>
-    <!-- Remember that there is a copyright at the end too -->
-    <hr />
-
-    <h2 class="TOC">Table of Contents</h2>
-
-    <ul class="TOC">
-      <li><a href="#Introduction">Introduction</a></li>
-
-      <li><a href="#GettingStarted">Getting Started</a></li>
-
-      <li><a href="#News">What Is New In This release?</a></li>
-
-      <li><a href="#Download">How To Download the Source Code</a></li>
-
-      <li><a href="#SourceCode">ICU Source Code Organization</a></li>
-
-      <li>
-        <a href="#HowToBuild">How To Build And Install ICU</a> 
-
-        <ul >
-          <li><a href="#RecBuild">Recommended Build Options</a></li>
-
-          <li><a href="#UserConfig">User-Configurable Settings</a></li>
-
-          <li><a href="#HowToBuildWindows">Windows</a></li>
-
-          <li><a href="#HowToBuildCygwin">Cygwin</a></li>
-
-          <li><a href="#HowToBuildUNIX">UNIX</a></li>
-
-          <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li>
-
-          <li><a href="#HowToBuildOS400">IBM i family (IBM i, i5/OS, OS/400)</a></li>
-
-		  <li><a href="#HowToCrossCompileICU">How to Cross Compile ICU</a></li>
-        </ul>
-      </li>
-
-
-      <li><a href="#HowToPackage">How To Package ICU</a></li>
-
-      <li>
-        <a href="#ImportantNotes">Important Notes About Using ICU</a> 
-
-        <ul >
-          <li><a href="#ImportantNotesMultithreaded">Using ICU in a Multithreaded
-          Environment</a></li>
-
-          <li><a href="#ImportantNotesWindows">Windows Platform</a></li>
-
-          <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#PlatformDependencies">Platform Dependencies</a> 
-
-        <ul >
-          <li><a href="#PlatformDependenciesNew">Porting To A New
-          Platform</a></li>
-
-          <li><a href="#PlatformDependenciesImpl">Platform Dependent
-          Implementations</a></li>
-        </ul>
-      </li>
-    </ul>
-    <hr />
-
-    <h2><a name="Introduction" href="#Introduction" id=
-    "Introduction">Introduction</a></h2>
-
-    <p>Today's software market is a global one in which it is desirable to
-    develop and maintain one application (single source/single binary) that
-    supports a wide variety of languages. The International Components for
-    Unicode (ICU) libraries provide robust and full-featured Unicode services on
-    a wide variety of platforms to help this design goal. The ICU libraries
-    provide support for:</p>
-
-    <ul>
-      <li>The latest version of the Unicode standard</li>
-
-      <li>Character set conversions with support for over 220 codepages</li>
-
-      <li>Locale data for more than 290 locales</li>
-
-      <li>Language sensitive text collation (sorting) and searching based on the
-      Unicode Collation Algorithm (=ISO 14651)</li>
-
-      <li>Regular expression matching and Unicode sets</li>
-
-      <li>Transformations for normalization, upper/lowercase, script
-      transliterations (50+ pairs)</li>
-
-      <li>Resource bundles for storing and accessing localized information</li>
-
-      <li>Date/Number/Message formatting and parsing of culture specific
-      input/output formats</li>
-
-      <li>Calendar specific date and time manipulation</li>
-
-      <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li>
-
-      <li>Text boundary analysis for finding characters, word and sentence
-      boundaries</li>
-    </ul>
-
-    <p>ICU has a sister project ICU4J that extends the internationalization
-    capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
-    called ICU4C when a distinction is necessary.</p>
-
-    <h2><a name="GettingStarted" href="#GettingStarted" id=
-    "GettingStarted">Getting started</a></h2>
-
-    <p>This document describes how to build and install ICU on your machine. For
-    other information about ICU please see the following table of links.<br />
-     The ICU homepage also links to related information about writing
-    internationalized software.</p>
-
-    <table class="docTable" summary="These are some useful links regarding ICU and internationalization in general.">
-      <caption>
-        Here are some useful links regarding ICU and internationalization in
-        general.
-      </caption>
-
-      <tr>
-        <td>ICU, ICU4C &amp; ICU4J Homepage</td>
-
-        <td><a href=
-        "http://icu-project.org/">http://icu-project.org/</a></td>
-      </tr>
-
-      <tr>
-        <td>FAQ - Frequently Asked Questions about ICU</td>
-
-        <td><a href=
-        "http://userguide.icu-project.org/icufaq">http://userguide.icu-project.org/icufaq</a></td>
-      </tr>
-
-      <tr>
-        <td>ICU User's Guide</td>
-
-        <td><a href=
-        "http://userguide.icu-project.org/">http://userguide.icu-project.org/</a></td>
-      </tr>
-
-      <tr>
-        <td>How To Use ICU</td>
-
-        <td><a href="http://userguide.icu-project.org/howtouseicu">http://userguide.icu-project.org/howtouseicu</a></td>
-      </tr>
-
-      <tr>
-        <td>Download ICU Releases</td>
-
-        <td><a href=
-        "http://site.icu-project.org/download">http://site.icu-project.org/download</a></td>
-      </tr>
-
-      <tr>
-        <td>ICU4C API Documentation Online</td>
-
-        <td><a href=
-        "http://icu-project.org/apiref/icu4c/">http://icu-project.org/apiref/icu4c/</a></td>
-      </tr>
-
-      <tr>
-        <td>Online ICU Demos</td>
-
-        <td><a href=
-        "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos</a></td>
-      </tr>
-
-      <tr>
-        <td>Contacts and Bug Reports/Feature Requests</td>
-
-        <td><a href=
-        "http://site.icu-project.org/contacts">http://site.icu-project.org/contacts</a></td>
-      </tr>
-    </table>
-
-    <p><strong>Important:</strong> Please make sure you understand the <a href=
-    "license.html">Copyright and License Information</a>.</p>
-
-    <h2><a name="News" href="#News" id="News">What is new in this
-    release?</a></h2>
-
-    <p>To see which APIs are new or changed in this release, view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>
-
-    <p>The following list concentrates on <em>changes that affect existing
-    applications migrating from previous ICU releases</em>.
-    For more news about this release, see the
-    <!--
-    <a href="http://site.icu-project.org/download/">ICU download page</a>.
-    -->
-    <a href="http://site.icu-project.org/download/milestone">ICU milestone download page</a>.
-    </p>
-
-    <h3>Thread safety support cannot be removed</h3>
-    <p>ICU4C 50 dropped support for the --enable-threads/--disable-threads configure option
-    and the uconfig.h <code>ICU_USE_THREADS</code> switch.
-    ICU4C 50 and higher is always built with multi-threading safety support.
-    ICU4C has never created threads in its libraries.</p>
-
-    <p>If you need to prevent ICU from using thread safe mutexes when your application does
-    not create threads, then you can use the --enable-weak-threads configure option.
-    The --enable-weak-threads configure option will cause ICU to weakly reference the
-    pthread mutex functions, and the stub implementations in the C runtime will be used.
-    If this configure option does not work on your platform, then you can call
-    <code>u_setMutexFunctions()</code> and <code>u_setAtomicIncDecFunctions()</code>
-    with your own empty implementations.</p>
-
-    <h3>The default compilers have changed</h3>
-    <p>ICU has changed the compilers chosen by default. If the clang and clang++ compilers
-    are available, those will be used instead of gcc and g++. If the clang compilers
-    are not available, then gcc and g++ will be used just as before. The clang++ compiler
-    provides C++11 support and some optimizations that are helpful to ICU. The API
-    remains the same between these two sets of compilers, but ICU can internally leverage
-    language features and optimizations that are available in clang++.</p>
-
-    <p>If you need to force ICU to compile with gcc and g++, then you can use the following
-    from the command line in the source directory:</p>
-
-<pre>
-<samp>./configure CC=gcc CXX=g++ CFLAGS=-O3 CXXFLAGS=-O3</samp>
-</pre>
-
-    <h3>C++ Collator subclassing-API breaking changes</h3>
-    <p>We have made some changes to the C++ Collator API for ICU 50
-    that will make it easier to use and implement the Collator but
-    which are incompatible for subclasses.
-    If there are subclasses, they will have to be modified as well.
-    It will be easy to adapt subclass source code, if there is any.
-    We think it is unlikely (or at least rare) that users write subclasses of the C++ Collator,
-    given the number of virtual methods and the complexities of a collation implementation.</p>
-
-    <p>For details see the email "ICU4C C++ Collator subclassing-API breaking changes"
-    sent on 2012-jul-25 to the icu-design and icu-support
-    <a href="http://site.icu-project.org/contacts">mailing lists</a>,
-    and <a href="http://bugs.icu-project.org/trac/ticket/9346">ICU ticket #9346</a>,
-    including the <a href="http://bugs.icu-project.org/trac/review/9346">changes for that ticket</a>.</p>
-
-    <p>In particular, the <code>class TestCollator</code> in
-    <a href="http://bugs.icu-project.org/trac/browser/icu/trunk/source/test/intltest/apicoll.cpp"><code>source/test/intltest/apicoll.cpp</code></a>
-    <a href="http://bugs.icu-project.org/trac/changeset/32100#file5">illustrates how a subclass needs to be changed</a>.
-    However, note that the TestCollator was also simplified slightly;
-    not all changes made there were strictly required for the API signature changes.</p>
-
-    <h2><a name="Download" href="#Download" id="Download">How To Download the
-    Source Code</a></h2>
-
-    <p>There are two ways to download ICU releases:</p>
-
-    <ul>
-      <li><strong>Official Release Snapshot:</strong><br />
-       If you want to use ICU (as opposed to developing it), you should download
-      an official packaged version of the ICU source code. These versions are
-      tested more thoroughly than day-to-day development builds of the system,
-      and they are packaged in zip and tar files for convenient download. These
-      packaged files can be found at <a href=
-      "http://site.icu-project.org/download">http://site.icu-project.org/download</a>.<br />
-       The packaged snapshots are named <strong>icu-nnnn.zip</strong> or
-      <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip
-      file is used for Windows platforms, while the .tgz file is preferred on
-      most other platforms.<br />
-       Please unzip this file. </li>
-
-      <li><strong>Subversion Source Repository:</strong><br />
-       If you are interested in developing features, patches, or bug fixes for
-      ICU, you should probably be working with the latest version of the ICU
-      source code. You will need to check the code out of our Subversion repository to
-      ensure that you have the most recent version of all of the files. See our
-      <a href="http://site.icu-project.org/repository">source
-      repository</a> for details.</li>
-    </ul>
-
-    <h2><a name="SourceCode" href="#SourceCode" id="SourceCode">ICU Source Code
-    Organization</a></h2>
-
-    <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the full
-    path name of the ICU directory (the top level directory from the distribution
-    archives) in your file system. You can also view the <a href=
-    "http://userguide.icu-project.org/design">ICU Architectural
-    Design</a> section of the User's Guide to see which libraries you need for
-    your software product. You need at least the data (<code>[lib]icudt</code>)
-    and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>
-
-    <table class="docTable" summary="The following files describe the code drop.">
-      <caption>
-        The following files describe the code drop.
-      </caption>
-
-      <tr>
-        <th scope="col">File</th>
-
-        <th scope="col">Description</th>
-      </tr>
-
-      <tr>
-        <td>readme.html</td>
-
-        <td>Describes the International Components for Unicode (this file)</td>
-      </tr>
-
-      <tr>
-        <td>license.html</td>
-
-        <td>Contains the text of the ICU license</td>
-      </tr>
-    </table>
-
-    <p><br />
-    </p>
-
-    <table class="docTable" summary=
-    "The following directories contain source code and data files.">
-      <caption>
-        The following directories contain source code and data files.
-      </caption>
-
-      <tr>
-        <th scope="col">Directory</th>
-
-        <th scope="col">Description</th>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>common</b>/</td>
-
-        <td>The core Unicode and support functionality, such as resource bundles,
-        character properties, locales, codepage conversion, normalization,
-        Unicode properties, Locale, and UnicodeString.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>i18n</b>/</td>
-
-        <td>Modules in i18n are generally the more data-driven, that is to say
-        resource bundle driven, components. These deal with higher-level
-        internationalization issues such as formatting, collation, text break
-        analysis, and transliteration.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>layout</b>/</td>
-
-        <td>Contains the ICU layout engine (not a rasterizer).</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>io</b>/</td>
-
-        <td>Contains the ICU I/O library.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>data</b>/</td>
-
-        <td>
-          <p>This directory contains the source data in text format, which is
-          compiled into binary form during the ICU build process. It contains
-          several subdirectories, in which the data files are grouped by
-          function. Note that the build process must be run again after any
-          changes are made to this directory.</p>
-
-          <p>If some of the following directories are missing, it's probably
-          because you got an official download. If you need the data source files
-          for customization, then please download the ICU source code from <a
-          href="http://site.icu-project.org/repository">subversion</a>.</p>
-
-          <ul>
-            <li><b>in/</b> A directory that contains a pre-built data library for
-            ICU. A standard source code package will contain this file without
-            several of the following directories. This is to simplify the build
-            process for the majority of users and to reduce platform porting
-            issues.</li>
-
-            <li><b>brkitr/</b> Data files for character, word, sentence, title
-            casing and line boundary analysis.</li>
-
-            <li><b>locales/</b> These .txt files contain ICU language and
-            culture-specific localization data. Two special bundles are
-            <b>root</b>, which is the fallback data and parent of other bundles,
-            and <b>index</b>, which contains a list of installed bundles. The
-            makefile <b>resfiles.mk</b> contains the list of resource bundle
-            files.</li>
-
-            <li><b>mappings/</b> Here are the code page converter tables. These
-            .ucm files contain mappings to and from Unicode. These are compiled
-            into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
-            various converter name formats to ICU internal format and vice versa.
-            It produces cnvalias.icu. The makefiles <b>ucmfiles.mk,
-            ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of
-            converters to be built.</li>
-
-            <li><b>translit/</b> This directory contains transliterator rules as
-            resource bundles, a makefile <b>trnsfiles.mk</b> containing the list
-            of installed system translitaration files, and as well the special
-            bundle <b>translit_index</b> which lists the system transliterator
-            aliases.</li>
-
-            <li><b>unidata/</b> This directory contains the Unicode data files.
-            Please see <a href=
-            "http://www.unicode.org/">http://www.unicode.org/</a> for more
-            information.</li>
-
-            <li><b>misc/</b> The misc directory contains other data files which
-            did not fit into the above categories. Currently it only contains
-            time zone information, and a name preperation file for <a href=
-            "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>
-
-            <li><b>out/</b> This directory contains the assembled memory mapped
-            files.</li>
-
-            <li><b>out/build/</b> This directory contains intermediate (compiled)
-            files, such as .cnv, .res, etc.</li>
-          </ul>
-
-          <p>If you are creating a special ICU build, you can set the ICU_DATA
-          environment variable to the out/ or the out/build/ directories, but
-          this is generally discouraged because most people set it incorrectly.
-          You can view the <a href=
-          "http://userguide.icu-project.org/icudata">ICU Data
-          Management</a> section of the ICU User's Guide for details.</p>
-        </td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/test/<b>intltest</b>/</td>
-
-        <td>A test suite including all C++ APIs. For information about running
-        the test suite, see the build instructions specific to your platform
-        later in this document.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/test/<b>cintltst</b>/</td>
-
-        <td>A test suite written in C, including all C APIs. For information
-        about running the test suite, see the build instructions specific to your
-        platform later in this document.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/test/<b>iotest</b>/</td>
-
-        <td>A test suite written in C and C++ to test the icuio library. For
-        information about running the test suite, see the build instructions
-        specific to your platform later in this document.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/test/<b>testdata</b>/</td>
-
-        <td>Source text files for data, which are read by the tests. It contains
-        the subdirectories <b>out/build/</b> which is used for intermediate
-        files, and <b>out/</b> which contains <b>testdata.dat.</b></td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>tools</b>/</td>
-
-        <td>Tools for generating the data files. Data files are generated by
-        invoking <i>&lt;ICU&gt;</i>/source/data/build/makedata.bat on Win32 or
-        <i>&lt;ICU&gt;</i>/source/make on UNIX.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>samples</b>/</td>
-
-        <td>Various sample programs that use ICU</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>extra</b>/</td>
-
-        <td>Non-supported API additions. Currently, it contains the 'uconv' tool
-        to perform codepage conversion on files.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/<b>packaging</b>/</td>
-
-        <td>This directory contain scripts and tools for packaging the final
-        ICU build for various release platforms.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>config</b>/</td>
-
-        <td>Contains helper makefiles for platform specific build commands. Used
-        by 'configure'.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>allinone</b>/</td>
-
-        <td>Contains top-level ICU workspace and project files, for instance to
-        build all of ICU under one MSVC project.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/<b>include</b>/</td>
-
-        <td>Contains the headers needed for developing software that uses ICU on
-        Windows.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/<b>lib</b>/</td>
-
-        <td>Contains the import libraries for linking ICU into your Windows
-        application.</td>
-      </tr>
-
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/<b>bin</b>/</td>
-
-        <td>Contains the libraries and executables for using ICU on Windows.</td>
-      </tr>
-    </table>
-    <!-- end of ICU structure ==================================== -->
-
-    <h2><a name="HowToBuild" href="#HowToBuild" id="HowToBuild">How To Build And
-    Install ICU</a></h2>
-
-    <h3><a name="RecBuild" href="#RecBuild" id=
-    "RecBuild">Recommended Build Options</a></h3>
-
-    <p>Depending on the platform and the type of installation,
-    we recommend a small number of modifications and build options.</p>
-    <ul>
-      <li><b>Namespace:</b> By default, unicode/uversion.h has
-        "using namespace icu;" which defeats much of the purpose of the namespace.
-        (This is for historical reasons: Originally, ICU4C did not use namespaces,
-        and some compilers did not support them. The default "using" statement
-        preserves source code compatibility.)<br />
-        We recommend you turn this off via <code>-DU_USING_ICU_NAMESPACE=0</code>
-        or by modifying unicode/uversion.h:
-<pre>Index: source/common/unicode/uversion.h
-===================================================================
---- source/common/unicode/uversion.h    (revision 26606)
-+++ source/common/unicode/uversion.h    (working copy)
-@@ -180,7 +180,8 @@
- #   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
-
- #   ifndef U_USING_ICU_NAMESPACE
--#       define U_USING_ICU_NAMESPACE 1
-+        // Set to 0 to force namespace declarations in ICU usage.
-+#       define U_USING_ICU_NAMESPACE 0
- #   endif
- #   if U_USING_ICU_NAMESPACE
-         U_NAMESPACE_USE
-</pre>
-        ICU call sites then either qualify ICU types explicitly,
-        for example <code>icu::UnicodeString</code>,
-        or do <code>using icu::UnicodeString;</code> where appropriate.</li>
-      <li><b>Hardcode the default charset to UTF-8:</b> On platforms where
-        the default charset is always UTF-8,
-        like MacOS X and some Linux distributions,
-        we recommend hardcoding ICU's default charset to UTF-8.
-        This means that some implementation code becomes simpler and faster,
-        and statically linked ICU libraries become smaller.
-        (See the <a href="http://icu-project.org/apiref/icu4c/utypes_8h.html#0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
-        API documentation for more details.)<br />
-        You can <code>-DU_CHARSET_IS_UTF8=1</code> or
-        modify unicode/utypes.h (in ICU 4.8 and below)
-        or modify unicode/platform.h (in ICU 49 and higher):
-<pre>Index: source/common/unicode/utypes.h
-===================================================================
---- source/common/unicode/utypes.h      (revision 26606)
-+++ source/common/unicode/utypes.h      (working copy)
-@@ -160,7 +160,7 @@
-  * @see UCONFIG_NO_CONVERSION
-  */
- #ifndef U_CHARSET_IS_UTF8
--#   define U_CHARSET_IS_UTF8 0
-+#   define U_CHARSET_IS_UTF8 1
- #endif
-
- /*===========================================================================*/
-</pre></li>
-      <li><b>UnicodeString constructors:</b> The UnicodeString class has
-        several single-argument constructors that are not marked "explicit"
-        for historical reasons.
-        This can lead to inadvertent construction of a <code>UnicodeString</code>
-        with a single character by using an integer,
-        and it can lead to inadvertent dependency on the conversion framework
-        by using a C string literal.<br />
-        Beginning with ICU 49, you should do the following:
-        <ul>
-          <li>Consider marking the from-<code>UChar</code>
-            and from-<code>UChar32</code> constructors explicit via
-            <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code> or similar.</li>
-          <li>Consider marking the from-<code>const char*</code> and
-            from-<code>const UChar*</code> constructors explicit via
-            <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code> or similar.</li>
-        </ul>
-        Note: The ICU test suites cannot be compiled with these settings.
-      </li>
-      <li><b>utf.h, utf8.h, utf16.h, utf_old.h:</b>
-        By default, utypes.h (and thus almost every public ICU header)
-        includes all of these header files.
-        Often, none of them are needed, or only one or two of them.
-        All of utf_old.h is deprecated or obsolete.<br />
-        Beginning with ICU 49,
-        you should define <code>U_NO_DEFAULT_INCLUDE_UTF_HEADERS</code> to 1
-        (via -D or uconfig.h, as above)
-        and include those header files explicitly that you actually need.<br />
-        Note: The ICU test suites cannot be compiled with this setting.</li>
-      <li><b>.dat file:</b> By default, the ICU data is built into
-        a shared library (DLL). This is convenient because it requires no
-        install-time or runtime configuration,
-        but the library is platform-specific and cannot be modified.
-        A .dat package file makes the opposite trade-off:
-        Platform-portable (except for endianness and charset family, which
-        can be changed with the icupkg tool)
-        and modifiable (also with the icupkg tool).
-        If a path is set, then single data files (e.g., .res files)
-        can be copied to that location to provide new locale data
-        or conversion tables etc.<br />
-        The only drawback with a .dat package file is that the application
-        needs to provide ICU with the file system path to the package file
-        (e.g., by calling <code>u_setDataDirectory()</code>)
-        or with a pointer to the data (<code>udata_setCommonData()</code>)
-        before other ICU API calls.
-        This is usually easy if ICU is used from an application where
-        <code>main()</code> takes care of such initialization.
-        It may be hard if ICU is shipped with
-        another shared library (such as the Xerces-C++ XML parser)
-        which does not control <code>main()</code>.<br />
-        See the <a href="http://userguide.icu-project.org/icudata">User Guide ICU Data</a>
-        chapter for more details.<br />
-        If possible, we recommend building the .dat package.
-        Specify <code>--with-data-packaging=archive</code>
-        on the configure command line, as in<br />
-        <code>runConfigureICU Linux --with-data-packaging=archive</code><br />
-        (Read the configure script's output for further instructions.
-        On Windows, the Visual Studio build generates both the .dat package
-        and the data DLL.)<br />
-        Be sure to install and use the tiny stubdata library
-        rather than the large data DLL.</li>
-      <li><b>Static libraries:</b> It may make sense to build the ICU code
-        into static libraries (.a) rather than shared libraries (.so/.dll).
-        Static linking reduces the overall size of the binary by removing
-        code that is never called.<br />
-        Example configure command line:<br />
-        <code>runConfigureICU Linux --enable-static --disable-shared</code></li>
-      <li><b>Out-of-source build:</b> It is usually desirable to keep the ICU
-        source file tree clean and have build output files written to
-        a different location. This is called an "out-of-source build".
-        Simply invoke the configure script from the target location:
-<pre>~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
-~/icu$ mkdir trunk-dev
-~/icu$ cd trunk-dev
-~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
-~/icu/trunk-dev$ make check</pre></li>
-    </ul>
-    <h4>ICU as a System-Level Library</h4>
-    <p>If ICU is installed as a system-level library, there are further
-      opportunities and restrictions to consider.
-      For details, see the <em>Using ICU as an Operating System Level Library</em>
-      section of the <a href="http://userguide.icu-project.org/design">User Guide ICU Architectural Design</a> chapter.</p>
-    <ul>
-      <li><b>Data path:</b> For a system-level library, it is best to load
-        ICU data from the .dat package file because the file system path
-        to the .dat package file can be hardcoded. ICU will automatically set
-        the path to the final install location using U_ICU_DATA_DEFAULT_DIR.
-        Alternatively, you can set <code>-DICU_DATA_DIR=/path/to/icu/data</code>
-        when building the ICU code. (Used by source/common/putil.c.)<br />
-        Consider also setting <code>-DICU_NO_USER_DATA_OVERRIDE</code>
-        if you do not want the "ICU_DATA" environment variable to be used.
-        (An application can still override the data path via
-        <code>u_setDataDirectory()</code> or
-        <code>udata_setCommonData()</code>.</li>
-      <li><b>Hide draft API:</b> API marked with <code>@draft</code>
-        is new and not yet stable. Applications must not rely on unstable
-        APIs from a system-level library.
-        Define <code>U_HIDE_DRAFT_API</code>, <code>U_HIDE_INTERNAL_API</code>
-        and <code>U_HIDE_SYSTEM_API</code>
-        by modifying unicode/utypes.h before installing it.</li>
-      <li><b>Only C APIs:</b> Applications must not rely on C++ APIs from a
-        system-level library because binary C++ compatibility
-        across library and compiler versions is very hard to achieve.
-        Most ICU C++ APIs are in header files that contain a comment with
-        <code>\brief C++ API</code>.
-        Consider not installing these header files.</li>
-      <li><b>Disable renaming:</b> By default, ICU library entry point names
-        have an ICU version suffix. Turn this off for a system-level installation,
-        to enable upgrading ICU without breaking applications. For example:<br />
-        <code>runConfigureICU Linux --disable-renaming</code><br />
-        The public header files from this configuration must be installed
-        for applications to include and get the correct entry point names.</li>
-    </ul>
-
-    <h3><a name="UserConfig" href="#UserConfig" id="UserConfig">User-Configurable Settings</a></h3>
-    <p>ICU4C can be customized via a number of user-configurable settings.
-    Many of them are controlled by preprocessor macros which are
-    defined in the <code>source/common/unicode/uconfig.h</code> header file.
-    Some turn off parts of ICU, for example conversion or collation,
-    trading off a smaller library for reduced functionality.
-    Other settings are recommended (see previous section)
-    but their default values are set for better source code compatibility.</p>
-
-    <p>In order to change such user-configurable settings, you can
-    either modify the <code>uconfig.h</code> header file by adding
-    a specific <code>#define ...</code> for one or more of the macros
-    before they are first tested,
-    or set the compiler's preprocessor flags (<code>CPPFLAGS</code>) to include
-    an equivalent <code>-D</code> macro definition.</p>
-
-    <h3><a name="HowToBuildWindows" href="#HowToBuildWindows" id=
-    "HowToBuildWindows">How To Build And Install On Windows</a></h3>
-
-    <p>Building International Components for Unicode requires:</p>
-
-    <ul>
-      <li>Microsoft Windows</li>
-
-      <li>Microsoft Visual C++</li>
-
-      <li><a href="#HowToBuildCygwin">Cygwin</a> is required when other versions
-      of Microsoft Visual C++ and other compilers are used to build ICU.</li>
-    </ul>
-
-    <p>The steps are:</p>
-
-    <ol>
-      <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
-      line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
-      WinZip.</li>
-
-      <li>Be sure that the ICU binary directory, <i>&lt;ICU&gt;</i>\bin\, is
-      included in the <strong>PATH</strong> environment variable. The tests will
-      not work without the location of the ICU DLL files in the path.</li>
-
-      <li>Open the "<i>&lt;ICU&gt;</i>\source\allinone\allinone.sln" workspace
-      file in Microsoft Visual Studio. (This solution includes all the
-      International Components for Unicode libraries, necessary ICU building
-      tools, and the test suite projects). Please see the <a href=
-      "#HowToBuildWindowsCommandLine">command line note below</a> if you want to
-      build from the command line instead.</li>
-
-      <li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below) 
-      and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
-
-      <li>Choose the "Build" menu and select "Rebuild Solution". If you want to
-      build the Debug and Release at the same time, see the <a href=
-      "#HowToBuildWindowsBatch">batch configuration note</a> below.</li>
-
-
-      <li>Run the tests. They can be run from the command line or from within Visual Studio.
-
-	 <h4>Running the Tests from the Windows Command Line (cmd)</h4>
-	<ul>
-	   <li>For x86 (32 bit) and Debug, use: <br />
-
-	<tt><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <i>Platform</i> <i>Configuration</i>
-		</tt> <br />
-       </li>
-	<li>So, for example:
-				 <br />
-		<tt><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x86</b> <b>Debug</b>
-		</tt>
-				<br/>  or <br />
-		<tt><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x86</b> <b>Release</b>
-		</tt>
-				<br/>  or <br />
-		<tt><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x64</b> <b>Release</b>
-		</tt></li>
-	</ul>	
-
-         <h4>Running the Tests from within Visual Studio</h4>
-
-	<ol>
-      <li>Run the C++ test suite, "intltest". To do this: set the active startup
-      project to "intltest", and press Ctrl+F5 to run it. Make sure that it
-      passes without any errors.</li>
-
-      <li>Run the C test suite, "cintltst". To do this: set the active startup
-      project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
-      passes without any errors.</li>
-
-      <li>Run the I/O test suite, "iotest". To do this: set the active startup
-      project to "iotest", and press Ctrl+F5 to run it. Make sure that it passes
-      without any errors.</li>
-
-	</ol>
-
-	</li>
-
-      <li>You are now able to develop applications with ICU by using the
-      libraries and tools in <i>&lt;ICU&gt;</i>\bin\. The headers are in
-      <i>&lt;ICU&gt;</i>\include\ and the link libraries are in
-      <i>&lt;ICU&gt;</i>\lib\. To install the ICU runtime on a machine, or ship
-      it with your application, copy the needed components from
-      <i>&lt;ICU&gt;</i>\bin\ to a location on the system PATH or to your
-      application directory.</li>
-    </ol>
-
-    <p><a name="HowToBuildWindowsCommandLine" id=
-    "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
-    Note:</strong></a> You can build ICU from the command line. Assuming that you
-    have properly installed Microsoft Visual C++ to support command line
-    execution, you can run the following command, 'devenv.com
-    <i>&lt;ICU&gt;</i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
-    use Cygwin with this compiler to build ICU, and you can refer to the <a href=
-    "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
-    section for more details.</p>
-    
-    <p><a name="HowToBuildWindowsPlatform" id=
-    "HowToBuildWindowsPlatform"><strong>Setting Active Platform
-    Note:</strong></a> Even though you are able to select "x64" as the active platform, if your operating system is 
-    not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:</p>
-
-    <ul>
-      <li>Choose "Build" menu, select "Configuration Manager...", and select
-      "Win32" or "x64" for the Active Platform Solution.</li>
-
-      <li>Another way is to select the desired build configuration from "Solution
-      Platforms" dropdown menu from the standard toolbar. It will say
-      "Win32" or "x64" in the dropdown list.</li>
-    </ul>
-
-    <p><a name="HowToBuildWindowsConfig" id=
-    "HowToBuildWindowsConfig"><strong>Setting Active Configuration
-    Note:</strong></a> To set the active configuration, two different
-    possibilities are:</p>
-
-    <ul>
-      <li>Choose "Build" menu, select "Configuration Manager...", and select
-      "Release" or "Debug" for the Active Configuration Solution.</li>
-
-      <li>Another way is to select the desired build configuration from "Solution
-      Configurations" dropdown menu from the standard toolbar. It will say
-      "Release" or "Debug" in the dropdown list.</li>
-    </ul>
-
-    <p><a name="HowToBuildWindowsBatch" id="HowToBuildWindowsBatch"><strong>Batch
-    Configuration Note:</strong></a> If you want to build the Win32 and x64 platforms and 
-    Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
-    Build...". Click the "Select All" button, and then click the "Rebuild"
-    button.</p>
-
-    <h3><a name="HowToBuildCygwin" href="#HowToBuildCygwin" id=
-    "HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a></h3>
-
-    <p>Building International Components for Unicode with this configuration
-    requires:</p>
-
-    <ul>
-      <li>Microsoft Windows</li>
-
-      <li>Microsoft Visual C++ (when gcc isn't used).</li>
-
-      <li>
-        Cygwin with the following installed: 
-
-        <ul>
-          <li>bash</li>
-
-          <li>GNU make</li>
-
-          <li>ar</li>
-
-          <li>ranlib</li>
-
-          <li>man (if you plan to look at the man pages)</li>
-        </ul>
-      </li>
-    </ul>
-
-    <p>There are two ways you can build ICU with Cygwin. You can build with gcc
-    or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
-    will depend on the Cygwin environment. If you use Microsoft Visual C++, the
-    resulting libraries and tools do not depend on Cygwin and can be more easily
-    distributed to other Windows computers (the generated man pages and shell
-    scripts still need Cygwin). To build with gcc, please follow the "<a href=
-    "#HowToBuildUNIX">How To Build And Install On UNIX</a>" instructions, while
-    you are inside a Cygwin bash shell. To build with Microsoft Visual C++,
-    please use the following instructions:</p>
-
-    <ol>
-      <li>Start the Windows "Command Prompt" window. This is different from the
-      gcc build, which requires the Cygwin Bash command prompt. The Microsoft
-      Visual C++ compiler will not work with a bash command prompt.</li>
-
-      <li>If the computer isn't set up to use Visual C++ from the command line,
-      you need to run vcvars32.bat.<br />For example:<br />"<tt>C:\Program Files\Microsoft
-      Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
-      <strong>or</strong> <br />"<tt>C:\Program Files (x86)\Microsoft Visual Studio
-      8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
-      Windows x64.</li>
-
-      <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
-      line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
-      WinZip.</li>
-
-      <li>Change directory to "icu/source", which is where you unzipped ICU.</li>
-
-      <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
-      Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
-      configuration note</a> and non-functional configure options below).</li>
-
-      <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
-      This make command should be GNU make.</li>
-
-      <li>Optionally, type <tt>"make check"</tt> to run the test suite, which
-      checks for ICU's functionality integrity (See <a href=
-      "#HowToTestWithoutGmake">testing note</a> below).</li>
-
-      <li>Type <tt>"make install"</tt> to install ICU. If you used the --prefix=
-      option on configure or runConfigureICU, ICU will be installed to the
-      directory you specified. (See <a href="#HowToInstallICU">installation
-      note</a> below).</li>
-    </ol>
-
-    <p><a name="HowToWindowsConfigureICU" id=
-    "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
-    NOTE:</strong></a> </p>
-    <p>
-    Ensure that the order of the PATH is MSVC, Cygwin, and then other PATHs. The configure 
-    script needs certain tools in Cygwin (e.g. grep).
-    </p>
-    <p>
-    Also, you may need to run <tt>"dos2unix.exe"</tt> on all of the scripts (e.g. configure)
-    in the top source directory of ICU. To avoid this issue, you can download
-    the ICU source for Unix platforms (icu-xxx.tgz).
-    </p>
-    <p>In addition to the Unix <a href=
-    "#HowToConfigureICU">configuration note</a> the following configure options
-    currently do not work on Windows with Microsoft's compiler. Some options can
-    work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
-    manually editing the files is not recommended.</p>
-
-    <ul>
-      <li><tt>--disable-renaming</tt></li>
-
-      <li><tt>--enable-tracing</tt></li>
-
-      <li><tt>--enable-rpath</tt></li>
-
-      <li><tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
-      defined in user code that links against ICU's static libraries.)</li>
-
-      <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
-      not work in this mode. Manual packaging is required to use this mode.)</li>
-    </ul>
-
-    <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX" id="HowToBuildUNIX">How
-    To Build And Install On UNIX</a></h3>
-
-    <p>Building International Components for Unicode on UNIX requires:</p>
-
-    <ul>
-      <li>A C++ compiler installed on the target machine (for example: gcc, CC,
-      xlC_r, aCC, cxx, etc...).</li>
-
-      <li>An ANSI C compiler installed on the target machine (for example:
-      cc).</li>
-
-      <li>A recent version of GNU make (3.80+).</li>
-
-      <li>For a list of z/OS tools please view the <a href="#HowToBuildZOS">z/OS
-      build section</a> of this document for further details.</li>
-    </ul>
-
-    <p>Here are the steps to build ICU:</p>
-
-    <ol>
-      <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or
-      icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <tt>"gunzip -d &lt;
-      icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -"</tt></li>
-
-      <li>Change directory to the "icu/source".</li>
-
-      <li>Run <span style='font-family: monospace;'>"chmod +x runConfigureICU configure install-sh"</span> because
-      these files may have the wrong permissions.</li>
-
-      <li>Run the <span style='font-family: monospace;'><a href="source/runConfigureICU">runConfigureICU</a></span>
-      script for your platform. (See <a href="#HowToConfigureICU">configuration
-      note</a> below).</li>
-
-      <li>Type <span style='font-family: monospace;'>"gmake"</span> (or "make" if GNU make is the default make on
-      your platform) to compile the libraries and all the data files. The proper
-      name of the GNU make command is printed at the end of the configuration
-      run, as in "You must use gmake to compile ICU".
-      <br/>
-      Note that the compilation command output may be simplified on your platform.  If this is the case, you will see just:
-      <blockquote><p style='background-color: #ddd; font-family: monospace; font-size: small'>gcc ... stubdata.c</p></blockquote>
-      rather than
-      <blockquote><p style='background-color: #ddd; font-family: monospace; font-size: small'>gcc  -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -D_REENTRANT -I../common -DU_ATTRIBUTE_DEPRECATED= -O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -c -DPIC -fPIC -o stubdata.o stubdata.c</p></blockquote>
-      .<br/>
-      If you need to see the whole compilation line,  use <span style='font-family: monospace;'>"gmake VERBOSE=1"</span>. The full compilation line will print if an error occurs.
-      </li>
-
-      <li>Optionally, type <span style='font-family: monospace;'>"gmake check"</span> to run the test suite, which
-      checks for ICU's functionality integrity (See <a href=
-      "#HowToTestWithoutGmake">testing note</a> below).</li>
-
-      <li>Type <span style='font-family: monospace;'>"gmake install"</span> to install ICU. If you used the --prefix=
-      option on configure or runConfigureICU, ICU will be installed to the
-      directory you specified. (See <a href="#HowToInstallICU">installation
-      note</a> below).</li>
-    </ol>
-
-    <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring ICU
-    NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on how
-    to run it and a list of supported platforms. You may also want to type
-    <tt>"./configure --help"</tt> to print the available configure options that
-    you may want to give runConfigureICU. If you are not using the
-    runConfigureICU script, or your platform is not supported by the script, you
-    may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
-    type <tt>"./configure"</tt>. 
-    HP-UX users, please see this <a href="#ImportantNotesHPUX">note regarding
-    HP-UX multithreaded build issues</a> with newer compilers. Solaris users,
-    please see this <a href="#ImportantNotesSolaris">note regarding Solaris
-    multithreaded build issues</a>.</p>
-
-    <p>ICU is built with strict compiler warnings enabled by default.  If this
-    causes excessive numbers of warnings on your platform, use the --disable-strict
-    option to configure to reduce the warning level.</p>
-
-    <p><a name="HowToTestWithoutGmake" id="HowToTestWithoutGmake"><strong>Running
-    The Tests From The Command Line NOTE:</strong></a> You may have to set
-    certain variables if you with to run test programs individually, that is
-    apart from "gmake check". The environment variable <strong>ICU_DATA</strong>
-    can be set to the full pathname of the data directory to indicate where the
-    locale data files and conversion mapping tables are when you are not using
-    the shared library (e.g. by using the .dat archive or the individual data
-    files). The trailing "/" is required after the directory name (e.g.
-    "$Root/source/data/out/" will work, but the value "$Root/source/data/out" is
-    not acceptable). You do not need to set <strong>ICU_DATA</strong> if the
-    complete shared data library is in your library path.</p>
-
-    <p><a name="HowToInstallICU" id="HowToInstallICU"><strong>Installing ICU
-    NOTE:</strong></a> Some platforms use package management tools to control the
-    installation and uninstallation of files on the system, as well as the
-    integrity of the system configuration. You may want to check if ICU can be
-    packaged for your package management tools by looking into the "packaging"
-    directory. (Please note that if you are using a snapshot of ICU from Subversion, it
-    is probable that the packaging scripts or related files are not up to date
-    with the contents of ICU at this time, so use them with caution).</p>
-
-    <h3><a name="HowToBuildZOS" href="#HowToBuildZOS" id="HowToBuildZOS">How To
-    Build And Install On z/OS (OS/390)</a></h3>
-
-    <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM
-    tests only the z/OS installation. You install ICU in a z/OS UNIX system
-    services file system such as HFS or zFS. On this platform, it is important
-    that you understand a few details:</p>
-
-    <ul>
-      <li>The makedep and GNU make tools are required for building ICU. If it
-      is not already installed on your system, it is available at the <a href=
-      "http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html">z/OS UNIX -
-      Tools and Toys</a> site. The PATH environment variable should be updated to
-      contain the location of this executable prior to build. Failure to add these
-      tools to your PATH will cause ICU build failures or cause pkgdata to fail
-      to run.</li>
-
-      <li>Since USS does not support using the mmap() function over NFS, it is
-      recommended that you build ICU on a local filesystem. Once ICU has been
-      built, you should not have this problem while using ICU when the data
-      library has been built as a shared library, which is this is the default
-      setting.</li>
-
-      <li>Encoding considerations: The source code assumes that it is compiled
-      with codepage ibm-1047 (to be exact, the UNIX System Services variant of
-      it). The pax command converts all of the source code files from ASCII to
-      codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
-      must not be converted, or must be converted back to their original state.
-      You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a> script
-      to do this for you automatically. It will unpackage the tar file and
-      convert all the necessary files for you automatically.</li>
-
-      <li>z/OS supports both native S/390 hexadecimal floating point and (with
-      OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
-      time option. Applications built with IEEE should use ICU DLLs that are
-      built with IEEE (and vice versa). The environment variable IEEE390=0 will
-      cause the z/OS version of ICU to be built without IEEE floating point
-      support and use the native hexadecimal floating point. By default ICU is
-      built with IEEE 754 support. Native floating point support is sufficient
-      for codepage conversion, resource bundle and UnicodeString operations, but
-      the Format APIs require IEEE binary floating point.</li>
-
-      <li>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
-      bring performance improvement opportunities to call-intensive C and C++
-      applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if
-      you are considering using XPLINK in your application that uses ICU, you
-      should consider building the XPLINK-enabled version of ICU. You need to
-      set ICU's environment variable <code>OS390_XPLINK=1</code> prior to
-      invoking the make process to produce binaries that are enabled for
-      XPLINK. The XPLINK option, which is available for z/OS 1.2 and later,
-      requires the PTF PQ69418 to build XPLINK enabled binaries.</li>
-
-      <li>ICU requires XPLINK for the icuio library. If you want to use the
-      rest of ICU without XPLINK, then you must use the --disable-icuio
-      configure option.</li>
-
-      <li>The latest versions of z/OS use <a
-      href="http://www.ibm.com/support/docview.wss?uid=swg2120240">XPLINK
-      version (C128) of the C++ standard library</a> by default. You may see <a
-      href="http://www.ibm.com/support/docview.wss?uid=swg21376279">an
-      error</a> when running with XPLINK disabled. To avoid this error,
-      set the following environment variable or similar:
-
-<pre><samp>export _CXX_PSYSIX="CEE.SCEELIB(C128N)":"CBC.SCLBSID(IOSTREAM,COMPLEX)"</samp></pre>
-      </li>
-      
-
-      <li>The rest of the instructions for building and testing ICU on z/OS with
-      UNIX System Services are the same as the <a href="#HowToBuildUNIX">How To
-      Build And Install On UNIX</a> section.</li>
-    </ul>
-
-    <h4>z/OS (Batch/PDS) support outside the UNIX system services
-    environment</h4>
-
-    <p>By default, ICU builds its libraries into the UNIX file system (HFS). In
-    addition, there is a z/OS specific environment variable (OS390BATCH) to build
-    some libraries into the z/OS native file system. This is useful, for example,
-    when your application is externalized via Job Control Language (JCL).</p>
-
-    <p>The OS390BATCH environment variable enables non-UNIX support including the
-    batch environment. When OS390BATCH is set, the libicui18n<i>XX</i>.dll,
-    libicuuc<i>XX</i>.dll, and libicudt<i>XX</i>e.dll binaries are built into
-    data sets (the native file system). Turning on OS390BATCH does not turn off
-    the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will
-    always be created.</p>
-
-    <p>Two additional environment variables indicate the names of the z/OS data
-    sets to use. The LOADMOD environment variable identifies the name of the data
-    set that contains the dynamic link libraries (DLLs) and the LOADEXP
-    environment variable identifies the name of the data set that contains the
-    side decks, which are normally the files with the .x suffix in the UNIX file
-    system.</p>
-
-    <p>A data set is roughly equivalent to a UNIX or Windows file. For most kinds
-    of data sets the operating system maintains record boundaries. UNIX and
-    Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each
-    data set of these two types contains a directory. It is like a UNIX
-    directory. Each "file" is called a "member". Each member name is limited to
-    eight bytes, normally EBCDIC.</p>
-
-    <p>Here is an example of some environment variables that you can set prior to
-    building ICU:</p>
-<pre>
-<samp>OS390BATCH=1
-LOADMOD=<i>USER</i>.ICU.LOAD
-LOADEXP=<i>USER</i>.ICU.EXP</samp>
-</pre>
-
-    <p>The PDS member names for the DLL file names are as follows:</p>
-<pre>
-<samp>IXMI<i>XX</i>IN --&gt; libicui18n<i>XX</i>.dll
-IXMI<i>XX</i>UC --&gt; libicuuc<i>XX</i>.dll
-IXMI<i>XX</i>DA --&gt; libicudt<i>XX</i>e.dll</samp>
-</pre>
-
-    <p>You should point the LOADMOD environment variable at a partitioned data
-    set extended (PDSE) and point the LOADEXP environment variable at a
-    partitioned data set (PDS). The PDSE can be allocated with the following
-    attributes:</p>
-<pre>
-<samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD
-Management class. . : <i>**None**</i>
-Storage class . . . : <i>BASE</i>
-Volume serial . . . : <i>TSO007</i>
-Device type . . . . : <i>3390</i>
-Data class. . . . . : <i>LOAD</i>
-Organization  . . . : PO
-Record format . . . : U
-Record length . . . : 0
-Block size  . . . . : <i>32760</i>
-1st extent cylinders: 1
-Secondary cylinders : 5
-Data set name type  : LIBRARY</samp>
-</pre>
-
-    <p>The PDS can be allocated with the following attributes:</p>
-<pre>
-<samp>Data Set Name . . . : <i>USER</i>.ICU.EXP
-Management class. . : <i>**None**</i>
-Storage class . . . : <i>BASE</i>
-Volume serial . . . : <i>TSO007</i>
-Device type . . . . : <i>3390</i>
-Data class. . . . . : <i>**None**</i>
-Organization  . . . : PO
-Record format . . . : FB
-Record length . . . : 80
-Block size  . . . . : <i>3200</i>
-1st extent cylinders: 3
-Secondary cylinders : 3
-Data set name type  : PDS</samp>
-</pre>
-
-    <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
-    "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)</a></h3>
-
-    <p>Before you start building ICU, ICU requires the following:</p>
-
-    <ul>
-      <li>QSHELL interpreter installed (install base option 30, operating system)
-      <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></li>
-
-      <li>ILE C/C++ Compiler installed on the system</li>
-
-      <li>The latest IBM tools for Developers for IBM i &mdash;
-        <a href='http://www.ibm.com/servers/enable/site/porting/tools/'>http://www.ibm.com/servers/enable/site/porting/tools/</a>
-        <!-- formerly: http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html -->
-      </li>
-    </ul>
-
-    <p>The following describes how to setup and build ICU. For background
-    information, you should look at the <a href="#HowToBuildUNIX">UNIX build
-    instructions</a>.</p>
-
-    <ol>
-      <li>
-        Create target library. This library will be the target for the
-        resulting modules, programs and service programs. You will specify this
-        library on the OUTPUTDIR environment variable.
-<pre>
-<samp>CRTLIB LIB(<i>libraryname</i>)
-ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>') REPLACE(*YES)   </samp>
-</pre>
-      </li>
-
-      <li>
-      Set up the following environment variables and job characteristics in your build process
-<pre>
-<samp>ADDENVVAR ENVVAR(MAKE) VALUE('gmake') REPLACE(*YES)
-CHGJOB CCSID(37)</samp>
-</pre></li>
-
-      <li>Run <tt>'QSH'</tt></li>
-      
-      <li>Run: <br /><tt>export PATH=/QIBM/ProdData/DeveloperTools/qsh/bin:$PATH:/QOpenSys/usr/bin</tt>
-      </li>
-
-      <li>Run <b><tt>gzip -d</tt></b> on the ICU source code compressed tar archive
-      (icu-<i>X</i>.<i>Y</i>.tgz).</li>
-
-      <li>Run <a href='as_is/os400/unpax-icu.sh'>unpax-icu.sh</a> on the tar file generated from the previous step.</li>
-
-      <li>Change your current directory to icu/as_is/os400.</li>
-      <li>Run <tt>qsh bldiculd.sh</tt> to build the program ICULD which ICU will use for linkage.</li>
-
-      <li>Change your current directory to icu/source.</li>
-
-      <li>Run <tt>'./runConfigureICU IBMi'</tt>  (See <a href="#HowToConfigureICU">configuration
-      note</a> for details). Note that --with-data-packaging=archive and setting the --prefix are recommended, building in default (dll) mode is currently not supported.</li>
-
-      <li>Run <tt>'gmake'</tt> to build ICU. (Do not use the -j option)</li>
-
-      <li>Run <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> to build and run the tests.
-      You can look at the <a href=
-      "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
-      iSeries Information Center</a> for more details regarding the running of multiple threads
-      on IBM i.</li>
-    </ol>
-
-      <!-- cross -->
-    <h3><a name="HowToCrossCompileICU" href="#HowToCrossCompileICU" id="HowToCrossCompileICU">How To Cross Compile ICU</a></h3>
-		<p>This section will explain how to build ICU on one platform, but to produce binaries intended to run on another. This is commonly known as a cross compile.</p>
-		<p>Normally, in the course of a build, ICU needs to run the tools that it builds in order to generate and package data and test-data.In a cross compilation setting, ICU is built on a different system from that which it eventually runs on. An example might be, if you are building for a small/headless system (such as an embedded device), or a system where you can't easily run the ICU command line tools (any non-UNIX-like system).</p>
-		<p>To reduce confusion, we will here refer to the "A" and the "B" system.System "A" is the actual system we will be running on- the only requirements on it is are it is able to build ICU from the command line targetting itself (with configure or runConfigureICU), and secondly, that it also contain the correct toolchain for compiling and linking for the resultant platform, referred to as the "B" system.</p>
-		<p>The autoconf docs use the term "build" for A, and "host" for B. More details at: <a href="http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html#Specifying-Names">http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html</a></p>
-		<p>Three initially-empty directories will be used in this example:</p>
-		<table summary="Three directories used in this example" class="docTable">
-			<tr>
-				<th align="left">/icu</th><td>a copy of the ICU source</td>
-			</tr>
-			<tr>
-				<th align="left">/buildA</th><td>an empty directory, it will contain ICU built for A<br />(MacOSX in this case)</td>
-			</tr>
-			<tr>
-				<th align="left">/buildB</th><td>an empty directory, it will contain ICU built for B<br />(HaikuOS in this case)</td>
-			</tr>
-		</table>
-		
-		<ol>
-		<li>Check out or unpack the ICU source code into the /icu directory.You will have the directories /icu/source, etc.</li>
-		<li>Build ICU in /buildA normally (using runConfigureICU or configure):
-<pre class="samp">cd /buildA
-sh /icu/source/runConfigureICU <strong>MacOSX</strong>
-gnumake
-</pre>
-		</li>
-		<li>Set PATH or other variables as needed, such as CPPFLAGS.</li>
-		<li>Build ICU in /buildB<br />
-			<div class="note"><b>Note:</b> "<code>--with-cross-build</code>" takes an absolute path.</div>
-<pre class="samp">cd /buildB
-sh /icu/source/configure --host=<strong>i586-pc-haiku</strong> --with-cross-build=<strong>/buildA</strong>
-gnumake</pre>
-		</li>
-		<li>Tests and testdata can be built with "gnumake tests".</li>
-	</ol>
-      <!-- end cross -->
-
-    <!-- end build environment -->
-
-    <h2><a name="HowToPackage" href="#HowToPackage" id="HowToPackage">How To
-    Package ICU</a></h2>
-
-    <p>There are many ways that a person can package ICU with their software
-    products. Usually only the libraries need to be considered for packaging.</p>
-
-    <p>On UNIX, you should use "<tt>gmake install</tt>" to make it easier to
-    develop and package ICU. The bin, lib and include directories are needed to
-    develop applications that use ICU. These directories will be created relative
-    to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a href=
-    "#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on Windows,
-    a similar directory structure is built.</p>
-
-    <p>When changes have been made to the standard ICU distribution, it is
-    recommended that at least one of the following guidelines be followed for
-    special packaging.</p>
-
-    <ol>
-      <li>Add a suffix name to the library names. This can be done with the
-      --with-library-suffix configure option.</li>
-
-      <li>The installation script should install the ICU libraries into the
-      application's directory.</li>
-    </ol>
-
-    <p>Following these guidelines prevents other applications that use a standard
-    ICU distribution from conflicting with any libraries that you need. On
-    operating systems that do not have a standard C++ ABI (name mangling) for
-    compilers, it is recommended to do this special packaging anyway. More
-    details on customizing ICU are available in the <a href=
-    "http://userguide.icu-project.org/">User's Guide</a>. The <a href=
-    "#SourceCode">ICU Source Code Organization</a> section of this readme.html
-    gives a more complete description of the libraries.</p>
-
-    <table class="docTable" summary=
-    "ICU has several libraries for you to use.">
-      <caption>
-        Here is an example of libraries that are frequently packaged.
-      </caption>
-
-      <tr>
-        <th scope="col">Library Name</th>
-
-        <th scope="col">Windows Filename</th>
-
-        <th scope="col">Linux Filename</th>
-
-        <th scope="col">Comment</th>
-      </tr>
-
-      <tr>
-        <td>Data Library</td>
-
-        <td>icudt<i>XY</i>l.dll</td>
-
-        <td>libicudata.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>Data required by the Common and I18n libraries. There are many ways
-        to package and <a href=
-        "http://userguide.icu-project.org/icudata">customize this
-        data</a>, but by default this is all you need.</td>
-      </tr>
-
-      <tr>
-        <td>Common Library</td>
-
-        <td>icuuc<i>XY</i>.dll</td>
-
-        <td>libicuuc.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>Base library required by all other ICU libraries.</td>
-      </tr>
-
-      <tr>
-        <td>Internationalization (i18n) Library</td>
-
-        <td>icuin<i>XY</i>.dll</td>
-
-        <td>libicui18n.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>A library that contains many locale based internationalization (i18n)
-        functions.</td>
-      </tr>
-
-      <tr>
-        <td>Layout Engine</td>
-
-        <td>icule<i>XY</i>.dll</td>
-
-        <td>libicule.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>An optional engine for doing font layout.</td>
-      </tr>
-
-      <tr>
-        <td>Layout Extensions Engine</td>
-
-        <td>iculx<i>XY</i>.dll</td>
-
-        <td>libiculx.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>An optional engine for doing font layout that uses parts of ICU.</td>
-      </tr>
-
-      <tr>
-        <td>ICU I/O (Unicode stdio) Library</td>
-
-        <td>icuio<i>XY</i>.dll</td>
-
-        <td>libicuio.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>An optional library that provides a stdio like API with Unicode
-        support.</td>
-      </tr>
-
-      <tr>
-        <td>Tool Utility Library</td>
-
-        <td>icutu<i>XY</i>.dll</td>
-
-        <td>libicutu.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>An internal library that contains internal APIs that are only used by
-        ICU's tools. If you do not use ICU's tools, you do not need this
-        library.</td>
-      </tr>
-    </table>
-
-    <p>Normally only the above ICU libraries need to be considered for packaging.
-    The versionless symbolic links to these libraries are only needed for easier
-    development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of the name are the
-    version numbers of ICU. For example, ICU 2.0.2 would have the name
-    libicuuc.so.20.2 for the common library. The exact format of the library
-    names can vary between platforms due to how each platform can handles library
-    versioning.</p>
-
-    <h2><a name="ImportantNotes" href="#ImportantNotes" id=
-    "ImportantNotes">Important Notes About Using ICU</a></h2>
-
-    <h3><a name="ImportantNotesMultithreaded" href="#ImportantNotesMultithreaded"
-    id="ImportantNotesMultithreaded">Using ICU in a Multithreaded
-    Environment</a></h3>
-
-    <p>Some versions of ICU require calling the <code>u_init()</code> function
-    from <code>uclean.h</code> to ensure that ICU is initialized properly. In
-    those ICU versions, <code>u_init()</code> must be called before ICU is used
-    from multiple threads. There is no harm in calling <code>u_init()</code> in a
-    single-threaded application, on a single-CPU machine, or in other cases where
-    <code>u_init()</code> is not required.</p>
-
-    <p>In addition to ensuring thread safety, <code>u_init()</code> also attempts
-    to load at least one ICU data file. Assuming that all data files are packaged
-    together (or are in the same folder in files mode), a failure code from
-    <code>u_init()</code> usually means that the data cannot be found. In this
-    case, the data may not be installed properly, or the application may have
-    failed to call <code>udata_setCommonData()</code> or
-    <code>u_setDataDirectory()</code> which specify to ICU where it can find its
-    data.</p>
-
-    <p>Since <code>u_init()</code> will load only one or two data files, it
-    cannot guarantee that all of the data that an application needs is available.
-    It cannot check for all data files because the set of files is customizable,
-    and some ICU services work without loading any data at all. An application
-    should always check for error codes when opening ICU service objects (using
-    <code>ucnv_open()</code>, <code>ucol_open()</code>, C++ constructors,
-    etc.).</p>
-
-    <h4>ICU 3.4 and later</h4>
-
-    <p>ICU 3.4 self-initializes properly for multi-threaded use. It achieves this
-    without performance penalty by hardcoding the core Unicode properties data,
-    at the cost of some flexibility. (For details see Jitterbug 4497.)</p>
-
-    <p><code>u_init()</code> can be used to check for data loading. It tries to
-    load the converter alias table (<code>cnvalias.icu</code>).</p>
-
-    <h4>ICU 2.6..3.2</h4>
-
-    <p>These ICU versions require a call to <code>u_init()</code> before
-    multi-threaded use. The services that are directly affected are those that
-    don't have a service object and need to be fast: normalization and character
-    properties.</p>
-
-    <p><code>u_init()</code> loads and initializes the data files for
-    normalization and character properties (<code>unorm.icu</code> and
-    <code>uprops.icu</code>) and can therefore also be used to check for data
-    loading.</p>
-
-    <h4>ICU 2.4 and earlier</h4>
-
-    <p>ICU 2.4 and earlier versions were not prepared for multithreaded use on
-    multi-CPU platforms where the CPUs implement weak memory coherency. These
-    CPUs include: Power4, Power5, Alpha, Itanium. <code>u_init()</code> was not
-    defined yet.</p>
-
-    <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX" id=
-    "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
-    HP-UX</a></h4>
-
-    <p>When ICU is built with aCC on HP-UX, the <a
-    href="http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=eb08b3f1eee02110b3f1eee02110275d6e10RCRD">-AA</a>
-    compiler flag is used. It is required in order to use the latest
-    &lt;iostream&gt; API in a thread safe manner. This compiler flag affects the
-    version of the C++ library being used. Your applications will also need to
-    be compiled with -AA in order to use ICU.</p>
-
-    <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id=
-    "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
-    Solaris</a></h4>
-
-    <h5>Linking on Solaris</h5>
-
-    <p>In order to avoid synchronization and threading issues, developers are
-    <strong>suggested</strong> to strictly follow the compiling and linking
-    guidelines for multithreaded applications, specified in the following
-    document from Sun Microsystems. Most notably, pay strict attention to the
-    following statements from Sun:</p>
-
-    <blockquote>
-      <p>To use libthread, specify -lthread before -lc on the ld command line, or
-      last on the cc command line.</p>
-
-      <p>To use libpthread, specify -lpthread before -lc on the ld command line,
-      or last on the cc command line.</p>
-    </blockquote>
-
-    <p>Failure to do this may cause spurious lock conflicts, recursive mutex
-    failure, and deadlock.</p>
-
-    <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
-    Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
-     <a href=
-    "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>
-
-    <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
-    "ImportantNotesWindows">Windows Platform</a></h3>
-
-    <p>If you are building on the Win32 platform, it is important that you
-    understand a few of the following build details.</p>
-
-    <h4>DLL directories and the PATH setting</h4>
-
-    <p>As delivered, the International Components for Unicode build as several
-    DLLs, which are placed in the "<i>&lt;ICU&gt;</i>\bin" directory. You must
-    add this directory to the PATH environment variable in your system, or any
-    executables you build will not be able to access International Components for
-    Unicode libraries. Alternatively, you can copy the DLL files into a directory
-    already in your PATH, but we do not recommend this. You can wind up with
-    multiple copies of the DLL and wind up using the wrong one.</p>
-
-    <h4><a name="ImportantNotesWindowsPath" id=
-    "ImportantNotesWindowsPath">Changing your PATH</a></h4>
-
-    <p><strong>Windows 2000/XP</strong>: Use the System Icon in the Control
-    Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
-    button. Select the variable PATH in the lower box, and select the lower
-    "Edit..." button. In the "Variable Value" box, append the string
-    ";<i>&lt;ICU&gt;</i>\bin" to the end of the path string. If there is
-    nothing there, just type in "<i>&lt;ICU&gt;</i>\bin". Click the Set button,
-    then the OK button.</p>
-
-    <p>Note: When packaging a Windows application for distribution and
-    installation on user systems, copies of the ICU DLLs should be included with
-    the application, and installed for exclusive use by the application. This is
-    the only way to insure that your application is running with the same version
-    of ICU, built with exactly the same options, that you developed and tested
-    with. Refer to Microsoft's guidelines on the usage of DLLs, or search for the
-    phrase "DLL hell" on <a href=
-    "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p>
-
-    <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX" id=
-    "ImportantNotesUNIX">UNIX Type Platform</a></h3>
-
-    <p>If you are building on a UNIX platform, and if you are installing ICU in a
-    non-standard location, you may need to add the location of your ICU libraries
-    to your <strong>LD_LIBRARY_PATH</strong> or <strong>LIBPATH</strong>
-    environment variable (or the equivalent runtime library path environment
-    variable for your system). The ICU libraries may not link or load properly
-    without doing this.</p>
-
-    <p>Note that if you do not want to have to set this variable, you may instead
-    use the --enable-rpath option at configuration time. This option will
-    instruct the linker to always look for the libraries where they are
-    installed. You will need to use the appropriate linker options when linking
-    your own applications and libraries against ICU, too. Please refer to your
-    system's linker manual for information about runtime paths. The use of rpath
-    also means that when building a new version of ICU you should not have an
-    older version installed in the same place as the new version's installation
-    directory, as the older libraries will used during the build, instead of the
-    new ones, likely leading to an incorrectly build ICU. This is the proper
-    behavior of rpath.</p>
-
-    <h2><a name="PlatformDependencies" href="#PlatformDependencies" id=
-    "PlatformDependencies">Platform Dependencies</a></h2>
-
-    <h3><a name="PlatformDependenciesNew" href="#PlatformDependenciesNew" id=
-    "PlatformDependenciesNew">Porting To A New Platform</a></h3>
-
-    <p>If you are using ICU's Makefiles to build ICU on a new platform, there are
-    a few places where you will need to add or modify some files. If you need
-    more help, you can always ask the <a href=
-    "http://site.icu-project.org/contacts">icu-support mailing list</a>. Once
-    you have finished porting ICU to a new platform, it is recommended that you
-    contribute your changes back to ICU via the icu-support mailing list. This
-    will make it easier for everyone to benefit from your work.</p>
-
-    <h4>Data For a New Platform</h4>
-
-    <p>For some people, it may not be necessary for completely build ICU. Most of
-    the makefiles and build targets are for tools that are used for building
-    ICU's data, and an application's data (when an application uses ICU resource
-    bundles for its data).</p>
-
-    <p>Data files can be built on a different platform when both platforms share
-    the same endianness and the same charset family. This assertion does not
-    include platform dependent DLLs/shared/static libraries. For details see the
-    User Guide <a href="http://userguide.icu-project.org/icudata">ICU
-    Data</a> chapter.</p>
-
-    <p>ICU 3.6 removes the requirement that ICU be completely built in the native
-    operating environment. It adds the icupkg tool which can be run on any
-    platform to turn binary ICU data files from any one of the three formats into
-    any one of the other data formats. This allows a application to use ICU data
-    built anywhere to be used for any other target platform.</p>
-
-    <p><strong>WARNING!</strong> Building ICU without running the tests is not
-    recommended. The tests verify that ICU is safe to use. It is recommended that
-    you try to completely port and test ICU before using the libraries for your
-    own application.</p>
-
-    <h4>Adapting Makefiles For a New Platform</h4>
-
-    <p>Try to follow the build steps from the <a href="#HowToBuildUNIX">UNIX</a>
-    build instructions. If the configure script fails, then you will need to
-    modify some files. Here are the usual steps for porting to a new
-    platform:<br />
-    </p>
-
-    <ol>
-      <li>Create an mh file in icu/source/config/. You can use mh-linux or a
-      similar mh file as your base configuration.</li>
-
-      <li>Modify icu/source/aclocal.m4 to recognize your platform's mh file.</li>
-
-      <li>Modify icu/source/configure.in to properly set your <b>platform</b> C
-      Macro define.</li>
-
-      <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in
-      icu/source/ without any options. The autoconf tool is standard on most
-      Linux systems.</li>
-
-      <li>If you have any optimization options that you want to normally use, you
-      can modify icu/source/runConfigureICU to specify those options for your
-      platform.</li>
-
-      <li>Build and test ICU on your platform. It is very important that you run
-      the tests. If you don't run the tests, there is no guarentee that you have
-      properly ported ICU.</li>
-    </ol>
-
-    <h3><a name="PlatformDependenciesImpl" href="#PlatformDependenciesImpl" id=
-    "PlatformDependenciesImpl">Platform Dependent Implementations</a></h3>
-
-    <p>The platform dependencies have been mostly isolated into the following
-    files in the common library. This information can be useful if you are
-    porting ICU to a new platform.</p>
-
-    <ul>
-      <li>
-        <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br />
-         <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, ppalmos.h,
-        ..): Platform-dependent typedefs and defines:<br />
-        <br />
-         
-
-        <ul>
-          <li>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
-          uint64_t etc.</li>
-
-          <li>U_EXPORT and U_IMPORT for specifying dynamic library import and
-          export</li>
-
-          <li>String handling support for the char16_t and wchar_t types.</li>
-        </ul>
-        <br />
-      </li>
-
-      <li>
-        <strong>unicode/putil.h, putil.c</strong>: platform-dependent
-        implementations of various functions that are platform dependent:<br />
-        <br />
-         
-
-        <ul>
-          <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
-          handling special floating point values.</li>
-
-          <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting
-          platform specific time and time zone information.</li>
-
-          <li>u_getDataDirectory for getting the default data directory.</li>
-
-          <li>uprv_getDefaultLocaleID for getting the default locale
-          setting.</li>
-
-          <li>uprv_getDefaultCodepage for getting the default codepage
-          encoding.</li>
-        </ul>
-        <br />
-      </li>
-
-      <li>
-        <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
-        multithreaded applications. If you wish to use International Components
-        for Unicode in a multithreaded application, you must provide a
-        synchronization primitive that the classes can use to protect their
-        global data against simultaneous modifications. We already supply working
-        implementations for many platforms that ICU builds on.<br />
-        <br />
-      </li>
-
-      <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or
-      otherwise reading or loading files into memory. All access by ICU to data
-      from files makes use of these functions.<br />
-      <br />
-      </li>
-
-      <li>Using platform specific #ifdef macros are highly discouraged outside of
-      the scope of these files. When the source code gets updated in the future,
-      these #ifdef's can cause testing problems for your platform.</li>
-    </ul>
-    <hr />
-
-    <p>Copyright &copy; 1997-2012 International Business Machines Corporation and
-    others. All Rights Reserved.<br />
-     IBM Globalization Center of Competency - San Jos&eacute;<br />
-     4400 North First Street<br />
-     San Jos&eacute;, CA 95134<br />
-     USA</p>
-  </body>
-</html>
-
diff --git a/src/third_party/mozjs/intl/icu/source/Doxyfile.in b/src/third_party/mozjs/intl/icu/source/Doxyfile.in
deleted file mode 100644
index 4683b6b..0000000
--- a/src/third_party/mozjs/intl/icu/source/Doxyfile.in
+++ /dev/null
@@ -1,233 +0,0 @@
-# Doxyfile 1.3.7
-#  ********************************************************************
-#  * COPYRIGHT:
-#  * Copyright (c) 2004-2012, International Business Machines Corporation
-#  * and others. All Rights Reserved.
-#  ********************************************************************
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME           = "ICU @VERSION@"
-PROJECT_NUMBER         = @VERSION@
-OUTPUT_DIRECTORY       = doc
-CREATE_SUBDIRS         = NO
-OUTPUT_LANGUAGE        = English
-#USE_WINDOWS_ENCODING   = YES
-DOXYFILE_ENCODING	= UTF-8
-BRIEF_MEMBER_DESC      = YES
-REPEAT_BRIEF           = YES
-ABBREVIATE_BRIEF       = 
-ALWAYS_DETAILED_SEC    = NO
-INLINE_INHERITED_MEMB  = NO
-FULL_PATH_NAMES        = NO
-STRIP_FROM_PATH        = 
-STRIP_FROM_INC_PATH    = 
-SHORT_NAMES            = NO
-JAVADOC_AUTOBRIEF      = YES
-MULTILINE_CPP_IS_BRIEF = NO
-#DETAILS_AT_TOP         = NO
-INHERIT_DOCS           = YES
-DISTRIBUTE_GROUP_DOC   = YES
-TAB_SIZE               = 8
-ALIASES                = "memo=\par Note:\n" \
-                         "draft=\xrefitem draft \"Draft\" \"Draft List\"  This API may be changed in the future versions and was introduced in" \
-                         "stable=\xrefitem stable \"Stable\" \"Stable List\"" \
-                         "deprecated=\xrefitem deprecated \"Deprecated\" \"Deprecated List\"" \
-                         "obsolete=\xrefitem obsolete \"Obsolete\" \"Obsolete List\"" \
-                         "system=\xrefitem system \"System\" \"System List\" \n Do not use unless you know what you are doing." \
-                         "internal=\xrefitem internal \"Internal\"  \"Internal List\"  Do not use. This API is for internal use only." 
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-OPTIMIZE_OUTPUT_JAVA   = NO
-SUBGROUPING            = YES
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL            = NO
-EXTRACT_PRIVATE        = NO
-EXTRACT_STATIC         = NO
-EXTRACT_LOCAL_CLASSES  = YES
-EXTRACT_LOCAL_METHODS  = NO
-HIDE_UNDOC_MEMBERS     = NO
-HIDE_UNDOC_CLASSES     = NO
-HIDE_FRIEND_COMPOUNDS  = NO
-HIDE_IN_BODY_DOCS      = NO
-INTERNAL_DOCS          = YES
-CASE_SENSE_NAMES       = YES
-HIDE_SCOPE_NAMES       = NO
-SHOW_INCLUDE_FILES     = YES
-INLINE_INFO            = YES
-SORT_MEMBER_DOCS       = YES
-SORT_BRIEF_DOCS        = NO
-SORT_BY_SCOPE_NAME     = NO
-GENERATE_TODOLIST      = YES
-GENERATE_TESTLIST      = YES
-GENERATE_BUGLIST       = YES
-GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS       = 
-MAX_INITIALIZER_LINES  = 30
-SHOW_USED_FILES        = YES
-
-# docset
-GENERATE_DOCSET        = NO
-DOCSET_FEEDNAME        = "ICU @VERSION@"
-DOCSET_BUNDLE_ID       = org.icu-project.icu4c
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET                  = NO
-WARNINGS               = YES
-WARN_IF_UNDOCUMENTED   = YES
-WARN_IF_DOC_ERROR      = YES
-WARN_FORMAT            = "$file:$line: $text"
-WARN_LOGFILE           = 
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT                  = @srcdir@/common/unicode @srcdir@/i18n/unicode @srcdir@/io/unicode @srcdir@/layout/LEFontInstance.h @srcdir@/layout/LEGlyphStorage.h @srcdir@/layout/LELanguages.h @srcdir@/layout/LEScripts.h @srcdir@/layout/LESwaps.h @srcdir@/layout/LETypes.h @srcdir@/layout/LayoutEngine.h @srcdir@/layoutex/layout
-FILE_PATTERNS          = *.h
-RECURSIVE              = NO
-EXCLUDE                = @srcdir@/common/unicode/urename.h @srcdir@/common/unicode/udraft.h @srcdir@/common/unicode/udeprctd.h @srcdir@/common/unicode/uobslete.h @srcdir@/common/unicode/ppalmos.h  
-EXCLUDE_SYMLINKS       = NO
-EXCLUDE_PATTERNS       = config*.h
-EXAMPLE_PATH           = @srcdir@/
-EXAMPLE_PATTERNS       = 
-EXAMPLE_RECURSIVE      = NO
-IMAGE_PATH             = 
-INPUT_FILTER           = 
-FILTER_SOURCE_FILES    = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER         = YES
-INLINE_SOURCES         = NO
-STRIP_CODE_COMMENTS    = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION    = YES
-VERBATIM_HEADERS       = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX     = YES
-COLS_IN_ALPHA_INDEX    = 5
-IGNORE_PREFIX          = 
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML          = YES
-HTML_OUTPUT            = html
-HTML_FILE_EXTENSION    = .html
-HTML_HEADER            = 
-HTML_FOOTER            = 
-HTML_STYLESHEET        = 
-HTML_ALIGN_MEMBERS     = YES
-GENERATE_HTMLHELP      = NO
-CHM_FILE               = 
-HHC_LOCATION           = 
-GENERATE_CHI           = NO
-BINARY_TOC             = NO
-TOC_EXPAND             = NO
-DISABLE_INDEX          = NO
-ENUM_VALUES_PER_LINE   = 4
-GENERATE_TREEVIEW      = NO
-TREEVIEW_WIDTH         = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX         = NO
-LATEX_OUTPUT           = latex
-LATEX_CMD_NAME         = latex
-MAKEINDEX_CMD_NAME     = makeindex
-COMPACT_LATEX          = NO
-PAPER_TYPE             = a4wide
-EXTRA_PACKAGES         = 
-LATEX_HEADER           = 
-PDF_HYPERLINKS         = NO
-USE_PDFLATEX           = NO
-LATEX_BATCHMODE        = NO
-LATEX_HIDE_INDICES     = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF           = NO
-RTF_OUTPUT             = rtf
-COMPACT_RTF            = NO
-RTF_HYPERLINKS         = NO
-RTF_STYLESHEET_FILE    = 
-RTF_EXTENSIONS_FILE    = 
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN           = NO
-MAN_OUTPUT             = man
-MAN_EXTENSION          = .3
-MAN_LINKS              = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML           = NO
-XML_OUTPUT             = xml
-XML_SCHEMA             = 
-XML_DTD                = 
-XML_PROGRAMLISTING     = YES
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF   = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD       = NO 
-PERLMOD_LATEX          = YES
-PERLMOD_PRETTY         = YES
-PERLMOD_MAKEVAR_PREFIX = 
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING   = YES
-MACRO_EXPANSION        = YES
-EXPAND_ONLY_PREDEF     = YES
-SEARCH_INCLUDES        = YES
-INCLUDE_PATH           = 
-INCLUDE_FILE_PATTERNS  = 
-PREDEFINED             = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END=  U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_HAVE_STD_STRING=1 U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 
-EXPAND_AS_DEFINED      = 
-SKIP_FUNCTION_MACROS   = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-TAGFILES               = 
-GENERATE_TAGFILE       =  "@builddir@/doc/html/icudocs.tag"
-ALLEXTERNALS           = NO
-EXTERNAL_GROUPS        = YES
-PERL_PATH              = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = YES
-HIDE_UNDOC_RELATIONS   = YES
-HAVE_DOT               = NO
-CLASS_GRAPH            = YES
-COLLABORATION_GRAPH    = YES
-UML_LOOK               = NO
-TEMPLATE_RELATIONS     = NO
-INCLUDE_GRAPH          = YES
-INCLUDED_BY_GRAPH      = YES
-CALL_GRAPH             = NO
-CALLER_GRAPH		= NO
-GRAPHICAL_HIERARCHY    = YES
-DOT_IMAGE_FORMAT       = png
-DOT_PATH               = 
-#DOT_FONTNAME	       = FreeSans
-DOTFILE_DIRS           = 
-MAX_DOT_GRAPH_WIDTH    = 1024
-MAX_DOT_GRAPH_HEIGHT   = 1024
-MAX_DOT_GRAPH_DEPTH    = 0
-GENERATE_LEGEND        = YES
-DOT_CLEANUP            = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
-#---------------------------------------------------------------------------
-SEARCHENGINE           = NO
diff --git a/src/third_party/mozjs/intl/icu/source/Makefile.in b/src/third_party/mozjs/intl/icu/source/Makefile.in
deleted file mode 100644
index 0f4b3e2..0000000
--- a/src/third_party/mozjs/intl/icu/source/Makefile.in
+++ /dev/null
@@ -1,382 +0,0 @@
-#******************************************************************************
-#
-#   Copyright (C) 1998-2012, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-#******************************************************************************
-## Top-level Makefile.in for ICU
-## Stephen F. Booth
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-
-top_builddir = .
-
-include $(top_builddir)/icudefs.mk
-
-docdir = $(datadir)/doc
-docsubdir = $(PACKAGE)$(ICULIBDASHSUFFIX)/html
-docfilesdir = doc/html
-docfiles = $(docfilesdir)/*.png $(docfilesdir)/*.html $(docfilesdir)/*.css $(docfilesdir)/*.tag 
-docsrchdir = $(docfilesdir)/search
-docsrchfiles = $(docsrchdir)/*
-
-##
-
-## Build directory information
-subdir = .
-
-#AUTOCONF = @AUTOCONF@
-
-## Optional directory setup
-@LAYOUT_TRUE@LAYOUT = layout layoutex
-@ICUIO_TRUE@ICUIO = io
-@EXTRAS_TRUE@EXTRA = extra
-@TESTS_TRUE@TEST = test
-@SAMPLES_TRUE@SAMPLE = samples
-
-## pkgconfig setup. Always have uc and i18n. Others are optional.
-ALL_PKGCONFIG_SUFFIX=uc i18n
-@LAYOUT_TRUE@ALL_PKGCONFIG_SUFFIX+= le lx
-@ICUIO_TRUE@ALL_PKGCONFIG_SUFFIX+= io
-
-DOXYGEN = @DOXYGEN@
-DOCZIP = icu-docs.zip
-
-## Files to remove for 'make clean'
-CLEANFILES = *~
-
-ALL_PKGCONFIG_FILES=$(ALL_PKGCONFIG_SUFFIX:%=$(top_builddir)/config/icu-%.pc)
-
-## Files built (autoconfed) and installed
-INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config @platform_make_fragment@ $(EXTRA_DATA:%=$(DESTDIR)$(pkglibdir)/%) $(ALL_PKGCONFIG_FILES)
-
-## Files built (autoconfed) but not installed
-LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk
-
-DOCDIRS = common i18n
-SUBDIRS =  stubdata common i18n $(LAYOUT) tools data $(ICUIO) $(EXTRA) $(SAMPLE) $(TEST)
-
-SECTION = 1
-
-MANX_FILES = config/icu-config.$(SECTION)
-
-ALL_MAN_FILES = $(MANX_FILES)
-
-## Extra files to install [nothing at present]
-EXTRA_DATA =
-
-## List of phony targets
-.PHONY : all all-local all-recursive install install-local install-udata install-udata-files install-udata-dlls		\
-install-recursive clean clean-local clean-recursive distclean		\
-distclean-local distclean-recursive doc dist dist-local dist-recursive	\
-check check-local check-recursive clean-recursive-with-twist install-icu \
-doc install-doc tests icu4j-data icu4j-data-install update-windows-makefiles xcheck-local xcheck-recursive xperf xcheck xperf-recursive \
-check-exhaustive check-exhaustive-local check-exhaustive-recursive releaseDist
-
-## Clear suffix list
-.SUFFIXES :
-
-## List of standard targets
-all: all-local all-recursive
-install: install-recursive install-local
-clean: clean-recursive-with-twist clean-local
-distclean : distclean-recursive distclean-local
-dist: dist-recursive dist-local
-check: all check-recursive
-check-recursive: all
-xcheck: all xcheck-recursive
-xperf: all xperf-recursive
-check-exhaustive: all check-exhaustive-recursive
-
-check-exhaustive-local: check-local
-
-xcheck-recursive: all xcheck-local
-	@$(MAKE) -C test xcheck
-
-xperf-recursive: all tests
-	@$(MAKE) -C test/perf xperf
-
-$(top_builddir)/config/icuinfo.xml: all
-	@$(MAKE) -C tools/icuinfo check
-
-ifeq ($(DOXYGEN),)
-doc doc-searchengine:
-	@echo you need Doxygen to generate documentation. Doxygen can be found on the Web
-	@echo at http://www.doxygen.org/
-else
-doc: doc/html/index.html
-
-doc-searchengine: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
-	sed < Doxyfile -e 's%[^#]*SEARCHENGINE.*%SEARCHENGINE=YES%' | $(DOXYGEN) -
-	@echo adding links from non-namespaced class files
-	find doc/html -name 'classicu_1_1*' -print | sed -e 's%^\(.*class\)icu_1_1\(.*\)$$%ln & \1\2%' | sh
-	@echo Docs created - WARNING, probably contains non-GPL .js files
-
-doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
-	$(DOXYGEN)
-	@echo adding links from non-namespaced class files
-	find doc/html -name 'classicu_1_1*' -print | sed -e 's%^\(.*class\)icu_1_1\(.*\)$$%ln & \1\2%' | sh
-
-Doxyfile: $(srcdir)/Doxyfile.in
-	CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-$(DOCZIP): doc
-	-$(RMV) $(DOCZIP)
-	( cd doc/html ; zip -r ../../$(DOCZIP) * )
-endif
-
-LOCAL_SUBDIRS = $(SUBDIRS)
-CLEAN_FIRST_SUBDIRS = tools
-
-$(LIBDIR) $(BINDIR):
-	-$(MKINSTALLDIRS) $@
-
-## Recursive targets
-all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive check-exhaustive-recursive: $(LIBDIR) $(BINDIR)
-	@dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \
-	  echo "$(MAKE)[$(MAKELEVEL)]: Making \`$$target' in \`$$subdir'"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-local"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) RECURSIVE=YES $$local_target) || exit; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) "$$target-local" || exit; \
-	fi
-
-clean-recursive-with-twist:
-	$(MAKE) clean-recursive LOCAL_SUBDIRS='$(CLEAN_FIRST_SUBDIRS) $(filter-out $(CLEAN_FIRST_SUBDIRS),$(LOCAL_SUBDIRS))'
-
-all-local: $(srcdir)/configure $(LOCAL_BUILT_FILES) $(INSTALLED_BUILT_FILES)
-ifndef VERBOSE
-	@echo "Note: rebuild with \"$(MAKE) VERBOSE=1 $(MAKECMDGOALS)\" to show all compiler parameters."
-endif
-install-local: install-icu install-manx
-
-install-icu: $(INSTALLED_BUILT_FILES)
-	@$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/config
-	@$(MKINSTALLDIRS) $(DESTDIR)$(pkglibdir)
-	@$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
-	@$(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
-	$(INSTALL_DATA) @platform_make_fragment@ $(DESTDIR)$(pkgdatadir)/config/@platform_make_fragment_name@
-	$(INSTALL_SCRIPT) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(pkgdatadir)/mkinstalldirs
-	$(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir)/pkgconfig
-	$(INSTALL_DATA) $(ALL_PKGCONFIG_FILES) $(DESTDIR)$(libdir)/pkgconfig/
-	$(INSTALL_DATA) $(top_srcdir)/../license.html $(DESTDIR)$(pkgdatadir)/license.html
-	$(INSTALL_SCRIPT) $(top_builddir)/config/icu-config $(DESTDIR)$(bindir)/icu-config
-	$(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc
-	$(INSTALL_DATA) $(top_builddir)/config/pkgdata.inc $(DESTDIR)$(pkglibdir)/pkgdata.inc
-#	@echo icuinfo.xml is built after make check.
-#	-$(INSTALL_DATA) $(top_builddir)/config/icuinfo.xml $(DESTDIR)$(pkglibdir)/icuinfo.xml
-	cd $(DESTDIR)$(pkglibdir)/..; \
-	    $(RM) current && ln -s $(VERSION) current; \
-	    $(RM) Makefile.inc && ln -s current/Makefile.inc Makefile.inc; \
-	    $(RM) pkgdata.inc && ln -s current/pkgdata.inc pkgdata.inc
-
-ifeq ($(DOXYGEN),)
-install-doc:
-else
-install-doc: doc
-	$(RM) -r $(DESTDIR)$(docdir)/$(docsubdir)
-	$(MKINSTALLDIRS) $(DESTDIR)$(docdir)/$(docsubdir)
-	$(INSTALL_DATA) $(docfiles) $(DESTDIR)$(docdir)/$(docsubdir)
-
-endif
-
-$(DESTDIR)$(pkglibdir)/%: $(top_srcdir)/../data/%
-	$(INSTALL_DATA) $< $@
-
-# Build the tests, but don't run them.
-tests: all
-	$(MAKE) -C $(top_builddir)/test
-
-clean-local:
-	test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
-	-$(RMV) "test-*.xml"
-	-$(RMV) "perf-*.xml"
-	-$(RMV) $(ALL_PKGCONFIG_FILES) $(top_builddir)/config/icuinfo.xml
-	$(RMV) Doxyfile doc $(DOCZIP)
-
-distclean-local: clean-local
-	$(RMV) $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config $(top_builddir)/config/icu.pc $(ALL_PKGCONFIG_FILES)
-	$(RMV) config.cache config.log config.status $(top_builddir)/config/icucross.mk autom4te.cache uconfig.h.prepend
-	$(RMV) Makefile config/Makefile icudefs.mk $(LIBDIR) $(BINDIR)
-	-$(RMV) dist
-
-check-local: xcheck-local
-	-$(RMV) test-local.xml
-
-xcheck-local: $(top_builddir)/config/icu-config $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc
-	@echo verifying that icu-config --selfcheck can operate
-	@test "passed" = "$(shell $(top_builddir)/config/icu-config --selfcheck 2>&1)" || (echo "FAIL: icu-config could not run properly." ; exit 1)
-	@echo verifying that $(MAKE) -f Makefile.inc selfcheck can operate
-	@test "passed" = "$(shell $(MAKE) --no-print-directory -f $(top_builddir)/config/Makefile.inc SELFCHECK=1 selfcheck)" || (echo "FAIL: Makefile.inc could not run properly." ; exit 1 )
-	@echo "PASS: config selfcheck OK"
-
-#$(srcdir)/configure : $(srcdir)/configure.in $(top_srcdir)/aclocal.m4
-#	cd $(srcdir) && $(AUTOCONF)
-
-icudefs.mk: $(srcdir)/icudefs.mk.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-		&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-config/icucross.mk: $(top_builddir)/icudefs.mk  $(top_builddir)/Makefile
-	@echo rebuilding $@
-	@(echo "CROSS_ICU_VERSION=$(VERSION)" ;\
-	  echo "TOOLEXEEXT=$(EXEEXT)" \
-	   ) > $@
-	@(echo 'TOOLBINDIR=$$(cross_buildroot)/bin' ;\
-	  echo 'TOOLLIBDIR=$$(cross_buildroot)/lib' ;\
-	  echo "INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(TOOLLIBDIR):$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$$$'"$(LDLIBRARYPATH_ENVVAR)" ;\
-	  echo "PKGDATA_INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$(TOOLLIBDIR):$$$$'"$(LDLIBRARYPATH_ENVVAR) " ;\
-	  echo ) >> $@
-
-
-config/icu.pc: $(srcdir)/config/icu.pc.in
-	cd $(top_builddir) \
-	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-config/icu-uc.pc: config/icu.pc Makefile icudefs.mk
-	@cat config/icu.pc > $@
-	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Common and Data libraries" >> $@
-	@echo "Name: $(PACKAGE)-uc" >> $@
-	@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" >> $@
-	@echo "Libs.private:" '$${baselibs}' >> $@
-	@echo $@ updated.
-
-config/icu-i18n.pc: config/icu.pc Makefile icudefs.mk
-	@cat config/icu.pc > $@
-	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Internationalization library" >> $@
-	@echo "Name: $(PACKAGE)-i18n" >> $@
-	@echo "Requires: icu-uc" >> $@
-	@echo "Libs:" "${ICULIBS_I18N}" >> $@
-	@echo $@ updated.
-
-config/icu-io.pc: config/icu.pc Makefile icudefs.mk
-	@cat config/icu.pc > $@
-	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Stream and I/O Library" >> $@
-	@echo "Name: $(PACKAGE)-io" >> $@
-	@echo "Requires: icu-i18n" >> $@
-	@echo "Libs:" "${ICULIBS_IO}" >> $@
-	@echo $@ updated.
-
-config/icu-le.pc: config/icu.pc Makefile icudefs.mk
-	@cat config/icu.pc > $@
-	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Layout library" >> $@
-	@echo "Name: $(PACKAGE)-le" >> $@
-	@echo "Requires: icu-uc" >> $@
-	@echo "Libs:" "${ICULIBS_LE}" >> $@
-	@echo $@ updated.
-
-config/icu-lx.pc: config/icu.pc Makefile icudefs.mk
-	@cat config/icu.pc > $@
-	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Paragraph Layout library" >> $@
-	@echo "Name: $(PACKAGE)-lx" >> $@
-	@echo "Requires: icu-le" >> $@
-	@echo "Libs:" "${ICULIBS_LX}" >> $@
-	@echo $@ updated.
-
-
-Makefile: $(srcdir)/Makefile.in icudefs.mk $(top_builddir)/config.status
-	cd $(top_builddir) \
-		&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-$(top_builddir)/config/Makefile.inc: $(srcdir)/config/Makefile.inc.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-		&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-$(top_builddir)/config/pkgdata.inc: icudefs.mk $(top_builddir)/config/pkgdataMakefile
-	cd $(top_builddir)/config; \
-		$(MAKE) -f pkgdataMakefile
-
-$(top_builddir)/config/pkgdataMakefile:
-	cd $(top_builddir) \
-		&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-$(top_builddir)/config/icu-config: $(top_builddir)/Makefile $(top_srcdir)/config/icu-config-top $(top_srcdir)/config/icu-config-bottom $(top_builddir)/config/Makefile.inc @platform_make_fragment@ $(top_srcdir)/config/make2sh.sed
-	-$(RMV) $@
-	$(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@
-	chmod u+w $@
-	@echo "# Following from @platform_make_fragment@" >> $@
-	LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
-	LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
-	cat $(top_srcdir)/config/icu-config-bottom >> $@
-	echo "# Rebuilt on "`date` >> $@
-	chmod u-w $@
-
-config.status: $(srcdir)/configure $(srcdir)/common/unicode/uvernum.h
-	@echo
-	@echo
-	@echo "*** config.status has become stale ***"
-	@echo "   'configure' and/or 'uvernum.h' have changed, please"
-	@echo "  do 'runConfigureICU' (or 'configure') again, as per"
-	@echo "  the readme.html."
-	@echo
-	@echo
-	exit 1
-
-
-install-manx: $(MANX_FILES)
-	$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
-	$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)
-
-config/%.$(SECTION): $(srcdir)/config/%.$(SECTION).in
-	cd $(top_builddir) \
-	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-icu4j-data-install icu4j-data: all tests
-	@echo ICU4J_ROOT=$(ICU4J_ROOT)
-	@$(MAKE) -C test/testdata $@
-	@$(MAKE) -C data $@
-
-# For updating Windows makefiles
-
-WINDOWS_UPDATEFILES=$(srcdir)/data/makedata.mak $(shell find $(srcdir) -name '*.vcproj' -o -name '*.vcxproj')
-
-WINDOWS_UPDATEFILES_SED=config/windows-update.sed
-
-update-windows-makefiles: config.status
-	@echo Updating Windows Makefiles for ICU $(VERSION)
-	CONFIG_FILES=$(WINDOWS_UPDATEFILES_SED) CONFIG_HEADERS= $(SHELL) ./config.status
-	@for file in $(WINDOWS_UPDATEFILES); do \
-	  echo "Updating $$file"; \
-	  mv "$${file}" "$${file}.bak" && \
-	  sed -f $(WINDOWS_UPDATEFILES_SED) < "$${file}.bak" > "$${file}" && \
-	  rm "$${file}.bak"; \
-	done;
-	$(RMV) $(WINDOWS_UPDATEFILES_SED)
-	@echo Please check over the changes carefully before checking them in.
-
-# For building a source distribution.
-distcheck dist-local:
-	$(MAKE) -C . -f $(top_srcdir)/config/dist.mk srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" $@
-
-ifeq ($(DESTDIR),)
-releaseDist:
-	@echo "Please provide DESTDIR when calling the target releaseDist."
-else
-releaseDist: install
-	@echo -n "ICU Version: " > $(DESTDIR)/readme.txt
-	@echo `./config/icu-config --noverify --version` >> $(DESTDIR)/readme.txt
-	@echo -n "HOST: " >> $(DESTDIR)/readme.txt
-	@echo `./config/icu-config --noverify --host` >> $(DESTDIR)/readme.txt
-	@echo -n "CC Compiler: " >> $(DESTDIR)/readme.txt
-	@echo `./config/icu-config --noverify --cc` >> $(DESTDIR)/readme.txt
-	@echo -n "CXX Compiler: " >> $(DESTDIR)/readme.txt
-	@echo `./config/icu-config --noverify --cxx` >> $(DESTDIR)/readme.txt
-endif
-
-check-installed-icu: install
-	@echo "Testing ICU installed in $(prefix)"
-	$(INSTALLED_INVOKE) $(bindir)/icuinfo$(EXEEXT)
-	$(INSTALLED_INVOKE) $(bindir)/uconv$(EXEEXT) -V
-	$(INSTALLED_INVOKE) $(bindir)/genrb$(EXEEXT) -V
-	$(INSTALLED_INVOKE) $(bindir)/gencnval$(EXEEXT) -h
-	@echo INSTALLED ICU IN "$(prefix)" OK!
diff --git a/src/third_party/mozjs/intl/icu/source/aclocal.m4 b/src/third_party/mozjs/intl/icu/source/aclocal.m4
deleted file mode 100644
index 5becf15..0000000
--- a/src/third_party/mozjs/intl/icu/source/aclocal.m4
+++ /dev/null
@@ -1,489 +0,0 @@
-# aclocal.m4 for ICU
-# Copyright (c) 1999-2012, International Business Machines Corporation and
-# others. All Rights Reserved.
-# Stephen F. Booth
-
-# @TOP@
-
-# ICU_CHECK_MH_FRAG
-AC_DEFUN(ICU_CHECK_MH_FRAG, [
-	AC_CACHE_CHECK(
-		[which Makefile fragment to use for ${host}],
-		[icu_cv_host_frag],
-		[
-case "${host}" in
-*-*-solaris*)
-	if test "$GCC" = yes; then	
-		icu_cv_host_frag=mh-solaris-gcc
-	else
-		icu_cv_host_frag=mh-solaris
-	fi ;;
-alpha*-*-linux-gnu)
-	if test "$GCC" = yes; then
-		icu_cv_host_frag=mh-alpha-linux-gcc
-	else
-		icu_cv_host_frag=mh-alpha-linux-cc
-	fi ;;
-powerpc*-*-linux*)
-	if test "$GCC" = yes; then
-		icu_cv_host_frag=mh-linux
-	else
-		icu_cv_host_frag=mh-linux-va
-	fi ;;
-*-*-linux*|*-*-gnu|*-*-k*bsd*-gnu|*-*-kopensolaris*-gnu) icu_cv_host_frag=mh-linux ;;
-*-*-cygwin|*-*-mingw32)
-	if test "$GCC" = yes; then
-		AC_TRY_COMPILE([
-#ifndef __MINGW32__
-#error This is not MinGW
-#endif], [], icu_cv_host_frag=mh-mingw, icu_cv_host_frag=mh-cygwin)
-	else
-	        case "${host}" in
-		*-*-mingw32) icu_cv_host_frag=mh-msys-msvc ;;
-		*-*-cygwin) icu_cv_host_frag=mh-cygwin-msvc ;;
-		esac
-	fi ;;
-*-*-*bsd*|*-*-dragonfly*) 	icu_cv_host_frag=mh-bsd-gcc ;;
-*-*-aix*)
-	if test "$GCC" = yes; then
-		icu_cv_host_frag=mh-aix-gcc
-	else
-		icu_cv_host_frag=mh-aix-va
-	fi ;;
-*-*-hpux*)
-	if test "$GCC" = yes; then
-		icu_cv_host_frag=mh-hpux-gcc
-	else
-		case "$CXX" in
-		*aCC)    icu_cv_host_frag=mh-hpux-acc ;;
-		esac
-	fi ;;
-*-*ibm-openedition*|*-*-os390*)	icu_cv_host_frag=mh-os390 ;;
-*-*-os400*)	icu_cv_host_frag=mh-os400 ;;
-*-apple-rhapsody*)	icu_cv_host_frag=mh-darwin ;;
-*-apple-darwin*)	icu_cv_host_frag=mh-darwin ;;
-*-*-beos)       icu_cv_host_frag=mh-beos ;; 
-*-*-haiku)      icu_cv_host_frag=mh-haiku ;; 
-*-*-irix*)	icu_cv_host_frag=mh-irix ;;
-*-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;;
-*-*-nto*)	icu_cv_host_frag=mh-qnx ;;
-*-ncr-*)	icu_cv_host_frag=mh-mpras ;;
-*) 		icu_cv_host_frag=mh-unknown ;;
-esac
-		]
-	)
-])
-
-# ICU_CONDITIONAL - similar example taken from Automake 1.4
-AC_DEFUN(ICU_CONDITIONAL,
-[AC_SUBST($1_TRUE)
-if $2; then
-  $1_TRUE=
-else
-  $1_TRUE='#'
-fi])
-
-# ICU_PROG_LINK - Make sure that the linker is usable
-AC_DEFUN(ICU_PROG_LINK,
-[
-case "${host}" in
-    *-*-cygwin*|*-*-mingw*)
-        if test "$GCC" != yes && test -n "`link --version 2>&1 | grep 'GNU coreutils'`"; then
-            AC_MSG_ERROR([link.exe is not a valid linker. Your PATH is incorrect.
-                  Please follow the directions in ICU's readme.])
-        fi;;
-    *);;
-esac])
-
-# AC_SEARCH_LIBS_FIRST(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
-#            [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
-# Search for a library defining FUNC, then see if it's not already available.
-
-AC_DEFUN(AC_SEARCH_LIBS_FIRST,
-[AC_PREREQ([2.13])
-AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1],
-[ac_func_search_save_LIBS="$LIBS"
-ac_cv_search_$1="no"
-for i in $2; do
-LIBS="-l$i $5 $ac_func_search_save_LIBS"
-AC_TRY_LINK_FUNC([$1],
-[ac_cv_search_$1="-l$i"
-break])
-done
-if test "$ac_cv_search_$1" = "no"; then
-AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"])
-fi
-LIBS="$ac_func_search_save_LIBS"])
-if test "$ac_cv_search_$1" != "no"; then
-  test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
-  $3
-else :
-  $4
-fi])
-
-
-
-# Check if we can build and use 64-bit libraries
-AC_DEFUN(AC_CHECK_64BIT_LIBS,
-[
-    BITS_REQ=nochange
-    ENABLE_64BIT_LIBS=unknown
-    ## revisit this for cross-compile.
-    
-    AC_ARG_ENABLE(64bit-libs,
-        [  --enable-64bit-libs     (deprecated, use --with-library-bits) build 64-bit libraries [default= platform default]],
-        [echo "note, use --with-library-bits instead of --*-64bit-libs"
-         case "${enableval}" in
-            no|false|32) with_library_bits=32;  ;;
-            yes|true|64) with_library_bits=64else32 ;;
-            nochange) with_library_bits=nochange; ;;
-            *) AC_MSG_ERROR(bad value ${enableval} for '--*-64bit-libs') ;;
-            esac]    )
-    
-
-    AC_ARG_WITH(library-bits,
-        [  --with-library-bits=bits specify how many bits to use for the library (32, 64, 64else32, nochange) [default=nochange]],
-        [case "${withval}" in
-            ""|nochange) BITS_REQ=$withval ;;
-            32|64|64else32) BITS_REQ=$withval ;;
-            *) AC_MSG_ERROR(bad value ${withval} for --with-library-bits) ;;
-            esac])
-        
-    # don't use these for cross compiling
-    if test "$cross_compiling" = "yes" -a "${BITS_REQ}" != "nochange"; then
-        AC_MSG_ERROR([Don't specify bitness when cross compiling. See readme.html for help with cross compilation., and set compiler options manually.])
-    fi
-    AC_CHECK_SIZEOF([void *])
-    AC_MSG_CHECKING([whether runnable 64 bit binaries are built by default])
-    case $ac_cv_sizeof_void_p in
-        8) DEFAULT_64BIT=yes ;;
-        4) DEFAULT_64BIT=no ;;
-        *) DEFAULT_64BIT=unknown
-    esac
-    BITS_GOT=unknown
-    
-    # 'OK' here means, we can exit any further checking, everything's copa
-    BITS_OK=yes
-
-    # do we need to check for buildable/runnable 32 or 64 bit?
-    BITS_CHECK_32=no
-    BITS_CHECK_64=no
-    
-    # later, can we run the 32/64 bit binaries so made?
-    BITS_RUN_32=no
-    BITS_RUN_64=no
-    
-    if test "$DEFAULT_64BIT" = "yes"; then
-        # we get 64 bits by default.
-        BITS_GOT=64
-        case "$BITS_REQ" in
-            32) 
-                # need to look for 32 bit support. 
-                BITS_CHECK_32=yes
-                # not copa.
-                BITS_OK=no;;
-            # everyone else is happy.
-            nochange) ;;
-            *) ;;
-        esac
-    elif test "$DEFAULT_64BIT" = "no"; then
-        # not 64 bit by default.
-        BITS_GOT=32
-        case "$BITS_REQ" in
-            64|64else32)
-                BITS_CHECK_64=yes
-                #BITS_CHECK_32=yes
-                BITS_OK=no;;
-            nochange) ;;
-            *) ;;
-        esac
-    elif test "$DEFAULT_64BIT" = "unknown"; then
-        # cross compiling.
-        BITS_GOT=unknown
-        case "$BITS_REQ" in
-            64|64else32) BITS_OK=no
-            BITS_CHECK_32=yes
-            BITS_CHECK_64=yes ;;
-            32) BITS_OK=no;;
-            nochange) ;;
-            *) ;;
-        esac
-    fi
-            
-    AC_MSG_RESULT($DEFAULT_64BIT);
-
-    if test "$BITS_OK" != "yes"; then
-        # not copa. back these up.
-        CFLAGS_OLD="${CFLAGS}"
-        CXXFLAGS_OLD="${CXXFLAGS}"
-        LDFLAGS_OLD="${LDFLAGS}"
-        ARFLAGS_OLD="${ARFLAGS}"        
-        
-        CFLAGS_32="${CFLAGS}"
-        CXXFLAGS_32="${CXXFLAGS}"
-        LDFLAGS_32="${LDFLAGS}"
-        ARFLAGS_32="${ARFLAGS}"        
-        
-        CFLAGS_64="${CFLAGS}"
-        CXXFLAGS_64="${CXXFLAGS}"
-        LDFLAGS_64="${LDFLAGS}"
-        ARFLAGS_64="${ARFLAGS}"        
-        
-        CAN_BUILD_64=unknown
-        CAN_BUILD_32=unknown
-        # These results can't be cached because is sets compiler flags.
-        if test "$BITS_CHECK_64" = "yes"; then
-            AC_MSG_CHECKING([how to build 64-bit executables])
-            CAN_BUILD_64=no
-            ####
-            # Find out if we think we can *build* for 64 bit. Doesn't check whether we can run it.
-            #  Note, we don't have to actually check if the options work- we'll try them before using them.
-            #  So, only try actually testing the options, if you are trying to decide between multiple options.
-            # On exit from the following clauses:
-            # if CAN_BUILD_64=yes:
-            #    *FLAGS are assumed to contain the right settings for 64bit
-            # else if CAN_BUILD_64=no: (default)
-            #    *FLAGS are assumed to be trashed, and will be reset from *FLAGS_OLD
-            
-            if test "$GCC" = yes; then
-                CFLAGS="${CFLAGS} -m64"
-                CXXFLAGS="${CXXFLAGS} -m64"
-                AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                   CAN_BUILD_64=yes, CAN_BUILD_64=no)
-            else
-                case "${host}" in
-                sparc*-*-solaris*)
-                    # 1. try -m64
-                    CFLAGS="${CFLAGS} -m64"
-                    CXXFLAGS="${CXXFLAGS} -m64"
-                    AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                       CAN_BUILD_64=yes, CAN_BUILD_64=no, CAN_BUILD_64=unknown)
-                    if test "$CAN_BUILD_64" != yes; then
-                        # Nope. back out changes.
-                        CFLAGS="${CFLAGS_OLD}"
-                        CXXFLAGS="${CFLAGS_OLD}"
-                        # 2. try xarch=v9 [deprecated]
-                        ## TODO: cross compile: the following won't work.
-                        SPARCV9=`isainfo -n 2>&1 | grep sparcv9`
-                        SOL64=`$CXX -xarch=v9 2>&1 && $CC -xarch=v9 2>&1 | grep -v usage:`
-                        # "Warning: -xarch=v9 is deprecated, use -m64 to create 64-bit programs"
-                        if test -z "$SOL64" && test -n "$SPARCV9"; then
-                            CFLAGS="${CFLAGS} -xtarget=ultra -xarch=v9"
-                            CXXFLAGS="${CXXFLAGS} -xtarget=ultra -xarch=v9"
-                            LDFLAGS="${LDFLAGS} -xtarget=ultra -xarch=v9"
-                            CAN_BUILD_64=yes
-                        fi
-                    fi
-                    ;;
-                i386-*-solaris*)
-                    # 1. try -m64
-                    CFLAGS="${CFLAGS} -m64"
-                    CXXFLAGS="${CXXFLAGS} -m64"
-                    AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                       CAN_BUILD_64=yes, CAN_BUILD_64=no, CAN_BUILD_64=unknown)
-                    if test "$CAN_BUILD_64" != yes; then
-                        # Nope. back out changes.
-                        CFLAGS="${CFLAGS_OLD}"
-                        CXXFLAGS="${CXXFLAGS_OLD}"
-                        # 2. try the older compiler option
-                        ## TODO: cross compile problem
-                        AMD64=`isainfo -n 2>&1 | grep amd64`
-                        SOL64=`$CXX -xtarget=generic64 2>&1 && $CC -xtarget=generic64 2>&1 | grep -v usage:`
-                        if test -z "$SOL64" && test -n "$AMD64"; then
-                            CFLAGS="${CFLAGS} -xtarget=generic64"
-                            CXXFLAGS="${CXXFLAGS} -xtarget=generic64"
-                            CAN_BUILD_64=yes
-                        fi
-                    fi
-                    ;;
-                ia64-*-linux*)
-                    # check for ecc/ecpc compiler support
-                    ## TODO: cross compiler problem
-                    if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Intel`"; then
-                        if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Itanium`"; then
-                            CAN_BUILD_64=yes
-                        fi
-                    fi
-                    ;;
-                *-*-cygwin)
-                    # vcvarsamd64.bat should have been used to enable 64-bit builds.
-                    # We only do this check to display the correct answer.
-                    ## TODO: cross compiler problem
-                    if test -n "`$CXX -help 2>&1 | grep 'for x64'`"; then
-                        CAN_BUILD_64=yes
-                    fi
-                    ;;
-                *-*-aix*|powerpc64-*-linux*)
-                    CFLAGS="${CFLAGS} -q64"
-                    CXXFLAGS="${CXXFLAGS} -q64"
-                    LDFLAGS="${LDFLAGS} -q64"
-                    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                       CAN_BUILD_64=yes, CAN_BUILD_64=no)
-                    if test "$CAN_BUILD_64" = yes; then
-                        # worked- set other options.
-                        case "${host}" in
-                        *-*-aix*)
-                            # tell AIX what executable mode to use.
-                            ARFLAGS="${ARFLAGS} -X64"
-                        esac
-                    fi
-                    ;;
-                *-*-hpux*)
-                    # First we try the newer +DD64, if that doesn't work,
-                    # try other options.
-
-                    CFLAGS="${CFLAGS} +DD64"
-                    CXXFLAGS="${CXXFLAGS} +DD64"
-                    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                        CAN_BUILD_64=yes, CAN_BUILD_64=no)
-                    if test "$CAN_BUILD_64" != yes; then
-                        # reset
-                        CFLAGS="${CFLAGS_OLD}"
-                        CXXFLAGS="${CXXFLAGS_OLD}"
-                        # append
-                        CFLAGS="${CFLAGS} +DA2.0W"
-                        CXXFLAGS="${CXXFLAGS} +DA2.0W"
-                        AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                            CAN_BUILD_64=yes, CAN_BUILD_64=no)
-                    fi
-                    ;;
-                *-*ibm-openedition*|*-*-os390*)
-                    CFLAGS="${CFLAGS} -Wc,lp64"
-                    CXXFLAGS="${CXXFLAGS} -Wc,lp64"
-                    LDFLAGS="${LDFLAGS} -Wl,lp64"
-                    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                       CAN_BUILD_64=yes, CAN_BUILD_64=no)
-                    ;;
-                *)
-                    # unknown platform.
-                    ;;
-                esac
-            fi
-            AC_MSG_RESULT($CAN_BUILD_64)
-            if test "$CAN_BUILD_64" = yes; then
-                AC_MSG_CHECKING([whether runnable 64-bit binaries are being built ])
-                AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
-                   BITS_RUN_64=yes, BITS_RUN_64=no, BITS_RUN_64=unknown)
-                AC_MSG_RESULT($BITS_RUN_64);
-
-                CFLAGS_64="${CFLAGS}"
-                CXXFLAGS_64="${CXXFLAGS}"
-                LDFLAGS_64="${LDFLAGS}"
-                ARFLAGS_64="${ARFLAGS}"        
-            fi
-            # put it back.
-            CFLAGS="${CFLAGS_OLD}"
-            CXXFLAGS="${CXXFLAGS_OLD}"
-            LDFLAGS="${LDFLAGS_OLD}"
-            ARFLAGS="${ARFLAGS_OLD}"     
-        fi
-        if test "$BITS_CHECK_32" = "yes"; then
-            # see comment under 'if BITS_CHECK_64', above.
-            AC_MSG_CHECKING([how to build 32-bit executables])
-            if test "$GCC" = yes; then
-                CFLAGS="${CFLAGS} -m32"
-                CXXFLAGS="${CXXFLAGS} -m32"
-                AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==32)?0:1;}])],
-                   CAN_BUILD_32=yes, CAN_BUILD_32=no)
-            fi
-            AC_MSG_RESULT($CAN_BUILD_32)
-            if test "$CAN_BUILD_32" = yes; then
-                AC_MSG_CHECKING([whether runnable 32-bit binaries are being built ])
-                AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==32)?0:1;}])],
-                   BITS_RUN_32=yes, BITS_RUN_32=no, BITS_RUN_32=unknown)
-                AC_MSG_RESULT($BITS_RUN_32);
-                CFLAGS_32="${CFLAGS}"
-                CXXFLAGS_32="${CXXFLAGS}"
-                LDFLAGS_32="${LDFLAGS}"
-                ARFLAGS_32="${ARFLAGS}"        
-            fi
-            # put it back.
-            CFLAGS="${CFLAGS_OLD}"
-            CXXFLAGS="${CXXFLAGS_OLD}"
-            LDFLAGS="${LDFLAGS_OLD}"
-            ARFLAGS="${ARFLAGS_OLD}"     
-        fi
-        
-        ##
-        # OK. Now, we've tested for 32 and 64 bitness. Let's see what we'll do.
-        #
-        
-        # First, implement 64else32
-        if test "$BITS_REQ" = "64else32"; then
-            if test "$BITS_RUN_64" = "yes"; then
-                BITS_REQ=64
-            else
-                # no changes.
-                BITS_OK=yes 
-            fi
-        fi
-        
-        # implement.
-        if test "$BITS_REQ" = "32" -a "$BITS_RUN_32" = "yes"; then
-            CFLAGS="${CFLAGS_32}"
-            CXXFLAGS="${CXXFLAGS_32}"
-            LDFLAGS="${LDFLAGS_32}"
-            ARFLAGS="${ARFLAGS_32}"     
-            BITS_OK=yes
-        elif test "$BITS_REQ" = "64" -a "$BITS_RUN_64" = "yes"; then
-            CFLAGS="${CFLAGS_64}"
-            CXXFLAGS="${CXXFLAGS_64}"
-            LDFLAGS="${LDFLAGS_64}"
-            ARFLAGS="${ARFLAGS_64}"     
-            BITS_OK=yes
-        elif test "$BITS_OK" != "yes"; then
-            AC_MSG_ERROR([Requested $BITS_REQ bit binaries but could not compile and execute them. See readme.html for help with cross compilation., and set compiler options manually.])
-        fi
-     fi
-])
-
-# Strict compilation options.
-AC_DEFUN(AC_CHECK_STRICT_COMPILE,
-[
-    AC_MSG_CHECKING([whether strict compiling is on])
-    AC_ARG_ENABLE(strict,[  --enable-strict         compile with strict compiler options [default=yes]], [
-        if test "$enableval" = no
-        then
-            ac_use_strict_options=no
-        else
-            ac_use_strict_options=yes
-        fi
-      ], [ac_use_strict_options=yes])
-    AC_MSG_RESULT($ac_use_strict_options)
-
-    if test "$ac_use_strict_options" = yes
-    then
-        if test "$GCC" = yes
-        then
-            # Do not use -ansi. It limits us to C90, and it breaks some platforms.
-            # We use -std=c99 to disable the gnu99 defaults and its associated warnings
-            CFLAGS="$CFLAGS -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
-        else
-            case "${host}" in
-            *-*-cygwin)
-                if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
-                then
-                    CFLAGS="$CFLAGS /W4"
-                fi ;;
-            *-*-mingw32)
-                CFLAGS="$CFLAGS -W4" ;;
-            esac
-        fi
-        if test "$GXX" = yes
-        then
-            CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
-        else
-            case "${host}" in
-            *-*-cygwin)
-                if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
-                then
-                    CXXFLAGS="$CXXFLAGS /W4"
-                fi ;;
-            *-*-mingw32)
-                CXXFLAGS="$CXXFLAGS -W4" ;;
-            esac
-        fi
-    fi
-])
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/allinone/allinone.sln b/src/third_party/mozjs/intl/icu/source/allinone/allinone.sln
deleted file mode 100644
index 0101cae..0000000
--- a/src/third_party/mozjs/intl/icu/source/allinone/allinone.sln
+++ /dev/null
@@ -1,339 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcxproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcxproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\common\common.vcxproj", "{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctestfw", "..\tools\ctestfw\ctestfw.vcxproj", "{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "date", "..\samples\date\date.vcxproj", "{38B5751A-C6F9-4409-950C-F4F9DA17275F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "derb", "..\tools\genrb\derb.vcxproj", "{D3065ADB-8820-4CC7-9B6C-9510833961A3}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genbrk", "..\tools\genbrk\genbrk.vcxproj", "{C2BE5000-7501-4E87-9724-B8D82494FAE6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genccode", "..\tools\genccode\genccode.vcxproj", "{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencmn", "..\tools\gencmn\gencmn.vcxproj", "{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencnval", "..\tools\gencnval\gencnval.vcxproj", "{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genrb", "..\tools\genrb\genrb.vcxproj", "{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gentest", "..\tools\gentest\gentest.vcxproj", "{77C78066-746F-4EA6-B3FE-B8C8A4A97891}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n", "..\i18n\i18n.vcxproj", "{0178B127-6269-407D-B112-93877BB62776}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intltest", "..\test\intltest\intltest.vcxproj", "{73632960-B3A6-464D-83A3-4B43365F19B8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "layout", "..\layout\layout.vcxproj", "{C920062A-0647-4553-A3B2-37C58065664B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "layoutex", "..\layoutex\layoutex.vcxproj", "{37FC2C7F-1904-4811-8955-2F478830EAD1}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makeconv", "..\tools\makeconv\makeconv.vcxproj", "{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata", "..\data\makedata.vcxproj", "{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pkgdata", "..\tools\pkgdata\pkgdata.vcxproj", "{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stubdata", "..\stubdata\stubdata.vcxproj", "{203EC78A-0531-43F0-A636-285439BDE025}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "toolutil", "..\tools\toolutil\toolutil.vcxproj", "{6B231032-3CB5-4EED-9210-810D666A23A0}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uconv", "..\extra\uconv\uconv.vcxproj", "{DBA4088D-F6F9-4F8F-8820-082A4765C16C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "io", "..\io\io.vcxproj", "{C2B04507-2521-4801-BF0D-5FD79D6D518C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gensprep", "..\tools\gensprep\gensprep.vcxproj", "{631C23CE-6C1D-4875-88F0-85E0A42B36EA}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iotest", "..\test\iotest\iotest.vcxproj", "{E4993E82-D68A-46CA-BAE0-9D35E172E46F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icupkg", "..\tools\icupkg\icupkg.vcxproj", "{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}"
-EndProject
-Project("{9D4211F7-2C77-439C-82F0-30A4E43BA569}") = "gendict", "..\tools\gendict\gendict.vcxproj", "{9D4211F7-2C77-439C-82F0-30A4E43BA569}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "letest", "..\test\letest\letest.vcxproj", "{67351485-4D18-4245-BE39-A7EF0675ACD2}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencfu", "..\tools\gencfu\gencfu.vcxproj", "{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gennorm2", "..\tools\gennorm2\gennorm2.vcxproj", "{C7891A65-80AB-4245-912E-5F1E17B0E6C4}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuinfo", "..\tools\icuinfo\icuinfo.vcxproj", "{E7611F49-F088-4175-9446-6111444E72C8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplug", "..\tools\icuinfo\testplug.vcxproj", "{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}"
-EndProject
-Global
-	GlobalSection(SubversionScc) = preSolution
-		Svn-Managed = True
-		Manager = AnkhSVN - Subversion Support for Visual Studio
-	EndGlobalSection
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.Build.0 = Debug|Win32
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.ActiveCfg = Debug|x64
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.Build.0 = Debug|x64
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.ActiveCfg = Release|Win32
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.Build.0 = Release|Win32
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.ActiveCfg = Release|x64
-		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.Build.0 = Release|x64
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.Build.0 = Debug|Win32
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.ActiveCfg = Debug|x64
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.Build.0 = Debug|x64
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.ActiveCfg = Release|Win32
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.Build.0 = Release|Win32
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.ActiveCfg = Release|x64
-		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.Build.0 = Release|x64
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.Build.0 = Debug|Win32
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.ActiveCfg = Debug|x64
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.Build.0 = Debug|x64
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.ActiveCfg = Release|Win32
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.Build.0 = Release|Win32
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.ActiveCfg = Release|x64
-		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.Build.0 = Release|x64
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.ActiveCfg = Debug|Win32
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.Build.0 = Debug|Win32
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.ActiveCfg = Debug|x64
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.Build.0 = Debug|x64
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.ActiveCfg = Release|Win32
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.Build.0 = Release|Win32
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.ActiveCfg = Release|x64
-		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.Build.0 = Debug|Win32
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.ActiveCfg = Debug|x64
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.Build.0 = Debug|x64
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.ActiveCfg = Release|Win32
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.Build.0 = Release|Win32
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.ActiveCfg = Release|x64
-		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.Build.0 = Release|x64
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.Build.0 = Debug|Win32
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.ActiveCfg = Debug|x64
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.Build.0 = Debug|x64
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.ActiveCfg = Release|Win32
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.Build.0 = Release|Win32
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.ActiveCfg = Release|x64
-		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.Build.0 = Release|x64
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.Build.0 = Debug|Win32
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.ActiveCfg = Debug|x64
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.Build.0 = Debug|x64
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.ActiveCfg = Release|Win32
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.Build.0 = Release|Win32
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.ActiveCfg = Release|x64
-		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.Build.0 = Release|x64
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.ActiveCfg = Debug|Win32
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.Build.0 = Debug|Win32
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.ActiveCfg = Debug|x64
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.Build.0 = Debug|x64
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.ActiveCfg = Release|Win32
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.Build.0 = Release|Win32
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.ActiveCfg = Release|x64
-		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.Build.0 = Release|x64
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.Build.0 = Debug|Win32
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.ActiveCfg = Debug|x64
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.Build.0 = Debug|x64
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.ActiveCfg = Release|Win32
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.Build.0 = Release|Win32
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.ActiveCfg = Release|x64
-		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.Build.0 = Release|x64
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.Build.0 = Debug|Win32
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.ActiveCfg = Debug|x64
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.Build.0 = Debug|x64
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.ActiveCfg = Release|Win32
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.Build.0 = Release|Win32
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.ActiveCfg = Release|x64
-		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.Build.0 = Release|x64
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.Build.0 = Debug|Win32
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.ActiveCfg = Debug|x64
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.Build.0 = Debug|x64
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.ActiveCfg = Release|Win32
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.Build.0 = Release|Win32
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.ActiveCfg = Release|x64
-		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.Build.0 = Release|x64
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.ActiveCfg = Debug|Win32
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.Build.0 = Debug|Win32
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.ActiveCfg = Debug|x64
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.Build.0 = Debug|x64
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.ActiveCfg = Release|Win32
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.Build.0 = Release|Win32
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.ActiveCfg = Release|x64
-		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.Build.0 = Release|x64
-		{0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.Build.0 = Debug|Win32
-		{0178B127-6269-407D-B112-93877BB62776}.Debug|x64.ActiveCfg = Debug|x64
-		{0178B127-6269-407D-B112-93877BB62776}.Debug|x64.Build.0 = Debug|x64
-		{0178B127-6269-407D-B112-93877BB62776}.Release|Win32.ActiveCfg = Release|Win32
-		{0178B127-6269-407D-B112-93877BB62776}.Release|Win32.Build.0 = Release|Win32
-		{0178B127-6269-407D-B112-93877BB62776}.Release|x64.ActiveCfg = Release|x64
-		{0178B127-6269-407D-B112-93877BB62776}.Release|x64.Build.0 = Release|x64
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.Build.0 = Debug|Win32
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.ActiveCfg = Debug|x64
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.Build.0 = Debug|x64
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.ActiveCfg = Release|Win32
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.Build.0 = Release|Win32
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.ActiveCfg = Release|x64
-		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.Build.0 = Release|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.Build.0 = Debug|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.ActiveCfg = Debug|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.Build.0 = Debug|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.ActiveCfg = Release|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.Build.0 = Release|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.ActiveCfg = Release|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.Build.0 = Release|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.ActiveCfg = Debug|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.Build.0 = Debug|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.ActiveCfg = Debug|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.Build.0 = Debug|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.ActiveCfg = Release|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.Build.0 = Release|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.ActiveCfg = Release|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.Build.0 = Release|x64
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.Build.0 = Debug|Win32
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.ActiveCfg = Debug|x64
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.Build.0 = Debug|x64
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.ActiveCfg = Release|Win32
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.Build.0 = Release|Win32
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.ActiveCfg = Release|x64
-		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.Build.0 = Release|x64
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.Build.0 = Debug|Win32
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.ActiveCfg = Debug|x64
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.Build.0 = Debug|x64
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.ActiveCfg = Release|Win32
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.Build.0 = Release|Win32
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.ActiveCfg = Release|x64
-		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.Build.0 = Release|x64
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.Build.0 = Debug|Win32
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.ActiveCfg = Debug|x64
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.Build.0 = Debug|x64
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.ActiveCfg = Release|Win32
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64
-		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64
-		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.ActiveCfg = Debug|Win32
-		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.Build.0 = Debug|Win32
-		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.ActiveCfg = Debug|x64
-		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.Build.0 = Debug|x64
-		{203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.ActiveCfg = Release|Win32
-		{203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.Build.0 = Release|Win32
-		{203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.ActiveCfg = Release|x64
-		{203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.Build.0 = Release|x64
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.Build.0 = Debug|Win32
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.ActiveCfg = Debug|x64
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.Build.0 = Debug|x64
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.ActiveCfg = Release|Win32
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.Build.0 = Release|Win32
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.ActiveCfg = Release|x64
-		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.Build.0 = Release|x64
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.Build.0 = Debug|Win32
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.ActiveCfg = Debug|x64
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.Build.0 = Debug|x64
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.ActiveCfg = Release|Win32
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.Build.0 = Release|Win32
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.ActiveCfg = Release|x64
-		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.Build.0 = Release|x64
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.Build.0 = Debug|Win32
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.ActiveCfg = Debug|x64
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.Build.0 = Debug|x64
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.ActiveCfg = Release|Win32
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.Build.0 = Release|Win32
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.ActiveCfg = Release|x64
-		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.Build.0 = Release|x64
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.ActiveCfg = Debug|Win32
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.Build.0 = Debug|Win32
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.ActiveCfg = Debug|x64
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.Build.0 = Debug|x64
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.ActiveCfg = Release|Win32
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.Build.0 = Release|Win32
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.ActiveCfg = Release|x64
-		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.Build.0 = Release|x64
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.Build.0 = Debug|Win32
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.ActiveCfg = Debug|x64
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.Build.0 = Debug|x64
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.ActiveCfg = Release|Win32
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.Build.0 = Release|Win32
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.ActiveCfg = Release|x64
-		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.Build.0 = Release|x64
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.Build.0 = Debug|Win32
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.ActiveCfg = Debug|x64
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.Build.0 = Debug|x64
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.ActiveCfg = Release|Win32
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.Build.0 = Release|Win32
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.ActiveCfg = Release|x64
-		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.Build.0 = Release|x64
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.ActiveCfg = Debug|Win32
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.Build.0 = Debug|Win32
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.ActiveCfg = Debug|x64
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.Build.0 = Debug|x64
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.ActiveCfg = Release|Win32
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.Build.0 = Release|Win32
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.ActiveCfg = Release|x64
-		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.Build.0 = Release|x64
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|Win32.ActiveCfg = Debug|Win32
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|Win32.Build.0 = Debug|Win32
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|x64.ActiveCfg = Debug|x64
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|x64.Build.0 = Debug|x64
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|Win32.ActiveCfg = Release|Win32
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|Win32.Build.0 = Release|Win32
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|x64.ActiveCfg = Release|x64
-		{67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|x64.Build.0 = Release|x64
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.ActiveCfg = Debug|Win32
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.Build.0 = Debug|Win32
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.ActiveCfg = Debug|x64
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.Build.0 = Debug|x64
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.ActiveCfg = Release|Win32
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.Build.0 = Release|Win32
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.ActiveCfg = Release|x64
-		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.Build.0 = Release|x64
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.Build.0 = Debug|Win32
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.ActiveCfg = Debug|x64
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.Build.0 = Debug|x64
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.ActiveCfg = Release|Win32
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.Build.0 = Release|Win32
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.ActiveCfg = Release|x64
-		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.Build.0 = Release|x64
-		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.Build.0 = Debug|Win32
-		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.ActiveCfg = Debug|x64
-		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.Build.0 = Debug|x64
-		{E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.ActiveCfg = Release|Win32
-		{E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.Build.0 = Release|Win32
-		{E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.ActiveCfg = Release|x64
-		{E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.Build.0 = Release|x64
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.Build.0 = Debug|Win32
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.ActiveCfg = Debug|x64
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.Build.0 = Debug|x64
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.ActiveCfg = Release|Win32
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.Build.0 = Release|Win32
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.ActiveCfg = Release|x64
-		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/src/third_party/mozjs/intl/icu/source/allinone/icucheck.bat b/src/third_party/mozjs/intl/icu/source/allinone/icucheck.bat
deleted file mode 100644
index c5ff978..0000000
--- a/src/third_party/mozjs/intl/icu/source/allinone/icucheck.bat
+++ /dev/null
@@ -1,128 +0,0 @@
-@echo off

-REM  ********************************************************************

-REM  * COPYRIGHT:

-REM  * Copyright (c) 2010-2012, International Business Machines Corporation

-REM  * and others. All Rights Reserved.

-REM  ********************************************************************

-

-set ICU_ARCH=%1

-set ICU_DBRL=%2

-

-if "%1" == "" (

-echo Usage: %0 "x86 or x64"  "Debug or Release"

-exit /b 1

-)

-

-if "%2" == "" (

-echo Usage: %0 %1 "Debug or Release"

-exit /b 1

-)

-

-set ICU_OPATH=%PATH%

-

-set ICU_ICUDIR="%~dp0"\..\..

-

-if "%ICU_ARCH%" == "x64" (

-set ICU_BINDIR=%~dp0\..\..\bin64

-) else (

-set ICU_BINDIR=%~dp0\..\..\bin

-)

-

-set PATH=%ICU_BINDIR%;%PATH%

-

-echo testing ICU in %ICU_ICUDIR%  arch=%ICU_ARCH% type=%ICU_DBRL%

-pushd %ICU_ICUDIR%

-

-@rem factor these out

-set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe

-set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe

-set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe

-set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe

-set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe

-

-set ICUFAILED=

-set ICURUN=

-set ICUFAILCNT=0

-

-@echo on

-

-@set THT=icuinfo

-@echo ==== %THT% =========================================================================

-%ICUINFO_CMD% %ICUINFO_OPTS%

-

-@IF NOT ERRORLEVEL 1 GOTO OK_%THT%

-@set ICUFAILED=%ICUFAILED% %THT%

-@set ICUFAILCNT=1

-:OK_icuinfo

-@set ICURUN=%ICURUN% %THT%

-

-@set THT=intltest

-@echo ==== %THT% =========================================================================

-@cd %ICU_ICUDIR%\source\test\intltest

-%INTLTEST_CMD% %INTLTEST_OPTS%

-

-@IF NOT ERRORLEVEL 1 GOTO OK_%THT%

-@set ICUFAILED=%ICUFAILED% %THT%

-@set ICUFAILCNT=1

-:OK_intltest

-@set ICURUN=%ICURUN% %THT%

-

-@set THT=iotest

-@echo ==== %THT% =========================================================================

-@cd %ICU_ICUDIR%\source\test\iotest

-%IOTEST_CMD% %IOTEST_OPTS%

-

-@IF NOT ERRORLEVEL 1 GOTO OK_%THT%

-@set ICUFAILED=%ICUFAILED% %THT%

-@set ICUFAILCNT=1

-:OK_IOTEST

-@set ICURUN=%ICURUN% %THT%

-

-@set THT=cintltst

-@echo ==== %THT% =========================================================================

-@cd %ICU_ICUDIR%\source\test\cintltst

-%CINTLTST_CMD% %CINTLTST_OPTS%

-

-@IF NOT ERRORLEVEL 1 GOTO OK_%THT%

-@set ICUFAILED=%ICUFAILED% %THT%

-@set ICUFAILCNT=1

-:OK_cintltst

-@set ICURUN=%ICURUN% %THT%

-

-@set THT=letest

-@echo ==== %THT% =========================================================================

-@cd %ICU_ICUDIR%\source\test\letest

-%LETST_CMD% %LETEST_OPTS%

-

-@IF NOT ERRORLEVEL 1 GOTO OK_%THT%

-@set ICUFAILED=%ICUFAILED% %THT%

-@set ICUFAILCNT=1

-:OK_letest

-@set ICURUN=%ICURUN% %THT%

-

-@echo off

-

-REM clean up

-set PATH=%ICU_OPATH%

-REM unset ICU_OPATH

-popd

-

-@REM done

-

-echo -

-echo -

-echo -

-echo ============================================================

-echo Summary: ICU in %ICU_ICUDIR%  arch=%ICU_ARCH% type=%ICU_DBRL%

-echo -

-echo Tests Run    : %ICURUN%

-

-if %ICUFAILCNT% == 0 (

-	echo " - All Passed!"

-	exit /b 0

-)

-echo Failing Tests: %ICUFAILED%

-echo -

-echo FAILED!

-

-exit /b 1
\ No newline at end of file
diff --git a/src/third_party/mozjs/intl/icu/source/common/Makefile.in b/src/third_party/mozjs/intl/icu/source/common/Makefile.in
deleted file mode 100644
index f8efcf9..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/Makefile.in
+++ /dev/null
@@ -1,225 +0,0 @@
-#******************************************************************************
-#
-#   Copyright (C) 1999-2012, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-#******************************************************************************
-## Makefile.in for ICU - icuuc.so
-## Stephen F. Booth
-
-## Source directory information
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-
-top_builddir = ..
-
-## All the flags and other definitions are included here.
-include $(top_builddir)/icudefs.mk
-
-## Build directory information
-subdir = common
-
-# for service hook
-LOCALSVC_CPP=localsvc.cpp
-SVC_HOOK_INC=$(top_builddir)/common/svchook.mk
-
-## Extra files to remove for 'make clean'
-CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB) $(SVC_HOOK_INC)
-
-## Target information
-
-TARGET_STUBNAME=$(COMMON_STUBNAME)
-
-ifneq ($(ENABLE_STATIC),)
-TARGET = $(LIBDIR)/$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A)
-endif
-
-ifneq ($(ENABLE_SHARED),)
-SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO)
-ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT)
-
-ifeq ($(ENABLE_SO_VERSION_DATA),1)
-SO_VERSION_DATA = common.res
-endif
-
-ifeq ($(OS390BATCH),1)
-BATCH_TARGET = $(BATCH_COMMON_TARGET)
-BATCH_LIBS = $(BATCH_LIBICUDT) -lm
-endif   # OS390BATCH
-
-endif   # ENABLE_SHARED
-
-ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET)
-
-DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS)
-DYNAMICCFLAGS = $(SHAREDLIBCFLAGS)
-DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)
-CFLAGS += $(LIBCFLAGS)
-CXXFLAGS += $(LIBCXXFLAGS)
-ifeq ($(OS390BATCH),1)
-CFLAGS += -WI
-CXXFLAGS += -WI
-endif
-
-CPPFLAGS += -I$(srcdir) $(LIBCPPFLAGS) $(CPPFLAGSICUUC)
-# we want DEFS here
-DEFS += -DU_COMMON_IMPLEMENTATION 
-LDFLAGS += $(LDFLAGSICUUC)
-
-# for plugin configuration
-CPPFLAGS += "-DDEFAULT_ICU_PLUGINS=\"$(libdir)/icu\" "
-
-# for icu data location
-ifeq ($(PKGDATA_MODE),common)
-CPPFLAGS += "-DU_ICU_DATA_DEFAULT_DIR=\"$(ICUDATA_DIR)\""
-endif
-
-# $(LIBICUDT) is either stub data or the real DLL common data.
-LIBS = $(LIBICUDT) $(DEFAULT_LIBS)
-
-OBJECTS = errorcode.o putil.o umath.o utypes.o uinvchar.o umutex.o ucln_cmn.o \
-uinit.o uobject.o cmemory.o charstr.o \
-udata.o ucmndata.o udatamem.o umapfile.o udataswp.o ucol_swp.o utrace.o \
-uhash.o uhash_us.o uenum.o ustrenum.o uvector.o ustack.o uvectr32.o uvectr64.o \
-ucnv.o ucnv_bld.o ucnv_cnv.o ucnv_io.o ucnv_cb.o ucnv_err.o ucnvlat1.o \
-ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o ucnvscsu.o ucnvbocu.o \
-ucnv_ext.o ucnvmbcs.o ucnv2022.o ucnvhz.o ucnv_lmb.o ucnvisci.o ucnvdisp.o ucnv_set.o ucnv_ct.o \
-uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \
-messagepattern.o ucat.o locmap.o uloc.o locid.o locutil.o locavailable.o locdispnames.o loclikely.o locresdata.o \
-bytestream.o stringpiece.o \
-stringtriebuilder.o bytestriebuilder.o \
-bytestrie.o bytestrieiterator.o \
-ucharstrie.o ucharstriebuilder.o ucharstrieiterator.o \
-dictionarydata.o \
-appendable.o ustr_cnv.o unistr_cnv.o unistr.o unistr_case.o unistr_props.o \
-utf_impl.o ustring.o ustrcase.o ucasemap.o ucasemap_titlecase_brkiter.o cstring.o ustrfmt.o ustrtrns.o ustr_wcs.o utext.o \
-unistr_case_locale.o ustrcase_locale.o unistr_titlecase_brkiter.o ustr_titlecase_brkiter.o \
-normalizer2impl.o normalizer2.o filterednormalizer2.o normlzr.o unorm.o unormcmp.o unorm_it.o \
-chariter.o schriter.o uchriter.o uiter.o \
-patternprops.o uchar.o uprops.o ucase.o propname.o ubidi_props.o ubidi.o ubidiwrt.o ubidiln.o ushape.o \
-uscript.o usc_impl.o unames.o \
-utrie.o utrie2.o utrie2_builder.o bmpset.o unisetspan.o uset_props.o uniset_props.o uniset_closure.o uset.o uniset.o usetiter.o ruleiter.o caniter.o unifilt.o unifunct.o \
-uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o \
-rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \
-serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \
-uidna.o usprep.o uts46.o punycode.o \
-util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o mutex.o dtintrv.o ucnvsel.o propsvec.o \
-ulist.o uloc_tag.o icudataver.o icuplug.o listformatter.o
-
-## Header files to install
-HEADERS = $(srcdir)/unicode/*.h
-
-STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
-
-DEPS = $(OBJECTS:.o=.d)
-
--include Makefile.local
-
--include $(SVC_HOOK_INC)
-
-
-## List of phony targets
-.PHONY : all all-local install install-local clean clean-local	\
-distclean distclean-local install-library install-headers dist	\
-dist-local check check-local check-exhaustive
-
-## Clear suffix list
-.SUFFIXES :
-
-## List of standard targets
-all: all-local
-install: install-local
-clean: clean-local
-distclean : distclean-local
-dist: dist-local
-check: all check-local
-
-check-exhaustive: check
-
-all-local: $(ALL_TARGETS)
-
-install-local: install-headers install-library
-
-install-library: all-local
-	$(MKINSTALLDIRS) $(DESTDIR)$(libdir)
-ifneq ($(ENABLE_STATIC),)
-	$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
-endif
-ifneq ($(ENABLE_SHARED),)
-	$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
-ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
-	cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
-ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
-	cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
-endif
-endif
-ifneq ($(IMPORT_LIB_EXT),)
-	$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
-ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
-	cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(IMPORT_LIB))
-endif
-ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB))
-	cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(MIDDLE_IMPORT_LIB))
-endif
-endif
-endif
-
-$(SVC_HOOK_INC):
-	@echo generating $@
-	@-test -f $(top_srcdir)/common/$(LOCALSVC_CPP) && ( echo "have $(LOCALSVC_CPP) - U_LOCAL_SERVICE_HOOK=1" ; \
-		echo 'CPPFLAGS +=-DU_LOCAL_SERVICE_HOOK=1' > $@ ; \
-		echo 'OBJECTS += $(LOCALSVC_CPP:%.cpp=%.o)' >> $@ \
-		 ) ; true
-	@echo "# Autogenerated by Makefile" >> $@
-
-install-headers:
-	$(MKINSTALLDIRS) $(DESTDIR)$(includedir)/unicode
-	@for file in $(HEADERS); do \
-	 echo "$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode"; \
-	 $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode || exit; \
-	done
-
-dist-local:
-
-clean-local:
-	test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
-	$(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA)
-
-distclean-local: clean-local
-	$(RMV) Makefile icucfg.h $(SVC_HOOK_INC)
-
-check-local:
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(SVC_HOOK_INC)
-	cd $(top_builddir) \
-	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-ifneq ($(ENABLE_STATIC),)
-$(TARGET): $(STATIC_OBJECTS)
-	$(AR) $(ARFLAGS) $(AR_OUTOPT)$@ $^
-	$(RANLIB) $@
-endif
-
-ifneq ($(ENABLE_SHARED),)
-$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA)
-	$(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS)
-ifeq ($(ENABLE_RPATH),YES)
-ifneq ($(wildcard $(libdir)/$(MIDDLE_SO_TARGET)),)
-	$(warning RPATH warning: --enable-rpath means test programs may use existing $(libdir)/$(MIDDLE_SO_TARGET))
-endif
-endif
-
-ifeq ($(OS390BATCH),1)
-$(BATCH_TARGET):$(OBJECTS)
-	$(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS)
-endif   # OS390BATCH
-endif   # ENABLE_SHARED
-
-ifeq (,$(MAKECMDGOALS))
--include $(DEPS)
-else
-ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
--include $(DEPS)
-endif
-endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/appendable.cpp b/src/third_party/mozjs/intl/icu/source/common/appendable.cpp
deleted file mode 100644
index 4d672fc..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/appendable.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  appendable.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010dec07
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/appendable.h"
-#include "unicode/utf16.h"
-
-U_NAMESPACE_BEGIN
-
-Appendable::~Appendable() {}
-
-UBool
-Appendable::appendCodePoint(UChar32 c) {
-    if(c<=0xffff) {
-        return appendCodeUnit((UChar)c);
-    } else {
-        return appendCodeUnit(U16_LEAD(c)) && appendCodeUnit(U16_TRAIL(c));
-    }
-}
-
-UBool
-Appendable::appendString(const UChar *s, int32_t length) {
-    if(length<0) {
-        UChar c;
-        while((c=*s++)!=0) {
-            if(!appendCodeUnit(c)) {
-                return FALSE;
-            }
-        }
-    } else if(length>0) {
-        const UChar *limit=s+length;
-        do {
-            if(!appendCodeUnit(*s++)) {
-                return FALSE;
-            }
-        } while(s<limit);
-    }
-    return TRUE;
-}
-
-UBool
-Appendable::reserveAppendCapacity(int32_t /*appendCapacity*/) {
-    return TRUE;
-}
-
-UChar *
-Appendable::getAppendBuffer(int32_t minCapacity,
-                            int32_t /*desiredCapacityHint*/,
-                            UChar *scratch, int32_t scratchCapacity,
-                            int32_t *resultCapacity) {
-    if(minCapacity<1 || scratchCapacity<minCapacity) {
-        *resultCapacity=0;
-        return NULL;
-    }
-    *resultCapacity=scratchCapacity;
-    return scratch;
-}
-
-UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(Appendable)
-
-// UnicodeStringAppendable is implemented in unistr.cpp.
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/bmpset.cpp b/src/third_party/mozjs/intl/icu/source/common/bmpset.cpp
deleted file mode 100644
index b874436..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/bmpset.cpp
+++ /dev/null
@@ -1,732 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2007-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  bmpset.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2007jan29
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/uniset.h"
-#include "unicode/utf8.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "bmpset.h"
-#include "uassert.h"
-
-U_NAMESPACE_BEGIN
-
-BMPSet::BMPSet(const int32_t *parentList, int32_t parentListLength) :
-        list(parentList), listLength(parentListLength) {
-    uprv_memset(asciiBytes, 0, sizeof(asciiBytes));
-    uprv_memset(table7FF, 0, sizeof(table7FF));
-    uprv_memset(bmpBlockBits, 0, sizeof(bmpBlockBits));
-
-    /*
-     * Set the list indexes for binary searches for
-     * U+0800, U+1000, U+2000, .., U+F000, U+10000.
-     * U+0800 is the first 3-byte-UTF-8 code point. Lower code points are
-     * looked up in the bit tables.
-     * The last pair of indexes is for finding supplementary code points.
-     */
-    list4kStarts[0]=findCodePoint(0x800, 0, listLength-1);
-    int32_t i;
-    for(i=1; i<=0x10; ++i) {
-        list4kStarts[i]=findCodePoint(i<<12, list4kStarts[i-1], listLength-1);
-    }
-    list4kStarts[0x11]=listLength-1;
-
-    initBits();
-    overrideIllegal();
-}
-
-BMPSet::BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength) :
-        list(newParentList), listLength(newParentListLength) {
-    uprv_memcpy(asciiBytes, otherBMPSet.asciiBytes, sizeof(asciiBytes));
-    uprv_memcpy(table7FF, otherBMPSet.table7FF, sizeof(table7FF));
-    uprv_memcpy(bmpBlockBits, otherBMPSet.bmpBlockBits, sizeof(bmpBlockBits));
-    uprv_memcpy(list4kStarts, otherBMPSet.list4kStarts, sizeof(list4kStarts));
-}
-
-BMPSet::~BMPSet() {
-}
-
-/*
- * Set bits in a bit rectangle in "vertical" bit organization.
- * start<limit<=0x800
- */
-static void set32x64Bits(uint32_t table[64], int32_t start, int32_t limit) {
-    U_ASSERT(start<limit);
-    U_ASSERT(limit<=0x800);
-
-    int32_t lead=start>>6;  // Named for UTF-8 2-byte lead byte with upper 5 bits.
-    int32_t trail=start&0x3f;  // Named for UTF-8 2-byte trail byte with lower 6 bits.
-
-    // Set one bit indicating an all-one block.
-    uint32_t bits=(uint32_t)1<<lead;
-    if((start+1)==limit) {  // Single-character shortcut.
-        table[trail]|=bits;
-        return;
-    }
-
-    int32_t limitLead=limit>>6;
-    int32_t limitTrail=limit&0x3f;
-
-    if(lead==limitLead) {
-        // Partial vertical bit column.
-        while(trail<limitTrail) {
-            table[trail++]|=bits;
-        }
-    } else {
-        // Partial vertical bit column,
-        // followed by a bit rectangle,
-        // followed by another partial vertical bit column.
-        if(trail>0) {
-            do {
-                table[trail++]|=bits;
-            } while(trail<64);
-            ++lead;
-        }
-        if(lead<limitLead) {
-            bits=~((1<<lead)-1);
-            if(limitLead<0x20) {
-                bits&=(1<<limitLead)-1;
-            }
-            for(trail=0; trail<64; ++trail) {
-                table[trail]|=bits;
-            }
-        }
-        // limit<=0x800. If limit==0x800 then limitLead=32 and limitTrail=0.
-        // In that case, bits=1<<limitLead is undefined but the bits value
-        // is not used because trail<limitTrail is already false.
-        bits=(uint32_t)1<<((limitLead == 0x20) ? (limitLead - 1) : limitLead);
-        for(trail=0; trail<limitTrail; ++trail) {
-            table[trail]|=bits;
-        }
-    }
-}
-
-void BMPSet::initBits() {
-    UChar32 start, limit;
-    int32_t listIndex=0;
-
-    // Set asciiBytes[].
-    do {
-        start=list[listIndex++];
-        if(listIndex<listLength) {
-            limit=list[listIndex++];
-        } else {
-            limit=0x110000;
-        }
-        if(start>=0x80) {
-            break;
-        }
-        do {
-            asciiBytes[start++]=1;
-        } while(start<limit && start<0x80);
-    } while(limit<=0x80);
-
-    // Set table7FF[].
-    while(start<0x800) {
-        set32x64Bits(table7FF, start, limit<=0x800 ? limit : 0x800);
-        if(limit>0x800) {
-            start=0x800;
-            break;
-        }
-
-        start=list[listIndex++];
-        if(listIndex<listLength) {
-            limit=list[listIndex++];
-        } else {
-            limit=0x110000;
-        }
-    }
-
-    // Set bmpBlockBits[].
-    int32_t minStart=0x800;
-    while(start<0x10000) {
-        if(limit>0x10000) {
-            limit=0x10000;
-        }
-
-        if(start<minStart) {
-            start=minStart;
-        }
-        if(start<limit) {  // Else: Another range entirely in a known mixed-value block.
-            if(start&0x3f) {
-                // Mixed-value block of 64 code points.
-                start>>=6;
-                bmpBlockBits[start&0x3f]|=0x10001<<(start>>6);
-                start=(start+1)<<6;  // Round up to the next block boundary.
-                minStart=start;      // Ignore further ranges in this block.
-            }
-            if(start<limit) {
-                if(start<(limit&~0x3f)) {
-                    // Multiple all-ones blocks of 64 code points each.
-                    set32x64Bits(bmpBlockBits, start>>6, limit>>6);
-                }
-
-                if(limit&0x3f) {
-                    // Mixed-value block of 64 code points.
-                    limit>>=6;
-                    bmpBlockBits[limit&0x3f]|=0x10001<<(limit>>6);
-                    limit=(limit+1)<<6;  // Round up to the next block boundary.
-                    minStart=limit;      // Ignore further ranges in this block.
-                }
-            }
-        }
-
-        if(limit==0x10000) {
-            break;
-        }
-
-        start=list[listIndex++];
-        if(listIndex<listLength) {
-            limit=list[listIndex++];
-        } else {
-            limit=0x110000;
-        }
-    }
-}
-
-/*
- * Override some bits and bytes to the result of contains(FFFD)
- * for faster validity checking at runtime.
- * No need to set 0 values where they were reset to 0 in the constructor
- * and not modified by initBits().
- * (asciiBytes[] trail bytes, table7FF[] 0..7F, bmpBlockBits[] 0..7FF)
- * Need to set 0 values for surrogates D800..DFFF.
- */
-void BMPSet::overrideIllegal() {
-    uint32_t bits, mask;
-    int32_t i;
-
-    if(containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10])) {
-        // contains(FFFD)==TRUE
-        for(i=0x80; i<0xc0; ++i) {
-            asciiBytes[i]=1;
-        }
-
-        bits=3;                 // Lead bytes 0xC0 and 0xC1.
-        for(i=0; i<64; ++i) {
-            table7FF[i]|=bits;
-        }
-
-        bits=1;                 // Lead byte 0xE0.
-        for(i=0; i<32; ++i) {   // First half of 4k block.
-            bmpBlockBits[i]|=bits;
-        }
-
-        mask=~(0x10001<<0xd);   // Lead byte 0xED.
-        bits=1<<0xd;
-        for(i=32; i<64; ++i) {  // Second half of 4k block.
-            bmpBlockBits[i]=(bmpBlockBits[i]&mask)|bits;
-        }
-    } else {
-        // contains(FFFD)==FALSE
-        mask=~(0x10001<<0xd);   // Lead byte 0xED.
-        for(i=32; i<64; ++i) {  // Second half of 4k block.
-            bmpBlockBits[i]&=mask;
-        }
-    }
-}
-
-int32_t BMPSet::findCodePoint(UChar32 c, int32_t lo, int32_t hi) const {
-    /* Examples:
-                                       findCodePoint(c)
-       set              list[]         c=0 1 3 4 7 8
-       ===              ==============   ===========
-       []               [110000]         0 0 0 0 0 0
-       [\u0000-\u0003]  [0, 4, 110000]   1 1 1 2 2 2
-       [\u0004-\u0007]  [4, 8, 110000]   0 0 0 1 1 2
-       [:Any:]          [0, 110000]      1 1 1 1 1 1
-     */
-
-    // Return the smallest i such that c < list[i].  Assume
-    // list[len - 1] == HIGH and that c is legal (0..HIGH-1).
-    if (c < list[lo])
-        return lo;
-    // High runner test.  c is often after the last range, so an
-    // initial check for this condition pays off.
-    if (lo >= hi || c >= list[hi-1])
-        return hi;
-    // invariant: c >= list[lo]
-    // invariant: c < list[hi]
-    for (;;) {
-        int32_t i = (lo + hi) >> 1;
-        if (i == lo) {
-            break; // Found!
-        } else if (c < list[i]) {
-            hi = i;
-        } else {
-            lo = i;
-        }
-    }
-    return hi;
-}
-
-UBool
-BMPSet::contains(UChar32 c) const {
-    if((uint32_t)c<=0x7f) {
-        return (UBool)asciiBytes[c];
-    } else if((uint32_t)c<=0x7ff) {
-        return (UBool)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0);
-    } else if((uint32_t)c<0xd800 || (c>=0xe000 && c<=0xffff)) {
-        int lead=c>>12;
-        uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
-        if(twoBits<=1) {
-            // All 64 code points with the same bits 15..6
-            // are either in the set or not.
-            return (UBool)twoBits;
-        } else {
-            // Look up the code point in its 4k block of code points.
-            return containsSlow(c, list4kStarts[lead], list4kStarts[lead+1]);
-        }
-    } else if((uint32_t)c<=0x10ffff) {
-        // surrogate or supplementary code point
-        return containsSlow(c, list4kStarts[0xd], list4kStarts[0x11]);
-    } else {
-        // Out-of-range code points get FALSE, consistent with long-standing
-        // behavior of UnicodeSet::contains(c).
-        return FALSE;
-    }
-}
-
-/*
- * Check for sufficient length for trail unit for each surrogate pair.
- * Handle single surrogates as surrogate code points as usual in ICU.
- */
-const UChar *
-BMPSet::span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const {
-    UChar c, c2;
-
-    if(spanCondition) {
-        // span
-        do {
-            c=*s;
-            if(c<=0x7f) {
-                if(!asciiBytes[c]) {
-                    break;
-                }
-            } else if(c<=0x7ff) {
-                if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))==0) {
-                    break;
-                }
-            } else if(c<0xd800 || c>=0xe000) {
-                int lead=c>>12;
-                uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
-                if(twoBits<=1) {
-                    // All 64 code points with the same bits 15..6
-                    // are either in the set or not.
-                    if(twoBits==0) {
-                        break;
-                    }
-                } else {
-                    // Look up the code point in its 4k block of code points.
-                    if(!containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
-                        break;
-                    }
-                }
-            } else if(c>=0xdc00 || (s+1)==limit || (c2=s[1])<0xdc00 || c2>=0xe000) {
-                // surrogate code point
-                if(!containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
-                    break;
-                }
-            } else {
-                // surrogate pair
-                if(!containsSlow(U16_GET_SUPPLEMENTARY(c, c2), list4kStarts[0x10], list4kStarts[0x11])) {
-                    break;
-                }
-                ++s;
-            }
-        } while(++s<limit);
-    } else {
-        // span not
-        do {
-            c=*s;
-            if(c<=0x7f) {
-                if(asciiBytes[c]) {
-                    break;
-                }
-            } else if(c<=0x7ff) {
-                if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) {
-                    break;
-                }
-            } else if(c<0xd800 || c>=0xe000) {
-                int lead=c>>12;
-                uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
-                if(twoBits<=1) {
-                    // All 64 code points with the same bits 15..6
-                    // are either in the set or not.
-                    if(twoBits!=0) {
-                        break;
-                    }
-                } else {
-                    // Look up the code point in its 4k block of code points.
-                    if(containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
-                        break;
-                    }
-                }
-            } else if(c>=0xdc00 || (s+1)==limit || (c2=s[1])<0xdc00 || c2>=0xe000) {
-                // surrogate code point
-                if(containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
-                    break;
-                }
-            } else {
-                // surrogate pair
-                if(containsSlow(U16_GET_SUPPLEMENTARY(c, c2), list4kStarts[0x10], list4kStarts[0x11])) {
-                    break;
-                }
-                ++s;
-            }
-        } while(++s<limit);
-    }
-    return s;
-}
-
-/* Symmetrical with span(). */
-const UChar *
-BMPSet::spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const {
-    UChar c, c2;
-
-    if(spanCondition) {
-        // span
-        for(;;) {
-            c=*(--limit);
-            if(c<=0x7f) {
-                if(!asciiBytes[c]) {
-                    break;
-                }
-            } else if(c<=0x7ff) {
-                if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))==0) {
-                    break;
-                }
-            } else if(c<0xd800 || c>=0xe000) {
-                int lead=c>>12;
-                uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
-                if(twoBits<=1) {
-                    // All 64 code points with the same bits 15..6
-                    // are either in the set or not.
-                    if(twoBits==0) {
-                        break;
-                    }
-                } else {
-                    // Look up the code point in its 4k block of code points.
-                    if(!containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
-                        break;
-                    }
-                }
-            } else if(c<0xdc00 || s==limit || (c2=*(limit-1))<0xd800 || c2>=0xdc00) {
-                // surrogate code point
-                if(!containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
-                    break;
-                }
-            } else {
-                // surrogate pair
-                if(!containsSlow(U16_GET_SUPPLEMENTARY(c2, c), list4kStarts[0x10], list4kStarts[0x11])) {
-                    break;
-                }
-                --limit;
-            }
-            if(s==limit) {
-                return s;
-            }
-        }
-    } else {
-        // span not
-        for(;;) {
-            c=*(--limit);
-            if(c<=0x7f) {
-                if(asciiBytes[c]) {
-                    break;
-                }
-            } else if(c<=0x7ff) {
-                if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) {
-                    break;
-                }
-            } else if(c<0xd800 || c>=0xe000) {
-                int lead=c>>12;
-                uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
-                if(twoBits<=1) {
-                    // All 64 code points with the same bits 15..6
-                    // are either in the set or not.
-                    if(twoBits!=0) {
-                        break;
-                    }
-                } else {
-                    // Look up the code point in its 4k block of code points.
-                    if(containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
-                        break;
-                    }
-                }
-            } else if(c<0xdc00 || s==limit || (c2=*(limit-1))<0xd800 || c2>=0xdc00) {
-                // surrogate code point
-                if(containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
-                    break;
-                }
-            } else {
-                // surrogate pair
-                if(containsSlow(U16_GET_SUPPLEMENTARY(c2, c), list4kStarts[0x10], list4kStarts[0x11])) {
-                    break;
-                }
-                --limit;
-            }
-            if(s==limit) {
-                return s;
-            }
-        }
-    }
-    return limit+1;
-}
-
-/*
- * Precheck for sufficient trail bytes at end of string only once per span.
- * Check validity.
- */
-const uint8_t *
-BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
-    const uint8_t *limit=s+length;
-    uint8_t b=*s;
-    if((int8_t)b>=0) {
-        // Initial all-ASCII span.
-        if(spanCondition) {
-            do {
-                if(!asciiBytes[b] || ++s==limit) {
-                    return s;
-                }
-                b=*s;
-            } while((int8_t)b>=0);
-        } else {
-            do {
-                if(asciiBytes[b] || ++s==limit) {
-                    return s;
-                }
-                b=*s;
-            } while((int8_t)b>=0);
-        }
-        length=(int32_t)(limit-s);
-    }
-
-    if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
-        spanCondition=USET_SPAN_CONTAINED;  // Pin to 0/1 values.
-    }
-
-    const uint8_t *limit0=limit;
-
-    /*
-     * Make sure that the last 1/2/3/4-byte sequence before limit is complete
-     * or runs into a lead byte.
-     * In the span loop compare s with limit only once
-     * per multi-byte character.
-     *
-     * Give a trailing illegal sequence the same value as the result of contains(FFFD),
-     * including it if that is part of the span, otherwise set limit0 to before
-     * the truncated sequence.
-     */
-    b=*(limit-1);
-    if((int8_t)b<0) {
-        // b>=0x80: lead or trail byte
-        if(b<0xc0) {
-            // single trail byte, check for preceding 3- or 4-byte lead byte
-            if(length>=2 && (b=*(limit-2))>=0xe0) {
-                limit-=2;
-                if(asciiBytes[0x80]!=spanCondition) {
-                    limit0=limit;
-                }
-            } else if(b<0xc0 && b>=0x80 && length>=3 && (b=*(limit-3))>=0xf0) {
-                // 4-byte lead byte with only two trail bytes
-                limit-=3;
-                if(asciiBytes[0x80]!=spanCondition) {
-                    limit0=limit;
-                }
-            }
-        } else {
-            // lead byte with no trail bytes
-            --limit;
-            if(asciiBytes[0x80]!=spanCondition) {
-                limit0=limit;
-            }
-        }
-    }
-
-    uint8_t t1, t2, t3;
-
-    while(s<limit) {
-        b=*s;
-        if(b<0xc0) {
-            // ASCII; or trail bytes with the result of contains(FFFD).
-            if(spanCondition) {
-                do {
-                    if(!asciiBytes[b]) {
-                        return s;
-                    } else if(++s==limit) {
-                        return limit0;
-                    }
-                    b=*s;
-                } while(b<0xc0);
-            } else {
-                do {
-                    if(asciiBytes[b]) {
-                        return s;
-                    } else if(++s==limit) {
-                        return limit0;
-                    }
-                    b=*s;
-                } while(b<0xc0);
-            }
-        }
-        ++s;  // Advance past the lead byte.
-        if(b>=0xe0) {
-            if(b<0xf0) {
-                if( /* handle U+0000..U+FFFF inline */
-                    (t1=(uint8_t)(s[0]-0x80)) <= 0x3f &&
-                    (t2=(uint8_t)(s[1]-0x80)) <= 0x3f
-                ) {
-                    b&=0xf;
-                    uint32_t twoBits=(bmpBlockBits[t1]>>b)&0x10001;
-                    if(twoBits<=1) {
-                        // All 64 code points with this lead byte and middle trail byte
-                        // are either in the set or not.
-                        if(twoBits!=(uint32_t)spanCondition) {
-                            return s-1;
-                        }
-                    } else {
-                        // Look up the code point in its 4k block of code points.
-                        UChar32 c=(b<<12)|(t1<<6)|t2;
-                        if(containsSlow(c, list4kStarts[b], list4kStarts[b+1]) != spanCondition) {
-                            return s-1;
-                        }
-                    }
-                    s+=2;
-                    continue;
-                }
-            } else if( /* handle U+10000..U+10FFFF inline */
-                (t1=(uint8_t)(s[0]-0x80)) <= 0x3f &&
-                (t2=(uint8_t)(s[1]-0x80)) <= 0x3f &&
-                (t3=(uint8_t)(s[2]-0x80)) <= 0x3f
-            ) {
-                // Give an illegal sequence the same value as the result of contains(FFFD).
-                UChar32 c=((UChar32)(b-0xf0)<<18)|((UChar32)t1<<12)|(t2<<6)|t3;
-                if( (   (0x10000<=c && c<=0x10ffff) ?
-                            containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) :
-                            asciiBytes[0x80]
-                    ) != spanCondition
-                ) {
-                    return s-1;
-                }
-                s+=3;
-                continue;
-            }
-        } else /* 0xc0<=b<0xe0 */ {
-            if( /* handle U+0000..U+07FF inline */
-                (t1=(uint8_t)(*s-0x80)) <= 0x3f
-            ) {
-                if((USetSpanCondition)((table7FF[t1]&((uint32_t)1<<(b&0x1f)))!=0) != spanCondition) {
-                    return s-1;
-                }
-                ++s;
-                continue;
-            }
-        }
-
-        // Give an illegal sequence the same value as the result of contains(FFFD).
-        // Handle each byte of an illegal sequence separately to simplify the code;
-        // no need to optimize error handling.
-        if(asciiBytes[0x80]!=spanCondition) {
-            return s-1;
-        }
-    }
-
-    return limit0;
-}
-
-/*
- * While going backwards through UTF-8 optimize only for ASCII.
- * Unlike UTF-16, UTF-8 is not forward-backward symmetrical, that is, it is not
- * possible to tell from the last byte in a multi-byte sequence how many
- * preceding bytes there should be. Therefore, going backwards through UTF-8
- * is much harder than going forward.
- */
-int32_t
-BMPSet::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
-    if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
-        spanCondition=USET_SPAN_CONTAINED;  // Pin to 0/1 values.
-    }
-
-    uint8_t b;
-
-    do {
-        b=s[--length];
-        if((int8_t)b>=0) {
-            // ASCII sub-span
-            if(spanCondition) {
-                do {
-                    if(!asciiBytes[b]) {
-                        return length+1;
-                    } else if(length==0) {
-                        return 0;
-                    }
-                    b=s[--length];
-                } while((int8_t)b>=0);
-            } else {
-                do {
-                    if(asciiBytes[b]) {
-                        return length+1;
-                    } else if(length==0) {
-                        return 0;
-                    }
-                    b=s[--length];
-                } while((int8_t)b>=0);
-            }
-        }
-
-        int32_t prev=length;
-        UChar32 c;
-        if(b<0xc0) {
-            // trail byte: collect a multi-byte character
-            c=utf8_prevCharSafeBody(s, 0, &length, b, -1);
-            if(c<0) {
-                c=0xfffd;
-            }
-        } else {
-            // lead byte in last-trail position
-            c=0xfffd;
-        }
-        // c is a valid code point, not ASCII, not a surrogate
-        if(c<=0x7ff) {
-            if((USetSpanCondition)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) != spanCondition) {
-                return prev+1;
-            }
-        } else if(c<=0xffff) {
-            int lead=c>>12;
-            uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
-            if(twoBits<=1) {
-                // All 64 code points with the same bits 15..6
-                // are either in the set or not.
-                if(twoBits!=(uint32_t)spanCondition) {
-                    return prev+1;
-                }
-            } else {
-                // Look up the code point in its 4k block of code points.
-                if(containsSlow(c, list4kStarts[lead], list4kStarts[lead+1]) != spanCondition) {
-                    return prev+1;
-                }
-            }
-        } else {
-            if(containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) != spanCondition) {
-                return prev+1;
-            }
-        }
-    } while(length>0);
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/bmpset.h b/src/third_party/mozjs/intl/icu/source/common/bmpset.h
deleted file mode 100644
index d9e08ea..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/bmpset.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2007, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  bmpset.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2007jan29
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __BMPSET_H__
-#define __BMPSET_H__
-
-#include "unicode/utypes.h"
-#include "unicode/uniset.h"
-
-U_NAMESPACE_BEGIN
-
-/*
- * Helper class for frozen UnicodeSets, implements contains() and span()
- * optimized for BMP code points. Structured to be UTF-8-friendly.
- *
- * ASCII: Look up bytes.
- * 2-byte characters: Bits organized vertically.
- * 3-byte characters: Use zero/one/mixed data per 64-block in U+0000..U+FFFF,
- *                    with mixed for illegal ranges.
- * Supplementary characters: Call contains() on the parent set.
- */
-class BMPSet : public UMemory {
-public:
-    BMPSet(const int32_t *parentList, int32_t parentListLength);
-    BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength);
-    virtual ~BMPSet();
-
-    virtual UBool contains(UChar32 c) const;
-
-    /*
-     * Span the initial substring for which each character c has spanCondition==contains(c).
-     * It must be s<limit and spanCondition==0 or 1.
-     * @return The string pointer which limits the span.
-     */
-    const UChar *span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const;
-
-    /*
-     * Span the trailing substring for which each character c has spanCondition==contains(c).
-     * It must be s<limit and spanCondition==0 or 1.
-     * @return The string pointer which starts the span.
-     */
-    const UChar *spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const;
-
-    /*
-     * Span the initial substring for which each character c has spanCondition==contains(c).
-     * It must be length>0 and spanCondition==0 or 1.
-     * @return The string pointer which limits the span.
-     */
-    const uint8_t *spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const;
-
-    /*
-     * Span the trailing substring for which each character c has spanCondition==contains(c).
-     * It must be length>0 and spanCondition==0 or 1.
-     * @return The start of the span.
-     */
-    int32_t spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const;
-
-private:
-    void initBits();
-    void overrideIllegal();
-
-    /**
-     * Same as UnicodeSet::findCodePoint(UChar32 c) const except that the
-     * binary search is restricted for finding code points in a certain range.
-     *
-     * For restricting the search for finding in the range start..end,
-     * pass in
-     *   lo=findCodePoint(start) and
-     *   hi=findCodePoint(end)
-     * with 0<=lo<=hi<len.
-     * findCodePoint(c) defaults to lo=0 and hi=len-1.
-     *
-     * @param c a character in a subrange of MIN_VALUE..MAX_VALUE
-     * @param lo The lowest index to be returned.
-     * @param hi The highest index to be returned.
-     * @return the smallest integer i in the range lo..hi,
-     *         inclusive, such that c < list[i]
-     */
-    int32_t findCodePoint(UChar32 c, int32_t lo, int32_t hi) const;
-
-    inline UBool containsSlow(UChar32 c, int32_t lo, int32_t hi) const;
-
-    /*
-     * One byte per ASCII character, or trail byte in lead position.
-     * 0 or 1 for ASCII characters.
-     * The value for trail bytes is the result of contains(FFFD)
-     * for faster validity checking at runtime.
-     */
-    UBool asciiBytes[0xc0];
-
-    /*
-     * One bit per code point from U+0000..U+07FF.
-     * The bits are organized vertically; consecutive code points
-     * correspond to the same bit positions in consecutive table words.
-     * With code point parts
-     *   lead=c{10..6}
-     *   trail=c{5..0}
-     * it is set.contains(c)==(table7FF[trail] bit lead)
-     *
-     * Bits for 0..7F (non-shortest forms) are set to the result of contains(FFFD)
-     * for faster validity checking at runtime.
-     */
-    uint32_t table7FF[64];
-
-    /*
-     * One bit per 64 BMP code points.
-     * The bits are organized vertically; consecutive 64-code point blocks
-     * correspond to the same bit position in consecutive table words.
-     * With code point parts
-     *   lead=c{15..12}
-     *   t1=c{11..6}
-     * test bits (lead+16) and lead in bmpBlockBits[t1].
-     * If the upper bit is 0, then the lower bit indicates if contains(c)
-     * for all code points in the 64-block.
-     * If the upper bit is 1, then the block is mixed and set.contains(c)
-     * must be called.
-     *
-     * Bits for 0..7FF (non-shortest forms) and D800..DFFF are set to
-     * the result of contains(FFFD) for faster validity checking at runtime.
-     */
-    uint32_t bmpBlockBits[64];
-
-    /*
-     * Inversion list indexes for restricted binary searches in
-     * findCodePoint(), from
-     * findCodePoint(U+0800, U+1000, U+2000, .., U+F000, U+10000).
-     * U+0800 is the first 3-byte-UTF-8 code point. Code points below U+0800 are
-     * always looked up in the bit tables.
-     * The last pair of indexes is for finding supplementary code points.
-     */
-    int32_t list4kStarts[18];
-
-    /*
-     * The inversion list of the parent set, for the slower contains() implementation
-     * for mixed BMP blocks and for supplementary code points.
-     * The list is terminated with list[listLength-1]=0x110000.
-     */
-    const int32_t *list;
-    int32_t listLength;
-};
-
-inline UBool BMPSet::containsSlow(UChar32 c, int32_t lo, int32_t hi) const {
-    return (UBool)(findCodePoint(c, lo, hi) & 1);
-}
-
-U_NAMESPACE_END
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/brkeng.cpp b/src/third_party/mozjs/intl/icu/source/common/brkeng.cpp
deleted file mode 100644
index bb61ad6..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/brkeng.cpp
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- ************************************************************************************
- * Copyright (C) 2006-2012, International Business Machines Corporation
- * and others. All Rights Reserved.
- ************************************************************************************
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "brkeng.h"
-#include "dictbe.h"
-#include "unicode/uchar.h"
-#include "unicode/uniset.h"
-#include "unicode/chariter.h"
-#include "unicode/ures.h"
-#include "unicode/udata.h"
-#include "unicode/putil.h"
-#include "unicode/ustring.h"
-#include "unicode/uscript.h"
-#include "unicode/ucharstrie.h"
-#include "unicode/bytestrie.h"
-#include "charstr.h"
-#include "dictionarydata.h"
-#include "uvector.h"
-#include "umutex.h"
-#include "uresimp.h"
-#include "ubrkimpl.h"
-
-U_NAMESPACE_BEGIN
-
-/*
- ******************************************************************
- */
-
-LanguageBreakEngine::LanguageBreakEngine() {
-}
-
-LanguageBreakEngine::~LanguageBreakEngine() {
-}
-
-/*
- ******************************************************************
- */
-
-LanguageBreakFactory::LanguageBreakFactory() {
-}
-
-LanguageBreakFactory::~LanguageBreakFactory() {
-}
-
-/*
- ******************************************************************
- */
-
-UnhandledEngine::UnhandledEngine(UErrorCode &/*status*/) {
-    for (int32_t i = 0; i < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0])); ++i) {
-        fHandled[i] = 0;
-    }
-}
-
-UnhandledEngine::~UnhandledEngine() {
-    for (int32_t i = 0; i < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0])); ++i) {
-        if (fHandled[i] != 0) {
-            delete fHandled[i];
-        }
-    }
-}
-
-UBool
-UnhandledEngine::handles(UChar32 c, int32_t breakType) const {
-    return (breakType >= 0 && breakType < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0]))
-        && fHandled[breakType] != 0 && fHandled[breakType]->contains(c));
-}
-
-int32_t
-UnhandledEngine::findBreaks( UText *text,
-                                 int32_t startPos,
-                                 int32_t endPos,
-                                 UBool reverse,
-                                 int32_t breakType,
-                                 UStack &/*foundBreaks*/ ) const {
-    if (breakType >= 0 && breakType < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0]))) {
-        UChar32 c = utext_current32(text); 
-        if (reverse) {
-            while((int32_t)utext_getNativeIndex(text) > startPos && fHandled[breakType]->contains(c)) {
-                c = utext_previous32(text);
-            }
-        }
-        else {
-            while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) {
-                utext_next32(text);            // TODO:  recast loop to work with post-increment operations.
-                c = utext_current32(text);
-            }
-        }
-    }
-    return 0;
-}
-
-void
-UnhandledEngine::handleCharacter(UChar32 c, int32_t breakType) {
-    if (breakType >= 0 && breakType < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0]))) {
-        if (fHandled[breakType] == 0) {
-            fHandled[breakType] = new UnicodeSet();
-            if (fHandled[breakType] == 0) {
-                return;
-            }
-        }
-        if (!fHandled[breakType]->contains(c)) {
-            UErrorCode status = U_ZERO_ERROR;
-            // Apply the entire script of the character.
-            int32_t script = u_getIntPropertyValue(c, UCHAR_SCRIPT);
-            fHandled[breakType]->applyIntPropertyValue(UCHAR_SCRIPT, script, status);
-        }
-    }
-}
-
-/*
- ******************************************************************
- */
-
-ICULanguageBreakFactory::ICULanguageBreakFactory(UErrorCode &/*status*/) {
-    fEngines = 0;
-}
-
-ICULanguageBreakFactory::~ICULanguageBreakFactory() {
-    if (fEngines != 0) {
-        delete fEngines;
-    }
-}
-
-U_NAMESPACE_END
-U_CDECL_BEGIN
-static void U_CALLCONV _deleteEngine(void *obj) {
-    delete (const icu::LanguageBreakEngine *) obj;
-}
-U_CDECL_END
-U_NAMESPACE_BEGIN
-
-const LanguageBreakEngine *
-ICULanguageBreakFactory::getEngineFor(UChar32 c, int32_t breakType) {
-    UBool       needsInit;
-    int32_t     i;
-    const LanguageBreakEngine *lbe = NULL;
-    UErrorCode  status = U_ZERO_ERROR;
-
-    // TODO: The global mutex should not be used.
-    // The global mutex should only be used for short periods.
-    // A ICULanguageBreakFactory specific mutex should be used.
-    umtx_lock(NULL);
-    needsInit = (UBool)(fEngines == NULL);
-    if (!needsInit) {
-        i = fEngines->size();
-        while (--i >= 0) {
-            lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i));
-            if (lbe != NULL && lbe->handles(c, breakType)) {
-                break;
-            }
-            lbe = NULL;
-        }
-    }
-    umtx_unlock(NULL);
-    
-    if (lbe != NULL) {
-        return lbe;
-    }
-    
-    if (needsInit) {
-        UStack  *engines = new UStack(_deleteEngine, NULL, status);
-        if (U_SUCCESS(status) && engines == NULL) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-        }
-        else if (U_FAILURE(status)) {
-            delete engines;
-            engines = NULL;
-        }
-        else {
-            umtx_lock(NULL);
-            if (fEngines == NULL) {
-                fEngines = engines;
-                engines = NULL;
-            }
-            umtx_unlock(NULL);
-            delete engines;
-        }
-    }
-    
-    if (fEngines == NULL) {
-        return NULL;
-    }
-
-    // We didn't find an engine the first time through, or there was no
-    // stack. Create an engine.
-    const LanguageBreakEngine *newlbe = loadEngineFor(c, breakType);
-    
-    // Now get the lock, and see if someone else has created it in the
-    // meantime
-    umtx_lock(NULL);
-    i = fEngines->size();
-    while (--i >= 0) {
-        lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i));
-        if (lbe != NULL && lbe->handles(c, breakType)) {
-            break;
-        }
-        lbe = NULL;
-    }
-    if (lbe == NULL && newlbe != NULL) {
-        fEngines->push((void *)newlbe, status);
-        lbe = newlbe;
-        newlbe = NULL;
-    }
-    umtx_unlock(NULL);
-    
-    delete newlbe;
-
-    return lbe;
-}
-
-const LanguageBreakEngine *
-ICULanguageBreakFactory::loadEngineFor(UChar32 c, int32_t breakType) {
-    UErrorCode status = U_ZERO_ERROR;
-    UScriptCode code = uscript_getScript(c, &status);
-    if (U_SUCCESS(status)) {
-        DictionaryMatcher *m = loadDictionaryMatcherFor(code, breakType);
-        if (m != NULL) {
-            const LanguageBreakEngine *engine = NULL;
-            switch(code) {
-            case USCRIPT_THAI:
-                engine = new ThaiBreakEngine(m, status);
-                break;
-            case USCRIPT_KHMER:
-                engine = new KhmerBreakEngine(m, status);
-                break;
-
-#if !UCONFIG_NO_NORMALIZATION
-                // CJK not available w/o normalization
-            case USCRIPT_HANGUL:
-                engine = new CjkBreakEngine(m, kKorean, status);
-                break;
-
-            // use same BreakEngine and dictionary for both Chinese and Japanese
-            case USCRIPT_HIRAGANA:
-            case USCRIPT_KATAKANA:
-            case USCRIPT_HAN:
-                engine = new CjkBreakEngine(m, kChineseJapanese, status);
-                break;
-#if 0
-            // TODO: Have to get some characters with script=common handled
-            // by CjkBreakEngine (e.g. U+309B). Simply subjecting
-            // them to CjkBreakEngine does not work. The engine has to
-            // special-case them.
-            case USCRIPT_COMMON:
-            {
-                UBlockCode block = ublock_getCode(code);
-                if (block == UBLOCK_HIRAGANA || block == UBLOCK_KATAKANA)
-                   engine = new CjkBreakEngine(dict, kChineseJapanese, status);
-                break;
-            }
-#endif
-#endif
-
-            default:
-                break;
-            }
-            if (engine == NULL) {
-                delete m;
-            }
-            else if (U_FAILURE(status)) {
-                delete engine;
-                engine = NULL;
-            }
-            return engine;
-        }
-    }
-    return NULL;
-}
-
-DictionaryMatcher *
-ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script, int32_t /* brkType */) { 
-    UErrorCode status = U_ZERO_ERROR;
-    // open root from brkitr tree.
-    UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, "", &status);
-    b = ures_getByKeyWithFallback(b, "dictionaries", b, &status);
-    int32_t dictnlength = 0;
-    const UChar *dictfname =
-        ures_getStringByKeyWithFallback(b, uscript_getShortName(script), &dictnlength, &status);
-    if (U_FAILURE(status)) {
-        ures_close(b);
-        return NULL;
-    }
-    CharString dictnbuf;
-    CharString ext;
-    const UChar *extStart = u_memrchr(dictfname, 0x002e, dictnlength);  // last dot
-    if (extStart != NULL) {
-        int32_t len = (int32_t)(extStart - dictfname);
-        ext.appendInvariantChars(UnicodeString(FALSE, extStart + 1, dictnlength - len - 1), status);
-        dictnlength = len;
-    }
-    dictnbuf.appendInvariantChars(UnicodeString(FALSE, dictfname, dictnlength), status);
-    ures_close(b);
-
-    UDataMemory *file = udata_open(U_ICUDATA_BRKITR, ext.data(), dictnbuf.data(), &status);
-    if (U_SUCCESS(status)) {
-        // build trie
-        const uint8_t *data = (const uint8_t *)udata_getMemory(file);
-        const int32_t *indexes = (const int32_t *)data;
-        const int32_t offset = indexes[DictionaryData::IX_STRING_TRIE_OFFSET];
-        const int32_t trieType = indexes[DictionaryData::IX_TRIE_TYPE] & DictionaryData::TRIE_TYPE_MASK;
-        DictionaryMatcher *m = NULL;
-        if (trieType == DictionaryData::TRIE_TYPE_BYTES) {
-            const int32_t transform = indexes[DictionaryData::IX_TRANSFORM];
-            const char *characters = (const char *)(data + offset);
-            m = new BytesDictionaryMatcher(characters, transform, file);
-        }
-        else if (trieType == DictionaryData::TRIE_TYPE_UCHARS) {
-            const UChar *characters = (const UChar *)(data + offset);
-            m = new UCharsDictionaryMatcher(characters, file);
-        }
-        if (m == NULL) {
-            // no matcher exists to take ownership - either we are an invalid 
-            // type or memory allocation failed
-            udata_close(file);
-        }
-        return m;
-    } else if (dictfname != NULL) {
-        // we don't have a dictionary matcher.
-        // returning NULL here will cause us to fail to find a dictionary break engine, as expected
-        status = U_ZERO_ERROR;
-        return NULL;
-    }
-    return NULL;
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/brkeng.h b/src/third_party/mozjs/intl/icu/source/common/brkeng.h
deleted file mode 100644
index 7f926f1..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/brkeng.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- ************************************************************************************
- * Copyright (C) 2006-2012, International Business Machines Corporation and others. *
- * All Rights Reserved.                                                             *
- ************************************************************************************
- */
-
-#ifndef BRKENG_H
-#define BRKENG_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/utext.h"
-#include "unicode/uscript.h"
-
-U_NAMESPACE_BEGIN
-
-class UnicodeSet;
-class UStack;
-class DictionaryMatcher;
-
-/*******************************************************************
- * LanguageBreakEngine
- */
-
-/**
- * <p>LanguageBreakEngines implement language-specific knowledge for
- * finding text boundaries within a run of characters belonging to a
- * specific set. The boundaries will be of a specific kind, e.g. word,
- * line, etc.</p>
- *
- * <p>LanguageBreakEngines should normally be implemented so as to
- * be shared between threads without locking.</p>
- */
-class LanguageBreakEngine : public UMemory {
- public:
-
-  /**
-   * <p>Default constructor.</p>
-   *
-   */
-  LanguageBreakEngine();
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~LanguageBreakEngine();
-
- /**
-  * <p>Indicate whether this engine handles a particular character for
-  * a particular kind of break.</p>
-  *
-  * @param c A character which begins a run that the engine might handle
-  * @param breakType The type of text break which the caller wants to determine
-  * @return TRUE if this engine handles the particular character and break
-  * type.
-  */
-  virtual UBool handles(UChar32 c, int32_t breakType) const = 0;
-
- /**
-  * <p>Find any breaks within a run in the supplied text.</p>
-  *
-  * @param text A UText representing the text. The
-  * iterator is left at the end of the run of characters which the engine
-  * is capable of handling.
-  * @param startPos The start of the run within the supplied text.
-  * @param endPos The end of the run within the supplied text.
-  * @param reverse Whether the caller is looking for breaks in a reverse
-  * direction.
-  * @param breakType The type of break desired, or -1.
-  * @param foundBreaks An allocated C array of the breaks found, if any
-  * @return The number of breaks found.
-  */
-  virtual int32_t findBreaks( UText *text,
-                              int32_t startPos,
-                              int32_t endPos,
-                              UBool reverse,
-                              int32_t breakType,
-                              UStack &foundBreaks ) const = 0;
-
-};
-
-/*******************************************************************
- * LanguageBreakFactory
- */
-
-/**
- * <p>LanguageBreakFactorys find and return a LanguageBreakEngine
- * that can determine breaks for characters in a specific set, if
- * such an object can be found.</p>
- *
- * <p>If a LanguageBreakFactory is to be shared between threads,
- * appropriate synchronization must be used; there is none internal
- * to the factory.</p>
- *
- * <p>A LanguageBreakEngine returned by a LanguageBreakFactory can
- * normally be shared between threads without synchronization, unless
- * the specific subclass of LanguageBreakFactory indicates otherwise.</p>
- *
- * <p>A LanguageBreakFactory is responsible for deleting any LanguageBreakEngine
- * it returns when it itself is deleted, unless the specific subclass of
- * LanguageBreakFactory indicates otherwise. Naturally, the factory should
- * not be deleted until the LanguageBreakEngines it has returned are no
- * longer needed.</p>
- */
-class LanguageBreakFactory : public UMemory {
- public:
-
-  /**
-   * <p>Default constructor.</p>
-   *
-   */
-  LanguageBreakFactory();
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~LanguageBreakFactory();
-
- /**
-  * <p>Find and return a LanguageBreakEngine that can find the desired
-  * kind of break for the set of characters to which the supplied
-  * character belongs. It is up to the set of available engines to
-  * determine what the sets of characters are.</p>
-  *
-  * @param c A character that begins a run for which a LanguageBreakEngine is
-  * sought.
-  * @param breakType The kind of text break for which a LanguageBreakEngine is
-  * sought.
-  * @return A LanguageBreakEngine with the desired characteristics, or 0.
-  */
-  virtual const LanguageBreakEngine *getEngineFor(UChar32 c, int32_t breakType) = 0;
-
-};
-
-/*******************************************************************
- * UnhandledEngine
- */
-
-/**
- * <p>UnhandledEngine is a special subclass of LanguageBreakEngine that
- * handles characters that no other LanguageBreakEngine is available to
- * handle. It is told the character and the type of break; at its
- * discretion it may handle more than the specified character (e.g.,
- * the entire script to which that character belongs.</p>
- *
- * <p>UnhandledEngines may not be shared between threads without
- * external synchronization.</p>
- */
-
-class UnhandledEngine : public LanguageBreakEngine {
- private:
-
-    /**
-     * The sets of characters handled, for each break type
-     * @internal
-     */
-
-  UnicodeSet    *fHandled[4];
-
- public:
-
-  /**
-   * <p>Default constructor.</p>
-   *
-   */
-  UnhandledEngine(UErrorCode &status);
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~UnhandledEngine();
-
- /**
-  * <p>Indicate whether this engine handles a particular character for
-  * a particular kind of break.</p>
-  *
-  * @param c A character which begins a run that the engine might handle
-  * @param breakType The type of text break which the caller wants to determine
-  * @return TRUE if this engine handles the particular character and break
-  * type.
-  */
-  virtual UBool handles(UChar32 c, int32_t breakType) const;
-
- /**
-  * <p>Find any breaks within a run in the supplied text.</p>
-  *
-  * @param text A UText representing the text (TODO: UText). The
-  * iterator is left at the end of the run of characters which the engine
-  * is capable of handling.
-  * @param startPos The start of the run within the supplied text.
-  * @param endPos The end of the run within the supplied text.
-  * @param reverse Whether the caller is looking for breaks in a reverse
-  * direction.
-  * @param breakType The type of break desired, or -1.
-  * @param foundBreaks An allocated C array of the breaks found, if any
-  * @return The number of breaks found.
-  */
-  virtual int32_t findBreaks( UText *text,
-                              int32_t startPos,
-                              int32_t endPos,
-                              UBool reverse,
-                              int32_t breakType,
-                              UStack &foundBreaks ) const;
-
- /**
-  * <p>Tell the engine to handle a particular character and break type.</p>
-  *
-  * @param c A character which the engine should handle
-  * @param breakType The type of text break for which the engine should handle c
-  */
-  virtual void handleCharacter(UChar32 c, int32_t breakType);
-
-};
-
-/*******************************************************************
- * ICULanguageBreakFactory
- */
-
-/**
- * <p>ICULanguageBreakFactory is the default LanguageBreakFactory for
- * ICU. It creates dictionary-based LanguageBreakEngines from dictionary
- * data in the ICU data file.</p>
- */
-class ICULanguageBreakFactory : public LanguageBreakFactory {
- private:
-
-    /**
-     * The stack of break engines created by this factory
-     * @internal
-     */
-
-  UStack    *fEngines;
-
- public:
-
-  /**
-   * <p>Standard constructor.</p>
-   *
-   */
-  ICULanguageBreakFactory(UErrorCode &status);
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~ICULanguageBreakFactory();
-
- /**
-  * <p>Find and return a LanguageBreakEngine that can find the desired
-  * kind of break for the set of characters to which the supplied
-  * character belongs. It is up to the set of available engines to
-  * determine what the sets of characters are.</p>
-  *
-  * @param c A character that begins a run for which a LanguageBreakEngine is
-  * sought.
-  * @param breakType The kind of text break for which a LanguageBreakEngine is
-  * sought.
-  * @return A LanguageBreakEngine with the desired characteristics, or 0.
-  */
-  virtual const LanguageBreakEngine *getEngineFor(UChar32 c, int32_t breakType);
-
-protected:
- /**
-  * <p>Create a LanguageBreakEngine for the set of characters to which
-  * the supplied character belongs, for the specified break type.</p>
-  *
-  * @param c A character that begins a run for which a LanguageBreakEngine is
-  * sought.
-  * @param breakType The kind of text break for which a LanguageBreakEngine is
-  * sought.
-  * @return A LanguageBreakEngine with the desired characteristics, or 0.
-  */
-  virtual const LanguageBreakEngine *loadEngineFor(UChar32 c, int32_t breakType);
-
-  /**
-   * <p>Create a DictionaryMatcher for the specified script and break type.</p>
-   * @param script An ISO 15924 script code that identifies the dictionary to be
-   * created.
-   * @param breakType The kind of text break for which a dictionary is 
-   * sought.
-   * @return A DictionaryMatcher with the desired characteristics, or NULL.
-   */
-  virtual DictionaryMatcher *loadDictionaryMatcherFor(UScriptCode script, int32_t breakType);
-};
-
-U_NAMESPACE_END
-
-    /* BRKENG_H */
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/brkiter.cpp b/src/third_party/mozjs/intl/icu/source/common/brkiter.cpp
deleted file mode 100644
index 90ba78d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/brkiter.cpp
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 1997-2011, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-* File TXTBDRY.CPP
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/18/97    aliu        Converted from OpenClass.  Added DONE.
-*   01/13/2000  helena      Added UErrorCode parameter to createXXXInstance methods.
-*****************************************************************************************
-*/
-
-// *****************************************************************************
-// This file was generated from the java source file BreakIterator.java
-// *****************************************************************************
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/rbbi.h"
-#include "unicode/brkiter.h"
-#include "unicode/udata.h"
-#include "unicode/ures.h"
-#include "unicode/ustring.h"
-#include "ucln_cmn.h"
-#include "cstring.h"
-#include "umutex.h"
-#include "servloc.h"
-#include "locbased.h"
-#include "uresimp.h"
-#include "uassert.h"
-#include "ubrkimpl.h"
-
-// *****************************************************************************
-// class BreakIterator
-// This class implements methods for finding the location of boundaries in text.
-// Instances of BreakIterator maintain a current position and scan over text
-// returning the index of characters where boundaries occur.
-// *****************************************************************************
-
-U_NAMESPACE_BEGIN
-
-// -------------------------------------
-
-BreakIterator*
-BreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode &status)
-{
-    char fnbuff[256];
-    char ext[4]={'\0'};
-    char actualLocale[ULOC_FULLNAME_CAPACITY];
-    int32_t size;
-    const UChar* brkfname = NULL;
-    UResourceBundle brkRulesStack;
-    UResourceBundle brkNameStack;
-    UResourceBundle *brkRules = &brkRulesStack;
-    UResourceBundle *brkName  = &brkNameStack;
-    RuleBasedBreakIterator *result = NULL;
-
-    if (U_FAILURE(status))
-        return NULL;
-
-    ures_initStackObject(brkRules);
-    ures_initStackObject(brkName);
-
-    // Get the locale
-    UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, loc.getName(), &status);
-    /* this is a hack for now. Should be fixed when the data is fetched from
-        brk_index.txt */
-    if(status==U_USING_DEFAULT_WARNING){
-        status=U_ZERO_ERROR;
-        ures_openFillIn(b, U_ICUDATA_BRKITR, "", &status);
-    }
-
-    // Get the "boundaries" array.
-    if (U_SUCCESS(status)) {
-        brkRules = ures_getByKeyWithFallback(b, "boundaries", brkRules, &status);
-        // Get the string object naming the rules file
-        brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status);
-        // Get the actual string
-        brkfname = ures_getString(brkName, &size, &status);
-        U_ASSERT((size_t)size<sizeof(fnbuff));
-        if ((size_t)size>=sizeof(fnbuff)) {
-            size=0;
-            if (U_SUCCESS(status)) {
-                status = U_BUFFER_OVERFLOW_ERROR;
-            }
-        }
-
-        // Use the string if we found it
-        if (U_SUCCESS(status) && brkfname) {
-            uprv_strncpy(actualLocale,
-                ures_getLocaleInternal(brkName, &status),
-                sizeof(actualLocale)/sizeof(actualLocale[0]));
-
-            UChar* extStart=u_strchr(brkfname, 0x002e);
-            int len = 0;
-            if(extStart!=NULL){
-                len = (int)(extStart-brkfname);
-                u_UCharsToChars(extStart+1, ext, sizeof(ext)); // nul terminates the buff
-                u_UCharsToChars(brkfname, fnbuff, len);
-            }
-            fnbuff[len]=0; // nul terminate
-        }
-    }
-
-    ures_close(brkRules);
-    ures_close(brkName);
-
-    UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status);
-    if (U_FAILURE(status)) {
-        ures_close(b);
-        return NULL;
-    }
-
-    // Create a RuleBasedBreakIterator
-    result = new RuleBasedBreakIterator(file, status);
-
-    // If there is a result, set the valid locale and actual locale, and the kind
-    if (U_SUCCESS(status) && result != NULL) {
-        U_LOCALE_BASED(locBased, *(BreakIterator*)result);
-        locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale);
-        result->setBreakType(kind);
-    }
-
-    ures_close(b);
-
-    if (U_FAILURE(status) && result != NULL) {  // Sometimes redundant check, but simple
-        delete result;
-        return NULL;
-    }
-
-    if (result == NULL) {
-        udata_close(file);
-        if (U_SUCCESS(status)) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-        }
-    }
-
-    return result;
-}
-
-// Creates a break iterator for word breaks.
-BreakIterator* U_EXPORT2
-BreakIterator::createWordInstance(const Locale& key, UErrorCode& status)
-{
-    return createInstance(key, UBRK_WORD, status);
-}
-
-// -------------------------------------
-
-// Creates a break iterator  for line breaks.
-BreakIterator* U_EXPORT2
-BreakIterator::createLineInstance(const Locale& key, UErrorCode& status)
-{
-    return createInstance(key, UBRK_LINE, status);
-}
-
-// -------------------------------------
-
-// Creates a break iterator  for character breaks.
-BreakIterator* U_EXPORT2
-BreakIterator::createCharacterInstance(const Locale& key, UErrorCode& status)
-{
-    return createInstance(key, UBRK_CHARACTER, status);
-}
-
-// -------------------------------------
-
-// Creates a break iterator  for sentence breaks.
-BreakIterator* U_EXPORT2
-BreakIterator::createSentenceInstance(const Locale& key, UErrorCode& status)
-{
-    return createInstance(key, UBRK_SENTENCE, status);
-}
-
-// -------------------------------------
-
-// Creates a break iterator for title casing breaks.
-BreakIterator* U_EXPORT2
-BreakIterator::createTitleInstance(const Locale& key, UErrorCode& status)
-{
-    return createInstance(key, UBRK_TITLE, status);
-}
-
-// -------------------------------------
-
-// Gets all the available locales that has localized text boundary data.
-const Locale* U_EXPORT2
-BreakIterator::getAvailableLocales(int32_t& count)
-{
-    return Locale::getAvailableLocales(count);
-}
-
-// ------------------------------------------
-//
-// Default constructor and destructor
-//
-//-------------------------------------------
-
-BreakIterator::BreakIterator()
-{
-    fBufferClone = FALSE;
-    *validLocale = *actualLocale = 0;
-}
-
-BreakIterator::~BreakIterator()
-{
-}
-
-// ------------------------------------------
-//
-// Registration
-//
-//-------------------------------------------
-#if !UCONFIG_NO_SERVICE
-
-// -------------------------------------
-
-class ICUBreakIteratorFactory : public ICUResourceBundleFactory {
-public:
-    virtual ~ICUBreakIteratorFactory();
-protected:
-    virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /*service*/, UErrorCode& status) const {
-        return BreakIterator::makeInstance(loc, kind, status);
-    }
-};
-
-ICUBreakIteratorFactory::~ICUBreakIteratorFactory() {}
-
-// -------------------------------------
-
-class ICUBreakIteratorService : public ICULocaleService {
-public:
-    ICUBreakIteratorService()
-        : ICULocaleService(UNICODE_STRING("Break Iterator", 14))
-    {
-        UErrorCode status = U_ZERO_ERROR;
-        registerFactory(new ICUBreakIteratorFactory(), status);
-    }
-
-    virtual ~ICUBreakIteratorService();
-
-    virtual UObject* cloneInstance(UObject* instance) const {
-        return ((BreakIterator*)instance)->clone();
-    }
-
-    virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const {
-        LocaleKey& lkey = (LocaleKey&)key;
-        int32_t kind = lkey.kind();
-        Locale loc;
-        lkey.currentLocale(loc);
-        return BreakIterator::makeInstance(loc, kind, status);
-    }
-
-    virtual UBool isDefault() const {
-        return countFactories() == 1;
-    }
-};
-
-ICUBreakIteratorService::~ICUBreakIteratorService() {}
-
-// -------------------------------------
-
-U_NAMESPACE_END
-
-// defined in ucln_cmn.h
-
-static icu::ICULocaleService* gService = NULL;
-
-/**
- * Release all static memory held by breakiterator.
- */
-U_CDECL_BEGIN
-static UBool U_CALLCONV breakiterator_cleanup(void) {
-#if !UCONFIG_NO_SERVICE
-    if (gService) {
-        delete gService;
-        gService = NULL;
-    }
-#endif
-    return TRUE;
-}
-U_CDECL_END
-U_NAMESPACE_BEGIN
-
-static ICULocaleService*
-getService(void)
-{
-    UBool needsInit;
-    UMTX_CHECK(NULL, (UBool)(gService == NULL), needsInit);
-
-    if (needsInit) {
-        ICULocaleService  *tService = new ICUBreakIteratorService();
-        umtx_lock(NULL);
-        if (gService == NULL) {
-            gService = tService;
-            tService = NULL;
-            ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup);
-        }
-        umtx_unlock(NULL);
-        delete tService;
-    }
-    return gService;
-}
-
-// -------------------------------------
-
-static inline UBool
-hasService(void)
-{
-    UBool retVal;
-    UMTX_CHECK(NULL, gService != NULL, retVal);
-    return retVal;
-}
-
-// -------------------------------------
-
-URegistryKey U_EXPORT2
-BreakIterator::registerInstance(BreakIterator* toAdopt, const Locale& locale, UBreakIteratorType kind, UErrorCode& status)
-{
-    ICULocaleService *service = getService();
-    if (service == NULL) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    return service->registerInstance(toAdopt, locale, kind, status);
-}
-
-// -------------------------------------
-
-UBool U_EXPORT2
-BreakIterator::unregister(URegistryKey key, UErrorCode& status)
-{
-    if (U_SUCCESS(status)) {
-        if (hasService()) {
-            return gService->unregister(key, status);
-        }
-        status = U_MEMORY_ALLOCATION_ERROR;
-    }
-    return FALSE;
-}
-
-// -------------------------------------
-
-StringEnumeration* U_EXPORT2
-BreakIterator::getAvailableLocales(void)
-{
-    ICULocaleService *service = getService();
-    if (service == NULL) {
-        return NULL;
-    }
-    return service->getAvailableLocales();
-}
-#endif /* UCONFIG_NO_SERVICE */
-
-// -------------------------------------
-
-BreakIterator*
-BreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& status)
-{
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-#if !UCONFIG_NO_SERVICE
-    if (hasService()) {
-        Locale actualLoc("");
-        BreakIterator *result = (BreakIterator*)gService->get(loc, kind, &actualLoc, status);
-        // TODO: The way the service code works in ICU 2.8 is that if
-        // there is a real registered break iterator, the actualLoc
-        // will be populated, but if the handleDefault path is taken
-        // (because nothing is registered that can handle the
-        // requested locale) then the actualLoc comes back empty.  In
-        // that case, the returned object already has its actual/valid
-        // locale data populated (by makeInstance, which is what
-        // handleDefault calls), so we don't touch it.  YES, A COMMENT
-        // THIS LONG is a sign of bad code -- so the action item is to
-        // revisit this in ICU 3.0 and clean it up/fix it/remove it.
-        if (U_SUCCESS(status) && (result != NULL) && *actualLoc.getName() != 0) {
-            U_LOCALE_BASED(locBased, *result);
-            locBased.setLocaleIDs(actualLoc.getName(), actualLoc.getName());
-        }
-        return result;
-    }
-    else
-#endif
-    {
-        return makeInstance(loc, kind, status);
-    }
-}
-
-// -------------------------------------
-
-BreakIterator*
-BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
-{
-
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-    BreakIterator *result = NULL;
-    switch (kind) {
-    case UBRK_CHARACTER:
-        result = BreakIterator::buildInstance(loc, "grapheme", kind, status);
-        break;
-    case UBRK_WORD:
-        result = BreakIterator::buildInstance(loc, "word", kind, status);
-        break;
-    case UBRK_LINE:
-        result = BreakIterator::buildInstance(loc, "line", kind, status);
-        break;
-    case UBRK_SENTENCE:
-        result = BreakIterator::buildInstance(loc, "sentence", kind, status);
-        break;
-    case UBRK_TITLE:
-        result = BreakIterator::buildInstance(loc, "title", kind, status);
-        break;
-    default:
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-    return result;
-}
-
-Locale
-BreakIterator::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
-    U_LOCALE_BASED(locBased, *this);
-    return locBased.getLocale(type, status);
-}
-
-const char *
-BreakIterator::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
-    U_LOCALE_BASED(locBased, *this);
-    return locBased.getLocaleID(type, status);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
-
-//eof
diff --git a/src/third_party/mozjs/intl/icu/source/common/bytestream.cpp b/src/third_party/mozjs/intl/icu/source/common/bytestream.cpp
deleted file mode 100644
index ebd4148..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/bytestream.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (C) 2009-2011, International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-// Copyright 2007 Google Inc. All Rights Reserved.
-// Author: sanjay@google.com (Sanjay Ghemawat)
-
-#include "unicode/utypes.h"
-#include "unicode/bytestream.h"
-#include "cmemory.h"
-
-U_NAMESPACE_BEGIN
-
-ByteSink::~ByteSink() {}
-
-char* ByteSink::GetAppendBuffer(int32_t min_capacity,
-                                int32_t /*desired_capacity_hint*/,
-                                char* scratch, int32_t scratch_capacity,
-                                int32_t* result_capacity) {
-  if (min_capacity < 1 || scratch_capacity < min_capacity) {
-    *result_capacity = 0;
-    return NULL;
-  }
-  *result_capacity = scratch_capacity;
-  return scratch;
-}
-
-void ByteSink::Flush() {}
-
-CheckedArrayByteSink::CheckedArrayByteSink(char* outbuf, int32_t capacity)
-    : outbuf_(outbuf), capacity_(capacity < 0 ? 0 : capacity),
-      size_(0), appended_(0), overflowed_(FALSE) {
-}
-
-CheckedArrayByteSink::~CheckedArrayByteSink() {}
-
-CheckedArrayByteSink& CheckedArrayByteSink::Reset() {
-  size_ = appended_ = 0;
-  overflowed_ = FALSE;
-  return *this;
-}
-
-void CheckedArrayByteSink::Append(const char* bytes, int32_t n) {
-  if (n <= 0) {
-    return;
-  }
-  appended_ += n;
-  int32_t available = capacity_ - size_;
-  if (n > available) {
-    n = available;
-    overflowed_ = TRUE;
-  }
-  if (n > 0 && bytes != (outbuf_ + size_)) {
-    uprv_memcpy(outbuf_ + size_, bytes, n);
-  }
-  size_ += n;
-}
-
-char* CheckedArrayByteSink::GetAppendBuffer(int32_t min_capacity,
-                                            int32_t /*desired_capacity_hint*/,
-                                            char* scratch,
-                                            int32_t scratch_capacity,
-                                            int32_t* result_capacity) {
-  if (min_capacity < 1 || scratch_capacity < min_capacity) {
-    *result_capacity = 0;
-    return NULL;
-  }
-  int32_t available = capacity_ - size_;
-  if (available >= min_capacity) {
-    *result_capacity = available;
-    return outbuf_ + size_;
-  } else {
-    *result_capacity = scratch_capacity;
-    return scratch;
-  }
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/bytestrie.cpp b/src/third_party/mozjs/intl/icu/source/common/bytestrie.cpp
deleted file mode 100644
index 8a1ab4c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/bytestrie.cpp
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  bytestrie.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010sep25
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/bytestream.h"
-#include "unicode/bytestrie.h"
-#include "unicode/uobject.h"
-#include "cmemory.h"
-#include "uassert.h"
-
-U_NAMESPACE_BEGIN
-
-BytesTrie::~BytesTrie() {
-    uprv_free(ownedArray_);
-}
-
-// lead byte already shifted right by 1.
-int32_t
-BytesTrie::readValue(const uint8_t *pos, int32_t leadByte) {
-    int32_t value;
-    if(leadByte<kMinTwoByteValueLead) {
-        value=leadByte-kMinOneByteValueLead;
-    } else if(leadByte<kMinThreeByteValueLead) {
-        value=((leadByte-kMinTwoByteValueLead)<<8)|*pos;
-    } else if(leadByte<kFourByteValueLead) {
-        value=((leadByte-kMinThreeByteValueLead)<<16)|(pos[0]<<8)|pos[1];
-    } else if(leadByte==kFourByteValueLead) {
-        value=(pos[0]<<16)|(pos[1]<<8)|pos[2];
-    } else {
-        value=(pos[0]<<24)|(pos[1]<<16)|(pos[2]<<8)|pos[3];
-    }
-    return value;
-}
-
-const uint8_t *
-BytesTrie::jumpByDelta(const uint8_t *pos) {
-    int32_t delta=*pos++;
-    if(delta<kMinTwoByteDeltaLead) {
-        // nothing to do
-    } else if(delta<kMinThreeByteDeltaLead) {
-        delta=((delta-kMinTwoByteDeltaLead)<<8)|*pos++;
-    } else if(delta<kFourByteDeltaLead) {
-        delta=((delta-kMinThreeByteDeltaLead)<<16)|(pos[0]<<8)|pos[1];
-        pos+=2;
-    } else if(delta==kFourByteDeltaLead) {
-        delta=(pos[0]<<16)|(pos[1]<<8)|pos[2];
-        pos+=3;
-    } else {
-        delta=(pos[0]<<24)|(pos[1]<<16)|(pos[2]<<8)|pos[3];
-        pos+=4;
-    }
-    return pos+delta;
-}
-
-UStringTrieResult
-BytesTrie::current() const {
-    const uint8_t *pos=pos_;
-    if(pos==NULL) {
-        return USTRINGTRIE_NO_MATCH;
-    } else {
-        int32_t node;
-        return (remainingMatchLength_<0 && (node=*pos)>=kMinValueLead) ?
-                valueResult(node) : USTRINGTRIE_NO_VALUE;
-    }
-}
-
-UStringTrieResult
-BytesTrie::branchNext(const uint8_t *pos, int32_t length, int32_t inByte) {
-    // Branch according to the current byte.
-    if(length==0) {
-        length=*pos++;
-    }
-    ++length;
-    // The length of the branch is the number of bytes to select from.
-    // The data structure encodes a binary search.
-    while(length>kMaxBranchLinearSubNodeLength) {
-        if(inByte<*pos++) {
-            length>>=1;
-            pos=jumpByDelta(pos);
-        } else {
-            length=length-(length>>1);
-            pos=skipDelta(pos);
-        }
-    }
-    // Drop down to linear search for the last few bytes.
-    // length>=2 because the loop body above sees length>kMaxBranchLinearSubNodeLength>=3
-    // and divides length by 2.
-    do {
-        if(inByte==*pos++) {
-            UStringTrieResult result;
-            int32_t node=*pos;
-            U_ASSERT(node>=kMinValueLead);
-            if(node&kValueIsFinal) {
-                // Leave the final value for getValue() to read.
-                result=USTRINGTRIE_FINAL_VALUE;
-            } else {
-                // Use the non-final value as the jump delta.
-                ++pos;
-                // int32_t delta=readValue(pos, node>>1);
-                node>>=1;
-                int32_t delta;
-                if(node<kMinTwoByteValueLead) {
-                    delta=node-kMinOneByteValueLead;
-                } else if(node<kMinThreeByteValueLead) {
-                    delta=((node-kMinTwoByteValueLead)<<8)|*pos++;
-                } else if(node<kFourByteValueLead) {
-                    delta=((node-kMinThreeByteValueLead)<<16)|(pos[0]<<8)|pos[1];
-                    pos+=2;
-                } else if(node==kFourByteValueLead) {
-                    delta=(pos[0]<<16)|(pos[1]<<8)|pos[2];
-                    pos+=3;
-                } else {
-                    delta=(pos[0]<<24)|(pos[1]<<16)|(pos[2]<<8)|pos[3];
-                    pos+=4;
-                }
-                // end readValue()
-                pos+=delta;
-                node=*pos;
-                result= node>=kMinValueLead ? valueResult(node) : USTRINGTRIE_NO_VALUE;
-            }
-            pos_=pos;
-            return result;
-        }
-        --length;
-        pos=skipValue(pos);
-    } while(length>1);
-    if(inByte==*pos++) {
-        pos_=pos;
-        int32_t node=*pos;
-        return node>=kMinValueLead ? valueResult(node) : USTRINGTRIE_NO_VALUE;
-    } else {
-        stop();
-        return USTRINGTRIE_NO_MATCH;
-    }
-}
-
-UStringTrieResult
-BytesTrie::nextImpl(const uint8_t *pos, int32_t inByte) {
-    for(;;) {
-        int32_t node=*pos++;
-        if(node<kMinLinearMatch) {
-            return branchNext(pos, node, inByte);
-        } else if(node<kMinValueLead) {
-            // Match the first of length+1 bytes.
-            int32_t length=node-kMinLinearMatch;  // Actual match length minus 1.
-            if(inByte==*pos++) {
-                remainingMatchLength_=--length;
-                pos_=pos;
-                return (length<0 && (node=*pos)>=kMinValueLead) ?
-                        valueResult(node) : USTRINGTRIE_NO_VALUE;
-            } else {
-                // No match.
-                break;
-            }
-        } else if(node&kValueIsFinal) {
-            // No further matching bytes.
-            break;
-        } else {
-            // Skip intermediate value.
-            pos=skipValue(pos, node);
-            // The next node must not also be a value node.
-            U_ASSERT(*pos<kMinValueLead);
-        }
-    }
-    stop();
-    return USTRINGTRIE_NO_MATCH;
-}
-
-UStringTrieResult
-BytesTrie::next(int32_t inByte) {
-    const uint8_t *pos=pos_;
-    if(pos==NULL) {
-        return USTRINGTRIE_NO_MATCH;
-    }
-    if(inByte<0) {
-        inByte+=0x100;
-    }
-    int32_t length=remainingMatchLength_;  // Actual remaining match length minus 1.
-    if(length>=0) {
-        // Remaining part of a linear-match node.
-        if(inByte==*pos++) {
-            remainingMatchLength_=--length;
-            pos_=pos;
-            int32_t node;
-            return (length<0 && (node=*pos)>=kMinValueLead) ?
-                    valueResult(node) : USTRINGTRIE_NO_VALUE;
-        } else {
-            stop();
-            return USTRINGTRIE_NO_MATCH;
-        }
-    }
-    return nextImpl(pos, inByte);
-}
-
-UStringTrieResult
-BytesTrie::next(const char *s, int32_t sLength) {
-    if(sLength<0 ? *s==0 : sLength==0) {
-        // Empty input.
-        return current();
-    }
-    const uint8_t *pos=pos_;
-    if(pos==NULL) {
-        return USTRINGTRIE_NO_MATCH;
-    }
-    int32_t length=remainingMatchLength_;  // Actual remaining match length minus 1.
-    for(;;) {
-        // Fetch the next input byte, if there is one.
-        // Continue a linear-match node without rechecking sLength<0.
-        int32_t inByte;
-        if(sLength<0) {
-            for(;;) {
-                if((inByte=*s++)==0) {
-                    remainingMatchLength_=length;
-                    pos_=pos;
-                    int32_t node;
-                    return (length<0 && (node=*pos)>=kMinValueLead) ?
-                            valueResult(node) : USTRINGTRIE_NO_VALUE;
-                }
-                if(length<0) {
-                    remainingMatchLength_=length;
-                    break;
-                }
-                if(inByte!=*pos) {
-                    stop();
-                    return USTRINGTRIE_NO_MATCH;
-                }
-                ++pos;
-                --length;
-            }
-        } else {
-            for(;;) {
-                if(sLength==0) {
-                    remainingMatchLength_=length;
-                    pos_=pos;
-                    int32_t node;
-                    return (length<0 && (node=*pos)>=kMinValueLead) ?
-                            valueResult(node) : USTRINGTRIE_NO_VALUE;
-                }
-                inByte=*s++;
-                --sLength;
-                if(length<0) {
-                    remainingMatchLength_=length;
-                    break;
-                }
-                if(inByte!=*pos) {
-                    stop();
-                    return USTRINGTRIE_NO_MATCH;
-                }
-                ++pos;
-                --length;
-            }
-        }
-        for(;;) {
-            int32_t node=*pos++;
-            if(node<kMinLinearMatch) {
-                UStringTrieResult result=branchNext(pos, node, inByte);
-                if(result==USTRINGTRIE_NO_MATCH) {
-                    return USTRINGTRIE_NO_MATCH;
-                }
-                // Fetch the next input byte, if there is one.
-                if(sLength<0) {
-                    if((inByte=*s++)==0) {
-                        return result;
-                    }
-                } else {
-                    if(sLength==0) {
-                        return result;
-                    }
-                    inByte=*s++;
-                    --sLength;
-                }
-                if(result==USTRINGTRIE_FINAL_VALUE) {
-                    // No further matching bytes.
-                    stop();
-                    return USTRINGTRIE_NO_MATCH;
-                }
-                pos=pos_;  // branchNext() advanced pos and wrote it to pos_ .
-            } else if(node<kMinValueLead) {
-                // Match length+1 bytes.
-                length=node-kMinLinearMatch;  // Actual match length minus 1.
-                if(inByte!=*pos) {
-                    stop();
-                    return USTRINGTRIE_NO_MATCH;
-                }
-                ++pos;
-                --length;
-                break;
-            } else if(node&kValueIsFinal) {
-                // No further matching bytes.
-                stop();
-                return USTRINGTRIE_NO_MATCH;
-            } else {
-                // Skip intermediate value.
-                pos=skipValue(pos, node);
-                // The next node must not also be a value node.
-                U_ASSERT(*pos<kMinValueLead);
-            }
-        }
-    }
-}
-
-const uint8_t *
-BytesTrie::findUniqueValueFromBranch(const uint8_t *pos, int32_t length,
-                                     UBool haveUniqueValue, int32_t &uniqueValue) {
-    while(length>kMaxBranchLinearSubNodeLength) {
-        ++pos;  // ignore the comparison byte
-        if(NULL==findUniqueValueFromBranch(jumpByDelta(pos), length>>1, haveUniqueValue, uniqueValue)) {
-            return NULL;
-        }
-        length=length-(length>>1);
-        pos=skipDelta(pos);
-    }
-    do {
-        ++pos;  // ignore a comparison byte
-        // handle its value
-        int32_t node=*pos++;
-        UBool isFinal=(UBool)(node&kValueIsFinal);
-        int32_t value=readValue(pos, node>>1);
-        pos=skipValue(pos, node);
-        if(isFinal) {
-            if(haveUniqueValue) {
-                if(value!=uniqueValue) {
-                    return NULL;
-                }
-            } else {
-                uniqueValue=value;
-                haveUniqueValue=TRUE;
-            }
-        } else {
-            if(!findUniqueValue(pos+value, haveUniqueValue, uniqueValue)) {
-                return NULL;
-            }
-            haveUniqueValue=TRUE;
-        }
-    } while(--length>1);
-    return pos+1;  // ignore the last comparison byte
-}
-
-UBool
-BytesTrie::findUniqueValue(const uint8_t *pos, UBool haveUniqueValue, int32_t &uniqueValue) {
-    for(;;) {
-        int32_t node=*pos++;
-        if(node<kMinLinearMatch) {
-            if(node==0) {
-                node=*pos++;
-            }
-            pos=findUniqueValueFromBranch(pos, node+1, haveUniqueValue, uniqueValue);
-            if(pos==NULL) {
-                return FALSE;
-            }
-            haveUniqueValue=TRUE;
-        } else if(node<kMinValueLead) {
-            // linear-match node
-            pos+=node-kMinLinearMatch+1;  // Ignore the match bytes.
-        } else {
-            UBool isFinal=(UBool)(node&kValueIsFinal);
-            int32_t value=readValue(pos, node>>1);
-            if(haveUniqueValue) {
-                if(value!=uniqueValue) {
-                    return FALSE;
-                }
-            } else {
-                uniqueValue=value;
-                haveUniqueValue=TRUE;
-            }
-            if(isFinal) {
-                return TRUE;
-            }
-            pos=skipValue(pos, node);
-        }
-    }
-}
-
-int32_t
-BytesTrie::getNextBytes(ByteSink &out) const {
-    const uint8_t *pos=pos_;
-    if(pos==NULL) {
-        return 0;
-    }
-    if(remainingMatchLength_>=0) {
-        append(out, *pos);  // Next byte of a pending linear-match node.
-        return 1;
-    }
-    int32_t node=*pos++;
-    if(node>=kMinValueLead) {
-        if(node&kValueIsFinal) {
-            return 0;
-        } else {
-            pos=skipValue(pos, node);
-            node=*pos++;
-            U_ASSERT(node<kMinValueLead);
-        }
-    }
-    if(node<kMinLinearMatch) {
-        if(node==0) {
-            node=*pos++;
-        }
-        getNextBranchBytes(pos, ++node, out);
-        return node;
-    } else {
-        // First byte of the linear-match node.
-        append(out, *pos);
-        return 1;
-    }
-}
-
-void
-BytesTrie::getNextBranchBytes(const uint8_t *pos, int32_t length, ByteSink &out) {
-    while(length>kMaxBranchLinearSubNodeLength) {
-        ++pos;  // ignore the comparison byte
-        getNextBranchBytes(jumpByDelta(pos), length>>1, out);
-        length=length-(length>>1);
-        pos=skipDelta(pos);
-    }
-    do {
-        append(out, *pos++);
-        pos=skipValue(pos);
-    } while(--length>1);
-    append(out, *pos);
-}
-
-void
-BytesTrie::append(ByteSink &out, int c) {
-    char ch=(char)c;
-    out.Append(&ch, 1);
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/bytestriebuilder.cpp b/src/third_party/mozjs/intl/icu/source/common/bytestriebuilder.cpp
deleted file mode 100644
index f252e2d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/bytestriebuilder.cpp
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  bytestriebuilder.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010sep25
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/bytestrie.h"
-#include "unicode/bytestriebuilder.h"
-#include "unicode/stringpiece.h"
-#include "charstr.h"
-#include "cmemory.h"
-#include "uhash.h"
-#include "uarrsort.h"
-#include "uassert.h"
-#include "ustr_imp.h"
-
-U_NAMESPACE_BEGIN
-
-/*
- * Note: This builder implementation stores (bytes, value) pairs with full copies
- * of the byte sequences, until the BytesTrie is built.
- * It might(!) take less memory if we collected the data in a temporary, dynamic trie.
- */
-
-class BytesTrieElement : public UMemory {
-public:
-    // Use compiler's default constructor, initializes nothing.
-
-    void setTo(const StringPiece &s, int32_t val, CharString &strings, UErrorCode &errorCode);
-
-    StringPiece getString(const CharString &strings) const {
-        int32_t offset=stringOffset;
-        int32_t length;
-        if(offset>=0) {
-            length=(uint8_t)strings[offset++];
-        } else {
-            offset=~offset;
-            length=((int32_t)(uint8_t)strings[offset]<<8)|(uint8_t)strings[offset+1];
-            offset+=2;
-        }
-        return StringPiece(strings.data()+offset, length);
-    }
-    int32_t getStringLength(const CharString &strings) const {
-        int32_t offset=stringOffset;
-        if(offset>=0) {
-            return (uint8_t)strings[offset];
-        } else {
-            offset=~offset;
-            return ((int32_t)(uint8_t)strings[offset]<<8)|(uint8_t)strings[offset+1];
-        }
-    }
-
-    char charAt(int32_t index, const CharString &strings) const { return data(strings)[index]; }
-
-    int32_t getValue() const { return value; }
-
-    int32_t compareStringTo(const BytesTrieElement &o, const CharString &strings) const;
-
-private:
-    const char *data(const CharString &strings) const {
-        int32_t offset=stringOffset;
-        if(offset>=0) {
-            ++offset;
-        } else {
-            offset=~offset+2;
-        }
-        return strings.data()+offset;
-    }
-
-    // If the stringOffset is non-negative, then the first strings byte contains
-    // the string length.
-    // If the stringOffset is negative, then the first two strings bytes contain
-    // the string length (big-endian), and the offset needs to be bit-inverted.
-    // (Compared with a stringLength field here, this saves 3 bytes per string for most strings.)
-    int32_t stringOffset;
-    int32_t value;
-};
-
-void
-BytesTrieElement::setTo(const StringPiece &s, int32_t val,
-                        CharString &strings, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    int32_t length=s.length();
-    if(length>0xffff) {
-        // Too long: We store the length in 1 or 2 bytes.
-        errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-        return;
-    }
-    int32_t offset=strings.length();
-    if(length>0xff) {
-        offset=~offset;
-        strings.append((char)(length>>8), errorCode);
-    }
-    strings.append((char)length, errorCode);
-    stringOffset=offset;
-    value=val;
-    strings.append(s, errorCode);
-}
-
-int32_t
-BytesTrieElement::compareStringTo(const BytesTrieElement &other, const CharString &strings) const {
-    // TODO: add StringPiece::compare(), see ticket #8187
-    StringPiece thisString=getString(strings);
-    StringPiece otherString=other.getString(strings);
-    int32_t lengthDiff=thisString.length()-otherString.length();
-    int32_t commonLength;
-    if(lengthDiff<=0) {
-        commonLength=thisString.length();
-    } else {
-        commonLength=otherString.length();
-    }
-    int32_t diff=uprv_memcmp(thisString.data(), otherString.data(), commonLength);
-    return diff!=0 ? diff : lengthDiff;
-}
-
-BytesTrieBuilder::BytesTrieBuilder(UErrorCode &errorCode)
-        : strings(NULL), elements(NULL), elementsCapacity(0), elementsLength(0),
-          bytes(NULL), bytesCapacity(0), bytesLength(0) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    strings=new CharString();
-    if(strings==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-    }
-}
-
-BytesTrieBuilder::~BytesTrieBuilder() {
-    delete strings;
-    delete[] elements;
-    uprv_free(bytes);
-}
-
-BytesTrieBuilder &
-BytesTrieBuilder::add(const StringPiece &s, int32_t value, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return *this;
-    }
-    if(bytesLength>0) {
-        // Cannot add elements after building.
-        errorCode=U_NO_WRITE_PERMISSION;
-        return *this;
-    }
-    if(elementsLength==elementsCapacity) {
-        int32_t newCapacity;
-        if(elementsCapacity==0) {
-            newCapacity=1024;
-        } else {
-            newCapacity=4*elementsCapacity;
-        }
-        BytesTrieElement *newElements=new BytesTrieElement[newCapacity];
-        if(newElements==NULL) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return *this; // error instead of dereferencing null
-        }
-        if(elementsLength>0) {
-            uprv_memcpy(newElements, elements, elementsLength*sizeof(BytesTrieElement));
-        }
-        delete[] elements;
-        elements=newElements;
-        elementsCapacity=newCapacity;
-    }
-    elements[elementsLength++].setTo(s, value, *strings, errorCode);
-    return *this;
-}
-
-U_CDECL_BEGIN
-
-static int32_t U_CALLCONV
-compareElementStrings(const void *context, const void *left, const void *right) {
-    const CharString *strings=static_cast<const CharString *>(context);
-    const BytesTrieElement *leftElement=static_cast<const BytesTrieElement *>(left);
-    const BytesTrieElement *rightElement=static_cast<const BytesTrieElement *>(right);
-    return leftElement->compareStringTo(*rightElement, *strings);
-}
-
-U_CDECL_END
-
-BytesTrie *
-BytesTrieBuilder::build(UStringTrieBuildOption buildOption, UErrorCode &errorCode) {
-    buildBytes(buildOption, errorCode);
-    BytesTrie *newTrie=NULL;
-    if(U_SUCCESS(errorCode)) {
-        newTrie=new BytesTrie(bytes, bytes+(bytesCapacity-bytesLength));
-        if(newTrie==NULL) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-        } else {
-            bytes=NULL;  // The new trie now owns the array.
-            bytesCapacity=0;
-        }
-    }
-    return newTrie;
-}
-
-StringPiece
-BytesTrieBuilder::buildStringPiece(UStringTrieBuildOption buildOption, UErrorCode &errorCode) {
-    buildBytes(buildOption, errorCode);
-    StringPiece result;
-    if(U_SUCCESS(errorCode)) {
-        result.set(bytes+(bytesCapacity-bytesLength), bytesLength);
-    }
-    return result;
-}
-
-void
-BytesTrieBuilder::buildBytes(UStringTrieBuildOption buildOption, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    if(bytes!=NULL && bytesLength>0) {
-        // Already built.
-        return;
-    }
-    if(bytesLength==0) {
-        if(elementsLength==0) {
-            errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return;
-        }
-        uprv_sortArray(elements, elementsLength, (int32_t)sizeof(BytesTrieElement),
-                      compareElementStrings, strings,
-                      FALSE,  // need not be a stable sort
-                      &errorCode);
-        if(U_FAILURE(errorCode)) {
-            return;
-        }
-        // Duplicate strings are not allowed.
-        StringPiece prev=elements[0].getString(*strings);
-        for(int32_t i=1; i<elementsLength; ++i) {
-            StringPiece current=elements[i].getString(*strings);
-            if(prev==current) {
-                errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-                return;
-            }
-            prev=current;
-        }
-    }
-    // Create and byte-serialize the trie for the elements.
-    bytesLength=0;
-    int32_t capacity=strings->length();
-    if(capacity<1024) {
-        capacity=1024;
-    }
-    if(bytesCapacity<capacity) {
-        uprv_free(bytes);
-        bytes=static_cast<char *>(uprv_malloc(capacity));
-        if(bytes==NULL) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-            bytesCapacity=0;
-            return;
-        }
-        bytesCapacity=capacity;
-    }
-    StringTrieBuilder::build(buildOption, elementsLength, errorCode);
-    if(bytes==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-    }
-}
-
-BytesTrieBuilder &
-BytesTrieBuilder::clear() {
-    strings->clear();
-    elementsLength=0;
-    bytesLength=0;
-    return *this;
-}
-
-int32_t
-BytesTrieBuilder::getElementStringLength(int32_t i) const {
-    return elements[i].getStringLength(*strings);
-}
-
-UChar
-BytesTrieBuilder::getElementUnit(int32_t i, int32_t byteIndex) const {
-    return (uint8_t)elements[i].charAt(byteIndex, *strings);
-}
-
-int32_t
-BytesTrieBuilder::getElementValue(int32_t i) const {
-    return elements[i].getValue();
-}
-
-int32_t
-BytesTrieBuilder::getLimitOfLinearMatch(int32_t first, int32_t last, int32_t byteIndex) const {
-    const BytesTrieElement &firstElement=elements[first];
-    const BytesTrieElement &lastElement=elements[last];
-    int32_t minStringLength=firstElement.getStringLength(*strings);
-    while(++byteIndex<minStringLength &&
-            firstElement.charAt(byteIndex, *strings)==
-            lastElement.charAt(byteIndex, *strings)) {}
-    return byteIndex;
-}
-
-int32_t
-BytesTrieBuilder::countElementUnits(int32_t start, int32_t limit, int32_t byteIndex) const {
-    int32_t length=0;  // Number of different bytes at byteIndex.
-    int32_t i=start;
-    do {
-        char byte=elements[i++].charAt(byteIndex, *strings);
-        while(i<limit && byte==elements[i].charAt(byteIndex, *strings)) {
-            ++i;
-        }
-        ++length;
-    } while(i<limit);
-    return length;
-}
-
-int32_t
-BytesTrieBuilder::skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const {
-    do {
-        char byte=elements[i++].charAt(byteIndex, *strings);
-        while(byte==elements[i].charAt(byteIndex, *strings)) {
-            ++i;
-        }
-    } while(--count>0);
-    return i;
-}
-
-int32_t
-BytesTrieBuilder::indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, UChar byte) const {
-    char b=(char)byte;
-    while(b==elements[i].charAt(byteIndex, *strings)) {
-        ++i;
-    }
-    return i;
-}
-
-BytesTrieBuilder::BTLinearMatchNode::BTLinearMatchNode(const char *bytes, int32_t len, Node *nextNode)
-        : LinearMatchNode(len, nextNode), s(bytes) {
-    hash=hash*37+ustr_hashCharsN(bytes, len);
-}
-
-UBool
-BytesTrieBuilder::BTLinearMatchNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!LinearMatchNode::operator==(other)) {
-        return FALSE;
-    }
-    const BTLinearMatchNode &o=(const BTLinearMatchNode &)other;
-    return 0==uprv_memcmp(s, o.s, length);
-}
-
-void
-BytesTrieBuilder::BTLinearMatchNode::write(StringTrieBuilder &builder) {
-    BytesTrieBuilder &b=(BytesTrieBuilder &)builder;
-    next->write(builder);
-    b.write(s, length);
-    offset=b.write(b.getMinLinearMatch()+length-1);
-}
-
-StringTrieBuilder::Node *
-BytesTrieBuilder::createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length,
-                                        Node *nextNode) const {
-    return new BTLinearMatchNode(
-            elements[i].getString(*strings).data()+byteIndex,
-            length,
-            nextNode);
-}
-
-UBool
-BytesTrieBuilder::ensureCapacity(int32_t length) {
-    if(bytes==NULL) {
-        return FALSE;  // previous memory allocation had failed
-    }
-    if(length>bytesCapacity) {
-        int32_t newCapacity=bytesCapacity;
-        do {
-            newCapacity*=2;
-        } while(newCapacity<=length);
-        char *newBytes=static_cast<char *>(uprv_malloc(newCapacity));
-        if(newBytes==NULL) {
-            // unable to allocate memory
-            uprv_free(bytes);
-            bytes=NULL;
-            bytesCapacity=0;
-            return FALSE;
-        }
-        uprv_memcpy(newBytes+(newCapacity-bytesLength),
-                    bytes+(bytesCapacity-bytesLength), bytesLength);
-        uprv_free(bytes);
-        bytes=newBytes;
-        bytesCapacity=newCapacity;
-    }
-    return TRUE;
-}
-
-int32_t
-BytesTrieBuilder::write(int32_t byte) {
-    int32_t newLength=bytesLength+1;
-    if(ensureCapacity(newLength)) {
-        bytesLength=newLength;
-        bytes[bytesCapacity-bytesLength]=(char)byte;
-    }
-    return bytesLength;
-}
-
-int32_t
-BytesTrieBuilder::write(const char *b, int32_t length) {
-    int32_t newLength=bytesLength+length;
-    if(ensureCapacity(newLength)) {
-        bytesLength=newLength;
-        uprv_memcpy(bytes+(bytesCapacity-bytesLength), b, length);
-    }
-    return bytesLength;
-}
-
-int32_t
-BytesTrieBuilder::writeElementUnits(int32_t i, int32_t byteIndex, int32_t length) {
-    return write(elements[i].getString(*strings).data()+byteIndex, length);
-}
-
-int32_t
-BytesTrieBuilder::writeValueAndFinal(int32_t i, UBool isFinal) {
-    if(0<=i && i<=BytesTrie::kMaxOneByteValue) {
-        return write(((BytesTrie::kMinOneByteValueLead+i)<<1)|isFinal);
-    }
-    char intBytes[5];
-    int32_t length=1;
-    if(i<0 || i>0xffffff) {
-        intBytes[0]=(char)BytesTrie::kFiveByteValueLead;
-        intBytes[1]=(char)((uint32_t)i>>24);
-        intBytes[2]=(char)((uint32_t)i>>16);
-        intBytes[3]=(char)((uint32_t)i>>8);
-        intBytes[4]=(char)i;
-        length=5;
-    // } else if(i<=BytesTrie::kMaxOneByteValue) {
-    //     intBytes[0]=(char)(BytesTrie::kMinOneByteValueLead+i);
-    } else {
-        if(i<=BytesTrie::kMaxTwoByteValue) {
-            intBytes[0]=(char)(BytesTrie::kMinTwoByteValueLead+(i>>8));
-        } else {
-            if(i<=BytesTrie::kMaxThreeByteValue) {
-                intBytes[0]=(char)(BytesTrie::kMinThreeByteValueLead+(i>>16));
-            } else {
-                intBytes[0]=(char)BytesTrie::kFourByteValueLead;
-                intBytes[1]=(char)(i>>16);
-                length=2;
-            }
-            intBytes[length++]=(char)(i>>8);
-        }
-        intBytes[length++]=(char)i;
-    }
-    intBytes[0]=(char)((intBytes[0]<<1)|isFinal);
-    return write(intBytes, length);
-}
-
-int32_t
-BytesTrieBuilder::writeValueAndType(UBool hasValue, int32_t value, int32_t node) {
-    int32_t offset=write(node);
-    if(hasValue) {
-        offset=writeValueAndFinal(value, FALSE);
-    }
-    return offset;
-}
-
-int32_t
-BytesTrieBuilder::writeDeltaTo(int32_t jumpTarget) {
-    int32_t i=bytesLength-jumpTarget;
-    U_ASSERT(i>=0);
-    if(i<=BytesTrie::kMaxOneByteDelta) {
-        return write(i);
-    }
-    char intBytes[5];
-    int32_t length;
-    if(i<=BytesTrie::kMaxTwoByteDelta) {
-        intBytes[0]=(char)(BytesTrie::kMinTwoByteDeltaLead+(i>>8));
-        length=1;
-    } else {
-        if(i<=BytesTrie::kMaxThreeByteDelta) {
-            intBytes[0]=(char)(BytesTrie::kMinThreeByteDeltaLead+(i>>16));
-            length=2;
-        } else {
-            if(i<=0xffffff) {
-                intBytes[0]=(char)BytesTrie::kFourByteDeltaLead;
-                length=3;
-            } else {
-                intBytes[0]=(char)BytesTrie::kFiveByteDeltaLead;
-                intBytes[1]=(char)(i>>24);
-                length=4;
-            }
-            intBytes[1]=(char)(i>>16);
-        }
-        intBytes[1]=(char)(i>>8);
-    }
-    intBytes[length++]=(char)i;
-    return write(intBytes, length);
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/bytestrieiterator.cpp b/src/third_party/mozjs/intl/icu/source/common/bytestrieiterator.cpp
deleted file mode 100644
index e50f07c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/bytestrieiterator.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  bytestrieiterator.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010nov03
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/bytestrie.h"
-#include "unicode/stringpiece.h"
-#include "charstr.h"
-#include "uvectr32.h"
-
-U_NAMESPACE_BEGIN
-
-BytesTrie::Iterator::Iterator(const void *trieBytes, int32_t maxStringLength,
-                              UErrorCode &errorCode)
-        : bytes_(static_cast<const uint8_t *>(trieBytes)),
-          pos_(bytes_), initialPos_(bytes_),
-          remainingMatchLength_(-1), initialRemainingMatchLength_(-1),
-          str_(NULL), maxLength_(maxStringLength), value_(0), stack_(NULL) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    // str_ and stack_ are pointers so that it's easy to turn bytestrie.h into
-    // a public API header for which we would want it to depend only on
-    // other public headers.
-    // Unlike BytesTrie itself, its Iterator performs memory allocations anyway
-    // via the CharString and UVector32 implementations, so this additional
-    // cost is minimal.
-    str_=new CharString();
-    stack_=new UVector32(errorCode);
-    if(U_SUCCESS(errorCode) && (str_==NULL || stack_==NULL)) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-    }
-}
-
-BytesTrie::Iterator::Iterator(const BytesTrie &trie, int32_t maxStringLength,
-                              UErrorCode &errorCode)
-        : bytes_(trie.bytes_), pos_(trie.pos_), initialPos_(trie.pos_),
-          remainingMatchLength_(trie.remainingMatchLength_),
-          initialRemainingMatchLength_(trie.remainingMatchLength_),
-          str_(NULL), maxLength_(maxStringLength), value_(0), stack_(NULL) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    str_=new CharString();
-    stack_=new UVector32(errorCode);
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    if(str_==NULL || stack_==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    int32_t length=remainingMatchLength_;  // Actual remaining match length minus 1.
-    if(length>=0) {
-        // Pending linear-match node, append remaining bytes to str_.
-        ++length;
-        if(maxLength_>0 && length>maxLength_) {
-            length=maxLength_;  // This will leave remainingMatchLength>=0 as a signal.
-        }
-        str_->append(reinterpret_cast<const char *>(pos_), length, errorCode);
-        pos_+=length;
-        remainingMatchLength_-=length;
-    }
-}
-
-BytesTrie::Iterator::~Iterator() {
-    delete str_;
-    delete stack_;
-}
-
-BytesTrie::Iterator &
-BytesTrie::Iterator::reset() {
-    pos_=initialPos_;
-    remainingMatchLength_=initialRemainingMatchLength_;
-    int32_t length=remainingMatchLength_+1;  // Remaining match length.
-    if(maxLength_>0 && length>maxLength_) {
-        length=maxLength_;
-    }
-    str_->truncate(length);
-    pos_+=length;
-    remainingMatchLength_-=length;
-    stack_->setSize(0);
-    return *this;
-}
-
-UBool
-BytesTrie::Iterator::hasNext() const { return pos_!=NULL || !stack_->isEmpty(); }
-
-UBool
-BytesTrie::Iterator::next(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return FALSE;
-    }
-    const uint8_t *pos=pos_;
-    if(pos==NULL) {
-        if(stack_->isEmpty()) {
-            return FALSE;
-        }
-        // Pop the state off the stack and continue with the next outbound edge of
-        // the branch node.
-        int32_t stackSize=stack_->size();
-        int32_t length=stack_->elementAti(stackSize-1);
-        pos=bytes_+stack_->elementAti(stackSize-2);
-        stack_->setSize(stackSize-2);
-        str_->truncate(length&0xffff);
-        length=(int32_t)((uint32_t)length>>16);
-        if(length>1) {
-            pos=branchNext(pos, length, errorCode);
-            if(pos==NULL) {
-                return TRUE;  // Reached a final value.
-            }
-        } else {
-            str_->append((char)*pos++, errorCode);
-        }
-    }
-    if(remainingMatchLength_>=0) {
-        // We only get here if we started in a pending linear-match node
-        // with more than maxLength remaining bytes.
-        return truncateAndStop();
-    }
-    for(;;) {
-        int32_t node=*pos++;
-        if(node>=kMinValueLead) {
-            // Deliver value for the byte sequence so far.
-            UBool isFinal=(UBool)(node&kValueIsFinal);
-            value_=readValue(pos, node>>1);
-            if(isFinal || (maxLength_>0 && str_->length()==maxLength_)) {
-                pos_=NULL;
-            } else {
-                pos_=skipValue(pos, node);
-            }
-            sp_.set(str_->data(), str_->length());
-            return TRUE;
-        }
-        if(maxLength_>0 && str_->length()==maxLength_) {
-            return truncateAndStop();
-        }
-        if(node<kMinLinearMatch) {
-            if(node==0) {
-                node=*pos++;
-            }
-            pos=branchNext(pos, node+1, errorCode);
-            if(pos==NULL) {
-                return TRUE;  // Reached a final value.
-            }
-        } else {
-            // Linear-match node, append length bytes to str_.
-            int32_t length=node-kMinLinearMatch+1;
-            if(maxLength_>0 && str_->length()+length>maxLength_) {
-                str_->append(reinterpret_cast<const char *>(pos),
-                            maxLength_-str_->length(), errorCode);
-                return truncateAndStop();
-            }
-            str_->append(reinterpret_cast<const char *>(pos), length, errorCode);
-            pos+=length;
-        }
-    }
-}
-
-UBool
-BytesTrie::Iterator::truncateAndStop() {
-    pos_=NULL;
-    sp_.set(str_->data(), str_->length());
-    value_=-1;  // no real value for str
-    return TRUE;
-}
-
-// Branch node, needs to take the first outbound edge and push state for the rest.
-const uint8_t *
-BytesTrie::Iterator::branchNext(const uint8_t *pos, int32_t length, UErrorCode &errorCode) {
-    while(length>kMaxBranchLinearSubNodeLength) {
-        ++pos;  // ignore the comparison byte
-        // Push state for the greater-or-equal edge.
-        stack_->addElement((int32_t)(skipDelta(pos)-bytes_), errorCode);
-        stack_->addElement(((length-(length>>1))<<16)|str_->length(), errorCode);
-        // Follow the less-than edge.
-        length>>=1;
-        pos=jumpByDelta(pos);
-    }
-    // List of key-value pairs where values are either final values or jump deltas.
-    // Read the first (key, value) pair.
-    uint8_t trieByte=*pos++;
-    int32_t node=*pos++;
-    UBool isFinal=(UBool)(node&kValueIsFinal);
-    int32_t value=readValue(pos, node>>1);
-    pos=skipValue(pos, node);
-    stack_->addElement((int32_t)(pos-bytes_), errorCode);
-    stack_->addElement(((length-1)<<16)|str_->length(), errorCode);
-    str_->append((char)trieByte, errorCode);
-    if(isFinal) {
-        pos_=NULL;
-        sp_.set(str_->data(), str_->length());
-        value_=value;
-        return NULL;
-    } else {
-        return pos+value;
-    }
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/caniter.cpp b/src/third_party/mozjs/intl/icu/source/common/caniter.cpp
deleted file mode 100644
index 37ca8df..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/caniter.cpp
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- *****************************************************************************
- * Copyright (C) 1996-2011, International Business Machines Corporation and  *
- * others. All Rights Reserved.                                              *
- *****************************************************************************
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/caniter.h"
-#include "unicode/normalizer2.h"
-#include "unicode/uchar.h"
-#include "unicode/uniset.h"
-#include "unicode/usetiter.h"
-#include "unicode/ustring.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "hash.h"
-#include "normalizer2impl.h"
-
-/**
- * This class allows one to iterate through all the strings that are canonically equivalent to a given
- * string. For example, here are some sample results:
-Results for: {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-1: \u0041\u030A\u0064\u0307\u0327
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-2: \u0041\u030A\u0064\u0327\u0307
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
-3: \u0041\u030A\u1E0B\u0327
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
-4: \u0041\u030A\u1E11\u0307
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
-5: \u00C5\u0064\u0307\u0327
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-6: \u00C5\u0064\u0327\u0307
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
-7: \u00C5\u1E0B\u0327
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
-8: \u00C5\u1E11\u0307
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
-9: \u212B\u0064\u0307\u0327
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-10: \u212B\u0064\u0327\u0307
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
-11: \u212B\u1E0B\u0327
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
-12: \u212B\u1E11\u0307
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
- *<br>Note: the code is intended for use with small strings, and is not suitable for larger ones,
- * since it has not been optimized for that situation.
- *@author M. Davis
- *@draft
- */
-
-// public
-
-U_NAMESPACE_BEGIN
-
-// TODO: add boilerplate methods.
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CanonicalIterator)
-
-/**
- *@param source string to get results for
- */
-CanonicalIterator::CanonicalIterator(const UnicodeString &sourceStr, UErrorCode &status) :
-    pieces(NULL),
-    pieces_length(0),
-    pieces_lengths(NULL),
-    current(NULL),
-    current_length(0),
-    nfd(*Normalizer2Factory::getNFDInstance(status)),
-    nfcImpl(*Normalizer2Factory::getNFCImpl(status))
-{
-    if(U_SUCCESS(status) && nfcImpl.ensureCanonIterData(status)) {
-      setSource(sourceStr, status);
-    }
-}
-
-CanonicalIterator::~CanonicalIterator() {
-  cleanPieces();
-}
-
-void CanonicalIterator::cleanPieces() {
-    int32_t i = 0;
-    if(pieces != NULL) {
-        for(i = 0; i < pieces_length; i++) {
-            if(pieces[i] != NULL) {
-                delete[] pieces[i];
-            }
-        }
-        uprv_free(pieces);
-        pieces = NULL;
-        pieces_length = 0;
-    }
-    if(pieces_lengths != NULL) {
-        uprv_free(pieces_lengths);
-        pieces_lengths = NULL;
-    }
-    if(current != NULL) {
-        uprv_free(current);
-        current = NULL;
-        current_length = 0;
-    }
-}
-
-/**
- *@return gets the source: NOTE: it is the NFD form of source
- */
-UnicodeString CanonicalIterator::getSource() {
-  return source;
-}
-
-/**
- * Resets the iterator so that one can start again from the beginning.
- */
-void CanonicalIterator::reset() {
-    done = FALSE;
-    for (int i = 0; i < current_length; ++i) {
-        current[i] = 0;
-    }
-}
-
-/**
- *@return the next string that is canonically equivalent. The value null is returned when
- * the iteration is done.
- */
-UnicodeString CanonicalIterator::next() {
-    int32_t i = 0;
-
-    if (done) {
-      buffer.setToBogus();
-      return buffer;
-    }
-
-    // delete old contents
-    buffer.remove();
-
-    // construct return value
-
-    for (i = 0; i < pieces_length; ++i) {
-        buffer.append(pieces[i][current[i]]);
-    }
-    //String result = buffer.toString(); // not needed
-
-    // find next value for next time
-
-    for (i = current_length - 1; ; --i) {
-        if (i < 0) {
-            done = TRUE;
-            break;
-        }
-        current[i]++;
-        if (current[i] < pieces_lengths[i]) break; // got sequence
-        current[i] = 0;
-    }
-    return buffer;
-}
-
-/**
- *@param set the source string to iterate against. This allows the same iterator to be used
- * while changing the source string, saving object creation.
- */
-void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &status) {
-    int32_t list_length = 0;
-    UChar32 cp = 0;
-    int32_t start = 0;
-    int32_t i = 0;
-    UnicodeString *list = NULL;
-
-    nfd.normalize(newSource, source, status);
-    if(U_FAILURE(status)) {
-      return;
-    }
-    done = FALSE;
-
-    cleanPieces();
-
-    // catch degenerate case
-    if (newSource.length() == 0) {
-        pieces = (UnicodeString **)uprv_malloc(sizeof(UnicodeString *));
-        pieces_lengths = (int32_t*)uprv_malloc(1 * sizeof(int32_t));
-        pieces_length = 1;
-        current = (int32_t*)uprv_malloc(1 * sizeof(int32_t));
-        current_length = 1;
-        if (pieces == NULL || pieces_lengths == NULL || current == NULL) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            goto CleanPartialInitialization;
-        }
-        current[0] = 0;
-        pieces[0] = new UnicodeString[1];
-        pieces_lengths[0] = 1;
-        if (pieces[0] == 0) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            goto CleanPartialInitialization;
-        }
-        return;
-    }
-
-
-    list = new UnicodeString[source.length()];
-    if (list == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        goto CleanPartialInitialization;
-    }
-
-    // i should initialy be the number of code units at the 
-    // start of the string
-    i = U16_LENGTH(source.char32At(0));
-    //int32_t i = 1;
-    // find the segments
-    // This code iterates through the source string and 
-    // extracts segments that end up on a codepoint that
-    // doesn't start any decompositions. (Analysis is done
-    // on the NFD form - see above).
-    for (; i < source.length(); i += U16_LENGTH(cp)) {
-        cp = source.char32At(i);
-        if (nfcImpl.isCanonSegmentStarter(cp)) {
-            source.extract(start, i-start, list[list_length++]); // add up to i
-            start = i;
-        }
-    }
-    source.extract(start, i-start, list[list_length++]); // add last one
-
-
-    // allocate the arrays, and find the strings that are CE to each segment
-    pieces = (UnicodeString **)uprv_malloc(list_length * sizeof(UnicodeString *));
-    pieces_length = list_length;
-    pieces_lengths = (int32_t*)uprv_malloc(list_length * sizeof(int32_t));
-    current = (int32_t*)uprv_malloc(list_length * sizeof(int32_t));
-    current_length = list_length;
-    if (pieces == NULL || pieces_lengths == NULL || current == NULL) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        goto CleanPartialInitialization;
-    }
-
-    for (i = 0; i < current_length; i++) {
-        current[i] = 0;
-    }
-    // for each segment, get all the combinations that can produce 
-    // it after NFD normalization
-    for (i = 0; i < pieces_length; ++i) {
-        //if (PROGRESS) printf("SEGMENT\n");
-        pieces[i] = getEquivalents(list[i], pieces_lengths[i], status);
-    }
-
-    delete[] list;
-    return;
-// Common section to cleanup all local variables and reset object variables.
-CleanPartialInitialization:
-    if (list != NULL) {
-        delete[] list;
-    }
-    cleanPieces();
-}
-
-/**
- * Dumb recursive implementation of permutation.
- * TODO: optimize
- * @param source the string to find permutations for
- * @return the results in a set.
- */
-void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros, Hashtable *result, UErrorCode &status) {
-    if(U_FAILURE(status)) {
-        return;
-    }
-    //if (PROGRESS) printf("Permute: %s\n", UToS(Tr(source)));
-    int32_t i = 0;
-
-    // optimization:
-    // if zero or one character, just return a set with it
-    // we check for length < 2 to keep from counting code points all the time
-    if (source.length() <= 2 && source.countChar32() <= 1) {
-        UnicodeString *toPut = new UnicodeString(source);
-        /* test for NULL */
-        if (toPut == 0) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-        result->put(source, toPut, status);
-        return;
-    }
-
-    // otherwise iterate through the string, and recursively permute all the other characters
-    UChar32 cp;
-    Hashtable subpermute(status);
-    if(U_FAILURE(status)) {
-        return;
-    }
-    subpermute.setValueDeleter(uprv_deleteUObject);
-
-    for (i = 0; i < source.length(); i += U16_LENGTH(cp)) {
-        cp = source.char32At(i);
-        const UHashElement *ne = NULL;
-        int32_t el = -1;
-        UnicodeString subPermuteString = source;
-
-        // optimization:
-        // if the character is canonical combining class zero,
-        // don't permute it
-        if (skipZeros && i != 0 && u_getCombiningClass(cp) == 0) {
-            //System.out.println("Skipping " + Utility.hex(UTF16.valueOf(source, i)));
-            continue;
-        }
-
-        subpermute.removeAll();
-
-        // see what the permutations of the characters before and after this one are
-        //Hashtable *subpermute = permute(source.substring(0,i) + source.substring(i + UTF16.getCharCount(cp)));
-        permute(subPermuteString.replace(i, U16_LENGTH(cp), NULL, 0), skipZeros, &subpermute, status);
-        /* Test for buffer overflows */
-        if(U_FAILURE(status)) {
-            return;
-        }
-        // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents 
-        // of source at this point.
-
-        // prefix this character to all of them
-        ne = subpermute.nextElement(el);
-        while (ne != NULL) {
-            UnicodeString *permRes = (UnicodeString *)(ne->value.pointer);
-            UnicodeString *chStr = new UnicodeString(cp);
-            //test for  NULL
-            if (chStr == NULL) {
-                status = U_MEMORY_ALLOCATION_ERROR;
-                return;
-            }
-            chStr->append(*permRes); //*((UnicodeString *)(ne->value.pointer));
-            //if (PROGRESS) printf("  Piece: %s\n", UToS(*chStr));
-            result->put(*chStr, chStr, status);
-            ne = subpermute.nextElement(el);
-        }
-    }
-    //return result;
-}
-
-// privates
-
-// we have a segment, in NFD. Find all the strings that are canonically equivalent to it.
-UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status) {
-    Hashtable result(status);
-    Hashtable permutations(status);
-    Hashtable basic(status);
-    if (U_FAILURE(status)) {
-        return 0;
-    }
-    result.setValueDeleter(uprv_deleteUObject);
-    permutations.setValueDeleter(uprv_deleteUObject);
-    basic.setValueDeleter(uprv_deleteUObject);
-
-    UChar USeg[256];
-    int32_t segLen = segment.extract(USeg, 256, status);
-    getEquivalents2(&basic, USeg, segLen, status);
-
-    // now get all the permutations
-    // add only the ones that are canonically equivalent
-    // TODO: optimize by not permuting any class zero.
-
-    const UHashElement *ne = NULL;
-    int32_t el = -1;
-    //Iterator it = basic.iterator();
-    ne = basic.nextElement(el);
-    //while (it.hasNext())
-    while (ne != NULL) {
-        //String item = (String) it.next();
-        UnicodeString item = *((UnicodeString *)(ne->value.pointer));
-
-        permutations.removeAll();
-        permute(item, CANITER_SKIP_ZEROES, &permutations, status);
-        const UHashElement *ne2 = NULL;
-        int32_t el2 = -1;
-        //Iterator it2 = permutations.iterator();
-        ne2 = permutations.nextElement(el2);
-        //while (it2.hasNext())
-        while (ne2 != NULL) {
-            //String possible = (String) it2.next();
-            //UnicodeString *possible = new UnicodeString(*((UnicodeString *)(ne2->value.pointer)));
-            UnicodeString possible(*((UnicodeString *)(ne2->value.pointer)));
-            UnicodeString attempt;
-            nfd.normalize(possible, attempt, status);
-
-            // TODO: check if operator == is semanticaly the same as attempt.equals(segment)
-            if (attempt==segment) {
-                //if (PROGRESS) printf("Adding Permutation: %s\n", UToS(Tr(*possible)));
-                // TODO: use the hashtable just to catch duplicates - store strings directly (somehow).
-                result.put(possible, new UnicodeString(possible), status); //add(possible);
-            } else {
-                //if (PROGRESS) printf("-Skipping Permutation: %s\n", UToS(Tr(*possible)));
-            }
-
-            ne2 = permutations.nextElement(el2);
-        }
-        ne = basic.nextElement(el);
-    }
-
-    /* Test for buffer overflows */
-    if(U_FAILURE(status)) {
-        return 0;
-    }
-    // convert into a String[] to clean up storage
-    //String[] finalResult = new String[result.size()];
-    UnicodeString *finalResult = NULL;
-    int32_t resultCount;
-    if((resultCount = result.count())) {
-        finalResult = new UnicodeString[resultCount];
-        if (finalResult == 0) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            return NULL;
-        }
-    }
-    else {
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    //result.toArray(finalResult);
-    result_len = 0;
-    el = -1;
-    ne = result.nextElement(el);
-    while(ne != NULL) {
-        finalResult[result_len++] = *((UnicodeString *)(ne->value.pointer));
-        ne = result.nextElement(el);
-    }
-
-
-    return finalResult;
-}
-
-Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status) {
-
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-    //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(segment)));
-
-    UnicodeString toPut(segment, segLen);
-
-    fillinResult->put(toPut, new UnicodeString(toPut), status);
-
-    UnicodeSet starts;
-
-    // cycle through all the characters
-    UChar32 cp;
-    for (int32_t i = 0; i < segLen; i += U16_LENGTH(cp)) {
-        // see if any character is at the start of some decomposition
-        U16_GET(segment, 0, i, segLen, cp);
-        if (!nfcImpl.getCanonStartSet(cp, starts)) {
-            continue;
-        }
-        // if so, see which decompositions match
-        UnicodeSetIterator iter(starts);
-        while (iter.next()) {
-            UChar32 cp2 = iter.getCodepoint();
-            Hashtable remainder(status);
-            remainder.setValueDeleter(uprv_deleteUObject);
-            if (extract(&remainder, cp2, segment, segLen, i, status) == NULL) {
-                continue;
-            }
-
-            // there were some matches, so add all the possibilities to the set.
-            UnicodeString prefix(segment, i);
-            prefix += cp2;
-
-            int32_t el = -1;
-            const UHashElement *ne = remainder.nextElement(el);
-            while (ne != NULL) {
-                UnicodeString item = *((UnicodeString *)(ne->value.pointer));
-                UnicodeString *toAdd = new UnicodeString(prefix);
-                /* test for NULL */
-                if (toAdd == 0) {
-                    status = U_MEMORY_ALLOCATION_ERROR;
-                    return NULL;
-                }
-                *toAdd += item;
-                fillinResult->put(*toAdd, toAdd, status);
-
-                //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(*toAdd)));
-
-                ne = remainder.nextElement(el);
-            }
-        }
-    }
-
-    /* Test for buffer overflows */
-    if(U_FAILURE(status)) {
-        return NULL;
-    }
-    return fillinResult;
-}
-
-/**
- * See if the decomposition of cp2 is at segment starting at segmentPos 
- * (with canonical rearrangment!)
- * If so, take the remainder, and return the equivalents 
- */
-Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
-//Hashtable *CanonicalIterator::extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
-    //if (PROGRESS) printf(" extract: %s, ", UToS(Tr(UnicodeString(comp))));
-    //if (PROGRESS) printf("%s, %i\n", UToS(Tr(segment)), segmentPos);
-
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-    UnicodeString temp(comp);
-    int32_t inputLen=temp.length();
-    UnicodeString decompString;
-    nfd.normalize(temp, decompString, status);
-    const UChar *decomp=decompString.getBuffer();
-    int32_t decompLen=decompString.length();
-
-    // See if it matches the start of segment (at segmentPos)
-    UBool ok = FALSE;
-    UChar32 cp;
-    int32_t decompPos = 0;
-    UChar32 decompCp;
-    U16_NEXT(decomp, decompPos, decompLen, decompCp);
-
-    int32_t i = segmentPos;
-    while(i < segLen) {
-        U16_NEXT(segment, i, segLen, cp);
-
-        if (cp == decompCp) { // if equal, eat another cp from decomp
-
-            //if (PROGRESS) printf("  matches: %s\n", UToS(Tr(UnicodeString(cp))));
-
-            if (decompPos == decompLen) { // done, have all decomp characters!
-                temp.append(segment+i, segLen-i);
-                ok = TRUE;
-                break;
-            }
-            U16_NEXT(decomp, decompPos, decompLen, decompCp);
-        } else {
-            //if (PROGRESS) printf("  buffer: %s\n", UToS(Tr(UnicodeString(cp))));
-
-            // brute force approach
-            temp.append(cp);
-
-            /* TODO: optimize
-            // since we know that the classes are monotonically increasing, after zero
-            // e.g. 0 5 7 9 0 3
-            // we can do an optimization
-            // there are only a few cases that work: zero, less, same, greater
-            // if both classes are the same, we fail
-            // if the decomp class < the segment class, we fail
-
-            segClass = getClass(cp);
-            if (decompClass <= segClass) return null;
-            */
-        }
-    }
-    if (!ok)
-        return NULL; // we failed, characters left over
-
-    //if (PROGRESS) printf("Matches\n");
-
-    if (inputLen == temp.length()) {
-        fillinResult->put(UnicodeString(), new UnicodeString(), status);
-        return fillinResult; // succeed, but no remainder
-    }
-
-    // brute force approach
-    // check to make sure result is canonically equivalent
-    UnicodeString trial;
-    nfd.normalize(temp, trial, status);
-    if(U_FAILURE(status) || trial.compare(segment+segmentPos, segLen - segmentPos) != 0) {
-        return NULL;
-    }
-
-    return getEquivalents2(fillinResult, temp.getBuffer()+inputLen, temp.length()-inputLen, status);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_NORMALIZATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/chariter.cpp b/src/third_party/mozjs/intl/icu/source/common/chariter.cpp
deleted file mode 100644
index 2d923ea..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/chariter.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1999-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-
-#include "unicode/chariter.h"
-
-U_NAMESPACE_BEGIN
-
-ForwardCharacterIterator::~ForwardCharacterIterator() {}
-ForwardCharacterIterator::ForwardCharacterIterator()
-: UObject()
-{}
-ForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other)
-: UObject(other)
-{}
-
-
-CharacterIterator::CharacterIterator()
-: textLength(0), pos(0), begin(0), end(0) {
-}
-
-CharacterIterator::CharacterIterator(int32_t length)
-: textLength(length), pos(0), begin(0), end(length) {
-    if(textLength < 0) {
-        textLength = end = 0;
-    }
-}
-
-CharacterIterator::CharacterIterator(int32_t length, int32_t position)
-: textLength(length), pos(position), begin(0), end(length) {
-    if(textLength < 0) {
-        textLength = end = 0;
-    }
-    if(pos < 0) {
-        pos = 0;
-    } else if(pos > end) {
-        pos = end;
-    }
-}
-
-CharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position)
-: textLength(length), pos(position), begin(textBegin), end(textEnd) {
-    if(textLength < 0) {
-        textLength = 0;
-    }
-    if(begin < 0) {
-        begin = 0;
-    } else if(begin > textLength) {
-        begin = textLength;
-    }
-    if(end < begin) {
-        end = begin;
-    } else if(end > textLength) {
-        end = textLength;
-    }
-    if(pos < begin) {
-        pos = begin;
-    } else if(pos > end) {
-        pos = end;
-    }
-}
-
-CharacterIterator::~CharacterIterator() {}
-
-CharacterIterator::CharacterIterator(const CharacterIterator &that) :
-ForwardCharacterIterator(that),
-textLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end)
-{
-}
-
-CharacterIterator &
-CharacterIterator::operator=(const CharacterIterator &that) {
-    ForwardCharacterIterator::operator=(that);
-    textLength = that.textLength;
-    pos = that.pos;
-    begin = that.begin;
-    end = that.end;
-    return *this;
-}
-
-// implementing first[32]PostInc() directly in a subclass should be faster
-// but these implementations make subclassing a little easier
-UChar
-CharacterIterator::firstPostInc(void) {
-    setToStart();
-    return nextPostInc();
-}
-
-UChar32
-CharacterIterator::first32PostInc(void) {
-    setToStart();
-    return next32PostInc();
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/charstr.cpp b/src/third_party/mozjs/intl/icu/source/common/charstr.cpp
deleted file mode 100644
index 76723d9..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/charstr.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  charstr.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010may19
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "charstr.h"
-#include "cmemory.h"
-#include "cstring.h"
-
-U_NAMESPACE_BEGIN
-
-CharString &CharString::copyFrom(const CharString &s, UErrorCode &errorCode) {
-    if(U_SUCCESS(errorCode) && this!=&s && ensureCapacity(s.len+1, 0, errorCode)) {
-        len=s.len;
-        uprv_memcpy(buffer.getAlias(), s.buffer.getAlias(), len+1);
-    }
-    return *this;
-}
-
-CharString &CharString::truncate(int32_t newLength) {
-    if(newLength<0) {
-        newLength=0;
-    }
-    if(newLength<len) {
-        buffer[len=newLength]=0;
-    }
-    return *this;
-}
-
-CharString &CharString::append(char c, UErrorCode &errorCode) {
-    if(ensureCapacity(len+2, 0, errorCode)) {
-        buffer[len++]=c;
-        buffer[len]=0;
-    }
-    return *this;
-}
-
-CharString &CharString::append(const char *s, int32_t sLength, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return *this;
-    }
-    if(sLength<-1 || (s==NULL && sLength!=0)) {
-        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return *this;
-    }
-    if(sLength<0) {
-        sLength=uprv_strlen(s);
-    }
-    if(sLength>0) {
-        if(s==(buffer.getAlias()+len)) {
-            // The caller wrote into the getAppendBuffer().
-            if(sLength>=(buffer.getCapacity()-len)) {
-                // The caller wrote too much.
-                errorCode=U_INTERNAL_PROGRAM_ERROR;
-            } else {
-                buffer[len+=sLength]=0;
-            }
-        } else if(buffer.getAlias()<=s && s<(buffer.getAlias()+len) &&
-                  sLength>=(buffer.getCapacity()-len)
-        ) {
-            // (Part of) this string is appended to itself which requires reallocation,
-            // so we have to make a copy of the substring and append that.
-            return append(CharString(s, sLength, errorCode), errorCode);
-        } else if(ensureCapacity(len+sLength+1, 0, errorCode)) {
-            uprv_memcpy(buffer.getAlias()+len, s, sLength);
-            buffer[len+=sLength]=0;
-        }
-    }
-    return *this;
-}
-
-char *CharString::getAppendBuffer(int32_t minCapacity,
-                                  int32_t desiredCapacityHint,
-                                  int32_t &resultCapacity,
-                                  UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        resultCapacity=0;
-        return NULL;
-    }
-    int32_t appendCapacity=buffer.getCapacity()-len-1;  // -1 for NUL
-    if(appendCapacity>=minCapacity) {
-        resultCapacity=appendCapacity;
-        return buffer.getAlias()+len;
-    }
-    if(ensureCapacity(len+minCapacity+1, len+desiredCapacityHint+1, errorCode)) {
-        resultCapacity=buffer.getCapacity()-len-1;
-        return buffer.getAlias()+len;
-    }
-    resultCapacity=0;
-    return NULL;
-}
-
-CharString &CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode) {
-    if(ensureCapacity(len+s.length()+1, 0, errorCode)) {
-        len+=s.extract(0, 0x7fffffff, buffer.getAlias()+len, buffer.getCapacity()-len, US_INV);
-    }
-    return *this;
-}
-
-UBool CharString::ensureCapacity(int32_t capacity,
-                                 int32_t desiredCapacityHint,
-                                 UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return FALSE;
-    }
-    if(capacity>buffer.getCapacity()) {
-        if(desiredCapacityHint==0) {
-            desiredCapacityHint=capacity+buffer.getCapacity();
-        }
-        if( (desiredCapacityHint<=capacity || buffer.resize(desiredCapacityHint, len+1)==NULL) &&
-            buffer.resize(capacity, len+1)==NULL
-        ) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return FALSE;
-        }
-    }
-    return TRUE;
-}
-
-CharString &CharString::appendPathPart(const StringPiece &s, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return *this;
-    }
-    if(s.length()==0) {
-        return *this;
-    }
-    char c;
-    if(len>0 && (c=buffer[len-1])!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) {
-        append(U_FILE_SEP_CHAR, errorCode);
-    }
-    append(s, errorCode);
-    return *this;
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/charstr.h b/src/third_party/mozjs/intl/icu/source/common/charstr.h
deleted file mode 100644
index 4b86c83..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/charstr.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (c) 2001-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   11/19/2001  aliu        Creation.
-*   05/19/2010  markus      Rewritten from scratch
-**********************************************************************
-*/
-
-#ifndef CHARSTRING_H
-#define CHARSTRING_H
-
-#include "unicode/utypes.h"
-#include "unicode/unistr.h"
-#include "unicode/uobject.h"
-#include "cmemory.h"
-
-U_NAMESPACE_BEGIN
-
-// Windows needs us to DLL-export the MaybeStackArray template specialization,
-// but MacOS X cannot handle it. Same as in digitlst.h.
-#if !U_PLATFORM_IS_DARWIN_BASED
-template class U_COMMON_API MaybeStackArray<char, 40>;
-#endif
-
-/**
- * ICU-internal char * string class.
- * This class does not assume or enforce any particular character encoding.
- * Raw bytes can be stored. The string object owns its characters.
- * A terminating NUL is stored, but the class does not prevent embedded NUL characters.
- *
- * This class wants to be convenient but is also deliberately minimalist.
- * Please do not add methods if they only add minor convenience.
- * For example:
- *   cs.data()[5]='a';  // no need for setCharAt(5, 'a')
- */
-class U_COMMON_API CharString : public UMemory {
-public:
-    CharString() : len(0) { buffer[0]=0; }
-    CharString(const StringPiece &s, UErrorCode &errorCode) : len(0) {
-        buffer[0]=0;
-        append(s, errorCode);
-    }
-    CharString(const CharString &s, UErrorCode &errorCode) : len(0) {
-        buffer[0]=0;
-        append(s, errorCode);
-    }
-    CharString(const char *s, int32_t sLength, UErrorCode &errorCode) : len(0) {
-        buffer[0]=0;
-        append(s, sLength, errorCode);
-    }
-    ~CharString() {}
-
-    /**
-     * Replaces this string's contents with the other string's contents.
-     * CharString does not support the standard copy constructor nor
-     * the assignment operator, to make copies explicit and to
-     * use a UErrorCode where memory allocations might be needed.
-     */
-    CharString &copyFrom(const CharString &other, UErrorCode &errorCode);
-
-    UBool isEmpty() const { return len==0; }
-    int32_t length() const { return len; }
-    char operator[](int32_t index) const { return buffer[index]; }
-    StringPiece toStringPiece() const { return StringPiece(buffer.getAlias(), len); }
-
-    const char *data() const { return buffer.getAlias(); }
-    char *data() { return buffer.getAlias(); }
-
-    CharString &clear() { len=0; buffer[0]=0; return *this; }
-    CharString &truncate(int32_t newLength);
-
-    CharString &append(char c, UErrorCode &errorCode);
-    CharString &append(const StringPiece &s, UErrorCode &errorCode) {
-        return append(s.data(), s.length(), errorCode);
-    }
-    CharString &append(const CharString &s, UErrorCode &errorCode) {
-        return append(s.data(), s.length(), errorCode);
-    }
-    CharString &append(const char *s, int32_t sLength, UErrorCode &status);
-    /**
-     * Returns a writable buffer for appending and writes the buffer's capacity to
-     * resultCapacity. Guarantees resultCapacity>=minCapacity if U_SUCCESS().
-     * There will additionally be space for a terminating NUL right at resultCapacity.
-     * (This function is similar to ByteSink.GetAppendBuffer().)
-     *
-     * The returned buffer is only valid until the next write operation
-     * on this string.
-     *
-     * After writing at most resultCapacity bytes, call append() with the
-     * pointer returned from this function and the number of bytes written.
-     *
-     * @param minCapacity required minimum capacity of the returned buffer;
-     *                    must be non-negative
-     * @param desiredCapacityHint desired capacity of the returned buffer;
-     *                            must be non-negative
-     * @param resultCapacity will be set to the capacity of the returned buffer
-     * @param errorCode in/out error code
-     * @return a buffer with resultCapacity>=min_capacity
-     */
-    char *getAppendBuffer(int32_t minCapacity,
-                          int32_t desiredCapacityHint,
-                          int32_t &resultCapacity,
-                          UErrorCode &errorCode);
-
-    CharString &appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode);
-
-    /**
-     * Appends a filename/path part, e.g., a directory name.
-     * First appends a U_FILE_SEP_CHAR if necessary.
-     * Does nothing if s is empty.
-     */
-    CharString &appendPathPart(const StringPiece &s, UErrorCode &errorCode);
-
-private:
-    MaybeStackArray<char, 40> buffer;
-    int32_t len;
-
-    UBool ensureCapacity(int32_t capacity, int32_t desiredCapacityHint, UErrorCode &errorCode);
-
-    CharString(const CharString &other); // forbid copying of this class
-    CharString &operator=(const CharString &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-
-#endif
-//eof
diff --git a/src/third_party/mozjs/intl/icu/source/common/cmemory.c b/src/third_party/mozjs/intl/icu/source/common/cmemory.c
deleted file mode 100644
index cd3ccac..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cmemory.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2002-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File cmemory.c      ICU Heap allocation.
-*                     All ICU heap allocation, both for C and C++ new of ICU
-*                     class types, comes through these functions.
-*
-*                     If you have a need to replace ICU allocation, this is the
-*                     place to do it.
-*
-*                     Note that uprv_malloc(0) returns a non-NULL pointer, and
-*                     that a subsequent free of that pointer value is a NOP.
-*
-******************************************************************************
-*/
-#include "unicode/uclean.h"
-#include "cmemory.h"
-#include "putilimp.h"
-#include "uassert.h"
-#include <stdlib.h>
-
-/* uprv_malloc(0) returns a pointer to this read-only data. */
-static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0};
-
-/* Function Pointers for user-supplied heap functions  */
-static const void     *pContext;
-static UMemAllocFn    *pAlloc;
-static UMemReallocFn  *pRealloc;
-static UMemFreeFn     *pFree;
-
-/* Flag indicating whether any heap allocations have happened.
- *   Used to prevent changing out the heap functions after allocations have been made */
-static UBool   gHeapInUse;
-
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#include <stdio.h>
-static int n=0;
-static long b=0; 
-#endif
-
-#if U_DEBUG
-
-static char gValidMemorySink = 0;
-
-U_CAPI void uprv_checkValidMemory(const void *p, size_t n) {
-    /*
-     * Access the memory to ensure that it's all valid.
-     * Load and save a computed value to try to ensure that the compiler
-     * does not throw away the whole loop.
-     * A thread analyzer might complain about un-mutexed access to gValidMemorySink
-     * which is true but harmless because no one ever uses the value in gValidMemorySink.
-     */
-    const char *s = (const char *)p;
-    char c = gValidMemorySink;
-    size_t i;
-    U_ASSERT(p != NULL);
-    for(i = 0; i < n; ++i) {
-        c ^= s[i];
-    }
-    gValidMemorySink = c;
-}
-
-#endif  /* U_DEBUG */
-
-U_CAPI void * U_EXPORT2
-uprv_malloc(size_t s) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#if 1
-  putchar('>');
-  fflush(stdout);
-#else
-  fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr);
-#endif
-#endif
-    if (s > 0) {
-        gHeapInUse = TRUE;
-        if (pAlloc) {
-            return (*pAlloc)(pContext, s);
-        } else {
-            return uprv_default_malloc(s);
-        }
-    } else {
-        return (void *)zeroMem;
-    }
-}
-
-U_CAPI void * U_EXPORT2
-uprv_realloc(void * buffer, size_t size) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-  putchar('~');
-  fflush(stdout);
-#endif
-    if (buffer == zeroMem) {
-        return uprv_malloc(size);
-    } else if (size == 0) {
-        if (pFree) {
-            (*pFree)(pContext, buffer);
-        } else {
-            uprv_default_free(buffer);
-        }
-        return (void *)zeroMem;
-    } else {
-        gHeapInUse = TRUE;
-        if (pRealloc) {
-            return (*pRealloc)(pContext, buffer, size);
-        } else {
-            return uprv_default_realloc(buffer, size);
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-uprv_free(void *buffer) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-  putchar('<');
-  fflush(stdout);
-#endif
-    if (buffer != zeroMem) {
-        if (pFree) {
-            (*pFree)(pContext, buffer);
-        } else {
-            uprv_default_free(buffer);
-        }
-    }
-}
-
-U_CAPI void * U_EXPORT2
-uprv_calloc(size_t num, size_t size) {
-    void *mem = NULL;
-    size *= num;
-    mem = uprv_malloc(size);
-    if (mem) {
-        uprv_memset(mem, 0, size);
-    }
-    return mem;
-}
-
-U_CAPI void U_EXPORT2
-u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f,  UErrorCode *status)
-{
-    if (U_FAILURE(*status)) {
-        return;
-    }
-    if (a==NULL || r==NULL || f==NULL) {
-        *status = U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if (gHeapInUse) {
-        *status = U_INVALID_STATE_ERROR;
-        return;
-    }
-    pContext  = context;
-    pAlloc    = a;
-    pRealloc  = r;
-    pFree     = f;
-}
-
-
-U_CFUNC UBool cmemory_cleanup(void) {
-    pContext   = NULL;
-    pAlloc     = NULL;
-    pRealloc   = NULL;
-    pFree      = NULL;
-    gHeapInUse = FALSE;
-    return TRUE;
-}
-
-
-/*
- *   gHeapInUse
- *       Return True if ICU has allocated any memory.
- *       Used by u_SetMutexFunctions() and similar to verify that ICU has not
- *               been used, that it is in a pristine initial state.
- */
-U_CFUNC UBool cmemory_inUse() {
-    return gHeapInUse;
-}
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/cmemory.h b/src/third_party/mozjs/intl/icu/source/common/cmemory.h
deleted file mode 100644
index f5c063b..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cmemory.h
+++ /dev/null
@@ -1,599 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File CMEMORY.H
-*
-*  Contains stdlib.h/string.h memory functions
-*
-* @author       Bertrand A. Damiba
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   6/20/98     Bertrand    Created.
-*  05/03/99     stephen     Changed from functions to macros.
-*
-******************************************************************************
-*/
-
-#ifndef CMEMORY_H
-#define CMEMORY_H
-
-#include "unicode/utypes.h"
-
-#include <stddef.h>
-#include <string.h>
-#include "unicode/localpointer.h"
-
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#include <stdio.h>
-#endif
-
-#if U_DEBUG
-
-/*
- * The C++ standard requires that the source pointer for memcpy() & memmove()
- * is valid, not NULL, and not at the end of an allocated memory block.
- * In debug mode, we read one byte from the source point to verify that it's
- * a valid, readable pointer.
- */
-
-U_CAPI void uprv_checkValidMemory(const void *p, size_t n);
-
-#define uprv_memcpy(dst, src, size) ( \
-    uprv_checkValidMemory(src, 1), \
-    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size))
-#define uprv_memmove(dst, src, size) ( \
-    uprv_checkValidMemory(src, 1), \
-    U_STANDARD_CPP_NAMESPACE memmove(dst, src, size))
-
-#else
-
-#define uprv_memcpy(dst, src, size) U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size)
-#define uprv_memmove(dst, src, size) U_STANDARD_CPP_NAMESPACE memmove(dst, src, size)
-
-#endif  /* U_DEBUG */
-
-#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
-#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
-
-U_CAPI void * U_EXPORT2
-uprv_malloc(size_t s) U_MALLOC_ATTR U_ALLOC_SIZE_ATTR(1);
-
-U_CAPI void * U_EXPORT2
-uprv_realloc(void *mem, size_t size) U_ALLOC_SIZE_ATTR(2);
-
-U_CAPI void U_EXPORT2
-uprv_free(void *mem);
-
-U_CAPI void * U_EXPORT2
-uprv_calloc(size_t num, size_t size) U_MALLOC_ATTR U_ALLOC_SIZE_ATTR2(1,2);
-
-/**
- * This should align the memory properly on any machine.
- * This is very useful for the safeClone functions.
- */
-typedef union {
-    long    t1;
-    double  t2;
-    void   *t3;
-} UAlignedMemory;
-
-/**
- * Get the least significant bits of a pointer (a memory address).
- * For example, with a mask of 3, the macro gets the 2 least significant bits,
- * which will be 0 if the pointer is 32-bit (4-byte) aligned.
- *
- * ptrdiff_t is the most appropriate integer type to cast to.
- * size_t should work too, since on most (or all?) platforms it has the same
- * width as ptrdiff_t.
- */
-#define U_POINTER_MASK_LSB(ptr, mask) (((ptrdiff_t)(char *)(ptr)) & (mask))
-
-/**
- * Get the amount of bytes that a pointer is off by from
- * the previous UAlignedMemory-aligned pointer.
- */
-#define U_ALIGNMENT_OFFSET(ptr) U_POINTER_MASK_LSB(ptr, sizeof(UAlignedMemory) - 1)
-
-/**
- * Get the amount of bytes to add to a pointer
- * in order to get the next UAlignedMemory-aligned address.
- */
-#define U_ALIGNMENT_OFFSET_UP(ptr) (sizeof(UAlignedMemory) - U_ALIGNMENT_OFFSET(ptr))
-
-/**
-  *  Indicate whether the ICU allocation functions have been used.
-  *  This is used to determine whether ICU is in an initial, unused state.
-  */
-U_CFUNC UBool 
-cmemory_inUse(void);
-
-/**
-  *  Heap clean up function, called from u_cleanup()
-  *    Clears any user heap functions from u_setMemoryFunctions()
-  *    Does NOT deallocate any remaining allocated memory.
-  */
-U_CFUNC UBool 
-cmemory_cleanup(void);
-
-/**
- * A function called by <TT>uhash_remove</TT>,
- * <TT>uhash_close</TT>, or <TT>uhash_put</TT> to delete
- * an existing key or value.
- * @param obj A key or value stored in a hashtable
- * @see uprv_deleteUObject
- */
-typedef void U_CALLCONV UObjectDeleter(void* obj);
-
-/**
- * Deleter for UObject instances.
- * Works for all subclasses of UObject because it has a virtual destructor.
- */
-U_CAPI void U_EXPORT2
-uprv_deleteUObject(void *obj);
-
-#ifdef __cplusplus
-
-U_NAMESPACE_BEGIN
-
-/**
- * "Smart pointer" class, deletes memory via uprv_free().
- * For most methods see the LocalPointerBase base class.
- * Adds operator[] for array item access.
- *
- * @see LocalPointerBase
- */
-template<typename T>
-class LocalMemory : public LocalPointerBase<T> {
-public:
-    /**
-     * Constructor takes ownership.
-     * @param p simple pointer to an array of T items that is adopted
-     */
-    explicit LocalMemory(T *p=NULL) : LocalPointerBase<T>(p) {}
-    /**
-     * Destructor deletes the memory it owns.
-     */
-    ~LocalMemory() {
-        uprv_free(LocalPointerBase<T>::ptr);
-    }
-    /**
-     * Deletes the array it owns,
-     * and adopts (takes ownership of) the one passed in.
-     * @param p simple pointer to an array of T items that is adopted
-     */
-    void adoptInstead(T *p) {
-        uprv_free(LocalPointerBase<T>::ptr);
-        LocalPointerBase<T>::ptr=p;
-    }
-    /**
-     * Deletes the array it owns, allocates a new one and reset its bytes to 0.
-     * Returns the new array pointer.
-     * If the allocation fails, then the current array is unchanged and
-     * this method returns NULL.
-     * @param newCapacity must be >0
-     * @return the allocated array pointer, or NULL if the allocation failed
-     */
-    inline T *allocateInsteadAndReset(int32_t newCapacity=1);
-    /**
-     * Deletes the array it owns and allocates a new one, copying length T items.
-     * Returns the new array pointer.
-     * If the allocation fails, then the current array is unchanged and
-     * this method returns NULL.
-     * @param newCapacity must be >0
-     * @param length number of T items to be copied from the old array to the new one;
-     *               must be no more than the capacity of the old array,
-     *               which the caller must track because the LocalMemory does not track it
-     * @return the allocated array pointer, or NULL if the allocation failed
-     */
-    inline T *allocateInsteadAndCopy(int32_t newCapacity=1, int32_t length=0);
-    /**
-     * Array item access (writable).
-     * No index bounds check.
-     * @param i array index
-     * @return reference to the array item
-     */
-    T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
-};
-
-template<typename T>
-inline T *LocalMemory<T>::allocateInsteadAndReset(int32_t newCapacity) {
-    if(newCapacity>0) {
-        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
-        if(p!=NULL) {
-            uprv_memset(p, 0, newCapacity*sizeof(T));
-            uprv_free(LocalPointerBase<T>::ptr);
-            LocalPointerBase<T>::ptr=p;
-        }
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-
-template<typename T>
-inline T *LocalMemory<T>::allocateInsteadAndCopy(int32_t newCapacity, int32_t length) {
-    if(newCapacity>0) {
-        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
-        if(p!=NULL) {
-            if(length>0) {
-                if(length>newCapacity) {
-                    length=newCapacity;
-                }
-                uprv_memcpy(p, LocalPointerBase<T>::ptr, length*sizeof(T));
-            }
-            uprv_free(LocalPointerBase<T>::ptr);
-            LocalPointerBase<T>::ptr=p;
-        }
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-/**
- * Simple array/buffer management class using uprv_malloc() and uprv_free().
- * Provides an internal array with fixed capacity. Can alias another array
- * or allocate one.
- *
- * The array address is properly aligned for type T. It might not be properly
- * aligned for types larger than T (or larger than the largest subtype of T).
- *
- * Unlike LocalMemory and LocalArray, this class never adopts
- * (takes ownership of) another array.
- */
-template<typename T, int32_t stackCapacity>
-class MaybeStackArray {
-public:
-    /**
-     * Default constructor initializes with internal T[stackCapacity] buffer.
-     */
-    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(FALSE) {}
-    /**
-     * Destructor deletes the array (if owned).
-     */
-    ~MaybeStackArray() { releaseArray(); }
-    /**
-     * Returns the array capacity (number of T items).
-     * @return array capacity
-     */
-    int32_t getCapacity() const { return capacity; }
-    /**
-     * Access without ownership change.
-     * @return the array pointer
-     */
-    T *getAlias() const { return ptr; }
-    /**
-     * Returns the array limit. Simple convenience method.
-     * @return getAlias()+getCapacity()
-     */
-    T *getArrayLimit() const { return getAlias()+capacity; }
-    // No "operator T *() const" because that can make
-    // expressions like mbs[index] ambiguous for some compilers.
-    /**
-     * Array item access (const).
-     * No index bounds check.
-     * @param i array index
-     * @return reference to the array item
-     */
-    const T &operator[](ptrdiff_t i) const { return ptr[i]; }
-    /**
-     * Array item access (writable).
-     * No index bounds check.
-     * @param i array index
-     * @return reference to the array item
-     */
-    T &operator[](ptrdiff_t i) { return ptr[i]; }
-    /**
-     * Deletes the array (if owned) and aliases another one, no transfer of ownership.
-     * If the arguments are illegal, then the current array is unchanged.
-     * @param otherArray must not be NULL
-     * @param otherCapacity must be >0
-     */
-    void aliasInstead(T *otherArray, int32_t otherCapacity) {
-        if(otherArray!=NULL && otherCapacity>0) {
-            releaseArray();
-            ptr=otherArray;
-            capacity=otherCapacity;
-            needToRelease=FALSE;
-        }
-    }
-    /**
-     * Deletes the array (if owned) and allocates a new one, copying length T items.
-     * Returns the new array pointer.
-     * If the allocation fails, then the current array is unchanged and
-     * this method returns NULL.
-     * @param newCapacity can be less than or greater than the current capacity;
-     *                    must be >0
-     * @param length number of T items to be copied from the old array to the new one
-     * @return the allocated array pointer, or NULL if the allocation failed
-     */
-    inline T *resize(int32_t newCapacity, int32_t length=0);
-    /**
-     * Gives up ownership of the array if owned, or else clones it,
-     * copying length T items; resets itself to the internal stack array.
-     * Returns NULL if the allocation failed.
-     * @param length number of T items to copy when cloning,
-     *        and capacity of the clone when cloning
-     * @param resultCapacity will be set to the returned array's capacity (output-only)
-     * @return the array pointer;
-     *         caller becomes responsible for deleting the array
-     */
-    inline T *orphanOrClone(int32_t length, int32_t &resultCapacity);
-private:
-    T *ptr;
-    int32_t capacity;
-    UBool needToRelease;
-    T stackArray[stackCapacity];
-    void releaseArray() {
-        if(needToRelease) {
-            uprv_free(ptr);
-        }
-    }
-    /* No comparison operators with other MaybeStackArray's. */
-    bool operator==(const MaybeStackArray & /*other*/) {return FALSE;}
-    bool operator!=(const MaybeStackArray & /*other*/) {return TRUE;}
-    /* No ownership transfer: No copy constructor, no assignment operator. */
-    MaybeStackArray(const MaybeStackArray & /*other*/) {}
-    void operator=(const MaybeStackArray & /*other*/) {}
-
-    // No heap allocation. Use only on the stack.
-    //   (Declaring these functions private triggers a cascade of problems:
-    //      MSVC insists on exporting an instantiation of MaybeStackArray, which
-    //      requires that all functions be defined.
-    //      An empty implementation of new() is rejected, it must return a value.
-    //      Returning NULL is rejected by gcc for operator new.
-    //      The expedient thing is just not to override operator new.
-    //      While relatively pointless, heap allocated instances will function.
-    // static void * U_EXPORT2 operator new(size_t size); 
-    // static void * U_EXPORT2 operator new[](size_t size);
-#if U_HAVE_PLACEMENT_NEW
-    // static void * U_EXPORT2 operator new(size_t, void *ptr);
-#endif
-};
-
-template<typename T, int32_t stackCapacity>
-inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
-    if(newCapacity>0) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-      ::fprintf(::stderr,"MaybeStacArray (resize) alloc %d * %lu\n", newCapacity,sizeof(T));
-#endif
-        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
-        if(p!=NULL) {
-            if(length>0) {
-                if(length>capacity) {
-                    length=capacity;
-                }
-                if(length>newCapacity) {
-                    length=newCapacity;
-                }
-                uprv_memcpy(p, ptr, length*sizeof(T));
-            }
-            releaseArray();
-            ptr=p;
-            capacity=newCapacity;
-            needToRelease=TRUE;
-        }
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-template<typename T, int32_t stackCapacity>
-inline T *MaybeStackArray<T, stackCapacity>::orphanOrClone(int32_t length, int32_t &resultCapacity) {
-    T *p;
-    if(needToRelease) {
-        p=ptr;
-    } else if(length<=0) {
-        return NULL;
-    } else {
-        if(length>capacity) {
-            length=capacity;
-        }
-        p=(T *)uprv_malloc(length*sizeof(T));
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-      ::fprintf(::stderr,"MaybeStacArray (orphan) alloc %d * %lu\n", length,sizeof(T));
-#endif
-        if(p==NULL) {
-            return NULL;
-        }
-        uprv_memcpy(p, ptr, length*sizeof(T));
-    }
-    resultCapacity=length;
-    ptr=stackArray;
-    capacity=stackCapacity;
-    needToRelease=FALSE;
-    return p;
-}
-
-/**
- * Variant of MaybeStackArray that allocates a header struct and an array
- * in one contiguous memory block, using uprv_malloc() and uprv_free().
- * Provides internal memory with fixed array capacity. Can alias another memory
- * block or allocate one.
- * The stackCapacity is the number of T items in the internal memory,
- * not counting the H header.
- * Unlike LocalMemory and LocalArray, this class never adopts
- * (takes ownership of) another memory block.
- */
-template<typename H, typename T, int32_t stackCapacity>
-class MaybeStackHeaderAndArray {
-public:
-    /**
-     * Default constructor initializes with internal H+T[stackCapacity] buffer.
-     */
-    MaybeStackHeaderAndArray() : ptr(&stackHeader), capacity(stackCapacity), needToRelease(FALSE) {}
-    /**
-     * Destructor deletes the memory (if owned).
-     */
-    ~MaybeStackHeaderAndArray() { releaseMemory(); }
-    /**
-     * Returns the array capacity (number of T items).
-     * @return array capacity
-     */
-    int32_t getCapacity() const { return capacity; }
-    /**
-     * Access without ownership change.
-     * @return the header pointer
-     */
-    H *getAlias() const { return ptr; }
-    /**
-     * Returns the array start.
-     * @return array start, same address as getAlias()+1
-     */
-    T *getArrayStart() const { return reinterpret_cast<T *>(getAlias()+1); }
-    /**
-     * Returns the array limit.
-     * @return array limit
-     */
-    T *getArrayLimit() const { return getArrayStart()+capacity; }
-    /**
-     * Access without ownership change. Same as getAlias().
-     * A class instance can be used directly in expressions that take a T *.
-     * @return the header pointer
-     */
-    operator H *() const { return ptr; }
-    /**
-     * Array item access (writable).
-     * No index bounds check.
-     * @param i array index
-     * @return reference to the array item
-     */
-    T &operator[](ptrdiff_t i) { return getArrayStart()[i]; }
-    /**
-     * Deletes the memory block (if owned) and aliases another one, no transfer of ownership.
-     * If the arguments are illegal, then the current memory is unchanged.
-     * @param otherArray must not be NULL
-     * @param otherCapacity must be >0
-     */
-    void aliasInstead(H *otherMemory, int32_t otherCapacity) {
-        if(otherMemory!=NULL && otherCapacity>0) {
-            releaseMemory();
-            ptr=otherMemory;
-            capacity=otherCapacity;
-            needToRelease=FALSE;
-        }
-    }
-    /**
-     * Deletes the memory block (if owned) and allocates a new one,
-     * copying the header and length T array items.
-     * Returns the new header pointer.
-     * If the allocation fails, then the current memory is unchanged and
-     * this method returns NULL.
-     * @param newCapacity can be less than or greater than the current capacity;
-     *                    must be >0
-     * @param length number of T items to be copied from the old array to the new one
-     * @return the allocated pointer, or NULL if the allocation failed
-     */
-    inline H *resize(int32_t newCapacity, int32_t length=0);
-    /**
-     * Gives up ownership of the memory if owned, or else clones it,
-     * copying the header and length T array items; resets itself to the internal memory.
-     * Returns NULL if the allocation failed.
-     * @param length number of T items to copy when cloning,
-     *        and array capacity of the clone when cloning
-     * @param resultCapacity will be set to the returned array's capacity (output-only)
-     * @return the header pointer;
-     *         caller becomes responsible for deleting the array
-     */
-    inline H *orphanOrClone(int32_t length, int32_t &resultCapacity);
-private:
-    H *ptr;
-    int32_t capacity;
-    UBool needToRelease;
-    // stackHeader must precede stackArray immediately.
-    H stackHeader;
-    T stackArray[stackCapacity];
-    void releaseMemory() {
-        if(needToRelease) {
-            uprv_free(ptr);
-        }
-    }
-    /* No comparison operators with other MaybeStackHeaderAndArray's. */
-    bool operator==(const MaybeStackHeaderAndArray & /*other*/) {return FALSE;}
-    bool operator!=(const MaybeStackHeaderAndArray & /*other*/) {return TRUE;}
-    /* No ownership transfer: No copy constructor, no assignment operator. */
-    MaybeStackHeaderAndArray(const MaybeStackHeaderAndArray & /*other*/) {}
-    void operator=(const MaybeStackHeaderAndArray & /*other*/) {}
-
-    // No heap allocation. Use only on the stack.
-    //   (Declaring these functions private triggers a cascade of problems;
-    //    see the MaybeStackArray class for details.)
-    // static void * U_EXPORT2 operator new(size_t size); 
-    // static void * U_EXPORT2 operator new[](size_t size);
-#if U_HAVE_PLACEMENT_NEW
-    // static void * U_EXPORT2 operator new(size_t, void *ptr);
-#endif
-};
-
-template<typename H, typename T, int32_t stackCapacity>
-inline H *MaybeStackHeaderAndArray<H, T, stackCapacity>::resize(int32_t newCapacity,
-                                                                int32_t length) {
-    if(newCapacity>=0) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-      ::fprintf(::stderr,"MaybeStackHeaderAndArray alloc %d + %d * %ul\n", sizeof(H),newCapacity,sizeof(T));
-#endif
-        H *p=(H *)uprv_malloc(sizeof(H)+newCapacity*sizeof(T));
-        if(p!=NULL) {
-            if(length<0) {
-                length=0;
-            } else if(length>0) {
-                if(length>capacity) {
-                    length=capacity;
-                }
-                if(length>newCapacity) {
-                    length=newCapacity;
-                }
-            }
-            uprv_memcpy(p, ptr, sizeof(H)+length*sizeof(T));
-            releaseMemory();
-            ptr=p;
-            capacity=newCapacity;
-            needToRelease=TRUE;
-        }
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-template<typename H, typename T, int32_t stackCapacity>
-inline H *MaybeStackHeaderAndArray<H, T, stackCapacity>::orphanOrClone(int32_t length,
-                                                                       int32_t &resultCapacity) {
-    H *p;
-    if(needToRelease) {
-        p=ptr;
-    } else {
-        if(length<0) {
-            length=0;
-        } else if(length>capacity) {
-            length=capacity;
-        }
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-      ::fprintf(::stderr,"MaybeStackHeaderAndArray (orphan) alloc %ul + %d * %lu\n", sizeof(H),length,sizeof(T));
-#endif
-        p=(H *)uprv_malloc(sizeof(H)+length*sizeof(T));
-        if(p==NULL) {
-            return NULL;
-        }
-        uprv_memcpy(p, ptr, sizeof(H)+length*sizeof(T));
-    }
-    resultCapacity=length;
-    ptr=&stackHeader;
-    capacity=stackCapacity;
-    needToRelease=FALSE;
-    return p;
-}
-
-U_NAMESPACE_END
-
-#endif  /* __cplusplus */
-#endif  /* CMEMORY_H */
diff --git a/src/third_party/mozjs/intl/icu/source/common/common.rc b/src/third_party/mozjs/intl/icu/source/common/common.rc
deleted file mode 100644
index e0820bb..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/common.rc
+++ /dev/null
@@ -1,108 +0,0 @@
-// Do not edit with Microsoft Developer Studio Resource Editor.
-//   It will permanently substitute version numbers that are intended to be
-//   picked up by the pre-processor during each build.
-// Copyright (c) 2001-2010 International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-#include "msvcres.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include <winresrc.h>
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// 
-
-LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE 
-BEGIN
-    "msvcres.h\0"
-END
-
-2 TEXTINCLUDE 
-BEGIN
-    "#include <winresrc.h>\0"
-END
-
-3 TEXTINCLUDE 
-BEGIN
-    "\r\n"
-    "\0"
-END
-
-#endif    // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-#define STR(s) #s
-#define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM
- PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "00000000"
-        BEGIN
-            VALUE "Comments", ICU_WEBSITE "\0"
-            VALUE "CompanyName", ICU_COMPANY "\0"
-            VALUE "FileDescription", ICU_PRODUCT_PREFIX " Common DLL\0"
-            VALUE "FileVersion",  CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM)
-            VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0"
-#ifdef _DEBUG
-            VALUE "OriginalFilename", "icuuc" U_ICU_VERSION_SHORT "d.dll\0"
-#else
-            VALUE "OriginalFilename", "icuuc" U_ICU_VERSION_SHORT ".dll\0"
-#endif
-            VALUE "PrivateBuild", "\0"
-            VALUE "ProductName", ICU_PRODUCT "\0"
-            VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM)
-            VALUE "SpecialBuild", "\0"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x000, 0000
-    END
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/common.vcxproj b/src/third_party/mozjs/intl/icu/source/common/common.vcxproj
deleted file mode 100644
index bbe213d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/common.vcxproj
+++ /dev/null
@@ -1,1711 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}</ProjectGuid>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

-    <CharacterSet>MultiByte</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

-    <CharacterSet>MultiByte</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

-    <CharacterSet>MultiByte</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

-    <CharacterSet>MultiByte</CharacterSet>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings">

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup>

-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\lib\</OutDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</IntDir>

-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\lib\</OutDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</IntDir>

-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</OutDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</IntDir>

-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</OutDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</IntDir>

-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <Midl>

-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <MkTypLibCompatible>true</MkTypLibCompatible>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <TargetEnvironment>Win32</TargetEnvironment>

-      <TypeLibraryName>.\..\..\lib\icuuc.tlb</TypeLibraryName>

-    </Midl>

-    <ClCompile>

-      <PreprocessorDefinitions>U_ATTRIBUTE_DEPRECATED=;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <StringPooling>true</StringPooling>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <DisableLanguageExtensions>true</DisableLanguageExtensions>

-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>

-      <PrecompiledHeaderOutputFile>.\x86\Release/common.pch</PrecompiledHeaderOutputFile>

-      <AssemblerListingLocation>.\x86\Release/</AssemblerListingLocation>

-      <ObjectFileName>.\x86\Release/</ObjectFileName>

-      <ProgramDataBaseFileName>.\x86\Release/</ProgramDataBaseFileName>

-      <WarningLevel>Level3</WarningLevel>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-    </ClCompile>

-    <ResourceCompile>

-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <Culture>0x0409</Culture>

-    </ResourceCompile>

-    <Link>

-      <OutputFile>..\..\bin\icuuc50.dll</OutputFile>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <ProgramDatabaseFile>.\..\..\lib\icuuc.pdb</ProgramDatabaseFile>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <BaseAddress>0x4a800000</BaseAddress>

-      <RandomizedBaseAddress>false</RandomizedBaseAddress>

-      <DataExecutionPrevention>

-      </DataExecutionPrevention>

-      <ImportLibrary>..\..\lib\icuuc.lib</ImportLibrary>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <Midl>

-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <MkTypLibCompatible>true</MkTypLibCompatible>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <TargetEnvironment>Win32</TargetEnvironment>

-      <TypeLibraryName>.\..\..\lib\icuucd.tlb</TypeLibraryName>

-    </Midl>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>U_ATTRIBUTE_DEPRECATED=;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;RBBI_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-      <BufferSecurityCheck>true</BufferSecurityCheck>

-      <DisableLanguageExtensions>true</DisableLanguageExtensions>

-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>

-      <PrecompiledHeaderOutputFile>.\x86\Debug/common.pch</PrecompiledHeaderOutputFile>

-      <AssemblerListingLocation>.\x86\Debug/</AssemblerListingLocation>

-      <ObjectFileName>.\x86\Debug/</ObjectFileName>

-      <ProgramDataBaseFileName>.\x86\Debug/</ProgramDataBaseFileName>

-      <BrowseInformation>true</BrowseInformation>

-      <WarningLevel>Level3</WarningLevel>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>

-    </ClCompile>

-    <ResourceCompile>

-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <Culture>0x0409</Culture>

-    </ResourceCompile>

-    <Link>

-      <OutputFile>..\..\bin\icuuc50d.dll</OutputFile>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <ProgramDatabaseFile>.\..\..\lib\icuucd.pdb</ProgramDatabaseFile>

-      <BaseAddress>0x4a800000</BaseAddress>

-      <RandomizedBaseAddress>false</RandomizedBaseAddress>

-      <DataExecutionPrevention>

-      </DataExecutionPrevention>

-      <ImportLibrary>..\..\lib\icuucd.lib</ImportLibrary>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <Midl>

-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <MkTypLibCompatible>true</MkTypLibCompatible>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <TargetEnvironment>X64</TargetEnvironment>

-      <TypeLibraryName>.\..\..\lib64\icuuc.tlb</TypeLibraryName>

-    </Midl>

-    <ClCompile>

-      <PreprocessorDefinitions>U_ATTRIBUTE_DEPRECATED=;WIN64;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <StringPooling>true</StringPooling>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <DisableLanguageExtensions>true</DisableLanguageExtensions>

-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>

-      <PrecompiledHeaderOutputFile>.\x64\Release/common.pch</PrecompiledHeaderOutputFile>

-      <AssemblerListingLocation>.\x64\Release/</AssemblerListingLocation>

-      <ObjectFileName>.\x64\Release/</ObjectFileName>

-      <ProgramDataBaseFileName>.\x64\Release/</ProgramDataBaseFileName>

-      <WarningLevel>Level3</WarningLevel>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-    </ClCompile>

-    <ResourceCompile>

-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <Culture>0x0409</Culture>

-    </ResourceCompile>

-    <Link>

-      <OutputFile>..\..\bin64\icuuc50.dll</OutputFile>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <ProgramDatabaseFile>.\..\..\lib64\icuuc.pdb</ProgramDatabaseFile>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <BaseAddress>0x4a800000</BaseAddress>

-      <ImportLibrary>..\..\lib64\icuuc.lib</ImportLibrary>

-      <TargetMachine>MachineX64</TargetMachine>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <Midl>

-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <MkTypLibCompatible>true</MkTypLibCompatible>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <TargetEnvironment>X64</TargetEnvironment>

-      <TypeLibraryName>.\..\..\lib64\icuucd.tlb</TypeLibraryName>

-    </Midl>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>U_ATTRIBUTE_DEPRECATED=;WIN64;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;RBBI_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-      <BufferSecurityCheck>true</BufferSecurityCheck>

-      <DisableLanguageExtensions>true</DisableLanguageExtensions>

-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>

-      <PrecompiledHeaderOutputFile>.\x64\Debug/common.pch</PrecompiledHeaderOutputFile>

-      <AssemblerListingLocation>.\x64\Debug/</AssemblerListingLocation>

-      <ObjectFileName>.\x64\Debug/</ObjectFileName>

-      <ProgramDataBaseFileName>.\x64\Debug/</ProgramDataBaseFileName>

-      <BrowseInformation>true</BrowseInformation>

-      <WarningLevel>Level3</WarningLevel>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>

-    </ClCompile>

-    <ResourceCompile>

-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <Culture>0x0409</Culture>

-    </ResourceCompile>

-    <Link>

-      <OutputFile>..\..\bin64\icuuc50d.dll</OutputFile>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <ProgramDatabaseFile>.\..\..\lib64\icuucd.pdb</ProgramDatabaseFile>

-      <BaseAddress>0x4a800000</BaseAddress>

-      <ImportLibrary>..\..\lib64\icuucd.lib</ImportLibrary>

-      <TargetMachine>MachineX64</TargetMachine>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="ubidi.c" />

-    <ClCompile Include="ubidi_props.c" />

-    <ClCompile Include="ubidiln.c" />

-    <ClCompile Include="ubidiwrt.c" />

-    <ClCompile Include="ushape.cpp" />

-    <ClCompile Include="brkeng.cpp" />

-    <ClCompile Include="brkiter.cpp" />

-    <ClCompile Include="dictbe.cpp" />

-    <ClCompile Include="rbbi.cpp" />

-    <ClCompile Include="rbbidata.cpp" />

-    <ClCompile Include="rbbinode.cpp" />

-    <ClCompile Include="rbbirb.cpp" />

-    <ClCompile Include="rbbiscan.cpp" />

-    <ClCompile Include="rbbisetb.cpp" />

-    <ClCompile Include="rbbistbl.cpp" />

-    <ClCompile Include="rbbitblb.cpp" />

-    <ClCompile Include="dictionarydata.cpp" />

-    <ClCompile Include="ubrk.cpp" />

-    <ClCompile Include="ucol_swp.cpp">

-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-    </ClCompile>

-    <ClCompile Include="propsvec.c" />

-    <ClCompile Include="uarrsort.c" />

-    <ClCompile Include="uenum.c" />

-    <ClCompile Include="uhash.c" />

-    <ClCompile Include="uhash_us.cpp" />

-    <ClCompile Include="ulist.c" />

-    <ClCompile Include="ustack.cpp" />

-    <ClCompile Include="ustrenum.cpp" />

-    <ClCompile Include="utrie.cpp" />

-    <ClCompile Include="utrie2.cpp" />

-    <ClCompile Include="utrie2_builder.cpp" />

-    <ClCompile Include="uvector.cpp" />

-    <ClCompile Include="uvectr32.cpp" />

-    <ClCompile Include="uvectr64.cpp" />

-    <ClCompile Include="errorcode.cpp" />

-    <ClCompile Include="icudataver.c" />

-    <ClCompile Include="locmap.c">

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>

-    </ClCompile>

-    <ClCompile Include="mutex.cpp" />

-    <ClCompile Include="putil.cpp">

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>

-    </ClCompile>

-    <ClCompile Include="umath.c" />

-    <ClCompile Include="umutex.cpp">

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>

-    </ClCompile>

-    <ClCompile Include="utrace.c" />

-    <ClCompile Include="utypes.c" />

-    <ClCompile Include="wintz.c">

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>

-    </ClCompile>

-    <ClCompile Include="ucnv.c" />

-    <ClCompile Include="ucnv2022.cpp" />

-    <ClCompile Include="ucnv_bld.cpp" />

-    <ClCompile Include="ucnv_cb.c" />

-    <ClCompile Include="ucnv_cnv.c" />

-    <ClCompile Include="ucnv_ct.c" />

-    <ClCompile Include="ucnv_err.c" />

-    <ClCompile Include="ucnv_ext.cpp" />

-    <ClCompile Include="ucnv_io.cpp" />

-    <ClCompile Include="ucnv_lmb.c" />

-    <ClCompile Include="ucnv_set.c" />

-    <ClCompile Include="ucnv_u16.c" />

-    <ClCompile Include="ucnv_u32.c" />

-    <ClCompile Include="ucnv_u7.c" />

-    <ClCompile Include="ucnv_u8.c" />

-    <ClCompile Include="ucnvbocu.cpp" />

-    <ClCompile Include="ucnvdisp.c" />

-    <ClCompile Include="ucnvhz.c" />

-    <ClCompile Include="ucnvisci.c" />

-    <ClCompile Include="ucnvlat1.c" />

-    <ClCompile Include="ucnvmbcs.c" />

-    <ClCompile Include="ucnvscsu.c" />

-    <ClCompile Include="ucnvsel.cpp" />

-    <ClCompile Include="cmemory.c" />

-    <ClCompile Include="ucln_cmn.c">

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>

-    </ClCompile>

-    <ClCompile Include="ucmndata.c" />

-    <ClCompile Include="udata.cpp" />

-    <ClCompile Include="udatamem.c" />

-    <ClCompile Include="udataswp.c" />

-    <ClCompile Include="uinit.c" />

-    <ClCompile Include="umapfile.c">

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>

-      <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>

-    </ClCompile>

-    <ClCompile Include="uobject.cpp" />

-    <ClCompile Include="dtintrv.cpp" />

-    <ClCompile Include="parsepos.cpp" />

-    <ClCompile Include="ustrfmt.c" />

-    <ClCompile Include="util.cpp" />

-    <ClCompile Include="util_props.cpp" />

-    <ClCompile Include="punycode.cpp" />

-    <ClCompile Include="uidna.cpp" />

-    <ClCompile Include="uts46.cpp" />

-    <ClCompile Include="locavailable.cpp" />

-    <ClCompile Include="locbased.cpp" />

-    <ClCompile Include="locdispnames.cpp" />

-    <ClCompile Include="locid.cpp" />

-    <ClCompile Include="loclikely.cpp" />

-    <ClCompile Include="locresdata.cpp" />

-    <ClCompile Include="locutil.cpp" />

-    <ClCompile Include="resbund.cpp" />

-    <ClCompile Include="resbund_cnv.cpp" />

-    <ClCompile Include="ucat.c" />

-    <ClCompile Include="uloc.cpp" />

-    <ClCompile Include="uloc_tag.c" />

-    <ClCompile Include="ures_cnv.c" />

-    <ClCompile Include="uresbund.cpp" />

-    <ClCompile Include="uresdata.c" />

-    <ClCompile Include="caniter.cpp" />

-    <ClCompile Include="filterednormalizer2.cpp" />

-    <ClCompile Include="normalizer2.cpp" />

-    <ClCompile Include="normalizer2impl.cpp" />

-    <ClCompile Include="normlzr.cpp" />

-    <ClCompile Include="unorm.cpp" />

-    <ClCompile Include="unorm_it.c" />

-    <ClCompile Include="unormcmp.cpp" />

-    <ClCompile Include="bmpset.cpp" />

-    <ClCompile Include="patternprops.cpp" />

-    <ClCompile Include="propname.cpp" />

-    <ClCompile Include="ruleiter.cpp" />

-    <ClCompile Include="ucase.cpp" />

-    <ClCompile Include="uchar.c" />

-    <ClCompile Include="unames.cpp" />

-    <ClCompile Include="unifilt.cpp" />

-    <ClCompile Include="unifunct.cpp" />

-    <ClCompile Include="uniset.cpp" />

-    <ClCompile Include="uniset_closure.cpp" />

-    <ClCompile Include="uniset_props.cpp" />

-    <ClCompile Include="unisetspan.cpp" />

-    <ClCompile Include="uprops.cpp" />

-    <ClCompile Include="usc_impl.c" />

-    <ClCompile Include="uscript.c" />

-    <ClCompile Include="uset.cpp" />

-    <ClCompile Include="uset_props.cpp" />

-    <ClCompile Include="usetiter.cpp" />

-    <ClCompile Include="icuplug.c" />

-    <ClCompile Include="serv.cpp" />

-    <ClCompile Include="servlk.cpp" />

-    <ClCompile Include="servlkf.cpp" />

-    <ClCompile Include="servls.cpp" />

-    <ClCompile Include="servnotf.cpp" />

-    <ClCompile Include="servrbf.cpp" />

-    <ClCompile Include="servslkf.cpp" />

-    <ClCompile Include="usprep.cpp" />

-    <ClCompile Include="appendable.cpp" />

-    <ClCompile Include="bytestream.cpp" />

-    <ClCompile Include="bytestrie.cpp" />

-    <ClCompile Include="bytestriebuilder.cpp" />

-    <ClCompile Include="bytestrieiterator.cpp" />

-    <ClCompile Include="chariter.cpp" />

-    <ClCompile Include="charstr.cpp" />

-    <ClCompile Include="cstring.c" />

-    <ClCompile Include="cwchar.c" />

-    <ClCompile Include="messagepattern.cpp" />

-    <ClCompile Include="schriter.cpp" />

-    <ClCompile Include="stringpiece.cpp" />

-    <ClCompile Include="stringtriebuilder.cpp" />

-    <ClCompile Include="ucasemap.cpp" />

-    <ClCompile Include="ucasemap_titlecase_brkiter.cpp" />

-    <ClCompile Include="ucharstrie.cpp" />

-    <ClCompile Include="ucharstriebuilder.cpp" />

-    <ClCompile Include="ucharstrieiterator.cpp" />

-    <ClCompile Include="uchriter.cpp" />

-    <ClCompile Include="uinvchar.c" />

-    <ClCompile Include="uiter.cpp" />

-    <ClCompile Include="unistr.cpp" />

-    <ClCompile Include="unistr_case.cpp" />

-    <ClCompile Include="unistr_case_locale.cpp" />

-    <ClCompile Include="unistr_cnv.cpp" />

-    <ClCompile Include="unistr_props.cpp" />

-    <ClCompile Include="unistr_titlecase_brkiter.cpp" />

-    <ClCompile Include="ustr_cnv.c" />

-    <ClCompile Include="ustr_titlecase_brkiter.cpp" />

-    <ClCompile Include="ustr_wcs.cpp" />

-    <ClCompile Include="ustrcase.cpp" />

-    <ClCompile Include="ustrcase_locale.cpp" />

-    <ClCompile Include="ustring.cpp" />

-    <ClCompile Include="ustrtrns.cpp" />

-    <ClCompile Include="utext.cpp" />

-    <ClCompile Include="utf_impl.c" />

-    <ClCompile Include="listformatter.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="unicode\ubidi.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="localsvc.h" />

-    <ClInclude Include="msvcres.h" />

-    <ClInclude Include="propname_data.h" />

-    <ClInclude Include="ubidi_props.h" />

-    <ClInclude Include="ubidiimp.h" />

-    <CustomBuild Include="unicode\ushape.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="brkeng.h" />

-    <CustomBuild Include="unicode\brkiter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\dbbi.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="dictbe.h" />

-    <CustomBuild Include="unicode\rbbi.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="rbbidata.h" />

-    <ClInclude Include="rbbinode.h" />

-    <ClInclude Include="rbbirb.h" />

-    <ClInclude Include="rbbirpt.h" />

-    <ClInclude Include="rbbiscan.h" />

-    <ClInclude Include="rbbisetb.h" />

-    <ClInclude Include="rbbitblb.h" />

-    <ClInclude Include="dictionarydata.h" />

-    <CustomBuild Include="unicode\ubrk.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ubidi_props_data.h" />

-    <ClInclude Include="ubrkimpl.h" />

-    <ClInclude Include="ucase_props_data.h" />

-    <ClInclude Include="uchar_props_data.h" />

-    <ClInclude Include="ucol_data.h" />

-    <ClInclude Include="ucol_swp.h" />

-    <ClInclude Include="hash.h" />

-    <ClInclude Include="propsvec.h" />

-    <CustomBuild Include="unicode\strenum.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="uarrsort.h" />

-    <CustomBuild Include="unicode\uenum.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="uelement.h" />

-    <ClInclude Include="uenumimp.h" />

-    <ClInclude Include="uhash.h" />

-    <ClInclude Include="ulist.h" />

-    <ClInclude Include="unicode\enumset.h" />

-    <ClInclude Include="ustrenum.h" />

-    <ClInclude Include="utrie.h" />

-    <ClInclude Include="utrie2.h" />

-    <ClInclude Include="utrie2_impl.h" />

-    <ClInclude Include="utypeinfo.h" />

-    <ClInclude Include="uvector.h" />

-    <ClInclude Include="uvectr32.h" />

-    <ClInclude Include="uvectr64.h" />

-    <ClInclude Include="cpputils.h" />

-    <CustomBuild Include="unicode\docmain.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\errorcode.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\icudataver.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="locmap.h" />

-    <ClInclude Include="mutex.h" />

-    <CustomBuild Include="unicode\platform.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ptypes.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\putil.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="putilimp.h" />

-    <CustomBuild Include="unicode\std_string.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="uassert.h" />

-    <CustomBuild Include="unicode\uconfig.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\umachine.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="umutex.h" />

-    <ClInclude Include="uposixdefs.h" />

-    <CustomBuild Include="unicode\urename.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utrace.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="utracimp.h" />

-    <CustomBuild Include="unicode\utypes.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uvernum.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uversion.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="wintz.h" />

-    <CustomBuild Include="unicode\ucnv.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ucnv_bld.h" />

-    <CustomBuild Include="unicode\ucnv_cb.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ucnv_cnv.h" />

-    <CustomBuild Include="unicode\ucnv_err.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ucnv_ext.h" />

-    <ClInclude Include="ucnv_imp.h" />

-    <ClInclude Include="ucnv_io.h" />

-    <ClInclude Include="ucnvmbcs.h" />

-    <CustomBuild Include="unicode\ucnvsel.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="cmemory.h" />

-    <CustomBuild Include="unicode\localpointer.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uclean.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ucln.h" />

-    <ClInclude Include="ucln_cmn.h" />

-    <ClInclude Include="ucln_imp.h" />

-    <ClInclude Include="ucmndata.h" />

-    <CustomBuild Include="unicode\udata.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="udatamem.h" />

-    <ClInclude Include="udataswp.h" />

-    <ClInclude Include="umapfile.h" />

-    <CustomBuild Include="unicode\uobject.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\dtintrv.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\parseerr.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\parsepos.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\umisc.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ustrfmt.h" />

-    <ClInclude Include="util.h" />

-    <CustomBuild Include="unicode\idna.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="punycode.h" />

-    <CustomBuild Include="unicode\uidna.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="locbased.h" />

-    <CustomBuild Include="unicode\locid.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="locutil.h" />

-    <CustomBuild Include="unicode\resbund.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucat.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uloc.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ulocimp.h" />

-    <CustomBuild Include="unicode\ures.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="uresdata.h" />

-    <ClInclude Include="uresimp.h" />

-    <ClInclude Include="ureslocs.h" />

-    <CustomBuild Include="unicode\caniter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\normalizer2.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="normalizer2impl.h" />

-    <CustomBuild Include="unicode\normlzr.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unorm.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unorm2.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="unorm_it.h" />

-    <ClInclude Include="unormimp.h" />

-    <ClInclude Include="bmpset.h" />

-    <ClInclude Include="messageimpl.h" />

-    <ClInclude Include="patternprops.h" />

-    <ClInclude Include="propname.h" />

-    <ClInclude Include="ruleiter.h" />

-    <CustomBuild Include="unicode\symtable.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ucase.h" />

-    <CustomBuild Include="unicode\uchar.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unifilt.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unifunct.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unimatch.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uniset.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="unisetspan.h" />

-    <ClInclude Include="uprops.h" />

-    <ClInclude Include="usc_impl.h" />

-    <CustomBuild Include="unicode\uscript.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uset.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="uset_imp.h" />

-    <CustomBuild Include="unicode\usetiter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\icuplug.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="icuplugimp.h" />

-    <ClInclude Include="serv.h" />

-    <ClInclude Include="servloc.h" />

-    <ClInclude Include="servnotf.h" />

-    <ClInclude Include="sprpimpl.h" />

-    <CustomBuild Include="unicode\usprep.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\appendable.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\bytestream.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\bytestrie.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\bytestriebuilder.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\chariter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="charstr.h" />

-    <ClInclude Include="cstring.h" />

-    <ClInclude Include="cwchar.h" />

-    <CustomBuild Include="unicode\messagepattern.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\rep.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\schriter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\stringpiece.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\stringtriebuilder.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucasemap.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucharstrie.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucharstriebuilder.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uchriter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="uinvchar.h" />

-    <CustomBuild Include="unicode\uiter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unistr.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\urep.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <ClInclude Include="ustr_cnv.h" />

-    <ClInclude Include="ustr_imp.h" />

-    <CustomBuild Include="unicode\ustring.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ustringtrie.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utext.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf16.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf32.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf8.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf_old.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="unicode\listformatter.h">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>

-    </CustomBuild>

-  </ItemGroup>

-  <ItemGroup>

-    <ResourceCompile Include="common.rc" />

-  </ItemGroup>

-  <ItemGroup>

-    <ProjectReference Include="..\stubdata\stubdata.vcxproj">

-      <Project>{203ec78a-0531-43f0-a636-285439bde025}</Project>

-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>

-    </ProjectReference>

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/mozjs/intl/icu/source/common/common.vcxproj.filters b/src/third_party/mozjs/intl/icu/source/common/common.vcxproj.filters
deleted file mode 100644
index 492b053..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/common.vcxproj.filters
+++ /dev/null
@@ -1,1051 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="bidi">

-      <UniqueIdentifier>{8049805d-3f8b-4731-ac8a-aa19b3cbea45}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="break iteration">

-      <UniqueIdentifier>{7668dce2-7846-4b48-8bd4-4ef781671b62}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="collation">

-      <UniqueIdentifier>{f08dc85c-73ea-47b5-a867-b67589e6bebf}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="collections">

-      <UniqueIdentifier>{51edbf4b-fe36-401e-9571-0472d9dae727}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="configuration">

-      <UniqueIdentifier>{3fd9d1ea-6efc-4768-a43d-811379162322}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="conversion">

-      <UniqueIdentifier>{f74f43ea-8ea9-49a9-a097-e2aa5a409368}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="data &amp; memory">

-      <UniqueIdentifier>{c7b856da-4f50-42c5-a741-8995df25dc6b}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="formatting">

-      <UniqueIdentifier>{c76cfce3-cfe6-4de0-aa37-44c599377e2f}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="idna">

-      <UniqueIdentifier>{9abf6a02-9db0-4ecd-a8d9-bbb28073a424}</UniqueIdentifier>

-      <Extensions>*.c,*.h</Extensions>

-    </Filter>

-    <Filter Include="locales &amp; resources">

-      <UniqueIdentifier>{b481ca81-7bc8-4399-a220-27fc29a7b74d}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="normalization">

-      <UniqueIdentifier>{923074b3-0112-4faf-b8c7-59feb85a0835}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="properties &amp; sets">

-      <UniqueIdentifier>{17948745-0376-4851-bf12-7dabf94622e7}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="registration">

-      <UniqueIdentifier>{b32b9445-b6dc-4800-94a6-28641e586cd4}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="sprep">

-      <UniqueIdentifier>{ea285df7-8e35-4b10-ae2a-86cb32c0d477}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="strings">

-      <UniqueIdentifier>{2c52192a-7b17-4c3b-998e-ca025063bd3c}</UniqueIdentifier>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="ubidi.c">

-      <Filter>bidi</Filter>

-    </ClCompile>

-    <ClCompile Include="ubidi_props.c">

-      <Filter>bidi</Filter>

-    </ClCompile>

-    <ClCompile Include="ubidiln.c">

-      <Filter>bidi</Filter>

-    </ClCompile>

-    <ClCompile Include="ubidiwrt.c">

-      <Filter>bidi</Filter>

-    </ClCompile>

-    <ClCompile Include="ushape.cpp">

-      <Filter>bidi</Filter>

-    </ClCompile>

-    <ClCompile Include="brkeng.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="brkiter.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="dictbe.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbi.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbidata.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbinode.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbirb.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbiscan.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbisetb.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbistbl.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="rbbitblb.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="ubrk.cpp">

-      <Filter>break iteration</Filter>

-    </ClCompile>

-    <ClCompile Include="ucol_swp.cpp">

-      <Filter>collation</Filter>

-    </ClCompile>

-    <ClCompile Include="propsvec.c">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uarrsort.c">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uenum.c">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uhash.c">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uhash_us.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="ulist.c">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="ustack.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="ustrenum.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="utrie.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="utrie2.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="utrie2_builder.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uvector.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uvectr32.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="uvectr64.cpp">

-      <Filter>collections</Filter>

-    </ClCompile>

-    <ClCompile Include="errorcode.cpp">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="icudataver.c">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="locmap.c">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="mutex.cpp">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="putil.cpp">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="umath.c">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="umutex.cpp">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="utrace.c">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="utypes.c">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="wintz.c">

-      <Filter>configuration</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv2022.cpp">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_bld.cpp">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_cb.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_cnv.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_err.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_ext.cpp">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_io.cpp">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_lmb.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_set.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_u16.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_u32.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_u7.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnv_u8.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvbocu.cpp">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvdisp.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvhz.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvisci.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvlat1.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvmbcs.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvscsu.c">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="ucnvsel.cpp">

-      <Filter>conversion</Filter>

-    </ClCompile>

-    <ClCompile Include="cmemory.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="ucln_cmn.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="ucmndata.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="udata.cpp">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="udatamem.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="udataswp.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="uinit.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="umapfile.c">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="uobject.cpp">

-      <Filter>data &amp; memory</Filter>

-    </ClCompile>

-    <ClCompile Include="dtintrv.cpp">

-      <Filter>formatting</Filter>

-    </ClCompile>

-    <ClCompile Include="parsepos.cpp">

-      <Filter>formatting</Filter>

-    </ClCompile>

-    <ClCompile Include="ustrfmt.c">

-      <Filter>formatting</Filter>

-    </ClCompile>

-    <ClCompile Include="util.cpp">

-      <Filter>formatting</Filter>

-    </ClCompile>

-    <ClCompile Include="util_props.cpp">

-      <Filter>formatting</Filter>

-    </ClCompile>

-    <ClCompile Include="punycode.cpp">

-      <Filter>idna</Filter>

-    </ClCompile>

-    <ClCompile Include="uidna.cpp">

-      <Filter>idna</Filter>

-    </ClCompile>

-    <ClCompile Include="uts46.cpp">

-      <Filter>idna</Filter>

-    </ClCompile>

-    <ClCompile Include="locavailable.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="locbased.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="locdispnames.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="locid.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="loclikely.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="locresdata.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="locutil.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="resbund.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="resbund_cnv.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="ucat.c">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="uloc.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="uloc_tag.c">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="ures_cnv.c">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="uresbund.cpp">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="uresdata.c">

-      <Filter>locales &amp; resources</Filter>

-    </ClCompile>

-    <ClCompile Include="caniter.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="filterednormalizer2.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="normalizer2.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="normalizer2impl.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="normlzr.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="unorm.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="unorm_it.c">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="unormcmp.cpp">

-      <Filter>normalization</Filter>

-    </ClCompile>

-    <ClCompile Include="bmpset.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="propname.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="ruleiter.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="ucase.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uchar.c">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="unames.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="unifilt.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="unifunct.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uniset.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uniset_closure.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uniset_props.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="unisetspan.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uprops.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="usc_impl.c">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uscript.c">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uset.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="uset_props.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="usetiter.cpp">

-      <Filter>properties &amp; sets</Filter>

-    </ClCompile>

-    <ClCompile Include="icuplug.c">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="serv.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="servlk.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="servlkf.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="servls.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="servnotf.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="servrbf.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="servslkf.cpp">

-      <Filter>registration</Filter>

-    </ClCompile>

-    <ClCompile Include="usprep.cpp">

-      <Filter>sprep</Filter>

-    </ClCompile>

-    <ClCompile Include="bytestream.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="chariter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="charstr.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="cstring.c">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="cwchar.c">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="schriter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="stringpiece.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ucasemap.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ucasemap_titlecase_brkiter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="uchriter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="uinvchar.c">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="uiter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="unistr.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="unistr_case.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="unistr_case_locale.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="unistr_cnv.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="unistr_props.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="unistr_titlecase_brkiter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustr_cnv.c">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustr_titlecase_brkiter.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustr_wcs.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustrcase.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustrcase_locale.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustring.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="ustrtrns.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="utext.cpp">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="utf_impl.c">

-      <Filter>strings</Filter>

-    </ClCompile>

-    <ClCompile Include="dictionarydata.cpp" />

-    <ClCompile Include="ucnv_ct.c" />

-    <ClCompile Include="patternprops.cpp" />

-    <ClCompile Include="appendable.cpp" />

-    <ClCompile Include="bytestrie.cpp" />

-    <ClCompile Include="bytestriebuilder.cpp" />

-    <ClCompile Include="bytestrieiterator.cpp" />

-    <ClCompile Include="messagepattern.cpp" />

-    <ClCompile Include="stringtriebuilder.cpp" />

-    <ClCompile Include="ucharstrie.cpp" />

-    <ClCompile Include="ucharstriebuilder.cpp" />

-    <ClCompile Include="ucharstrieiterator.cpp" />

-    <ClCompile Include="listformatter.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="ubidi_props.h">

-      <Filter>bidi</Filter>

-    </ClInclude>

-    <ClInclude Include="ubidiimp.h">

-      <Filter>bidi</Filter>

-    </ClInclude>

-    <ClInclude Include="brkeng.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="dictbe.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbidata.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbinode.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbirb.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbirpt.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbiscan.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbisetb.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="rbbitblb.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="ubrkimpl.h">

-      <Filter>break iteration</Filter>

-    </ClInclude>

-    <ClInclude Include="ucol_data.h">

-      <Filter>collation</Filter>

-    </ClInclude>

-    <ClInclude Include="ucol_swp.h">

-      <Filter>collation</Filter>

-    </ClInclude>

-    <ClInclude Include="hash.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="propsvec.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uarrsort.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uelement.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uenumimp.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uhash.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="ulist.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="ustrenum.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="utrie.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="utrie2.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="utrie2_impl.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uvector.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uvectr32.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="uvectr64.h">

-      <Filter>collections</Filter>

-    </ClInclude>

-    <ClInclude Include="cpputils.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="locmap.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="mutex.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="putilimp.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="uassert.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="umutex.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="uposixdefs.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="utracimp.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="wintz.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="ucnv_bld.h">

-      <Filter>conversion</Filter>

-    </ClInclude>

-    <ClInclude Include="ucnv_cnv.h">

-      <Filter>conversion</Filter>

-    </ClInclude>

-    <ClInclude Include="ucnv_ext.h">

-      <Filter>conversion</Filter>

-    </ClInclude>

-    <ClInclude Include="ucnv_imp.h">

-      <Filter>conversion</Filter>

-    </ClInclude>

-    <ClInclude Include="ucnv_io.h">

-      <Filter>conversion</Filter>

-    </ClInclude>

-    <ClInclude Include="ucnvmbcs.h">

-      <Filter>conversion</Filter>

-    </ClInclude>

-    <ClInclude Include="cmemory.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="ucln.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="ucln_cmn.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="ucln_imp.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="ucmndata.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="udatamem.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="udataswp.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="umapfile.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-    <ClInclude Include="ustrfmt.h">

-      <Filter>formatting</Filter>

-    </ClInclude>

-    <ClInclude Include="util.h">

-      <Filter>formatting</Filter>

-    </ClInclude>

-    <ClInclude Include="punycode.h">

-      <Filter>idna</Filter>

-    </ClInclude>

-    <ClInclude Include="locbased.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="locutil.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="ulocimp.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="uresdata.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="uresimp.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="ureslocs.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="normalizer2impl.h">

-      <Filter>normalization</Filter>

-    </ClInclude>

-    <ClInclude Include="unorm_it.h">

-      <Filter>normalization</Filter>

-    </ClInclude>

-    <ClInclude Include="unormimp.h">

-      <Filter>normalization</Filter>

-    </ClInclude>

-    <ClInclude Include="bmpset.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="propname.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="ruleiter.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="ucase.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="unisetspan.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="uprops.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="usc_impl.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="uset_imp.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="icuplugimp.h">

-      <Filter>registration</Filter>

-    </ClInclude>

-    <ClInclude Include="serv.h">

-      <Filter>registration</Filter>

-    </ClInclude>

-    <ClInclude Include="servloc.h">

-      <Filter>registration</Filter>

-    </ClInclude>

-    <ClInclude Include="servnotf.h">

-      <Filter>registration</Filter>

-    </ClInclude>

-    <ClInclude Include="sprpimpl.h">

-      <Filter>sprep</Filter>

-    </ClInclude>

-    <ClInclude Include="charstr.h">

-      <Filter>strings</Filter>

-    </ClInclude>

-    <ClInclude Include="cstring.h">

-      <Filter>strings</Filter>

-    </ClInclude>

-    <ClInclude Include="cwchar.h">

-      <Filter>strings</Filter>

-    </ClInclude>

-    <ClInclude Include="uinvchar.h">

-      <Filter>strings</Filter>

-    </ClInclude>

-    <ClInclude Include="ustr_cnv.h">

-      <Filter>strings</Filter>

-    </ClInclude>

-    <ClInclude Include="ustr_imp.h">

-      <Filter>strings</Filter>

-    </ClInclude>

-    <ClInclude Include="dictionarydata.h" />

-    <ClInclude Include="messageimpl.h" />

-    <ClInclude Include="patternprops.h" />

-    <ClInclude Include="utypeinfo.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="localsvc.h">

-      <Filter>locales &amp; resources</Filter>

-    </ClInclude>

-    <ClInclude Include="msvcres.h">

-      <Filter>configuration</Filter>

-    </ClInclude>

-    <ClInclude Include="propname_data.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="ubidi_props_data.h">

-      <Filter>bidi</Filter>

-    </ClInclude>

-    <ClInclude Include="ucase_props_data.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="uchar_props_data.h">

-      <Filter>properties &amp; sets</Filter>

-    </ClInclude>

-    <ClInclude Include="unicode\enumset.h">

-      <Filter>data &amp; memory</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <ResourceCompile Include="common.rc">

-      <Filter>configuration</Filter>

-    </ResourceCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="unicode\ubidi.h">

-      <Filter>bidi</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ushape.h">

-      <Filter>bidi</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\brkiter.h">

-      <Filter>break iteration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\dbbi.h">

-      <Filter>break iteration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\rbbi.h">

-      <Filter>break iteration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ubrk.h">

-      <Filter>break iteration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\strenum.h">

-      <Filter>collections</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uenum.h">

-      <Filter>collections</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\docmain.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\errorcode.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\icudataver.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\platform.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ptypes.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\putil.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\std_string.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uconfig.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\umachine.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\urename.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utrace.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utypes.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uvernum.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uversion.h">

-      <Filter>configuration</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucnv.h">

-      <Filter>conversion</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucnv_cb.h">

-      <Filter>conversion</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucnv_err.h">

-      <Filter>conversion</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucnvsel.h">

-      <Filter>conversion</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\localpointer.h">

-      <Filter>data &amp; memory</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uclean.h">

-      <Filter>data &amp; memory</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\udata.h">

-      <Filter>data &amp; memory</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uobject.h">

-      <Filter>data &amp; memory</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\dtintrv.h">

-      <Filter>formatting</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\parseerr.h">

-      <Filter>formatting</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\parsepos.h">

-      <Filter>formatting</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\umisc.h">

-      <Filter>formatting</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\idna.h">

-      <Filter>idna</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uidna.h">

-      <Filter>idna</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\locid.h">

-      <Filter>locales &amp; resources</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\resbund.h">

-      <Filter>locales &amp; resources</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucat.h">

-      <Filter>locales &amp; resources</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uloc.h">

-      <Filter>locales &amp; resources</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ures.h">

-      <Filter>locales &amp; resources</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\caniter.h">

-      <Filter>normalization</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\normalizer2.h">

-      <Filter>normalization</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\normlzr.h">

-      <Filter>normalization</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unorm.h">

-      <Filter>normalization</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unorm2.h">

-      <Filter>normalization</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\symtable.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uchar.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unifilt.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unifunct.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unimatch.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uniset.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uscript.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uset.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\usetiter.h">

-      <Filter>properties &amp; sets</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\usprep.h">

-      <Filter>sprep</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\bytestream.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\chariter.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\rep.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\schriter.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\stringpiece.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ucasemap.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uchriter.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\uiter.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\unistr.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\urep.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\ustring.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utext.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf16.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf32.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf8.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\utf_old.h">

-      <Filter>strings</Filter>

-    </CustomBuild>

-    <CustomBuild Include="unicode\icuplug.h" />

-    <CustomBuild Include="unicode\appendable.h" />

-    <CustomBuild Include="unicode\bytestrie.h" />

-    <CustomBuild Include="unicode\bytestriebuilder.h" />

-    <CustomBuild Include="unicode\messagepattern.h" />

-    <CustomBuild Include="unicode\stringtriebuilder.h" />

-    <CustomBuild Include="unicode\ucharstrie.h" />

-    <CustomBuild Include="unicode\ucharstriebuilder.h" />

-    <CustomBuild Include="unicode\ustringtrie.h" />

-    <CustomBuild Include="unicode\listformatter.h" />

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/mozjs/intl/icu/source/common/cpputils.h b/src/third_party/mozjs/intl/icu/source/common/cpputils.h
deleted file mode 100644
index b2e0cbc..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cpputils.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  cpputils.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*/
-
-#ifndef CPPUTILS_H
-#define CPPUTILS_H
-
-#include "unicode/utypes.h"
-#include "unicode/unistr.h"
-#include "cmemory.h"
-
-/*==========================================================================*/
-/* Array copy utility functions */
-/*==========================================================================*/
-
-static
-inline void uprv_arrayCopy(const double* src, double* dst, int32_t count)
-{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const double* src, int32_t srcStart,
-              double* dst, int32_t dstStart, int32_t count)
-{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const int8_t* src, int8_t* dst, int32_t count)
-    { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const int8_t* src, int32_t srcStart,
-              int8_t* dst, int32_t dstStart, int32_t count)
-{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const int16_t* src, int16_t* dst, int32_t count)
-{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const int16_t* src, int32_t srcStart,
-              int16_t* dst, int32_t dstStart, int32_t count)
-{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const int32_t* src, int32_t* dst, int32_t count)
-{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
-
-static
-inline void uprv_arrayCopy(const int32_t* src, int32_t srcStart,
-              int32_t* dst, int32_t dstStart, int32_t count)
-{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
-
-static
-inline void
-uprv_arrayCopy(const UChar *src, int32_t srcStart,
-        UChar *dst, int32_t dstStart, int32_t count)
-{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
-
-/**
- * Copy an array of UnicodeString OBJECTS (not pointers).
- * @internal
- */
-static inline void
-uprv_arrayCopy(const icu::UnicodeString *src, icu::UnicodeString *dst, int32_t count)
-{ while(count-- > 0) *dst++ = *src++; }
-
-/**
- * Copy an array of UnicodeString OBJECTS (not pointers).
- * @internal
- */
-static inline void
-uprv_arrayCopy(const icu::UnicodeString *src, int32_t srcStart,
-               icu::UnicodeString *dst, int32_t dstStart, int32_t count)
-{ uprv_arrayCopy(src+srcStart, dst+dstStart, count); }
-
-/**
- * Checks that the string is readable and writable.
- * Sets U_ILLEGAL_ARGUMENT_ERROR if the string isBogus() or has an open getBuffer().
- */
-inline void
-uprv_checkCanGetBuffer(const icu::UnicodeString &s, UErrorCode &errorCode) {
-    if(U_SUCCESS(errorCode) && s.isBogus()) {
-        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-    }
-}
-
-#endif /* _CPPUTILS */
diff --git a/src/third_party/mozjs/intl/icu/source/common/cstring.c b/src/third_party/mozjs/intl/icu/source/common/cstring.c
deleted file mode 100644
index 3af959e..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cstring.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File CSTRING.C
-*
-* @author       Helena Shih
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   6/18/98     hshih       Created
-*   09/08/98    stephen     Added include for ctype, for Mac Port
-*   11/15/99    helena      Integrated S/390 IEEE changes. 
-******************************************************************************
-*/
-
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "uassert.h"
-
-/*
- * We hardcode case conversion for invariant characters to match our expectation
- * and the compiler execution charset.
- * This prevents problems on systems
- * - with non-default casing behavior, like Turkish system locales where
- *   tolower('I') maps to dotless i and toupper('i') maps to dotted I
- * - where there are no lowercase Latin characters at all, or using different
- *   codes (some old EBCDIC codepages)
- *
- * This works because the compiler usually runs on a platform where the execution
- * charset includes all of the invariant characters at their expected
- * code positions, so that the char * string literals in ICU code match
- * the char literals here.
- *
- * Note that the set of lowercase Latin letters is discontiguous in EBCDIC
- * and the set of uppercase Latin letters is discontiguous as well.
- */
-
-U_CAPI UBool U_EXPORT2
-uprv_isASCIILetter(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-    return
-        ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') ||
-        ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z');
-#else
-    return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
-#endif
-}
-
-U_CAPI char U_EXPORT2
-uprv_toupper(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-    if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) {
-        c=(char)(c+('A'-'a'));
-    }
-#else
-    if('a'<=c && c<='z') {
-        c=(char)(c+('A'-'a'));
-    }
-#endif
-    return c;
-}
-
-
-#if 0
-/*
- * Commented out because cstring.h defines uprv_tolower() to be
- * the same as either uprv_asciitolower() or uprv_ebcdictolower()
- * to reduce the amount of code to cover with tests.
- *
- * Note that this uprv_tolower() definition is likely to work for most
- * charset families, not just ASCII and EBCDIC, because its #else branch
- * is written generically.
- */
-U_CAPI char U_EXPORT2
-uprv_tolower(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-    if(('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z')) {
-        c=(char)(c+('a'-'A'));
-    }
-#else
-    if('A'<=c && c<='Z') {
-        c=(char)(c+('a'-'A'));
-    }
-#endif
-    return c;
-}
-#endif
-
-U_CAPI char U_EXPORT2
-uprv_asciitolower(char c) {
-    if(0x41<=c && c<=0x5a) {
-        c=(char)(c+0x20);
-    }
-    return c;
-}
-
-U_CAPI char U_EXPORT2
-uprv_ebcdictolower(char c) {
-    if( (0xc1<=(uint8_t)c && (uint8_t)c<=0xc9) ||
-        (0xd1<=(uint8_t)c && (uint8_t)c<=0xd9) ||
-        (0xe2<=(uint8_t)c && (uint8_t)c<=0xe9)
-    ) {
-        c=(char)(c-0x40);
-    }
-    return c;
-}
-
-
-U_CAPI char* U_EXPORT2
-T_CString_toLowerCase(char* str)
-{
-    char* origPtr = str;
-
-    if (str) {
-        do
-            *str = (char)uprv_tolower(*str);
-        while (*(str++));
-    }
-
-    return origPtr;
-}
-
-U_CAPI char* U_EXPORT2
-T_CString_toUpperCase(char* str)
-{
-    char* origPtr = str;
-
-    if (str) {
-        do
-            *str = (char)uprv_toupper(*str);
-        while (*(str++));
-    }
-
-    return origPtr;
-}
-
-/*
- * Takes a int32_t and fills in  a char* string with that number "radix"-based.
- * Does not handle negative values (makes an empty string for them).
- * Writes at most 12 chars ("-2147483647" plus NUL).
- * Returns the length of the string (not including the NUL).
- */
-U_CAPI int32_t U_EXPORT2
-T_CString_integerToString(char* buffer, int32_t v, int32_t radix)
-{
-    char      tbuf[30];
-    int32_t   tbx    = sizeof(tbuf);
-    uint8_t   digit;
-    int32_t   length = 0;
-    uint32_t  uval;
-    
-    U_ASSERT(radix>=2 && radix<=16);
-    uval = (uint32_t) v;
-    if(v<0 && radix == 10) {
-        /* Only in base 10 do we conside numbers to be signed. */
-        uval = (uint32_t)(-v); 
-        buffer[length++] = '-';
-    }
-    
-    tbx = sizeof(tbuf)-1;
-    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
-    do {
-        digit = (uint8_t)(uval % radix);
-        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
-        uval  = uval / radix;
-    } while (uval != 0);
-    
-    /* copy converted number into user buffer  */
-    uprv_strcpy(buffer+length, tbuf+tbx);
-    length += sizeof(tbuf) - tbx -1;
-    return length;
-}
-
-
-
-/*
- * Takes a int64_t and fills in  a char* string with that number "radix"-based.
- * Writes at most 21: chars ("-9223372036854775807" plus NUL).
- * Returns the length of the string, not including the terminating NULL.
- */
-U_CAPI int32_t U_EXPORT2
-T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix)
-{
-    char      tbuf[30];
-    int32_t   tbx    = sizeof(tbuf);
-    uint8_t   digit;
-    int32_t   length = 0;
-    uint64_t  uval;
-    
-    U_ASSERT(radix>=2 && radix<=16);
-    uval = (uint64_t) v;
-    if(v<0 && radix == 10) {
-        /* Only in base 10 do we conside numbers to be signed. */
-        uval = (uint64_t)(-v); 
-        buffer[length++] = '-';
-    }
-    
-    tbx = sizeof(tbuf)-1;
-    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
-    do {
-        digit = (uint8_t)(uval % radix);
-        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
-        uval  = uval / radix;
-    } while (uval != 0);
-    
-    /* copy converted number into user buffer  */
-    uprv_strcpy(buffer+length, tbuf+tbx);
-    length += sizeof(tbuf) - tbx -1;
-    return length;
-}
-
-
-U_CAPI int32_t U_EXPORT2
-T_CString_stringToInteger(const char *integerString, int32_t radix)
-{
-    char *end;
-    return uprv_strtoul(integerString, &end, radix);
-
-}
-
-U_CAPI int U_EXPORT2
-uprv_stricmp(const char *str1, const char *str2) {
-    if(str1==NULL) {
-        if(str2==NULL) {
-            return 0;
-        } else {
-            return -1;
-        }
-    } else if(str2==NULL) {
-        return 1;
-    } else {
-        /* compare non-NULL strings lexically with lowercase */
-        int rc;
-        unsigned char c1, c2;
-
-        for(;;) {
-            c1=(unsigned char)*str1;
-            c2=(unsigned char)*str2;
-            if(c1==0) {
-                if(c2==0) {
-                    return 0;
-                } else {
-                    return -1;
-                }
-            } else if(c2==0) {
-                return 1;
-            } else {
-                /* compare non-zero characters with lowercase */
-                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
-                if(rc!=0) {
-                    return rc;
-                }
-            }
-            ++str1;
-            ++str2;
-        }
-    }
-}
-
-U_CAPI int U_EXPORT2
-uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
-    if(str1==NULL) {
-        if(str2==NULL) {
-            return 0;
-        } else {
-            return -1;
-        }
-    } else if(str2==NULL) {
-        return 1;
-    } else {
-        /* compare non-NULL strings lexically with lowercase */
-        int rc;
-        unsigned char c1, c2;
-
-        for(; n--;) {
-            c1=(unsigned char)*str1;
-            c2=(unsigned char)*str2;
-            if(c1==0) {
-                if(c2==0) {
-                    return 0;
-                } else {
-                    return -1;
-                }
-            } else if(c2==0) {
-                return 1;
-            } else {
-                /* compare non-zero characters with lowercase */
-                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
-                if(rc!=0) {
-                    return rc;
-                }
-            }
-            ++str1;
-            ++str2;
-        }
-    }
-
-    return 0;
-}
-
-U_CAPI char* U_EXPORT2
-uprv_strdup(const char *src) {
-    size_t len = uprv_strlen(src) + 1;
-    char *dup = (char *) uprv_malloc(len);
-
-    if (dup) {
-        uprv_memcpy(dup, src, len);
-    }
-
-    return dup;
-}
-
-U_CAPI char* U_EXPORT2
-uprv_strndup(const char *src, int32_t n) {
-    char *dup;
-
-    if(n < 0) {
-        dup = uprv_strdup(src);
-    } else {
-        dup = (char*)uprv_malloc(n+1);
-        if (dup) { 
-            uprv_memcpy(dup, src, n);
-            dup[n] = 0;
-        }
-    }
-
-    return dup;
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/cstring.h b/src/third_party/mozjs/intl/icu/source/common/cstring.h
deleted file mode 100644
index 64b68ff..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cstring.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File CSTRING.H
-*
-* Contains CString interface
-*
-* @author       Helena Shih
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   6/17/98     hshih       Created.
-*  05/03/99     stephen     Changed from functions to macros.
-*  06/14/99     stephen     Added icu_strncat, icu_strncmp, icu_tolower
-*
-******************************************************************************
-*/
-
-#ifndef CSTRING_H
-#define CSTRING_H 1
-
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
-#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
-#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
-#define uprv_strcat(dst, src) U_STANDARD_CPP_NAMESPACE strcat(dst, src)
-#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
-#define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c)
-#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
-
-#if U_DEBUG
-
-#define uprv_strncpy(dst, src, size) ( \
-    uprv_checkValidMemory(src, 1), \
-    U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size))
-#define uprv_strncmp(s1, s2, n) ( \
-    uprv_checkValidMemory(s1, 1), \
-    uprv_checkValidMemory(s2, 1), \
-    U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n))
-#define uprv_strncat(dst, src, n) ( \
-    uprv_checkValidMemory(src, 1), \
-    U_STANDARD_CPP_NAMESPACE strncat(dst, src, n))
-
-#else
-
-#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
-#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
-#define uprv_strncat(dst, src, n) U_STANDARD_CPP_NAMESPACE strncat(dst, src, n)
-
-#endif  /* U_DEBUG */
-
-/**
- * Is c an ASCII-repertoire letter a-z or A-Z?
- * Note: The implementation is specific to whether ICU is compiled for
- * an ASCII-based or EBCDIC-based machine. There just does not seem to be a better name for this.
- */
-U_CAPI UBool U_EXPORT2
-uprv_isASCIILetter(char c);
-
-U_CAPI char U_EXPORT2
-uprv_toupper(char c);
-
-
-U_CAPI char U_EXPORT2
-uprv_asciitolower(char c);
-
-U_CAPI char U_EXPORT2
-uprv_ebcdictolower(char c);
-
-#if U_CHARSET_FAMILY==U_ASCII_FAMILY
-#   define uprv_tolower uprv_asciitolower
-#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-#   define uprv_tolower uprv_ebcdictolower
-#else
-#   error U_CHARSET_FAMILY is not valid
-#endif
-
-#define uprv_strtod(source, end) U_STANDARD_CPP_NAMESPACE strtod(source, end)
-#define uprv_strtoul(str, end, base) U_STANDARD_CPP_NAMESPACE strtoul(str, end, base)
-#define uprv_strtol(str, end, base) U_STANDARD_CPP_NAMESPACE strtol(str, end, base)
-
-/* Conversion from a digit to the character with radix base from 2-19 */
-/* May need to use U_UPPER_ORDINAL*/
-#define T_CString_itosOffset(a) ((a)<=9?('0'+(a)):('A'+(a)-10))
-
-U_CAPI char* U_EXPORT2
-uprv_strdup(const char *src);
-
-/**
- * uprv_malloc n+1 bytes, and copy n bytes from src into the new string.
- * Terminate with a null at offset n.   If n is -1, works like uprv_strdup
- * @param src
- * @param n length of the input string, not including null.
- * @return new string (owned by caller, use uprv_free to free).
- * @internal
- */
-U_CAPI char* U_EXPORT2
-uprv_strndup(const char *src, int32_t n);
-
-U_CAPI char* U_EXPORT2
-T_CString_toLowerCase(char* str);
-
-U_CAPI char* U_EXPORT2
-T_CString_toUpperCase(char* str);
-
-U_CAPI int32_t U_EXPORT2
-T_CString_integerToString(char *buffer, int32_t n, int32_t radix);
-
-U_CAPI int32_t U_EXPORT2
-T_CString_int64ToString(char *buffer, int64_t n, uint32_t radix);
-
-U_CAPI int32_t U_EXPORT2
-T_CString_stringToInteger(const char *integerString, int32_t radix);
-
-/**
- * Case-insensitive, language-independent string comparison
- * limited to the ASCII character repertoire.
- */
-U_CAPI int U_EXPORT2
-uprv_stricmp(const char *str1, const char *str2);
-
-/**
- * Case-insensitive, language-independent string comparison
- * limited to the ASCII character repertoire.
- */
-U_CAPI int U_EXPORT2
-uprv_strnicmp(const char *str1, const char *str2, uint32_t n);
-
-#endif /* ! CSTRING_H */
diff --git a/src/third_party/mozjs/intl/icu/source/common/cwchar.c b/src/third_party/mozjs/intl/icu/source/common/cwchar.c
deleted file mode 100644
index 78bb8c5..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cwchar.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*  
-******************************************************************************
-*
-*   Copyright (C) 2001, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  cwchar.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2001may25
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !U_HAVE_WCSCPY
-
-#include "cwchar.h"
-
-U_CAPI wchar_t *uprv_wcscat(wchar_t *dst, const wchar_t *src) {
-    wchar_t *start=dst;
-    while(*dst!=0) {
-        ++dst;
-    }
-    while((*dst=*src)!=0) {
-        ++dst;
-        ++src;
-    }
-    return start;
-}
-
-U_CAPI wchar_t *uprv_wcscpy(wchar_t *dst, const wchar_t *src) {
-    wchar_t *start=dst;
-    while((*dst=*src)!=0) {
-        ++dst;
-        ++src;
-    }
-    return start;
-}
-
-U_CAPI size_t uprv_wcslen(const wchar_t *src) {
-    const wchar_t *start=src;
-    while(*src!=0) {
-        ++src;
-    }
-    return src-start;
-}
-
-#endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/cwchar.h b/src/third_party/mozjs/intl/icu/source/common/cwchar.h
deleted file mode 100644
index 2ab36c0..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/cwchar.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*  
-******************************************************************************
-*
-*   Copyright (C) 2001, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  cwchar.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2001may25
-*   created by: Markus W. Scherer
-*
-*   This file contains ICU-internal definitions of wchar_t operations.
-*   These definitions were moved here from cstring.h so that fewer
-*   ICU implementation files include wchar.h.
-*/
-
-#ifndef __CWCHAR_H__
-#define __CWCHAR_H__
-
-#include <string.h>
-#include <stdlib.h>
-#include "unicode/utypes.h"
-
-/* Do this after utypes.h so that we have U_HAVE_WCHAR_H . */
-#if U_HAVE_WCHAR_H
-#   include <wchar.h>
-#endif
-
-/*===========================================================================*/
-/* Wide-character functions                                                  */
-/*===========================================================================*/
-
-/* The following are not available on all systems, defined in wchar.h or string.h. */
-#if U_HAVE_WCSCPY
-#   define uprv_wcscpy wcscpy
-#   define uprv_wcscat wcscat
-#   define uprv_wcslen wcslen
-#else
-U_CAPI wchar_t* U_EXPORT2 
-uprv_wcscpy(wchar_t *dst, const wchar_t *src);
-U_CAPI wchar_t* U_EXPORT2 
-uprv_wcscat(wchar_t *dst, const wchar_t *src);
-U_CAPI size_t U_EXPORT2 
-uprv_wcslen(const wchar_t *src);
-#endif
-
-/* The following are part of the ANSI C standard, defined in stdlib.h . */
-#define uprv_wcstombs(mbstr, wcstr, count) U_STANDARD_CPP_NAMESPACE wcstombs(mbstr, wcstr, count)
-#define uprv_mbstowcs(wcstr, mbstr, count) U_STANDARD_CPP_NAMESPACE mbstowcs(wcstr, mbstr, count)
-
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/dictbe.cpp b/src/third_party/mozjs/intl/icu/source/common/dictbe.cpp
deleted file mode 100644
index 15df9fb..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/dictbe.cpp
+++ /dev/null
@@ -1,942 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2006-2012, International Business Machines Corporation
- * and others. All Rights Reserved.
- *******************************************************************************
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "brkeng.h"
-#include "dictbe.h"
-#include "unicode/uniset.h"
-#include "unicode/chariter.h"
-#include "unicode/ubrk.h"
-#include "uvector.h"
-#include "uassert.h"
-#include "unicode/normlzr.h"
-#include "cmemory.h"
-#include "dictionarydata.h"
-
-U_NAMESPACE_BEGIN
-
-/*
- ******************************************************************
- */
-
-DictionaryBreakEngine::DictionaryBreakEngine(uint32_t breakTypes) {
-    fTypes = breakTypes;
-}
-
-DictionaryBreakEngine::~DictionaryBreakEngine() {
-}
-
-UBool
-DictionaryBreakEngine::handles(UChar32 c, int32_t breakType) const {
-    return (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes)
-            && fSet.contains(c));
-}
-
-int32_t
-DictionaryBreakEngine::findBreaks( UText *text,
-                                 int32_t startPos,
-                                 int32_t endPos,
-                                 UBool reverse,
-                                 int32_t breakType,
-                                 UStack &foundBreaks ) const {
-    int32_t result = 0;
-
-    // Find the span of characters included in the set.
-    int32_t start = (int32_t)utext_getNativeIndex(text);
-    int32_t current;
-    int32_t rangeStart;
-    int32_t rangeEnd;
-    UChar32 c = utext_current32(text);
-    if (reverse) {
-        UBool   isDict = fSet.contains(c);
-        while((current = (int32_t)utext_getNativeIndex(text)) > startPos && isDict) {
-            c = utext_previous32(text);
-            isDict = fSet.contains(c);
-        }
-        rangeStart = (current < startPos) ? startPos : current+(isDict ? 0 : 1);
-        rangeEnd = start + 1;
-    }
-    else {
-        while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) {
-            utext_next32(text);         // TODO:  recast loop for postincrement
-            c = utext_current32(text);
-        }
-        rangeStart = start;
-        rangeEnd = current;
-    }
-    if (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes)) {
-        result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks);
-        utext_setNativeIndex(text, current);
-    }
-    
-    return result;
-}
-
-void
-DictionaryBreakEngine::setCharacters( const UnicodeSet &set ) {
-    fSet = set;
-    // Compact for caching
-    fSet.compact();
-}
-
-/*
- ******************************************************************
- */
-
-
-// Helper class for improving readability of the Thai word break
-// algorithm. The implementation is completely inline.
-
-// List size, limited by the maximum number of words in the dictionary
-// that form a nested sequence.
-#define POSSIBLE_WORD_LIST_MAX 20
-
-class PossibleWord {
-private:
-    // list of word candidate lengths, in increasing length order
-    int32_t   lengths[POSSIBLE_WORD_LIST_MAX];
-    int32_t   count;      // Count of candidates
-    int32_t   prefix;     // The longest match with a dictionary word
-    int32_t   offset;     // Offset in the text of these candidates
-    int       mark;       // The preferred candidate's offset
-    int       current;    // The candidate we're currently looking at
-
-public:
-    PossibleWord();
-    ~PossibleWord();
-  
-    // Fill the list of candidates if needed, select the longest, and return the number found
-    int       candidates( UText *text, DictionaryMatcher *dict, int32_t rangeEnd );
-  
-    // Select the currently marked candidate, point after it in the text, and invalidate self
-    int32_t   acceptMarked( UText *text );
-  
-    // Back up from the current candidate to the next shorter one; return TRUE if that exists
-    // and point the text after it
-    UBool     backUp( UText *text );
-  
-    // Return the longest prefix this candidate location shares with a dictionary word
-    int32_t   longestPrefix();
-  
-    // Mark the current candidate as the one we like
-    void      markCurrent();
-};
-
-inline
-PossibleWord::PossibleWord() {
-    offset = -1;
-}
-
-inline
-PossibleWord::~PossibleWord() {
-}
-
-inline int
-PossibleWord::candidates( UText *text, DictionaryMatcher *dict, int32_t rangeEnd ) {
-    // TODO: If getIndex is too slow, use offset < 0 and add discardAll()
-    int32_t start = (int32_t)utext_getNativeIndex(text);
-    if (start != offset) {
-        offset = start;
-        prefix = dict->matches(text, rangeEnd-start, lengths, count, sizeof(lengths)/sizeof(lengths[0]));
-        // Dictionary leaves text after longest prefix, not longest word. Back up.
-        if (count <= 0) {
-            utext_setNativeIndex(text, start);
-        }
-    }
-    if (count > 0) {
-        utext_setNativeIndex(text, start+lengths[count-1]);
-    }
-    current = count-1;
-    mark = current;
-    return count;
-}
-
-inline int32_t
-PossibleWord::acceptMarked( UText *text ) {
-    utext_setNativeIndex(text, offset + lengths[mark]);
-    return lengths[mark];
-}
-
-inline UBool
-PossibleWord::backUp( UText *text ) {
-    if (current > 0) {
-        utext_setNativeIndex(text, offset + lengths[--current]);
-        return TRUE;
-    }
-    return FALSE;
-}
-
-inline int32_t
-PossibleWord::longestPrefix() {
-    return prefix;
-}
-
-inline void
-PossibleWord::markCurrent() {
-    mark = current;
-}
-
-// How many words in a row are "good enough"?
-#define THAI_LOOKAHEAD 3
-
-// Will not combine a non-word with a preceding dictionary word longer than this
-#define THAI_ROOT_COMBINE_THRESHOLD 3
-
-// Will not combine a non-word that shares at least this much prefix with a
-// dictionary word, with a preceding word
-#define THAI_PREFIX_COMBINE_THRESHOLD 3
-
-// Ellision character
-#define THAI_PAIYANNOI 0x0E2F
-
-// Repeat character
-#define THAI_MAIYAMOK 0x0E46
-
-// Minimum word size
-#define THAI_MIN_WORD 2
-
-// Minimum number of characters for two words
-#define THAI_MIN_WORD_SPAN (THAI_MIN_WORD * 2)
-
-ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status)
-    : DictionaryBreakEngine((1<<UBRK_WORD) | (1<<UBRK_LINE)),
-      fDictionary(adoptDictionary)
-{
-    fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status);
-    if (U_SUCCESS(status)) {
-        setCharacters(fThaiWordSet);
-    }
-    fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]&[:M:]]"), status);
-    fMarkSet.add(0x0020);
-    fEndWordSet = fThaiWordSet;
-    fEndWordSet.remove(0x0E31);             // MAI HAN-AKAT
-    fEndWordSet.remove(0x0E40, 0x0E44);     // SARA E through SARA AI MAIMALAI
-    fBeginWordSet.add(0x0E01, 0x0E2E);      // KO KAI through HO NOKHUK
-    fBeginWordSet.add(0x0E40, 0x0E44);      // SARA E through SARA AI MAIMALAI
-    fSuffixSet.add(THAI_PAIYANNOI);
-    fSuffixSet.add(THAI_MAIYAMOK);
-
-    // Compact for caching.
-    fMarkSet.compact();
-    fEndWordSet.compact();
-    fBeginWordSet.compact();
-    fSuffixSet.compact();
-}
-
-ThaiBreakEngine::~ThaiBreakEngine() {
-    delete fDictionary;
-}
-
-int32_t
-ThaiBreakEngine::divideUpDictionaryRange( UText *text,
-                                                int32_t rangeStart,
-                                                int32_t rangeEnd,
-                                                UStack &foundBreaks ) const {
-    if ((rangeEnd - rangeStart) < THAI_MIN_WORD_SPAN) {
-        return 0;       // Not enough characters for two words
-    }
-
-    uint32_t wordsFound = 0;
-    int32_t wordLength;
-    int32_t current;
-    UErrorCode status = U_ZERO_ERROR;
-    PossibleWord words[THAI_LOOKAHEAD];
-    UChar32 uc;
-    
-    utext_setNativeIndex(text, rangeStart);
-    
-    while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) {
-        wordLength = 0;
-
-        // Look for candidate words at the current position
-        int candidates = words[wordsFound%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
-        
-        // If we found exactly one, use that
-        if (candidates == 1) {
-            wordLength = words[wordsFound % THAI_LOOKAHEAD].acceptMarked(text);
-            wordsFound += 1;
-        }
-        // If there was more than one, see which one can take us forward the most words
-        else if (candidates > 1) {
-            // If we're already at the end of the range, we're done
-            if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
-                goto foundBest;
-            }
-            do {
-                int wordsMatched = 1;
-                if (words[(wordsFound + 1) % THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
-                    if (wordsMatched < 2) {
-                        // Followed by another dictionary word; mark first word as a good candidate
-                        words[wordsFound%THAI_LOOKAHEAD].markCurrent();
-                        wordsMatched = 2;
-                    }
-                    
-                    // If we're already at the end of the range, we're done
-                    if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
-                        goto foundBest;
-                    }
-                    
-                    // See if any of the possible second words is followed by a third word
-                    do {
-                        // If we find a third word, stop right away
-                        if (words[(wordsFound + 2) % THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd)) {
-                            words[wordsFound % THAI_LOOKAHEAD].markCurrent();
-                            goto foundBest;
-                        }
-                    }
-                    while (words[(wordsFound + 1) % THAI_LOOKAHEAD].backUp(text));
-                }
-            }
-            while (words[wordsFound % THAI_LOOKAHEAD].backUp(text));
-foundBest:
-            wordLength = words[wordsFound % THAI_LOOKAHEAD].acceptMarked(text);
-            wordsFound += 1;
-        }
-        
-        // We come here after having either found a word or not. We look ahead to the
-        // next word. If it's not a dictionary word, we will combine it withe the word we
-        // just found (if there is one), but only if the preceding word does not exceed
-        // the threshold.
-        // The text iterator should now be positioned at the end of the word we found.
-        if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength < THAI_ROOT_COMBINE_THRESHOLD) {
-            // if it is a dictionary word, do nothing. If it isn't, then if there is
-            // no preceding word, or the non-word shares less than the minimum threshold
-            // of characters with a dictionary word, then scan to resynchronize
-            if (words[wordsFound % THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0
-                  && (wordLength == 0
-                      || words[wordsFound%THAI_LOOKAHEAD].longestPrefix() < THAI_PREFIX_COMBINE_THRESHOLD)) {
-                // Look for a plausible word boundary
-                //TODO: This section will need a rework for UText.
-                int32_t remaining = rangeEnd - (current+wordLength);
-                UChar32 pc = utext_current32(text);
-                int32_t chars = 0;
-                for (;;) {
-                    utext_next32(text);
-                    uc = utext_current32(text);
-                    // TODO: Here we're counting on the fact that the SA languages are all
-                    // in the BMP. This should get fixed with the UText rework.
-                    chars += 1;
-                    if (--remaining <= 0) {
-                        break;
-                    }
-                    if (fEndWordSet.contains(pc) && fBeginWordSet.contains(uc)) {
-                        // Maybe. See if it's in the dictionary.
-                        // NOTE: In the original Apple code, checked that the next
-                        // two characters after uc were not 0x0E4C THANTHAKHAT before
-                        // checking the dictionary. That is just a performance filter,
-                        // but it's not clear it's faster than checking the trie.
-                        int candidates = words[(wordsFound + 1) % THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
-                        utext_setNativeIndex(text, current + wordLength + chars);
-                        if (candidates > 0) {
-                            break;
-                        }
-                    }
-                    pc = uc;
-                }
-                
-                // Bump the word count if there wasn't already one
-                if (wordLength <= 0) {
-                    wordsFound += 1;
-                }
-                
-                // Update the length with the passed-over characters
-                wordLength += chars;
-            }
-            else {
-                // Back up to where we were for next iteration
-                utext_setNativeIndex(text, current+wordLength);
-            }
-        }
-        
-        // Never stop before a combining mark.
-        int32_t currPos;
-        while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) {
-            utext_next32(text);
-            wordLength += (int32_t)utext_getNativeIndex(text) - currPos;
-        }
-        
-        // Look ahead for possible suffixes if a dictionary word does not follow.
-        // We do this in code rather than using a rule so that the heuristic
-        // resynch continues to function. For example, one of the suffix characters
-        // could be a typo in the middle of a word.
-        if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength > 0) {
-            if (words[wordsFound%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0
-                && fSuffixSet.contains(uc = utext_current32(text))) {
-                if (uc == THAI_PAIYANNOI) {
-                    if (!fSuffixSet.contains(utext_previous32(text))) {
-                        // Skip over previous end and PAIYANNOI
-                        utext_next32(text);
-                        utext_next32(text);
-                        wordLength += 1;            // Add PAIYANNOI to word
-                        uc = utext_current32(text);     // Fetch next character
-                    }
-                    else {
-                        // Restore prior position
-                        utext_next32(text);
-                    }
-                }
-                if (uc == THAI_MAIYAMOK) {
-                    if (utext_previous32(text) != THAI_MAIYAMOK) {
-                        // Skip over previous end and MAIYAMOK
-                        utext_next32(text);
-                        utext_next32(text);
-                        wordLength += 1;            // Add MAIYAMOK to word
-                    }
-                    else {
-                        // Restore prior position
-                        utext_next32(text);
-                    }
-                }
-            }
-            else {
-                utext_setNativeIndex(text, current+wordLength);
-            }
-        }
-
-        // Did we find a word on this iteration? If so, push it on the break stack
-        if (wordLength > 0) {
-            foundBreaks.push((current+wordLength), status);
-        }
-    }
-
-    // Don't return a break for the end of the dictionary range if there is one there.
-    if (foundBreaks.peeki() >= rangeEnd) {
-        (void) foundBreaks.popi();
-        wordsFound -= 1;
-    }
-
-    return wordsFound;
-}
-
-// How many words in a row are "good enough"?
-#define KHMER_LOOKAHEAD 3
-
-// Will not combine a non-word with a preceding dictionary word longer than this
-#define KHMER_ROOT_COMBINE_THRESHOLD 3
-
-// Will not combine a non-word that shares at least this much prefix with a
-// dictionary word, with a preceding word
-#define KHMER_PREFIX_COMBINE_THRESHOLD 3
-
-// Minimum word size
-#define KHMER_MIN_WORD 2
-
-// Minimum number of characters for two words
-#define KHMER_MIN_WORD_SPAN (KHMER_MIN_WORD * 2)
-
-KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status)
-    : DictionaryBreakEngine((1 << UBRK_WORD) | (1 << UBRK_LINE)),
-      fDictionary(adoptDictionary)
-{
-    fKhmerWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]]"), status);
-    if (U_SUCCESS(status)) {
-        setCharacters(fKhmerWordSet);
-    }
-    fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]&[:M:]]"), status);
-    fMarkSet.add(0x0020);
-    fEndWordSet = fKhmerWordSet;
-    fBeginWordSet.add(0x1780, 0x17B3);
-    //fBeginWordSet.add(0x17A3, 0x17A4);      // deprecated vowels
-    //fEndWordSet.remove(0x17A5, 0x17A9);     // Khmer independent vowels that can't end a word
-    //fEndWordSet.remove(0x17B2);             // Khmer independent vowel that can't end a word
-    fEndWordSet.remove(0x17D2);             // KHMER SIGN COENG that combines some following characters
-    //fEndWordSet.remove(0x17B6, 0x17C5);     // Remove dependent vowels
-//    fEndWordSet.remove(0x0E31);             // MAI HAN-AKAT
-//    fEndWordSet.remove(0x0E40, 0x0E44);     // SARA E through SARA AI MAIMALAI
-//    fBeginWordSet.add(0x0E01, 0x0E2E);      // KO KAI through HO NOKHUK
-//    fBeginWordSet.add(0x0E40, 0x0E44);      // SARA E through SARA AI MAIMALAI
-//    fSuffixSet.add(THAI_PAIYANNOI);
-//    fSuffixSet.add(THAI_MAIYAMOK);
-
-    // Compact for caching.
-    fMarkSet.compact();
-    fEndWordSet.compact();
-    fBeginWordSet.compact();
-//    fSuffixSet.compact();
-}
-
-KhmerBreakEngine::~KhmerBreakEngine() {
-    delete fDictionary;
-}
-
-int32_t
-KhmerBreakEngine::divideUpDictionaryRange( UText *text,
-                                                int32_t rangeStart,
-                                                int32_t rangeEnd,
-                                                UStack &foundBreaks ) const {
-    if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) {
-        return 0;       // Not enough characters for two words
-    }
-
-    uint32_t wordsFound = 0;
-    int32_t wordLength;
-    int32_t current;
-    UErrorCode status = U_ZERO_ERROR;
-    PossibleWord words[KHMER_LOOKAHEAD];
-    UChar32 uc;
-
-    utext_setNativeIndex(text, rangeStart);
-
-    while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) {
-        wordLength = 0;
-
-        // Look for candidate words at the current position
-        int candidates = words[wordsFound%KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
-
-        // If we found exactly one, use that
-        if (candidates == 1) {
-            wordLength = words[wordsFound%KHMER_LOOKAHEAD].acceptMarked(text);
-            wordsFound += 1;
-        }
-
-        // If there was more than one, see which one can take us forward the most words
-        else if (candidates > 1) {
-            // If we're already at the end of the range, we're done
-            if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
-                goto foundBest;
-            }
-            do {
-                int wordsMatched = 1;
-                if (words[(wordsFound + 1) % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
-                    if (wordsMatched < 2) {
-                        // Followed by another dictionary word; mark first word as a good candidate
-                        words[wordsFound % KHMER_LOOKAHEAD].markCurrent();
-                        wordsMatched = 2;
-                    }
-
-                    // If we're already at the end of the range, we're done
-                    if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
-                        goto foundBest;
-                    }
-
-                    // See if any of the possible second words is followed by a third word
-                    do {
-                        // If we find a third word, stop right away
-                        if (words[(wordsFound + 2) % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd)) {
-                            words[wordsFound % KHMER_LOOKAHEAD].markCurrent();
-                            goto foundBest;
-                        }
-                    }
-                    while (words[(wordsFound + 1) % KHMER_LOOKAHEAD].backUp(text));
-                }
-            }
-            while (words[wordsFound % KHMER_LOOKAHEAD].backUp(text));
-foundBest:
-            wordLength = words[wordsFound % KHMER_LOOKAHEAD].acceptMarked(text);
-            wordsFound += 1;
-        }
-
-        // We come here after having either found a word or not. We look ahead to the
-        // next word. If it's not a dictionary word, we will combine it with the word we
-        // just found (if there is one), but only if the preceding word does not exceed
-        // the threshold.
-        // The text iterator should now be positioned at the end of the word we found.
-        if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength < KHMER_ROOT_COMBINE_THRESHOLD) {
-            // if it is a dictionary word, do nothing. If it isn't, then if there is
-            // no preceding word, or the non-word shares less than the minimum threshold
-            // of characters with a dictionary word, then scan to resynchronize
-            if (words[wordsFound % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0
-                  && (wordLength == 0
-                      || words[wordsFound % KHMER_LOOKAHEAD].longestPrefix() < KHMER_PREFIX_COMBINE_THRESHOLD)) {
-                // Look for a plausible word boundary
-                //TODO: This section will need a rework for UText.
-                int32_t remaining = rangeEnd - (current+wordLength);
-                UChar32 pc = utext_current32(text);
-                int32_t chars = 0;
-                for (;;) {
-                    utext_next32(text);
-                    uc = utext_current32(text);
-                    // TODO: Here we're counting on the fact that the SA languages are all
-                    // in the BMP. This should get fixed with the UText rework.
-                    chars += 1;
-                    if (--remaining <= 0) {
-                        break;
-                    }
-                    if (fEndWordSet.contains(pc) && fBeginWordSet.contains(uc)) {
-                        // Maybe. See if it's in the dictionary.
-                        int candidates = words[(wordsFound + 1) % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
-                        utext_setNativeIndex(text, current+wordLength+chars);
-                        if (candidates > 0) {
-                            break;
-                        }
-                    }
-                    pc = uc;
-                }
-
-                // Bump the word count if there wasn't already one
-                if (wordLength <= 0) {
-                    wordsFound += 1;
-                }
-
-                // Update the length with the passed-over characters
-                wordLength += chars;
-            }
-            else {
-                // Back up to where we were for next iteration
-                utext_setNativeIndex(text, current+wordLength);
-            }
-        }
-
-        // Never stop before a combining mark.
-        int32_t currPos;
-        while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) {
-            utext_next32(text);
-            wordLength += (int32_t)utext_getNativeIndex(text) - currPos;
-        }
-
-        // Look ahead for possible suffixes if a dictionary word does not follow.
-        // We do this in code rather than using a rule so that the heuristic
-        // resynch continues to function. For example, one of the suffix characters
-        // could be a typo in the middle of a word.
-//        if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength > 0) {
-//            if (words[wordsFound%KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0
-//                && fSuffixSet.contains(uc = utext_current32(text))) {
-//                if (uc == KHMER_PAIYANNOI) {
-//                    if (!fSuffixSet.contains(utext_previous32(text))) {
-//                        // Skip over previous end and PAIYANNOI
-//                        utext_next32(text);
-//                        utext_next32(text);
-//                        wordLength += 1;            // Add PAIYANNOI to word
-//                        uc = utext_current32(text);     // Fetch next character
-//                    }
-//                    else {
-//                        // Restore prior position
-//                        utext_next32(text);
-//                    }
-//                }
-//                if (uc == KHMER_MAIYAMOK) {
-//                    if (utext_previous32(text) != KHMER_MAIYAMOK) {
-//                        // Skip over previous end and MAIYAMOK
-//                        utext_next32(text);
-//                        utext_next32(text);
-//                        wordLength += 1;            // Add MAIYAMOK to word
-//                    }
-//                    else {
-//                        // Restore prior position
-//                        utext_next32(text);
-//                    }
-//                }
-//            }
-//            else {
-//                utext_setNativeIndex(text, current+wordLength);
-//            }
-//        }
-
-        // Did we find a word on this iteration? If so, push it on the break stack
-        if (wordLength > 0) {
-            foundBreaks.push((current+wordLength), status);
-        }
-    }
-    
-    // Don't return a break for the end of the dictionary range if there is one there.
-    if (foundBreaks.peeki() >= rangeEnd) {
-        (void) foundBreaks.popi();
-        wordsFound -= 1;
-    }
-
-    return wordsFound;
-}
-
-#if !UCONFIG_NO_NORMALIZATION
-/*
- ******************************************************************
- * CjkBreakEngine
- */
-static const uint32_t kuint32max = 0xFFFFFFFF;
-CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType type, UErrorCode &status)
-: DictionaryBreakEngine(1 << UBRK_WORD), fDictionary(adoptDictionary) {
-    // Korean dictionary only includes Hangul syllables
-    fHangulWordSet.applyPattern(UNICODE_STRING_SIMPLE("[\\uac00-\\ud7a3]"), status);
-    fHanWordSet.applyPattern(UNICODE_STRING_SIMPLE("[:Han:]"), status);
-    fKatakanaWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Katakana:]\\uff9e\\uff9f]"), status);
-    fHiraganaWordSet.applyPattern(UNICODE_STRING_SIMPLE("[:Hiragana:]"), status);
-
-    if (U_SUCCESS(status)) {
-        // handle Korean and Japanese/Chinese using different dictionaries
-        if (type == kKorean) {
-            setCharacters(fHangulWordSet);
-        } else { //Chinese and Japanese
-            UnicodeSet cjSet;
-            cjSet.addAll(fHanWordSet);
-            cjSet.addAll(fKatakanaWordSet);
-            cjSet.addAll(fHiraganaWordSet);
-            cjSet.add(UNICODE_STRING_SIMPLE("\\uff70\\u30fc"));
-            setCharacters(cjSet);
-        }
-    }
-}
-
-CjkBreakEngine::~CjkBreakEngine(){
-    delete fDictionary;
-}
-
-// The katakanaCost values below are based on the length frequencies of all
-// katakana phrases in the dictionary
-static const int kMaxKatakanaLength = 8;
-static const int kMaxKatakanaGroupLength = 20;
-static const uint32_t maxSnlp = 255;
-
-static inline uint32_t getKatakanaCost(int wordLength){
-    //TODO: fill array with actual values from dictionary!
-    static const uint32_t katakanaCost[kMaxKatakanaLength + 1]
-                                       = {8192, 984, 408, 240, 204, 252, 300, 372, 480};
-    return (wordLength > kMaxKatakanaLength) ? 8192 : katakanaCost[wordLength];
-}
-
-static inline bool isKatakana(uint16_t value) {
-    return (value >= 0x30A1u && value <= 0x30FEu && value != 0x30FBu) ||
-            (value >= 0xFF66u && value <= 0xFF9fu);
-}
-
-// A very simple helper class to streamline the buffer handling in
-// divideUpDictionaryRange. 
-template<class T, size_t N>
-class AutoBuffer {
-public:
-    AutoBuffer(size_t size) : buffer(stackBuffer), capacity(N) {
-        if (size > N) {
-            buffer = reinterpret_cast<T*>(uprv_malloc(sizeof(T)*size));
-            capacity = size;
-        }
-    }
-    ~AutoBuffer() {
-        if (buffer != stackBuffer)
-            uprv_free(buffer);
-    }
-
-    T* elems() {
-        return buffer;
-    }
-
-    const T& operator[] (size_t i) const {
-        return buffer[i];
-    }
-
-    T& operator[] (size_t i) {
-        return buffer[i];
-    }
-
-    // resize without copy
-    void resize(size_t size) {
-        if (size <= capacity)
-            return;
-        if (buffer != stackBuffer)
-            uprv_free(buffer);
-        buffer = reinterpret_cast<T*>(uprv_malloc(sizeof(T)*size));
-        capacity = size;
-    }
-
-private:
-    T stackBuffer[N];
-    T* buffer;
-    AutoBuffer();
-    size_t capacity;
-};
-
-
-/*
- * @param text A UText representing the text
- * @param rangeStart The start of the range of dictionary characters
- * @param rangeEnd The end of the range of dictionary characters
- * @param foundBreaks Output of C array of int32_t break positions, or 0
- * @return The number of breaks found
- */
-int32_t 
-CjkBreakEngine::divideUpDictionaryRange( UText *text,
-        int32_t rangeStart,
-        int32_t rangeEnd,
-        UStack &foundBreaks ) const {
-    if (rangeStart >= rangeEnd) {
-        return 0;
-    }
-
-    const size_t defaultInputLength = 80;
-    size_t inputLength = rangeEnd - rangeStart;
-    // TODO: Replace by UnicodeString.
-    AutoBuffer<UChar, defaultInputLength> charString(inputLength);
-
-    // Normalize the input string and put it in normalizedText.
-    // The map from the indices of the normalized input to the raw
-    // input is kept in charPositions.
-    UErrorCode status = U_ZERO_ERROR;
-    utext_extract(text, rangeStart, rangeEnd, charString.elems(), inputLength, &status);
-    if (U_FAILURE(status)) {
-        return 0;
-    }
-
-    UnicodeString inputString(charString.elems(), inputLength);
-    // TODO: Use Normalizer2.
-    UNormalizationMode norm_mode = UNORM_NFKC;
-    UBool isNormalized =
-        Normalizer::quickCheck(inputString, norm_mode, status) == UNORM_YES ||
-        Normalizer::isNormalized(inputString, norm_mode, status);
-
-    // TODO: Replace by UVector32.
-    AutoBuffer<int32_t, defaultInputLength> charPositions(inputLength + 1);
-    int numChars = 0;
-    UText normalizedText = UTEXT_INITIALIZER;
-    // Needs to be declared here because normalizedText holds onto its buffer.
-    UnicodeString normalizedString;
-    if (isNormalized) {
-        int32_t index = 0;
-        charPositions[0] = 0;
-        while(index < inputString.length()) {
-            index = inputString.moveIndex32(index, 1);
-            charPositions[++numChars] = index;
-        }
-        utext_openUnicodeString(&normalizedText, &inputString, &status);
-    }
-    else {
-        Normalizer::normalize(inputString, norm_mode, 0, normalizedString, status);
-        if (U_FAILURE(status)) {
-            return 0;
-        }
-        charPositions.resize(normalizedString.length() + 1);
-        Normalizer normalizer(charString.elems(), inputLength, norm_mode);
-        int32_t index = 0;
-        charPositions[0] = 0;
-        while(index < normalizer.endIndex()){
-            /* UChar32 uc = */ normalizer.next();
-            charPositions[++numChars] = index = normalizer.getIndex();
-        }
-        utext_openUnicodeString(&normalizedText, &normalizedString, &status);
-    }
-
-    if (U_FAILURE(status)) {
-        return 0;
-    }
-
-    // From this point on, all the indices refer to the indices of
-    // the normalized input string.
-
-    // bestSnlp[i] is the snlp of the best segmentation of the first i
-    // characters in the range to be matched.
-    // TODO: Replace by UVector32.
-    AutoBuffer<uint32_t, defaultInputLength> bestSnlp(numChars + 1);
-    bestSnlp[0] = 0;
-    for(int i = 1; i <= numChars; i++) {
-        bestSnlp[i] = kuint32max;
-    }
-
-    // prev[i] is the index of the last CJK character in the previous word in 
-    // the best segmentation of the first i characters.
-    // TODO: Replace by UVector32.
-    AutoBuffer<int, defaultInputLength> prev(numChars + 1);
-    for(int i = 0; i <= numChars; i++){
-        prev[i] = -1;
-    }
-
-    const size_t maxWordSize = 20;
-    // TODO: Replace both with UVector32.
-    AutoBuffer<int32_t, maxWordSize> values(numChars);
-    AutoBuffer<int32_t, maxWordSize> lengths(numChars);
-
-    // Dynamic programming to find the best segmentation.
-    bool is_prev_katakana = false;
-    for (int32_t i = 0; i < numChars; ++i) {
-        //utext_setNativeIndex(text, rangeStart + i);
-        utext_setNativeIndex(&normalizedText, i);
-        if (bestSnlp[i] == kuint32max)
-            continue;
-
-        int32_t count;
-        // limit maximum word length matched to size of current substring
-        int32_t maxSearchLength = (i + maxWordSize < (size_t) numChars)? maxWordSize : (numChars - i);
-
-        fDictionary->matches(&normalizedText, maxSearchLength, lengths.elems(), count, maxSearchLength, values.elems());
-
-        // if there are no single character matches found in the dictionary 
-        // starting with this charcter, treat character as a 1-character word 
-        // with the highest value possible, i.e. the least likely to occur.
-        // Exclude Korean characters from this treatment, as they should be left
-        // together by default.
-        if((count == 0 || lengths[0] != 1) &&
-                !fHangulWordSet.contains(utext_current32(&normalizedText))) {
-            values[count] = maxSnlp;
-            lengths[count++] = 1;
-        }
-
-        for (int j = 0; j < count; j++) {
-            uint32_t newSnlp = bestSnlp[i] + values[j];
-            if (newSnlp < bestSnlp[lengths[j] + i]) {
-                bestSnlp[lengths[j] + i] = newSnlp;
-                prev[lengths[j] + i] = i;
-            }
-        }
-
-        // In Japanese,
-        // Katakana word in single character is pretty rare. So we apply
-        // the following heuristic to Katakana: any continuous run of Katakana
-        // characters is considered a candidate word with a default cost
-        // specified in the katakanaCost table according to its length.
-        //utext_setNativeIndex(text, rangeStart + i);
-        utext_setNativeIndex(&normalizedText, i);
-        bool is_katakana = isKatakana(utext_current32(&normalizedText));
-        if (!is_prev_katakana && is_katakana) {
-            int j = i + 1;
-            utext_next32(&normalizedText);
-            // Find the end of the continuous run of Katakana characters
-            while (j < numChars && (j - i) < kMaxKatakanaGroupLength &&
-                    isKatakana(utext_current32(&normalizedText))) {
-                utext_next32(&normalizedText);
-                ++j;
-            }
-            if ((j - i) < kMaxKatakanaGroupLength) {
-                uint32_t newSnlp = bestSnlp[i] + getKatakanaCost(j - i);
-                if (newSnlp < bestSnlp[j]) {
-                    bestSnlp[j] = newSnlp;
-                    prev[j] = i;
-                }
-            }
-        }
-        is_prev_katakana = is_katakana;
-    }
-
-    // Start pushing the optimal offset index into t_boundary (t for tentative).
-    // prev[numChars] is guaranteed to be meaningful.
-    // We'll first push in the reverse order, i.e.,
-    // t_boundary[0] = numChars, and afterwards do a swap.
-    // TODO: Replace by UVector32.
-    AutoBuffer<int, maxWordSize> t_boundary(numChars + 1);
-
-    int numBreaks = 0;
-    // No segmentation found, set boundary to end of range
-    if (bestSnlp[numChars] == kuint32max) {
-        t_boundary[numBreaks++] = numChars;
-    } else {
-        for (int i = numChars; i > 0; i = prev[i]) {
-            t_boundary[numBreaks++] = i;
-        }
-        U_ASSERT(prev[t_boundary[numBreaks - 1]] == 0);
-    }
-
-    // Reverse offset index in t_boundary.
-    // Don't add a break for the start of the dictionary range if there is one
-    // there already.
-    if (foundBreaks.size() == 0 || foundBreaks.peeki() < rangeStart) {
-        t_boundary[numBreaks++] = 0;
-    }
-
-    // Now that we're done, convert positions in t_bdry[] (indices in 
-    // the normalized input string) back to indices in the raw input string
-    // while reversing t_bdry and pushing values to foundBreaks.
-    for (int i = numBreaks-1; i >= 0; i--) {
-        foundBreaks.push(charPositions[t_boundary[i]] + rangeStart, status);
-    }
-
-    utext_close(&normalizedText);
-    return numBreaks;
-}
-#endif
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/dictbe.h b/src/third_party/mozjs/intl/icu/source/common/dictbe.h
deleted file mode 100644
index 09cc48e..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/dictbe.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2006,2012, International Business Machines Corporation        *
- * and others. All Rights Reserved.                                            *
- *******************************************************************************
- */
-
-#ifndef DICTBE_H
-#define DICTBE_H
-
-#include "unicode/utypes.h"
-#include "unicode/uniset.h"
-#include "unicode/utext.h"
-
-#include "brkeng.h"
-
-U_NAMESPACE_BEGIN
-
-class DictionaryMatcher;
-
-/*******************************************************************
- * DictionaryBreakEngine
- */
-
-/**
- * <p>DictionaryBreakEngine is a kind of LanguageBreakEngine that uses a
- * dictionary to determine language-specific breaks.</p>
- *
- * <p>After it is constructed a DictionaryBreakEngine may be shared between
- * threads without synchronization.</p>
- */
-class DictionaryBreakEngine : public LanguageBreakEngine {
- private:
-    /**
-     * The set of characters handled by this engine
-     * @internal
-     */
-
-  UnicodeSet    fSet;
-
-    /**
-     * The set of break types handled by this engine
-     * @internal
-     */
-
-  uint32_t      fTypes;
-
-  /**
-   * <p>Default constructor.</p>
-   *
-   */
-  DictionaryBreakEngine();
-
- public:
-
-  /**
-   * <p>Constructor setting the break types handled.</p>
-   *
-   * @param breakTypes A bitmap of types handled by the engine.
-   */
-  DictionaryBreakEngine( uint32_t breakTypes );
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~DictionaryBreakEngine();
-
-  /**
-   * <p>Indicate whether this engine handles a particular character for
-   * a particular kind of break.</p>
-   *
-   * @param c A character which begins a run that the engine might handle
-   * @param breakType The type of text break which the caller wants to determine
-   * @return TRUE if this engine handles the particular character and break
-   * type.
-   */
-  virtual UBool handles( UChar32 c, int32_t breakType ) const;
-
-  /**
-   * <p>Find any breaks within a run in the supplied text.</p>
-   *
-   * @param text A UText representing the text. The iterator is left at
-   * the end of the run of characters which the engine is capable of handling 
-   * that starts from the first (or last) character in the range.
-   * @param startPos The start of the run within the supplied text.
-   * @param endPos The end of the run within the supplied text.
-   * @param reverse Whether the caller is looking for breaks in a reverse
-   * direction.
-   * @param breakType The type of break desired, or -1.
-   * @param foundBreaks An allocated C array of the breaks found, if any
-   * @return The number of breaks found.
-   */
-  virtual int32_t findBreaks( UText *text,
-                              int32_t startPos,
-                              int32_t endPos,
-                              UBool reverse,
-                              int32_t breakType,
-                              UStack &foundBreaks ) const;
-
- protected:
-
- /**
-  * <p>Set the character set handled by this engine.</p>
-  *
-  * @param set A UnicodeSet of the set of characters handled by the engine
-  */
-  virtual void setCharacters( const UnicodeSet &set );
-
- /**
-  * <p>Set the break types handled by this engine.</p>
-  *
-  * @param breakTypes A bitmap of types handled by the engine.
-  */
-//  virtual void setBreakTypes( uint32_t breakTypes );
-
- /**
-  * <p>Divide up a range of known dictionary characters handled by this break engine.</p>
-  *
-  * @param text A UText representing the text
-  * @param rangeStart The start of the range of dictionary characters
-  * @param rangeEnd The end of the range of dictionary characters
-  * @param foundBreaks Output of C array of int32_t break positions, or 0
-  * @return The number of breaks found
-  */
-  virtual int32_t divideUpDictionaryRange( UText *text,
-                                           int32_t rangeStart,
-                                           int32_t rangeEnd,
-                                           UStack &foundBreaks ) const = 0;
-
-};
-
-/*******************************************************************
- * ThaiBreakEngine
- */
-
-/**
- * <p>ThaiBreakEngine is a kind of DictionaryBreakEngine that uses a
- * dictionary and heuristics to determine Thai-specific breaks.</p>
- *
- * <p>After it is constructed a ThaiBreakEngine may be shared between
- * threads without synchronization.</p>
- */
-class ThaiBreakEngine : public DictionaryBreakEngine {
- private:
-    /**
-     * The set of characters handled by this engine
-     * @internal
-     */
-
-  UnicodeSet                fThaiWordSet;
-  UnicodeSet                fEndWordSet;
-  UnicodeSet                fBeginWordSet;
-  UnicodeSet                fSuffixSet;
-  UnicodeSet                fMarkSet;
-  DictionaryMatcher  *fDictionary;
-
- public:
-
-  /**
-   * <p>Default constructor.</p>
-   *
-   * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
-   * engine is deleted.
-   */
-  ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~ThaiBreakEngine();
-
- protected:
- /**
-  * <p>Divide up a range of known dictionary characters handled by this break engine.</p>
-  *
-  * @param text A UText representing the text
-  * @param rangeStart The start of the range of dictionary characters
-  * @param rangeEnd The end of the range of dictionary characters
-  * @param foundBreaks Output of C array of int32_t break positions, or 0
-  * @return The number of breaks found
-  */
-  virtual int32_t divideUpDictionaryRange( UText *text,
-                                           int32_t rangeStart,
-                                           int32_t rangeEnd,
-                                           UStack &foundBreaks ) const;
-
-};
-
-#if !UCONFIG_NO_NORMALIZATION
-
-/*******************************************************************
- * CjkBreakEngine
- */
-
-//indicates language/script that the CjkBreakEngine will handle
-enum LanguageType {
-    kKorean,
-    kChineseJapanese
-};
-
-/**
- * <p>CjkBreakEngine is a kind of DictionaryBreakEngine that uses a
- * dictionary with costs associated with each word and
- * Viterbi decoding to determine CJK-specific breaks.</p>
- */
-class CjkBreakEngine : public DictionaryBreakEngine {
- protected:
-    /**
-     * The set of characters handled by this engine
-     * @internal
-     */
-  UnicodeSet                fHangulWordSet;
-  UnicodeSet                fHanWordSet;
-  UnicodeSet                fKatakanaWordSet;
-  UnicodeSet                fHiraganaWordSet;
-
-  DictionaryMatcher  *fDictionary;
-
- public:
-
-    /**
-     * <p>Default constructor.</p>
-     *
-     * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
-     * engine is deleted. The DictionaryMatcher must contain costs for each word
-     * in order for the dictionary to work properly.
-     */
-  CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType type, UErrorCode &status);
-
-    /**
-     * <p>Virtual destructor.</p>
-     */
-  virtual ~CjkBreakEngine();
-
- protected:
-    /**
-     * <p>Divide up a range of known dictionary characters handled by this break engine.</p>
-     *
-     * @param text A UText representing the text
-     * @param rangeStart The start of the range of dictionary characters
-     * @param rangeEnd The end of the range of dictionary characters
-     * @param foundBreaks Output of C array of int32_t break positions, or 0
-     * @return The number of breaks found
-     */
-  virtual int32_t divideUpDictionaryRange( UText *text,
-          int32_t rangeStart,
-          int32_t rangeEnd,
-          UStack &foundBreaks ) const;
-
-};
-
-#endif
-
-/******************************************************************* 
- * KhmerBreakEngine 
- */ 
- 
-/** 
- * <p>KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a 
- * DictionaryMatcher and heuristics to determine Khmer-specific breaks.</p> 
- * 
- * <p>After it is constructed a KhmerBreakEngine may be shared between 
- * threads without synchronization.</p> 
- */ 
-class KhmerBreakEngine : public DictionaryBreakEngine { 
- private: 
-    /** 
-     * The set of characters handled by this engine 
-     * @internal 
-     */ 
- 
-  UnicodeSet                fKhmerWordSet; 
-  UnicodeSet                fEndWordSet; 
-  UnicodeSet                fBeginWordSet; 
-  UnicodeSet                fMarkSet; 
-  DictionaryMatcher  *fDictionary; 
- 
- public: 
- 
-  /** 
-   * <p>Default constructor.</p> 
-   * 
-   * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the 
-   * engine is deleted. 
-   */ 
-  KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status); 
- 
-  /** 
-   * <p>Virtual destructor.</p> 
-   */ 
-  virtual ~KhmerBreakEngine(); 
- 
- protected: 
- /** 
-  * <p>Divide up a range of known dictionary characters.</p> 
-  * 
-  * @param text A UText representing the text 
-  * @param rangeStart The start of the range of dictionary characters 
-  * @param rangeEnd The end of the range of dictionary characters 
-  * @param foundBreaks Output of C array of int32_t break positions, or 0 
-  * @return The number of breaks found 
-  */ 
-  virtual int32_t divideUpDictionaryRange( UText *text, 
-                                           int32_t rangeStart, 
-                                           int32_t rangeEnd, 
-                                           UStack &foundBreaks ) const; 
- 
-}; 
- 
- 
-U_NAMESPACE_END
-
-    /* DICTBE_H */
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/dictionarydata.cpp b/src/third_party/mozjs/intl/icu/source/common/dictionarydata.cpp
deleted file mode 100644
index a29e509..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/dictionarydata.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2012, International Business Machines
-* Corporation and others.  All Rights Reserved.
-*******************************************************************************
-* dictionarydata.h
-*
-* created on: 2012may31
-* created by: Markus W. Scherer & Maxime Serrano
-*/
-
-#include "dictionarydata.h"
-#include "unicode/ucharstrie.h"
-#include "unicode/bytestrie.h"
-#include "unicode/udata.h"
-#include "cmemory.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-U_NAMESPACE_BEGIN
-
-#ifndef CYGWINMSVC /* On Cygwin/MSVC, the error redefinition of symbols occurs.*/
-const int32_t DictionaryData::TRIE_TYPE_BYTES;
-const int32_t DictionaryData::TRIE_TYPE_UCHARS;
-#endif
-
-DictionaryMatcher::~DictionaryMatcher() {
-}
-
-UCharsDictionaryMatcher::~UCharsDictionaryMatcher() {
-    udata_close(file);
-}
-
-int32_t UCharsDictionaryMatcher::getType() const {
-    return DictionaryData::TRIE_TYPE_UCHARS;
-}
-
-int32_t UCharsDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t *lengths, int32_t &count, int32_t limit, int32_t *values) const {
-    UCharsTrie uct(characters);
-    UChar32 c = utext_next32(text);
-    if (c < 0) {
-        return 0;
-    }
-    UStringTrieResult result = uct.first(c);
-    int32_t numChars = 1;
-    count = 0;
-    for (;;) {
-        if (USTRINGTRIE_HAS_VALUE(result)) {
-            if (count < limit) {
-                if (values != NULL) {
-                    values[count] = uct.getValue();
-                }
-                lengths[count++] = numChars;
-            }
-            if (result == USTRINGTRIE_FINAL_VALUE) {
-                break;
-            }
-        }
-        else if (result == USTRINGTRIE_NO_MATCH) {
-            break;
-        }
-
-        // TODO: why do we have a text limit if the UText knows its length?
-        if (numChars >= maxLength) {
-            break;
-        }
-
-        c = utext_next32(text);
-        if (c < 0) {
-            break;
-        }
-        ++numChars;
-        result = uct.next(c);
-    }
-    return numChars;
-}
-
-BytesDictionaryMatcher::~BytesDictionaryMatcher() {
-    udata_close(file);
-}
-
-UChar32 BytesDictionaryMatcher::transform(UChar32 c) const {
-    if ((transformConstant & DictionaryData::TRANSFORM_TYPE_MASK) == DictionaryData::TRANSFORM_TYPE_OFFSET) {
-        if (c == 0x200D) {
-            return 0xFF;
-        } else if (c == 0x200C) {
-            return 0xFE;
-        }
-        int32_t delta = c - (transformConstant & DictionaryData::TRANSFORM_OFFSET_MASK);
-        if (delta < 0 || 0xFD < delta) {
-            return U_SENTINEL;
-        }
-        return (UChar32)delta;
-    }
-    return c;
-}
-
-int32_t BytesDictionaryMatcher::getType() const {
-    return DictionaryData::TRIE_TYPE_BYTES;
-}
-
-int32_t BytesDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t *lengths, int32_t &count, int32_t limit, int32_t *values) const {
-    BytesTrie bt(characters);
-    UChar32 c = utext_next32(text);
-    if (c < 0) {
-        return 0;
-    }
-    UStringTrieResult result = bt.first(transform(c));
-    int32_t numChars = 1;
-    count = 0;
-    for (;;) {
-        if (USTRINGTRIE_HAS_VALUE(result)) {
-            if (count < limit) {
-                if (values != NULL) {
-                    values[count] = bt.getValue();
-            }
-                lengths[count++] = numChars;
-            }
-            if (result == USTRINGTRIE_FINAL_VALUE) {
-                break;
-            }
-        }
-        else if (result == USTRINGTRIE_NO_MATCH) {
-            break;
-        }
-
-        // TODO: why do we have a text limit if the UText knows its length?
-        if (numChars >= maxLength) {
-            break;
-        }
-
-        c = utext_next32(text);
-        if (c < 0) {
-            break;
-        }
-        ++numChars;
-        result = bt.next(transform(c));
-    }
-    return numChars;
-}
-
-
-U_NAMESPACE_END
-
-U_NAMESPACE_USE
-
-U_CAPI int32_t U_EXPORT2
-udict_swap(const UDataSwapper *ds, const void *inData, int32_t length,
-           void *outData, UErrorCode *pErrorCode) {
-    const UDataInfo *pInfo;
-    int32_t headerSize;
-    const uint8_t *inBytes;
-    uint8_t *outBytes;
-    const int32_t *inIndexes;
-    int32_t indexes[DictionaryData::IX_COUNT];
-    int32_t i, offset, size;
-
-    headerSize = udata_swapDataHeader(ds, inData, length, outData, pErrorCode);
-    if (pErrorCode == NULL || U_FAILURE(*pErrorCode)) return 0;
-    pInfo = (const UDataInfo *)((const char *)inData + 4);
-    if (!(pInfo->dataFormat[0] == 0x44 && 
-          pInfo->dataFormat[1] == 0x69 && 
-          pInfo->dataFormat[2] == 0x63 && 
-          pInfo->dataFormat[3] == 0x74 && 
-          pInfo->formatVersion[0] == 1)) {
-        udata_printError(ds, "udict_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as dictionary data\n",
-                         pInfo->dataFormat[0], pInfo->dataFormat[1], pInfo->dataFormat[2], pInfo->dataFormat[3], pInfo->formatVersion[0]);
-        *pErrorCode = U_UNSUPPORTED_ERROR;
-        return 0;
-    }
-
-    inBytes = (const uint8_t *)inData + headerSize;
-    outBytes = (uint8_t *)outData + headerSize;
-
-    inIndexes = (const int32_t *)inBytes;
-    if (length >= 0) {
-        length -= headerSize;
-        if (length < (int32_t)(sizeof(indexes))) {
-            udata_printError(ds, "udict_swap(): too few bytes (%d after header) for dictionary data\n", length);
-            *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-    }
-
-    for (i = 0; i < DictionaryData::IX_COUNT; i++) {
-        indexes[i] = udata_readInt32(ds, inIndexes[i]);
-    }
-
-    size = indexes[DictionaryData::IX_TOTAL_SIZE];
-
-    if (length >= 0) {
-        if (length < size) {
-            udata_printError(ds, "udict_swap(): too few bytes (%d after header) for all of dictionary data\n", length);
-            *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-
-        if (inBytes != outBytes) {
-            uprv_memcpy(outBytes, inBytes, size);
-        }
-
-        offset = 0;
-        ds->swapArray32(ds, inBytes, sizeof(indexes), outBytes, pErrorCode);
-        offset = (int32_t)sizeof(indexes);
-        int32_t trieType = indexes[DictionaryData::IX_TRIE_TYPE] & DictionaryData::TRIE_TYPE_MASK;
-        int32_t nextOffset = indexes[DictionaryData::IX_RESERVED1_OFFSET];
-
-        if (trieType == DictionaryData::TRIE_TYPE_UCHARS) {
-            ds->swapArray16(ds, inBytes + offset, nextOffset - offset, outBytes + offset, pErrorCode);
-        } else if (trieType == DictionaryData::TRIE_TYPE_BYTES) {
-            // nothing to do
-        } else {
-            udata_printError(ds, "udict_swap(): unknown trie type!\n");
-            *pErrorCode = U_UNSUPPORTED_ERROR;
-            return 0;
-        }
-
-        // these next two sections are empty in the current format,
-        // but may be used later.
-        offset = nextOffset;
-        nextOffset = indexes[DictionaryData::IX_RESERVED2_OFFSET];
-        offset = nextOffset;
-        nextOffset = indexes[DictionaryData::IX_TOTAL_SIZE];
-        offset = nextOffset;
-    }
-    return headerSize + size;
-}
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/dictionarydata.h b/src/third_party/mozjs/intl/icu/source/common/dictionarydata.h
deleted file mode 100644
index ad4c928..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/dictionarydata.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2012, International Business Machines
-* Corporation and others.  All Rights Reserved.
-*******************************************************************************
-* dictionarydata.h
-*
-* created on: 2012may31
-* created by: Markus W. Scherer & Maxime Serrano
-*/
-
-#ifndef __DICTIONARYDATA_H__
-#define __DICTIONARYDATA_H__
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/utext.h"
-#include "unicode/udata.h"
-#include "udataswp.h"
-#include "unicode/uobject.h"
-#include "unicode/ustringtrie.h"
-
-U_NAMESPACE_BEGIN
-
-class UCharsTrie;
-class BytesTrie;
-
-class U_COMMON_API DictionaryData : public UMemory {
-public:
-    static const int32_t TRIE_TYPE_BYTES = 0;
-    static const int32_t TRIE_TYPE_UCHARS = 1;
-    static const int32_t TRIE_TYPE_MASK = 7;
-    static const int32_t TRIE_HAS_VALUES = 8;
-
-    static const int32_t TRANSFORM_NONE = 0;
-    static const int32_t TRANSFORM_TYPE_OFFSET = 0x1000000;
-    static const int32_t TRANSFORM_TYPE_MASK = 0x7f000000;
-    static const int32_t TRANSFORM_OFFSET_MASK = 0x1fffff;
-
-    enum {
-        // Byte offsets from the start of the data, after the generic header.
-        IX_STRING_TRIE_OFFSET,
-        IX_RESERVED1_OFFSET,
-        IX_RESERVED2_OFFSET,
-        IX_TOTAL_SIZE,
-
-        // Trie type: TRIE_HAS_VALUES | TRIE_TYPE_BYTES etc.
-        IX_TRIE_TYPE,
-        // Transform specification: TRANSFORM_TYPE_OFFSET | 0xe00 etc.
-        IX_TRANSFORM,
-
-        IX_RESERVED6,
-        IX_RESERVED7,
-        IX_COUNT
-    };
-};
-
-/**
- * Wrapper class around generic dictionaries, implementing matches().
- * getType() should return a TRIE_TYPE_??? constant from DictionaryData.
- * 
- * All implementations of this interface must be thread-safe if they are to be used inside of the
- * dictionary-based break iteration code.
- */
-class U_COMMON_API DictionaryMatcher : public UMemory {
-public:
-    virtual ~DictionaryMatcher();
-    // this should emulate CompactTrieDictionary::matches()
-    virtual int32_t matches(UText *text, int32_t maxLength, int32_t *lengths, int32_t &count,
-                            int32_t limit, int32_t *values = NULL) const = 0;
-    /** @return DictionaryData::TRIE_TYPE_XYZ */
-    virtual int32_t getType() const = 0;
-};
-
-// Implementation of the DictionaryMatcher interface for a UCharsTrie dictionary
-class U_COMMON_API UCharsDictionaryMatcher : public DictionaryMatcher {
-public:
-    // constructs a new UCharsDictionaryMatcher.
-    // The UDataMemory * will be closed on this object's destruction.
-    UCharsDictionaryMatcher(const UChar *c, UDataMemory *f) : characters(c), file(f) { }
-    virtual ~UCharsDictionaryMatcher();
-    virtual int32_t matches(UText *text, int32_t maxLength, int32_t *lengths, int32_t &count,
-                            int32_t limit, int32_t *values = NULL) const;
-    virtual int32_t getType() const;
-private:
-    const UChar *characters;
-    UDataMemory *file;
-};
-
-// Implementation of the DictionaryMatcher interface for a BytesTrie dictionary
-class U_COMMON_API BytesDictionaryMatcher : public DictionaryMatcher {
-public:
-    // constructs a new BytesTrieDictionaryMatcher
-    // the transform constant should be the constant read from the file, not a masked version!
-    // the UDataMemory * fed in here will be closed on this object's destruction
-    BytesDictionaryMatcher(const char *c, int32_t t, UDataMemory *f)
-            : characters(c), transformConstant(t), file(f) { }
-    virtual ~BytesDictionaryMatcher();
-    virtual int32_t matches(UText *text, int32_t maxLength, int32_t *lengths, int32_t &count,
-                            int32_t limit, int32_t *values = NULL) const;
-    virtual int32_t getType() const;
-private:
-    UChar32 transform(UChar32 c) const;
-
-    const char *characters;
-    int32_t transformConstant;
-    UDataMemory *file;
-};
-
-U_NAMESPACE_END
-
-U_CAPI int32_t U_EXPORT2
-udict_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode);
-
-/**
- * Format of dictionary .dict data files.
- * Format version 1.0.
- *
- * A dictionary .dict data file contains a byte-serialized BytesTrie or
- * a UChars-serialized UCharsTrie.
- * Such files are used in dictionary-based break iteration (DBBI).
- *
- * For a BytesTrie, a transformation type is specified for
- * transforming Unicode strings into byte sequences.
- *
- * A .dict file begins with a standard ICU data file header
- * (DataHeader, see ucmndata.h and unicode/udata.h).
- * The UDataInfo.dataVersion field is currently unused (set to 0.0.0.0).
- *
- * After the header, the file contains the following parts.
- * Constants are defined in the DictionaryData class.
- *
- * For the data structure of BytesTrie & UCharsTrie see
- * http://site.icu-project.org/design/struct/tries
- * and the bytestrie.h and ucharstrie.h header files.
- *
- * int32_t indexes[indexesLength]; -- indexesLength=indexes[IX_STRING_TRIE_OFFSET]/4;
- *
- *      The first four indexes are byte offsets in ascending order.
- *      Each byte offset marks the start of the next part in the data file,
- *      and the end of the previous one.
- *      When two consecutive byte offsets are the same, then the corresponding part is empty.
- *      Byte offsets are offsets from after the header,
- *      that is, from the beginning of the indexes[].
- *      Each part starts at an offset with proper alignment for its data.
- *      If necessary, the previous part may include padding bytes to achieve this alignment.
- *
- *      trieType=indexes[IX_TRIE_TYPE] defines the trie type.
- *      transform=indexes[IX_TRANSFORM] defines the Unicode-to-bytes transformation.
- *          If the transformation type is TRANSFORM_TYPE_OFFSET,
- *          then the lower 21 bits contain the offset code point.
- *          Each code point c is mapped to byte b = (c - offset).
- *          Code points outside the range offset..(offset+0xff) cannot be mapped
- *          and do not occur in the dictionary.
- *
- * stringTrie; -- a serialized BytesTrie or UCharsTrie
- *
- *      The dictionary maps strings to specific values (TRIE_HAS_VALUES bit set in trieType),
- *      or it maps all strings to 0 (TRIE_HAS_VALUES bit not set).
- */
-
-#endif  /* !UCONFIG_NO_BREAK_ITERATION */
-#endif  /* __DICTIONARYDATA_H__ */
diff --git a/src/third_party/mozjs/intl/icu/source/common/dtintrv.cpp b/src/third_party/mozjs/intl/icu/source/common/dtintrv.cpp
deleted file mode 100644
index bece836..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/dtintrv.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
-* Copyright (C) 2008, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-* File DTINTRV.CPP 
-*
-*******************************************************************************
-*/
-
-
-
-#include "unicode/dtintrv.h"
-
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateInterval)
-
-//DateInterval::DateInterval(){}
-
-
-DateInterval::DateInterval(UDate from, UDate to)
-:   fromDate(from),
-    toDate(to)
-{}
-
-
-DateInterval::~DateInterval(){}
-
-
-DateInterval::DateInterval(const DateInterval& other)
-: UObject(other) {
-    *this = other;
-}   
-
-
-DateInterval&
-DateInterval::operator=(const DateInterval& other) {
-    if ( this != &other ) {
-        fromDate = other.fromDate;
-        toDate = other.toDate;
-    }
-    return *this;
-}
-
-
-DateInterval* 
-DateInterval::clone() const {
-    return new DateInterval(*this);
-}
-
-
-UBool 
-DateInterval::operator==(const DateInterval& other) const { 
-    return ( fromDate == other.fromDate && toDate == other.toDate );
-}
-
-
-U_NAMESPACE_END
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/errorcode.cpp b/src/third_party/mozjs/intl/icu/source/common/errorcode.cpp
deleted file mode 100644
index 43868b7..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/errorcode.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  errorcode.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009mar10
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/errorcode.h"
-
-U_NAMESPACE_BEGIN
-
-ErrorCode::~ErrorCode() {}
-
-UErrorCode ErrorCode::reset() {
-    UErrorCode code = errorCode;
-    errorCode = U_ZERO_ERROR;
-    return code;
-}
-
-void ErrorCode::assertSuccess() const {
-    if(isFailure()) {
-        handleFailure();
-    }
-}
-
-const char* ErrorCode::errorName() const {
-  return u_errorName(errorCode);
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/filterednormalizer2.cpp b/src/third_party/mozjs/intl/icu/source/common/filterednormalizer2.cpp
deleted file mode 100644
index 44ed9c1..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/filterednormalizer2.cpp
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  filterednormalizer2.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009dec10
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/normalizer2.h"
-#include "unicode/uniset.h"
-#include "unicode/unistr.h"
-#include "unicode/unorm.h"
-#include "cpputils.h"
-
-U_NAMESPACE_BEGIN
-
-FilteredNormalizer2::~FilteredNormalizer2() {}
-
-UnicodeString &
-FilteredNormalizer2::normalize(const UnicodeString &src,
-                               UnicodeString &dest,
-                               UErrorCode &errorCode) const {
-    uprv_checkCanGetBuffer(src, errorCode);
-    if(U_FAILURE(errorCode)) {
-        dest.setToBogus();
-        return dest;
-    }
-    if(&dest==&src) {
-        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return dest;
-    }
-    dest.remove();
-    return normalize(src, dest, USET_SPAN_SIMPLE, errorCode);
-}
-
-// Internal: No argument checking, and appends to dest.
-// Pass as input spanCondition the one that is likely to yield a non-zero
-// span length at the start of src.
-// For set=[:age=3.2:], since almost all common characters were in Unicode 3.2,
-// USET_SPAN_SIMPLE should be passed in for the start of src
-// and USET_SPAN_NOT_CONTAINED should be passed in if we continue after
-// an in-filter prefix.
-UnicodeString &
-FilteredNormalizer2::normalize(const UnicodeString &src,
-                               UnicodeString &dest,
-                               USetSpanCondition spanCondition,
-                               UErrorCode &errorCode) const {
-    UnicodeString tempDest;  // Don't throw away destination buffer between iterations.
-    for(int32_t prevSpanLimit=0; prevSpanLimit<src.length();) {
-        int32_t spanLimit=set.span(src, prevSpanLimit, spanCondition);
-        int32_t spanLength=spanLimit-prevSpanLimit;
-        if(spanCondition==USET_SPAN_NOT_CONTAINED) {
-            if(spanLength!=0) {
-                dest.append(src, prevSpanLimit, spanLength);
-            }
-            spanCondition=USET_SPAN_SIMPLE;
-        } else {
-            if(spanLength!=0) {
-                // Not norm2.normalizeSecondAndAppend() because we do not want
-                // to modify the non-filter part of dest.
-                dest.append(norm2.normalize(src.tempSubStringBetween(prevSpanLimit, spanLimit),
-                                            tempDest, errorCode));
-                if(U_FAILURE(errorCode)) {
-                    break;
-                }
-            }
-            spanCondition=USET_SPAN_NOT_CONTAINED;
-        }
-        prevSpanLimit=spanLimit;
-    }
-    return dest;
-}
-
-UnicodeString &
-FilteredNormalizer2::normalizeSecondAndAppend(UnicodeString &first,
-                                              const UnicodeString &second,
-                                              UErrorCode &errorCode) const {
-    return normalizeSecondAndAppend(first, second, TRUE, errorCode);
-}
-
-UnicodeString &
-FilteredNormalizer2::append(UnicodeString &first,
-                            const UnicodeString &second,
-                            UErrorCode &errorCode) const {
-    return normalizeSecondAndAppend(first, second, FALSE, errorCode);
-}
-
-UnicodeString &
-FilteredNormalizer2::normalizeSecondAndAppend(UnicodeString &first,
-                                              const UnicodeString &second,
-                                              UBool doNormalize,
-                                              UErrorCode &errorCode) const {
-    uprv_checkCanGetBuffer(first, errorCode);
-    uprv_checkCanGetBuffer(second, errorCode);
-    if(U_FAILURE(errorCode)) {
-        return first;
-    }
-    if(&first==&second) {
-        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return first;
-    }
-    if(first.isEmpty()) {
-        if(doNormalize) {
-            return normalize(second, first, errorCode);
-        } else {
-            return first=second;
-        }
-    }
-    // merge the in-filter suffix of the first string with the in-filter prefix of the second
-    int32_t prefixLimit=set.span(second, 0, USET_SPAN_SIMPLE);
-    if(prefixLimit!=0) {
-        UnicodeString prefix(second.tempSubString(0, prefixLimit));
-        int32_t suffixStart=set.spanBack(first, INT32_MAX, USET_SPAN_SIMPLE);
-        if(suffixStart==0) {
-            if(doNormalize) {
-                norm2.normalizeSecondAndAppend(first, prefix, errorCode);
-            } else {
-                norm2.append(first, prefix, errorCode);
-            }
-        } else {
-            UnicodeString middle(first, suffixStart, INT32_MAX);
-            if(doNormalize) {
-                norm2.normalizeSecondAndAppend(middle, prefix, errorCode);
-            } else {
-                norm2.append(middle, prefix, errorCode);
-            }
-            first.replace(suffixStart, INT32_MAX, middle);
-        }
-    }
-    if(prefixLimit<second.length()) {
-        UnicodeString rest(second.tempSubString(prefixLimit, INT32_MAX));
-        if(doNormalize) {
-            normalize(rest, first, USET_SPAN_NOT_CONTAINED, errorCode);
-        } else {
-            first.append(rest);
-        }
-    }
-    return first;
-}
-
-UBool
-FilteredNormalizer2::getDecomposition(UChar32 c, UnicodeString &decomposition) const {
-    return set.contains(c) && norm2.getDecomposition(c, decomposition);
-}
-
-UBool
-FilteredNormalizer2::getRawDecomposition(UChar32 c, UnicodeString &decomposition) const {
-    return set.contains(c) && norm2.getRawDecomposition(c, decomposition);
-}
-
-UChar32
-FilteredNormalizer2::composePair(UChar32 a, UChar32 b) const {
-    return (set.contains(a) && set.contains(b)) ? norm2.composePair(a, b) : U_SENTINEL;
-}
-
-uint8_t
-FilteredNormalizer2::getCombiningClass(UChar32 c) const {
-    return set.contains(c) ? norm2.getCombiningClass(c) : 0;
-}
-
-UBool
-FilteredNormalizer2::isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
-    uprv_checkCanGetBuffer(s, errorCode);
-    if(U_FAILURE(errorCode)) {
-        return FALSE;
-    }
-    USetSpanCondition spanCondition=USET_SPAN_SIMPLE;
-    for(int32_t prevSpanLimit=0; prevSpanLimit<s.length();) {
-        int32_t spanLimit=set.span(s, prevSpanLimit, spanCondition);
-        if(spanCondition==USET_SPAN_NOT_CONTAINED) {
-            spanCondition=USET_SPAN_SIMPLE;
-        } else {
-            if( !norm2.isNormalized(s.tempSubStringBetween(prevSpanLimit, spanLimit), errorCode) ||
-                U_FAILURE(errorCode)
-            ) {
-                return FALSE;
-            }
-            spanCondition=USET_SPAN_NOT_CONTAINED;
-        }
-        prevSpanLimit=spanLimit;
-    }
-    return TRUE;
-}
-
-UNormalizationCheckResult
-FilteredNormalizer2::quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
-    uprv_checkCanGetBuffer(s, errorCode);
-    if(U_FAILURE(errorCode)) {
-        return UNORM_MAYBE;
-    }
-    UNormalizationCheckResult result=UNORM_YES;
-    USetSpanCondition spanCondition=USET_SPAN_SIMPLE;
-    for(int32_t prevSpanLimit=0; prevSpanLimit<s.length();) {
-        int32_t spanLimit=set.span(s, prevSpanLimit, spanCondition);
-        if(spanCondition==USET_SPAN_NOT_CONTAINED) {
-            spanCondition=USET_SPAN_SIMPLE;
-        } else {
-            UNormalizationCheckResult qcResult=
-                norm2.quickCheck(s.tempSubStringBetween(prevSpanLimit, spanLimit), errorCode);
-            if(U_FAILURE(errorCode) || qcResult==UNORM_NO) {
-                return qcResult;
-            } else if(qcResult==UNORM_MAYBE) {
-                result=qcResult;
-            }
-            spanCondition=USET_SPAN_NOT_CONTAINED;
-        }
-        prevSpanLimit=spanLimit;
-    }
-    return result;
-}
-
-int32_t
-FilteredNormalizer2::spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const {
-    uprv_checkCanGetBuffer(s, errorCode);
-    if(U_FAILURE(errorCode)) {
-        return 0;
-    }
-    USetSpanCondition spanCondition=USET_SPAN_SIMPLE;
-    for(int32_t prevSpanLimit=0; prevSpanLimit<s.length();) {
-        int32_t spanLimit=set.span(s, prevSpanLimit, spanCondition);
-        if(spanCondition==USET_SPAN_NOT_CONTAINED) {
-            spanCondition=USET_SPAN_SIMPLE;
-        } else {
-            int32_t yesLimit=
-                prevSpanLimit+
-                norm2.spanQuickCheckYes(
-                    s.tempSubStringBetween(prevSpanLimit, spanLimit), errorCode);
-            if(U_FAILURE(errorCode) || yesLimit<spanLimit) {
-                return yesLimit;
-            }
-            spanCondition=USET_SPAN_NOT_CONTAINED;
-        }
-        prevSpanLimit=spanLimit;
-    }
-    return s.length();
-}
-
-UBool
-FilteredNormalizer2::hasBoundaryBefore(UChar32 c) const {
-    return !set.contains(c) || norm2.hasBoundaryBefore(c);
-}
-
-UBool
-FilteredNormalizer2::hasBoundaryAfter(UChar32 c) const {
-    return !set.contains(c) || norm2.hasBoundaryAfter(c);
-}
-
-UBool
-FilteredNormalizer2::isInert(UChar32 c) const {
-    return !set.contains(c) || norm2.isInert(c);
-}
-
-U_NAMESPACE_END
-
-// C API ------------------------------------------------------------------- ***
-
-U_NAMESPACE_USE
-
-U_CAPI UNormalizer2 * U_EXPORT2
-unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return NULL;
-    }
-    if(filterSet==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    Normalizer2 *fn2=new FilteredNormalizer2(*(Normalizer2 *)norm2,
-                                             *UnicodeSet::fromUSet(filterSet));
-    if(fn2==NULL) {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-    }
-    return (UNormalizer2 *)fn2;
-}
-
-#endif  // !UCONFIG_NO_NORMALIZATION
diff --git a/src/third_party/mozjs/intl/icu/source/common/hash.h b/src/third_party/mozjs/intl/icu/source/common/hash.h
deleted file mode 100644
index 57467da..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/hash.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-******************************************************************************
-*   Copyright (C) 1997-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-******************************************************************************
-*   Date        Name        Description
-*   03/28/00    aliu        Creation.
-******************************************************************************
-*/
-
-#ifndef HASH_H
-#define HASH_H
-
-#include "unicode/unistr.h"
-#include "unicode/uobject.h"
-#include "cmemory.h"
-#include "uhash.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Hashtable is a thin C++ wrapper around UHashtable, a general-purpose void*
- * hashtable implemented in C.  Hashtable is designed to be idiomatic and
- * easy-to-use in C++.
- *
- * Hashtable is an INTERNAL CLASS.
- */
-class U_COMMON_API Hashtable : public UMemory {
-    UHashtable* hash;
-    UHashtable hashObj;
-
-    inline void init(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status);
-
-public:
-    /**
-     * Construct a hashtable
-     * @param ignoreKeyCase If true, keys are case insensitive.
-     * @param status Error code
-    */
-    Hashtable(UBool ignoreKeyCase, UErrorCode& status);
-
-    /**
-     * Construct a hashtable
-     * @param keyComp Comparator for comparing the keys
-     * @param valueComp Comparator for comparing the values
-     * @param status Error code
-    */
-    Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status);
-
-    /**
-     * Construct a hashtable
-     * @param status Error code
-    */
-    Hashtable(UErrorCode& status);
-
-    /**
-     * Construct a hashtable, _disregarding any error_.  Use this constructor
-     * with caution.
-     */
-    Hashtable();
-
-    /**
-     * Non-virtual destructor; make this virtual if Hashtable is subclassed
-     * in the future.
-     */
-    ~Hashtable();
-
-    UObjectDeleter *setValueDeleter(UObjectDeleter *fn);
-
-    int32_t count() const;
-
-    void* put(const UnicodeString& key, void* value, UErrorCode& status);
-
-    int32_t puti(const UnicodeString& key, int32_t value, UErrorCode& status);
-
-    void* get(const UnicodeString& key) const;
-    
-    int32_t geti(const UnicodeString& key) const;
-    
-    void* remove(const UnicodeString& key);
-
-    int32_t removei(const UnicodeString& key);
-
-    void removeAll(void);
-
-    const UHashElement* find(const UnicodeString& key) const;
-
-    const UHashElement* nextElement(int32_t& pos) const;
-    
-    UKeyComparator* setKeyComparator(UKeyComparator*keyComp);
-    
-    UValueComparator* setValueComparator(UValueComparator* valueComp);
-
-    UBool equals(const Hashtable& that) const;
-private:
-    Hashtable(const Hashtable &other); // forbid copying of this class
-    Hashtable &operator=(const Hashtable &other); // forbid copying of this class
-};
-
-/*********************************************************************
- * Implementation
- ********************************************************************/
-
-inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, 
-                            UValueComparator *valueComp, UErrorCode& status) {
-    if (U_FAILURE(status)) {
-        return;
-    }
-    uhash_init(&hashObj, keyHash, keyComp, valueComp, &status);
-    if (U_SUCCESS(status)) {
-        hash = &hashObj;
-        uhash_setKeyDeleter(hash, uprv_deleteUObject);
-    }
-}
-
-inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, 
-                 UErrorCode& status) : hash(0) {
-    init( uhash_hashUnicodeString, keyComp, valueComp, status);
-}
-inline Hashtable::Hashtable(UBool ignoreKeyCase, UErrorCode& status)
- : hash(0)
-{
-    init(ignoreKeyCase ? uhash_hashCaselessUnicodeString
-                        : uhash_hashUnicodeString,
-            ignoreKeyCase ? uhash_compareCaselessUnicodeString
-                        : uhash_compareUnicodeString,
-            NULL,
-            status);
-}
-
-inline Hashtable::Hashtable(UErrorCode& status)
- : hash(0)
-{
-    init(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, status);
-}
-
-inline Hashtable::Hashtable()
- : hash(0)
-{
-    UErrorCode status = U_ZERO_ERROR;
-    init(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, status);
-}
-
-inline Hashtable::~Hashtable() {
-    if (hash != NULL) {
-        uhash_close(hash);
-    }
-}
-
-inline UObjectDeleter *Hashtable::setValueDeleter(UObjectDeleter *fn) {
-    return uhash_setValueDeleter(hash, fn);
-}
-
-inline int32_t Hashtable::count() const {
-    return uhash_count(hash);
-}
-
-inline void* Hashtable::put(const UnicodeString& key, void* value, UErrorCode& status) {
-    return uhash_put(hash, new UnicodeString(key), value, &status);
-}
-
-inline int32_t Hashtable::puti(const UnicodeString& key, int32_t value, UErrorCode& status) {
-    return uhash_puti(hash, new UnicodeString(key), value, &status);
-}
-
-inline void* Hashtable::get(const UnicodeString& key) const {
-    return uhash_get(hash, &key);
-}
-
-inline int32_t Hashtable::geti(const UnicodeString& key) const {
-    return uhash_geti(hash, &key);
-}
-
-inline void* Hashtable::remove(const UnicodeString& key) {
-    return uhash_remove(hash, &key);
-}
-
-inline int32_t Hashtable::removei(const UnicodeString& key) {
-    return uhash_removei(hash, &key);
-}
-
-inline const UHashElement* Hashtable::find(const UnicodeString& key) const {
-    return uhash_find(hash, &key);
-}
-
-inline const UHashElement* Hashtable::nextElement(int32_t& pos) const {
-    return uhash_nextElement(hash, &pos);
-}
-
-inline void Hashtable::removeAll(void) {
-    uhash_removeAll(hash);
-}
-
-inline UKeyComparator* Hashtable::setKeyComparator(UKeyComparator*keyComp){
-    return uhash_setKeyComparator(hash, keyComp);
-}
-    
-inline UValueComparator* Hashtable::setValueComparator(UValueComparator* valueComp){
-    return uhash_setValueComparator(hash, valueComp);
-}
-
-inline UBool Hashtable::equals(const Hashtable& that)const{
-   return uhash_equals(hash, that.hash);
-}
-U_NAMESPACE_END
-
-#endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/icudataver.c b/src/third_party/mozjs/intl/icu/source/common/icudataver.c
deleted file mode 100644
index beb5e73..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/icudataver.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2009-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/icudataver.h"
-#include "unicode/ures.h"
-#include "uresimp.h" /* for ures_getVersionByKey */
-
-U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) {
-    UResourceBundle *icudatares = NULL;
-    
-    if (U_FAILURE(*status)) {
-        return;
-    }
-    
-    if (dataVersionFillin != NULL) {
-        icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status);
-        if (U_SUCCESS(*status)) {
-            ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status);
-        }
-        ures_close(icudatares);
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/icuplug.c b/src/third_party/mozjs/intl/icu/source/common/icuplug.c
deleted file mode 100644
index 0c38be1..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/icuplug.c
+++ /dev/null
@@ -1,843 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2009-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-*  FILE NAME : icuplug.c
-*
-*   Date         Name        Description
-*   10/29/2009   sl          New.
-******************************************************************************
-*/
-
-#include "unicode/icuplug.h"
-#include "icuplugimp.h"
-#include "cstring.h"
-#include "cmemory.h"
-#include "putilimp.h"
-#include "ucln.h"
-#include <stdio.h>
-#ifdef __MVS__  /* defined by z/OS compiler */
-#define _POSIX_SOURCE
-#include <cics.h> /* 12 Nov 2011 JAM iscics() function */
-#endif
-
-#ifndef UPLUG_TRACE
-#define UPLUG_TRACE 0
-#endif
-
-#if UPLUG_TRACE
-#include <stdio.h>
-#define DBG(x) fprintf(stderr, "%s:%d: ",__FILE__,__LINE__); fprintf x
-#endif
-
-/**
- * Internal structure of an ICU plugin. 
- */
-
-struct UPlugData {
-  UPlugEntrypoint  *entrypoint; /**< plugin entrypoint */
-  uint32_t structSize;    /**< initialized to the size of this structure */
-  uint32_t token;         /**< must be U_PLUG_TOKEN */
-  void *lib;              /**< plugin library, or NULL */
-  char libName[UPLUG_NAME_MAX];   /**< library name */
-  char sym[UPLUG_NAME_MAX];        /**< plugin symbol, or NULL */
-  char config[UPLUG_NAME_MAX];     /**< configuration data */
-  void *context;          /**< user context data */
-  char name[UPLUG_NAME_MAX];   /**< name of plugin */
-  UPlugLevel  level; /**< level of plugin */
-  UBool   awaitingLoad; /**< TRUE if the plugin is awaiting a load call */
-  UBool   dontUnload; /**< TRUE if plugin must stay resident (leak plugin and lib) */
-  UErrorCode pluginStatus; /**< status code of plugin */
-};
-
-
-
-#define UPLUG_LIBRARY_INITIAL_COUNT 8
-#define UPLUG_PLUGIN_INITIAL_COUNT 12
-
-/**
- * Remove an item
- * @param list the full list
- * @param listSize the number of entries in the list
- * @param memberSize the size of one member
- * @param itemToRemove the item number of the member
- * @return the new listsize 
- */
-static int32_t uplug_removeEntryAt(void *list, int32_t listSize, int32_t memberSize, int32_t itemToRemove) {
-  uint8_t *bytePtr = (uint8_t *)list;
-    
-  /* get rid of some bad cases first */
-  if(listSize<1) {
-    return listSize;
-  }
-    
-  /* is there anything to move? */
-  if(listSize > itemToRemove+1) {
-    memmove(bytePtr+(itemToRemove*memberSize), bytePtr+((itemToRemove+1)*memberSize), memberSize);
-  }
-    
-  return listSize-1;
-}
-
-
-
-
-#if U_ENABLE_DYLOAD
-/**
- * Library management. Internal. 
- * @internal
- */
-struct UPlugLibrary;
-
-/**
- * Library management. Internal. 
- * @internal
- */
-typedef struct UPlugLibrary {
-  void *lib;                           /**< library ptr */
-  char name[UPLUG_NAME_MAX]; /**< library name */
-  uint32_t ref;                        /**< reference count */
-} UPlugLibrary;
-
-static UPlugLibrary   staticLibraryList[UPLUG_LIBRARY_INITIAL_COUNT];
-static UPlugLibrary * libraryList = staticLibraryList;
-static int32_t libraryCount = 0;
-static int32_t libraryMax = UPLUG_LIBRARY_INITIAL_COUNT;
-
-/**
- * Search for a library. Doesn't lock
- * @param libName libname to search for
- * @return the library's struct
- */
-static int32_t searchForLibraryName(const char *libName) {
-  int32_t i;
-    
-  for(i=0;i<libraryCount;i++) {
-    if(!uprv_strcmp(libName, libraryList[i].name)) {
-      return i;
-    }
-  }
-  return -1;
-}
-
-static int32_t searchForLibrary(void *lib) {
-  int32_t i;
-    
-  for(i=0;i<libraryCount;i++) {
-    if(lib==libraryList[i].lib) {
-      return i;
-    }
-  }
-  return -1;
-}
-
-U_INTERNAL char * U_EXPORT2
-uplug_findLibrary(void *lib, UErrorCode *status) {
-  int32_t libEnt;
-  char *ret = NULL;
-  if(U_FAILURE(*status)) {
-    return NULL;
-  }
-  libEnt = searchForLibrary(lib);
-  if(libEnt!=-1) { 
-    ret = libraryList[libEnt].name;
-  } else {
-    *status = U_MISSING_RESOURCE_ERROR;
-  }
-  return ret;
-}
-
-U_INTERNAL void * U_EXPORT2
-uplug_openLibrary(const char *libName, UErrorCode *status) {
-  int32_t libEntry = -1;
-  void *lib = NULL;
-    
-  if(U_FAILURE(*status)) return NULL;
-
-  libEntry = searchForLibraryName(libName);
-  if(libEntry == -1) {
-    libEntry = libraryCount++;
-    if(libraryCount >= libraryMax) {
-      /* Ran out of library slots. Statically allocated because we can't depend on allocating memory.. */
-      *status = U_MEMORY_ALLOCATION_ERROR;
-#if UPLUG_TRACE
-      DBG((stderr, "uplug_openLibrary() - out of library slots (max %d)\n", libraryMax));
-#endif
-      return NULL;
-    }
-    /* Some operating systems don't want 
-       DL operations from multiple threads. */
-    libraryList[libEntry].lib = uprv_dl_open(libName, status);
-#if UPLUG_TRACE
-    DBG((stderr, "uplug_openLibrary(%s,%s) libEntry %d, lib %p\n", libName, u_errorName(*status), libEntry, lib));
-#endif
-        
-    if(libraryList[libEntry].lib == NULL || U_FAILURE(*status)) {
-      /* cleanup. */
-      libraryList[libEntry].lib = NULL; /* failure with open */
-      libraryList[libEntry].name[0] = 0;
-#if UPLUG_TRACE
-      DBG((stderr, "uplug_openLibrary(%s,%s) libEntry %d, lib %p\n", libName, u_errorName(*status), libEntry, lib));
-#endif
-      /* no need to free - just won't increase the count. */
-      libraryCount--;
-    } else { /* is it still there? */
-      /* link it in */
-      uprv_strncpy(libraryList[libEntry].name,libName,UPLUG_NAME_MAX);
-      libraryList[libEntry].ref=1;
-      lib = libraryList[libEntry].lib;
-    }
-
-  } else {
-    lib = libraryList[libEntry].lib;
-    libraryList[libEntry].ref++;
-  }
-  return lib;
-}
-
-U_INTERNAL void U_EXPORT2
-uplug_closeLibrary(void *lib, UErrorCode *status) {
-  int32_t i;
-    
-#if UPLUG_TRACE
-  DBG((stderr, "uplug_closeLibrary(%p,%s) list %p\n", lib, u_errorName(*status), (void*)libraryList));
-#endif
-  if(U_FAILURE(*status)) return;
-    
-  for(i=0;i<libraryCount;i++) {
-    if(lib==libraryList[i].lib) {
-      if(--(libraryList[i].ref) == 0) {
-        uprv_dl_close(libraryList[i].lib, status);
-        libraryCount = uplug_removeEntryAt(libraryList, libraryCount, sizeof(*libraryList), i);
-      }
-      return;
-    }
-  }
-  *status = U_INTERNAL_PROGRAM_ERROR; /* could not find the entry! */
-}
-
-#endif
-
-static UPlugData pluginList[UPLUG_PLUGIN_INITIAL_COUNT];
-static int32_t pluginCount = 0;
-
-
-
-  
-static int32_t uplug_pluginNumber(UPlugData* d) {
-  UPlugData *pastPlug = &pluginList[pluginCount];
-  if(d<=pluginList) {
-    return 0;
-  } else if(d>=pastPlug) {
-    return pluginCount;
-  } else {
-    return (d-pluginList)/sizeof(pluginList[0]);
-  }
-}
-
-
-U_CAPI UPlugData * U_EXPORT2
-uplug_nextPlug(UPlugData *prior) {
-  if(prior==NULL) {
-    return pluginList;
-  } else {
-    UPlugData *nextPlug = &prior[1];
-    UPlugData *pastPlug = &pluginList[pluginCount];
-    
-    if(nextPlug>=pastPlug) {
-      return NULL;
-    } else {
-      return nextPlug;
-    }
-  }
-}
-
-
-
-/**
- * Call the plugin with some params
- */
-static void uplug_callPlug(UPlugData *plug, UPlugReason reason, UErrorCode *status) {
-  UPlugTokenReturn token;
-  if(plug==NULL||U_FAILURE(*status)) {
-    return;
-  }
-  token = (*(plug->entrypoint))(plug, reason, status);
-  if(token!=UPLUG_TOKEN) {
-    *status = U_INTERNAL_PROGRAM_ERROR;
-  }
-}
-
-
-static void uplug_unloadPlug(UPlugData *plug, UErrorCode *status) {
-  if(plug->awaitingLoad) {  /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/
-    *status = U_INTERNAL_PROGRAM_ERROR;
-    return; 
-  }
-  if(U_SUCCESS(plug->pluginStatus)) {
-    /* Don't unload a plug which has a failing load status - means it didn't actually load. */
-    uplug_callPlug(plug, UPLUG_REASON_UNLOAD, status);
-  }
-}
-
-static void uplug_queryPlug(UPlugData *plug, UErrorCode *status) {
-  if(!plug->awaitingLoad || !(plug->level == UPLUG_LEVEL_UNKNOWN) ) {  /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/
-    *status = U_INTERNAL_PROGRAM_ERROR;
-    return; 
-  }
-  plug->level = UPLUG_LEVEL_INVALID;
-  uplug_callPlug(plug, UPLUG_REASON_QUERY, status);
-  if(U_SUCCESS(*status)) { 
-    if(plug->level == UPLUG_LEVEL_INVALID) {
-      plug->pluginStatus = U_PLUGIN_DIDNT_SET_LEVEL;
-      plug->awaitingLoad = FALSE;
-    }
-  } else {
-    plug->pluginStatus = U_INTERNAL_PROGRAM_ERROR;
-    plug->awaitingLoad = FALSE;
-  }
-}
-
-
-static void uplug_loadPlug(UPlugData *plug, UErrorCode *status) {
-  if(!plug->awaitingLoad || (plug->level < UPLUG_LEVEL_LOW) ) {  /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/
-    *status = U_INTERNAL_PROGRAM_ERROR;
-    return;
-  }
-  uplug_callPlug(plug, UPLUG_REASON_LOAD, status);
-  plug->awaitingLoad = FALSE;
-  if(!U_SUCCESS(*status)) {
-    plug->pluginStatus = U_INTERNAL_PROGRAM_ERROR;
-  }
-}
-
-static UPlugData *uplug_allocateEmptyPlug(UErrorCode *status)
-{
-  UPlugData *plug = NULL;
-
-  if(U_FAILURE(*status)) {
-    return NULL;
-  }
-
-  if(pluginCount == UPLUG_PLUGIN_INITIAL_COUNT) {
-    *status = U_MEMORY_ALLOCATION_ERROR;
-    return NULL;
-  }
-
-  plug = &pluginList[pluginCount++];
-
-  plug->token = UPLUG_TOKEN;
-  plug->structSize = sizeof(UPlugData);
-  plug->name[0]=0;
-  plug->level = UPLUG_LEVEL_UNKNOWN; /* initialize to null state */
-  plug->awaitingLoad = TRUE;
-  plug->dontUnload = FALSE;
-  plug->pluginStatus = U_ZERO_ERROR;
-  plug->libName[0] = 0;
-  plug->config[0]=0;
-  plug->sym[0]=0;
-  plug->lib=NULL;
-  plug->entrypoint=NULL;
-
-
-  return plug;
-}
-
-static UPlugData *uplug_allocatePlug(UPlugEntrypoint *entrypoint, const char *config, void *lib, const char *symName,
-                                     UErrorCode *status) {
-  UPlugData *plug;
-
-  if(U_FAILURE(*status)) {
-    return NULL;
-  }
-
-  plug = uplug_allocateEmptyPlug(status);
-  if(config!=NULL) {
-    uprv_strncpy(plug->config, config, UPLUG_NAME_MAX);
-  } else {
-    plug->config[0] = 0;
-  }
-    
-  if(symName!=NULL) {
-    uprv_strncpy(plug->sym, symName, UPLUG_NAME_MAX);
-  } else {
-    plug->sym[0] = 0;
-  }
-    
-  plug->entrypoint = entrypoint;
-  plug->lib = lib;
-  uplug_queryPlug(plug, status);
-    
-  return plug;
-}
-
-static void uplug_deallocatePlug(UPlugData *plug, UErrorCode *status) {
-  UErrorCode subStatus = U_ZERO_ERROR;
-  if(!plug->dontUnload) {
-#if U_ENABLE_DYLOAD
-    uplug_closeLibrary(plug->lib, &subStatus);
-#endif
-  }
-  plug->lib = NULL;
-  if(U_SUCCESS(*status) && U_FAILURE(subStatus)) {
-    *status = subStatus;
-  }
-  /* shift plugins up and decrement count. */
-  if(U_SUCCESS(*status)) {
-    /* all ok- remove. */
-    pluginCount = uplug_removeEntryAt(pluginList, pluginCount, sizeof(plug[0]), uplug_pluginNumber(plug));
-  } else {
-    /* not ok- leave as a message. */
-    plug->awaitingLoad=FALSE;
-    plug->entrypoint=0;
-    plug->dontUnload=TRUE;
-  }
-}
-
-static void uplug_doUnloadPlug(UPlugData *plugToRemove, UErrorCode *status) {
-  if(plugToRemove != NULL) {
-    uplug_unloadPlug(plugToRemove, status);
-    uplug_deallocatePlug(plugToRemove, status);
-  }
-}
-
-U_CAPI void U_EXPORT2
-uplug_removePlug(UPlugData *plug, UErrorCode *status)  {
-  UPlugData *cursor = NULL;
-  UPlugData *plugToRemove = NULL;
-  if(U_FAILURE(*status)) return;
-    
-  for(cursor=pluginList;cursor!=NULL;) {
-    if(cursor==plug) {
-      plugToRemove = plug;
-      cursor=NULL;
-    } else {
-      cursor = uplug_nextPlug(cursor);
-    }
-  }
-    
-  uplug_doUnloadPlug(plugToRemove, status);
-}
-
-
-
-
-U_CAPI void U_EXPORT2 
-uplug_setPlugNoUnload(UPlugData *data, UBool dontUnload)
-{
-  data->dontUnload = dontUnload;
-}
-
-
-U_CAPI void U_EXPORT2
-uplug_setPlugLevel(UPlugData *data, UPlugLevel level) {
-  data->level = level;
-}
-
-
-U_CAPI UPlugLevel U_EXPORT2
-uplug_getPlugLevel(UPlugData *data) {
-  return data->level;
-}
-
-
-U_CAPI void U_EXPORT2
-uplug_setPlugName(UPlugData *data, const char *name) {
-  uprv_strncpy(data->name, name, UPLUG_NAME_MAX);
-}
-
-
-U_CAPI const char * U_EXPORT2
-uplug_getPlugName(UPlugData *data) {
-  return data->name;
-}
-
-
-U_CAPI const char * U_EXPORT2
-uplug_getSymbolName(UPlugData *data) {
-  return data->sym;
-}
-
-U_CAPI const char * U_EXPORT2
-uplug_getLibraryName(UPlugData *data, UErrorCode *status) {
-  if(data->libName[0]) {
-    return data->libName;
-  } else {
-#if U_ENABLE_DYLOAD
-    return uplug_findLibrary(data->lib, status);
-#else
-    return NULL;
-#endif
-  }
-}
-
-U_CAPI void * U_EXPORT2
-uplug_getLibrary(UPlugData *data) {
-  return data->lib;
-}
-
-U_CAPI void * U_EXPORT2
-uplug_getContext(UPlugData *data) {
-  return data->context;
-}
-
-
-U_CAPI void U_EXPORT2
-uplug_setContext(UPlugData *data, void *context) {
-  data->context = context;
-}
-
-U_CAPI const char* U_EXPORT2
-uplug_getConfiguration(UPlugData *data) {
-  return data->config;
-}
-
-U_INTERNAL UPlugData* U_EXPORT2
-uplug_getPlugInternal(int32_t n) { 
-  if(n <0 || n >= pluginCount) {
-    return NULL;
-  } else { 
-    return &(pluginList[n]);
-  }
-}
-
-
-U_CAPI UErrorCode U_EXPORT2
-uplug_getPlugLoadStatus(UPlugData *plug) {
-  return plug->pluginStatus;
-}
-
-
-
-
-/**
- * Initialize a plugin fron an entrypoint and library - but don't load it.
- */
-static UPlugData* uplug_initPlugFromEntrypointAndLibrary(UPlugEntrypoint *entrypoint, const char *config, void *lib, const char *sym,
-                                                         UErrorCode *status) {
-  UPlugData *plug = NULL;
-
-  plug = uplug_allocatePlug(entrypoint, config, lib, sym, status);
-
-  if(U_SUCCESS(*status)) {
-    return plug;
-  } else {
-    uplug_deallocatePlug(plug, status);
-    return NULL;
-  }
-}
-
-U_CAPI UPlugData* U_EXPORT2
-uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UErrorCode *status) {
-  UPlugData* plug = uplug_initPlugFromEntrypointAndLibrary(entrypoint, config, NULL, NULL, status);
-  uplug_loadPlug(plug, status);
-  return plug;
-}
-
-#if U_ENABLE_DYLOAD
-
-static UPlugData* 
-uplug_initErrorPlug(const char *libName, const char *sym, const char *config, const char *nameOrError, UErrorCode loadStatus, UErrorCode *status)
-{
-  UPlugData *plug = uplug_allocateEmptyPlug(status);
-  if(U_FAILURE(*status)) return NULL;
-
-  plug->pluginStatus = loadStatus;
-  plug->awaitingLoad = FALSE; /* Won't load. */
-  plug->dontUnload = TRUE; /* cannot unload. */
-
-  if(sym!=NULL) {
-    uprv_strncpy(plug->sym, sym, UPLUG_NAME_MAX);
-  }
-
-  if(libName!=NULL) {
-    uprv_strncpy(plug->libName, libName, UPLUG_NAME_MAX);
-  }
-
-  if(nameOrError!=NULL) {
-    uprv_strncpy(plug->name, nameOrError, UPLUG_NAME_MAX);
-  }
-
-  if(config!=NULL) {
-    uprv_strncpy(plug->config, config, UPLUG_NAME_MAX);
-  }
-
-  return plug;
-}
-
-/**
- * Fetch a plugin from DLL, and then initialize it from a library- but don't load it.
- */
-static UPlugData* 
-uplug_initPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) {
-  void *lib = NULL;
-  UPlugData *plug = NULL;
-  if(U_FAILURE(*status)) { return NULL; }
-  lib = uplug_openLibrary(libName, status);
-  if(lib!=NULL && U_SUCCESS(*status)) {
-    UPlugEntrypoint *entrypoint = NULL;
-    entrypoint = (UPlugEntrypoint*)uprv_dlsym_func(lib, sym, status);
-
-    if(entrypoint!=NULL&&U_SUCCESS(*status)) {
-      plug = uplug_initPlugFromEntrypointAndLibrary(entrypoint, config, lib, sym, status);
-      if(plug!=NULL&&U_SUCCESS(*status)) {
-        plug->lib = lib; /* plug takes ownership of library */
-        lib = NULL; /* library is now owned by plugin. */
-      }
-    } else {
-      UErrorCode subStatus = U_ZERO_ERROR;
-      plug = uplug_initErrorPlug(libName,sym,config,"ERROR: Could not load entrypoint",(lib==NULL)?U_MISSING_RESOURCE_ERROR:*status,&subStatus);
-    }
-    if(lib!=NULL) { /* still need to close the lib */
-      UErrorCode subStatus = U_ZERO_ERROR;
-      uplug_closeLibrary(lib, &subStatus); /* don't care here */
-    }
-  } else {
-    UErrorCode subStatus = U_ZERO_ERROR;
-    plug = uplug_initErrorPlug(libName,sym,config,"ERROR: could not load library",(lib==NULL)?U_MISSING_RESOURCE_ERROR:*status,&subStatus);
-  }
-  return plug;
-}
-
-U_CAPI UPlugData* U_EXPORT2
-uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) { 
-  UPlugData *plug = NULL;
-  if(U_FAILURE(*status)) { return NULL; }
-  plug = uplug_initPlugFromLibrary(libName, sym, config, status);
-  uplug_loadPlug(plug, status);
-
-  return plug;
-}
-
-#endif
-
-U_CAPI UPlugLevel U_EXPORT2 uplug_getCurrentLevel() {
-  if(cmemory_inUse()) {
-    return UPLUG_LEVEL_HIGH;
-  } else {
-    return UPLUG_LEVEL_LOW;
-  }
-}
-
-static UBool U_CALLCONV uplug_cleanup(void)
-{
-  int32_t i;
-    
-  UPlugData *pluginToRemove;
-  /* cleanup plugs */
-  for(i=0;i<pluginCount;i++) {
-    UErrorCode subStatus = U_ZERO_ERROR;
-    pluginToRemove = &pluginList[i];
-    /* unload and deallocate */
-    uplug_doUnloadPlug(pluginToRemove, &subStatus);
-  }
-  /* close other held libs? */
-  return TRUE;
-}
-
-#if U_ENABLE_DYLOAD
-
-static void uplug_loadWaitingPlugs(UErrorCode *status) {
-  int32_t i;
-  UPlugLevel currentLevel = uplug_getCurrentLevel();
-    
-  if(U_FAILURE(*status)) {
-    return;
-  }
-#if UPLUG_TRACE
-  DBG((stderr,  "uplug_loadWaitingPlugs() Level: %d\n", currentLevel));
-#endif
-  /* pass #1: low level plugs */
-  for(i=0;i<pluginCount;i++) {
-    UErrorCode subStatus = U_ZERO_ERROR;
-    UPlugData *pluginToLoad = &pluginList[i];
-    if(pluginToLoad->awaitingLoad) {
-      if(pluginToLoad->level == UPLUG_LEVEL_LOW) {
-        if(currentLevel > UPLUG_LEVEL_LOW) {
-          pluginToLoad->pluginStatus = U_PLUGIN_TOO_HIGH;
-        } else {
-          UPlugLevel newLevel;
-          uplug_loadPlug(pluginToLoad, &subStatus);
-          newLevel = uplug_getCurrentLevel();
-          if(newLevel > currentLevel) {
-            pluginToLoad->pluginStatus = U_PLUGIN_CHANGED_LEVEL_WARNING;
-            currentLevel = newLevel;
-          }
-        }
-        pluginToLoad->awaitingLoad = FALSE;
-      } 
-    }
-  }    
-  for(i=0;i<pluginCount;i++) {
-    UErrorCode subStatus = U_ZERO_ERROR;
-    UPlugData *pluginToLoad = &pluginList[i];
-        
-    if(pluginToLoad->awaitingLoad) {
-      if(pluginToLoad->level == UPLUG_LEVEL_INVALID) { 
-        pluginToLoad->pluginStatus = U_PLUGIN_DIDNT_SET_LEVEL;
-      } else if(pluginToLoad->level == UPLUG_LEVEL_UNKNOWN) {
-        pluginToLoad->pluginStatus = U_INTERNAL_PROGRAM_ERROR;
-      } else {
-        uplug_loadPlug(pluginToLoad, &subStatus);
-      }
-      pluginToLoad->awaitingLoad = FALSE;
-    }
-  }
-    
-#if UPLUG_TRACE
-  DBG((stderr,  " Done Loading Plugs. Level: %d\n", (int32_t)uplug_getCurrentLevel()));
-#endif
-}
-
-/* Name of the plugin config file */
-static char plugin_file[2048] = "";
-#endif
-
-U_INTERNAL const char* U_EXPORT2
-uplug_getPluginFile() {
-#if U_ENABLE_DYLOAD
-  return plugin_file;
-#else
-  return NULL;
-#endif
-}
-
-
-U_CAPI void U_EXPORT2
-uplug_init(UErrorCode *status) {
-#if !U_ENABLE_DYLOAD
-  (void)status; /* unused */
-#else
-  const char *plugin_dir;
-
-  if(U_FAILURE(*status)) return;
-  plugin_dir = getenv("ICU_PLUGINS");
-
-#if defined(DEFAULT_ICU_PLUGINS) 
-  if(plugin_dir == NULL || !*plugin_dir) {
-    plugin_dir = DEFAULT_ICU_PLUGINS;
-  }
-#endif
-
-#if UPLUG_TRACE
-  DBG((stderr, "ICU_PLUGINS=%s\n", plugin_dir));
-#endif
-
-  if(plugin_dir != NULL && *plugin_dir) {
-    FILE *f;
-        
-        
-#ifdef OS390BATCH
-/* There are potentially a lot of ways to implement a plugin directory on OS390/zOS  */
-/* Keeping in mind that unauthorized file access is logged, monitored, and enforced  */
-/* I've chosen to open a DDNAME if BATCH and leave it alone for (presumably) UNIX    */
-/* System Services.  Alternative techniques might be allocating a member in          */
-/* SYS1.PARMLIB or setting an environment variable "ICU_PLUGIN_PATH" (?).  The       */
-/* DDNAME can be connected to a file in the HFS if need be.                          */
-
-    uprv_strncpy(plugin_file,"//DD:ICUPLUG", 2047);        /* JAM 20 Oct 2011 */
-#else
-    uprv_strncpy(plugin_file, plugin_dir, 2047);
-    uprv_strncat(plugin_file, U_FILE_SEP_STRING,2047);
-    uprv_strncat(plugin_file, "icuplugins",2047);
-    uprv_strncat(plugin_file, U_ICU_VERSION_SHORT ,2047);
-    uprv_strncat(plugin_file, ".txt" ,2047);
-#endif
-        
-#if UPLUG_TRACE
-    DBG((stderr, "pluginfile= %s\n", plugin_file));
-#endif
-        
-#ifdef __MVS__
-    if (iscics()) /* 12 Nov 2011 JAM */
-    {
-        f = NULL;
-    }
-    else
-#endif
-    {
-         f = fopen(plugin_file, "r");
-    }
-
-    if(f != NULL) {
-      char linebuf[1024];
-      char *p, *libName=NULL, *symName=NULL, *config=NULL;
-      int32_t line = 0;
-            
-            
-      while(fgets(linebuf,1023,f)) {
-        line++;
-
-        if(!*linebuf || *linebuf=='#') {
-          continue;
-        } else {
-          p = linebuf;
-          while(*p&&isspace((int)*p))
-            p++;
-          if(!*p || *p=='#') continue;
-          libName = p;
-          while(*p&&!isspace((int)*p)) {
-            p++;
-          }
-          if(!*p || *p=='#') continue; /* no tab after libname */
-          *p=0; /* end of libname */
-          p++;
-          while(*p&&isspace((int)*p)) {
-            p++;
-          }
-          if(!*p||*p=='#') continue; /* no symname after libname +tab */
-          symName = p;
-          while(*p&&!isspace((int)*p)) {
-            p++;
-          }
-                    
-          if(*p) { /* has config */
-            *p=0;
-            ++p;
-            while(*p&&isspace((int)*p)) {
-              p++;
-            }
-            if(*p) {
-              config = p;
-            }
-          }
-                    
-          /* chop whitespace at the end of the config */
-          if(config!=NULL&&*config!=0) {
-            p = config+strlen(config);
-            while(p>config&&isspace((int)*(--p))) {
-              *p=0;
-            }
-          }
-                
-          /* OK, we're good. */
-          { 
-            UErrorCode subStatus = U_ZERO_ERROR;
-            UPlugData *plug = uplug_initPlugFromLibrary(libName, symName, config, &subStatus);
-            if(U_FAILURE(subStatus) && U_SUCCESS(*status)) {
-              *status = subStatus;
-            }
-#if UPLUG_TRACE
-            DBG((stderr, "PLUGIN libName=[%s], sym=[%s], config=[%s]\n", libName, symName, config));
-            DBG((stderr, " -> %p, %s\n", (void*)plug, u_errorName(subStatus)));
-#else
-            (void)plug; /* unused */
-#endif
-          }
-        }
-      }
-      fclose(f);
-    } else {
-#if UPLUG_TRACE
-      DBG((stderr, "Can't open plugin file %s\n", plugin_file));
-#endif
-    }
-  }
-  uplug_loadWaitingPlugs(status);
-#endif /* U_ENABLE_DYLOAD */
-  ucln_registerCleanup(UCLN_UPLUG, uplug_cleanup);
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/icuplugimp.h b/src/third_party/mozjs/intl/icu/source/common/icuplugimp.h
deleted file mode 100644
index 53b9c0c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/icuplugimp.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-*  FILE NAME : icuplugimp.h
-* 
-*  Internal functions for the ICU plugin system
-*
-*   Date         Name        Description
-*   10/29/2009   sl          New.
-******************************************************************************
-*/
-
-
-#ifndef ICUPLUGIMP_H
-#define ICUPLUGIMP_H
-
-#include "unicode/icuplug.h"
-
-/*========================*/
-/** @{ Library Manipulation  
- */
-
-/**
- * Open a library, adding a reference count if needed.
- * @param libName library name to load
- * @param status error code
- * @return the library pointer, or NULL
- * @internal internal use only
- */
-U_INTERNAL void * U_EXPORT2
-uplug_openLibrary(const char *libName, UErrorCode *status);
-
-/**
- * Close a library, if its reference count is 0
- * @param lib the library to close
- * @param status error code
- * @internal internal use only
- */
-U_INTERNAL void U_EXPORT2
-uplug_closeLibrary(void *lib, UErrorCode *status);
-
-/**
- * Get a library's name, or NULL if not found.
- * @param lib the library's name
- * @param status error code
- * @return the library name, or NULL if not found.
- * @internal internal use only
- */
-U_INTERNAL  char * U_EXPORT2
-uplug_findLibrary(void *lib, UErrorCode *status);
-
-/** @} */
-
-/*========================*/
-/** {@ ICU Plugin internal interfaces
- */
-
-/**
- * Initialize the plugins 
- * @param status error result
- * @internal - Internal use only.
- */
-U_INTERNAL void U_EXPORT2
-uplug_init(UErrorCode *status);
-
-/**
- * Get raw plug N
- * @internal - Internal use only
- */ 
-U_INTERNAL UPlugData* U_EXPORT2
-uplug_getPlugInternal(int32_t n);
-
-/**
- * Get the name of the plugin file. 
- * @internal - Internal use only.
- */
-U_INTERNAL const char* U_EXPORT2
-uplug_getPluginFile(void);
-
-/** @} */
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/listformatter.cpp b/src/third_party/mozjs/intl/icu/source/common/listformatter.cpp
deleted file mode 100644
index 6a6e986..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/listformatter.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  listformatter.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2012aug27
-*   created by: Umesh P. Nair
-*/
-
-#include "unicode/listformatter.h"
-#include "mutex.h"
-#include "hash.h"
-#include "cstring.h"
-#include "ulocimp.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-
-U_NAMESPACE_BEGIN
-
-static Hashtable* listPatternHash = NULL;
-static UMutex listFormatterMutex = U_MUTEX_INITIALIZER;
-static UChar FIRST_PARAMETER[] = { 0x7b, 0x30, 0x7d };  // "{0}"
-static UChar SECOND_PARAMETER[] = { 0x7b, 0x31, 0x7d };  // "{0}"
-
-U_CDECL_BEGIN
-static UBool U_CALLCONV uprv_listformatter_cleanup() {
-    delete listPatternHash;
-    listPatternHash = NULL;
-    return TRUE;
-}
-
-static void U_CALLCONV
-uprv_deleteListFormatData(void *obj) {
-    delete static_cast<ListFormatData *>(obj);
-}
-
-U_CDECL_END
-
-void ListFormatter::initializeHash(UErrorCode& errorCode) {
-    if (U_FAILURE(errorCode)) {
-        return;
-    }
-
-    listPatternHash = new Hashtable();
-    if (listPatternHash == NULL) {
-        errorCode = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-
-    listPatternHash->setValueDeleter(uprv_deleteListFormatData);
-    ucln_common_registerCleanup(UCLN_COMMON_LIST_FORMATTER, uprv_listformatter_cleanup);
-
-    addDataToHash("af", "{0} en {1}", "{0}, {1}", "{0}, {1}", "{0} en {1}", errorCode);
-    addDataToHash("am", "{0} \\u12a5\\u1293 {1}", "{0}, {1}", "{0}, {1}", "{0}, \\u12a5\\u1293 {1}", errorCode);
-    addDataToHash("ar", "{0} \\u0648 {1}", "{0}\\u060c {1}", "{0}\\u060c {1}", "{0}\\u060c \\u0648 {1}", errorCode);
-    addDataToHash("bg", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
-    addDataToHash("bn", "{0} \\u098f\\u09ac\\u0982 {1}", "{0}, {1}", "{0}, {1}", "{0}, \\u098f\\u09ac\\u0982 {1}", errorCode);
-    addDataToHash("bs", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
-    addDataToHash("ca", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
-    addDataToHash("cs", "{0} a {1}", "{0}, {1}", "{0}, {1}", "{0} a {1}", errorCode);
-    addDataToHash("da", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
-    addDataToHash("de", "{0} und {1}", "{0}, {1}", "{0}, {1}", "{0} und {1}", errorCode);
-    addDataToHash("ee", "{0} kple {1}", "{0}, {1}", "{0}, {1}", "{0}, kple {1}", errorCode);
-    addDataToHash("el", "{0} \\u03ba\\u03b1\\u03b9 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u03ba\\u03b1\\u03b9 {1}", errorCode);
-    addDataToHash("en", "{0} and {1}", "{0}, {1}", "{0}, {1}", "{0}, and {1}", errorCode);
-    addDataToHash("es", "{0} y {1}", "{0}, {1}", "{0}, {1}", "{0} y {1}", errorCode);
-    addDataToHash("et", "{0} ja {1}", "{0}, {1}", "{0}, {1}", "{0} ja {1}", errorCode);
-    addDataToHash("eu", "{0} eta {1}", "{0}, {1}", "{0}, {1}", "{0} eta {1}", errorCode);
-    addDataToHash("fa", "{0} \\u0648 {1}", "{0}\\u060c\\u200f {1}", "{0}\\u060c\\u200f {1}", "{0}\\u060c \\u0648 {1}", errorCode);
-    addDataToHash("fi", "{0} ja {1}", "{0}, {1}", "{0}, {1}", "{0} ja {1}", errorCode);
-    addDataToHash("fil", "{0} at {1}", "{0}, {1}", "{0}, {1}", "{0} at {1}", errorCode);
-    addDataToHash("fo", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
-    addDataToHash("fr", "{0} et {1}", "{0}, {1}", "{0}, {1}", "{0} et {1}", errorCode);
-    addDataToHash("fur", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0} e {1}", errorCode);
-    addDataToHash("gd", "{0} agus {1}", "{0}, {1}", "{0}, {1}", "{0}, agus {1}", errorCode);
-    addDataToHash("gl", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0} e {1}", errorCode);
-    addDataToHash("gsw", "{0} und {1}", "{0}, {1}", "{0}, {1}", "{0} und {1}", errorCode);
-    addDataToHash("gu", "{0} \\u0a85\\u0aa8\\u0ac7 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0a85\\u0aa8\\u0ac7 {1}", errorCode);
-    addDataToHash("he", "{0} \\u05d5-{1}", "{0}, {1}", "{0}, {1}", "{0} \\u05d5-{1}", errorCode);
-    addDataToHash("hi", "{0} \\u0914\\u0930 {1}", "{0}, {1}", "{0}, {1}", "{0}, \\u0914\\u0930 {1}", errorCode);
-    addDataToHash("hr", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
-    addDataToHash("hu", "{0} \\u00e9s {1}", "{0}, {1}", "{0}, {1}", "{0} \\u00e9s {1}", errorCode);
-    addDataToHash("id", "{0} dan {1}", "{0}, {1}", "{0}, {1}", "{0}, dan {1}", errorCode);
-    addDataToHash("is", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
-    addDataToHash("it", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0}, e {1}", errorCode);
-    addDataToHash("ja", "{0}\\u3001{1}", "{0}\\u3001{1}", "{0}\\u3001{1}", "{0}\\u3001{1}", errorCode);
-    addDataToHash("ka", "{0} \\u10d3\\u10d0 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u10d3\\u10d0 {1}", errorCode);
-    addDataToHash("kea", "{0} y {1}", "{0}, {1}", "{0}, {1}", "{0} y {1}", errorCode);
-    addDataToHash("kl", "{0} aamma {1}", "{0} aamma {1}", "{0}, {1}", "{0}, {1}", errorCode);
-    addDataToHash("kn", "{0} \\u0cae\\u0ca4\\u0ccd\\u0ca4\\u0cc1 {1}", "{0}, {1}", "{0}, {1}",
-                  "{0}, \\u0cae\\u0ca4\\u0ccd\\u0ca4\\u0cc1 {1}", errorCode);
-    addDataToHash("ko", "{0} \\ubc0f {1}", "{0}, {1}", "{0}, {1}", "{0} \\ubc0f {1}", errorCode);
-    addDataToHash("ksh", "{0} un {1}", "{0}, {1}", "{0}, {1}", "{0} un {1}", errorCode);
-    addDataToHash("lt", "{0} ir {1}", "{0}, {1}", "{0}, {1}", "{0} ir {1}", errorCode);
-    addDataToHash("lv", "{0} un {1}", "{0}, {1}", "{0}, {1}", "{0} un {1}", errorCode);
-    addDataToHash("ml", "{0} \\u0d15\\u0d42\\u0d1f\\u0d3e\\u0d24\\u0d46 {1}", "{0}, {1}", "{0}, {1}",
-                  "{0}, {1} \\u0d0e\\u0d28\\u0d4d\\u0d28\\u0d3f\\u0d35", errorCode);
-    addDataToHash("mr", "{0} \\u0906\\u0923\\u093f {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0906\\u0923\\u093f {1}", errorCode);
-    addDataToHash("ms", "{0} dan {1}", "{0}, {1}", "{0}, {1}", "{0}, dan {1}", errorCode);
-    addDataToHash("nb", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
-    addDataToHash("nl", "{0} en {1}", "{0}, {1}", "{0}, {1}", "{0} en {1}", errorCode);
-    addDataToHash("nn", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
-    addDataToHash("pl", "{0} i {1}", "{0}; {1}", "{0}; {1}", "{0} i {1}", errorCode);
-    addDataToHash("pt", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0} e {1}", errorCode);
-    addDataToHash("ro", "{0} \\u015fi {1}", "{0}, {1}", "{0}, {1}", "{0} \\u015fi {1}", errorCode);
-    addDataToHash("", "{0}, {1}", "{0}, {1}", "{0}, {1}", "{0}, {1}", errorCode); // root
-    addDataToHash("ru", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
-    addDataToHash("se", "{0} ja {1}", "{0}, {1}", "{0}, {1}", "{0} ja {1}", errorCode);
-    addDataToHash("sk", "{0} a {1}", "{0}, {1}", "{0}, {1}", "{0} a {1}", errorCode);
-    addDataToHash("sl", "{0} in {1}", "{0}, {1}", "{0}, {1}", "{0} in {1}", errorCode);
-    addDataToHash("sr", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
-    addDataToHash("sr_Cyrl", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
-    addDataToHash("sr_Latn", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
-    addDataToHash("sv", "{0} och {1}", "{0}, {1}", "{0}, {1}", "{0} och {1}", errorCode);
-    addDataToHash("sw", "{0} na {1}", "{0}, {1}", "{0}, {1}", "{0}, na {1}", errorCode);
-    addDataToHash("ta", "{0} \\u0bae\\u0bb1\\u0bcd\\u0bb1\\u0bc1\\u0bae\\u0bcd {1}", "{0}, {1}", "{0}, {1}",
-                  "{0} \\u0bae\\u0bb1\\u0bcd\\u0bb1\\u0bc1\\u0bae\\u0bcd {1}", errorCode);
-    addDataToHash("te", "{0} \\u0c2e\\u0c30\\u0c3f\\u0c2f\\u0c41 {1}", "{0}, {1}", "{0}, {1}",
-                  "{0} \\u0c2e\\u0c30\\u0c3f\\u0c2f\\u0c41 {1}", errorCode);
-    addDataToHash("th", "{0}\\u0e41\\u0e25\\u0e30{1}", "{0} {1}", "{0} {1}", "{0} \\u0e41\\u0e25\\u0e30{1}", errorCode);
-    addDataToHash("tr", "{0} ve {1}", "{0}, {1}", "{0}, {1}", "{0} ve {1}", errorCode);
-    addDataToHash("uk", "{0} \\u0442\\u0430 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0442\\u0430 {1}", errorCode);
-    addDataToHash("ur", "{0} \\u0627\\u0648\\u0631 {1}", "{0}\\u060c {1}", "{0}\\u060c {1}",
-                  "{0}\\u060c \\u0627\\u0648\\u0631 {1}", errorCode);
-    addDataToHash("vi", "{0} v\\u00e0 {1}", "{0}, {1}", "{0}, {1}", "{0} v\\u00e0 {1}", errorCode);
-    addDataToHash("wae", "{0} und {1}", "{0}, {1}", "{0}, {1}", "{0} und {1}", errorCode);
-    addDataToHash("zh", "{0}\\u548c{1}", "{0}\\u3001{1}", "{0}\\u3001{1}", "{0}\\u548c{1}", errorCode);
-    addDataToHash("zu", "I-{0} ne-{1}", "{0}, {1}", "{0}, {1}", "{0}, no-{1}", errorCode);
-}
-
-void ListFormatter::addDataToHash(
-    const char* locale,
-    const char* two,
-    const char* start,
-    const char* middle,
-    const char* end,
-    UErrorCode& errorCode) {
-    if (U_FAILURE(errorCode)) {
-        return;
-    }
-    UnicodeString key(locale, -1, US_INV);
-    ListFormatData* value = new ListFormatData(
-        UnicodeString(two, -1, US_INV).unescape(),
-        UnicodeString(start, -1, US_INV).unescape(),
-        UnicodeString(middle, -1, US_INV).unescape(),
-        UnicodeString(end, -1, US_INV).unescape());
-
-    if (value == NULL) {
-        errorCode = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    listPatternHash->put(key, value, errorCode);
-}
-
-const ListFormatData* ListFormatter::getListFormatData(
-        const Locale& locale, UErrorCode& errorCode) {
-    if (U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    {
-        Mutex m(&listFormatterMutex);
-        if (listPatternHash == NULL) {
-            initializeHash(errorCode);
-            if (U_FAILURE(errorCode)) {
-                return NULL;
-            }
-        }
-    }
-
-    UnicodeString key(locale.getName(), -1, US_INV);
-    return static_cast<const ListFormatData*>(listPatternHash->get(key));
-}
-
-ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) {
-    Locale locale;  // The default locale.
-    return createInstance(locale, errorCode);
-}
-
-ListFormatter* ListFormatter::createInstance(const Locale& locale, UErrorCode& errorCode) {
-    Locale tempLocale = locale;
-    for (;;) {
-        const ListFormatData* listFormatData = getListFormatData(tempLocale, errorCode);
-        if (U_FAILURE(errorCode)) {
-            return NULL;
-        }
-        if (listFormatData != NULL) {
-            ListFormatter* p = new ListFormatter(*listFormatData);
-            if (p == NULL) {
-                errorCode = U_MEMORY_ALLOCATION_ERROR;
-                return NULL;
-            }
-            return p;
-        }
-        errorCode = U_ZERO_ERROR;
-        Locale correctLocale;
-        getFallbackLocale(tempLocale, correctLocale, errorCode);
-        if (U_FAILURE(errorCode)) {
-            return NULL;
-        }
-        if (correctLocale.isBogus()) {
-            return createInstance(Locale::getRoot(), errorCode);
-        }
-        tempLocale = correctLocale;
-    }
-}
-
-ListFormatter::ListFormatter(const ListFormatData& listFormatterData) : data(listFormatterData) {
-}
-
-ListFormatter::~ListFormatter() {}
-
-void ListFormatter::getFallbackLocale(const Locale& in, Locale& out, UErrorCode& errorCode) {
-    if (uprv_strcmp(in.getName(), "zh_TW") == 0) {
-        out = Locale::getTraditionalChinese();
-    } else {
-        const char* localeString = in.getName();
-        const char* extStart = locale_getKeywordsStart(localeString);
-        if (extStart == NULL) {
-            extStart = uprv_strchr(localeString, 0);
-        }
-        const char* last = extStart;
-
-        // TODO: Check whether uloc_getParent() will work here.
-        while (last > localeString && *(last - 1) != '_') {
-            --last;
-        }
-
-        // Truncate empty segment.
-        while (last > localeString) {
-            if (*(last-1) != '_') {
-                break;
-            }
-            --last;
-        }
-
-        size_t localePortionLen = last - localeString;
-        CharString fullLocale;
-        fullLocale.append(localeString, localePortionLen, errorCode).append(extStart, errorCode);
-
-        if (U_FAILURE(errorCode)) {
-            return;
-        }
-        out = Locale(fullLocale.data());
-    }
-}
-
-UnicodeString& ListFormatter::format(const UnicodeString items[], int32_t nItems,
-                      UnicodeString& appendTo, UErrorCode& errorCode) const {
-    if (U_FAILURE(errorCode)) {
-        return appendTo;
-    }
-
-    if (nItems > 0) {
-        UnicodeString newString = items[0];
-        if (nItems == 2) {
-            addNewString(data.twoPattern, newString, items[1], errorCode);
-        } else if (nItems > 2) {
-            addNewString(data.startPattern, newString, items[1], errorCode);
-            int i;
-            for (i = 2; i < nItems - 1; ++i) {
-                addNewString(data.middlePattern, newString, items[i], errorCode);
-            }
-            addNewString(data.endPattern, newString, items[nItems - 1], errorCode);
-        }
-        if (U_SUCCESS(errorCode)) {
-            appendTo += newString;
-        }
-    }
-    return appendTo;
-}
-
-/**
- * Joins originalString and nextString using the pattern pat and puts the result in
- * originalString.
- */
-void ListFormatter::addNewString(const UnicodeString& pat, UnicodeString& originalString,
-                                 const UnicodeString& nextString, UErrorCode& errorCode) const {
-    if (U_FAILURE(errorCode)) {
-        return;
-    }
-
-    int32_t p0Offset = pat.indexOf(FIRST_PARAMETER, 3, 0);
-    if (p0Offset < 0) {
-        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    int32_t p1Offset = pat.indexOf(SECOND_PARAMETER, 3, 0);
-    if (p1Offset < 0) {
-        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    int32_t i, j;
-
-    const UnicodeString* firstString;
-    const UnicodeString* secondString;
-    if (p0Offset < p1Offset) {
-        i = p0Offset;
-        j = p1Offset;
-        firstString = &originalString;
-        secondString = &nextString;
-    } else {
-        i = p1Offset;
-        j = p0Offset;
-        firstString = &nextString;
-        secondString = &originalString;
-    }
-
-    UnicodeString result = UnicodeString(pat, 0, i) + *firstString;
-    result += UnicodeString(pat, i+3, j-i-3);
-    result += *secondString;
-    result += UnicodeString(pat, j+3);
-    originalString = result;
-}
-
-UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(ListFormatter)
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/localsvc.h b/src/third_party/mozjs/intl/icu/source/common/localsvc.h
deleted file mode 100644
index 67e5a84..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/localsvc.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-***************************************************************************
-*   Copyright (C) 2006 International Business Machines Corporation        *
-*   and others. All rights reserved.                                      *
-***************************************************************************
-*/
-
-#ifndef LOCALSVC_H
-#define LOCALSVC_H
-
-#include "unicode/utypes.h"
-
-#if U_LOCAL_SERVICE_HOOK
-/**
- * Prototype for user-supplied service hook. This function is expected to return
- * a type of factory object specific to the requested service.
- * 
- * @param what service-specific string identifying the specific user hook
- * @param status error status
- * @return a service-specific hook, or NULL on failure.
- */
-U_CAPI void* uprv_svc_hook(const char *what, UErrorCode *status);
-#endif
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/locavailable.cpp b/src/third_party/mozjs/intl/icu/source/common/locavailable.cpp
deleted file mode 100644
index c8baf75..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locavailable.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1997-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  locavailable.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010feb25
-*   created by: Markus W. Scherer
-*
-*   Code for available locales, separated out from other .cpp files
-*   that then do not depend on resource bundle code and res_index bundles.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/locid.h"
-#include "unicode/uloc.h"
-#include "unicode/ures.h"
-#include "cmemory.h"
-#include "ucln_cmn.h"
-#include "umutex.h"
-#include "uresimp.h"
-
-// C++ API ----------------------------------------------------------------- ***
-
-static icu::Locale*  availableLocaleList = NULL;
-static int32_t  availableLocaleListCount;
-
-U_CDECL_BEGIN
-
-static UBool U_CALLCONV locale_available_cleanup(void)
-{
-    U_NAMESPACE_USE
-
-    if (availableLocaleList) {
-        delete []availableLocaleList;
-        availableLocaleList = NULL;
-    }
-    availableLocaleListCount = 0;
-
-    return TRUE;
-}
-
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-const Locale* U_EXPORT2
-Locale::getAvailableLocales(int32_t& count)
-{
-    // for now, there is a hardcoded list, so just walk through that list and set it up.
-    UBool needInit;
-    UMTX_CHECK(NULL, availableLocaleList == NULL, needInit);
-
-    if (needInit) {
-        int32_t locCount = uloc_countAvailable();
-        Locale *newLocaleList = 0;
-        if(locCount) {
-           newLocaleList = new Locale[locCount];
-        }
-        if (newLocaleList == NULL) {
-            count = 0;
-            return NULL;
-        }
-
-        count = locCount;
-
-        while(--locCount >= 0) {
-            newLocaleList[locCount].setFromPOSIXID(uloc_getAvailable(locCount));
-        }
-
-        umtx_lock(NULL);
-        if(availableLocaleList == 0) {
-            availableLocaleListCount = count;
-            availableLocaleList = newLocaleList;
-            newLocaleList = NULL;
-            ucln_common_registerCleanup(UCLN_COMMON_LOCALE_AVAILABLE, locale_available_cleanup);
-        }
-        umtx_unlock(NULL);
-        delete []newLocaleList;
-    }
-    count = availableLocaleListCount;
-    return availableLocaleList;
-}
-
-
-U_NAMESPACE_END
-
-// C API ------------------------------------------------------------------- ***
-
-U_NAMESPACE_USE
-
-/* ### Constants **************************************************/
-
-/* These strings describe the resources we attempt to load from
- the locale ResourceBundle data file.*/
-static const char _kIndexLocaleName[] = "res_index";
-static const char _kIndexTag[]        = "InstalledLocales";
-
-static char** _installedLocales = NULL;
-static int32_t _installedLocalesCount = 0;
-
-/* ### Get available **************************************************/
-
-static UBool U_CALLCONV uloc_cleanup(void) {
-    char ** temp;
-
-    if (_installedLocales) {
-        temp = _installedLocales;
-        _installedLocales = NULL;
-
-        _installedLocalesCount = 0;
-
-        uprv_free(temp);
-    }
-    return TRUE;
-}
-
-static void _load_installedLocales()
-{
-    UBool   localesLoaded;
-
-    UMTX_CHECK(NULL, _installedLocales != NULL, localesLoaded);
-    
-    if (localesLoaded == FALSE) {
-        UResourceBundle *indexLocale = NULL;
-        UResourceBundle installed;
-        UErrorCode status = U_ZERO_ERROR;
-        char ** temp;
-        int32_t i = 0;
-        int32_t localeCount;
-        
-        ures_initStackObject(&installed);
-        indexLocale = ures_openDirect(NULL, _kIndexLocaleName, &status);
-        ures_getByKey(indexLocale, _kIndexTag, &installed, &status);
-        
-        if(U_SUCCESS(status)) {
-            localeCount = ures_getSize(&installed);
-            temp = (char **) uprv_malloc(sizeof(char*) * (localeCount+1));
-            /* Check for null pointer */
-            if (temp != NULL) {
-                ures_resetIterator(&installed);
-                while(ures_hasNext(&installed)) {
-                    ures_getNextString(&installed, NULL, (const char **)&temp[i++], &status);
-                }
-                temp[i] = NULL;
-
-                umtx_lock(NULL);
-                if (_installedLocales == NULL)
-                {
-                    _installedLocalesCount = localeCount;
-                    _installedLocales = temp;
-                    temp = NULL;
-                    ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
-                } 
-                umtx_unlock(NULL);
-
-                uprv_free(temp);
-            }
-        }
-        ures_close(&installed);
-        ures_close(indexLocale);
-    }
-}
-
-U_CAPI const char* U_EXPORT2
-uloc_getAvailable(int32_t offset) 
-{
-    
-    _load_installedLocales();
-    
-    if (offset > _installedLocalesCount)
-        return NULL;
-    return _installedLocales[offset];
-}
-
-U_CAPI int32_t  U_EXPORT2
-uloc_countAvailable()
-{
-    _load_installedLocales();
-    return _installedLocalesCount;
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/locbased.cpp b/src/third_party/mozjs/intl/icu/source/common/locbased.cpp
deleted file mode 100644
index e96b9f7..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locbased.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2004, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: January 16 2004
-* Since: ICU 2.8
-**********************************************************************
-*/
-#include "locbased.h"
-#include "cstring.h"
-
-U_NAMESPACE_BEGIN
-
-Locale LocaleBased::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
-    const char* id = getLocaleID(type, status);
-    return Locale((id != 0) ? id : "");
-}
-
-const char* LocaleBased::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-    switch(type) {
-    case ULOC_VALID_LOCALE:
-        return valid;
-    case ULOC_ACTUAL_LOCALE:
-        return actual;
-    default:
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-}
-
-void LocaleBased::setLocaleIDs(const char* validID, const char* actualID) {
-    if (validID != 0) {
-        uprv_strcpy(valid, validID);
-    }
-    if (actualID != 0) {
-        uprv_strcpy(actual, actualID);
-    }
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/locbased.h b/src/third_party/mozjs/intl/icu/source/common/locbased.h
deleted file mode 100644
index 366b151..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locbased.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2004, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: January 16 2004
-* Since: ICU 2.8
-**********************************************************************
-*/
-#ifndef LOCBASED_H
-#define LOCBASED_H
-
-#include "unicode/locid.h"
-#include "unicode/uobject.h"
-
-/**
- * Macro to declare a locale LocaleBased wrapper object for the given
- * object, which must have two members named `validLocale' and
- * `actualLocale'.
- */
-#define U_LOCALE_BASED(varname, objname) \
-  LocaleBased varname((objname).validLocale, (objname).actualLocale);
-
-U_NAMESPACE_BEGIN
-
-/**
- * A utility class that unifies the implementation of getLocale() by
- * various ICU services.  This class is likely to be removed in the
- * ICU 3.0 time frame in favor of an integrated approach with the
- * services framework.
- * @since ICU 2.8
- */
-class U_COMMON_API LocaleBased : public UMemory {
-
- public:
-
-    /**
-     * Construct a LocaleBased wrapper around the two pointers.  These
-     * will be aliased for the lifetime of this object.
-     */
-    inline LocaleBased(char* validAlias, char* actualAlias);
-
-    /**
-     * Construct a LocaleBased wrapper around the two const pointers.
-     * These will be aliased for the lifetime of this object.
-     */
-    inline LocaleBased(const char* validAlias, const char* actualAlias);
-
-    /**
-     * Return locale meta-data for the service object wrapped by this
-     * object.  Either the valid or the actual locale may be
-     * retrieved.
-     * @param type either ULOC_VALID_LOCALE or ULOC_ACTUAL_LOCALE
-     * @param status input-output error code
-     * @return the indicated locale
-     */
-    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
-
-    /**
-     * Return the locale ID for the service object wrapped by this
-     * object.  Either the valid or the actual locale may be
-     * retrieved.
-     * @param type either ULOC_VALID_LOCALE or ULOC_ACTUAL_LOCALE
-     * @param status input-output error code
-     * @return the indicated locale ID
-     */
-    const char* getLocaleID(ULocDataLocaleType type, UErrorCode& status) const;
-
-    /**
-     * Set the locale meta-data for the service object wrapped by this
-     * object.  If either parameter is zero, it is ignored.
-     * @param valid the ID of the valid locale
-     * @param actual the ID of the actual locale
-     */
-    void setLocaleIDs(const char* valid, const char* actual);
-
- private:
-
-    char* valid;
-    
-    char* actual;
-};
-
-inline LocaleBased::LocaleBased(char* validAlias, char* actualAlias) :
-    valid(validAlias), actual(actualAlias) {
-}
-
-inline LocaleBased::LocaleBased(const char* validAlias,
-                                const char* actualAlias) :
-    // ugh: cast away const
-    valid((char*)validAlias), actual((char*)actualAlias) {
-}
-
-U_NAMESPACE_END
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/locdispnames.cpp b/src/third_party/mozjs/intl/icu/source/common/locdispnames.cpp
deleted file mode 100644
index dd44452..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locdispnames.cpp
+++ /dev/null
@@ -1,846 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  locdispnames.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010feb25
-*   created by: Markus W. Scherer
-*
-*   Code for locale display names, separated out from other .cpp files
-*   that then do not depend on resource bundle code and display name data.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/brkiter.h"
-#include "unicode/locid.h"
-#include "unicode/uloc.h"
-#include "unicode/ures.h"
-#include "unicode/ustring.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "putilimp.h"
-#include "ulocimp.h"
-#include "uresimp.h"
-#include "ureslocs.h"
-#include "ustr_imp.h"
-
-// C++ API ----------------------------------------------------------------- ***
-
-U_NAMESPACE_BEGIN
-
-UnicodeString&
-Locale::getDisplayLanguage(UnicodeString& dispLang) const
-{
-    return this->getDisplayLanguage(getDefault(), dispLang);
-}
-
-/*We cannot make any assumptions on the size of the output display strings
-* Yet, since we are calling through to a C API, we need to set limits on
-* buffer size. For all the following getDisplay functions we first attempt
-* to fill up a stack allocated buffer. If it is to small we heap allocated
-* the exact buffer we need copy it to the UnicodeString and delete it*/
-
-UnicodeString&
-Locale::getDisplayLanguage(const Locale &displayLocale,
-                           UnicodeString &result) const {
-    UChar *buffer;
-    UErrorCode errorCode=U_ZERO_ERROR;
-    int32_t length;
-
-    buffer=result.getBuffer(ULOC_FULLNAME_CAPACITY);
-    if(buffer==0) {
-        result.truncate(0);
-        return result;
-    }
-
-    length=uloc_getDisplayLanguage(fullName, displayLocale.fullName,
-                                   buffer, result.getCapacity(),
-                                   &errorCode);
-    result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-
-    if(errorCode==U_BUFFER_OVERFLOW_ERROR) {
-        buffer=result.getBuffer(length);
-        if(buffer==0) {
-            result.truncate(0);
-            return result;
-        }
-        errorCode=U_ZERO_ERROR;
-        length=uloc_getDisplayLanguage(fullName, displayLocale.fullName,
-                                       buffer, result.getCapacity(),
-                                       &errorCode);
-        result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-    }
-
-    return result;
-}
-
-UnicodeString&
-Locale::getDisplayScript(UnicodeString& dispScript) const
-{
-    return this->getDisplayScript(getDefault(), dispScript);
-}
-
-UnicodeString&
-Locale::getDisplayScript(const Locale &displayLocale,
-                          UnicodeString &result) const {
-    UChar *buffer;
-    UErrorCode errorCode=U_ZERO_ERROR;
-    int32_t length;
-
-    buffer=result.getBuffer(ULOC_FULLNAME_CAPACITY);
-    if(buffer==0) {
-        result.truncate(0);
-        return result;
-    }
-
-    length=uloc_getDisplayScript(fullName, displayLocale.fullName,
-                                  buffer, result.getCapacity(),
-                                  &errorCode);
-    result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-
-    if(errorCode==U_BUFFER_OVERFLOW_ERROR) {
-        buffer=result.getBuffer(length);
-        if(buffer==0) {
-            result.truncate(0);
-            return result;
-        }
-        errorCode=U_ZERO_ERROR;
-        length=uloc_getDisplayScript(fullName, displayLocale.fullName,
-                                      buffer, result.getCapacity(),
-                                      &errorCode);
-        result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-    }
-
-    return result;
-}
-
-UnicodeString&
-Locale::getDisplayCountry(UnicodeString& dispCntry) const
-{
-    return this->getDisplayCountry(getDefault(), dispCntry);
-}
-
-UnicodeString&
-Locale::getDisplayCountry(const Locale &displayLocale,
-                          UnicodeString &result) const {
-    UChar *buffer;
-    UErrorCode errorCode=U_ZERO_ERROR;
-    int32_t length;
-
-    buffer=result.getBuffer(ULOC_FULLNAME_CAPACITY);
-    if(buffer==0) {
-        result.truncate(0);
-        return result;
-    }
-
-    length=uloc_getDisplayCountry(fullName, displayLocale.fullName,
-                                  buffer, result.getCapacity(),
-                                  &errorCode);
-    result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-
-    if(errorCode==U_BUFFER_OVERFLOW_ERROR) {
-        buffer=result.getBuffer(length);
-        if(buffer==0) {
-            result.truncate(0);
-            return result;
-        }
-        errorCode=U_ZERO_ERROR;
-        length=uloc_getDisplayCountry(fullName, displayLocale.fullName,
-                                      buffer, result.getCapacity(),
-                                      &errorCode);
-        result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-    }
-
-    return result;
-}
-
-UnicodeString&
-Locale::getDisplayVariant(UnicodeString& dispVar) const
-{
-    return this->getDisplayVariant(getDefault(), dispVar);
-}
-
-UnicodeString&
-Locale::getDisplayVariant(const Locale &displayLocale,
-                          UnicodeString &result) const {
-    UChar *buffer;
-    UErrorCode errorCode=U_ZERO_ERROR;
-    int32_t length;
-
-    buffer=result.getBuffer(ULOC_FULLNAME_CAPACITY);
-    if(buffer==0) {
-        result.truncate(0);
-        return result;
-    }
-
-    length=uloc_getDisplayVariant(fullName, displayLocale.fullName,
-                                  buffer, result.getCapacity(),
-                                  &errorCode);
-    result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-
-    if(errorCode==U_BUFFER_OVERFLOW_ERROR) {
-        buffer=result.getBuffer(length);
-        if(buffer==0) {
-            result.truncate(0);
-            return result;
-        }
-        errorCode=U_ZERO_ERROR;
-        length=uloc_getDisplayVariant(fullName, displayLocale.fullName,
-                                      buffer, result.getCapacity(),
-                                      &errorCode);
-        result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-    }
-
-    return result;
-}
-
-UnicodeString&
-Locale::getDisplayName( UnicodeString& name ) const
-{
-    return this->getDisplayName(getDefault(), name);
-}
-
-UnicodeString&
-Locale::getDisplayName(const Locale &displayLocale,
-                       UnicodeString &result) const {
-    UChar *buffer;
-    UErrorCode errorCode=U_ZERO_ERROR;
-    int32_t length;
-
-    buffer=result.getBuffer(ULOC_FULLNAME_CAPACITY);
-    if(buffer==0) {
-        result.truncate(0);
-        return result;
-    }
-
-    length=uloc_getDisplayName(fullName, displayLocale.fullName,
-                               buffer, result.getCapacity(),
-                               &errorCode);
-    result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-
-    if(errorCode==U_BUFFER_OVERFLOW_ERROR) {
-        buffer=result.getBuffer(length);
-        if(buffer==0) {
-            result.truncate(0);
-            return result;
-        }
-        errorCode=U_ZERO_ERROR;
-        length=uloc_getDisplayName(fullName, displayLocale.fullName,
-                                   buffer, result.getCapacity(),
-                                   &errorCode);
-        result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0);
-    }
-
-    return result;
-}
-
-#if ! UCONFIG_NO_BREAK_ITERATION
-
-// -------------------------------------
-// Gets the objectLocale display name in the default locale language.
-UnicodeString& U_EXPORT2
-BreakIterator::getDisplayName(const Locale& objectLocale,
-                             UnicodeString& name)
-{
-    return objectLocale.getDisplayName(name);
-}
-
-// -------------------------------------
-// Gets the objectLocale display name in the displayLocale language.
-UnicodeString& U_EXPORT2
-BreakIterator::getDisplayName(const Locale& objectLocale,
-                             const Locale& displayLocale,
-                             UnicodeString& name)
-{
-    return objectLocale.getDisplayName(displayLocale, name);
-}
-
-#endif
-
-
-U_NAMESPACE_END
-
-// C API ------------------------------------------------------------------- ***
-
-U_NAMESPACE_USE
-
-/* ### Constants **************************************************/
-
-/* These strings describe the resources we attempt to load from
- the locale ResourceBundle data file.*/
-static const char _kLanguages[]       = "Languages";
-static const char _kScripts[]         = "Scripts";
-static const char _kScriptsStandAlone[] = "Scripts%stand-alone";
-static const char _kCountries[]       = "Countries";
-static const char _kVariants[]        = "Variants";
-static const char _kKeys[]            = "Keys";
-static const char _kTypes[]           = "Types";
-//static const char _kRootName[]        = "root";
-static const char _kCurrency[]        = "currency";
-static const char _kCurrencies[]      = "Currencies";
-static const char _kLocaleDisplayPattern[] = "localeDisplayPattern";
-static const char _kPattern[]         = "pattern";
-static const char _kSeparator[]       = "separator";
-
-/* ### Display name **************************************************/
-
-static int32_t
-_getStringOrCopyKey(const char *path, const char *locale,
-                    const char *tableKey, 
-                    const char* subTableKey,
-                    const char *itemKey,
-                    const char *substitute,
-                    UChar *dest, int32_t destCapacity,
-                    UErrorCode *pErrorCode) {
-    const UChar *s = NULL;
-    int32_t length = 0;
-
-    if(itemKey==NULL) {
-        /* top-level item: normal resource bundle access */
-        UResourceBundle *rb;
-
-        rb=ures_open(path, locale, pErrorCode);
-
-        if(U_SUCCESS(*pErrorCode)) {
-            s=ures_getStringByKey(rb, tableKey, &length, pErrorCode);
-            /* see comment about closing rb near "return item;" in _res_getTableStringWithFallback() */
-            ures_close(rb);
-        }
-    } else {
-        /* Language code should not be a number. If it is, set the error code. */
-        if (!uprv_strncmp(tableKey, "Languages", 9) && uprv_strtol(itemKey, NULL, 10)) {
-            *pErrorCode = U_MISSING_RESOURCE_ERROR;
-        } else {
-            /* second-level item, use special fallback */
-            s=uloc_getTableStringWithFallback(path, locale,
-                                               tableKey, 
-                                               subTableKey,
-                                               itemKey,
-                                               &length,
-                                               pErrorCode);
-        }
-    }
-
-    if(U_SUCCESS(*pErrorCode)) {
-        int32_t copyLength=uprv_min(length, destCapacity);
-        if(copyLength>0 && s != NULL) {
-            u_memcpy(dest, s, copyLength);
-        }
-    } else {
-        /* no string from a resource bundle: convert the substitute */
-        length=(int32_t)uprv_strlen(substitute);
-        u_charsToUChars(substitute, dest, uprv_min(length, destCapacity));
-        *pErrorCode=U_USING_DEFAULT_WARNING;
-    }
-
-    return u_terminateUChars(dest, destCapacity, length, pErrorCode);
-}
-
-typedef  int32_t U_CALLCONV UDisplayNameGetter(const char *, char *, int32_t, UErrorCode *);
-
-static int32_t
-_getDisplayNameForComponent(const char *locale,
-                            const char *displayLocale,
-                            UChar *dest, int32_t destCapacity,
-                            UDisplayNameGetter *getter,
-                            const char *tag,
-                            UErrorCode *pErrorCode) {
-    char localeBuffer[ULOC_FULLNAME_CAPACITY*4];
-    int32_t length;
-    UErrorCode localStatus;
-    const char* root = NULL;
-
-    /* argument checking */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    localStatus = U_ZERO_ERROR;
-    length=(*getter)(locale, localeBuffer, sizeof(localeBuffer), &localStatus);
-    if(U_FAILURE(localStatus) || localStatus==U_STRING_NOT_TERMINATED_WARNING) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    if(length==0) {
-        return u_terminateUChars(dest, destCapacity, 0, pErrorCode);
-    }
-
-    root = tag == _kCountries ? U_ICUDATA_REGION : U_ICUDATA_LANG;
-
-    return _getStringOrCopyKey(root, displayLocale,
-                               tag, NULL, localeBuffer,
-                               localeBuffer,
-                               dest, destCapacity,
-                               pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayLanguage(const char *locale,
-                        const char *displayLocale,
-                        UChar *dest, int32_t destCapacity,
-                        UErrorCode *pErrorCode) {
-    return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
-                uloc_getLanguage, _kLanguages, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayScript(const char* locale,
-                      const char* displayLocale,
-                      UChar *dest, int32_t destCapacity,
-                      UErrorCode *pErrorCode)
-{
-	UErrorCode err = U_ZERO_ERROR;
-	int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
-                uloc_getScript, _kScriptsStandAlone, &err);
-	
-	if ( err == U_USING_DEFAULT_WARNING ) {
-        return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
-                    uloc_getScript, _kScripts, pErrorCode);
-	} else {
-		*pErrorCode = err;
-		return res;
-	}
-}
-
-U_INTERNAL int32_t U_EXPORT2
-uloc_getDisplayScriptInContext(const char* locale,
-                      const char* displayLocale,
-                      UChar *dest, int32_t destCapacity,
-                      UErrorCode *pErrorCode)
-{
-    return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
-                    uloc_getScript, _kScripts, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayCountry(const char *locale,
-                       const char *displayLocale,
-                       UChar *dest, int32_t destCapacity,
-                       UErrorCode *pErrorCode) {
-    return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
-                uloc_getCountry, _kCountries, pErrorCode);
-}
-
-/*
- * TODO separate variant1_variant2_variant3...
- * by getting each tag's display string and concatenating them with ", "
- * in between - similar to uloc_getDisplayName()
- */
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayVariant(const char *locale,
-                       const char *displayLocale,
-                       UChar *dest, int32_t destCapacity,
-                       UErrorCode *pErrorCode) {
-    return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
-                uloc_getVariant, _kVariants, pErrorCode);
-}
-
-/* Instead of having a separate pass for 'special' patterns, reintegrate the two
- * so we don't get bitten by preflight bugs again.  We can be reasonably efficient
- * without two separate code paths, this code isn't that performance-critical.
- *
- * This code is general enough to deal with patterns that have a prefix or swap the
- * language and remainder components, since we gave developers enough rope to do such
- * things if they futz with the pattern data.  But since we don't give them a way to
- * specify a pattern for arbitrary combinations of components, there's not much use in
- * that.  I don't think our data includes such patterns, the only variable I know if is
- * whether there is a space before the open paren, or not.  Oh, and zh uses different
- * chars than the standard open/close paren (which ja and ko use, btw).
- */
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayName(const char *locale,
-                    const char *displayLocale,
-                    UChar *dest, int32_t destCapacity,
-                    UErrorCode *pErrorCode)
-{
-    static const UChar defaultSeparator[3] = { 0x002c, 0x0020, 0x0000 }; /* comma + space */
-    static const int32_t defaultSepLen = 2;
-    static const UChar sub0[4] = { 0x007b, 0x0030, 0x007d , 0x0000 } ; /* {0} */
-    static const UChar sub1[4] = { 0x007b, 0x0031, 0x007d , 0x0000 } ; /* {1} */
-    static const int32_t subLen = 3;
-    static const UChar defaultPattern[10] = {
-        0x007b, 0x0030, 0x007d, 0x0020, 0x0028, 0x007b, 0x0031, 0x007d, 0x0029, 0x0000
-    }; /* {0} ({1}) */
-    static const int32_t defaultPatLen = 9;
-    static const int32_t defaultSub0Pos = 0;
-    static const int32_t defaultSub1Pos = 5;
-
-    int32_t length; /* of formatted result */
-
-    const UChar *separator;
-    int32_t sepLen = 0;
-    const UChar *pattern;
-    int32_t patLen = 0;
-    int32_t sub0Pos, sub1Pos;
-
-    UBool haveLang = TRUE; /* assume true, set false if we find we don't have
-                              a lang component in the locale */
-    UBool haveRest = TRUE; /* assume true, set false if we find we don't have
-                              any other component in the locale */
-    UBool retry = FALSE; /* set true if we need to retry, see below */
-
-    int32_t langi = 0; /* index of the language substitution (0 or 1), virtually always 0 */
-
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    {
-        UErrorCode status = U_ZERO_ERROR;
-        UResourceBundle* locbundle=ures_open(U_ICUDATA_LANG, displayLocale, &status);
-        UResourceBundle* dspbundle=ures_getByKeyWithFallback(locbundle, _kLocaleDisplayPattern,
-                                                             NULL, &status);
-
-        separator=ures_getStringByKeyWithFallback(dspbundle, _kSeparator, &sepLen, &status);
-        pattern=ures_getStringByKeyWithFallback(dspbundle, _kPattern, &patLen, &status);
-
-        ures_close(dspbundle);
-        ures_close(locbundle);
-    }
-
-    /* If we couldn't find any data, then use the defaults */
-    if(sepLen == 0) {
-       separator = defaultSeparator;
-       sepLen = defaultSepLen;
-    }
-
-    if(patLen==0 || (patLen==defaultPatLen && !u_strncmp(pattern, defaultPattern, patLen))) {
-        pattern=defaultPattern;
-        patLen=defaultPatLen;
-        sub0Pos=defaultSub0Pos;
-        sub1Pos=defaultSub1Pos;
-    } else { /* non-default pattern */
-        UChar *p0=u_strstr(pattern, sub0);
-        UChar *p1=u_strstr(pattern, sub1);
-        if (p0==NULL || p1==NULL) {
-            *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return 0;
-        }
-        sub0Pos=p0-pattern;
-        sub1Pos=p1-pattern;
-        if (sub1Pos < sub0Pos) { /* a very odd pattern */
-            int32_t t=sub0Pos; sub0Pos=sub1Pos; sub1Pos=t;
-            langi=1;
-        }
-    }
-
-    /* We loop here because there is one case in which after the first pass we could need to
-     * reextract the data.  If there's initial padding before the first element, we put in
-     * the padding and then write that element.  If it turns out there's no second element,
-     * we didn't need the padding.  If we do need the data (no preflight), and the first element
-     * would have fit but for the padding, we need to reextract.  In this case (only) we
-     * adjust the parameters so padding is not added, and repeat.
-     */
-    do {
-        UChar* p=dest;
-        int32_t patPos=0; /* position in the pattern, used for non-substitution portions */
-        int32_t langLen=0; /* length of language substitution */
-        int32_t langPos=0; /* position in output of language substitution */
-        int32_t restLen=0; /* length of 'everything else' substitution */
-        int32_t restPos=0; /* position in output of 'everything else' substitution */
-        UEnumeration* kenum = NULL; /* keyword enumeration */
-
-        /* prefix of pattern, extremely likely to be empty */
-        if(sub0Pos) {
-            if(destCapacity >= sub0Pos) {
-                while (patPos < sub0Pos) {
-                    *p++ = pattern[patPos++];
-                }
-            } else {
-                patPos=sub0Pos;
-            }
-            length=sub0Pos;
-        } else {
-            length=0;
-        }
-
-        for(int32_t subi=0,resti=0;subi<2;) { /* iterate through patterns 0 and 1*/
-            UBool subdone = FALSE; /* set true when ready to move to next substitution */
-
-            /* prep p and cap for calls to get display components, pin cap to 0 since
-               they complain if cap is negative */
-            int32_t cap=destCapacity-length;
-            if (cap <= 0) {
-                cap=0;
-            } else {
-                p=dest+length;
-            }
-
-            if (subi == langi) { /* {0}*/
-                if(haveLang) {
-                    langPos=length;
-                    langLen=uloc_getDisplayLanguage(locale, displayLocale, p, cap, pErrorCode);
-                    length+=langLen;
-                    haveLang=langLen>0;
-                }
-                subdone=TRUE;
-            } else { /* {1} */
-                if(!haveRest) {
-                    subdone=TRUE;
-                } else {
-                    int32_t len; /* length of component (plus other stuff) we just fetched */
-                    switch(resti++) {
-                        case 0:
-                            restPos=length;
-                            len=uloc_getDisplayScriptInContext(locale, displayLocale, p, cap, pErrorCode);
-                            break;
-                        case 1:
-                            len=uloc_getDisplayCountry(locale, displayLocale, p, cap, pErrorCode);
-                            break;
-                        case 2:
-                            len=uloc_getDisplayVariant(locale, displayLocale, p, cap, pErrorCode);
-                            break;
-                        case 3:
-                            kenum = uloc_openKeywords(locale, pErrorCode);
-                            /* fall through */
-                        default: {
-                            const char* kw=uenum_next(kenum, &len, pErrorCode);
-                            if (kw == NULL) {
-                                uenum_close(kenum);
-                                len=0; /* mark that we didn't add a component */
-                                subdone=TRUE;
-                            } else {
-                                /* incorporating this behavior into the loop made it even more complex,
-                                   so just special case it here */
-                                len = uloc_getDisplayKeyword(kw, displayLocale, p, cap, pErrorCode);
-                                if(len) {
-                                    if(len < cap) {
-                                        p[len]=0x3d; /* '=', assume we'll need it */
-                                    }
-                                    len+=1;
-
-                                    /* adjust for call to get keyword */
-                                    cap-=len;
-                                    if(cap <= 0) {
-                                        cap=0;
-                                    } else {
-                                        p+=len;
-                                    }
-                                }
-                                /* reset for call below */
-                                if(*pErrorCode == U_BUFFER_OVERFLOW_ERROR) {
-                                    *pErrorCode=U_ZERO_ERROR;
-                                }
-                                int32_t vlen = uloc_getDisplayKeywordValue(locale, kw, displayLocale,
-                                                                           p, cap, pErrorCode);
-                                if(len) {
-                                    if(vlen==0) {
-                                        --len; /* remove unneeded '=' */
-                                    }
-                                    /* restore cap and p to what they were at start */
-                                    cap=destCapacity-length;
-                                    if(cap <= 0) {
-                                        cap=0;
-                                    } else {
-                                        p=dest+length;
-                                    }
-                                }
-                                len+=vlen; /* total we added for key + '=' + value */
-                            }
-                        } break;
-                    } /* end switch */
-
-                    if (len>0) {
-                        /* we addeed a component, so add separator and write it if there's room. */
-                        if(len+sepLen<=cap) {
-                            p+=len;
-                            for(int32_t i=0;i<sepLen;++i) {
-                                *p++=separator[i];
-                            }
-                        }
-                        length+=len+sepLen;
-                    } else if(subdone) {
-                        /* remove separator if we added it */
-                        if (length!=restPos) {
-                            length-=sepLen;
-                        }
-                        restLen=length-restPos;
-                        haveRest=restLen>0;
-                    }
-                }
-            }
-
-            if(*pErrorCode == U_BUFFER_OVERFLOW_ERROR) {
-                *pErrorCode=U_ZERO_ERROR;
-            }
-
-            if(subdone) {
-                if(haveLang && haveRest) {
-                    /* append internal portion of pattern, the first time,
-                       or last portion of pattern the second time */
-                    int32_t padLen;
-                    patPos+=subLen;
-                    padLen=(subi==0 ? sub1Pos : patLen)-patPos;
-                    if(length+padLen < destCapacity) {
-                        p=dest+length;
-                        for(int32_t i=0;i<padLen;++i) {
-                            *p++=pattern[patPos++];
-                        }
-                    } else {
-                        patPos+=padLen;
-                    }
-                    length+=padLen;
-                } else if(subi==0) {
-                    /* don't have first component, reset for second component */
-                    sub0Pos=0;
-                    length=0;
-                } else if(length>0) {
-                    /* true length is the length of just the component we got. */
-                    length=haveLang?langLen:restLen;
-                    if(dest && sub0Pos!=0) {
-                        if (sub0Pos+length<=destCapacity) {
-                            /* first component not at start of result,
-                               but we have full component in buffer. */
-                            u_memmove(dest, dest+(haveLang?langPos:restPos), length);
-                        } else {
-                            /* would have fit, but didn't because of pattern prefix. */
-                            sub0Pos=0; /* stops initial padding (and a second retry,
-                                          so we won't end up here again) */
-                            retry=TRUE;
-                        }
-                    }
-                }
-
-                ++subi; /* move on to next substitution */
-            }
-        }
-    } while(retry);
-
-    return u_terminateUChars(dest, destCapacity, length, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayKeyword(const char* keyword,
-                       const char* displayLocale,
-                       UChar* dest,
-                       int32_t destCapacity,
-                       UErrorCode* status){
-
-    /* argument checking */
-    if(status==NULL || U_FAILURE(*status)) {
-        return 0;
-    }
-
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
-        *status=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-
-    /* pass itemKey=NULL to look for a top-level item */
-    return _getStringOrCopyKey(U_ICUDATA_LANG, displayLocale,
-                               _kKeys, NULL, 
-                               keyword, 
-                               keyword,      
-                               dest, destCapacity,
-                               status);
-
-}
-
-
-#define UCURRENCY_DISPLAY_NAME_INDEX 1
-
-U_CAPI int32_t U_EXPORT2
-uloc_getDisplayKeywordValue(   const char* locale,
-                               const char* keyword,
-                               const char* displayLocale,
-                               UChar* dest,
-                               int32_t destCapacity,
-                               UErrorCode* status){
-
-
-    char keywordValue[ULOC_FULLNAME_CAPACITY*4];
-    int32_t capacity = ULOC_FULLNAME_CAPACITY*4;
-    int32_t keywordValueLen =0;
-
-    /* argument checking */
-    if(status==NULL || U_FAILURE(*status)) {
-        return 0;
-    }
-
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
-        *status=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    /* get the keyword value */
-    keywordValue[0]=0;
-    keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status);
-
-    /* 
-     * if the keyword is equal to currency .. then to get the display name 
-     * we need to do the fallback ourselves
-     */
-    if(uprv_stricmp(keyword, _kCurrency)==0){
-
-        int32_t dispNameLen = 0;
-        const UChar *dispName = NULL;
-        
-        UResourceBundle *bundle     = ures_open(U_ICUDATA_CURR, displayLocale, status);
-        UResourceBundle *currencies = ures_getByKey(bundle, _kCurrencies, NULL, status);
-        UResourceBundle *currency   = ures_getByKeyWithFallback(currencies, keywordValue, NULL, status);
-        
-        dispName = ures_getStringByIndex(currency, UCURRENCY_DISPLAY_NAME_INDEX, &dispNameLen, status);
-        
-        /*close the bundles */
-        ures_close(currency);
-        ures_close(currencies);
-        ures_close(bundle);
-        
-        if(U_FAILURE(*status)){
-            if(*status == U_MISSING_RESOURCE_ERROR){
-                /* we just want to write the value over if nothing is available */
-                *status = U_USING_DEFAULT_WARNING;
-            }else{
-                return 0;
-            }
-        }
-
-        /* now copy the dispName over if not NULL */
-        if(dispName != NULL){
-            if(dispNameLen <= destCapacity){
-                uprv_memcpy(dest, dispName, dispNameLen * U_SIZEOF_UCHAR);
-                return u_terminateUChars(dest, destCapacity, dispNameLen, status);
-            }else{
-                *status = U_BUFFER_OVERFLOW_ERROR;
-                return dispNameLen;
-            }
-        }else{
-            /* we have not found the display name for the value .. just copy over */
-            if(keywordValueLen <= destCapacity){
-                u_charsToUChars(keywordValue, dest, keywordValueLen);
-                return u_terminateUChars(dest, destCapacity, keywordValueLen, status);
-            }else{
-                 *status = U_BUFFER_OVERFLOW_ERROR;
-                return keywordValueLen;
-            }
-        }
-
-        
-    }else{
-
-        return _getStringOrCopyKey(U_ICUDATA_LANG, displayLocale,
-                                   _kTypes, keyword, 
-                                   keywordValue,
-                                   keywordValue,
-                                   dest, destCapacity,
-                                   status);
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/locid.cpp b/src/third_party/mozjs/intl/icu/source/common/locid.cpp
deleted file mode 100644
index 84cb986..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locid.cpp
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*
- **********************************************************************
- *   Copyright (C) 1997-2012, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
-*
-* File locid.cpp
-*
-* Created by: Richard Gillam
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/11/97    aliu        Changed gLocPath to fgDataDirectory and added
-*                           methods to get and set it.
-*   04/02/97    aliu        Made operator!= inline; fixed return value
-*                           of getName().
-*   04/15/97    aliu        Cleanup for AIX/Win32.
-*   04/24/97    aliu        Numerous changes per code review.
-*   08/18/98    stephen     Changed getDisplayName()
-*                           Added SIMPLIFIED_CHINESE, TRADITIONAL_CHINESE
-*                           Added getISOCountries(), getISOLanguages(),
-*                           getLanguagesForCountry()
-*   03/16/99    bertrand    rehaul.
-*   07/21/99    stephen     Added U_CFUNC setDefault
-*   11/09/99    weiv        Added const char * getName() const;
-*   04/12/00    srl         removing unicodestring api's and cached hash code
-*   08/10/01    grhoten     Change the static Locales to accessor functions
-******************************************************************************
-*/
-
-
-#include "unicode/locid.h"
-#include "unicode/uloc.h"
-#include "putilimp.h"
-#include "mutex.h"
-#include "umutex.h"
-#include "uassert.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "uhash.h"
-#include "ucln_cmn.h"
-#include "ustr_imp.h"
-
-#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
-
-U_CDECL_BEGIN
-static UBool U_CALLCONV locale_cleanup(void);
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-static Locale *gLocaleCache = NULL;
-
-// gDefaultLocaleMutex protects all access to gDefaultLocalesHashT and gDefaultLocale.
-static UMutex gDefaultLocaleMutex = U_MUTEX_INITIALIZER;
-static UHashtable *gDefaultLocalesHashT = NULL;
-static Locale *gDefaultLocale = NULL;
-
-U_NAMESPACE_END
-
-typedef enum ELocalePos {
-    eENGLISH,
-    eFRENCH,
-    eGERMAN,
-    eITALIAN,
-    eJAPANESE,
-    eKOREAN,
-    eCHINESE,
-
-    eFRANCE,
-    eGERMANY,
-    eITALY,
-    eJAPAN,
-    eKOREA,
-    eCHINA,      /* Alias for PRC */
-    eTAIWAN,
-    eUK,
-    eUS,
-    eCANADA,
-    eCANADA_FRENCH,
-    eROOT,
-
-
-    //eDEFAULT,
-    eMAX_LOCALES
-} ELocalePos;
-
-U_CFUNC int32_t locale_getKeywords(const char *localeID,
-            char prev,
-            char *keywords, int32_t keywordCapacity,
-            char *values, int32_t valuesCapacity, int32_t *valLen,
-            UBool valuesToo,
-            UErrorCode *status);
-
-U_CDECL_BEGIN
-//
-// Deleter function for Locales owned by the default Locale hash table/
-//
-static void U_CALLCONV
-deleteLocale(void *obj) {
-    delete (icu::Locale *) obj;
-}
-
-static UBool U_CALLCONV locale_cleanup(void)
-{
-    U_NAMESPACE_USE
-
-    if (gLocaleCache) {
-        delete [] gLocaleCache;
-        gLocaleCache = NULL;
-    }
-
-    if (gDefaultLocalesHashT) {
-        uhash_close(gDefaultLocalesHashT);   // Automatically deletes all elements, using deleter func.
-        gDefaultLocalesHashT = NULL;
-        gDefaultLocale = NULL;
-    }
-
-    return TRUE;
-}
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-Locale *locale_set_default_internal(const char *id, UErrorCode& status) {
-    // Synchronize this entire function.
-    Mutex lock(&gDefaultLocaleMutex);
-    
-    UBool canonicalize = FALSE;
-
-    // If given a NULL string for the locale id, grab the default
-    //   name from the system.
-    //   (Different from most other locale APIs, where a null name means use
-    //    the current ICU default locale.)
-    if (id == NULL) {
-        id = uprv_getDefaultLocaleID();   // This function not thread safe? TODO: verify.
-        canonicalize = TRUE; // always canonicalize host ID
-    }
-
-    char localeNameBuf[512];
-
-    if (canonicalize) {
-        uloc_canonicalize(id, localeNameBuf, sizeof(localeNameBuf)-1, &status);
-    } else {
-        uloc_getName(id, localeNameBuf, sizeof(localeNameBuf)-1, &status);
-    }
-    localeNameBuf[sizeof(localeNameBuf)-1] = 0;  // Force null termination in event of
-                                                 //   a long name filling the buffer.
-                                                 //   (long names are truncated.)
-                                                 //
-    if (U_FAILURE(status)) {
-        return gDefaultLocale;
-    }
-
-    if (gDefaultLocalesHashT == NULL) {
-        gDefaultLocalesHashT = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &status);
-        if (U_FAILURE(status)) {
-            return gDefaultLocale;
-        }
-        uhash_setValueDeleter(gDefaultLocalesHashT, deleteLocale);
-        ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
-    }
-
-    Locale *newDefault = (Locale *)uhash_get(gDefaultLocalesHashT, localeNameBuf);
-    if (newDefault == NULL) {
-        newDefault = new Locale(Locale::eBOGUS);
-        if (newDefault == NULL) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            return gDefaultLocale;
-        }
-        newDefault->init(localeNameBuf, FALSE);
-        uhash_put(gDefaultLocalesHashT, (char*) newDefault->getName(), newDefault, &status);
-        if (U_FAILURE(status)) {
-            return gDefaultLocale;
-        }
-    }
-    gDefaultLocale = newDefault;
-    return gDefaultLocale;
-}
-
-U_NAMESPACE_END
-
-/* sfb 07/21/99 */
-U_CFUNC void
-locale_set_default(const char *id)
-{
-    U_NAMESPACE_USE
-    UErrorCode status = U_ZERO_ERROR;
-    locale_set_default_internal(id, status);
-}
-/* end */
-
-U_CFUNC const char *
-locale_get_default(void)
-{
-    U_NAMESPACE_USE
-    return Locale::getDefault().getName();
-}
-
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Locale)
-
-/*Character separating the posix id fields*/
-// '_'
-// In the platform codepage.
-#define SEP_CHAR '_'
-
-Locale::~Locale()
-{
-    /*if fullName is on the heap, we free it*/
-    if (fullName != fullNameBuffer)
-    {
-        uprv_free(fullName);
-        fullName = NULL;
-    }
-    if (baseName && baseName != baseNameBuffer) {
-        uprv_free(baseName);
-        baseName = NULL;
-    }
-}
-
-Locale::Locale()
-    : UObject(), fullName(fullNameBuffer), baseName(NULL)
-{
-    init(NULL, FALSE);
-}
-
-/*
- * Internal constructor to allow construction of a locale object with
- *   NO side effects.   (Default constructor tries to get
- *   the default locale.)
- */
-Locale::Locale(Locale::ELocaleType)
-    : UObject(), fullName(fullNameBuffer), baseName(NULL)
-{
-    setToBogus();
-}
-
-
-Locale::Locale( const   char * newLanguage,
-                const   char * newCountry,
-                const   char * newVariant,
-                const   char * newKeywords)
-    : UObject(), fullName(fullNameBuffer), baseName(NULL)
-{
-    if( (newLanguage==NULL) && (newCountry == NULL) && (newVariant == NULL) )
-    {
-        init(NULL, FALSE); /* shortcut */
-    }
-    else
-    {
-        MaybeStackArray<char, ULOC_FULLNAME_CAPACITY> togo;
-        int32_t size = 0;
-        int32_t lsize = 0;
-        int32_t csize = 0;
-        int32_t vsize = 0;
-        int32_t ksize = 0;
-        char    *p;
-
-        // Calculate the size of the resulting string.
-
-        // Language
-        if ( newLanguage != NULL )
-        {
-            lsize = (int32_t)uprv_strlen(newLanguage);
-            size = lsize;
-        }
-
-        // _Country
-        if ( newCountry != NULL )
-        {
-            csize = (int32_t)uprv_strlen(newCountry);
-            size += csize;
-        }
-
-        // _Variant
-        if ( newVariant != NULL )
-        {
-            // remove leading _'s
-            while(newVariant[0] == SEP_CHAR)
-            {
-                newVariant++;
-            }
-
-            // remove trailing _'s
-            vsize = (int32_t)uprv_strlen(newVariant);
-            while( (vsize>1) && (newVariant[vsize-1] == SEP_CHAR) )
-            {
-                vsize--;
-            }
-        }
-
-        if( vsize > 0 )
-        {
-            size += vsize;
-        }
-
-        // Separator rules:
-        if ( vsize > 0 )
-        {
-            size += 2;  // at least: __v
-        }
-        else if ( csize > 0 )
-        {
-            size += 1;  // at least: _v
-        }
-
-        if ( newKeywords != NULL)
-        {
-            ksize = (int32_t)uprv_strlen(newKeywords);
-            size += ksize + 1;
-        }
-
-
-        //  NOW we have the full locale string..
-
-        /*if the whole string is longer than our internal limit, we need
-        to go to the heap for temporary buffers*/
-        if (size >= togo.getCapacity())
-        {
-            // If togo_heap could not be created, initialize with default settings.
-            if (togo.resize(size+1) == NULL) {
-                init(NULL, FALSE);
-            }
-        }
-
-        togo[0] = 0;
-
-        // Now, copy it back.
-        p = togo.getAlias();
-        if ( lsize != 0 )
-        {
-            uprv_strcpy(p, newLanguage);
-            p += lsize;
-        }
-
-        if ( ( vsize != 0 ) || (csize != 0) )  // at least:  __v
-        {                                      //            ^
-            *p++ = SEP_CHAR;
-        }
-
-        if ( csize != 0 )
-        {
-            uprv_strcpy(p, newCountry);
-            p += csize;
-        }
-
-        if ( vsize != 0)
-        {
-            *p++ = SEP_CHAR; // at least: __v
-
-            uprv_strncpy(p, newVariant, vsize);  // Must use strncpy because
-            p += vsize;                          // of trimming (above).
-            *p = 0; // terminate
-        }
-
-        if ( ksize != 0)
-        {
-            if (uprv_strchr(newKeywords, '=')) {
-                *p++ = '@'; /* keyword parsing */
-            }
-            else {
-                *p++ = '_'; /* Variant parsing with a script */
-                if ( vsize == 0) {
-                    *p++ = '_'; /* No country found */
-                }
-            }
-            uprv_strcpy(p, newKeywords);
-            p += ksize;
-        }
-
-        // Parse it, because for example 'language' might really be a complete
-        // string.
-        init(togo.getAlias(), FALSE);
-    }
-}
-
-Locale::Locale(const Locale &other)
-    : UObject(other), fullName(fullNameBuffer), baseName(NULL)
-{
-    *this = other;
-}
-
-Locale &Locale::operator=(const Locale &other)
-{
-    if (this == &other) {
-        return *this;
-    }
-
-    if (&other == NULL) {
-        this->setToBogus();
-        return *this;
-    }
-
-    /* Free our current storage */
-    if(fullName != fullNameBuffer) {
-        uprv_free(fullName);
-        fullName = fullNameBuffer;
-    }
-
-    /* Allocate the full name if necessary */
-    if(other.fullName != other.fullNameBuffer) {
-        fullName = (char *)uprv_malloc(sizeof(char)*(uprv_strlen(other.fullName)+1));
-        if (fullName == NULL) {
-            return *this;
-        }
-    }
-    /* Copy the full name */
-    uprv_strcpy(fullName, other.fullName);
-
-    /* baseName is the cached result of getBaseName.  if 'other' has a
-       baseName and it fits in baseNameBuffer, then copy it. otherwise set
-       it to NULL, and let the user lazy-create it (in getBaseName) if they
-       want it. */
-    if(baseName && baseName != baseNameBuffer) {
-        uprv_free(baseName);
-    }
-    baseName = NULL;
-
-    if(other.baseName == other.baseNameBuffer) {
-        uprv_strcpy(baseNameBuffer, other.baseNameBuffer);
-        baseName = baseNameBuffer;
-    }
-
-    /* Copy the language and country fields */
-    uprv_strcpy(language, other.language);
-    uprv_strcpy(script, other.script);
-    uprv_strcpy(country, other.country);
-
-    /* The variantBegin is an offset, just copy it */
-    variantBegin = other.variantBegin;
-    fIsBogus = other.fIsBogus;
-    return *this;
-}
-
-Locale *
-Locale::clone() const {
-    return new Locale(*this);
-}
-
-UBool
-Locale::operator==( const   Locale& other) const
-{
-    return (uprv_strcmp(other.fullName, fullName) == 0);
-}
-
-#define ISASCIIALPHA(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z'))
-
-/*This function initializes a Locale from a C locale ID*/
-Locale& Locale::init(const char* localeID, UBool canonicalize)
-{
-    fIsBogus = FALSE;
-    /* Free our current storage */
-    if(fullName != fullNameBuffer) {
-        uprv_free(fullName);
-        fullName = fullNameBuffer;
-    }
-
-    if(baseName && baseName != baseNameBuffer) {
-        uprv_free(baseName);
-        baseName = NULL;
-    }
-
-    // not a loop:
-    // just an easy way to have a common error-exit
-    // without goto and without another function
-    do {
-        char *separator;
-        char *field[5] = {0};
-        int32_t fieldLen[5] = {0};
-        int32_t fieldIdx;
-        int32_t variantField;
-        int32_t length;
-        UErrorCode err;
-
-        if(localeID == NULL) {
-            // not an error, just set the default locale
-            return *this = getDefault();
-        }
-
-        /* preset all fields to empty */
-        language[0] = script[0] = country[0] = 0;
-
-        // "canonicalize" the locale ID to ICU/Java format
-        err = U_ZERO_ERROR;
-        length = canonicalize ?
-            uloc_canonicalize(localeID, fullName, sizeof(fullNameBuffer), &err) :
-            uloc_getName(localeID, fullName, sizeof(fullNameBuffer), &err);
-
-        if(err == U_BUFFER_OVERFLOW_ERROR || length >= (int32_t)sizeof(fullNameBuffer)) {
-            /*Go to heap for the fullName if necessary*/
-            fullName = (char *)uprv_malloc(sizeof(char)*(length + 1));
-            if(fullName == 0) {
-                fullName = fullNameBuffer;
-                break; // error: out of memory
-            }
-            err = U_ZERO_ERROR;
-            length = canonicalize ?
-                uloc_canonicalize(localeID, fullName, length+1, &err) :
-                uloc_getName(localeID, fullName, length+1, &err);
-        }
-        if(U_FAILURE(err) || err == U_STRING_NOT_TERMINATED_WARNING) {
-            /* should never occur */
-            break;
-        }
-
-        variantBegin = length;
-
-        /* after uloc_getName/canonicalize() we know that only '_' are separators */
-        separator = field[0] = fullName;
-        fieldIdx = 1;
-        while ((separator = uprv_strchr(field[fieldIdx-1], SEP_CHAR)) && fieldIdx < (int32_t)(sizeof(field)/sizeof(field[0]))-1) {
-            field[fieldIdx] = separator + 1;
-            fieldLen[fieldIdx-1] = (int32_t)(separator - field[fieldIdx-1]);
-            fieldIdx++;
-        }
-        // variant may contain @foo or .foo POSIX cruft; remove it
-        separator = uprv_strchr(field[fieldIdx-1], '@');
-        char* sep2 = uprv_strchr(field[fieldIdx-1], '.');
-        if (separator!=NULL || sep2!=NULL) {
-            if (separator==NULL || (sep2!=NULL && separator > sep2)) {
-                separator = sep2;
-            }
-            fieldLen[fieldIdx-1] = (int32_t)(separator - field[fieldIdx-1]);
-        } else {
-            fieldLen[fieldIdx-1] = length - (int32_t)(field[fieldIdx-1] - fullName);
-        }
-
-        if (fieldLen[0] >= (int32_t)(sizeof(language)))
-        {
-            break; // error: the language field is too long
-        }
-
-        variantField = 1; /* Usually the 2nd one, except when a script or country is also used. */
-        if (fieldLen[0] > 0) {
-            /* We have a language */
-            uprv_memcpy(language, fullName, fieldLen[0]);
-            language[fieldLen[0]] = 0;
-        }
-        if (fieldLen[1] == 4 && ISASCIIALPHA(field[1][0]) &&
-                ISASCIIALPHA(field[1][1]) && ISASCIIALPHA(field[1][2]) &&
-                ISASCIIALPHA(field[1][3])) {
-            /* We have at least a script */
-            uprv_memcpy(script, field[1], fieldLen[1]);
-            script[fieldLen[1]] = 0;
-            variantField++;
-        }
-
-        if (fieldLen[variantField] == 2 || fieldLen[variantField] == 3) {
-            /* We have a country */
-            uprv_memcpy(country, field[variantField], fieldLen[variantField]);
-            country[fieldLen[variantField]] = 0;
-            variantField++;
-        } else if (fieldLen[variantField] == 0) {
-            variantField++; /* script or country empty but variant in next field (i.e. en__POSIX) */
-        }
-
-        if (fieldLen[variantField] > 0) {
-            /* We have a variant */
-            variantBegin = (int32_t)(field[variantField] - fullName);
-        }
-
-        // successful end of init()
-        return *this;
-    } while(0); /*loop doesn't iterate*/
-
-    // when an error occurs, then set this object to "bogus" (there is no UErrorCode here)
-    setToBogus();
-
-    return *this;
-}
-
-int32_t
-Locale::hashCode() const
-{
-    return ustr_hashCharsN(fullName, uprv_strlen(fullName));
-}
-
-void
-Locale::setToBogus() {
-    /* Free our current storage */
-    if(fullName != fullNameBuffer) {
-        uprv_free(fullName);
-        fullName = fullNameBuffer;
-    }
-    if(baseName && baseName != baseNameBuffer) {
-        uprv_free(baseName);
-        baseName = NULL;
-    }
-    *fullNameBuffer = 0;
-    *language = 0;
-    *script = 0;
-    *country = 0;
-    fIsBogus = TRUE;
-}
-
-const Locale& U_EXPORT2
-Locale::getDefault()
-{
-    {
-        Mutex lock(&gDefaultLocaleMutex);
-        if (gDefaultLocale != NULL) {
-            return *gDefaultLocale;
-        }
-    }
-    UErrorCode status = U_ZERO_ERROR;
-    return *locale_set_default_internal(NULL, status);
-}
-
-
-
-void U_EXPORT2
-Locale::setDefault( const   Locale&     newLocale,
-                            UErrorCode&  status)
-{
-    if (U_FAILURE(status)) {
-        return;
-    }
-
-    /* Set the default from the full name string of the supplied locale.
-     * This is a convenient way to access the default locale caching mechanisms.
-     */
-    const char *localeID = newLocale.getName();
-    locale_set_default_internal(localeID, status);
-}
-
-Locale U_EXPORT2
-Locale::createFromName (const char *name)
-{
-    if (name) {
-        Locale l("");
-        l.init(name, FALSE);
-        return l;
-    }
-    else {
-        return getDefault();
-    }
-}
-
-Locale U_EXPORT2
-Locale::createCanonical(const char* name) {
-    Locale loc("");
-    loc.init(name, TRUE);
-    return loc;
-}
-
-const char *
-Locale::getISO3Language() const
-{
-    return uloc_getISO3Language(fullName);
-}
-
-
-const char *
-Locale::getISO3Country() const
-{
-    return uloc_getISO3Country(fullName);
-}
-
-/**
- * Return the LCID value as specified in the "LocaleID" resource for this
- * locale.  The LocaleID must be expressed as a hexadecimal number, from
- * one to four digits.  If the LocaleID resource is not present, or is
- * in an incorrect format, 0 is returned.  The LocaleID is for use in
- * Windows (it is an LCID), but is available on all platforms.
- */
-uint32_t
-Locale::getLCID() const
-{
-    return uloc_getLCID(fullName);
-}
-
-const char* const* U_EXPORT2 Locale::getISOCountries()
-{
-    return uloc_getISOCountries();
-}
-
-const char* const* U_EXPORT2 Locale::getISOLanguages()
-{
-    return uloc_getISOLanguages();
-}
-
-// Set the locale's data based on a posix id.
-void Locale::setFromPOSIXID(const char *posixID)
-{
-    init(posixID, TRUE);
-}
-
-const Locale & U_EXPORT2
-Locale::getRoot(void)
-{
-    return getLocale(eROOT);
-}
-
-const Locale & U_EXPORT2
-Locale::getEnglish(void)
-{
-    return getLocale(eENGLISH);
-}
-
-const Locale & U_EXPORT2
-Locale::getFrench(void)
-{
-    return getLocale(eFRENCH);
-}
-
-const Locale & U_EXPORT2
-Locale::getGerman(void)
-{
-    return getLocale(eGERMAN);
-}
-
-const Locale & U_EXPORT2
-Locale::getItalian(void)
-{
-    return getLocale(eITALIAN);
-}
-
-const Locale & U_EXPORT2
-Locale::getJapanese(void)
-{
-    return getLocale(eJAPANESE);
-}
-
-const Locale & U_EXPORT2
-Locale::getKorean(void)
-{
-    return getLocale(eKOREAN);
-}
-
-const Locale & U_EXPORT2
-Locale::getChinese(void)
-{
-    return getLocale(eCHINESE);
-}
-
-const Locale & U_EXPORT2
-Locale::getSimplifiedChinese(void)
-{
-    return getLocale(eCHINA);
-}
-
-const Locale & U_EXPORT2
-Locale::getTraditionalChinese(void)
-{
-    return getLocale(eTAIWAN);
-}
-
-
-const Locale & U_EXPORT2
-Locale::getFrance(void)
-{
-    return getLocale(eFRANCE);
-}
-
-const Locale & U_EXPORT2
-Locale::getGermany(void)
-{
-    return getLocale(eGERMANY);
-}
-
-const Locale & U_EXPORT2
-Locale::getItaly(void)
-{
-    return getLocale(eITALY);
-}
-
-const Locale & U_EXPORT2
-Locale::getJapan(void)
-{
-    return getLocale(eJAPAN);
-}
-
-const Locale & U_EXPORT2
-Locale::getKorea(void)
-{
-    return getLocale(eKOREA);
-}
-
-const Locale & U_EXPORT2
-Locale::getChina(void)
-{
-    return getLocale(eCHINA);
-}
-
-const Locale & U_EXPORT2
-Locale::getPRC(void)
-{
-    return getLocale(eCHINA);
-}
-
-const Locale & U_EXPORT2
-Locale::getTaiwan(void)
-{
-    return getLocale(eTAIWAN);
-}
-
-const Locale & U_EXPORT2
-Locale::getUK(void)
-{
-    return getLocale(eUK);
-}
-
-const Locale & U_EXPORT2
-Locale::getUS(void)
-{
-    return getLocale(eUS);
-}
-
-const Locale & U_EXPORT2
-Locale::getCanada(void)
-{
-    return getLocale(eCANADA);
-}
-
-const Locale & U_EXPORT2
-Locale::getCanadaFrench(void)
-{
-    return getLocale(eCANADA_FRENCH);
-}
-
-const Locale &
-Locale::getLocale(int locid)
-{
-    Locale *localeCache = getLocaleCache();
-    U_ASSERT((locid < eMAX_LOCALES)&&(locid>=0));
-    if (localeCache == NULL) {
-        // Failure allocating the locale cache.
-        //   The best we can do is return a NULL reference.
-        locid = 0;
-    }
-    return localeCache[locid]; /*operating on NULL*/
-}
-
-/*
-This function is defined this way in order to get around static
-initialization and static destruction.
- */
-Locale *
-Locale::getLocaleCache(void)
-{
-    umtx_lock(NULL);
-    UBool needInit = (gLocaleCache == NULL);
-    umtx_unlock(NULL);
-
-    if (needInit) {
-        Locale *tLocaleCache = new Locale[(int)eMAX_LOCALES];
-        if (tLocaleCache == NULL) {
-            return NULL;
-        }
-	tLocaleCache[eROOT]          = Locale("");
-        tLocaleCache[eENGLISH]       = Locale("en");
-        tLocaleCache[eFRENCH]        = Locale("fr");
-        tLocaleCache[eGERMAN]        = Locale("de");
-        tLocaleCache[eITALIAN]       = Locale("it");
-        tLocaleCache[eJAPANESE]      = Locale("ja");
-        tLocaleCache[eKOREAN]        = Locale("ko");
-        tLocaleCache[eCHINESE]       = Locale("zh");
-        tLocaleCache[eFRANCE]        = Locale("fr", "FR");
-        tLocaleCache[eGERMANY]       = Locale("de", "DE");
-        tLocaleCache[eITALY]         = Locale("it", "IT");
-        tLocaleCache[eJAPAN]         = Locale("ja", "JP");
-        tLocaleCache[eKOREA]         = Locale("ko", "KR");
-        tLocaleCache[eCHINA]         = Locale("zh", "CN");
-        tLocaleCache[eTAIWAN]        = Locale("zh", "TW");
-        tLocaleCache[eUK]            = Locale("en", "GB");
-        tLocaleCache[eUS]            = Locale("en", "US");
-        tLocaleCache[eCANADA]        = Locale("en", "CA");
-        tLocaleCache[eCANADA_FRENCH] = Locale("fr", "CA");
-
-        umtx_lock(NULL);
-        if (gLocaleCache == NULL) {
-            gLocaleCache = tLocaleCache;
-            tLocaleCache = NULL;
-            ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
-        }
-        umtx_unlock(NULL);
-        if (tLocaleCache) {
-            delete [] tLocaleCache;  // Fancy array delete will destruct each member.
-        }
-    }
-    return gLocaleCache;
-}
-
-class KeywordEnumeration : public StringEnumeration {
-private:
-    char *keywords;
-    char *current;
-    int32_t length;
-    UnicodeString currUSKey;
-    static const char fgClassID;/* Warning this is used beyond the typical RTTI usage. */
-
-public:
-    static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
-public:
-    KeywordEnumeration(const char *keys, int32_t keywordLen, int32_t currentIndex, UErrorCode &status)
-        : keywords((char *)&fgClassID), current((char *)&fgClassID), length(0) {
-        if(U_SUCCESS(status) && keywordLen != 0) {
-            if(keys == NULL || keywordLen < 0) {
-                status = U_ILLEGAL_ARGUMENT_ERROR;
-            } else {
-                keywords = (char *)uprv_malloc(keywordLen+1);
-                if (keywords == NULL) {
-                    status = U_MEMORY_ALLOCATION_ERROR;
-                }
-                else {
-                    uprv_memcpy(keywords, keys, keywordLen);
-                    keywords[keywordLen] = 0;
-                    current = keywords + currentIndex;
-                    length = keywordLen;
-                }
-            }
-        }
-    }
-
-    virtual ~KeywordEnumeration();
-
-    virtual StringEnumeration * clone() const
-    {
-        UErrorCode status = U_ZERO_ERROR;
-        return new KeywordEnumeration(keywords, length, (int32_t)(current - keywords), status);
-    }
-
-    virtual int32_t count(UErrorCode &/*status*/) const {
-        char *kw = keywords;
-        int32_t result = 0;
-        while(*kw) {
-            result++;
-            kw += uprv_strlen(kw)+1;
-        }
-        return result;
-    }
-
-    virtual const char* next(int32_t* resultLength, UErrorCode& status) {
-        const char* result;
-        int32_t len;
-        if(U_SUCCESS(status) && *current != 0) {
-            result = current;
-            len = (int32_t)uprv_strlen(current);
-            current += len+1;
-            if(resultLength != NULL) {
-                *resultLength = len;
-            }
-        } else {
-            if(resultLength != NULL) {
-                *resultLength = 0;
-            }
-            result = NULL;
-        }
-        return result;
-    }
-
-    virtual const UnicodeString* snext(UErrorCode& status) {
-        int32_t resultLength = 0;
-        const char *s = next(&resultLength, status);
-        return setChars(s, resultLength, status);
-    }
-
-    virtual void reset(UErrorCode& /*status*/) {
-        current = keywords;
-    }
-};
-
-const char KeywordEnumeration::fgClassID = '\0';
-
-KeywordEnumeration::~KeywordEnumeration() {
-    uprv_free(keywords);
-}
-
-StringEnumeration *
-Locale::createKeywords(UErrorCode &status) const
-{
-    char keywords[256];
-    int32_t keywordCapacity = 256;
-    StringEnumeration *result = NULL;
-
-    const char* variantStart = uprv_strchr(fullName, '@');
-    const char* assignment = uprv_strchr(fullName, '=');
-    if(variantStart) {
-        if(assignment > variantStart) {
-            int32_t keyLen = locale_getKeywords(variantStart+1, '@', keywords, keywordCapacity, NULL, 0, NULL, FALSE, &status);
-            if(keyLen) {
-                result = new KeywordEnumeration(keywords, keyLen, 0, status);
-            }
-        } else {
-            status = U_INVALID_FORMAT_ERROR;
-        }
-    }
-    return result;
-}
-
-int32_t
-Locale::getKeywordValue(const char* keywordName, char *buffer, int32_t bufLen, UErrorCode &status) const
-{
-    return uloc_getKeywordValue(fullName, keywordName, buffer, bufLen, &status);
-}
-
-void
-Locale::setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status)
-{
-    uloc_setKeywordValue(keywordName, keywordValue, fullName, ULOC_FULLNAME_CAPACITY, &status);
-}
-
-const char *
-Locale::getBaseName() const
-{
-    // lazy init
-    UErrorCode status = U_ZERO_ERROR;
-    // semantically const
-    if(baseName == 0) {
-        ((Locale *)this)->baseName = ((Locale *)this)->baseNameBuffer;
-        int32_t baseNameSize = uloc_getBaseName(fullName, baseName, ULOC_FULLNAME_CAPACITY, &status);
-        if(baseNameSize >= ULOC_FULLNAME_CAPACITY) {
-            ((Locale *)this)->baseName = (char *)uprv_malloc(sizeof(char) * baseNameSize + 1);
-            if (baseName == NULL) {
-                return baseName;
-            }
-            uloc_getBaseName(fullName, baseName, baseNameSize+1, &status);
-        }
-        baseName[baseNameSize] = 0;
-
-        // the computation of variantBegin leaves it equal to the length
-        // of fullName if there is no variant.  It should instead be
-        // the length of the baseName.  Patch around this for now.
-        if (variantBegin == (int32_t)uprv_strlen(fullName)) {
-          ((Locale*)this)->variantBegin = baseNameSize;
-        }
-    }
-    return baseName;
-}
-
-//eof
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/loclikely.cpp b/src/third_party/mozjs/intl/icu/source/common/loclikely.cpp
deleted file mode 100644
index 6fbf873..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/loclikely.cpp
+++ /dev/null
@@ -1,1275 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  loclikely.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010feb25
-*   created by: Markus W. Scherer
-*
-*   Code for likely and minimized locale subtags, separated out from other .cpp files
-*   that then do not depend on resource bundle code and likely-subtags data.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/putil.h"
-#include "unicode/uloc.h"
-#include "unicode/ures.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "ulocimp.h"
-#include "ustr_imp.h"
-
-/**
- * This function looks for the localeID in the likelySubtags resource.
- *
- * @param localeID The tag to find.
- * @param buffer A buffer to hold the matching entry
- * @param bufferLength The length of the output buffer
- * @return A pointer to "buffer" if found, or a null pointer if not.
- */
-static const char*  U_CALLCONV
-findLikelySubtags(const char* localeID,
-                  char* buffer,
-                  int32_t bufferLength,
-                  UErrorCode* err) {
-    const char* result = NULL;
-
-    if (!U_FAILURE(*err)) {
-        int32_t resLen = 0;
-        const UChar* s = NULL;
-        UErrorCode tmpErr = U_ZERO_ERROR;
-        UResourceBundle* subtags = ures_openDirect(NULL, "likelySubtags", &tmpErr);
-        if (U_SUCCESS(tmpErr)) {
-            s = ures_getStringByKey(subtags, localeID, &resLen, &tmpErr);
-
-            if (U_FAILURE(tmpErr)) {
-                /*
-                 * If a resource is missing, it's not really an error, it's
-                 * just that we don't have any data for that particular locale ID.
-                 */
-                if (tmpErr != U_MISSING_RESOURCE_ERROR) {
-                    *err = tmpErr;
-                }
-            }
-            else if (resLen >= bufferLength) {
-                /* The buffer should never overflow. */
-                *err = U_INTERNAL_PROGRAM_ERROR;
-            }
-            else {
-                u_UCharsToChars(s, buffer, resLen + 1);
-                result = buffer;
-            }
-
-            ures_close(subtags);
-        } else {
-            *err = tmpErr;
-        }
-    }
-
-    return result;
-}
-
-/**
- * Append a tag to a buffer, adding the separator if necessary.  The buffer
- * must be large enough to contain the resulting tag plus any separator
- * necessary. The tag must not be a zero-length string.
- *
- * @param tag The tag to add.
- * @param tagLength The length of the tag.
- * @param buffer The output buffer.
- * @param bufferLength The length of the output buffer.  This is an input/ouput parameter.
- **/
-static void U_CALLCONV
-appendTag(
-    const char* tag,
-    int32_t tagLength,
-    char* buffer,
-    int32_t* bufferLength) {
-
-    if (*bufferLength > 0) {
-        buffer[*bufferLength] = '_';
-        ++(*bufferLength);
-    }
-
-    uprv_memmove(
-        &buffer[*bufferLength],
-        tag,
-        tagLength);
-
-    *bufferLength += tagLength;
-}
-
-/**
- * These are the canonical strings for unknown languages, scripts and regions.
- **/
-static const char* const unknownLanguage = "und";
-static const char* const unknownScript = "Zzzz";
-static const char* const unknownRegion = "ZZ";
-
-/**
- * Create a tag string from the supplied parameters.  The lang, script and region
- * parameters may be NULL pointers. If they are, their corresponding length parameters
- * must be less than or equal to 0.
- *
- * If any of the language, script or region parameters are empty, and the alternateTags
- * parameter is not NULL, it will be parsed for potential language, script and region tags
- * to be used when constructing the new tag.  If the alternateTags parameter is NULL, or
- * it contains no language tag, the default tag for the unknown language is used.
- *
- * If the length of the new string exceeds the capacity of the output buffer, 
- * the function copies as many bytes to the output buffer as it can, and returns
- * the error U_BUFFER_OVERFLOW_ERROR.
- *
- * If an illegal argument is provided, the function returns the error
- * U_ILLEGAL_ARGUMENT_ERROR.
- *
- * Note that this function can return the warning U_STRING_NOT_TERMINATED_WARNING if
- * the tag string fits in the output buffer, but the null terminator doesn't.
- *
- * @param lang The language tag to use.
- * @param langLength The length of the language tag.
- * @param script The script tag to use.
- * @param scriptLength The length of the script tag.
- * @param region The region tag to use.
- * @param regionLength The length of the region tag.
- * @param trailing Any trailing data to append to the new tag.
- * @param trailingLength The length of the trailing data.
- * @param alternateTags A string containing any alternate tags.
- * @param tag The output buffer.
- * @param tagCapacity The capacity of the output buffer.
- * @param err A pointer to a UErrorCode for error reporting.
- * @return The length of the tag string, which may be greater than tagCapacity, or -1 on error.
- **/
-static int32_t U_CALLCONV
-createTagStringWithAlternates(
-    const char* lang,
-    int32_t langLength,
-    const char* script,
-    int32_t scriptLength,
-    const char* region,
-    int32_t regionLength,
-    const char* trailing,
-    int32_t trailingLength,
-    const char* alternateTags,
-    char* tag,
-    int32_t tagCapacity,
-    UErrorCode* err) {
-
-    if (U_FAILURE(*err)) {
-        goto error;
-    }
-    else if (tag == NULL ||
-             tagCapacity <= 0 ||
-             langLength >= ULOC_LANG_CAPACITY ||
-             scriptLength >= ULOC_SCRIPT_CAPACITY ||
-             regionLength >= ULOC_COUNTRY_CAPACITY) {
-        goto error;
-    }
-    else {
-        /**
-         * ULOC_FULLNAME_CAPACITY will provide enough capacity
-         * that we can build a string that contains the language,
-         * script and region code without worrying about overrunning
-         * the user-supplied buffer.
-         **/
-        char tagBuffer[ULOC_FULLNAME_CAPACITY];
-        int32_t tagLength = 0;
-        int32_t capacityRemaining = tagCapacity;
-        UBool regionAppended = FALSE;
-
-        if (langLength > 0) {
-            appendTag(
-                lang,
-                langLength,
-                tagBuffer,
-                &tagLength);
-        }
-        else if (alternateTags == NULL) {
-            /*
-             * Append the value for an unknown language, if
-             * we found no language.
-             */
-            appendTag(
-                unknownLanguage,
-                (int32_t)uprv_strlen(unknownLanguage),
-                tagBuffer,
-                &tagLength);
-        }
-        else {
-            /*
-             * Parse the alternateTags string for the language.
-             */
-            char alternateLang[ULOC_LANG_CAPACITY];
-            int32_t alternateLangLength = sizeof(alternateLang);
-
-            alternateLangLength =
-                uloc_getLanguage(
-                    alternateTags,
-                    alternateLang,
-                    alternateLangLength,
-                    err);
-            if(U_FAILURE(*err) ||
-                alternateLangLength >= ULOC_LANG_CAPACITY) {
-                goto error;
-            }
-            else if (alternateLangLength == 0) {
-                /*
-                 * Append the value for an unknown language, if
-                 * we found no language.
-                 */
-                appendTag(
-                    unknownLanguage,
-                    (int32_t)uprv_strlen(unknownLanguage),
-                    tagBuffer,
-                    &tagLength);
-            }
-            else {
-                appendTag(
-                    alternateLang,
-                    alternateLangLength,
-                    tagBuffer,
-                    &tagLength);
-            }
-        }
-
-        if (scriptLength > 0) {
-            appendTag(
-                script,
-                scriptLength,
-                tagBuffer,
-                &tagLength);
-        }
-        else if (alternateTags != NULL) {
-            /*
-             * Parse the alternateTags string for the script.
-             */
-            char alternateScript[ULOC_SCRIPT_CAPACITY];
-
-            const int32_t alternateScriptLength =
-                uloc_getScript(
-                    alternateTags,
-                    alternateScript,
-                    sizeof(alternateScript),
-                    err);
-
-            if (U_FAILURE(*err) ||
-                alternateScriptLength >= ULOC_SCRIPT_CAPACITY) {
-                goto error;
-            }
-            else if (alternateScriptLength > 0) {
-                appendTag(
-                    alternateScript,
-                    alternateScriptLength,
-                    tagBuffer,
-                    &tagLength);
-            }
-        }
-
-        if (regionLength > 0) {
-            appendTag(
-                region,
-                regionLength,
-                tagBuffer,
-                &tagLength);
-
-            regionAppended = TRUE;
-        }
-        else if (alternateTags != NULL) {
-            /*
-             * Parse the alternateTags string for the region.
-             */
-            char alternateRegion[ULOC_COUNTRY_CAPACITY];
-
-            const int32_t alternateRegionLength =
-                uloc_getCountry(
-                    alternateTags,
-                    alternateRegion,
-                    sizeof(alternateRegion),
-                    err);
-            if (U_FAILURE(*err) ||
-                alternateRegionLength >= ULOC_COUNTRY_CAPACITY) {
-                goto error;
-            }
-            else if (alternateRegionLength > 0) {
-                appendTag(
-                    alternateRegion,
-                    alternateRegionLength,
-                    tagBuffer,
-                    &tagLength);
-
-                regionAppended = TRUE;
-            }
-        }
-
-        {
-            const int32_t toCopy =
-                tagLength >= tagCapacity ? tagCapacity : tagLength;
-
-            /**
-             * Copy the partial tag from our internal buffer to the supplied
-             * target.
-             **/
-            uprv_memcpy(
-                tag,
-                tagBuffer,
-                toCopy);
-
-            capacityRemaining -= toCopy;
-        }
-
-        if (trailingLength > 0) {
-            if (*trailing != '@' && capacityRemaining > 0) {
-                tag[tagLength++] = '_';
-                --capacityRemaining;
-                if (capacityRemaining > 0 && !regionAppended) {
-                    /* extra separator is required */
-                    tag[tagLength++] = '_';
-                    --capacityRemaining;
-                }
-            }
-
-            if (capacityRemaining > 0) {
-                /*
-                 * Copy the trailing data into the supplied buffer.  Use uprv_memmove, since we
-                 * don't know if the user-supplied buffers overlap.
-                 */
-                const int32_t toCopy =
-                    trailingLength >= capacityRemaining ? capacityRemaining : trailingLength;
-
-                uprv_memmove(
-                    &tag[tagLength],
-                    trailing,
-                    toCopy);
-            }
-        }
-
-        tagLength += trailingLength;
-
-        return u_terminateChars(
-                    tag,
-                    tagCapacity,
-                    tagLength,
-                    err);
-    }
-
-error:
-
-    /**
-     * An overflow indicates the locale ID passed in
-     * is ill-formed.  If we got here, and there was
-     * no previous error, it's an implicit overflow.
-     **/
-    if (*err ==  U_BUFFER_OVERFLOW_ERROR ||
-        U_SUCCESS(*err)) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    return -1;
-}
-
-/**
- * Create a tag string from the supplied parameters.  The lang, script and region
- * parameters may be NULL pointers. If they are, their corresponding length parameters
- * must be less than or equal to 0.  If the lang parameter is an empty string, the
- * default value for an unknown language is written to the output buffer.
- *
- * If the length of the new string exceeds the capacity of the output buffer, 
- * the function copies as many bytes to the output buffer as it can, and returns
- * the error U_BUFFER_OVERFLOW_ERROR.
- *
- * If an illegal argument is provided, the function returns the error
- * U_ILLEGAL_ARGUMENT_ERROR.
- *
- * @param lang The language tag to use.
- * @param langLength The length of the language tag.
- * @param script The script tag to use.
- * @param scriptLength The length of the script tag.
- * @param region The region tag to use.
- * @param regionLength The length of the region tag.
- * @param trailing Any trailing data to append to the new tag.
- * @param trailingLength The length of the trailing data.
- * @param tag The output buffer.
- * @param tagCapacity The capacity of the output buffer.
- * @param err A pointer to a UErrorCode for error reporting.
- * @return The length of the tag string, which may be greater than tagCapacity.
- **/
-static int32_t U_CALLCONV
-createTagString(
-    const char* lang,
-    int32_t langLength,
-    const char* script,
-    int32_t scriptLength,
-    const char* region,
-    int32_t regionLength,
-    const char* trailing,
-    int32_t trailingLength,
-    char* tag,
-    int32_t tagCapacity,
-    UErrorCode* err)
-{
-    return createTagStringWithAlternates(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                region,
-                regionLength,
-                trailing,
-                trailingLength,
-                NULL,
-                tag,
-                tagCapacity,
-                err);
-}
-
-/**
- * Parse the language, script, and region subtags from a tag string, and copy the
- * results into the corresponding output parameters. The buffers are null-terminated,
- * unless overflow occurs.
- *
- * The langLength, scriptLength, and regionLength parameters are input/output
- * parameters, and must contain the capacity of their corresponding buffers on
- * input.  On output, they will contain the actual length of the buffers, not
- * including the null terminator.
- *
- * If the length of any of the output subtags exceeds the capacity of the corresponding
- * buffer, the function copies as many bytes to the output buffer as it can, and returns
- * the error U_BUFFER_OVERFLOW_ERROR.  It will not parse any more subtags once overflow
- * occurs.
- *
- * If an illegal argument is provided, the function returns the error
- * U_ILLEGAL_ARGUMENT_ERROR.
- *
- * @param localeID The locale ID to parse.
- * @param lang The language tag buffer.
- * @param langLength The length of the language tag.
- * @param script The script tag buffer.
- * @param scriptLength The length of the script tag.
- * @param region The region tag buffer.
- * @param regionLength The length of the region tag.
- * @param err A pointer to a UErrorCode for error reporting.
- * @return The number of chars of the localeID parameter consumed.
- **/
-static int32_t U_CALLCONV
-parseTagString(
-    const char* localeID,
-    char* lang,
-    int32_t* langLength,
-    char* script,
-    int32_t* scriptLength,
-    char* region,
-    int32_t* regionLength,
-    UErrorCode* err)
-{
-    const char* position = localeID;
-    int32_t subtagLength = 0;
-
-    if(U_FAILURE(*err) ||
-       localeID == NULL ||
-       lang == NULL ||
-       langLength == NULL ||
-       script == NULL ||
-       scriptLength == NULL ||
-       region == NULL ||
-       regionLength == NULL) {
-        goto error;
-    }
-
-    subtagLength = ulocimp_getLanguage(position, lang, *langLength, &position);
-    u_terminateChars(lang, *langLength, subtagLength, err);
-
-    /*
-     * Note that we explicit consider U_STRING_NOT_TERMINATED_WARNING
-     * to be an error, because it indicates the user-supplied tag is
-     * not well-formed.
-     */
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    *langLength = subtagLength;
-
-    /*
-     * If no language was present, use the value of unknownLanguage
-     * instead.  Otherwise, move past any separator.
-     */
-    if (*langLength == 0) {
-        uprv_strcpy(
-            lang,
-            unknownLanguage);
-        *langLength = (int32_t)uprv_strlen(lang);
-    }
-    else if (_isIDSeparator(*position)) {
-        ++position;
-    }
-
-    subtagLength = ulocimp_getScript(position, script, *scriptLength, &position);
-    u_terminateChars(script, *scriptLength, subtagLength, err);
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    *scriptLength = subtagLength;
-
-    if (*scriptLength > 0) {
-        if (uprv_strnicmp(script, unknownScript, *scriptLength) == 0) {
-            /**
-             * If the script part is the "unknown" script, then don't return it.
-             **/
-            *scriptLength = 0;
-        }
-
-        /*
-         * Move past any separator.
-         */
-        if (_isIDSeparator(*position)) {
-            ++position;
-        }    
-    }
-
-    subtagLength = ulocimp_getCountry(position, region, *regionLength, &position);
-    u_terminateChars(region, *regionLength, subtagLength, err);
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    *regionLength = subtagLength;
-
-    if (*regionLength > 0) {
-        if (uprv_strnicmp(region, unknownRegion, *regionLength) == 0) {
-            /**
-             * If the region part is the "unknown" region, then don't return it.
-             **/
-            *regionLength = 0;
-        }
-    } else if (*position != 0 && *position != '@') {
-        /* back up over consumed trailing separator */
-        --position;
-    }
-
-exit:
-
-    return (int32_t)(position - localeID);
-
-error:
-
-    /**
-     * If we get here, we have no explicit error, it's the result of an
-     * illegal argument.
-     **/
-    if (!U_FAILURE(*err)) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    goto exit;
-}
-
-static int32_t U_CALLCONV
-createLikelySubtagsString(
-    const char* lang,
-    int32_t langLength,
-    const char* script,
-    int32_t scriptLength,
-    const char* region,
-    int32_t regionLength,
-    const char* variants,
-    int32_t variantsLength,
-    char* tag,
-    int32_t tagCapacity,
-    UErrorCode* err)
-{
-    /**
-     * ULOC_FULLNAME_CAPACITY will provide enough capacity
-     * that we can build a string that contains the language,
-     * script and region code without worrying about overrunning
-     * the user-supplied buffer.
-     **/
-    char tagBuffer[ULOC_FULLNAME_CAPACITY];
-    char likelySubtagsBuffer[ULOC_FULLNAME_CAPACITY];
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    /**
-     * Try the language with the script and region first.
-     **/
-    if (scriptLength > 0 && regionLength > 0) {
-
-        const char* likelySubtags = NULL;
-
-        createTagString(
-            lang,
-            langLength,
-            script,
-            scriptLength,
-            region,
-            regionLength,
-            NULL,
-            0,
-            tagBuffer,
-            sizeof(tagBuffer),
-            err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer,
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            return createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        tag,
-                        tagCapacity,
-                        err);
-        }
-    }
-
-    /**
-     * Try the language with just the script.
-     **/
-    if (scriptLength > 0) {
-
-        const char* likelySubtags = NULL;
-
-        createTagString(
-            lang,
-            langLength,
-            script,
-            scriptLength,
-            NULL,
-            0,
-            NULL,
-            0,
-            tagBuffer,
-            sizeof(tagBuffer),
-            err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer,
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            return createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        region,
-                        regionLength,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        tag,
-                        tagCapacity,
-                        err);
-        }
-    }
-
-    /**
-     * Try the language with just the region.
-     **/
-    if (regionLength > 0) {
-
-        const char* likelySubtags = NULL;
-
-        createTagString(
-            lang,
-            langLength,
-            NULL,
-            0,
-            region,
-            regionLength,
-            NULL,
-            0,
-            tagBuffer,
-            sizeof(tagBuffer),
-            err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer,
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            return createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        script,
-                        scriptLength,
-                        NULL,
-                        0,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        tag,
-                        tagCapacity,
-                        err);
-        }
-    }
-
-    /**
-     * Finally, try just the language.
-     **/
-    {
-        const char* likelySubtags = NULL;
-
-        createTagString(
-            lang,
-            langLength,
-            NULL,
-            0,
-            NULL,
-            0,
-            NULL,
-            0,
-            tagBuffer,
-            sizeof(tagBuffer),
-            err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer,
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            return createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        script,
-                        scriptLength,
-                        region,
-                        regionLength,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        tag,
-                        tagCapacity,
-                        err);
-        }
-    }
-
-    return u_terminateChars(
-                tag,
-                tagCapacity,
-                0,
-                err);
-
-error:
-
-    if (!U_FAILURE(*err)) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    return -1;
-}
-
-#define CHECK_TRAILING_VARIANT_SIZE(trailing, trailingLength) \
-    {   int32_t count = 0; \
-        int32_t i; \
-        for (i = 0; i < trailingLength; i++) { \
-            if (trailing[i] == '-' || trailing[i] == '_') { \
-                count = 0; \
-                if (count > 8) { \
-                    goto error; \
-                } \
-            } else if (trailing[i] == '@') { \
-                break; \
-            } else if (count > 8) { \
-                goto error; \
-            } else { \
-                count++; \
-            } \
-        } \
-    }
-
-static int32_t
-_uloc_addLikelySubtags(const char*    localeID,
-         char* maximizedLocaleID,
-         int32_t maximizedLocaleIDCapacity,
-         UErrorCode* err)
-{
-    char lang[ULOC_LANG_CAPACITY];
-    int32_t langLength = sizeof(lang);
-    char script[ULOC_SCRIPT_CAPACITY];
-    int32_t scriptLength = sizeof(script);
-    char region[ULOC_COUNTRY_CAPACITY];
-    int32_t regionLength = sizeof(region);
-    const char* trailing = "";
-    int32_t trailingLength = 0;
-    int32_t trailingIndex = 0;
-    int32_t resultLength = 0;
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-    else if (localeID == NULL ||
-             maximizedLocaleID == NULL ||
-             maximizedLocaleIDCapacity <= 0) {
-        goto error;
-    }
-
-    trailingIndex = parseTagString(
-        localeID,
-        lang,
-        &langLength,
-        script,
-        &scriptLength,
-        region,
-        &regionLength,
-        err);
-    if(U_FAILURE(*err)) {
-        /* Overflow indicates an illegal argument error */
-        if (*err == U_BUFFER_OVERFLOW_ERROR) {
-            *err = U_ILLEGAL_ARGUMENT_ERROR;
-        }
-
-        goto error;
-    }
-
-    /* Find the length of the trailing portion. */
-    while (_isIDSeparator(localeID[trailingIndex])) {
-        trailingIndex++;
-    }
-    trailing = &localeID[trailingIndex];
-    trailingLength = (int32_t)uprv_strlen(trailing);
-
-    CHECK_TRAILING_VARIANT_SIZE(trailing, trailingLength);
-
-    resultLength =
-        createLikelySubtagsString(
-            lang,
-            langLength,
-            script,
-            scriptLength,
-            region,
-            regionLength,
-            trailing,
-            trailingLength,
-            maximizedLocaleID,
-            maximizedLocaleIDCapacity,
-            err);
-
-    if (resultLength == 0) {
-        const int32_t localIDLength = (int32_t)uprv_strlen(localeID);
-
-        /*
-         * If we get here, we need to return localeID.
-         */
-        uprv_memcpy(
-            maximizedLocaleID,
-            localeID,
-            localIDLength <= maximizedLocaleIDCapacity ? 
-                localIDLength : maximizedLocaleIDCapacity);
-
-        resultLength =
-            u_terminateChars(
-                maximizedLocaleID,
-                maximizedLocaleIDCapacity,
-                localIDLength,
-                err);
-    }
-
-    return resultLength;
-
-error:
-
-    if (!U_FAILURE(*err)) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    return -1;
-}
-
-static int32_t
-_uloc_minimizeSubtags(const char*    localeID,
-         char* minimizedLocaleID,
-         int32_t minimizedLocaleIDCapacity,
-         UErrorCode* err)
-{
-    /**
-     * ULOC_FULLNAME_CAPACITY will provide enough capacity
-     * that we can build a string that contains the language,
-     * script and region code without worrying about overrunning
-     * the user-supplied buffer.
-     **/
-    char maximizedTagBuffer[ULOC_FULLNAME_CAPACITY];
-    int32_t maximizedTagBufferLength = sizeof(maximizedTagBuffer);
-
-    char lang[ULOC_LANG_CAPACITY];
-    int32_t langLength = sizeof(lang);
-    char script[ULOC_SCRIPT_CAPACITY];
-    int32_t scriptLength = sizeof(script);
-    char region[ULOC_COUNTRY_CAPACITY];
-    int32_t regionLength = sizeof(region);
-    const char* trailing = "";
-    int32_t trailingLength = 0;
-    int32_t trailingIndex = 0;
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-    else if (localeID == NULL ||
-             minimizedLocaleID == NULL ||
-             minimizedLocaleIDCapacity <= 0) {
-        goto error;
-    }
-
-    trailingIndex =
-        parseTagString(
-            localeID,
-            lang,
-            &langLength,
-            script,
-            &scriptLength,
-            region,
-            &regionLength,
-            err);
-    if(U_FAILURE(*err)) {
-
-        /* Overflow indicates an illegal argument error */
-        if (*err == U_BUFFER_OVERFLOW_ERROR) {
-            *err = U_ILLEGAL_ARGUMENT_ERROR;
-        }
-
-        goto error;
-    }
-
-    /* Find the spot where the variants or the keywords begin, if any. */
-    while (_isIDSeparator(localeID[trailingIndex])) {
-        trailingIndex++;
-    }
-    trailing = &localeID[trailingIndex];
-    trailingLength = (int32_t)uprv_strlen(trailing);
-
-    CHECK_TRAILING_VARIANT_SIZE(trailing, trailingLength);
-
-    createTagString(
-        lang,
-        langLength,
-        script,
-        scriptLength,
-        region,
-        regionLength,
-        NULL,
-        0,
-        maximizedTagBuffer,
-        maximizedTagBufferLength,
-        err);
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    /**
-     * First, we need to first get the maximization
-     * from AddLikelySubtags.
-     **/
-    maximizedTagBufferLength =
-        uloc_addLikelySubtags(
-            maximizedTagBuffer,
-            maximizedTagBuffer,
-            maximizedTagBufferLength,
-            err);
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    /**
-     * Start first with just the language.
-     **/
-    {
-        char tagBuffer[ULOC_FULLNAME_CAPACITY];
-
-        const int32_t tagBufferLength =
-            createLikelySubtagsString(
-                lang,
-                langLength,
-                NULL,
-                0,
-                NULL,
-                0,
-                NULL,
-                0,
-                tagBuffer,
-                sizeof(tagBuffer),
-                err);
-
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-        else if (uprv_strnicmp(
-                    maximizedTagBuffer,
-                    tagBuffer,
-                    tagBufferLength) == 0) {
-
-            return createTagString(
-                        lang,
-                        langLength,
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        trailing,
-                        trailingLength,
-                        minimizedLocaleID,
-                        minimizedLocaleIDCapacity,
-                        err);
-        }
-    }
-
-    /**
-     * Next, try the language and region.
-     **/
-    if (regionLength > 0) {
-
-        char tagBuffer[ULOC_FULLNAME_CAPACITY];
-
-        const int32_t tagBufferLength =
-            createLikelySubtagsString(
-                lang,
-                langLength,
-                NULL,
-                0,
-                region,
-                regionLength,
-                NULL,
-                0,
-                tagBuffer,
-                sizeof(tagBuffer),
-                err);
-
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-        else if (uprv_strnicmp(
-                    maximizedTagBuffer,
-                    tagBuffer,
-                    tagBufferLength) == 0) {
-
-            return createTagString(
-                        lang,
-                        langLength,
-                        NULL,
-                        0,
-                        region,
-                        regionLength,
-                        trailing,
-                        trailingLength,
-                        minimizedLocaleID,
-                        minimizedLocaleIDCapacity,
-                        err);
-        }
-    }
-
-    /**
-     * Finally, try the language and script.  This is our last chance,
-     * since trying with all three subtags would only yield the
-     * maximal version that we already have.
-     **/
-    if (scriptLength > 0 && regionLength > 0) {
-        char tagBuffer[ULOC_FULLNAME_CAPACITY];
-
-        const int32_t tagBufferLength =
-            createLikelySubtagsString(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                NULL,
-                0,
-                NULL,
-                0,
-                tagBuffer,
-                sizeof(tagBuffer),
-                err);
-
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-        else if (uprv_strnicmp(
-                    maximizedTagBuffer,
-                    tagBuffer,
-                    tagBufferLength) == 0) {
-
-            return createTagString(
-                        lang,
-                        langLength,
-                        script,
-                        scriptLength,
-                        NULL,
-                        0,
-                        trailing,
-                        trailingLength,
-                        minimizedLocaleID,
-                        minimizedLocaleIDCapacity,
-                        err);
-        }
-    }
-
-    {
-        /**
-         * If we got here, return the locale ID parameter.
-         **/
-        const int32_t localeIDLength = (int32_t)uprv_strlen(localeID);
-
-        uprv_memcpy(
-            minimizedLocaleID,
-            localeID,
-            localeIDLength <= minimizedLocaleIDCapacity ? 
-                localeIDLength : minimizedLocaleIDCapacity);
-
-        return u_terminateChars(
-                    minimizedLocaleID,
-                    minimizedLocaleIDCapacity,
-                    localeIDLength,
-                    err);
-    }
-
-error:
-
-    if (!U_FAILURE(*err)) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    return -1;
-
-
-}
-
-static UBool
-do_canonicalize(const char*    localeID,
-         char* buffer,
-         int32_t bufferCapacity,
-         UErrorCode* err)
-{
-    uloc_canonicalize(
-        localeID,
-        buffer,
-        bufferCapacity,
-        err);
-
-    if (*err == U_STRING_NOT_TERMINATED_WARNING ||
-        *err == U_BUFFER_OVERFLOW_ERROR) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-
-        return FALSE;
-    }
-    else if (U_FAILURE(*err)) {
-
-        return FALSE;
-    }
-    else {
-        return TRUE;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-uloc_addLikelySubtags(const char*    localeID,
-         char* maximizedLocaleID,
-         int32_t maximizedLocaleIDCapacity,
-         UErrorCode* err)
-{
-    char localeBuffer[ULOC_FULLNAME_CAPACITY];
-
-    if (!do_canonicalize(
-        localeID,
-        localeBuffer,
-        sizeof(localeBuffer),
-        err)) {
-        return -1;
-    }
-    else {
-        return _uloc_addLikelySubtags(
-                    localeBuffer,
-                    maximizedLocaleID,
-                    maximizedLocaleIDCapacity,
-                    err);
-    }    
-}
-
-U_CAPI int32_t U_EXPORT2
-uloc_minimizeSubtags(const char*    localeID,
-         char* minimizedLocaleID,
-         int32_t minimizedLocaleIDCapacity,
-         UErrorCode* err)
-{
-    char localeBuffer[ULOC_FULLNAME_CAPACITY];
-
-    if (!do_canonicalize(
-        localeID,
-        localeBuffer,
-        sizeof(localeBuffer),
-        err)) {
-        return -1;
-    }
-    else {
-        return _uloc_minimizeSubtags(
-                    localeBuffer,
-                    minimizedLocaleID,
-                    minimizedLocaleIDCapacity,
-                    err);
-    }    
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/locmap.c b/src/third_party/mozjs/intl/icu/source/common/locmap.c
deleted file mode 100644
index 9ebc702..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locmap.c
+++ /dev/null
@@ -1,1066 +0,0 @@
-/*
- **********************************************************************
- *   Copyright (C) 1996-2012, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- *
- * Provides functionality for mapping between
- * LCID and Posix IDs or ICU locale to codepage
- *
- * Note: All classes and code in this file are
- *       intended for internal use only.
- *
- * Methods of interest:
- *   unsigned long convertToLCID(const char*);
- *   const char* convertToPosix(unsigned long);
- *
- * Kathleen Wilson, 4/30/96
- *
- *  Date        Name        Description
- *  3/11/97     aliu        Fixed off-by-one bug in assignment operator. Added
- *                          setId() method and safety check against 
- *                          MAX_ID_LENGTH.
- * 04/23/99     stephen     Added C wrapper for convertToPosix.
- * 09/18/00     george      Removed the memory leaks.
- * 08/23/01     george      Convert to C
- */
-
-#include "locmap.h"
-#include "unicode/uloc.h"
-#include "cstring.h"
-#include "cmemory.h"
-
-#if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500)
-/*
- * TODO: It seems like we should widen this to
- * either U_PLATFORM_USES_ONLY_WIN32_API (includes MinGW)
- * or U_PLATFORM_HAS_WIN32_API (includes MinGW and Cygwin)
- * but those use gcc and won't have defined(_MSC_VER).
- * We might need to #include some Windows header and test for some version macro from there.
- * Or call some Windows function and see what it returns.
- */
-#define USE_WINDOWS_LOCALE_API
-#endif
-
-#ifdef USE_WINDOWS_LOCALE_API
-#include <windows.h>
-#include <winnls.h>
-#endif
-
-/*
- * Note:
- * The mapping from Win32 locale ID numbers to POSIX locale strings should
- * be the faster one.
- *
- * Many LCID values come from winnt.h
- * Some also come from http://www.microsoft.com/globaldev/reference/lcid-all.mspx
- */
-
-/*
-////////////////////////////////////////////////
-//
-// Internal Classes for LCID <--> POSIX Mapping
-//
-/////////////////////////////////////////////////
-*/
-
-typedef struct ILcidPosixElement
-{
-    const uint32_t hostID;
-    const char * const posixID;
-} ILcidPosixElement;
-
-typedef struct ILcidPosixMap
-{
-    const uint32_t numRegions;
-    const struct ILcidPosixElement* const regionMaps;
-} ILcidPosixMap;
-
-
-/*
-/////////////////////////////////////////////////
-//
-// Easy macros to make the LCID <--> POSIX Mapping
-//
-/////////////////////////////////////////////////
-*/
-
-/**
- * The standard one language/one country mapping for LCID.
- * The first element must be the language, and the following
- * elements are the language with the country.
- * @param hostID LCID in host format such as 0x044d
- * @param languageID posix ID of just the language such as 'de'
- * @param posixID posix ID of the language_TERRITORY such as 'de_CH'
- */
-#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
-static const ILcidPosixElement locmap_ ## languageID [] = { \
-    {LANGUAGE_LCID(hostID), #languageID},     /* parent locale */ \
-    {hostID, #posixID}, \
-};
-
-/**
- * Define a subtable by ID
- * @param id the POSIX ID, either a language or language_TERRITORY
- */
-#define ILCID_POSIX_SUBTABLE(id) \
-static const ILcidPosixElement locmap_ ## id [] =
-
-
-/**
- * Create the map for the posixID. This macro supposes that the language string
- * name is the same as the global variable name, and that the first element
- * in the ILcidPosixElement is just the language.
- * @param _posixID the full POSIX ID for this entry. 
- */
-#define ILCID_POSIX_MAP(_posixID) \
-    {sizeof(locmap_ ## _posixID)/sizeof(ILcidPosixElement), locmap_ ## _posixID}
-
-/*
-////////////////////////////////////////////
-//
-// Create the table of LCID to POSIX Mapping
-// None of it should be dynamically created.
-//
-// Keep static locale variables inside the function so that
-// it can be created properly during static init.
-//
-// Note: This table should be updated periodically. Check the National Lanaguage Support API Reference Website.
-//       Microsoft is moving away from LCID in favor of locale name as of Vista.  This table needs to be
-//       maintained for support of older Windows version.
-//       Update: Windows 7 (091130)
-////////////////////////////////////////////
-*/
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)
-
-ILCID_POSIX_SUBTABLE(ar) {
-    {0x01,   "ar"},
-    {0x3801, "ar_AE"},
-    {0x3c01, "ar_BH"},
-    {0x1401, "ar_DZ"},
-    {0x0c01, "ar_EG"},
-    {0x0801, "ar_IQ"},
-    {0x2c01, "ar_JO"},
-    {0x3401, "ar_KW"},
-    {0x3001, "ar_LB"},
-    {0x1001, "ar_LY"},
-    {0x1801, "ar_MA"},
-    {0x1801, "ar_MO"},
-    {0x2001, "ar_OM"},
-    {0x4001, "ar_QA"},
-    {0x0401, "ar_SA"},
-    {0x2801, "ar_SY"},
-    {0x1c01, "ar_TN"},
-    {0x2401, "ar_YE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET)
-ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL)
-
-ILCID_POSIX_SUBTABLE(az) {
-    {0x2c,   "az"},
-    {0x082c, "az_Cyrl_AZ"},  /* Cyrillic based */
-    {0x742c, "az_Cyrl"},  /* Cyrillic based */
-    {0x042c, "az_Latn_AZ"}, /* Latin based */
-    {0x782c, "az_Latn"}, /* Latin based */
-    {0x042c, "az_AZ"} /* Latin based */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU)
-ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY)
-
-/*ILCID_POSIX_SUBTABLE(ber) {
-    {0x5f,   "ber"},
-    {0x045f, "ber_Arab_DZ"},
-    {0x045f, "ber_Arab"},
-    {0x085f, "ber_Latn_DZ"},
-    {0x085f, "ber_Latn"}
-};*/
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0466, bin, bin_NG)
-
-ILCID_POSIX_SUBTABLE(bn) {
-    {0x45,   "bn"},
-    {0x0845, "bn_BD"},
-    {0x0445, "bn_IN"}
-};
-
-ILCID_POSIX_SUBTABLE(bo) {
-    {0x51,   "bo"},
-    {0x0851, "bo_BT"},
-    {0x0451, "bo_CN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR)
-ILCID_POSIX_ELEMENT_ARRAY(0x0403, ca, ca_ES)
-ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR)
-ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US)
-
-/* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */
-ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB)
-ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)
-
-ILCID_POSIX_SUBTABLE(de) {
-    {0x07,   "de"},
-    {0x0c07, "de_AT"},
-    {0x0807, "de_CH"},
-    {0x0407, "de_DE"},
-    {0x1407, "de_LI"},
-    {0x1007, "de_LU"},
-    {0x10407,"de_DE@collation=phonebook"},  /*This is really de_DE_PHONEBOOK on Windows*/
-    {0x10407,"de@collation=phonebook"}  /*This is really de_DE_PHONEBOOK on Windows*/
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV)
-ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)
-
-ILCID_POSIX_SUBTABLE(en) {
-    {0x09,   "en"},
-    {0x0c09, "en_AU"},
-    {0x2809, "en_BZ"},
-    {0x1009, "en_CA"},
-    {0x0809, "en_GB"},
-    {0x3c09, "en_HK"},
-    {0x3809, "en_ID"},
-    {0x1809, "en_IE"},
-    {0x4009, "en_IN"},
-    {0x2009, "en_JM"},
-    {0x4409, "en_MY"},
-    {0x1409, "en_NZ"},
-    {0x3409, "en_PH"},
-    {0x4809, "en_SG"},
-    {0x2C09, "en_TT"},
-    {0x0409, "en_US"},
-    {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */
-    {0x2409, "en_VI"},  /* Virgin Islands AKA Caribbean Islands (en_CB). */
-    {0x1c09, "en_ZA"},
-    {0x3009, "en_ZW"},
-    {0x2409, "en_029"},
-    {0x0409, "en_AS"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_GU"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_MH"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_MP"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_UM"}   /* Alias for en_US. Leave last. */
-};
-
-ILCID_POSIX_SUBTABLE(en_US_POSIX) {
-    {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */
-};
-
-ILCID_POSIX_SUBTABLE(es) {
-    {0x0a,   "es"},
-    {0x2c0a, "es_AR"},
-    {0x400a, "es_BO"},
-    {0x340a, "es_CL"},
-    {0x240a, "es_CO"},
-    {0x140a, "es_CR"},
-    {0x1c0a, "es_DO"},
-    {0x300a, "es_EC"},
-    {0x0c0a, "es_ES"},      /*Modern sort.*/
-    {0x100a, "es_GT"},
-    {0x480a, "es_HN"},
-    {0x080a, "es_MX"},
-    {0x4c0a, "es_NI"},
-    {0x180a, "es_PA"},
-    {0x280a, "es_PE"},
-    {0x500a, "es_PR"},
-    {0x3c0a, "es_PY"},
-    {0x440a, "es_SV"},
-    {0x540a, "es_US"},
-    {0x380a, "es_UY"},
-    {0x200a, "es_VE"},
-    {0xe40a, "es_419"},
-    {0x040a, "es_ES@collation=traditional"},
-    {0x040a, "es@collation=traditional"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
-ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
-
-/* ISO-639 doesn't distinguish between Persian and Dari.*/
-ILCID_POSIX_SUBTABLE(fa) {
-    {0x29,   "fa"},
-    {0x0429, "fa_IR"},  /* Persian/Farsi (Iran) */
-    {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
-};
-
-/* duplicate for roundtripping */
-ILCID_POSIX_SUBTABLE(fa_AF) {
-    {0x8c,   "fa_AF"},  /* Persian/Dari (Afghanistan) */
-    {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI)
-ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH)
-ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO)
-
-ILCID_POSIX_SUBTABLE(fr) {
-    {0x0c,   "fr"},
-    {0x080c, "fr_BE"},
-    {0x0c0c, "fr_CA"},
-    {0x240c, "fr_CD"},
-    {0x240c, "fr_CG"},
-    {0x100c, "fr_CH"},
-    {0x300c, "fr_CI"},
-    {0x2c0c, "fr_CM"},
-    {0x040c, "fr_FR"},
-    {0x3c0c, "fr_HT"},
-    {0x140c, "fr_LU"},
-    {0x380c, "fr_MA"},
-    {0x180c, "fr_MC"},
-    {0x340c, "fr_ML"},
-    {0x200c, "fr_RE"},
-    {0x280c, "fr_SN"},
-    {0xe40c, "fr_015"},
-    {0x1c0c, "fr_029"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0467, fuv, fuv_NG)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0462, fy, fy_NL)
-
-ILCID_POSIX_SUBTABLE(ga) { /* Gaelic (Ireland) */
-    {0x3c,   "ga"},
-    {0x083c, "ga_IE"},
-    {0x043c, "gd_GB"}
-};
-
-ILCID_POSIX_SUBTABLE(gd) { /* Gaelic (Scotland) */
-    {0x91,   "gd"},
-    {0x0491, "gd_GB"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES)
-ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY)
-ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR)
-
-ILCID_POSIX_SUBTABLE(ha) {
-    {0x68,   "ha"},
-    {0x7c68, "ha_Latn"},
-    {0x0468, "ha_Latn_NG"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US)
-ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN)
-
-/* This LCID is really four different locales.*/
-ILCID_POSIX_SUBTABLE(hr) {
-    {0x1a,   "hr"},
-    {0x141a, "bs_Latn_BA"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x681a, "bs_Latn"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x141a, "bs_BA"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x781a, "bs"},     /* Bosnian */
-    {0x201a, "bs_Cyrl_BA"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x641a, "bs_Cyrl"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x101a, "hr_BA"},  /* Croatian in Bosnia */
-    {0x041a, "hr_HR"},  /* Croatian*/
-    {0x2c1a, "sr_Latn_ME"},
-    {0x241a, "sr_Latn_RS"},
-    {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */
-    {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/
-    {0x701a, "sr_Latn"},    /* It's 0x1a or 0x081a, pick one to make the test program happy. */
-    {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */
-    {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/
-    {0x301a, "sr_Cyrl_ME"},
-    {0x281a, "sr_Cyrl_RS"},
-    {0x6c1a, "sr_Cyrl"},    /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */
-    {0x7c1a, "sr"}          /* In CLDR sr is sr_Cyrl. */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU)
-ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM)
-ILCID_POSIX_ELEMENT_ARRAY(0x0469, ibb, ibb_NG)
-ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID)
-ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG)
-ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN)
-ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS)
-
-ILCID_POSIX_SUBTABLE(it) {
-    {0x10,   "it"},
-    {0x0810, "it_CH"},
-    {0x0410, "it_IT"}
-};
-
-ILCID_POSIX_SUBTABLE(iu) {
-    {0x5d,   "iu"},
-    {0x045d, "iu_Cans_CA"},
-    {0x785d, "iu_Cans"},
-    {0x085d, "iu_Latn_CA"},
-    {0x7c5d, "iu_Latn"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL)    /*Left in for compatibility*/
-ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
-ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)
-ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)
-ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH)
-ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN)
-
-ILCID_POSIX_SUBTABLE(ko) {
-    {0x12,   "ko"},
-    {0x0812, "ko_KP"},
-    {0x0412, "ko_KR"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr,  kr_NG)
-
-ILCID_POSIX_SUBTABLE(ks) {         /* We could add PK and CN too */
-    {0x60,   "ks"},
-    {0x0860, "ks_IN"},              /* Documentation doesn't mention script */
-    {0x0460, "ks_Arab_IN"},
-    {0x0860, "ks_Deva_IN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG)   /* Kyrgyz is spoken in Kyrgyzstan */
-ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT)   /* TODO: Verify the country */
-ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU)
-ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA)
-ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT)
-ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV)
-ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ)
-ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK)
-ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN)
-
-ILCID_POSIX_SUBTABLE(mn) {
-    {0x50,   "mn"},
-    {0x0450, "mn_MN"},
-    {0x7c50, "mn_Mong"},
-    {0x0850, "mn_Mong_CN"},
-    {0x0850, "mn_CN"},
-    {0x7850, "mn_Cyrl"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA)
-ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN)
-
-ILCID_POSIX_SUBTABLE(ms) {
-    {0x3e,   "ms"},
-    {0x083e, "ms_BN"},   /* Brunei Darussalam*/
-    {0x043e, "ms_MY"}    /* Malaysia*/
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT)
-ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM)
-
-ILCID_POSIX_SUBTABLE(ne) {
-    {0x61,   "ne"},
-    {0x0861, "ne_IN"},   /* India*/
-    {0x0461, "ne_NP"}    /* Nepal*/
-};
-
-ILCID_POSIX_SUBTABLE(nl) {
-    {0x13,   "nl"},
-    {0x0813, "nl_BE"},
-    {0x0413, "nl_NL"}
-};
-
-/* The "no" locale split into nb and nn.  By default in ICU, "no" is nb.*/
-ILCID_POSIX_SUBTABLE(no) {
-    {0x14,   "no"},     /* really nb_NO */
-    {0x7c14, "nb"},     /* really nb */
-    {0x0414, "nb_NO"},  /* really nb_NO. Keep first in the 414 list. */
-    {0x0414, "no_NO"},  /* really nb_NO */
-    {0x0814, "nn_NO"},  /* really nn_NO. Keep first in the 814 list.  */
-    {0x7814, "nn"},     /* It's 0x14 or 0x814, pick one to make the test program happy. */
-    {0x0814, "no_NO_NY"}/* really nn_NO */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA)   /* TODO: Verify the ISO-639 code */
-ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR)
-
-ILCID_POSIX_SUBTABLE(om) { /* TODO: Verify the country */
-    {0x72,   "om"},
-    {0x0472, "om_ET"},
-    {0x0472, "gaz_ET"}
-};
-
-/* Declared as or_IN to get around compiler errors*/
-ILCID_POSIX_SUBTABLE(or_IN) {
-    {0x48,   "or"},
-    {0x0448, "or_IN"},
-};
-
-
-ILCID_POSIX_SUBTABLE(pa) {
-    {0x46,   "pa"},
-    {0x0446, "pa_IN"},
-    {0x0846, "pa_PK"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0479, pap, pap_AN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF)
-
-ILCID_POSIX_SUBTABLE(pt) {
-    {0x16,   "pt"},
-    {0x0416, "pt_BR"},
-    {0x0816, "pt_PT"}
-};
-
-ILCID_POSIX_SUBTABLE(qu) {
-    {0x6b,   "qu"},
-    {0x046b, "qu_BO"},
-    {0x086b, "qu_EC"},
-    {0x0C6b, "qu_PE"},
-    {0x046b, "quz_BO"},
-    {0x086b, "quz_EC"},
-    {0x0C6b, "quz_PE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0486, qut, qut_GT) /* qut is an ISO-639-3 code */
-ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH)
-
-ILCID_POSIX_SUBTABLE(ro) {
-    {0x18,   "ro"},
-    {0x0418, "ro_RO"},
-    {0x0818, "ro_MD"}
-};
-
-ILCID_POSIX_SUBTABLE(root) {
-    {0x00,   "root"}
-};
-
-ILCID_POSIX_SUBTABLE(ru) {
-    {0x19,   "ru"},
-    {0x0419, "ru_RU"},
-    {0x0819, "ru_MD"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW)
-ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU)
-
-ILCID_POSIX_SUBTABLE(sd) {
-    {0x59,   "sd"},
-    {0x0459, "sd_IN"},
-    {0x0859, "sd_PK"}
-};
-
-ILCID_POSIX_SUBTABLE(se) {
-    {0x3b,   "se"},
-    {0x0c3b, "se_FI"},
-    {0x043b, "se_NO"},
-    {0x083b, "se_SE"},
-    {0x783b, "sma"},
-    {0x183b, "sma_NO"},
-    {0x1c3b, "sma_SE"},
-    {0x7c3b, "smj"},
-    {0x703b, "smn"},
-    {0x743b, "sms"},
-    {0x103b, "smj_NO"},
-    {0x143b, "smj_SE"},
-    {0x243b, "smn_FI"},
-    {0x203b, "sms_FI"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK)
-ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK)
-ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI)
-
-ILCID_POSIX_SUBTABLE(so) { /* TODO: Verify the country */
-    {0x77,   "so"},
-    {0x0477, "so_ET"},
-    {0x0477, "so_SO"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0430, st, st_ZA)
-
-ILCID_POSIX_SUBTABLE(sv) {
-    {0x1d,   "sv"},
-    {0x081d, "sv_FI"},
-    {0x041d, "sv_SE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE)
-ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY)
-ILCID_POSIX_ELEMENT_ARRAY(0x0449, ta, ta_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN)
-
-/* Cyrillic based by default */
-ILCID_POSIX_SUBTABLE(tg) {
-    {0x28,   "tg"},
-    {0x7c28, "tg_Cyrl"},
-    {0x0428, "tg_Cyrl_TJ"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH)
-
-ILCID_POSIX_SUBTABLE(ti) {
-    {0x73,   "ti"},
-    {0x0473, "ti_ER"},
-    {0x0873, "ti_ER"},
-    {0x0873, "ti_ET"},
-    {0x0473, "ti_ET"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM)
-
-ILCID_POSIX_SUBTABLE(tn) {
-    {0x32,   "tn"},
-    {0x0432, "tn_BW"},
-    {0x0432, "tn_ZA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR)
-ILCID_POSIX_ELEMENT_ARRAY(0x0431, ts, ts_ZA)
-ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU)
-
-ILCID_POSIX_SUBTABLE(tzm) {
-    {0x5f,   "tzm"},
-    {0x7c5f, "tzm_Latn"},
-    {0x085f, "tzm_Latn_DZ"},
-    {0x045f, "tmz"}
-};
-
-ILCID_POSIX_SUBTABLE(ug) {
-    {0x80,   "ug"},
-    {0x0480, "ug_CN"},
-    {0x0480, "ug_Arab_CN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)
-
-ILCID_POSIX_SUBTABLE(ur) {
-    {0x20,   "ur"},
-    {0x0820, "ur_IN"},
-    {0x0420, "ur_PK"}
-};
-
-ILCID_POSIX_SUBTABLE(uz) {
-    {0x43,   "uz"},
-    {0x0843, "uz_Cyrl_UZ"},  /* Cyrillic based */
-    {0x7843, "uz_Cyrl"},  /* Cyrillic based */
-    {0x0843, "uz_UZ"},  /* Cyrillic based */
-    {0x0443, "uz_Latn_UZ"}, /* Latin based */
-    {0x7c43, "uz_Latn"} /* Latin based */
-};
-
-ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */
-    {0x33,   "ve"},
-    {0x0433, "ve_ZA"},
-    {0x0433, "ven_ZA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)
-
-ILCID_POSIX_SUBTABLE(wen) {
-    {0x2E,   "wen"},
-    {0x042E, "wen_DE"},
-    {0x042E, "hsb_DE"},
-    {0x082E, "dsb_DE"},
-    {0x7C2E, "dsb"},
-    {0x2E,   "hsb"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA)
-ILCID_POSIX_ELEMENT_ARRAY(0x043d, yi, yi)
-ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG)
-
-ILCID_POSIX_SUBTABLE(zh) {
-    {0x0004, "zh_Hans"},
-    {0x7804, "zh"},
-    {0x0804, "zh_CN"},
-    {0x0804, "zh_Hans_CN"},
-    {0x0c04, "zh_Hant_HK"},
-    {0x0c04, "zh_HK"},
-    {0x1404, "zh_Hant_MO"},
-    {0x1404, "zh_MO"},
-    {0x1004, "zh_Hans_SG"},
-    {0x1004, "zh_SG"},
-    {0x0404, "zh_Hant_TW"},
-    {0x7c04, "zh_Hant"},
-    {0x0404, "zh_TW"},
-    {0x30404,"zh_Hant_TW"},     /* Bopomofo order */
-    {0x30404,"zh_TW"},          /* Bopomofo order */
-    {0x20004,"zh@collation=stroke"},
-    {0x20404,"zh_Hant@collation=stroke"},
-    {0x20404,"zh_Hant_TW@collation=stroke"},
-    {0x20404,"zh_TW@collation=stroke"},
-    {0x20804,"zh_Hans@collation=stroke"},
-    {0x20804,"zh_Hans_CN@collation=stroke"},
-    {0x20804,"zh_CN@collation=stroke"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
-
-/* This must be static and grouped by LCID. */
-static const ILcidPosixMap gPosixIDmap[] = {
-    ILCID_POSIX_MAP(af),    /*  af  Afrikaans                 0x36 */
-    ILCID_POSIX_MAP(am),    /*  am  Amharic                   0x5e */
-    ILCID_POSIX_MAP(ar),    /*  ar  Arabic                    0x01 */
-    ILCID_POSIX_MAP(arn),   /*  arn Araucanian/Mapudungun     0x7a */
-    ILCID_POSIX_MAP(as),    /*  as  Assamese                  0x4d */
-    ILCID_POSIX_MAP(az),    /*  az  Azerbaijani               0x2c */
-    ILCID_POSIX_MAP(ba),    /*  ba  Bashkir                   0x6d */
-    ILCID_POSIX_MAP(be),    /*  be  Belarusian                0x23 */
-/*    ILCID_POSIX_MAP(ber),     ber Berber/Tamazight          0x5f */
-    ILCID_POSIX_MAP(bg),    /*  bg  Bulgarian                 0x02 */
-    ILCID_POSIX_MAP(bin),   /*  bin Edo                       0x66 */
-    ILCID_POSIX_MAP(bn),    /*  bn  Bengali; Bangla           0x45 */
-    ILCID_POSIX_MAP(bo),    /*  bo  Tibetan                   0x51 */
-    ILCID_POSIX_MAP(br),    /*  br  Breton                    0x7e */
-    ILCID_POSIX_MAP(ca),    /*  ca  Catalan                   0x03 */
-    ILCID_POSIX_MAP(chr),   /*  chr Cherokee                  0x5c */
-    ILCID_POSIX_MAP(co),    /*  co  Corsican                  0x83 */
-    ILCID_POSIX_MAP(cs),    /*  cs  Czech                     0x05 */
-    ILCID_POSIX_MAP(cy),    /*  cy  Welsh                     0x52 */
-    ILCID_POSIX_MAP(da),    /*  da  Danish                    0x06 */
-    ILCID_POSIX_MAP(de),    /*  de  German                    0x07 */
-    ILCID_POSIX_MAP(dv),    /*  dv  Divehi                    0x65 */
-    ILCID_POSIX_MAP(el),    /*  el  Greek                     0x08 */
-    ILCID_POSIX_MAP(en),    /*  en  English                   0x09 */
-    ILCID_POSIX_MAP(en_US_POSIX), /*    invariant             0x7f */
-    ILCID_POSIX_MAP(es),    /*  es  Spanish                   0x0a */
-    ILCID_POSIX_MAP(et),    /*  et  Estonian                  0x25 */
-    ILCID_POSIX_MAP(eu),    /*  eu  Basque                    0x2d */
-    ILCID_POSIX_MAP(fa),    /*  fa  Persian/Farsi             0x29 */
-    ILCID_POSIX_MAP(fa_AF), /*  fa  Persian/Dari              0x8c */
-    ILCID_POSIX_MAP(fi),    /*  fi  Finnish                   0x0b */
-    ILCID_POSIX_MAP(fil),   /*  fil Filipino                  0x64 */
-    ILCID_POSIX_MAP(fo),    /*  fo  Faroese                   0x38 */
-    ILCID_POSIX_MAP(fr),    /*  fr  French                    0x0c */
-    ILCID_POSIX_MAP(fuv),   /*  fuv Fulfulde - Nigeria        0x67 */
-    ILCID_POSIX_MAP(fy),    /*  fy  Frisian                   0x62 */
-    ILCID_POSIX_MAP(ga),    /*  *   Gaelic (Ireland,Scotland) 0x3c */
-    ILCID_POSIX_MAP(gd),    /*  gd  Gaelic (United Kingdom)   0x91 */
-    ILCID_POSIX_MAP(gl),    /*  gl  Galician                  0x56 */
-    ILCID_POSIX_MAP(gn),    /*  gn  Guarani                   0x74 */
-    ILCID_POSIX_MAP(gsw),   /*  gsw Alemanic/Alsatian/Swiss German 0x84 */
-    ILCID_POSIX_MAP(gu),    /*  gu  Gujarati                  0x47 */
-    ILCID_POSIX_MAP(ha),    /*  ha  Hausa                     0x68 */
-    ILCID_POSIX_MAP(haw),   /*  haw Hawaiian                  0x75 */
-    ILCID_POSIX_MAP(he),    /*  he  Hebrew (formerly iw)      0x0d */
-    ILCID_POSIX_MAP(hi),    /*  hi  Hindi                     0x39 */
-    ILCID_POSIX_MAP(hr),    /*  *   Croatian and others       0x1a */
-    ILCID_POSIX_MAP(hu),    /*  hu  Hungarian                 0x0e */
-    ILCID_POSIX_MAP(hy),    /*  hy  Armenian                  0x2b */
-    ILCID_POSIX_MAP(ibb),   /*  ibb Ibibio - Nigeria          0x69 */
-    ILCID_POSIX_MAP(id),    /*  id  Indonesian (formerly in)  0x21 */
-    ILCID_POSIX_MAP(ig),    /*  ig  Igbo                      0x70 */
-    ILCID_POSIX_MAP(ii),    /*  ii  Sichuan Yi                0x78 */
-    ILCID_POSIX_MAP(is),    /*  is  Icelandic                 0x0f */
-    ILCID_POSIX_MAP(it),    /*  it  Italian                   0x10 */
-    ILCID_POSIX_MAP(iu),    /*  iu  Inuktitut                 0x5d */
-    ILCID_POSIX_MAP(iw),    /*  iw  Hebrew                    0x0d */
-    ILCID_POSIX_MAP(ja),    /*  ja  Japanese                  0x11 */
-    ILCID_POSIX_MAP(ka),    /*  ka  Georgian                  0x37 */
-    ILCID_POSIX_MAP(kk),    /*  kk  Kazakh                    0x3f */
-    ILCID_POSIX_MAP(kl),    /*  kl  Kalaallisut               0x6f */
-    ILCID_POSIX_MAP(km),    /*  km  Khmer                     0x53 */
-    ILCID_POSIX_MAP(kn),    /*  kn  Kannada                   0x4b */
-    ILCID_POSIX_MAP(ko),    /*  ko  Korean                    0x12 */
-    ILCID_POSIX_MAP(kok),   /*  kok Konkani                   0x57 */
-    ILCID_POSIX_MAP(kr),    /*  kr  Kanuri                    0x71 */
-    ILCID_POSIX_MAP(ks),    /*  ks  Kashmiri                  0x60 */
-    ILCID_POSIX_MAP(ky),    /*  ky  Kyrgyz                    0x40 */
-    ILCID_POSIX_MAP(lb),    /*  lb  Luxembourgish             0x6e */
-    ILCID_POSIX_MAP(la),    /*  la  Latin                     0x76 */
-    ILCID_POSIX_MAP(lo),    /*  lo  Lao                       0x54 */
-    ILCID_POSIX_MAP(lt),    /*  lt  Lithuanian                0x27 */
-    ILCID_POSIX_MAP(lv),    /*  lv  Latvian, Lettish          0x26 */
-    ILCID_POSIX_MAP(mi),    /*  mi  Maori                     0x81 */
-    ILCID_POSIX_MAP(mk),    /*  mk  Macedonian                0x2f */
-    ILCID_POSIX_MAP(ml),    /*  ml  Malayalam                 0x4c */
-    ILCID_POSIX_MAP(mn),    /*  mn  Mongolian                 0x50 */
-    ILCID_POSIX_MAP(mni),   /*  mni Manipuri                  0x58 */
-    ILCID_POSIX_MAP(moh),   /*  moh Mohawk                    0x7c */
-    ILCID_POSIX_MAP(mr),    /*  mr  Marathi                   0x4e */
-    ILCID_POSIX_MAP(ms),    /*  ms  Malay                     0x3e */
-    ILCID_POSIX_MAP(mt),    /*  mt  Maltese                   0x3a */
-    ILCID_POSIX_MAP(my),    /*  my  Burmese                   0x55 */
-/*    ILCID_POSIX_MAP(nb),    //  no  Norwegian                 0x14 */
-    ILCID_POSIX_MAP(ne),    /*  ne  Nepali                    0x61 */
-    ILCID_POSIX_MAP(nl),    /*  nl  Dutch                     0x13 */
-/*    ILCID_POSIX_MAP(nn),    //  no  Norwegian                 0x14 */
-    ILCID_POSIX_MAP(no),    /*  *   Norwegian                 0x14 */
-    ILCID_POSIX_MAP(nso),   /*  nso Sotho, Northern (Sepedi dialect) 0x6c */
-    ILCID_POSIX_MAP(oc),    /*  oc  Occitan                   0x82 */
-    ILCID_POSIX_MAP(om),    /*  om  Oromo                     0x72 */
-    ILCID_POSIX_MAP(or_IN), /*  or  Oriya                     0x48 */
-    ILCID_POSIX_MAP(pa),    /*  pa  Punjabi                   0x46 */
-    ILCID_POSIX_MAP(pap),   /*  pap Papiamentu                0x79 */
-    ILCID_POSIX_MAP(pl),    /*  pl  Polish                    0x15 */
-    ILCID_POSIX_MAP(ps),    /*  ps  Pashto                    0x63 */
-    ILCID_POSIX_MAP(pt),    /*  pt  Portuguese                0x16 */
-    ILCID_POSIX_MAP(qu),    /*  qu  Quechua                   0x6B */
-    ILCID_POSIX_MAP(qut),   /*  qut K'iche                    0x86 */
-    ILCID_POSIX_MAP(rm),    /*  rm  Raeto-Romance/Romansh     0x17 */
-    ILCID_POSIX_MAP(ro),    /*  ro  Romanian                  0x18 */
-    ILCID_POSIX_MAP(root),  /*  root                          0x00 */
-    ILCID_POSIX_MAP(ru),    /*  ru  Russian                   0x19 */
-    ILCID_POSIX_MAP(rw),    /*  rw  Kinyarwanda               0x87 */
-    ILCID_POSIX_MAP(sa),    /*  sa  Sanskrit                  0x4f */
-    ILCID_POSIX_MAP(sah),   /*  sah Yakut                     0x85 */
-    ILCID_POSIX_MAP(sd),    /*  sd  Sindhi                    0x59 */
-    ILCID_POSIX_MAP(se),    /*  se  Sami                      0x3b */
-/*    ILCID_POSIX_MAP(sh),    //  sh  Serbo-Croatian            0x1a */
-    ILCID_POSIX_MAP(si),    /*  si  Sinhalese                 0x5b */
-    ILCID_POSIX_MAP(sk),    /*  sk  Slovak                    0x1b */
-    ILCID_POSIX_MAP(sl),    /*  sl  Slovenian                 0x24 */
-    ILCID_POSIX_MAP(so),    /*  so  Somali                    0x77 */
-    ILCID_POSIX_MAP(sq),    /*  sq  Albanian                  0x1c */
-/*    ILCID_POSIX_MAP(sr),    //  sr  Serbian                   0x1a */
-    ILCID_POSIX_MAP(st),    /*  st  Sutu                      0x30 */
-    ILCID_POSIX_MAP(sv),    /*  sv  Swedish                   0x1d */
-    ILCID_POSIX_MAP(sw),    /*  sw  Swahili                   0x41 */
-    ILCID_POSIX_MAP(syr),   /*  syr Syriac                    0x5A */
-    ILCID_POSIX_MAP(ta),    /*  ta  Tamil                     0x49 */
-    ILCID_POSIX_MAP(te),    /*  te  Telugu                    0x4a */
-    ILCID_POSIX_MAP(tg),    /*  tg  Tajik                     0x28 */
-    ILCID_POSIX_MAP(th),    /*  th  Thai                      0x1e */
-    ILCID_POSIX_MAP(ti),    /*  ti  Tigrigna                  0x73 */
-    ILCID_POSIX_MAP(tk),    /*  tk  Turkmen                   0x42 */
-    ILCID_POSIX_MAP(tn),    /*  tn  Tswana                    0x32 */
-    ILCID_POSIX_MAP(tr),    /*  tr  Turkish                   0x1f */
-    ILCID_POSIX_MAP(ts),    /*  ts  Tsonga                    0x31 */
-    ILCID_POSIX_MAP(tt),    /*  tt  Tatar                     0x44 */
-    ILCID_POSIX_MAP(tzm),   /*  tzm Tamazight                 0x5f */
-    ILCID_POSIX_MAP(ug),    /*  ug  Uighur                    0x80 */
-    ILCID_POSIX_MAP(uk),    /*  uk  Ukrainian                 0x22 */
-    ILCID_POSIX_MAP(ur),    /*  ur  Urdu                      0x20 */
-    ILCID_POSIX_MAP(uz),    /*  uz  Uzbek                     0x43 */
-    ILCID_POSIX_MAP(ve),    /*  ve  Venda                     0x33 */
-    ILCID_POSIX_MAP(vi),    /*  vi  Vietnamese                0x2a */
-    ILCID_POSIX_MAP(wen),   /*  wen Sorbian                   0x2e */
-    ILCID_POSIX_MAP(wo),    /*  wo  Wolof                     0x88 */
-    ILCID_POSIX_MAP(xh),    /*  xh  Xhosa                     0x34 */
-    ILCID_POSIX_MAP(yi),    /*  yi  Yiddish                   0x3d */
-    ILCID_POSIX_MAP(yo),    /*  yo  Yoruba                    0x6a */
-    ILCID_POSIX_MAP(zh),    /*  zh  Chinese                   0x04 */
-    ILCID_POSIX_MAP(zu),    /*  zu  Zulu                      0x35 */
-};
-
-static const uint32_t gLocaleCount = sizeof(gPosixIDmap)/sizeof(ILcidPosixMap);
-
-/**
- * Do not call this function. It is called by hostID.
- * The function is not private because this struct must stay as a C struct,
- * and this is an internal class.
- */
-static int32_t
-idCmp(const char* id1, const char* id2)
-{
-    int32_t diffIdx = 0;
-    while (*id1 == *id2 && *id1 != 0) {
-        diffIdx++;
-        id1++;
-        id2++;
-    }
-    return diffIdx;
-}
-
-/**
- * Searches for a Windows LCID
- *
- * @param posixid the Posix style locale id.
- * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
- *               no equivalent Windows LCID.
- * @return the LCID
- */
-static uint32_t
-getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
-{
-    int32_t bestIdx = 0;
-    int32_t bestIdxDiff = 0;
-    int32_t posixIDlen = (int32_t)uprv_strlen(posixID);
-    uint32_t idx;
-
-    for (idx = 0; idx < this_0->numRegions; idx++ ) {
-        int32_t sameChars = idCmp(posixID, this_0->regionMaps[idx].posixID);
-        if (sameChars > bestIdxDiff && this_0->regionMaps[idx].posixID[sameChars] == 0) {
-            if (posixIDlen == sameChars) {
-                /* Exact match */
-                return this_0->regionMaps[idx].hostID;
-            }
-            bestIdxDiff = sameChars;
-            bestIdx = idx;
-        }
-    }
-    /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */
-    /* We also have to make sure that sid and si and similar string subsets don't match. */
-    if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@')
-        && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0)
-    {
-        *status = U_USING_FALLBACK_WARNING;
-        return this_0->regionMaps[bestIdx].hostID;
-    }
-
-    /*no match found */
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-    return this_0->regionMaps->hostID;
-}
-
-static const char*
-getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
-{
-    uint32_t i;
-    for (i = 0; i <= this_0->numRegions; i++)
-    {
-        if (this_0->regionMaps[i].hostID == hostID)
-        {
-            return this_0->regionMaps[i].posixID;
-        }
-    }
-
-    /* If you get here, then no matching region was found,
-       so return the language id with the wild card region. */
-    return this_0->regionMaps[0].posixID;
-}
-
-/*
-//////////////////////////////////////
-//
-// LCID --> POSIX
-//
-/////////////////////////////////////
-*/
-#ifdef USE_WINDOWS_LOCALE_API
-/*
- * Change the tag separator from '-' to '_'
- */
-#define FIX_LOCALE_ID_TAG_SEPARATOR(buffer, len, i) \
-    for(i = 0; i < len; i++) \
-        if (buffer[i] == '-') buffer[i] = '_';
-
-/*
- * Various language tags needs to be changed:
- * quz -> qu
- * prs -> fa
- */
-#define FIX_LANGUAGE_ID_TAG(buffer, len) \
-    if (len >= 3) { \
-        if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {\
-            buffer[2] = 0; \
-            uprv_strcat(buffer, buffer+3); \
-        } else if (buffer[0] == 'p' && buffer[1] == 'r' && buffer[2] == 's') {\
-            buffer[0] = 'f'; buffer[1] = 'a'; buffer[2] = 0; \
-            uprv_strcat(buffer, buffer+3); \
-        } \
-    }
-
-static char gPosixFromLCID[ULOC_FULLNAME_CAPACITY];
-#endif
-U_CAPI const char *
-uprv_convertToPosix(uint32_t hostid, UErrorCode* status)
-{
-    uint16_t langID;
-    uint32_t localeIndex;
-#ifdef USE_WINDOWS_LOCALE_API
-    int32_t ret = 0;
-
-    uprv_memset(gPosixFromLCID, 0, sizeof(gPosixFromLCID));
-
-    ret = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)gPosixFromLCID, sizeof(gPosixFromLCID));
-    if (ret > 1) {
-        FIX_LOCALE_ID_TAG_SEPARATOR(gPosixFromLCID, (uint32_t)ret, localeIndex)
-        FIX_LANGUAGE_ID_TAG(gPosixFromLCID, ret)
-
-        return gPosixFromLCID;
-    }
-#endif
-    langID = LANGUAGE_LCID(hostid);
-
-    for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++)
-    {
-        if (langID == gPosixIDmap[localeIndex].regionMaps->hostID)
-        {
-            return getPosixID(&gPosixIDmap[localeIndex], hostid);
-        }
-    }
-
-    /* no match found */
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-    return NULL;
-}
-
-/*
-//////////////////////////////////////
-//
-// POSIX --> LCID
-// This should only be called from uloc_getLCID.
-// The locale ID must be in canonical form.
-// langID is separate so that this file doesn't depend on the uloc_* API.
-//
-/////////////////////////////////////
-*/
-
-U_CAPI uint32_t
-uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
-{
-
-    uint32_t   low    = 0;
-    uint32_t   high   = gLocaleCount;
-    uint32_t   mid;
-    uint32_t   oldmid = 0;
-    int32_t    compVal;
-
-    uint32_t   value         = 0;
-    uint32_t   fallbackValue = (uint32_t)-1;
-    UErrorCode myStatus;
-    uint32_t   idx;
-
-    /* Check for incomplete id. */
-    if (!langID || !posixID || uprv_strlen(langID) < 2 || uprv_strlen(posixID) < 2) {
-        return 0;
-    }
-
-    /*Binary search for the map entry for normal cases */
-
-    while (high > low)  /*binary search*/{
-
-        mid = (high+low) >> 1; /*Finds median*/
-
-        if (mid == oldmid) 
-            break;
-
-        compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID);
-        if (compVal < 0){
-            high = mid;
-        }
-        else if (compVal > 0){
-            low = mid;
-        }
-        else /*we found it*/{
-            return getHostID(&gPosixIDmap[mid], posixID, status);
-        }
-        oldmid = mid;
-    }
-
-    /*
-     * Sometimes we can't do a binary search on posixID because some LCIDs
-     * go to different locales.  We hit one of those special cases.
-     */
-    for (idx = 0; idx < gLocaleCount; idx++ ) {
-        myStatus = U_ZERO_ERROR;
-        value = getHostID(&gPosixIDmap[idx], posixID, &myStatus);
-        if (myStatus == U_ZERO_ERROR) {
-            return value;
-        }
-        else if (myStatus == U_USING_FALLBACK_WARNING) {
-            fallbackValue = value;
-        }
-    }
-
-    if (fallbackValue != (uint32_t)-1) {
-        *status = U_USING_FALLBACK_WARNING;
-        return fallbackValue;
-    }
-
-    /* no match found */
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-    return 0;   /* return international (root) */
-}
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/locmap.h b/src/third_party/mozjs/intl/icu/source/common/locmap.h
deleted file mode 100644
index 7db0607..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locmap.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1996-2004, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File locmap.h      : Locale Mapping Classes
-* 
-*
-* Created by: Helena Shih
-*
-* Modification History:
-*
-*  Date        Name        Description
-*  3/11/97     aliu        Added setId().
-*  4/20/99     Madhu       Added T_convertToPosix()
-* 09/18/00     george      Removed the memory leaks.
-* 08/23/01     george      Convert to C
-*============================================================================
-*/
-
-#ifndef LOCMAP_H
-#define LOCMAP_H
-
-#include "unicode/utypes.h"
-
-#define LANGUAGE_LCID(hostID) (uint16_t)(0x03FF & hostID)
-
-U_CAPI const char *uprv_convertToPosix(uint32_t hostid, UErrorCode* status);
-
-/* Don't call this function directly. Use uloc_getLCID instead. */
-U_CAPI uint32_t uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status);
-
-#endif /* LOCMAP_H */
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/locresdata.cpp b/src/third_party/mozjs/intl/icu/source/common/locresdata.cpp
deleted file mode 100644
index 68996f2..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locresdata.cpp
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  loclikely.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010feb25
-*   created by: Markus W. Scherer
-*
-*   Code for miscellaneous locale-related resource bundle data access,
-*   separated out from other .cpp files
-*   that then do not depend on resource bundle code and this data.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/putil.h"
-#include "unicode/uloc.h"
-#include "unicode/ures.h"
-#include "cstring.h"
-#include "ulocimp.h"
-#include "uresimp.h"
-
-/*
- * Lookup a resource bundle table item with fallback on the table level.
- * Regular resource bundle lookups perform fallback to parent locale bundles
- * and eventually the root bundle, but only for top-level items.
- * This function takes the name of a top-level table and of an item in that table
- * and performs a lookup of both, falling back until a bundle contains a table
- * with this item.
- *
- * Note: Only the opening of entire bundles falls back through the default locale
- * before root. Once a bundle is open, item lookups do not go through the
- * default locale because that would result in a mix of languages that is
- * unpredictable to the programmer and most likely useless.
- */
-U_CAPI const UChar * U_EXPORT2
-uloc_getTableStringWithFallback(const char *path, const char *locale,
-                              const char *tableKey, const char *subTableKey,
-                              const char *itemKey,
-                              int32_t *pLength,
-                              UErrorCode *pErrorCode)
-{
-/*    char localeBuffer[ULOC_FULLNAME_CAPACITY*4];*/
-    UResourceBundle *rb=NULL, table, subTable;
-    const UChar *item=NULL;
-    UErrorCode errorCode;
-    char explicitFallbackName[ULOC_FULLNAME_CAPACITY] = {0};
-
-    /*
-     * open the bundle for the current locale
-     * this falls back through the locale's chain to root
-     */
-    errorCode=U_ZERO_ERROR;
-    rb=ures_open(path, locale, &errorCode);
-
-    if(U_FAILURE(errorCode)) {
-        /* total failure, not even root could be opened */
-        *pErrorCode=errorCode;
-        return NULL;
-    } else if(errorCode==U_USING_DEFAULT_WARNING ||
-                (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING)
-    ) {
-        /* set the "strongest" error code (success->fallback->default->failure) */
-        *pErrorCode=errorCode;
-    }
-
-    for(;;){
-        ures_initStackObject(&table);
-        ures_initStackObject(&subTable);
-        ures_getByKeyWithFallback(rb, tableKey, &table, &errorCode);
-
-        if (subTableKey != NULL) {
-            /*
-            ures_getByKeyWithFallback(&table,subTableKey, &subTable, &errorCode);
-            item = ures_getStringByKeyWithFallback(&subTable, itemKey, pLength, &errorCode);
-            if(U_FAILURE(errorCode)){
-                *pErrorCode = errorCode;
-            }
-            
-            break;*/
-            
-            ures_getByKeyWithFallback(&table,subTableKey, &table, &errorCode);
-        }
-        if(U_SUCCESS(errorCode)){
-            item = ures_getStringByKeyWithFallback(&table, itemKey, pLength, &errorCode);
-            if(U_FAILURE(errorCode)){
-                const char* replacement = NULL;
-                *pErrorCode = errorCode; /*save the errorCode*/
-                errorCode = U_ZERO_ERROR;
-                /* may be a deprecated code */
-                if(uprv_strcmp(tableKey, "Countries")==0){
-                    replacement =  uloc_getCurrentCountryID(itemKey);
-                }else if(uprv_strcmp(tableKey, "Languages")==0){
-                    replacement =  uloc_getCurrentLanguageID(itemKey);
-                }
-                /*pointer comparison is ok since uloc_getCurrentCountryID & uloc_getCurrentLanguageID return the key itself is replacement is not found*/
-                if(replacement!=NULL && itemKey != replacement){
-                    item = ures_getStringByKeyWithFallback(&table, replacement, pLength, &errorCode);
-                    if(U_SUCCESS(errorCode)){
-                        *pErrorCode = errorCode;
-                        break;
-                    }
-                }
-            }else{
-                break;
-            }
-        }
-        
-        if(U_FAILURE(errorCode)){    
-
-            /* still can't figure out ?.. try the fallback mechanism */
-            int32_t len = 0;
-            const UChar* fallbackLocale =  NULL;
-            *pErrorCode = errorCode;
-            errorCode = U_ZERO_ERROR;
-
-            fallbackLocale = ures_getStringByKeyWithFallback(&table, "Fallback", &len, &errorCode);
-            if(U_FAILURE(errorCode)){
-               *pErrorCode = errorCode;
-                break;
-            }
-            
-            u_UCharsToChars(fallbackLocale, explicitFallbackName, len);
-            
-            /* guard against recursive fallback */
-            if(uprv_strcmp(explicitFallbackName, locale)==0){
-                *pErrorCode = U_INTERNAL_PROGRAM_ERROR;
-                break;
-            }
-            ures_close(rb);
-            rb = ures_open(path, explicitFallbackName, &errorCode);
-            if(U_FAILURE(errorCode)){
-                *pErrorCode = errorCode;
-                break;
-            }
-            /* succeeded in opening the fallback bundle .. continue and try to fetch the item */
-        }else{
-            break;
-        }
-    }
-    /* done with the locale string - ready to close table and rb */
-    ures_close(&subTable);
-    ures_close(&table);
-    ures_close(rb);
-    return item;
-}
-
-static ULayoutType
-_uloc_getOrientationHelper(const char* localeId,
-                           const char* key,
-                           UErrorCode *status)
-{
-    ULayoutType result = ULOC_LAYOUT_UNKNOWN;
-
-    if (!U_FAILURE(*status)) {
-        int32_t length = 0;
-        char localeBuffer[ULOC_FULLNAME_CAPACITY];
-
-        uloc_canonicalize(localeId, localeBuffer, sizeof(localeBuffer), status);
-
-        if (!U_FAILURE(*status)) {
-            const UChar* const value =
-                uloc_getTableStringWithFallback(
-                    NULL,
-                    localeBuffer,
-                    "layout",
-                    NULL,
-                    key,
-                    &length,
-                    status);
-
-            if (!U_FAILURE(*status) && length != 0) {
-                switch(value[0])
-                {
-                case 0x0062: /* 'b' */
-                    result = ULOC_LAYOUT_BTT;
-                    break;
-                case 0x006C: /* 'l' */
-                    result = ULOC_LAYOUT_LTR;
-                    break;
-                case 0x0072: /* 'r' */
-                    result = ULOC_LAYOUT_RTL;
-                    break;
-                case 0x0074: /* 't' */
-                    result = ULOC_LAYOUT_TTB;
-                    break;
-                default:
-                    *status = U_INTERNAL_PROGRAM_ERROR;
-                    break;
-                }
-            }
-        }
-    }
-
-    return result;
-}
-
-U_CAPI ULayoutType U_EXPORT2
-uloc_getCharacterOrientation(const char* localeId,
-                             UErrorCode *status)
-{
-    return _uloc_getOrientationHelper(localeId, "characters", status);
-}
-
-/**
- * Get the layout line orientation for the specified locale.
- * 
- * @param localeID locale name
- * @param status Error status
- * @return an enum indicating the layout orientation for lines.
- */
-U_CAPI ULayoutType U_EXPORT2
-uloc_getLineOrientation(const char* localeId,
-                        UErrorCode *status)
-{
-    return _uloc_getOrientationHelper(localeId, "lines", status);
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/locutil.cpp b/src/third_party/mozjs/intl/icu/source/common/locutil.cpp
deleted file mode 100644
index 69ea439..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locutil.cpp
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 2002-2011, International Business Machines Corporation and
- * others. All Rights Reserved.
- *******************************************************************************
- */
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE || !UCONFIG_NO_TRANSLITERATION
-
-#include "unicode/resbund.h"
-#include "cmemory.h"
-#include "ustrfmt.h"
-#include "locutil.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-#include "uassert.h"
-#include "umutex.h"
-
-// see LocaleUtility::getAvailableLocaleNames
-static icu::Hashtable * LocaleUtility_cache = NULL;
-
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
-
-/*
- ******************************************************************
- */
-
-/**
- * Release all static memory held by Locale Utility.  
- */
-U_CDECL_BEGIN
-static UBool U_CALLCONV service_cleanup(void) {
-    if (LocaleUtility_cache) {
-        delete LocaleUtility_cache;
-        LocaleUtility_cache = NULL;
-    }
-    return TRUE;
-}
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-UnicodeString&
-LocaleUtility::canonicalLocaleString(const UnicodeString* id, UnicodeString& result)
-{
-  if (id == NULL) {
-    result.setToBogus();
-  } else {
-    // Fix case only (no other changes) up to the first '@' or '.' or
-    // end of string, whichever comes first.  In 3.0 I changed this to
-    // stop at first '@' or '.'.  It used to run out to the end of
-    // string.  My fix makes the tests pass but is probably
-    // structurally incorrect.  See below.  [alan 3.0]
-
-    // TODO: Doug, you might want to revise this...
-    result = *id;
-    int32_t i = 0;
-    int32_t end = result.indexOf(AT_SIGN_CHAR);
-    int32_t n = result.indexOf(PERIOD_CHAR);
-    if (n >= 0 && n < end) {
-        end = n;
-    }
-    if (end < 0) {
-        end = result.length();
-    }
-    n = result.indexOf(UNDERSCORE_CHAR);
-    if (n < 0) {
-      n = end;
-    }
-    for (; i < n; ++i) {
-      UChar c = result.charAt(i);
-      if (c >= 0x0041 && c <= 0x005a) {
-        c += 0x20;
-        result.setCharAt(i, c);
-      }
-    }
-    for (n = end; i < n; ++i) {
-      UChar c = result.charAt(i);
-      if (c >= 0x0061 && c <= 0x007a) {
-        c -= 0x20;
-        result.setCharAt(i, c);
-      }
-    }
-  }
-  return result;
-
-#if 0
-    // This code does a proper full level 2 canonicalization of id.
-    // It's nasty to go from UChar to char to char to UChar -- but
-    // that's what you have to do to use the uloc_canonicalize
-    // function on UnicodeStrings.
-
-    // I ended up doing the alternate fix (see above) not for
-    // performance reasons, although performance will certainly be
-    // better, but because doing a full level 2 canonicalization
-    // causes some tests to fail.  [alan 3.0]
-
-    // TODO: Doug, you might want to revisit this...
-    result.setToBogus();
-    if (id != 0) {
-        int32_t buflen = id->length() + 8; // space for NUL
-        char* buf = (char*) uprv_malloc(buflen);
-        char* canon = (buf == 0) ? 0 : (char*) uprv_malloc(buflen);
-        if (buf != 0 && canon != 0) {
-            U_ASSERT(id->extract(0, INT32_MAX, buf, buflen) < buflen);
-            UErrorCode ec = U_ZERO_ERROR;
-            uloc_canonicalize(buf, canon, buflen, &ec);
-            if (U_SUCCESS(ec)) {
-                result = UnicodeString(canon);
-            }
-        }
-        uprv_free(buf);
-        uprv_free(canon);
-    }
-    return result;
-#endif
-}
-
-Locale&
-LocaleUtility::initLocaleFromName(const UnicodeString& id, Locale& result)
-{
-    enum { BUFLEN = 128 }; // larger than ever needed
-
-    if (id.isBogus() || id.length() >= BUFLEN) {
-        result.setToBogus();
-    } else {
-        /*
-         * We need to convert from a UnicodeString to char * in order to
-         * create a Locale.
-         *
-         * Problem: Locale ID strings may contain '@' which is a variant
-         * character and cannot be handled by invariant-character conversion.
-         *
-         * Hack: Since ICU code can handle locale IDs with multiple encodings
-         * of '@' (at least for EBCDIC; it's not known to be a problem for
-         * ASCII-based systems),
-         * we use regular invariant-character conversion for everything else
-         * and manually convert U+0040 into a compiler-char-constant '@'.
-         * While this compilation-time constant may not match the runtime
-         * encoding of '@', it should be one of the encodings which ICU
-         * recognizes.
-         *
-         * There should be only at most one '@' in a locale ID.
-         */
-        char buffer[BUFLEN];
-        int32_t prev, i;
-        prev = 0;
-        for(;;) {
-            i = id.indexOf((UChar)0x40, prev);
-            if(i < 0) {
-                // no @ between prev and the rest of the string
-                id.extract(prev, INT32_MAX, buffer + prev, BUFLEN - prev, US_INV);
-                break; // done
-            } else {
-                // normal invariant-character conversion for text between @s
-                id.extract(prev, i - prev, buffer + prev, BUFLEN - prev, US_INV);
-                // manually "convert" U+0040 at id[i] into '@' at buffer[i]
-                buffer[i] = '@';
-                prev = i + 1;
-            }
-        }
-        result = Locale::createFromName(buffer);
-    }
-    return result;
-}
-
-UnicodeString&
-LocaleUtility::initNameFromLocale(const Locale& locale, UnicodeString& result)
-{
-    if (locale.isBogus()) {
-        result.setToBogus();
-    } else {
-        result.append(UnicodeString(locale.getName(), -1, US_INV));
-    }
-    return result;
-}
-
-const Hashtable*
-LocaleUtility::getAvailableLocaleNames(const UnicodeString& bundleID)
-{
-    // LocaleUtility_cache is a hash-of-hashes.  The top-level keys
-    // are path strings ('bundleID') passed to
-    // ures_openAvailableLocales.  The top-level values are
-    // second-level hashes.  The second-level keys are result strings
-    // from ures_openAvailableLocales.  The second-level values are
-    // garbage ((void*)1 or other random pointer).
-
-    UErrorCode status = U_ZERO_ERROR;
-    Hashtable* cache;
-    umtx_lock(NULL);
-    cache = LocaleUtility_cache;
-    umtx_unlock(NULL);
-
-    if (cache == NULL) {
-        cache = new Hashtable(status);
-        if (cache == NULL || U_FAILURE(status)) {
-            return NULL; // catastrophic failure; e.g. out of memory
-        }
-        cache->setValueDeleter(uhash_deleteHashtable);
-        Hashtable* h; // set this to final LocaleUtility_cache value
-        umtx_lock(NULL);
-        h = LocaleUtility_cache;
-        if (h == NULL) {
-            LocaleUtility_cache = h = cache;
-            cache = NULL;
-            ucln_common_registerCleanup(UCLN_COMMON_SERVICE, service_cleanup);
-        }
-        umtx_unlock(NULL);
-        if(cache != NULL) {
-          delete cache;
-        }
-        cache = h;
-    }
-
-    U_ASSERT(cache != NULL);
-
-    Hashtable* htp;
-    umtx_lock(NULL);
-    htp = (Hashtable*) cache->get(bundleID);
-    umtx_unlock(NULL);
-
-    if (htp == NULL) {
-        htp = new Hashtable(status);
-        if (htp && U_SUCCESS(status)) {
-            CharString cbundleID;
-            cbundleID.appendInvariantChars(bundleID, status);
-            const char* path = cbundleID.isEmpty() ? NULL : cbundleID.data();
-            UEnumeration *uenum = ures_openAvailableLocales(path, &status);
-            for (;;) {
-                const UChar* id = uenum_unext(uenum, NULL, &status);
-                if (id == NULL) {
-                    break;
-                }
-                htp->put(UnicodeString(id), (void*)htp, status);
-            }
-            uenum_close(uenum);
-            if (U_FAILURE(status)) {
-                delete htp;
-                return NULL;
-            }
-            umtx_lock(NULL);
-            cache->put(bundleID, (void*)htp, status);
-            umtx_unlock(NULL);
-        }
-    }
-    return htp;
-}
-
-UBool
-LocaleUtility::isFallbackOf(const UnicodeString& root, const UnicodeString& child)
-{
-    return child.indexOf(root) == 0 &&
-      (child.length() == root.length() ||
-       child.charAt(root.length()) == UNDERSCORE_CHAR);
-}
-
-U_NAMESPACE_END
-
-/* !UCONFIG_NO_SERVICE */
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/locutil.h b/src/third_party/mozjs/intl/icu/source/common/locutil.h
deleted file mode 100644
index cf64e34..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/locutil.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2002-2005, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#ifndef LOCUTIL_H
-#define LOCUTIL_H
-
-#include "unicode/utypes.h"
-#include "hash.h"
-
-#if !UCONFIG_NO_SERVICE || !UCONFIG_NO_TRANSLITERATION
-
-
-U_NAMESPACE_BEGIN
-
-// temporary utility functions, till I know where to find them
-// in header so tests can also access them
-
-class U_COMMON_API LocaleUtility {
-public:
-  static UnicodeString& canonicalLocaleString(const UnicodeString* id, UnicodeString& result);
-  static Locale& initLocaleFromName(const UnicodeString& id, Locale& result);
-  static UnicodeString& initNameFromLocale(const Locale& locale, UnicodeString& result);
-  static const Hashtable* getAvailableLocaleNames(const UnicodeString& bundleID);
-  static UBool isFallbackOf(const UnicodeString& root, const UnicodeString& child);
-};
-
-U_NAMESPACE_END
-
-
-#endif
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/messageimpl.h b/src/third_party/mozjs/intl/icu/source/common/messageimpl.h
deleted file mode 100644
index 9af400c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/messageimpl.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  messageimpl.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2011apr04
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __MESSAGEIMPL_H__
-#define __MESSAGEIMPL_H__
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/messagepattern.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Helper functions for use of MessagePattern.
- * In Java, these are package-private methods in MessagePattern itself.
- * In C++, they are declared here and implemented in messagepattern.cpp.
- */
-class U_COMMON_API MessageImpl {
-public:
-    /**
-     * @return TRUE if getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED
-     */
-    static UBool jdkAposMode(const MessagePattern &msgPattern) {
-        return msgPattern.getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED;
-    }
-
-    /**
-     * Appends the s[start, limit[ substring to sb, but with only half of the apostrophes
-     * according to JDK pattern behavior.
-     */
-    static void appendReducedApostrophes(const UnicodeString &s, int32_t start, int32_t limit,
-                                         UnicodeString &sb);
-
-    /**
-     * Appends the sub-message to the result string.
-     * Omits SKIP_SYNTAX and appends whole arguments using appendReducedApostrophes().
-     */
-    static UnicodeString &appendSubMessageWithoutSkipSyntax(const MessagePattern &msgPattern,
-                                                            int32_t msgStart,
-                                                            UnicodeString &result);
-
-private:
-    MessageImpl();  // no constructor: all static methods
-};
-
-U_NAMESPACE_END
-
-#endif  // !UCONFIG_NO_FORMATTING
-
-#endif  // __MESSAGEIMPL_H__
diff --git a/src/third_party/mozjs/intl/icu/source/common/messagepattern.cpp b/src/third_party/mozjs/intl/icu/source/common/messagepattern.cpp
deleted file mode 100644
index 18d8a34..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/messagepattern.cpp
+++ /dev/null
@@ -1,1233 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2011-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  messagepattern.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2011mar14
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/messagepattern.h"
-#include "unicode/unistr.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "messageimpl.h"
-#include "patternprops.h"
-#include "putilimp.h"
-#include "uassert.h"
-
-U_NAMESPACE_BEGIN
-
-// Unicode character/code point constants ---------------------------------- ***
-
-static const UChar u_pound=0x23;
-static const UChar u_apos=0x27;
-static const UChar u_plus=0x2B;
-static const UChar u_comma=0x2C;
-static const UChar u_minus=0x2D;
-static const UChar u_dot=0x2E;
-static const UChar u_colon=0x3A;
-static const UChar u_lessThan=0x3C;
-static const UChar u_equal=0x3D;
-static const UChar u_A=0x41;
-static const UChar u_C=0x43;
-static const UChar u_D=0x44;
-static const UChar u_E=0x45;
-static const UChar u_H=0x48;
-static const UChar u_I=0x49;
-static const UChar u_L=0x4C;
-static const UChar u_N=0x4E;
-static const UChar u_O=0x4F;
-static const UChar u_P=0x50;
-static const UChar u_R=0x52;
-static const UChar u_S=0x53;
-static const UChar u_T=0x54;
-static const UChar u_U=0x55;
-static const UChar u_Z=0x5A;
-static const UChar u_a=0x61;
-static const UChar u_c=0x63;
-static const UChar u_d=0x64;
-static const UChar u_e=0x65;
-static const UChar u_f=0x66;
-static const UChar u_h=0x68;
-static const UChar u_i=0x69;
-static const UChar u_l=0x6C;
-static const UChar u_n=0x6E;
-static const UChar u_o=0x6F;
-static const UChar u_p=0x70;
-static const UChar u_r=0x72;
-static const UChar u_s=0x73;
-static const UChar u_t=0x74;
-static const UChar u_u=0x75;
-static const UChar u_z=0x7A;
-static const UChar u_leftCurlyBrace=0x7B;
-static const UChar u_pipe=0x7C;
-static const UChar u_rightCurlyBrace=0x7D;
-static const UChar u_lessOrEqual=0x2264;  // U+2264 is <=
-
-static const UChar kOffsetColon[]={  // "offset:"
-    u_o, u_f, u_f, u_s, u_e, u_t, u_colon
-};
-
-static const UChar kOther[]={  // "other"
-    u_o, u_t, u_h, u_e, u_r
-};
-
-// MessagePatternList ------------------------------------------------------ ***
-
-template<typename T, int32_t stackCapacity>
-class MessagePatternList : public UMemory {
-public:
-    MessagePatternList() {}
-    void copyFrom(const MessagePatternList<T, stackCapacity> &other,
-                  int32_t length,
-                  UErrorCode &errorCode);
-    UBool ensureCapacityForOneMore(int32_t oldLength, UErrorCode &errorCode);
-    UBool equals(const MessagePatternList<T, stackCapacity> &other, int32_t length) const {
-        for(int32_t i=0; i<length; ++i) {
-            if(a[i]!=other.a[i]) { return FALSE; }
-        }
-        return TRUE;
-    }
-
-    MaybeStackArray<T, stackCapacity> a;
-};
-
-template<typename T, int32_t stackCapacity>
-void
-MessagePatternList<T, stackCapacity>::copyFrom(
-        const MessagePatternList<T, stackCapacity> &other,
-        int32_t length,
-        UErrorCode &errorCode) {
-    if(U_SUCCESS(errorCode) && length>0) {
-        if(length>a.getCapacity() && NULL==a.resize(length)) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-        uprv_memcpy(a.getAlias(), other.a.getAlias(), length*sizeof(T));
-    }
-}
-
-template<typename T, int32_t stackCapacity>
-UBool
-MessagePatternList<T, stackCapacity>::ensureCapacityForOneMore(int32_t oldLength, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return FALSE;
-    }
-    if(a.getCapacity()>oldLength || a.resize(2*oldLength, oldLength)!=NULL) {
-        return TRUE;
-    }
-    errorCode=U_MEMORY_ALLOCATION_ERROR;
-    return FALSE;
-}
-
-// MessagePatternList specializations -------------------------------------- ***
-
-class MessagePatternDoubleList : public MessagePatternList<double, 8> {
-};
-
-class MessagePatternPartsList : public MessagePatternList<MessagePattern::Part, 32> {
-};
-
-// MessagePattern constructors etc. ---------------------------------------- ***
-
-MessagePattern::MessagePattern(UErrorCode &errorCode)
-        : aposMode(UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
-          hasArgNames(FALSE), hasArgNumbers(FALSE), needsAutoQuoting(FALSE) {
-    init(errorCode);
-}
-
-MessagePattern::MessagePattern(UMessagePatternApostropheMode mode, UErrorCode &errorCode)
-        : aposMode(mode),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
-          hasArgNames(FALSE), hasArgNumbers(FALSE), needsAutoQuoting(FALSE) {
-    init(errorCode);
-}
-
-MessagePattern::MessagePattern(const UnicodeString &pattern, UParseError *parseError, UErrorCode &errorCode)
-        : aposMode(UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
-          hasArgNames(FALSE), hasArgNumbers(FALSE), needsAutoQuoting(FALSE) {
-    if(init(errorCode)) {
-        parse(pattern, parseError, errorCode);
-    }
-}
-
-UBool
-MessagePattern::init(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return FALSE;
-    }
-    partsList=new MessagePatternPartsList();
-    if(partsList==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return FALSE;
-    }
-    parts=partsList->a.getAlias();
-    return TRUE;
-}
-
-MessagePattern::MessagePattern(const MessagePattern &other)
-        : UObject(other), aposMode(other.aposMode), msg(other.msg),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
-          hasArgNames(other.hasArgNames), hasArgNumbers(other.hasArgNumbers),
-          needsAutoQuoting(other.needsAutoQuoting) {
-    UErrorCode errorCode=U_ZERO_ERROR;
-    if(!copyStorage(other, errorCode)) {
-        clear();
-    }
-}
-
-MessagePattern &
-MessagePattern::operator=(const MessagePattern &other) {
-    if(this==&other) {
-        return *this;
-    }
-    aposMode=other.aposMode;
-    msg=other.msg;
-    hasArgNames=other.hasArgNames;
-    hasArgNumbers=other.hasArgNumbers;
-    needsAutoQuoting=other.needsAutoQuoting;
-    UErrorCode errorCode=U_ZERO_ERROR;
-    if(!copyStorage(other, errorCode)) {
-        clear();
-    }
-    return *this;
-}
-
-UBool
-MessagePattern::copyStorage(const MessagePattern &other, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return FALSE;
-    }
-    parts=NULL;
-    partsLength=0;
-    numericValues=NULL;
-    numericValuesLength=0;
-    if(partsList==NULL) {
-        partsList=new MessagePatternPartsList();
-        if(partsList==NULL) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return FALSE;
-        }
-        parts=partsList->a.getAlias();
-    }
-    if(other.partsLength>0) {
-        partsList->copyFrom(*other.partsList, other.partsLength, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return FALSE;
-        }
-        parts=partsList->a.getAlias();
-        partsLength=other.partsLength;
-    }
-    if(other.numericValuesLength>0) {
-        if(numericValuesList==NULL) {
-            numericValuesList=new MessagePatternDoubleList();
-            if(numericValuesList==NULL) {
-                errorCode=U_MEMORY_ALLOCATION_ERROR;
-                return FALSE;
-            }
-            numericValues=numericValuesList->a.getAlias();
-        }
-        numericValuesList->copyFrom(
-            *other.numericValuesList, other.numericValuesLength, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return FALSE;
-        }
-        numericValues=numericValuesList->a.getAlias();
-        numericValuesLength=other.numericValuesLength;
-    }
-    return TRUE;
-}
-
-MessagePattern::~MessagePattern() {
-    delete partsList;
-    delete numericValuesList;
-}
-
-// MessagePattern API ------------------------------------------------------ ***
-
-MessagePattern &
-MessagePattern::parse(const UnicodeString &pattern, UParseError *parseError, UErrorCode &errorCode) {
-    preParse(pattern, parseError, errorCode);
-    parseMessage(0, 0, 0, UMSGPAT_ARG_TYPE_NONE, parseError, errorCode);
-    postParse();
-    return *this;
-}
-
-MessagePattern &
-MessagePattern::parseChoiceStyle(const UnicodeString &pattern,
-                                 UParseError *parseError, UErrorCode &errorCode) {
-    preParse(pattern, parseError, errorCode);
-    parseChoiceStyle(0, 0, parseError, errorCode);
-    postParse();
-    return *this;
-}
-
-MessagePattern &
-MessagePattern::parsePluralStyle(const UnicodeString &pattern,
-                                 UParseError *parseError, UErrorCode &errorCode) {
-    preParse(pattern, parseError, errorCode);
-    parsePluralOrSelectStyle(UMSGPAT_ARG_TYPE_PLURAL, 0, 0, parseError, errorCode);
-    postParse();
-    return *this;
-}
-
-MessagePattern &
-MessagePattern::parseSelectStyle(const UnicodeString &pattern,
-                                 UParseError *parseError, UErrorCode &errorCode) {
-    preParse(pattern, parseError, errorCode);
-    parsePluralOrSelectStyle(UMSGPAT_ARG_TYPE_SELECT, 0, 0, parseError, errorCode);
-    postParse();
-    return *this;
-}
-
-void
-MessagePattern::clear() {
-    // Mostly the same as preParse().
-    msg.remove();
-    hasArgNames=hasArgNumbers=FALSE;
-    needsAutoQuoting=FALSE;
-    partsLength=0;
-    numericValuesLength=0;
-}
-
-UBool
-MessagePattern::operator==(const MessagePattern &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    return
-        aposMode==other.aposMode &&
-        msg==other.msg &&
-        // parts.equals(o.parts)
-        partsLength==other.partsLength &&
-        (partsLength==0 || partsList->equals(*other.partsList, partsLength));
-    // No need to compare numericValues if msg and parts are the same.
-}
-
-int32_t
-MessagePattern::hashCode() const {
-    int32_t hash=(aposMode*37+msg.hashCode())*37+partsLength;
-    for(int32_t i=0; i<partsLength; ++i) {
-        hash=hash*37+parts[i].hashCode();
-    }
-    return hash;
-}
-
-int32_t
-MessagePattern::validateArgumentName(const UnicodeString &name) {
-    if(!PatternProps::isIdentifier(name.getBuffer(), name.length())) {
-        return UMSGPAT_ARG_NAME_NOT_VALID;
-    }
-    return parseArgNumber(name, 0, name.length());
-}
-
-UnicodeString
-MessagePattern::autoQuoteApostropheDeep() const {
-    if(!needsAutoQuoting) {
-        return msg;
-    }
-    UnicodeString modified(msg);
-    // Iterate backward so that the insertion indexes do not change.
-    int32_t count=countParts();
-    for(int32_t i=count; i>0;) {
-        const Part &part=getPart(--i);
-        if(part.getType()==UMSGPAT_PART_TYPE_INSERT_CHAR) {
-           modified.insert(part.index, (UChar)part.value);
-        }
-    }
-    return modified;
-}
-
-double
-MessagePattern::getNumericValue(const Part &part) const {
-    UMessagePatternPartType type=part.type;
-    if(type==UMSGPAT_PART_TYPE_ARG_INT) {
-        return part.value;
-    } else if(type==UMSGPAT_PART_TYPE_ARG_DOUBLE) {
-        return numericValues[part.value];
-    } else {
-        return UMSGPAT_NO_NUMERIC_VALUE;
-    }
-}
-
-/**
-  * Returns the "offset:" value of a PluralFormat argument, or 0 if none is specified.
-  * @param pluralStart the index of the first PluralFormat argument style part. (0..countParts()-1)
-  * @return the "offset:" value.
-  * @draft ICU 4.8
-  */
-double
-MessagePattern::getPluralOffset(int32_t pluralStart) const {
-    const Part &part=getPart(pluralStart);
-    if(Part::hasNumericValue(part.type)) {
-        return getNumericValue(part);
-    } else {
-        return 0;
-    }
-}
-
-// MessagePattern::Part ---------------------------------------------------- ***
-
-UBool
-MessagePattern::Part::operator==(const Part &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    return
-        type==other.type &&
-        index==other.index &&
-        length==other.length &&
-        value==other.value &&
-        limitPartIndex==other.limitPartIndex;
-}
-
-// MessagePattern parser --------------------------------------------------- ***
-
-void
-MessagePattern::preParse(const UnicodeString &pattern, UParseError *parseError, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    if(parseError!=NULL) {
-        parseError->line=0;
-        parseError->offset=0;
-        parseError->preContext[0]=0;
-        parseError->postContext[0]=0;
-    }
-    msg=pattern;
-    hasArgNames=hasArgNumbers=FALSE;
-    needsAutoQuoting=FALSE;
-    partsLength=0;
-    numericValuesLength=0;
-}
-
-void
-MessagePattern::postParse() {
-    if(partsList!=NULL) {
-        parts=partsList->a.getAlias();
-    }
-    if(numericValuesList!=NULL) {
-        numericValues=numericValuesList->a.getAlias();
-    }
-}
-
-int32_t
-MessagePattern::parseMessage(int32_t index, int32_t msgStartLength,
-                             int32_t nestingLevel, UMessagePatternArgType parentType,
-                             UParseError *parseError, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return 0;
-    }
-    if(nestingLevel>Part::MAX_VALUE) {
-        errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-        return 0;
-    }
-    int32_t msgStart=partsLength;
-    addPart(UMSGPAT_PART_TYPE_MSG_START, index, msgStartLength, nestingLevel, errorCode);
-    index+=msgStartLength;
-    for(;;) {  // while(index<msg.length()) with U_FAILURE(errorCode) check
-        if(U_FAILURE(errorCode)) {
-            return 0;
-        }
-        if(index>=msg.length()) {
-            break;
-        }
-        UChar c=msg.charAt(index++);
-        if(c==u_apos) {
-            if(index==msg.length()) {
-                // The apostrophe is the last character in the pattern. 
-                // Add a Part for auto-quoting.
-                addPart(UMSGPAT_PART_TYPE_INSERT_CHAR, index, 0,
-                        u_apos, errorCode);  // value=char to be inserted
-                needsAutoQuoting=TRUE;
-            } else {
-                c=msg.charAt(index);
-                if(c==u_apos) {
-                    // double apostrophe, skip the second one
-                    addPart(UMSGPAT_PART_TYPE_SKIP_SYNTAX, index++, 1, 0, errorCode);
-                } else if(
-                    aposMode==UMSGPAT_APOS_DOUBLE_REQUIRED ||
-                    c==u_leftCurlyBrace || c==u_rightCurlyBrace ||
-                    (parentType==UMSGPAT_ARG_TYPE_CHOICE && c==u_pipe) ||
-                    (UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE(parentType) && c==u_pound)
-                ) {
-                    // skip the quote-starting apostrophe
-                    addPart(UMSGPAT_PART_TYPE_SKIP_SYNTAX, index-1, 1, 0, errorCode);
-                    // find the end of the quoted literal text
-                    for(;;) {
-                        index=msg.indexOf(u_apos, index+1);
-                        if(index>=0) {
-                            if(/*(index+1)<msg.length() &&*/ msg.charAt(index+1)==u_apos) {
-                                // double apostrophe inside quoted literal text
-                                // still encodes a single apostrophe, skip the second one
-                                addPart(UMSGPAT_PART_TYPE_SKIP_SYNTAX, ++index, 1, 0, errorCode);
-                            } else {
-                                // skip the quote-ending apostrophe
-                                addPart(UMSGPAT_PART_TYPE_SKIP_SYNTAX, index++, 1, 0, errorCode);
-                                break;
-                            }
-                        } else {
-                            // The quoted text reaches to the end of the of the message.
-                            index=msg.length();
-                            // Add a Part for auto-quoting.
-                            addPart(UMSGPAT_PART_TYPE_INSERT_CHAR, index, 0,
-                                    u_apos, errorCode);  // value=char to be inserted
-                            needsAutoQuoting=TRUE;
-                            break;
-                        }
-                    }
-                } else {
-                    // Interpret the apostrophe as literal text.
-                    // Add a Part for auto-quoting.
-                    addPart(UMSGPAT_PART_TYPE_INSERT_CHAR, index, 0,
-                            u_apos, errorCode);  // value=char to be inserted
-                    needsAutoQuoting=TRUE;
-                }
-            }
-        } else if(UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE(parentType) && c==u_pound) {
-            // The unquoted # in a plural message fragment will be replaced
-            // with the (number-offset).
-            addPart(UMSGPAT_PART_TYPE_REPLACE_NUMBER, index-1, 1, 0, errorCode);
-        } else if(c==u_leftCurlyBrace) {
-            index=parseArg(index-1, 1, nestingLevel, parseError, errorCode);
-        } else if((nestingLevel>0 && c==u_rightCurlyBrace) ||
-                  (parentType==UMSGPAT_ARG_TYPE_CHOICE && c==u_pipe)) {
-            // Finish the message before the terminator.
-            // In a choice style, report the "}" substring only for the following ARG_LIMIT,
-            // not for this MSG_LIMIT.
-            int32_t limitLength=(parentType==UMSGPAT_ARG_TYPE_CHOICE && c==u_rightCurlyBrace) ? 0 : 1;
-            addLimitPart(msgStart, UMSGPAT_PART_TYPE_MSG_LIMIT, index-1, limitLength,
-                         nestingLevel, errorCode);
-            if(parentType==UMSGPAT_ARG_TYPE_CHOICE) {
-                // Let the choice style parser see the '}' or '|'.
-                return index-1;
-            } else {
-                // continue parsing after the '}'
-                return index;
-            }
-        }  // else: c is part of literal text
-    }
-    if(nestingLevel>0 && !inTopLevelChoiceMessage(nestingLevel, parentType)) {
-        setParseError(parseError, 0);  // Unmatched '{' braces in message.
-        errorCode=U_UNMATCHED_BRACES;
-        return 0;
-    }
-    addLimitPart(msgStart, UMSGPAT_PART_TYPE_MSG_LIMIT, index, 0, nestingLevel, errorCode);
-    return index;
-}
-
-int32_t
-MessagePattern::parseArg(int32_t index, int32_t argStartLength, int32_t nestingLevel,
-                         UParseError *parseError, UErrorCode &errorCode) {
-    int32_t argStart=partsLength;
-    UMessagePatternArgType argType=UMSGPAT_ARG_TYPE_NONE;
-    addPart(UMSGPAT_PART_TYPE_ARG_START, index, argStartLength, argType, errorCode);
-    if(U_FAILURE(errorCode)) {
-        return 0;
-    }
-    int32_t nameIndex=index=skipWhiteSpace(index+argStartLength);
-    if(index==msg.length()) {
-        setParseError(parseError, 0);  // Unmatched '{' braces in message.
-        errorCode=U_UNMATCHED_BRACES;
-        return 0;
-    }
-    // parse argument name or number
-    index=skipIdentifier(index);
-    int32_t number=parseArgNumber(nameIndex, index);
-    if(number>=0) {
-        int32_t length=index-nameIndex;
-        if(length>Part::MAX_LENGTH || number>Part::MAX_VALUE) {
-            setParseError(parseError, nameIndex);  // Argument number too large.
-            errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-        hasArgNumbers=TRUE;
-        addPart(UMSGPAT_PART_TYPE_ARG_NUMBER, nameIndex, length, number, errorCode);
-    } else if(number==UMSGPAT_ARG_NAME_NOT_NUMBER) {
-        int32_t length=index-nameIndex;
-        if(length>Part::MAX_LENGTH) {
-            setParseError(parseError, nameIndex);  // Argument name too long.
-            errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-        hasArgNames=TRUE;
-        addPart(UMSGPAT_PART_TYPE_ARG_NAME, nameIndex, length, 0, errorCode);
-    } else {  // number<-1 (ARG_NAME_NOT_VALID)
-        setParseError(parseError, nameIndex);  // Bad argument syntax.
-        errorCode=U_PATTERN_SYNTAX_ERROR;
-        return 0;
-    }
-    index=skipWhiteSpace(index);
-    if(index==msg.length()) {
-        setParseError(parseError, 0);  // Unmatched '{' braces in message.
-        errorCode=U_UNMATCHED_BRACES;
-        return 0;
-    }
-    UChar c=msg.charAt(index);
-    if(c==u_rightCurlyBrace) {
-        // all done
-    } else if(c!=u_comma) {
-        setParseError(parseError, nameIndex);  // Bad argument syntax.
-        errorCode=U_PATTERN_SYNTAX_ERROR;
-        return 0;
-    } else /* ',' */ {
-        // parse argument type: case-sensitive a-zA-Z
-        int32_t typeIndex=index=skipWhiteSpace(index+1);
-        while(index<msg.length() && isArgTypeChar(msg.charAt(index))) {
-            ++index;
-        }
-        int32_t length=index-typeIndex;
-        index=skipWhiteSpace(index);
-        if(index==msg.length()) {
-            setParseError(parseError, 0);  // Unmatched '{' braces in message.
-            errorCode=U_UNMATCHED_BRACES;
-            return 0;
-        }
-        if(length==0 || ((c=msg.charAt(index))!=u_comma && c!=u_rightCurlyBrace)) {
-            setParseError(parseError, nameIndex);  // Bad argument syntax.
-            errorCode=U_PATTERN_SYNTAX_ERROR;
-            return 0;
-        }
-        if(length>Part::MAX_LENGTH) {
-            setParseError(parseError, nameIndex);  // Argument type name too long.
-            errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-        argType=UMSGPAT_ARG_TYPE_SIMPLE;
-        if(length==6) {
-            // case-insensitive comparisons for complex-type names
-            if(isChoice(typeIndex)) {
-                argType=UMSGPAT_ARG_TYPE_CHOICE;
-            } else if(isPlural(typeIndex)) {
-                argType=UMSGPAT_ARG_TYPE_PLURAL;
-            } else if(isSelect(typeIndex)) {
-                argType=UMSGPAT_ARG_TYPE_SELECT;
-            }
-        } else if(length==13) {
-            if(isSelect(typeIndex) && isOrdinal(typeIndex+6)) {
-                argType=UMSGPAT_ARG_TYPE_SELECTORDINAL;
-            }
-        }
-        // change the ARG_START type from NONE to argType
-        partsList->a[argStart].value=(int16_t)argType;
-        if(argType==UMSGPAT_ARG_TYPE_SIMPLE) {
-            addPart(UMSGPAT_PART_TYPE_ARG_TYPE, typeIndex, length, 0, errorCode);
-        }
-        // look for an argument style (pattern)
-        if(c==u_rightCurlyBrace) {
-            if(argType!=UMSGPAT_ARG_TYPE_SIMPLE) {
-                setParseError(parseError, nameIndex);  // No style field for complex argument.
-                errorCode=U_PATTERN_SYNTAX_ERROR;
-                return 0;
-            }
-        } else /* ',' */ {
-            ++index;
-            if(argType==UMSGPAT_ARG_TYPE_SIMPLE) {
-                index=parseSimpleStyle(index, parseError, errorCode);
-            } else if(argType==UMSGPAT_ARG_TYPE_CHOICE) {
-                index=parseChoiceStyle(index, nestingLevel, parseError, errorCode);
-            } else {
-                index=parsePluralOrSelectStyle(argType, index, nestingLevel, parseError, errorCode);
-            }
-        }
-    }
-    // Argument parsing stopped on the '}'.
-    addLimitPart(argStart, UMSGPAT_PART_TYPE_ARG_LIMIT, index, 1, argType, errorCode);
-    return index+1;
-}
-
-int32_t
-MessagePattern::parseSimpleStyle(int32_t index, UParseError *parseError, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return 0;
-    }
-    int32_t start=index;
-    int32_t nestedBraces=0;
-    while(index<msg.length()) {
-        UChar c=msg.charAt(index++);
-        if(c==u_apos) {
-            // Treat apostrophe as quoting but include it in the style part.
-            // Find the end of the quoted literal text.
-            index=msg.indexOf(u_apos, index);
-            if(index<0) {
-                // Quoted literal argument style text reaches to the end of the message.
-                setParseError(parseError, start);
-                errorCode=U_PATTERN_SYNTAX_ERROR;
-                return 0;
-            }
-            // skip the quote-ending apostrophe
-            ++index;
-        } else if(c==u_leftCurlyBrace) {
-            ++nestedBraces;
-        } else if(c==u_rightCurlyBrace) {
-            if(nestedBraces>0) {
-                --nestedBraces;
-            } else {
-                int32_t length=--index-start;
-                if(length>Part::MAX_LENGTH) {
-                    setParseError(parseError, start);  // Argument style text too long.
-                    errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-                    return 0;
-                }
-                addPart(UMSGPAT_PART_TYPE_ARG_STYLE, start, length, 0, errorCode);
-                return index;
-            }
-        }  // c is part of literal text
-    }
-    setParseError(parseError, 0);  // Unmatched '{' braces in message.
-    errorCode=U_UNMATCHED_BRACES;
-    return 0;
-}
-
-int32_t
-MessagePattern::parseChoiceStyle(int32_t index, int32_t nestingLevel,
-                                 UParseError *parseError, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return 0;
-    }
-    int32_t start=index;
-    index=skipWhiteSpace(index);
-    if(index==msg.length() || msg.charAt(index)==u_rightCurlyBrace) {
-        setParseError(parseError, 0);  // Missing choice argument pattern.
-        errorCode=U_PATTERN_SYNTAX_ERROR;
-        return 0;
-    }
-    for(;;) {
-        // The choice argument style contains |-separated (number, separator, message) triples.
-        // Parse the number.
-        int32_t numberIndex=index;
-        index=skipDouble(index);
-        int32_t length=index-numberIndex;
-        if(length==0) {
-            setParseError(parseError, start);  // Bad choice pattern syntax.
-            errorCode=U_PATTERN_SYNTAX_ERROR;
-            return 0;
-        }
-        if(length>Part::MAX_LENGTH) {
-            setParseError(parseError, numberIndex);  // Choice number too long.
-            errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-        parseDouble(numberIndex, index, TRUE, parseError, errorCode);  // adds ARG_INT or ARG_DOUBLE
-        if(U_FAILURE(errorCode)) {
-            return 0;
-        }
-        // Parse the separator.
-        index=skipWhiteSpace(index);
-        if(index==msg.length()) {
-            setParseError(parseError, start);  // Bad choice pattern syntax.
-            errorCode=U_PATTERN_SYNTAX_ERROR;
-            return 0;
-        }
-        UChar c=msg.charAt(index);
-        if(!(c==u_pound || c==u_lessThan || c==u_lessOrEqual)) {  // U+2264 is <=
-            setParseError(parseError, start);  // Expected choice separator (#<\u2264) instead of c.
-            errorCode=U_PATTERN_SYNTAX_ERROR;
-            return 0;
-        }
-        addPart(UMSGPAT_PART_TYPE_ARG_SELECTOR, index, 1, 0, errorCode);
-        // Parse the message fragment.
-        index=parseMessage(++index, 0, nestingLevel+1, UMSGPAT_ARG_TYPE_CHOICE, parseError, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return 0;
-        }
-        // parseMessage(..., CHOICE) returns the index of the terminator, or msg.length().
-        if(index==msg.length()) {
-            return index;
-        }
-        if(msg.charAt(index)==u_rightCurlyBrace) {
-            if(!inMessageFormatPattern(nestingLevel)) {
-                setParseError(parseError, start);  // Bad choice pattern syntax.
-                errorCode=U_PATTERN_SYNTAX_ERROR;
-                return 0;
-            }
-            return index;
-        }  // else the terminator is '|'
-        index=skipWhiteSpace(index+1);
-    }
-}
-
-int32_t
-MessagePattern::parsePluralOrSelectStyle(UMessagePatternArgType argType,
-                                         int32_t index, int32_t nestingLevel,
-                                         UParseError *parseError, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return 0;
-    }
-    int32_t start=index;
-    UBool isEmpty=TRUE;
-    UBool hasOther=FALSE;
-    for(;;) {
-        // First, collect the selector looking for a small set of terminators.
-        // It would be a little faster to consider the syntax of each possible
-        // token right here, but that makes the code too complicated.
-        index=skipWhiteSpace(index);
-        UBool eos=index==msg.length();
-        if(eos || msg.charAt(index)==u_rightCurlyBrace) {
-            if(eos==inMessageFormatPattern(nestingLevel)) {
-                setParseError(parseError, start);  // Bad plural/select pattern syntax.
-                errorCode=U_PATTERN_SYNTAX_ERROR;
-                return 0;
-            }
-            if(!hasOther) {
-                setParseError(parseError, 0);  // Missing 'other' keyword in plural/select pattern.
-                errorCode=U_DEFAULT_KEYWORD_MISSING;
-                return 0;
-            }
-            return index;
-        }
-        int32_t selectorIndex=index;
-        if(UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE(argType) && msg.charAt(selectorIndex)==u_equal) {
-            // explicit-value plural selector: =double
-            index=skipDouble(index+1);
-            int32_t length=index-selectorIndex;
-            if(length==1) {
-                setParseError(parseError, start);  // Bad plural/select pattern syntax.
-                errorCode=U_PATTERN_SYNTAX_ERROR;
-                return 0;
-            }
-            if(length>Part::MAX_LENGTH) {
-                setParseError(parseError, selectorIndex);  // Argument selector too long.
-                errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-                return 0;
-            }
-            addPart(UMSGPAT_PART_TYPE_ARG_SELECTOR, selectorIndex, length, 0, errorCode);
-            parseDouble(selectorIndex+1, index, FALSE,
-                        parseError, errorCode);  // adds ARG_INT or ARG_DOUBLE
-        } else {
-            index=skipIdentifier(index);
-            int32_t length=index-selectorIndex;
-            if(length==0) {
-                setParseError(parseError, start);  // Bad plural/select pattern syntax.
-                errorCode=U_PATTERN_SYNTAX_ERROR;
-                return 0;
-            }
-            // Note: The ':' in "offset:" is just beyond the skipIdentifier() range.
-            if( UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE(argType) && length==6 && index<msg.length() &&
-                0==msg.compare(selectorIndex, 7, kOffsetColon, 0, 7)
-            ) {
-                // plural offset, not a selector
-                if(!isEmpty) {
-                    // Plural argument 'offset:' (if present) must precede key-message pairs.
-                    setParseError(parseError, start);
-                    errorCode=U_PATTERN_SYNTAX_ERROR;
-                    return 0;
-                }
-                // allow whitespace between offset: and its value
-                int32_t valueIndex=skipWhiteSpace(index+1);  // The ':' is at index.
-                index=skipDouble(valueIndex);
-                if(index==valueIndex) {
-                    setParseError(parseError, start);  // Missing value for plural 'offset:'.
-                    errorCode=U_PATTERN_SYNTAX_ERROR;
-                    return 0;
-                }
-                if((index-valueIndex)>Part::MAX_LENGTH) {
-                    setParseError(parseError, valueIndex);  // Plural offset value too long.
-                    errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-                    return 0;
-                }
-                parseDouble(valueIndex, index, FALSE,
-                            parseError, errorCode);  // adds ARG_INT or ARG_DOUBLE
-                if(U_FAILURE(errorCode)) {
-                    return 0;
-                }
-                isEmpty=FALSE;
-                continue;  // no message fragment after the offset
-            } else {
-                // normal selector word
-                if(length>Part::MAX_LENGTH) {
-                    setParseError(parseError, selectorIndex);  // Argument selector too long.
-                    errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-                    return 0;
-                }
-                addPart(UMSGPAT_PART_TYPE_ARG_SELECTOR, selectorIndex, length, 0, errorCode);
-                if(0==msg.compare(selectorIndex, length, kOther, 0, 5)) {
-                    hasOther=TRUE;
-                }
-            }
-        }
-        if(U_FAILURE(errorCode)) {
-            return 0;
-        }
-
-        // parse the message fragment following the selector
-        index=skipWhiteSpace(index);
-        if(index==msg.length() || msg.charAt(index)!=u_leftCurlyBrace) {
-            setParseError(parseError, selectorIndex);  // No message fragment after plural/select selector.
-            errorCode=U_PATTERN_SYNTAX_ERROR;
-            return 0;
-        }
-        index=parseMessage(index, 1, nestingLevel+1, argType, parseError, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return 0;
-        }
-        isEmpty=FALSE;
-    }
-}
-
-int32_t
-MessagePattern::parseArgNumber(const UnicodeString &s, int32_t start, int32_t limit) {
-    // If the identifier contains only ASCII digits, then it is an argument _number_
-    // and must not have leading zeros (except "0" itself).
-    // Otherwise it is an argument _name_.
-    if(start>=limit) {
-        return UMSGPAT_ARG_NAME_NOT_VALID;
-    }
-    int32_t number;
-    // Defer numeric errors until we know there are only digits.
-    UBool badNumber;
-    UChar c=s.charAt(start++);
-    if(c==0x30) {
-        if(start==limit) {
-            return 0;
-        } else {
-            number=0;
-            badNumber=TRUE;  // leading zero
-        }
-    } else if(0x31<=c && c<=0x39) {
-        number=c-0x30;
-        badNumber=FALSE;
-    } else {
-        return UMSGPAT_ARG_NAME_NOT_NUMBER;
-    }
-    while(start<limit) {
-        c=s.charAt(start++);
-        if(0x30<=c && c<=0x39) {
-            if(number>=INT32_MAX/10) {
-                badNumber=TRUE;  // overflow
-            }
-            number=number*10+(c-0x30);
-        } else {
-            return UMSGPAT_ARG_NAME_NOT_NUMBER;
-        }
-    }
-    // There are only ASCII digits.
-    if(badNumber) {
-        return UMSGPAT_ARG_NAME_NOT_VALID;
-    } else {
-        return number;
-    }
-}
-
-void
-MessagePattern::parseDouble(int32_t start, int32_t limit, UBool allowInfinity,
-                            UParseError *parseError, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    U_ASSERT(start<limit);
-    // fake loop for easy exit and single throw statement
-    for(;;) { /*loop doesn't iterate*/
-        // fast path for small integers and infinity
-        int32_t value=0;
-        int32_t isNegative=0;  // not boolean so that we can easily add it to value
-        int32_t index=start;
-        UChar c=msg.charAt(index++);
-        if(c==u_minus) {
-            isNegative=1;
-            if(index==limit) {
-                break;  // no number
-            }
-            c=msg.charAt(index++);
-        } else if(c==u_plus) {
-            if(index==limit) {
-                break;  // no number
-            }
-            c=msg.charAt(index++);
-        }
-        if(c==0x221e) {  // infinity
-            if(allowInfinity && index==limit) {
-                double infinity=uprv_getInfinity();
-                addArgDoublePart(
-                    isNegative!=0 ? -infinity : infinity,
-                    start, limit-start, errorCode);
-                return;
-            } else {
-                break;
-            }
-        }
-        // try to parse the number as a small integer but fall back to a double
-        while('0'<=c && c<='9') {
-            value=value*10+(c-'0');
-            if(value>(Part::MAX_VALUE+isNegative)) {
-                break;  // not a small-enough integer
-            }
-            if(index==limit) {
-                addPart(UMSGPAT_PART_TYPE_ARG_INT, start, limit-start,
-                        isNegative!=0 ? -value : value, errorCode);
-                return;
-            }
-            c=msg.charAt(index++);
-        }
-        // Let Double.parseDouble() throw a NumberFormatException.
-        char numberChars[128];
-        int32_t capacity=(int32_t)sizeof(numberChars);
-        int32_t length=limit-start;
-        if(length>=capacity) {
-            break;  // number too long
-        }
-        msg.extract(start, length, numberChars, capacity, US_INV);
-        if((int32_t)uprv_strlen(numberChars)<length) {
-            break;  // contains non-invariant character that was turned into NUL
-        }
-        char *end;
-        double numericValue=uprv_strtod(numberChars, &end);
-        if(end!=(numberChars+length)) {
-            break;  // parsing error
-        }
-        addArgDoublePart(numericValue, start, length, errorCode);
-        return;
-    }
-    setParseError(parseError, start /*, limit*/);  // Bad syntax for numeric value.
-    errorCode=U_PATTERN_SYNTAX_ERROR;
-    return;
-}
-
-int32_t
-MessagePattern::skipWhiteSpace(int32_t index) {
-    const UChar *s=msg.getBuffer();
-    int32_t msgLength=msg.length();
-    const UChar *t=PatternProps::skipWhiteSpace(s+index, msgLength-index);
-    return (int32_t)(t-s);
-}
-
-int32_t
-MessagePattern::skipIdentifier(int32_t index) {
-    const UChar *s=msg.getBuffer();
-    int32_t msgLength=msg.length();
-    const UChar *t=PatternProps::skipIdentifier(s+index, msgLength-index);
-    return (int32_t)(t-s);
-}
-
-int32_t
-MessagePattern::skipDouble(int32_t index) {
-    int32_t msgLength=msg.length();
-    while(index<msgLength) {
-        UChar c=msg.charAt(index);
-        // U+221E: Allow the infinity symbol, for ChoiceFormat patterns.
-        if((c<0x30 && c!=u_plus && c!=u_minus && c!=u_dot) || (c>0x39 && c!=u_e && c!=u_E && c!=0x221e)) {
-            break;
-        }
-        ++index;
-    }
-    return index;
-}
-
-UBool
-MessagePattern::isArgTypeChar(UChar32 c) {
-    return (u_a<=c && c<=u_z) || (u_A<=c && c<=u_Z);
-}
-
-UBool
-MessagePattern::isChoice(int32_t index) {
-    UChar c;
-    return
-        ((c=msg.charAt(index++))==u_c || c==u_C) &&
-        ((c=msg.charAt(index++))==u_h || c==u_H) &&
-        ((c=msg.charAt(index++))==u_o || c==u_O) &&
-        ((c=msg.charAt(index++))==u_i || c==u_I) &&
-        ((c=msg.charAt(index++))==u_c || c==u_C) &&
-        ((c=msg.charAt(index))==u_e || c==u_E);
-}
-
-UBool
-MessagePattern::isPlural(int32_t index) {
-    UChar c;
-    return
-        ((c=msg.charAt(index++))==u_p || c==u_P) &&
-        ((c=msg.charAt(index++))==u_l || c==u_L) &&
-        ((c=msg.charAt(index++))==u_u || c==u_U) &&
-        ((c=msg.charAt(index++))==u_r || c==u_R) &&
-        ((c=msg.charAt(index++))==u_a || c==u_A) &&
-        ((c=msg.charAt(index))==u_l || c==u_L);
-}
-
-UBool
-MessagePattern::isSelect(int32_t index) {
-    UChar c;
-    return
-        ((c=msg.charAt(index++))==u_s || c==u_S) &&
-        ((c=msg.charAt(index++))==u_e || c==u_E) &&
-        ((c=msg.charAt(index++))==u_l || c==u_L) &&
-        ((c=msg.charAt(index++))==u_e || c==u_E) &&
-        ((c=msg.charAt(index++))==u_c || c==u_C) &&
-        ((c=msg.charAt(index))==u_t || c==u_T);
-}
-
-UBool
-MessagePattern::isOrdinal(int32_t index) {
-    UChar c;
-    return
-        ((c=msg.charAt(index++))==u_o || c==u_O) &&
-        ((c=msg.charAt(index++))==u_r || c==u_R) &&
-        ((c=msg.charAt(index++))==u_d || c==u_D) &&
-        ((c=msg.charAt(index++))==u_i || c==u_I) &&
-        ((c=msg.charAt(index++))==u_n || c==u_N) &&
-        ((c=msg.charAt(index++))==u_a || c==u_A) &&
-        ((c=msg.charAt(index))==u_l || c==u_L);
-}
-
-UBool
-MessagePattern::inMessageFormatPattern(int32_t nestingLevel) {
-    return nestingLevel>0 || partsList->a[0].type==UMSGPAT_PART_TYPE_MSG_START;
-}
-
-UBool
-MessagePattern::inTopLevelChoiceMessage(int32_t nestingLevel, UMessagePatternArgType parentType) {
-    return
-        nestingLevel==1 &&
-        parentType==UMSGPAT_ARG_TYPE_CHOICE &&
-        partsList->a[0].type!=UMSGPAT_PART_TYPE_MSG_START;
-}
-
-void
-MessagePattern::addPart(UMessagePatternPartType type, int32_t index, int32_t length,
-                        int32_t value, UErrorCode &errorCode) {
-    if(partsList->ensureCapacityForOneMore(partsLength, errorCode)) {
-        Part &part=partsList->a[partsLength++];
-        part.type=type;
-        part.index=index;
-        part.length=(uint16_t)length;
-        part.value=(int16_t)value;
-        part.limitPartIndex=0;
-    }
-}
-
-void
-MessagePattern::addLimitPart(int32_t start,
-                             UMessagePatternPartType type, int32_t index, int32_t length,
-                             int32_t value, UErrorCode &errorCode) {
-    partsList->a[start].limitPartIndex=partsLength;
-    addPart(type, index, length, value, errorCode);
-}
-
-void
-MessagePattern::addArgDoublePart(double numericValue, int32_t start, int32_t length,
-                                 UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    int32_t numericIndex=numericValuesLength;
-    if(numericValuesList==NULL) {
-        numericValuesList=new MessagePatternDoubleList();
-        if(numericValuesList==NULL) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    } else if(!numericValuesList->ensureCapacityForOneMore(numericValuesLength, errorCode)) {
-        return;
-    } else {
-        if(numericIndex>Part::MAX_VALUE) {
-            errorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return;
-        }
-    }
-    numericValuesList->a[numericValuesLength++]=numericValue;
-    addPart(UMSGPAT_PART_TYPE_ARG_DOUBLE, start, length, numericIndex, errorCode);
-}
-
-void
-MessagePattern::setParseError(UParseError *parseError, int32_t index) {
-    if(parseError==NULL) {
-        return;
-    }
-    parseError->offset=index;
-
-    // Set preContext to some of msg before index.
-    // Avoid splitting a surrogate pair.
-    int32_t length=index;
-    if(length>=U_PARSE_CONTEXT_LEN) {
-        length=U_PARSE_CONTEXT_LEN-1;
-        if(length>0 && U16_IS_TRAIL(msg[index-length])) {
-            --length;
-        }
-    }
-    msg.extract(index-length, length, parseError->preContext);
-    parseError->preContext[length]=0;
-
-    // Set postContext to some of msg starting at index.
-    length=msg.length()-index;
-    if(length>=U_PARSE_CONTEXT_LEN) {
-        length=U_PARSE_CONTEXT_LEN-1;
-        if(length>0 && U16_IS_LEAD(msg[index+length-1])) {
-            --length;
-        }
-    }
-    msg.extract(index, length, parseError->postContext);
-    parseError->postContext[length]=0;
-}
-
-UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(MessagePattern)
-
-// MessageImpl ------------------------------------------------------------- ***
-
-void
-MessageImpl::appendReducedApostrophes(const UnicodeString &s, int32_t start, int32_t limit,
-                                      UnicodeString &sb) {
-    int32_t doubleApos=-1;
-    for(;;) {
-        int32_t i=s.indexOf(u_apos, start);
-        if(i<0 || i>=limit) {
-            sb.append(s, start, limit-start);
-            break;
-        }
-        if(i==doubleApos) {
-            // Double apostrophe at start-1 and start==i, append one.
-            sb.append(u_apos);
-            ++start;
-            doubleApos=-1;
-        } else {
-            // Append text between apostrophes and skip this one.
-            sb.append(s, start, i-start);
-            doubleApos=start=i+1;
-        }
-    }
-}
-
-// Ported from second half of ICU4J SelectFormat.format(String).
-UnicodeString &
-MessageImpl::appendSubMessageWithoutSkipSyntax(const MessagePattern &msgPattern,
-                                               int32_t msgStart,
-                                               UnicodeString &result) {
-    const UnicodeString &msgString=msgPattern.getPatternString();
-    int32_t prevIndex=msgPattern.getPart(msgStart).getLimit();
-    for(int32_t i=msgStart;;) {
-        const MessagePattern::Part &part=msgPattern.getPart(++i);
-        UMessagePatternPartType type=part.getType();
-        int32_t index=part.getIndex();
-        if(type==UMSGPAT_PART_TYPE_MSG_LIMIT) {
-            return result.append(msgString, prevIndex, index-prevIndex);
-        } else if(type==UMSGPAT_PART_TYPE_SKIP_SYNTAX) {
-            result.append(msgString, prevIndex, index-prevIndex);
-            prevIndex=part.getLimit();
-        } else if(type==UMSGPAT_PART_TYPE_ARG_START) {
-            result.append(msgString, prevIndex, index-prevIndex);
-            prevIndex=index;
-            i=msgPattern.getLimitPartIndex(i);
-            index=msgPattern.getPart(i).getLimit();
-            appendReducedApostrophes(msgString, prevIndex, index, result);
-            prevIndex=index;
-        }
-    }
-}
-
-U_NAMESPACE_END
-
-#endif  // !UCONFIG_NO_FORMATTING
diff --git a/src/third_party/mozjs/intl/icu/source/common/msvcres.h b/src/third_party/mozjs/intl/icu/source/common/msvcres.h
deleted file mode 100644
index 7ed61b4..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/msvcres.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Copyright (c) 2003-2010 International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-// Used by common.rc and other .rc files.
-//Do not edit with Microsoft Developer Studio because it will modify this
-//header the wrong way. This is here to prevent Visual Studio .NET from
-//unnessarily building the resource files when it's not needed.
-//
-
-/*
-These are defined before unicode/uversion.h in order to prevent 
-STLPort's broken stddef.h from being used when rc.exe parses this file. 
-*/
-#define _STLP_OUTERMOST_HEADER_ID 0
-#define _STLP_WINCE 1
-
-#include "unicode/uversion.h"
-
-#define ICU_WEBSITE "http://icu-project.org"
-#define ICU_COMPANY "The ICU Project"
-#define ICU_PRODUCT_PREFIX "ICU"
-#define ICU_PRODUCT "International Components for Unicode"
diff --git a/src/third_party/mozjs/intl/icu/source/common/mutex.cpp b/src/third_party/mozjs/intl/icu/source/common/mutex.cpp
deleted file mode 100644
index e1e502d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/mutex.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2008-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  mutex.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*/
-
-#include "unicode/utypes.h"
-#include "mutex.h"
-#include "uassert.h"
-
-U_NAMESPACE_BEGIN
-
-void *SimpleSingleton::getInstance(InstantiatorFn *instantiator, const void *context,
-                                   void *&duplicate,
-                                   UErrorCode &errorCode) {
-    duplicate=NULL;
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    // TODO: With atomicops.h: void *instance = (void*)Acquire_Load(&fInstance);
-    //       and remove UMTX_ACQUIRE_BARRIER below.
-    void *instance=ANNOTATE_UNPROTECTED_READ(fInstance);
-    UMTX_ACQUIRE_BARRIER;
-    ANNOTATE_HAPPENS_AFTER(&fInstance);
-    if(instance!=NULL) {
-        return instance;
-    }
-
-    // Attempt to create the instance.
-    // If a race occurs, then the losing thread will assign its new instance
-    // to the "duplicate" parameter, and the caller deletes it.
-    instance=instantiator(context, errorCode);
-    UMTX_RELEASE_BARRIER;  // Release-barrier before fInstance=instance;
-    Mutex mutex;
-    if(fInstance==NULL && U_SUCCESS(errorCode)) {
-        U_ASSERT(instance!=NULL);
-        ANNOTATE_HAPPENS_BEFORE(&fInstance);
-        // TODO: With atomicops.h: Release_Store(&fInstance, (AtomicWord)instance);
-        //       and remove UMTX_RELEASE_BARRIER above.
-        fInstance=instance;
-    } else {
-        duplicate=instance;
-    }
-    return fInstance;
-}
-
-/*
- * Three states:
- *
- * Initial state: Instance creation not attempted yet.
- * fInstance=NULL && U_SUCCESS(fErrorCode)
- *
- * Instance creation succeeded:
- * fInstance!=NULL && U_SUCCESS(fErrorCode)
- *
- * Instance creation failed:
- * fInstance=NULL && U_FAILURE(fErrorCode)
- * We will not attempt again to create the instance.
- *
- * fInstance changes at most once.
- * fErrorCode changes at most twice (intial->failed->succeeded).
- */
-void *TriStateSingleton::getInstance(InstantiatorFn *instantiator, const void *context,
-                                     void *&duplicate,
-                                     UErrorCode &errorCode) {
-    duplicate=NULL;
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    // TODO: With atomicops.h: void *instance = (void*)Acquire_Load(&fInstance);
-    //       and remove UMTX_ACQUIRE_BARRIER below.
-    void *instance=ANNOTATE_UNPROTECTED_READ(fInstance);
-    UMTX_ACQUIRE_BARRIER;
-    ANNOTATE_HAPPENS_AFTER(&fInstance);
-    if(instance!=NULL) {
-        // instance was created
-        return instance;
-    }
-
-    // The read access to fErrorCode is thread-unsafe, but harmless because
-    // at worst multiple threads race to each create a new instance,
-    // and all losing threads delete their duplicates.
-    UErrorCode localErrorCode=ANNOTATE_UNPROTECTED_READ(fErrorCode);
-    if(U_FAILURE(localErrorCode)) {
-        // instance creation failed
-        errorCode=localErrorCode;
-        return NULL;
-    }
-
-    // First attempt to create the instance.
-    // If a race occurs, then the losing thread will assign its new instance
-    // to the "duplicate" parameter, and the caller deletes it.
-    instance=instantiator(context, errorCode);
-    UMTX_RELEASE_BARRIER;  // Release-barrier before fInstance=instance;
-    Mutex mutex;
-    if(fInstance==NULL && U_SUCCESS(errorCode)) {
-        // instance creation newly succeeded
-        U_ASSERT(instance!=NULL);
-        ANNOTATE_HAPPENS_BEFORE(&fInstance);
-        // TODO: With atomicops.h: Release_Store(&fInstance, (AtomicWord)instance);
-        //       and remove UMTX_RELEASE_BARRIER above.
-        fInstance=instance;
-        // Set fErrorCode on the off-chance that a previous instance creation failed.
-        fErrorCode=errorCode;
-        // Completed state transition: initial->succeeded, or failed->succeeded.
-    } else {
-        // Record a duplicate if we lost the race, or
-        // if we got an instance but its creation failed anyway.
-        duplicate=instance;
-        if(fInstance==NULL && U_SUCCESS(fErrorCode) && U_FAILURE(errorCode)) {
-            // instance creation newly failed
-            fErrorCode=errorCode;
-            // Completed state transition: initial->failed.
-        }
-    }
-    return fInstance;
-}
-
-void TriStateSingleton::reset() {
-    fInstance=NULL;
-    fErrorCode=U_ZERO_ERROR;
-}
-
-#if UCONFIG_NO_SERVICE
-
-/* If UCONFIG_NO_SERVICE, then there is no invocation of Mutex elsewhere in
-   common, so add one here to force an export */
-static Mutex *aMutex = 0;
-
-/* UCONFIG_NO_SERVICE */
-#endif
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/mutex.h b/src/third_party/mozjs/intl/icu/source/common/mutex.h
deleted file mode 100644
index af8cd8c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/mutex.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*/
-//----------------------------------------------------------------------------
-// File:     mutex.h
-//
-// Lightweight C++ wrapper for umtx_ C mutex functions
-//
-// Author:   Alan Liu  1/31/97
-// History:
-// 06/04/97   helena         Updated setImplementation as per feedback from 5/21 drop.
-// 04/07/1999  srl               refocused as a thin wrapper
-//
-//----------------------------------------------------------------------------
-#ifndef MUTEX_H
-#define MUTEX_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "umutex.h"
-
-U_NAMESPACE_BEGIN
-
-//----------------------------------------------------------------------------
-// Code within that accesses shared static or global data should
-// should instantiate a Mutex object while doing so. You should make your own 
-// private mutex where possible.
-
-// For example:
-// 
-// UMutex myMutex;
-// 
-// void Function(int arg1, int arg2)
-// {
-//    static Object* foo;     // Shared read-write object
-//    Mutex mutex(&myMutex);  // or no args for the global lock
-//    foo->Method();
-//    // When 'mutex' goes out of scope and gets destroyed here, the lock is released
-// }
-//
-// Note:  Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function
-//        returning a Mutex. This is a common mistake which silently slips through the
-//        compiler!!
-//
-
-class U_COMMON_API Mutex : public UMemory {
-public:
-  inline Mutex(UMutex *mutex = NULL);
-  inline ~Mutex();
-
-private:
-  UMutex   *fMutex;
-
-  Mutex(const Mutex &other); // forbid copying of this class
-  Mutex &operator=(const Mutex &other); // forbid copying of this class
-};
-
-inline Mutex::Mutex(UMutex *mutex)
-  : fMutex(mutex)
-{
-  umtx_lock(fMutex);
-}
-
-inline Mutex::~Mutex()
-{
-  umtx_unlock(fMutex);
-}
-
-// common code for singletons ---------------------------------------------- ***
-
-/**
- * Function pointer for the instantiator parameter of
- * SimpleSingleton::getInstance() and TriStateSingleton::getInstance().
- * The function creates some object, optionally using the context parameter.
- * The function need not check for U_FAILURE(errorCode).
- */
-typedef void *InstantiatorFn(const void *context, UErrorCode &errorCode);
-
-/**
- * Singleton struct with shared instantiation/mutexing code.
- * Simple: Does not remember if a previous instantiation failed.
- * Best used if the instantiation can really only fail with an out-of-memory error,
- * otherwise use a TriStateSingleton.
- * Best used via SimpleSingletonWrapper or similar.
- * Define a static SimpleSingleton instance via the STATIC_SIMPLE_SINGLETON macro.
- */
-struct SimpleSingleton {
-    void *fInstance;
-
-    /**
-     * Returns the singleton instance, or NULL if it could not be created.
-     * Calls the instantiator with the context if the instance has not been
-     * created yet. In a race condition, the duplicate may not be NULL.
-     * The caller must delete the duplicate.
-     * The caller need not initialize the duplicate before the call.
-     */
-    void *getInstance(InstantiatorFn *instantiator, const void *context,
-                      void *&duplicate,
-                      UErrorCode &errorCode);
-    /**
-     * Resets the fields. The caller must have deleted the singleton instance.
-     * Not mutexed.
-     * Call this from a cleanup function.
-     */
-    void reset() { fInstance=NULL; }
-};
-
-#define STATIC_SIMPLE_SINGLETON(name) static SimpleSingleton name={ NULL }
-
-/**
- * Handy wrapper for a SimpleSingleton.
- * Intended for temporary use on the stack, to make the SimpleSingleton easier to deal with.
- * Takes care of the duplicate deletion and type casting.
- */
-template<typename T>
-class SimpleSingletonWrapper {
-public:
-    SimpleSingletonWrapper(SimpleSingleton &s) : singleton(s) {}
-    void deleteInstance() {
-        delete (T *)singleton.fInstance;
-        singleton.reset();
-    }
-    T *getInstance(InstantiatorFn *instantiator, const void *context,
-                   UErrorCode &errorCode) {
-        void *duplicate;
-        T *instance=(T *)singleton.getInstance(instantiator, context, duplicate, errorCode);
-        delete (T *)duplicate;
-        return instance;
-    }
-private:
-    SimpleSingleton &singleton;
-};
-
-/**
- * Singleton struct with shared instantiation/mutexing code.
- * Tri-state: Instantiation succeeded/failed/not attempted yet.
- * Best used via TriStateSingletonWrapper or similar.
- * Define a static TriStateSingleton instance via the STATIC_TRI_STATE_SINGLETON macro.
- */
-struct TriStateSingleton {
-    void *fInstance;
-    UErrorCode fErrorCode;
-
-    /**
-     * Returns the singleton instance, or NULL if it could not be created.
-     * Calls the instantiator with the context if the instance has not been
-     * created yet. In a race condition, the duplicate may not be NULL.
-     * The caller must delete the duplicate.
-     * The caller need not initialize the duplicate before the call.
-     * The singleton creation is only attempted once. If it fails,
-     * the singleton will then always return NULL.
-     */
-    void *getInstance(InstantiatorFn *instantiator, const void *context,
-                      void *&duplicate,
-                      UErrorCode &errorCode);
-    /**
-     * Resets the fields. The caller must have deleted the singleton instance.
-     * Not mutexed.
-     * Call this from a cleanup function.
-     */
-    void reset();
-};
-
-#define STATIC_TRI_STATE_SINGLETON(name) static TriStateSingleton name={ NULL, U_ZERO_ERROR }
-
-/**
- * Handy wrapper for a TriStateSingleton.
- * Intended for temporary use on the stack, to make the TriStateSingleton easier to deal with.
- * Takes care of the duplicate deletion and type casting.
- */
-template<typename T>
-class TriStateSingletonWrapper {
-public:
-    TriStateSingletonWrapper(TriStateSingleton &s) : singleton(s) {}
-    void deleteInstance() {
-        delete (T *)singleton.fInstance;
-        singleton.reset();
-    }
-    T *getInstance(InstantiatorFn *instantiator, const void *context,
-                   UErrorCode &errorCode) {
-        void *duplicate;
-        T *instance=(T *)singleton.getInstance(instantiator, context, duplicate, errorCode);
-        delete (T *)duplicate;
-        return instance;
-    }
-private:
-    TriStateSingleton &singleton;
-};
-
-U_NAMESPACE_END
-
-#endif //_MUTEX_
-//eof
diff --git a/src/third_party/mozjs/intl/icu/source/common/normalizer2.cpp b/src/third_party/mozjs/intl/icu/source/common/normalizer2.cpp
deleted file mode 100644
index c78d0a7..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/normalizer2.cpp
+++ /dev/null
@@ -1,1006 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  normalizer2.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009nov22
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/localpointer.h"
-#include "unicode/normalizer2.h"
-#include "unicode/unistr.h"
-#include "unicode/unorm.h"
-#include "cpputils.h"
-#include "cstring.h"
-#include "mutex.h"
-#include "normalizer2impl.h"
-#include "ucln_cmn.h"
-#include "uhash.h"
-
-U_NAMESPACE_BEGIN
-
-// Public API dispatch via Normalizer2 subclasses -------------------------- ***
-
-Normalizer2::~Normalizer2() {}
-
-UBool
-Normalizer2::getRawDecomposition(UChar32, UnicodeString &) const {
-    return FALSE;
-}
-
-UChar32
-Normalizer2::composePair(UChar32, UChar32) const {
-    return U_SENTINEL;
-}
-
-uint8_t
-Normalizer2::getCombiningClass(UChar32 /*c*/) const {
-    return 0;
-}
-
-UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(Normalizer2)
-
-// Normalizer2 implementation for the old UNORM_NONE.
-class NoopNormalizer2 : public Normalizer2 {
-    virtual ~NoopNormalizer2();
-
-    virtual UnicodeString &
-    normalize(const UnicodeString &src,
-              UnicodeString &dest,
-              UErrorCode &errorCode) const {
-        if(U_SUCCESS(errorCode)) {
-            if(&dest!=&src) {
-                dest=src;
-            } else {
-                errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            }
-        }
-        return dest;
-    }
-    virtual UnicodeString &
-    normalizeSecondAndAppend(UnicodeString &first,
-                             const UnicodeString &second,
-                             UErrorCode &errorCode) const {
-        if(U_SUCCESS(errorCode)) {
-            if(&first!=&second) {
-                first.append(second);
-            } else {
-                errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            }
-        }
-        return first;
-    }
-    virtual UnicodeString &
-    append(UnicodeString &first,
-           const UnicodeString &second,
-           UErrorCode &errorCode) const {
-        if(U_SUCCESS(errorCode)) {
-            if(&first!=&second) {
-                first.append(second);
-            } else {
-                errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            }
-        }
-        return first;
-    }
-    virtual UBool
-    getDecomposition(UChar32, UnicodeString &) const {
-        return FALSE;
-    }
-    // No need to override the default getRawDecomposition().
-    virtual UBool
-    isNormalized(const UnicodeString &, UErrorCode &) const {
-        return TRUE;
-    }
-    virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &, UErrorCode &) const {
-        return UNORM_YES;
-    }
-    virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const {
-        return s.length();
-    }
-    virtual UBool hasBoundaryBefore(UChar32) const { return TRUE; }
-    virtual UBool hasBoundaryAfter(UChar32) const { return TRUE; }
-    virtual UBool isInert(UChar32) const { return TRUE; }
-};
-
-NoopNormalizer2::~NoopNormalizer2() {}
-
-// Intermediate class:
-// Has Normalizer2Impl and does boilerplate argument checking and setup.
-class Normalizer2WithImpl : public Normalizer2 {
-public:
-    Normalizer2WithImpl(const Normalizer2Impl &ni) : impl(ni) {}
-    virtual ~Normalizer2WithImpl();
-
-    // normalize
-    virtual UnicodeString &
-    normalize(const UnicodeString &src,
-              UnicodeString &dest,
-              UErrorCode &errorCode) const {
-        if(U_FAILURE(errorCode)) {
-            dest.setToBogus();
-            return dest;
-        }
-        const UChar *sArray=src.getBuffer();
-        if(&dest==&src || sArray==NULL) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            dest.setToBogus();
-            return dest;
-        }
-        dest.remove();
-        ReorderingBuffer buffer(impl, dest);
-        if(buffer.init(src.length(), errorCode)) {
-            normalize(sArray, sArray+src.length(), buffer, errorCode);
-        }
-        return dest;
-    }
-    virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const = 0;
-
-    // normalize and append
-    virtual UnicodeString &
-    normalizeSecondAndAppend(UnicodeString &first,
-                             const UnicodeString &second,
-                             UErrorCode &errorCode) const {
-        return normalizeSecondAndAppend(first, second, TRUE, errorCode);
-    }
-    virtual UnicodeString &
-    append(UnicodeString &first,
-           const UnicodeString &second,
-           UErrorCode &errorCode) const {
-        return normalizeSecondAndAppend(first, second, FALSE, errorCode);
-    }
-    UnicodeString &
-    normalizeSecondAndAppend(UnicodeString &first,
-                             const UnicodeString &second,
-                             UBool doNormalize,
-                             UErrorCode &errorCode) const {
-        uprv_checkCanGetBuffer(first, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return first;
-        }
-        const UChar *secondArray=second.getBuffer();
-        if(&first==&second || secondArray==NULL) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return first;
-        }
-        int32_t firstLength=first.length();
-        UnicodeString safeMiddle;
-        {
-            ReorderingBuffer buffer(impl, first);
-            if(buffer.init(firstLength+second.length(), errorCode)) {
-                normalizeAndAppend(secondArray, secondArray+second.length(), doNormalize,
-                                   safeMiddle, buffer, errorCode);
-            }
-        }  // The ReorderingBuffer destructor finalizes the first string.
-        if(U_FAILURE(errorCode)) {
-            // Restore the modified suffix of the first string.
-            first.replace(firstLength-safeMiddle.length(), 0x7fffffff, safeMiddle);
-        }
-        return first;
-    }
-    virtual void
-    normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
-                       UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const = 0;
-    virtual UBool
-    getDecomposition(UChar32 c, UnicodeString &decomposition) const {
-        UChar buffer[4];
-        int32_t length;
-        const UChar *d=impl.getDecomposition(c, buffer, length);
-        if(d==NULL) {
-            return FALSE;
-        }
-        if(d==buffer) {
-            decomposition.setTo(buffer, length);  // copy the string (Jamos from Hangul syllable c)
-        } else {
-            decomposition.setTo(FALSE, d, length);  // read-only alias
-        }
-        return TRUE;
-    }
-    virtual UBool
-    getRawDecomposition(UChar32 c, UnicodeString &decomposition) const {
-        UChar buffer[30];
-        int32_t length;
-        const UChar *d=impl.getRawDecomposition(c, buffer, length);
-        if(d==NULL) {
-            return FALSE;
-        }
-        if(d==buffer) {
-            decomposition.setTo(buffer, length);  // copy the string (algorithmic decomposition)
-        } else {
-            decomposition.setTo(FALSE, d, length);  // read-only alias
-        }
-        return TRUE;
-    }
-    virtual UChar32
-    composePair(UChar32 a, UChar32 b) const {
-        return impl.composePair(a, b);
-    }
-
-    virtual uint8_t
-    getCombiningClass(UChar32 c) const {
-        return impl.getCC(impl.getNorm16(c));
-    }
-
-    // quick checks
-    virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
-        if(U_FAILURE(errorCode)) {
-            return FALSE;
-        }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return FALSE;
-        }
-        const UChar *sLimit=sArray+s.length();
-        return sLimit==spanQuickCheckYes(sArray, sLimit, errorCode);
-    }
-    virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
-        return Normalizer2WithImpl::isNormalized(s, errorCode) ? UNORM_YES : UNORM_NO;
-    }
-    virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const {
-        if(U_FAILURE(errorCode)) {
-            return 0;
-        }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return 0;
-        }
-        return (int32_t)(spanQuickCheckYes(sArray, sArray+s.length(), errorCode)-sArray);
-    }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const = 0;
-
-    virtual UNormalizationCheckResult getQuickCheck(UChar32) const {
-        return UNORM_YES;
-    }
-
-    const Normalizer2Impl &impl;
-};
-
-Normalizer2WithImpl::~Normalizer2WithImpl() {}
-
-class DecomposeNormalizer2 : public Normalizer2WithImpl {
-public:
-    DecomposeNormalizer2(const Normalizer2Impl &ni) : Normalizer2WithImpl(ni) {}
-    virtual ~DecomposeNormalizer2();
-
-private:
-    virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const {
-        impl.decompose(src, limit, &buffer, errorCode);
-    }
-    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
-    virtual void
-    normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
-                       UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const {
-        impl.decomposeAndAppend(src, limit, doNormalize, safeMiddle, buffer, errorCode);
-    }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const {
-        return impl.decompose(src, limit, NULL, errorCode);
-    }
-    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
-        return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO;
-    }
-    virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundary(c, TRUE); }
-    virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundary(c, FALSE); }
-    virtual UBool isInert(UChar32 c) const { return impl.isDecompInert(c); }
-};
-
-DecomposeNormalizer2::~DecomposeNormalizer2() {}
-
-class ComposeNormalizer2 : public Normalizer2WithImpl {
-public:
-    ComposeNormalizer2(const Normalizer2Impl &ni, UBool fcc) :
-        Normalizer2WithImpl(ni), onlyContiguous(fcc) {}
-    virtual ~ComposeNormalizer2();
-
-private:
-    virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const {
-        impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode);
-    }
-    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
-    virtual void
-    normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
-                       UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const {
-        impl.composeAndAppend(src, limit, doNormalize, onlyContiguous, safeMiddle, buffer, errorCode);
-    }
-
-    virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
-        if(U_FAILURE(errorCode)) {
-            return FALSE;
-        }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return FALSE;
-        }
-        UnicodeString temp;
-        ReorderingBuffer buffer(impl, temp);
-        if(!buffer.init(5, errorCode)) {  // small destCapacity for substring normalization
-            return FALSE;
-        }
-        return impl.compose(sArray, sArray+s.length(), onlyContiguous, FALSE, buffer, errorCode);
-    }
-    virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
-        if(U_FAILURE(errorCode)) {
-            return UNORM_MAYBE;
-        }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return UNORM_MAYBE;
-        }
-        UNormalizationCheckResult qcResult=UNORM_YES;
-        impl.composeQuickCheck(sArray, sArray+s.length(), onlyContiguous, &qcResult);
-        return qcResult;
-    }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const {
-        return impl.composeQuickCheck(src, limit, onlyContiguous, NULL);
-    }
-    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
-        return impl.getCompQuickCheck(impl.getNorm16(c));
-    }
-    virtual UBool hasBoundaryBefore(UChar32 c) const {
-        return impl.hasCompBoundaryBefore(c);
-    }
-    virtual UBool hasBoundaryAfter(UChar32 c) const {
-        return impl.hasCompBoundaryAfter(c, onlyContiguous, FALSE);
-    }
-    virtual UBool isInert(UChar32 c) const {
-        return impl.hasCompBoundaryAfter(c, onlyContiguous, TRUE);
-    }
-
-    const UBool onlyContiguous;
-};
-
-ComposeNormalizer2::~ComposeNormalizer2() {}
-
-class FCDNormalizer2 : public Normalizer2WithImpl {
-public:
-    FCDNormalizer2(const Normalizer2Impl &ni) : Normalizer2WithImpl(ni) {}
-    virtual ~FCDNormalizer2();
-
-private:
-    virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const {
-        impl.makeFCD(src, limit, &buffer, errorCode);
-    }
-    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
-    virtual void
-    normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
-                       UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const {
-        impl.makeFCDAndAppend(src, limit, doNormalize, safeMiddle, buffer, errorCode);
-    }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const {
-        return impl.makeFCD(src, limit, NULL, errorCode);
-    }
-    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasFCDBoundaryBefore(c); }
-    virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasFCDBoundaryAfter(c); }
-    virtual UBool isInert(UChar32 c) const { return impl.isFCDInert(c); }
-};
-
-FCDNormalizer2::~FCDNormalizer2() {}
-
-// instance cache ---------------------------------------------------------- ***
-
-struct Norm2AllModes : public UMemory {
-    static Norm2AllModes *createInstance(const char *packageName,
-                                         const char *name,
-                                         UErrorCode &errorCode);
-    Norm2AllModes() : comp(impl, FALSE), decomp(impl), fcd(impl), fcc(impl, TRUE) {}
-
-    Normalizer2Impl impl;
-    ComposeNormalizer2 comp;
-    DecomposeNormalizer2 decomp;
-    FCDNormalizer2 fcd;
-    ComposeNormalizer2 fcc;
-};
-
-Norm2AllModes *
-Norm2AllModes::createInstance(const char *packageName,
-                              const char *name,
-                              UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    LocalPointer<Norm2AllModes> allModes(new Norm2AllModes);
-    if(allModes.isNull()) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    allModes->impl.load(packageName, name, errorCode);
-    return U_SUCCESS(errorCode) ? allModes.orphan() : NULL;
-}
-
-U_CDECL_BEGIN
-static UBool U_CALLCONV uprv_normalizer2_cleanup();
-U_CDECL_END
-
-class Norm2AllModesSingleton : public TriStateSingletonWrapper<Norm2AllModes> {
-public:
-    Norm2AllModesSingleton(TriStateSingleton &s, const char *n) :
-        TriStateSingletonWrapper<Norm2AllModes>(s), name(n) {}
-    Norm2AllModes *getInstance(UErrorCode &errorCode) {
-        return TriStateSingletonWrapper<Norm2AllModes>::getInstance(createInstance, name, errorCode);
-    }
-private:
-    static void *createInstance(const void *context, UErrorCode &errorCode) {
-        ucln_common_registerCleanup(UCLN_COMMON_NORMALIZER2, uprv_normalizer2_cleanup);
-        return Norm2AllModes::createInstance(NULL, (const char *)context, errorCode);
-    }
-
-    const char *name;
-};
-
-STATIC_TRI_STATE_SINGLETON(nfcSingleton);
-STATIC_TRI_STATE_SINGLETON(nfkcSingleton);
-STATIC_TRI_STATE_SINGLETON(nfkc_cfSingleton);
-
-class Norm2Singleton : public SimpleSingletonWrapper<Normalizer2> {
-public:
-    Norm2Singleton(SimpleSingleton &s) : SimpleSingletonWrapper<Normalizer2>(s) {}
-    Normalizer2 *getInstance(UErrorCode &errorCode) {
-        return SimpleSingletonWrapper<Normalizer2>::getInstance(createInstance, NULL, errorCode);
-    }
-private:
-    static void *createInstance(const void *, UErrorCode &errorCode) {
-        Normalizer2 *noop=new NoopNormalizer2;
-        if(noop==NULL) {
-            errorCode=U_MEMORY_ALLOCATION_ERROR;
-        }
-        ucln_common_registerCleanup(UCLN_COMMON_NORMALIZER2, uprv_normalizer2_cleanup);
-        return noop;
-    }
-};
-
-STATIC_SIMPLE_SINGLETON(noopSingleton);
-
-static UHashtable *cache=NULL;
-
-U_CDECL_BEGIN
-
-static void U_CALLCONV deleteNorm2AllModes(void *allModes) {
-    delete (Norm2AllModes *)allModes;
-}
-
-static UBool U_CALLCONV uprv_normalizer2_cleanup() {
-    Norm2AllModesSingleton(nfcSingleton, NULL).deleteInstance();
-    Norm2AllModesSingleton(nfkcSingleton, NULL).deleteInstance();
-    Norm2AllModesSingleton(nfkc_cfSingleton, NULL).deleteInstance();
-    Norm2Singleton(noopSingleton).deleteInstance();
-    uhash_close(cache);
-    cache=NULL;
-    return TRUE;
-}
-
-U_CDECL_END
-
-const Normalizer2 *Normalizer2Factory::getNFCInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=Norm2AllModesSingleton(nfcSingleton, "nfc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getNFDInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=Norm2AllModesSingleton(nfcSingleton, "nfc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->decomp : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getFCDInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=Norm2AllModesSingleton(nfcSingleton, "nfc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->fcd : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getFCCInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=Norm2AllModesSingleton(nfcSingleton, "nfc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->fcc : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getNFKCInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=
-        Norm2AllModesSingleton(nfkcSingleton, "nfkc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getNFKDInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=
-        Norm2AllModesSingleton(nfkcSingleton, "nfkc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->decomp : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getNFKC_CFInstance(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=
-        Norm2AllModesSingleton(nfkc_cfSingleton, "nfkc_cf").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
-}
-
-const Normalizer2 *Normalizer2Factory::getNoopInstance(UErrorCode &errorCode) {
-    return Norm2Singleton(noopSingleton).getInstance(errorCode);
-}
-
-const Normalizer2 *
-Normalizer2Factory::getInstance(UNormalizationMode mode, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    switch(mode) {
-    case UNORM_NFD:
-        return getNFDInstance(errorCode);
-    case UNORM_NFKD:
-        return getNFKDInstance(errorCode);
-    case UNORM_NFC:
-        return getNFCInstance(errorCode);
-    case UNORM_NFKC:
-        return getNFKCInstance(errorCode);
-    case UNORM_FCD:
-        return getFCDInstance(errorCode);
-    default:  // UNORM_NONE
-        return getNoopInstance(errorCode);
-    }
-}
-
-const Normalizer2Impl *
-Normalizer2Factory::getNFCImpl(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=
-        Norm2AllModesSingleton(nfcSingleton, "nfc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->impl : NULL;
-}
-
-const Normalizer2Impl *
-Normalizer2Factory::getNFKCImpl(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=
-        Norm2AllModesSingleton(nfkcSingleton, "nfkc").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->impl : NULL;
-}
-
-const Normalizer2Impl *
-Normalizer2Factory::getNFKC_CFImpl(UErrorCode &errorCode) {
-    Norm2AllModes *allModes=
-        Norm2AllModesSingleton(nfkc_cfSingleton, "nfkc_cf").getInstance(errorCode);
-    return allModes!=NULL ? &allModes->impl : NULL;
-}
-
-const Normalizer2Impl *
-Normalizer2Factory::getImpl(const Normalizer2 *norm2) {
-    return &((Normalizer2WithImpl *)norm2)->impl;
-}
-
-const Normalizer2 *
-Normalizer2::getNFCInstance(UErrorCode &errorCode) {
-    return Normalizer2Factory::getNFCInstance(errorCode);
-}
-
-const Normalizer2 *
-Normalizer2::getNFDInstance(UErrorCode &errorCode) {
-    return Normalizer2Factory::getNFDInstance(errorCode);
-}
-
-const Normalizer2 *
-Normalizer2::getNFKCInstance(UErrorCode &errorCode) {
-    return Normalizer2Factory::getNFKCInstance(errorCode);
-}
-
-const Normalizer2 *
-Normalizer2::getNFKDInstance(UErrorCode &errorCode) {
-    return Normalizer2Factory::getNFKDInstance(errorCode);
-}
-
-const Normalizer2 *
-Normalizer2::getNFKCCasefoldInstance(UErrorCode &errorCode) {
-    return Normalizer2Factory::getNFKC_CFInstance(errorCode);
-}
-
-const Normalizer2 *
-Normalizer2::getInstance(const char *packageName,
-                         const char *name,
-                         UNormalization2Mode mode,
-                         UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    if(name==NULL || *name==0) {
-        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    Norm2AllModes *allModes=NULL;
-    if(packageName==NULL) {
-        if(0==uprv_strcmp(name, "nfc")) {
-            allModes=Norm2AllModesSingleton(nfcSingleton, "nfc").getInstance(errorCode);
-        } else if(0==uprv_strcmp(name, "nfkc")) {
-            allModes=Norm2AllModesSingleton(nfkcSingleton, "nfkc").getInstance(errorCode);
-        } else if(0==uprv_strcmp(name, "nfkc_cf")) {
-            allModes=Norm2AllModesSingleton(nfkc_cfSingleton, "nfkc_cf").getInstance(errorCode);
-        }
-    }
-    if(allModes==NULL && U_SUCCESS(errorCode)) {
-        {
-            Mutex lock;
-            if(cache!=NULL) {
-                allModes=(Norm2AllModes *)uhash_get(cache, name);
-            }
-        }
-        if(allModes==NULL) {
-            LocalPointer<Norm2AllModes> localAllModes(
-                Norm2AllModes::createInstance(packageName, name, errorCode));
-            if(U_SUCCESS(errorCode)) {
-                Mutex lock;
-                if(cache==NULL) {
-                    cache=uhash_open(uhash_hashChars, uhash_compareChars, NULL, &errorCode);
-                    if(U_FAILURE(errorCode)) {
-                        return NULL;
-                    }
-                    uhash_setKeyDeleter(cache, uprv_free);
-                    uhash_setValueDeleter(cache, deleteNorm2AllModes);
-                }
-                void *temp=uhash_get(cache, name);
-                if(temp==NULL) {
-                    int32_t keyLength=uprv_strlen(name)+1;
-                    char *nameCopy=(char *)uprv_malloc(keyLength);
-                    if(nameCopy==NULL) {
-                        errorCode=U_MEMORY_ALLOCATION_ERROR;
-                        return NULL;
-                    }
-                    uprv_memcpy(nameCopy, name, keyLength);
-                    uhash_put(cache, nameCopy, allModes=localAllModes.orphan(), &errorCode);
-                } else {
-                    // race condition
-                    allModes=(Norm2AllModes *)temp;
-                }
-            }
-        }
-    }
-    if(allModes!=NULL && U_SUCCESS(errorCode)) {
-        switch(mode) {
-        case UNORM2_COMPOSE:
-            return &allModes->comp;
-        case UNORM2_DECOMPOSE:
-            return &allModes->decomp;
-        case UNORM2_FCD:
-            return &allModes->fcd;
-        case UNORM2_COMPOSE_CONTIGUOUS:
-            return &allModes->fcc;
-        default:
-            break;  // do nothing
-        }
-    }
-    return NULL;
-}
-
-U_NAMESPACE_END
-
-// C API ------------------------------------------------------------------- ***
-
-U_NAMESPACE_USE
-
-U_CAPI const UNormalizer2 * U_EXPORT2
-unorm2_getNFCInstance(UErrorCode *pErrorCode) {
-    return (const UNormalizer2 *)Normalizer2::getNFCInstance(*pErrorCode);
-}
-
-U_CAPI const UNormalizer2 * U_EXPORT2
-unorm2_getNFDInstance(UErrorCode *pErrorCode) {
-    return (const UNormalizer2 *)Normalizer2::getNFDInstance(*pErrorCode);
-}
-
-U_CAPI const UNormalizer2 * U_EXPORT2
-unorm2_getNFKCInstance(UErrorCode *pErrorCode) {
-    return (const UNormalizer2 *)Normalizer2::getNFKCInstance(*pErrorCode);
-}
-
-U_CAPI const UNormalizer2 * U_EXPORT2
-unorm2_getNFKDInstance(UErrorCode *pErrorCode) {
-    return (const UNormalizer2 *)Normalizer2::getNFKDInstance(*pErrorCode);
-}
-
-U_CAPI const UNormalizer2 * U_EXPORT2
-unorm2_getNFKCCasefoldInstance(UErrorCode *pErrorCode) {
-    return (const UNormalizer2 *)Normalizer2::getNFKCCasefoldInstance(*pErrorCode);
-}
-
-U_CAPI const UNormalizer2 * U_EXPORT2
-unorm2_getInstance(const char *packageName,
-                   const char *name,
-                   UNormalization2Mode mode,
-                   UErrorCode *pErrorCode) {
-    return (const UNormalizer2 *)Normalizer2::getInstance(packageName, name, mode, *pErrorCode);
-}
-
-U_CAPI void U_EXPORT2
-unorm2_close(UNormalizer2 *norm2) {
-    delete (Normalizer2 *)norm2;
-}
-
-U_CAPI int32_t U_EXPORT2
-unorm2_normalize(const UNormalizer2 *norm2,
-                 const UChar *src, int32_t length,
-                 UChar *dest, int32_t capacity,
-                 UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if( (src==NULL ? length!=0 : length<-1) ||
-        (dest==NULL ? capacity!=0 : capacity<0) ||
-        (src==dest && src!=NULL)
-    ) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    UnicodeString destString(dest, 0, capacity);
-    // length==0: Nothing to do, and n2wi->normalize(NULL, NULL, buffer, ...) would crash.
-    if(length!=0) {
-        const Normalizer2 *n2=(const Normalizer2 *)norm2;
-        const Normalizer2WithImpl *n2wi=dynamic_cast<const Normalizer2WithImpl *>(n2);
-        if(n2wi!=NULL) {
-            // Avoid duplicate argument checking and support NUL-terminated src.
-            ReorderingBuffer buffer(n2wi->impl, destString);
-            if(buffer.init(length, *pErrorCode)) {
-                n2wi->normalize(src, length>=0 ? src+length : NULL, buffer, *pErrorCode);
-            }
-        } else {
-            UnicodeString srcString(length<0, src, length);
-            n2->normalize(srcString, destString, *pErrorCode);
-        }
-    }
-    return destString.extract(dest, capacity, *pErrorCode);
-}
-
-static int32_t
-normalizeSecondAndAppend(const UNormalizer2 *norm2,
-                         UChar *first, int32_t firstLength, int32_t firstCapacity,
-                         const UChar *second, int32_t secondLength,
-                         UBool doNormalize,
-                         UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if( (second==NULL ? secondLength!=0 : secondLength<-1) ||
-        (first==NULL ? (firstCapacity!=0 || firstLength!=0) :
-                       (firstCapacity<0 || firstLength<-1)) ||
-        (first==second && first!=NULL)
-    ) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    UnicodeString firstString(first, firstLength, firstCapacity);
-    firstLength=firstString.length();  // In case it was -1.
-    // secondLength==0: Nothing to do, and n2wi->normalizeAndAppend(NULL, NULL, buffer, ...) would crash.
-    if(secondLength!=0) {
-        const Normalizer2 *n2=(const Normalizer2 *)norm2;
-        const Normalizer2WithImpl *n2wi=dynamic_cast<const Normalizer2WithImpl *>(n2);
-        if(n2wi!=NULL) {
-            // Avoid duplicate argument checking and support NUL-terminated src.
-            UnicodeString safeMiddle;
-            {
-                ReorderingBuffer buffer(n2wi->impl, firstString);
-                if(buffer.init(firstLength+secondLength+1, *pErrorCode)) {  // destCapacity>=-1
-                    n2wi->normalizeAndAppend(second, secondLength>=0 ? second+secondLength : NULL,
-                                             doNormalize, safeMiddle, buffer, *pErrorCode);
-                }
-            }  // The ReorderingBuffer destructor finalizes firstString.
-            if(U_FAILURE(*pErrorCode) || firstString.length()>firstCapacity) {
-                // Restore the modified suffix of the first string.
-                // This does not restore first[] array contents between firstLength and firstCapacity.
-                // (That might be uninitialized memory, as far as we know.)
-                if(first!=NULL) { /* don't dereference NULL */
-                  safeMiddle.extract(0, 0x7fffffff, first+firstLength-safeMiddle.length());
-                  if(firstLength<firstCapacity) {
-                    first[firstLength]=0;  // NUL-terminate in case it was originally.
-                  }
-                }
-            }
-        } else {
-            UnicodeString secondString(secondLength<0, second, secondLength);
-            if(doNormalize) {
-                n2->normalizeSecondAndAppend(firstString, secondString, *pErrorCode);
-            } else {
-                n2->append(firstString, secondString, *pErrorCode);
-            }
-        }
-    }
-    return firstString.extract(first, firstCapacity, *pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2,
-                                UChar *first, int32_t firstLength, int32_t firstCapacity,
-                                const UChar *second, int32_t secondLength,
-                                UErrorCode *pErrorCode) {
-    return normalizeSecondAndAppend(norm2,
-                                    first, firstLength, firstCapacity,
-                                    second, secondLength,
-                                    TRUE, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-unorm2_append(const UNormalizer2 *norm2,
-              UChar *first, int32_t firstLength, int32_t firstCapacity,
-              const UChar *second, int32_t secondLength,
-              UErrorCode *pErrorCode) {
-    return normalizeSecondAndAppend(norm2,
-                                    first, firstLength, firstCapacity,
-                                    second, secondLength,
-                                    FALSE, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-unorm2_getDecomposition(const UNormalizer2 *norm2,
-                        UChar32 c, UChar *decomposition, int32_t capacity,
-                        UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if(decomposition==NULL ? capacity!=0 : capacity<0) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    UnicodeString destString(decomposition, 0, capacity);
-    if(reinterpret_cast<const Normalizer2 *>(norm2)->getDecomposition(c, destString)) {
-        return destString.extract(decomposition, capacity, *pErrorCode);
-    } else {
-        return -1;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-unorm2_getRawDecomposition(const UNormalizer2 *norm2,
-                           UChar32 c, UChar *decomposition, int32_t capacity,
-                           UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if(decomposition==NULL ? capacity!=0 : capacity<0) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    UnicodeString destString(decomposition, 0, capacity);
-    if(reinterpret_cast<const Normalizer2 *>(norm2)->getRawDecomposition(c, destString)) {
-        return destString.extract(decomposition, capacity, *pErrorCode);
-    } else {
-        return -1;
-    }
-}
-
-U_CAPI UChar32 U_EXPORT2
-unorm2_composePair(const UNormalizer2 *norm2, UChar32 a, UChar32 b) {
-    return reinterpret_cast<const Normalizer2 *>(norm2)->composePair(a, b);
-}
-
-U_CAPI uint8_t U_EXPORT2
-unorm2_getCombiningClass(const UNormalizer2 *norm2, UChar32 c) {
-    return reinterpret_cast<const Normalizer2 *>(norm2)->getCombiningClass(c);
-}
-
-U_CAPI UBool U_EXPORT2
-unorm2_isNormalized(const UNormalizer2 *norm2,
-                    const UChar *s, int32_t length,
-                    UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if((s==NULL && length!=0) || length<-1) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    UnicodeString sString(length<0, s, length);
-    return ((const Normalizer2 *)norm2)->isNormalized(sString, *pErrorCode);
-}
-
-U_CAPI UNormalizationCheckResult U_EXPORT2
-unorm2_quickCheck(const UNormalizer2 *norm2,
-                  const UChar *s, int32_t length,
-                  UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return UNORM_NO;
-    }
-    if((s==NULL && length!=0) || length<-1) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return UNORM_NO;
-    }
-    UnicodeString sString(length<0, s, length);
-    return ((const Normalizer2 *)norm2)->quickCheck(sString, *pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-unorm2_spanQuickCheckYes(const UNormalizer2 *norm2,
-                         const UChar *s, int32_t length,
-                         UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if((s==NULL && length!=0) || length<-1) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    UnicodeString sString(length<0, s, length);
-    return ((const Normalizer2 *)norm2)->spanQuickCheckYes(sString, *pErrorCode);
-}
-
-U_CAPI UBool U_EXPORT2
-unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c) {
-    return ((const Normalizer2 *)norm2)->hasBoundaryBefore(c);
-}
-
-U_CAPI UBool U_EXPORT2
-unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c) {
-    return ((const Normalizer2 *)norm2)->hasBoundaryAfter(c);
-}
-
-U_CAPI UBool U_EXPORT2
-unorm2_isInert(const UNormalizer2 *norm2, UChar32 c) {
-    return ((const Normalizer2 *)norm2)->isInert(c);
-}
-
-// Some properties APIs ---------------------------------------------------- ***
-
-U_CAPI uint8_t U_EXPORT2
-u_getCombiningClass(UChar32 c) {
-    UErrorCode errorCode=U_ZERO_ERROR;
-    const Normalizer2 *nfd=Normalizer2Factory::getNFDInstance(errorCode);
-    if(U_SUCCESS(errorCode)) {
-        return nfd->getCombiningClass(c);
-    } else {
-        return 0;
-    }
-}
-
-U_CFUNC UNormalizationCheckResult
-unorm_getQuickCheck(UChar32 c, UNormalizationMode mode) {
-    if(mode<=UNORM_NONE || UNORM_FCD<=mode) {
-        return UNORM_YES;
-    }
-    UErrorCode errorCode=U_ZERO_ERROR;
-    const Normalizer2 *norm2=Normalizer2Factory::getInstance(mode, errorCode);
-    if(U_SUCCESS(errorCode)) {
-        return ((const Normalizer2WithImpl *)norm2)->getQuickCheck(c);
-    } else {
-        return UNORM_MAYBE;
-    }
-}
-
-U_CFUNC uint16_t
-unorm_getFCD16(UChar32 c) {
-    UErrorCode errorCode=U_ZERO_ERROR;
-    const Normalizer2Impl *impl=Normalizer2Factory::getNFCImpl(errorCode);
-    if(U_SUCCESS(errorCode)) {
-        return impl->getFCD16(c);
-    } else {
-        return 0;
-    }
-}
-
-#endif  // !UCONFIG_NO_NORMALIZATION
diff --git a/src/third_party/mozjs/intl/icu/source/common/normalizer2impl.cpp b/src/third_party/mozjs/intl/icu/source/common/normalizer2impl.cpp
deleted file mode 100644
index 050b581..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/normalizer2impl.cpp
+++ /dev/null
@@ -1,2073 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  normalizer2impl.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009nov22
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/normalizer2.h"
-#include "unicode/udata.h"
-#include "unicode/ustring.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "mutex.h"
-#include "normalizer2impl.h"
-#include "putilimp.h"
-#include "uassert.h"
-#include "uset_imp.h"
-#include "utrie2.h"
-#include "uvector.h"
-
-U_NAMESPACE_BEGIN
-
-// ReorderingBuffer -------------------------------------------------------- ***
-
-UBool ReorderingBuffer::init(int32_t destCapacity, UErrorCode &errorCode) {
-    int32_t length=str.length();
-    start=str.getBuffer(destCapacity);
-    if(start==NULL) {
-        // getBuffer() already did str.setToBogus()
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return FALSE;
-    }
-    limit=start+length;
-    remainingCapacity=str.getCapacity()-length;
-    reorderStart=start;
-    if(start==limit) {
-        lastCC=0;
-    } else {
-        setIterator();
-        lastCC=previousCC();
-        // Set reorderStart after the last code point with cc<=1 if there is one.
-        if(lastCC>1) {
-            while(previousCC()>1) {}
-        }
-        reorderStart=codePointLimit;
-    }
-    return TRUE;
-}
-
-UBool ReorderingBuffer::equals(const UChar *otherStart, const UChar *otherLimit) const {
-    int32_t length=(int32_t)(limit-start);
-    return
-        length==(int32_t)(otherLimit-otherStart) &&
-        0==u_memcmp(start, otherStart, length);
-}
-
-UBool ReorderingBuffer::appendSupplementary(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
-    if(remainingCapacity<2 && !resize(2, errorCode)) {
-        return FALSE;
-    }
-    if(lastCC<=cc || cc==0) {
-        limit[0]=U16_LEAD(c);
-        limit[1]=U16_TRAIL(c);
-        limit+=2;
-        lastCC=cc;
-        if(cc<=1) {
-            reorderStart=limit;
-        }
-    } else {
-        insert(c, cc);
-    }
-    remainingCapacity-=2;
-    return TRUE;
-}
-
-UBool ReorderingBuffer::append(const UChar *s, int32_t length,
-                               uint8_t leadCC, uint8_t trailCC,
-                               UErrorCode &errorCode) {
-    if(length==0) {
-        return TRUE;
-    }
-    if(remainingCapacity<length && !resize(length, errorCode)) {
-        return FALSE;
-    }
-    remainingCapacity-=length;
-    if(lastCC<=leadCC || leadCC==0) {
-        if(trailCC<=1) {
-            reorderStart=limit+length;
-        } else if(leadCC<=1) {
-            reorderStart=limit+1;  // Ok if not a code point boundary.
-        }
-        const UChar *sLimit=s+length;
-        do { *limit++=*s++; } while(s!=sLimit);
-        lastCC=trailCC;
-    } else {
-        int32_t i=0;
-        UChar32 c;
-        U16_NEXT(s, i, length, c);
-        insert(c, leadCC);  // insert first code point
-        while(i<length) {
-            U16_NEXT(s, i, length, c);
-            if(i<length) {
-                // s must be in NFD, otherwise we need to use getCC().
-                leadCC=Normalizer2Impl::getCCFromYesOrMaybe(impl.getNorm16(c));
-            } else {
-                leadCC=trailCC;
-            }
-            append(c, leadCC, errorCode);
-        }
-    }
-    return TRUE;
-}
-
-UBool ReorderingBuffer::appendZeroCC(UChar32 c, UErrorCode &errorCode) {
-    int32_t cpLength=U16_LENGTH(c);
-    if(remainingCapacity<cpLength && !resize(cpLength, errorCode)) {
-        return FALSE;
-    }
-    remainingCapacity-=cpLength;
-    if(cpLength==1) {
-        *limit++=(UChar)c;
-    } else {
-        limit[0]=U16_LEAD(c);
-        limit[1]=U16_TRAIL(c);
-        limit+=2;
-    }
-    lastCC=0;
-    reorderStart=limit;
-    return TRUE;
-}
-
-UBool ReorderingBuffer::appendZeroCC(const UChar *s, const UChar *sLimit, UErrorCode &errorCode) {
-    if(s==sLimit) {
-        return TRUE;
-    }
-    int32_t length=(int32_t)(sLimit-s);
-    if(remainingCapacity<length && !resize(length, errorCode)) {
-        return FALSE;
-    }
-    u_memcpy(limit, s, length);
-    limit+=length;
-    remainingCapacity-=length;
-    lastCC=0;
-    reorderStart=limit;
-    return TRUE;
-}
-
-void ReorderingBuffer::remove() {
-    reorderStart=limit=start;
-    remainingCapacity=str.getCapacity();
-    lastCC=0;
-}
-
-void ReorderingBuffer::removeSuffix(int32_t suffixLength) {
-    if(suffixLength<(limit-start)) {
-        limit-=suffixLength;
-        remainingCapacity+=suffixLength;
-    } else {
-        limit=start;
-        remainingCapacity=str.getCapacity();
-    }
-    lastCC=0;
-    reorderStart=limit;
-}
-
-UBool ReorderingBuffer::resize(int32_t appendLength, UErrorCode &errorCode) {
-    int32_t reorderStartIndex=(int32_t)(reorderStart-start);
-    int32_t length=(int32_t)(limit-start);
-    str.releaseBuffer(length);
-    int32_t newCapacity=length+appendLength;
-    int32_t doubleCapacity=2*str.getCapacity();
-    if(newCapacity<doubleCapacity) {
-        newCapacity=doubleCapacity;
-    }
-    if(newCapacity<256) {
-        newCapacity=256;
-    }
-    start=str.getBuffer(newCapacity);
-    if(start==NULL) {
-        // getBuffer() already did str.setToBogus()
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return FALSE;
-    }
-    reorderStart=start+reorderStartIndex;
-    limit=start+length;
-    remainingCapacity=str.getCapacity()-length;
-    return TRUE;
-}
-
-void ReorderingBuffer::skipPrevious() {
-    codePointLimit=codePointStart;
-    UChar c=*--codePointStart;
-    if(U16_IS_TRAIL(c) && start<codePointStart && U16_IS_LEAD(*(codePointStart-1))) {
-        --codePointStart;
-    }
-}
-
-uint8_t ReorderingBuffer::previousCC() {
-    codePointLimit=codePointStart;
-    if(reorderStart>=codePointStart) {
-        return 0;
-    }
-    UChar32 c=*--codePointStart;
-    if(c<Normalizer2Impl::MIN_CCC_LCCC_CP) {
-        return 0;
-    }
-
-    UChar c2;
-    if(U16_IS_TRAIL(c) && start<codePointStart && U16_IS_LEAD(c2=*(codePointStart-1))) {
-        --codePointStart;
-        c=U16_GET_SUPPLEMENTARY(c2, c);
-    }
-    return Normalizer2Impl::getCCFromYesOrMaybe(impl.getNorm16(c));
-}
-
-// Inserts c somewhere before the last character.
-// Requires 0<cc<lastCC which implies reorderStart<limit.
-void ReorderingBuffer::insert(UChar32 c, uint8_t cc) {
-    for(setIterator(), skipPrevious(); previousCC()>cc;) {}
-    // insert c at codePointLimit, after the character with prevCC<=cc
-    UChar *q=limit;
-    UChar *r=limit+=U16_LENGTH(c);
-    do {
-        *--r=*--q;
-    } while(codePointLimit!=q);
-    writeCodePoint(q, c);
-    if(cc<=1) {
-        reorderStart=r;
-    }
-}
-
-// Normalizer2Impl --------------------------------------------------------- ***
-
-struct CanonIterData : public UMemory {
-    CanonIterData(UErrorCode &errorCode);
-    ~CanonIterData();
-    void addToStartSet(UChar32 origin, UChar32 decompLead, UErrorCode &errorCode);
-    UTrie2 *trie;
-    UVector canonStartSets;  // contains UnicodeSet *
-};
-
-Normalizer2Impl::~Normalizer2Impl() {
-    udata_close(memory);
-    utrie2_close(normTrie);
-    delete (CanonIterData *)canonIterDataSingleton.fInstance;
-}
-
-UBool U_CALLCONV
-Normalizer2Impl::isAcceptable(void *context,
-                              const char * /* type */, const char * /*name*/,
-                              const UDataInfo *pInfo) {
-    if(
-        pInfo->size>=20 &&
-        pInfo->isBigEndian==U_IS_BIG_ENDIAN &&
-        pInfo->charsetFamily==U_CHARSET_FAMILY &&
-        pInfo->dataFormat[0]==0x4e &&    /* dataFormat="Nrm2" */
-        pInfo->dataFormat[1]==0x72 &&
-        pInfo->dataFormat[2]==0x6d &&
-        pInfo->dataFormat[3]==0x32 &&
-        pInfo->formatVersion[0]==2
-    ) {
-        Normalizer2Impl *me=(Normalizer2Impl *)context;
-        uprv_memcpy(me->dataVersion, pInfo->dataVersion, 4);
-        return TRUE;
-    } else {
-        return FALSE;
-    }
-}
-
-void
-Normalizer2Impl::load(const char *packageName, const char *name, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    memory=udata_openChoice(packageName, "nrm", name, isAcceptable, this, &errorCode);
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    const uint8_t *inBytes=(const uint8_t *)udata_getMemory(memory);
-    const int32_t *inIndexes=(const int32_t *)inBytes;
-    int32_t indexesLength=inIndexes[IX_NORM_TRIE_OFFSET]/4;
-    if(indexesLength<=IX_MIN_MAYBE_YES) {
-        errorCode=U_INVALID_FORMAT_ERROR;  // Not enough indexes.
-        return;
-    }
-
-    minDecompNoCP=inIndexes[IX_MIN_DECOMP_NO_CP];
-    minCompNoMaybeCP=inIndexes[IX_MIN_COMP_NO_MAYBE_CP];
-
-    minYesNo=inIndexes[IX_MIN_YES_NO];
-    minYesNoMappingsOnly=inIndexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
-    minNoNo=inIndexes[IX_MIN_NO_NO];
-    limitNoNo=inIndexes[IX_LIMIT_NO_NO];
-    minMaybeYes=inIndexes[IX_MIN_MAYBE_YES];
-
-    int32_t offset=inIndexes[IX_NORM_TRIE_OFFSET];
-    int32_t nextOffset=inIndexes[IX_EXTRA_DATA_OFFSET];
-    normTrie=utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS,
-                                       inBytes+offset, nextOffset-offset, NULL,
-                                       &errorCode);
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-
-    offset=nextOffset;
-    nextOffset=inIndexes[IX_SMALL_FCD_OFFSET];
-    maybeYesCompositions=(const uint16_t *)(inBytes+offset);
-    extraData=maybeYesCompositions+(MIN_NORMAL_MAYBE_YES-minMaybeYes);
-
-    // smallFCD: new in formatVersion 2
-    offset=nextOffset;
-    smallFCD=inBytes+offset;
-
-    // Build tccc180[].
-    // gennorm2 enforces lccc=0 for c<MIN_CCC_LCCC_CP=U+0300.
-    uint8_t bits=0;
-    for(UChar c=0; c<0x180; bits>>=1) {
-        if((c&0xff)==0) {
-            bits=smallFCD[c>>8];  // one byte per 0x100 code points
-        }
-        if(bits&1) {
-            for(int i=0; i<0x20; ++i, ++c) {
-                tccc180[c]=(uint8_t)getFCD16FromNormData(c);
-            }
-        } else {
-            uprv_memset(tccc180+c, 0, 0x20);
-            c+=0x20;
-        }
-    }
-}
-
-uint8_t Normalizer2Impl::getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const {
-    UChar32 c;
-    if(cpStart==(cpLimit-1)) {
-        c=*cpStart;
-    } else {
-        c=U16_GET_SUPPLEMENTARY(cpStart[0], cpStart[1]);
-    }
-    uint16_t prevNorm16=getNorm16(c);
-    if(prevNorm16<=minYesNo) {
-        return 0;  // yesYes and Hangul LV/LVT have ccc=tccc=0
-    } else {
-        return (uint8_t)(*getMapping(prevNorm16)>>8);  // tccc from yesNo
-    }
-}
-
-U_CDECL_BEGIN
-
-static UBool U_CALLCONV
-enumPropertyStartsRange(const void *context, UChar32 start, UChar32 /*end*/, uint32_t /*value*/) {
-    /* add the start code point to the USet */
-    const USetAdder *sa=(const USetAdder *)context;
-    sa->add(sa->set, start);
-    return TRUE;
-}
-
-static uint32_t U_CALLCONV
-segmentStarterMapper(const void * /*context*/, uint32_t value) {
-    return value&CANON_NOT_SEGMENT_STARTER;
-}
-
-U_CDECL_END
-
-void
-Normalizer2Impl::addPropertyStarts(const USetAdder *sa, UErrorCode & /*errorCode*/) const {
-    /* add the start code point of each same-value range of each trie */
-    utrie2_enum(normTrie, NULL, enumPropertyStartsRange, sa);
-
-    /* add Hangul LV syllables and LV+1 because of skippables */
-    for(UChar c=Hangul::HANGUL_BASE; c<Hangul::HANGUL_LIMIT; c+=Hangul::JAMO_T_COUNT) {
-        sa->add(sa->set, c);
-        sa->add(sa->set, c+1);
-    }
-    sa->add(sa->set, Hangul::HANGUL_LIMIT); /* add Hangul+1 to continue with other properties */
-}
-
-void
-Normalizer2Impl::addCanonIterPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const {
-    /* add the start code point of each same-value range of the canonical iterator data trie */
-    if(ensureCanonIterData(errorCode)) {
-        // currently only used for the SEGMENT_STARTER property
-        utrie2_enum(((CanonIterData *)canonIterDataSingleton.fInstance)->trie,
-                    segmentStarterMapper, enumPropertyStartsRange, sa);
-    }
-}
-
-const UChar *
-Normalizer2Impl::copyLowPrefixFromNulTerminated(const UChar *src,
-                                                UChar32 minNeedDataCP,
-                                                ReorderingBuffer *buffer,
-                                                UErrorCode &errorCode) const {
-    // Make some effort to support NUL-terminated strings reasonably.
-    // Take the part of the fast quick check loop that does not look up
-    // data and check the first part of the string.
-    // After this prefix, determine the string length to simplify the rest
-    // of the code.
-    const UChar *prevSrc=src;
-    UChar c;
-    while((c=*src++)<minNeedDataCP && c!=0) {}
-    // Back out the last character for full processing.
-    // Copy this prefix.
-    if(--src!=prevSrc) {
-        if(buffer!=NULL) {
-            buffer->appendZeroCC(prevSrc, src, errorCode);
-        }
-    }
-    return src;
-}
-
-// Dual functionality:
-// buffer!=NULL: normalize
-// buffer==NULL: isNormalized/spanQuickCheckYes
-const UChar *
-Normalizer2Impl::decompose(const UChar *src, const UChar *limit,
-                           ReorderingBuffer *buffer,
-                           UErrorCode &errorCode) const {
-    UChar32 minNoCP=minDecompNoCP;
-    if(limit==NULL) {
-        src=copyLowPrefixFromNulTerminated(src, minNoCP, buffer, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return src;
-        }
-        limit=u_strchr(src, 0);
-    }
-
-    const UChar *prevSrc;
-    UChar32 c=0;
-    uint16_t norm16=0;
-
-    // only for quick check
-    const UChar *prevBoundary=src;
-    uint8_t prevCC=0;
-
-    for(;;) {
-        // count code units below the minimum or with irrelevant data for the quick check
-        for(prevSrc=src; src!=limit;) {
-            if( (c=*src)<minNoCP ||
-                isMostDecompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
-            ) {
-                ++src;
-            } else if(!U16_IS_SURROGATE(c)) {
-                break;
-            } else {
-                UChar c2;
-                if(U16_IS_SURROGATE_LEAD(c)) {
-                    if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
-                        c=U16_GET_SUPPLEMENTARY(c, c2);
-                    }
-                } else /* trail surrogate */ {
-                    if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
-                        --src;
-                        c=U16_GET_SUPPLEMENTARY(c2, c);
-                    }
-                }
-                if(isMostDecompYesAndZeroCC(norm16=getNorm16(c))) {
-                    src+=U16_LENGTH(c);
-                } else {
-                    break;
-                }
-            }
-        }
-        // copy these code units all at once
-        if(src!=prevSrc) {
-            if(buffer!=NULL) {
-                if(!buffer->appendZeroCC(prevSrc, src, errorCode)) {
-                    break;
-                }
-            } else {
-                prevCC=0;
-                prevBoundary=src;
-            }
-        }
-        if(src==limit) {
-            break;
-        }
-
-        // Check one above-minimum, relevant code point.
-        src+=U16_LENGTH(c);
-        if(buffer!=NULL) {
-            if(!decompose(c, norm16, *buffer, errorCode)) {
-                break;
-            }
-        } else {
-            if(isDecompYes(norm16)) {
-                uint8_t cc=getCCFromYesOrMaybe(norm16);
-                if(prevCC<=cc || cc==0) {
-                    prevCC=cc;
-                    if(cc<=1) {
-                        prevBoundary=src;
-                    }
-                    continue;
-                }
-            }
-            return prevBoundary;  // "no" or cc out of order
-        }
-    }
-    return src;
-}
-
-// Decompose a short piece of text which is likely to contain characters that
-// fail the quick check loop and/or where the quick check loop's overhead
-// is unlikely to be amortized.
-// Called by the compose() and makeFCD() implementations.
-UBool Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit,
-                                      ReorderingBuffer &buffer,
-                                      UErrorCode &errorCode) const {
-    while(src<limit) {
-        UChar32 c;
-        uint16_t norm16;
-        UTRIE2_U16_NEXT16(normTrie, src, limit, c, norm16);
-        if(!decompose(c, norm16, buffer, errorCode)) {
-            return FALSE;
-        }
-    }
-    return TRUE;
-}
-
-UBool Normalizer2Impl::decompose(UChar32 c, uint16_t norm16,
-                                 ReorderingBuffer &buffer,
-                                 UErrorCode &errorCode) const {
-    // Only loops for 1:1 algorithmic mappings.
-    for(;;) {
-        // get the decomposition and the lead and trail cc's
-        if(isDecompYes(norm16)) {
-            // c does not decompose
-            return buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode);
-        } else if(isHangul(norm16)) {
-            // Hangul syllable: decompose algorithmically
-            UChar jamos[3];
-            return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode);
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-            norm16=getNorm16(c);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            int32_t length=firstUnit&MAPPING_LENGTH_MASK;
-            uint8_t leadCC, trailCC;
-            trailCC=(uint8_t)(firstUnit>>8);
-            if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
-                leadCC=(uint8_t)(*(mapping-1)>>8);
-            } else {
-                leadCC=0;
-            }
-            return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode);
-        }
-    }
-}
-
-const UChar *
-Normalizer2Impl::getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const {
-    const UChar *decomp=NULL;
-    uint16_t norm16;
-    for(;;) {
-        if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
-            // c does not decompose
-            return decomp;
-        } else if(isHangul(norm16)) {
-            // Hangul syllable: decompose algorithmically
-            length=Hangul::decompose(c, buffer);
-            return buffer;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-            decomp=buffer;
-            length=0;
-            U16_APPEND_UNSAFE(buffer, length, c);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            length=*mapping&MAPPING_LENGTH_MASK;
-            return (const UChar *)mapping+1;
-        }
-    }
-}
-
-// The capacity of the buffer must be 30=MAPPING_LENGTH_MASK-1
-// so that a raw mapping fits that consists of one unit ("rm0")
-// plus all but the first two code units of the normal mapping.
-// The maximum length of a normal mapping is 31=MAPPING_LENGTH_MASK.
-const UChar *
-Normalizer2Impl::getRawDecomposition(UChar32 c, UChar buffer[30], int32_t &length) const {
-    // We do not loop in this method because an algorithmic mapping itself
-    // becomes a final result rather than having to be decomposed recursively.
-    uint16_t norm16;
-    if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
-        // c does not decompose
-        return NULL;
-    } else if(isHangul(norm16)) {
-        // Hangul syllable: decompose algorithmically
-        Hangul::getRawDecomposition(c, buffer);
-        length=2;
-        return buffer;
-    } else if(isDecompNoAlgorithmic(norm16)) {
-        c=mapAlgorithmic(c, norm16);
-        length=0;
-        U16_APPEND_UNSAFE(buffer, length, c);
-        return buffer;
-    } else {
-        // c decomposes, get everything from the variable-length extra data
-        const uint16_t *mapping=getMapping(norm16);
-        uint16_t firstUnit=*mapping;
-        int32_t mLength=firstUnit&MAPPING_LENGTH_MASK;  // length of normal mapping
-        if(firstUnit&MAPPING_HAS_RAW_MAPPING) {
-            // Read the raw mapping from before the firstUnit and before the optional ccc/lccc word.
-            // Bit 7=MAPPING_HAS_CCC_LCCC_WORD
-            const uint16_t *rawMapping=mapping-((firstUnit>>7)&1)-1;
-            uint16_t rm0=*rawMapping;
-            if(rm0<=MAPPING_LENGTH_MASK) {
-                length=rm0;
-                return (const UChar *)rawMapping-rm0;
-            } else {
-                // Copy the normal mapping and replace its first two code units with rm0.
-                buffer[0]=(UChar)rm0;
-                u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2);
-                length=mLength-1;
-                return buffer;
-            }
-        } else {
-            length=mLength;
-            return (const UChar *)mapping+1;
-        }
-    }
-}
-
-void Normalizer2Impl::decomposeAndAppend(const UChar *src, const UChar *limit,
-                                         UBool doDecompose,
-                                         UnicodeString &safeMiddle,
-                                         ReorderingBuffer &buffer,
-                                         UErrorCode &errorCode) const {
-    buffer.copyReorderableSuffixTo(safeMiddle);
-    if(doDecompose) {
-        decompose(src, limit, &buffer, errorCode);
-        return;
-    }
-    // Just merge the strings at the boundary.
-    ForwardUTrie2StringIterator iter(normTrie, src, limit);
-    uint8_t firstCC, prevCC, cc;
-    firstCC=prevCC=cc=getCC(iter.next16());
-    while(cc!=0) {
-        prevCC=cc;
-        cc=getCC(iter.next16());
-    };
-    if(limit==NULL) {  // appendZeroCC() needs limit!=NULL
-        limit=u_strchr(iter.codePointStart, 0);
-    }
-
-    if (buffer.append(src, (int32_t)(iter.codePointStart-src), firstCC, prevCC, errorCode)) {
-        buffer.appendZeroCC(iter.codePointStart, limit, errorCode);
-    }
-}
-
-// Note: hasDecompBoundary() could be implemented as aliases to
-// hasFCDBoundaryBefore() and hasFCDBoundaryAfter()
-// at the cost of building the FCD trie for a decomposition normalizer.
-UBool Normalizer2Impl::hasDecompBoundary(UChar32 c, UBool before) const {
-    for(;;) {
-        if(c<minDecompNoCP) {
-            return TRUE;
-        }
-        uint16_t norm16=getNorm16(c);
-        if(isHangul(norm16) || isDecompYesAndZeroCC(norm16)) {
-            return TRUE;
-        } else if(norm16>MIN_NORMAL_MAYBE_YES) {
-            return FALSE;  // ccc!=0
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            if((firstUnit&MAPPING_LENGTH_MASK)==0) {
-                return FALSE;
-            }
-            if(!before) {
-                // decomp after-boundary: same as hasFCDBoundaryAfter(),
-                // fcd16<=1 || trailCC==0
-                if(firstUnit>0x1ff) {
-                    return FALSE;  // trailCC>1
-                }
-                if(firstUnit<=0xff) {
-                    return TRUE;  // trailCC==0
-                }
-                // if(trailCC==1) test leadCC==0, same as checking for before-boundary
-            }
-            // TRUE if leadCC==0 (hasFCDBoundaryBefore())
-            return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
-        }
-    }
-}
-
-/*
- * Finds the recomposition result for
- * a forward-combining "lead" character,
- * specified with a pointer to its compositions list,
- * and a backward-combining "trail" character.
- *
- * If the lead and trail characters combine, then this function returns
- * the following "compositeAndFwd" value:
- * Bits 21..1  composite character
- * Bit      0  set if the composite is a forward-combining starter
- * otherwise it returns -1.
- *
- * The compositions list has (trail, compositeAndFwd) pair entries,
- * encoded as either pairs or triples of 16-bit units.
- * The last entry has the high bit of its first unit set.
- *
- * The list is sorted by ascending trail characters (there are no duplicates).
- * A linear search is used.
- *
- * See normalizer2impl.h for a more detailed description
- * of the compositions list format.
- */
-int32_t Normalizer2Impl::combine(const uint16_t *list, UChar32 trail) {
-    uint16_t key1, firstUnit;
-    if(trail<COMP_1_TRAIL_LIMIT) {
-        // trail character is 0..33FF
-        // result entry may have 2 or 3 units
-        key1=(uint16_t)(trail<<1);
-        while(key1>(firstUnit=*list)) {
-            list+=2+(firstUnit&COMP_1_TRIPLE);
-        }
-        if(key1==(firstUnit&COMP_1_TRAIL_MASK)) {
-            if(firstUnit&COMP_1_TRIPLE) {
-                return ((int32_t)list[1]<<16)|list[2];
-            } else {
-                return list[1];
-            }
-        }
-    } else {
-        // trail character is 3400..10FFFF
-        // result entry has 3 units
-        key1=(uint16_t)(COMP_1_TRAIL_LIMIT+
-                        (((trail>>COMP_1_TRAIL_SHIFT))&
-                          ~COMP_1_TRIPLE));
-        uint16_t key2=(uint16_t)(trail<<COMP_2_TRAIL_SHIFT);
-        uint16_t secondUnit;
-        for(;;) {
-            if(key1>(firstUnit=*list)) {
-                list+=2+(firstUnit&COMP_1_TRIPLE);
-            } else if(key1==(firstUnit&COMP_1_TRAIL_MASK)) {
-                if(key2>(secondUnit=list[1])) {
-                    if(firstUnit&COMP_1_LAST_TUPLE) {
-                        break;
-                    } else {
-                        list+=3;
-                    }
-                } else if(key2==(secondUnit&COMP_2_TRAIL_MASK)) {
-                    return ((int32_t)(secondUnit&~COMP_2_TRAIL_MASK)<<16)|list[2];
-                } else {
-                    break;
-                }
-            } else {
-                break;
-            }
-        }
-    }
-    return -1;
-}
-
-/**
-  * @param list some character's compositions list
-  * @param set recursively receives the composites from these compositions
-  */
-void Normalizer2Impl::addComposites(const uint16_t *list, UnicodeSet &set) const {
-    uint16_t firstUnit;
-    int32_t compositeAndFwd;
-    do {
-        firstUnit=*list;
-        if((firstUnit&COMP_1_TRIPLE)==0) {
-            compositeAndFwd=list[1];
-            list+=2;
-        } else {
-            compositeAndFwd=(((int32_t)list[1]&~COMP_2_TRAIL_MASK)<<16)|list[2];
-            list+=3;
-        }
-        UChar32 composite=compositeAndFwd>>1;
-        if((compositeAndFwd&1)!=0) {
-            addComposites(getCompositionsListForComposite(getNorm16(composite)), set);
-        }
-        set.add(composite);
-    } while((firstUnit&COMP_1_LAST_TUPLE)==0);
-}
-
-/*
- * Recomposes the buffer text starting at recomposeStartIndex
- * (which is in NFD - decomposed and canonically ordered),
- * and truncates the buffer contents.
- *
- * Note that recomposition never lengthens the text:
- * Any character consists of either one or two code units;
- * a composition may contain at most one more code unit than the original starter,
- * while the combining mark that is removed has at least one code unit.
- */
-void Normalizer2Impl::recompose(ReorderingBuffer &buffer, int32_t recomposeStartIndex,
-                                UBool onlyContiguous) const {
-    UChar *p=buffer.getStart()+recomposeStartIndex;
-    UChar *limit=buffer.getLimit();
-    if(p==limit) {
-        return;
-    }
-
-    UChar *starter, *pRemove, *q, *r;
-    const uint16_t *compositionsList;
-    UChar32 c, compositeAndFwd;
-    uint16_t norm16;
-    uint8_t cc, prevCC;
-    UBool starterIsSupplementary;
-
-    // Some of the following variables are not used until we have a forward-combining starter
-    // and are only initialized now to avoid compiler warnings.
-    compositionsList=NULL;  // used as indicator for whether we have a forward-combining starter
-    starter=NULL;
-    starterIsSupplementary=FALSE;
-    prevCC=0;
-
-    for(;;) {
-        UTRIE2_U16_NEXT16(normTrie, p, limit, c, norm16);
-        cc=getCCFromYesOrMaybe(norm16);
-        if( // this character combines backward and
-            isMaybe(norm16) &&
-            // we have seen a starter that combines forward and
-            compositionsList!=NULL &&
-            // the backward-combining character is not blocked
-            (prevCC<cc || prevCC==0)
-        ) {
-            if(isJamoVT(norm16)) {
-                // c is a Jamo V/T, see if we can compose it with the previous character.
-                if(c<Hangul::JAMO_T_BASE) {
-                    // c is a Jamo Vowel, compose with previous Jamo L and following Jamo T.
-                    UChar prev=(UChar)(*starter-Hangul::JAMO_L_BASE);
-                    if(prev<Hangul::JAMO_L_COUNT) {
-                        pRemove=p-1;
-                        UChar syllable=(UChar)
-                            (Hangul::HANGUL_BASE+
-                             (prev*Hangul::JAMO_V_COUNT+(c-Hangul::JAMO_V_BASE))*
-                             Hangul::JAMO_T_COUNT);
-                        UChar t;
-                        if(p!=limit && (t=(UChar)(*p-Hangul::JAMO_T_BASE))<Hangul::JAMO_T_COUNT) {
-                            ++p;
-                            syllable+=t;  // The next character was a Jamo T.
-                        }
-                        *starter=syllable;
-                        // remove the Jamo V/T
-                        q=pRemove;
-                        r=p;
-                        while(r<limit) {
-                            *q++=*r++;
-                        }
-                        limit=q;
-                        p=pRemove;
-                    }
-                }
-                /*
-                 * No "else" for Jamo T:
-                 * Since the input is in NFD, there are no Hangul LV syllables that
-                 * a Jamo T could combine with.
-                 * All Jamo Ts are combined above when handling Jamo Vs.
-                 */
-                if(p==limit) {
-                    break;
-                }
-                compositionsList=NULL;
-                continue;
-            } else if((compositeAndFwd=combine(compositionsList, c))>=0) {
-                // The starter and the combining mark (c) do combine.
-                UChar32 composite=compositeAndFwd>>1;
-
-                // Replace the starter with the composite, remove the combining mark.
-                pRemove=p-U16_LENGTH(c);  // pRemove & p: start & limit of the combining mark
-                if(starterIsSupplementary) {
-                    if(U_IS_SUPPLEMENTARY(composite)) {
-                        // both are supplementary
-                        starter[0]=U16_LEAD(composite);
-                        starter[1]=U16_TRAIL(composite);
-                    } else {
-                        *starter=(UChar)composite;
-                        // The composite is shorter than the starter,
-                        // move the intermediate characters forward one.
-                        starterIsSupplementary=FALSE;
-                        q=starter+1;
-                        r=q+1;
-                        while(r<pRemove) {
-                            *q++=*r++;
-                        }
-                        --pRemove;
-                    }
-                } else if(U_IS_SUPPLEMENTARY(composite)) {
-                    // The composite is longer than the starter,
-                    // move the intermediate characters back one.
-                    starterIsSupplementary=TRUE;
-                    ++starter;  // temporarily increment for the loop boundary
-                    q=pRemove;
-                    r=++pRemove;
-                    while(starter<q) {
-                        *--r=*--q;
-                    }
-                    *starter=U16_TRAIL(composite);
-                    *--starter=U16_LEAD(composite);  // undo the temporary increment
-                } else {
-                    // both are on the BMP
-                    *starter=(UChar)composite;
-                }
-
-                /* remove the combining mark by moving the following text over it */
-                if(pRemove<p) {
-                    q=pRemove;
-                    r=p;
-                    while(r<limit) {
-                        *q++=*r++;
-                    }
-                    limit=q;
-                    p=pRemove;
-                }
-                // Keep prevCC because we removed the combining mark.
-
-                if(p==limit) {
-                    break;
-                }
-                // Is the composite a starter that combines forward?
-                if(compositeAndFwd&1) {
-                    compositionsList=
-                        getCompositionsListForComposite(getNorm16(composite));
-                } else {
-                    compositionsList=NULL;
-                }
-
-                // We combined; continue with looking for compositions.
-                continue;
-            }
-        }
-
-        // no combination this time
-        prevCC=cc;
-        if(p==limit) {
-            break;
-        }
-
-        // If c did not combine, then check if it is a starter.
-        if(cc==0) {
-            // Found a new starter.
-            if((compositionsList=getCompositionsListForDecompYes(norm16))!=NULL) {
-                // It may combine with something, prepare for it.
-                if(U_IS_BMP(c)) {
-                    starterIsSupplementary=FALSE;
-                    starter=p-1;
-                } else {
-                    starterIsSupplementary=TRUE;
-                    starter=p-2;
-                }
-            }
-        } else if(onlyContiguous) {
-            // FCC: no discontiguous compositions; any intervening character blocks.
-            compositionsList=NULL;
-        }
-    }
-    buffer.setReorderingLimit(limit);
-}
-
-UChar32
-Normalizer2Impl::composePair(UChar32 a, UChar32 b) const {
-    uint16_t norm16=getNorm16(a);  // maps an out-of-range 'a' to inert norm16=0
-    const uint16_t *list;
-    if(isInert(norm16)) {
-        return U_SENTINEL;
-    } else if(norm16<minYesNoMappingsOnly) {
-        if(isJamoL(norm16)) {
-            b-=Hangul::JAMO_V_BASE;
-            if(0<=b && b<Hangul::JAMO_V_COUNT) {
-                return
-                    (Hangul::HANGUL_BASE+
-                     ((a-Hangul::JAMO_L_BASE)*Hangul::JAMO_V_COUNT+b)*
-                     Hangul::JAMO_T_COUNT);
-            } else {
-                return U_SENTINEL;
-            }
-        } else if(isHangul(norm16)) {
-            b-=Hangul::JAMO_T_BASE;
-            if(Hangul::isHangulWithoutJamoT(a) && 0<b && b<Hangul::JAMO_T_COUNT) {  // not b==0!
-                return a+b;
-            } else {
-                return U_SENTINEL;
-            }
-        } else {
-            // 'a' has a compositions list in extraData
-            list=extraData+norm16;
-            if(norm16>minYesNo) {  // composite 'a' has both mapping & compositions list
-                list+=  // mapping pointer
-                    1+  // +1 to skip the first unit with the mapping lenth
-                    (*list&MAPPING_LENGTH_MASK);  // + mapping length
-            }
-        }
-    } else if(norm16<minMaybeYes || MIN_NORMAL_MAYBE_YES<=norm16) {
-        return U_SENTINEL;
-    } else {
-        list=maybeYesCompositions+norm16-minMaybeYes;
-    }
-    if(b<0 || 0x10ffff<b) {  // combine(list, b) requires a valid code point b
-        return U_SENTINEL;
-    }
-#if U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC
-    return combine(list, b)>>1;
-#else
-    int32_t compositeAndFwd=combine(list, b);
-    return compositeAndFwd>=0 ? compositeAndFwd>>1 : U_SENTINEL;
-#endif
-}
-
-// Very similar to composeQuickCheck(): Make the same changes in both places if relevant.
-// doCompose: normalize
-// !doCompose: isNormalized (buffer must be empty and initialized)
-UBool
-Normalizer2Impl::compose(const UChar *src, const UChar *limit,
-                         UBool onlyContiguous,
-                         UBool doCompose,
-                         ReorderingBuffer &buffer,
-                         UErrorCode &errorCode) const {
-    /*
-     * prevBoundary points to the last character before the current one
-     * that has a composition boundary before it with ccc==0 and quick check "yes".
-     * Keeping track of prevBoundary saves us looking for a composition boundary
-     * when we find a "no" or "maybe".
-     *
-     * When we back out from prevSrc back to prevBoundary,
-     * then we also remove those same characters (which had been simply copied
-     * or canonically-order-inserted) from the ReorderingBuffer.
-     * Therefore, at all times, the [prevBoundary..prevSrc[ source units
-     * must correspond 1:1 to destination units at the end of the destination buffer.
-     */
-    const UChar *prevBoundary=src;
-    UChar32 minNoMaybeCP=minCompNoMaybeCP;
-    if(limit==NULL) {
-        src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP,
-                                           doCompose ? &buffer : NULL,
-                                           errorCode);
-        if(U_FAILURE(errorCode)) {
-            return FALSE;
-        }
-        if(prevBoundary<src) {
-            // Set prevBoundary to the last character in the prefix.
-            prevBoundary=src-1;
-        }
-        limit=u_strchr(src, 0);
-    }
-
-    const UChar *prevSrc;
-    UChar32 c=0;
-    uint16_t norm16=0;
-
-    // only for isNormalized
-    uint8_t prevCC=0;
-
-    for(;;) {
-        // count code units below the minimum or with irrelevant data for the quick check
-        for(prevSrc=src; src!=limit;) {
-            if( (c=*src)<minNoMaybeCP ||
-                isCompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
-            ) {
-                ++src;
-            } else if(!U16_IS_SURROGATE(c)) {
-                break;
-            } else {
-                UChar c2;
-                if(U16_IS_SURROGATE_LEAD(c)) {
-                    if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
-                        c=U16_GET_SUPPLEMENTARY(c, c2);
-                    }
-                } else /* trail surrogate */ {
-                    if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
-                        --src;
-                        c=U16_GET_SUPPLEMENTARY(c2, c);
-                    }
-                }
-                if(isCompYesAndZeroCC(norm16=getNorm16(c))) {
-                    src+=U16_LENGTH(c);
-                } else {
-                    break;
-                }
-            }
-        }
-        // copy these code units all at once
-        if(src!=prevSrc) {
-            if(doCompose) {
-                if(!buffer.appendZeroCC(prevSrc, src, errorCode)) {
-                    break;
-                }
-            } else {
-                prevCC=0;
-            }
-            if(src==limit) {
-                break;
-            }
-            // Set prevBoundary to the last character in the quick check loop.
-            prevBoundary=src-1;
-            if( U16_IS_TRAIL(*prevBoundary) && prevSrc<prevBoundary &&
-                U16_IS_LEAD(*(prevBoundary-1))
-            ) {
-                --prevBoundary;
-            }
-            // The start of the current character (c).
-            prevSrc=src;
-        } else if(src==limit) {
-            break;
-        }
-
-        src+=U16_LENGTH(c);
-        /*
-         * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
-         * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward)
-         * or has ccc!=0.
-         * Check for Jamo V/T, then for regular characters.
-         * c is not a Hangul syllable or Jamo L because those have "yes" properties.
-         */
-        if(isJamoVT(norm16) && prevBoundary!=prevSrc) {
-            UChar prev=*(prevSrc-1);
-            UBool needToDecompose=FALSE;
-            if(c<Hangul::JAMO_T_BASE) {
-                // c is a Jamo Vowel, compose with previous Jamo L and following Jamo T.
-                prev=(UChar)(prev-Hangul::JAMO_L_BASE);
-                if(prev<Hangul::JAMO_L_COUNT) {
-                    if(!doCompose) {
-                        return FALSE;
-                    }
-                    UChar syllable=(UChar)
-                        (Hangul::HANGUL_BASE+
-                         (prev*Hangul::JAMO_V_COUNT+(c-Hangul::JAMO_V_BASE))*
-                         Hangul::JAMO_T_COUNT);
-                    UChar t;
-                    if(src!=limit && (t=(UChar)(*src-Hangul::JAMO_T_BASE))<Hangul::JAMO_T_COUNT) {
-                        ++src;
-                        syllable+=t;  // The next character was a Jamo T.
-                        prevBoundary=src;
-                        buffer.setLastChar(syllable);
-                        continue;
-                    }
-                    // If we see L+V+x where x!=T then we drop to the slow path,
-                    // decompose and recompose.
-                    // This is to deal with NFKC finding normal L and V but a
-                    // compatibility variant of a T. We need to either fully compose that
-                    // combination here (which would complicate the code and may not work
-                    // with strange custom data) or use the slow path -- or else our replacing
-                    // two input characters (L+V) with one output character (LV syllable)
-                    // would violate the invariant that [prevBoundary..prevSrc[ has the same
-                    // length as what we appended to the buffer since prevBoundary.
-                    needToDecompose=TRUE;
-                }
-            } else if(Hangul::isHangulWithoutJamoT(prev)) {
-                // c is a Jamo Trailing consonant,
-                // compose with previous Hangul LV that does not contain a Jamo T.
-                if(!doCompose) {
-                    return FALSE;
-                }
-                buffer.setLastChar((UChar)(prev+c-Hangul::JAMO_T_BASE));
-                prevBoundary=src;
-                continue;
-            }
-            if(!needToDecompose) {
-                // The Jamo V/T did not compose into a Hangul syllable.
-                if(doCompose) {
-                    if(!buffer.appendBMP((UChar)c, 0, errorCode)) {
-                        break;
-                    }
-                } else {
-                    prevCC=0;
-                }
-                continue;
-            }
-        }
-        /*
-         * Source buffer pointers:
-         *
-         *  all done      quick check   current char  not yet
-         *                "yes" but     (c)           processed
-         *                may combine
-         *                forward
-         * [-------------[-------------[-------------[-------------[
-         * |             |             |             |             |
-         * orig. src     prevBoundary  prevSrc       src           limit
-         *
-         *
-         * Destination buffer pointers inside the ReorderingBuffer:
-         *
-         *  all done      might take    not filled yet
-         *                characters for
-         *                reordering
-         * [-------------[-------------[-------------[
-         * |             |             |             |
-         * start         reorderStart  limit         |
-         *                             +remainingCap.+
-         */
-        if(norm16>=MIN_YES_YES_WITH_CC) {
-            uint8_t cc=(uint8_t)norm16;  // cc!=0
-            if( onlyContiguous &&  // FCC
-                (doCompose ? buffer.getLastCC() : prevCC)==0 &&
-                prevBoundary<prevSrc &&
-                // buffer.getLastCC()==0 && prevBoundary<prevSrc tell us that
-                // [prevBoundary..prevSrc[ (which is exactly one character under these conditions)
-                // passed the quick check "yes && ccc==0" test.
-                // Check whether the last character was a "yesYes" or a "yesNo".
-                // If a "yesNo", then we get its trailing ccc from its
-                // mapping and check for canonical order.
-                // All other cases are ok.
-                getTrailCCFromCompYesAndZeroCC(prevBoundary, prevSrc)>cc
-            ) {
-                // Fails FCD test, need to decompose and contiguously recompose.
-                if(!doCompose) {
-                    return FALSE;
-                }
-            } else if(doCompose) {
-                if(!buffer.append(c, cc, errorCode)) {
-                    break;
-                }
-                continue;
-            } else if(prevCC<=cc) {
-                prevCC=cc;
-                continue;
-            } else {
-                return FALSE;
-            }
-        } else if(!doCompose && !isMaybeOrNonZeroCC(norm16)) {
-            return FALSE;
-        }
-
-        /*
-         * Find appropriate boundaries around this character,
-         * decompose the source text from between the boundaries,
-         * and recompose it.
-         *
-         * We may need to remove the last few characters from the ReorderingBuffer
-         * to account for source text that was copied or appended
-         * but needs to take part in the recomposition.
-         */
-
-        /*
-         * Find the last composition boundary in [prevBoundary..src[.
-         * It is either the decomposition of the current character (at prevSrc),
-         * or prevBoundary.
-         */
-        if(hasCompBoundaryBefore(c, norm16)) {
-            prevBoundary=prevSrc;
-        } else if(doCompose) {
-            buffer.removeSuffix((int32_t)(prevSrc-prevBoundary));
-        }
-
-        // Find the next composition boundary in [src..limit[ -
-        // modifies src to point to the next starter.
-        src=(UChar *)findNextCompBoundary(src, limit);
-
-        // Decompose [prevBoundary..src[ into the buffer and then recompose that part of it.
-        int32_t recomposeStartIndex=buffer.length();
-        if(!decomposeShort(prevBoundary, src, buffer, errorCode)) {
-            break;
-        }
-        recompose(buffer, recomposeStartIndex, onlyContiguous);
-        if(!doCompose) {
-            if(!buffer.equals(prevBoundary, src)) {
-                return FALSE;
-            }
-            buffer.remove();
-            prevCC=0;
-        }
-
-        // Move to the next starter. We never need to look back before this point again.
-        prevBoundary=src;
-    }
-    return TRUE;
-}
-
-// Very similar to compose(): Make the same changes in both places if relevant.
-// pQCResult==NULL: spanQuickCheckYes
-// pQCResult!=NULL: quickCheck (*pQCResult must be UNORM_YES)
-const UChar *
-Normalizer2Impl::composeQuickCheck(const UChar *src, const UChar *limit,
-                                   UBool onlyContiguous,
-                                   UNormalizationCheckResult *pQCResult) const {
-    /*
-     * prevBoundary points to the last character before the current one
-     * that has a composition boundary before it with ccc==0 and quick check "yes".
-     */
-    const UChar *prevBoundary=src;
-    UChar32 minNoMaybeCP=minCompNoMaybeCP;
-    if(limit==NULL) {
-        UErrorCode errorCode=U_ZERO_ERROR;
-        src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP, NULL, errorCode);
-        if(prevBoundary<src) {
-            // Set prevBoundary to the last character in the prefix.
-            prevBoundary=src-1;
-        }
-        limit=u_strchr(src, 0);
-    }
-
-    const UChar *prevSrc;
-    UChar32 c=0;
-    uint16_t norm16=0;
-    uint8_t prevCC=0;
-
-    for(;;) {
-        // count code units below the minimum or with irrelevant data for the quick check
-        for(prevSrc=src;;) {
-            if(src==limit) {
-                return src;
-            }
-            if( (c=*src)<minNoMaybeCP ||
-                isCompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
-            ) {
-                ++src;
-            } else if(!U16_IS_SURROGATE(c)) {
-                break;
-            } else {
-                UChar c2;
-                if(U16_IS_SURROGATE_LEAD(c)) {
-                    if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
-                        c=U16_GET_SUPPLEMENTARY(c, c2);
-                    }
-                } else /* trail surrogate */ {
-                    if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
-                        --src;
-                        c=U16_GET_SUPPLEMENTARY(c2, c);
-                    }
-                }
-                if(isCompYesAndZeroCC(norm16=getNorm16(c))) {
-                    src+=U16_LENGTH(c);
-                } else {
-                    break;
-                }
-            }
-        }
-        if(src!=prevSrc) {
-            // Set prevBoundary to the last character in the quick check loop.
-            prevBoundary=src-1;
-            if( U16_IS_TRAIL(*prevBoundary) && prevSrc<prevBoundary &&
-                U16_IS_LEAD(*(prevBoundary-1))
-            ) {
-                --prevBoundary;
-            }
-            prevCC=0;
-            // The start of the current character (c).
-            prevSrc=src;
-        }
-
-        src+=U16_LENGTH(c);
-        /*
-         * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
-         * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward)
-         * or has ccc!=0.
-         */
-        if(isMaybeOrNonZeroCC(norm16)) {
-            uint8_t cc=getCCFromYesOrMaybe(norm16);
-            if( onlyContiguous &&  // FCC
-                cc!=0 &&
-                prevCC==0 &&
-                prevBoundary<prevSrc &&
-                // prevCC==0 && prevBoundary<prevSrc tell us that
-                // [prevBoundary..prevSrc[ (which is exactly one character under these conditions)
-                // passed the quick check "yes && ccc==0" test.
-                // Check whether the last character was a "yesYes" or a "yesNo".
-                // If a "yesNo", then we get its trailing ccc from its
-                // mapping and check for canonical order.
-                // All other cases are ok.
-                getTrailCCFromCompYesAndZeroCC(prevBoundary, prevSrc)>cc
-            ) {
-                // Fails FCD test.
-            } else if(prevCC<=cc || cc==0) {
-                prevCC=cc;
-                if(norm16<MIN_YES_YES_WITH_CC) {
-                    if(pQCResult!=NULL) {
-                        *pQCResult=UNORM_MAYBE;
-                    } else {
-                        return prevBoundary;
-                    }
-                }
-                continue;
-            }
-        }
-        if(pQCResult!=NULL) {
-            *pQCResult=UNORM_NO;
-        }
-        return prevBoundary;
-    }
-}
-
-void Normalizer2Impl::composeAndAppend(const UChar *src, const UChar *limit,
-                                       UBool doCompose,
-                                       UBool onlyContiguous,
-                                       UnicodeString &safeMiddle,
-                                       ReorderingBuffer &buffer,
-                                       UErrorCode &errorCode) const {
-    if(!buffer.isEmpty()) {
-        const UChar *firstStarterInSrc=findNextCompBoundary(src, limit);
-        if(src!=firstStarterInSrc) {
-            const UChar *lastStarterInDest=findPreviousCompBoundary(buffer.getStart(),
-                                                                    buffer.getLimit());
-            int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastStarterInDest);
-            UnicodeString middle(lastStarterInDest, destSuffixLength);
-            buffer.removeSuffix(destSuffixLength);
-            safeMiddle=middle;
-            middle.append(src, (int32_t)(firstStarterInSrc-src));
-            const UChar *middleStart=middle.getBuffer();
-            compose(middleStart, middleStart+middle.length(), onlyContiguous,
-                    TRUE, buffer, errorCode);
-            if(U_FAILURE(errorCode)) {
-                return;
-            }
-            src=firstStarterInSrc;
-        }
-    }
-    if(doCompose) {
-        compose(src, limit, onlyContiguous, TRUE, buffer, errorCode);
-    } else {
-        if(limit==NULL) {  // appendZeroCC() needs limit!=NULL
-            limit=u_strchr(src, 0);
-        }
-        buffer.appendZeroCC(src, limit, errorCode);
-    }
-}
-
-/**
- * Does c have a composition boundary before it?
- * True if its decomposition begins with a character that has
- * ccc=0 && NFC_QC=Yes (isCompYesAndZeroCC()).
- * As a shortcut, this is true if c itself has ccc=0 && NFC_QC=Yes
- * (isCompYesAndZeroCC()) so we need not decompose.
- */
-UBool Normalizer2Impl::hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const {
-    for(;;) {
-        if(isCompYesAndZeroCC(norm16)) {
-            return TRUE;
-        } else if(isMaybeOrNonZeroCC(norm16)) {
-            return FALSE;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-            norm16=getNorm16(c);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            if((firstUnit&MAPPING_LENGTH_MASK)==0) {
-                return FALSE;
-            }
-            if((firstUnit&MAPPING_HAS_CCC_LCCC_WORD) && (*(mapping-1)&0xff00)) {
-                return FALSE;  // non-zero leadCC
-            }
-            int32_t i=1;  // skip over the firstUnit
-            UChar32 c;
-            U16_NEXT_UNSAFE(mapping, i, c);
-            return isCompYesAndZeroCC(getNorm16(c));
-        }
-    }
-}
-
-UBool Normalizer2Impl::hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const {
-    for(;;) {
-        uint16_t norm16=getNorm16(c);
-        if(isInert(norm16)) {
-            return TRUE;
-        } else if(norm16<=minYesNo) {
-            // Hangul: norm16==minYesNo
-            // Hangul LVT has a boundary after it.
-            // Hangul LV and non-inert yesYes characters combine forward.
-            return isHangul(norm16) && !Hangul::isHangulWithoutJamoT((UChar)c);
-        } else if(norm16>= (testInert ? minNoNo : minMaybeYes)) {
-            return FALSE;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-        } else {
-            // c decomposes, get everything from the variable-length extra data.
-            // If testInert, then c must be a yesNo character which has lccc=0,
-            // otherwise it could be a noNo.
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            // TRUE if
-            //   not MAPPING_NO_COMP_BOUNDARY_AFTER
-            //     (which is set if
-            //       c is not deleted, and
-            //       it and its decomposition do not combine forward, and it has a starter)
-            //   and if FCC then trailCC<=1
-            return
-                (firstUnit&MAPPING_NO_COMP_BOUNDARY_AFTER)==0 &&
-                (!onlyContiguous || firstUnit<=0x1ff);
-        }
-    }
-}
-
-const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p) const {
-    BackwardUTrie2StringIterator iter(normTrie, start, p);
-    uint16_t norm16;
-    do {
-        norm16=iter.previous16();
-    } while(!hasCompBoundaryBefore(iter.codePoint, norm16));
-    // We could also test hasCompBoundaryAfter() and return iter.codePointLimit,
-    // but that's probably not worth the extra cost.
-    return iter.codePointStart;
-}
-
-const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit) const {
-    ForwardUTrie2StringIterator iter(normTrie, p, limit);
-    uint16_t norm16;
-    do {
-        norm16=iter.next16();
-    } while(!hasCompBoundaryBefore(iter.codePoint, norm16));
-    return iter.codePointStart;
-}
-
-// Note: normalizer2impl.cpp r30982 (2011-nov-27)
-// still had getFCDTrie() which built and cached an FCD trie.
-// That provided faster access to FCD data than getFCD16FromNormData()
-// but required synchronization and consumed some 10kB of heap memory
-// in any process that uses FCD (e.g., via collation).
-// tccc180[] and smallFCD[] are intended to help with any loss of performance,
-// at least for Latin & CJK.
-
-// Gets the FCD value from the regular normalization data.
-uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
-    // Only loops for 1:1 algorithmic mappings.
-    for(;;) {
-        uint16_t norm16=getNorm16(c);
-        if(norm16<=minYesNo) {
-            // no decomposition or Hangul syllable, all zeros
-            return 0;
-        } else if(norm16>=MIN_NORMAL_MAYBE_YES) {
-            // combining mark
-            norm16&=0xff;
-            return norm16|(norm16<<8);
-        } else if(norm16>=minMaybeYes) {
-            return 0;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            if((firstUnit&MAPPING_LENGTH_MASK)==0) {
-                // A character that is deleted (maps to an empty string) must
-                // get the worst-case lccc and tccc values because arbitrary
-                // characters on both sides will become adjacent.
-                return 0x1ff;
-            } else {
-                norm16=firstUnit>>8;  // tccc
-                if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
-                    norm16|=*(mapping-1)&0xff00;  // lccc
-                }
-                return norm16;
-            }
-        }
-    }
-}
-
-// Dual functionality:
-// buffer!=NULL: normalize
-// buffer==NULL: isNormalized/quickCheck/spanQuickCheckYes
-const UChar *
-Normalizer2Impl::makeFCD(const UChar *src, const UChar *limit,
-                         ReorderingBuffer *buffer,
-                         UErrorCode &errorCode) const {
-    // Tracks the last FCD-safe boundary, before lccc=0 or after properly-ordered tccc<=1.
-    // Similar to the prevBoundary in the compose() implementation.
-    const UChar *prevBoundary=src;
-    int32_t prevFCD16=0;
-    if(limit==NULL) {
-        src=copyLowPrefixFromNulTerminated(src, MIN_CCC_LCCC_CP, buffer, errorCode);
-        if(U_FAILURE(errorCode)) {
-            return src;
-        }
-        if(prevBoundary<src) {
-            prevBoundary=src;
-            // We know that the previous character's lccc==0.
-            // Fetching the fcd16 value was deferred for this below-U+0300 code point.
-            prevFCD16=getFCD16(*(src-1));
-            if(prevFCD16>1) {
-                --prevBoundary;
-            }
-        }
-        limit=u_strchr(src, 0);
-    }
-
-    // Note: In this function we use buffer->appendZeroCC() because we track
-    // the lead and trail combining classes here, rather than leaving it to
-    // the ReorderingBuffer.
-    // The exception is the call to decomposeShort() which uses the buffer
-    // in the normal way.
-
-    const UChar *prevSrc;
-    UChar32 c=0;
-    uint16_t fcd16=0;
-
-    for(;;) {
-        // count code units with lccc==0
-        for(prevSrc=src; src!=limit;) {
-            if((c=*src)<MIN_CCC_LCCC_CP) {
-                prevFCD16=~c;
-                ++src;
-            } else if(!singleLeadMightHaveNonZeroFCD16(c)) {
-                prevFCD16=0;
-                ++src;
-            } else {
-                if(U16_IS_SURROGATE(c)) {
-                    UChar c2;
-                    if(U16_IS_SURROGATE_LEAD(c)) {
-                        if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
-                            c=U16_GET_SUPPLEMENTARY(c, c2);
-                        }
-                    } else /* trail surrogate */ {
-                        if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
-                            --src;
-                            c=U16_GET_SUPPLEMENTARY(c2, c);
-                        }
-                    }
-                }
-                if((fcd16=getFCD16FromNormData(c))<=0xff) {
-                    prevFCD16=fcd16;
-                    src+=U16_LENGTH(c);
-                } else {
-                    break;
-                }
-            }
-        }
-        // copy these code units all at once
-        if(src!=prevSrc) {
-            if(buffer!=NULL && !buffer->appendZeroCC(prevSrc, src, errorCode)) {
-                break;
-            }
-            if(src==limit) {
-                break;
-            }
-            prevBoundary=src;
-            // We know that the previous character's lccc==0.
-            if(prevFCD16<0) {
-                // Fetching the fcd16 value was deferred for this below-U+0300 code point.
-                UChar32 prev=~prevFCD16;
-                prevFCD16= prev<0x180 ? tccc180[prev] : getFCD16FromNormData(prev);
-                if(prevFCD16>1) {
-                    --prevBoundary;
-                }
-            } else {
-                const UChar *p=src-1;
-                if(U16_IS_TRAIL(*p) && prevSrc<p && U16_IS_LEAD(*(p-1))) {
-                    --p;
-                    // Need to fetch the previous character's FCD value because
-                    // prevFCD16 was just for the trail surrogate code point.
-                    prevFCD16=getFCD16FromNormData(U16_GET_SUPPLEMENTARY(p[0], p[1]));
-                    // Still known to have lccc==0 because its lead surrogate unit had lccc==0.
-                }
-                if(prevFCD16>1) {
-                    prevBoundary=p;
-                }
-            }
-            // The start of the current character (c).
-            prevSrc=src;
-        } else if(src==limit) {
-            break;
-        }
-
-        src+=U16_LENGTH(c);
-        // The current character (c) at [prevSrc..src[ has a non-zero lead combining class.
-        // Check for proper order, and decompose locally if necessary.
-        if((prevFCD16&0xff)<=(fcd16>>8)) {
-            // proper order: prev tccc <= current lccc
-            if((fcd16&0xff)<=1) {
-                prevBoundary=src;
-            }
-            if(buffer!=NULL && !buffer->appendZeroCC(c, errorCode)) {
-                break;
-            }
-            prevFCD16=fcd16;
-            continue;
-        } else if(buffer==NULL) {
-            return prevBoundary;  // quick check "no"
-        } else {
-            /*
-             * Back out the part of the source that we copied or appended
-             * already but is now going to be decomposed.
-             * prevSrc is set to after what was copied/appended.
-             */
-            buffer->removeSuffix((int32_t)(prevSrc-prevBoundary));
-            /*
-             * Find the part of the source that needs to be decomposed,
-             * up to the next safe boundary.
-             */
-            src=findNextFCDBoundary(src, limit);
-            /*
-             * The source text does not fulfill the conditions for FCD.
-             * Decompose and reorder a limited piece of the text.
-             */
-            if(!decomposeShort(prevBoundary, src, *buffer, errorCode)) {
-                break;
-            }
-            prevBoundary=src;
-            prevFCD16=0;
-        }
-    }
-    return src;
-}
-
-void Normalizer2Impl::makeFCDAndAppend(const UChar *src, const UChar *limit,
-                                       UBool doMakeFCD,
-                                       UnicodeString &safeMiddle,
-                                       ReorderingBuffer &buffer,
-                                       UErrorCode &errorCode) const {
-    if(!buffer.isEmpty()) {
-        const UChar *firstBoundaryInSrc=findNextFCDBoundary(src, limit);
-        if(src!=firstBoundaryInSrc) {
-            const UChar *lastBoundaryInDest=findPreviousFCDBoundary(buffer.getStart(),
-                                                                    buffer.getLimit());
-            int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastBoundaryInDest);
-            UnicodeString middle(lastBoundaryInDest, destSuffixLength);
-            buffer.removeSuffix(destSuffixLength);
-            safeMiddle=middle;
-            middle.append(src, (int32_t)(firstBoundaryInSrc-src));
-            const UChar *middleStart=middle.getBuffer();
-            makeFCD(middleStart, middleStart+middle.length(), &buffer, errorCode);
-            if(U_FAILURE(errorCode)) {
-                return;
-            }
-            src=firstBoundaryInSrc;
-        }
-    }
-    if(doMakeFCD) {
-        makeFCD(src, limit, &buffer, errorCode);
-    } else {
-        if(limit==NULL) {  // appendZeroCC() needs limit!=NULL
-            limit=u_strchr(src, 0);
-        }
-        buffer.appendZeroCC(src, limit, errorCode);
-    }
-}
-
-const UChar *Normalizer2Impl::findPreviousFCDBoundary(const UChar *start, const UChar *p) const {
-    while(start<p && previousFCD16(start, p)>0xff) {}
-    return p;
-}
-
-const UChar *Normalizer2Impl::findNextFCDBoundary(const UChar *p, const UChar *limit) const {
-    while(p<limit) {
-        const UChar *codePointStart=p;
-        if(nextFCD16(p, limit)<=0xff) {
-            return codePointStart;
-        }
-    }
-    return p;
-}
-
-// CanonicalIterator data -------------------------------------------------- ***
-
-CanonIterData::CanonIterData(UErrorCode &errorCode) :
-        trie(utrie2_open(0, 0, &errorCode)),
-        canonStartSets(uprv_deleteUObject, NULL, errorCode) {}
-
-CanonIterData::~CanonIterData() {
-    utrie2_close(trie);
-}
-
-void CanonIterData::addToStartSet(UChar32 origin, UChar32 decompLead, UErrorCode &errorCode) {
-    uint32_t canonValue=utrie2_get32(trie, decompLead);
-    if((canonValue&(CANON_HAS_SET|CANON_VALUE_MASK))==0 && origin!=0) {
-        // origin is the first character whose decomposition starts with
-        // the character for which we are setting the value.
-        utrie2_set32(trie, decompLead, canonValue|origin, &errorCode);
-    } else {
-        // origin is not the first character, or it is U+0000.
-        UnicodeSet *set;
-        if((canonValue&CANON_HAS_SET)==0) {
-            set=new UnicodeSet;
-            if(set==NULL) {
-                errorCode=U_MEMORY_ALLOCATION_ERROR;
-                return;
-            }
-            UChar32 firstOrigin=(UChar32)(canonValue&CANON_VALUE_MASK);
-            canonValue=(canonValue&~CANON_VALUE_MASK)|CANON_HAS_SET|(uint32_t)canonStartSets.size();
-            utrie2_set32(trie, decompLead, canonValue, &errorCode);
-            canonStartSets.addElement(set, errorCode);
-            if(firstOrigin!=0) {
-                set->add(firstOrigin);
-            }
-        } else {
-            set=(UnicodeSet *)canonStartSets[(int32_t)(canonValue&CANON_VALUE_MASK)];
-        }
-        set->add(origin);
-    }
-}
-
-class CanonIterDataSingleton {
-public:
-    CanonIterDataSingleton(SimpleSingleton &s, Normalizer2Impl &ni, UErrorCode &ec) :
-        singleton(s), impl(ni), errorCode(ec) {}
-    CanonIterData *getInstance(UErrorCode &errorCode) {
-        void *duplicate;
-        CanonIterData *instance=
-            (CanonIterData *)singleton.getInstance(createInstance, this, duplicate, errorCode);
-        delete (CanonIterData *)duplicate;
-        return instance;
-    }
-    static void *createInstance(const void *context, UErrorCode &errorCode);
-    UBool rangeHandler(UChar32 start, UChar32 end, uint32_t value) {
-        if(value!=0) {
-            impl.makeCanonIterDataFromNorm16(start, end, (uint16_t)value, *newData, errorCode);
-        }
-        return U_SUCCESS(errorCode);
-    }
-
-private:
-    SimpleSingleton &singleton;
-    Normalizer2Impl &impl;
-    CanonIterData *newData;
-    UErrorCode &errorCode;
-};
-
-U_CDECL_BEGIN
-
-// Call Normalizer2Impl::makeCanonIterDataFromNorm16() for a range of same-norm16 characters.
-static UBool U_CALLCONV
-enumCIDRangeHandler(const void *context, UChar32 start, UChar32 end, uint32_t value) {
-    return ((CanonIterDataSingleton *)context)->rangeHandler(start, end, value);
-}
-
-U_CDECL_END
-
-void *CanonIterDataSingleton::createInstance(const void *context, UErrorCode &errorCode) {
-    CanonIterDataSingleton *me=(CanonIterDataSingleton *)context;
-    me->newData=new CanonIterData(errorCode);
-    if(me->newData==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    if(U_SUCCESS(errorCode)) {
-        utrie2_enum(me->impl.getNormTrie(), NULL, enumCIDRangeHandler, me);
-        utrie2_freeze(me->newData->trie, UTRIE2_32_VALUE_BITS, &errorCode);
-        if(U_SUCCESS(errorCode)) {
-            return me->newData;
-        }
-    }
-    delete me->newData;
-    return NULL;
-}
-
-void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16,
-                                                  CanonIterData &newData,
-                                                  UErrorCode &errorCode) const {
-    if(norm16==0 || (minYesNo<=norm16 && norm16<minNoNo)) {
-        // Inert, or 2-way mapping (including Hangul syllable).
-        // We do not write a canonStartSet for any yesNo character.
-        // Composites from 2-way mappings are added at runtime from the
-        // starter's compositions list, and the other characters in
-        // 2-way mappings get CANON_NOT_SEGMENT_STARTER set because they are
-        // "maybe" characters.
-        return;
-    }
-    for(UChar32 c=start; c<=end; ++c) {
-        uint32_t oldValue=utrie2_get32(newData.trie, c);
-        uint32_t newValue=oldValue;
-        if(norm16>=minMaybeYes) {
-            // not a segment starter if it occurs in a decomposition or has cc!=0
-            newValue|=CANON_NOT_SEGMENT_STARTER;
-            if(norm16<MIN_NORMAL_MAYBE_YES) {
-                newValue|=CANON_HAS_COMPOSITIONS;
-            }
-        } else if(norm16<minYesNo) {
-            newValue|=CANON_HAS_COMPOSITIONS;
-        } else {
-            // c has a one-way decomposition
-            UChar32 c2=c;
-            uint16_t norm16_2=norm16;
-            while(limitNoNo<=norm16_2 && norm16_2<minMaybeYes) {
-                c2=mapAlgorithmic(c2, norm16_2);
-                norm16_2=getNorm16(c2);
-            }
-            if(minYesNo<=norm16_2 && norm16_2<limitNoNo) {
-                // c decomposes, get everything from the variable-length extra data
-                const uint16_t *mapping=getMapping(norm16_2);
-                uint16_t firstUnit=*mapping;
-                int32_t length=firstUnit&MAPPING_LENGTH_MASK;
-                if((firstUnit&MAPPING_HAS_CCC_LCCC_WORD)!=0) {
-                    if(c==c2 && (*(mapping-1)&0xff)!=0) {
-                        newValue|=CANON_NOT_SEGMENT_STARTER;  // original c has cc!=0
-                    }
-                }
-                // Skip empty mappings (no characters in the decomposition).
-                if(length!=0) {
-                    ++mapping;  // skip over the firstUnit
-                    // add c to first code point's start set
-                    int32_t i=0;
-                    U16_NEXT_UNSAFE(mapping, i, c2);
-                    newData.addToStartSet(c, c2, errorCode);
-                    // Set CANON_NOT_SEGMENT_STARTER for each remaining code point of a
-                    // one-way mapping. A 2-way mapping is possible here after
-                    // intermediate algorithmic mapping.
-                    if(norm16_2>=minNoNo) {
-                        while(i<length) {
-                            U16_NEXT_UNSAFE(mapping, i, c2);
-                            uint32_t c2Value=utrie2_get32(newData.trie, c2);
-                            if((c2Value&CANON_NOT_SEGMENT_STARTER)==0) {
-                                utrie2_set32(newData.trie, c2, c2Value|CANON_NOT_SEGMENT_STARTER,
-                                             &errorCode);
-                            }
-                        }
-                    }
-                }
-            } else {
-                // c decomposed to c2 algorithmically; c has cc==0
-                newData.addToStartSet(c, c2, errorCode);
-            }
-        }
-        if(newValue!=oldValue) {
-            utrie2_set32(newData.trie, c, newValue, &errorCode);
-        }
-    }
-}
-
-UBool Normalizer2Impl::ensureCanonIterData(UErrorCode &errorCode) const {
-    // Logically const: Synchronized instantiation.
-    Normalizer2Impl *me=const_cast<Normalizer2Impl *>(this);
-    CanonIterDataSingleton(me->canonIterDataSingleton, *me, errorCode).getInstance(errorCode);
-    return U_SUCCESS(errorCode);
-}
-
-int32_t Normalizer2Impl::getCanonValue(UChar32 c) const {
-    return (int32_t)utrie2_get32(((CanonIterData *)canonIterDataSingleton.fInstance)->trie, c);
-}
-
-const UnicodeSet &Normalizer2Impl::getCanonStartSet(int32_t n) const {
-    return *(const UnicodeSet *)(
-        ((CanonIterData *)canonIterDataSingleton.fInstance)->canonStartSets[n]);
-}
-
-UBool Normalizer2Impl::isCanonSegmentStarter(UChar32 c) const {
-    return getCanonValue(c)>=0;
-}
-
-UBool Normalizer2Impl::getCanonStartSet(UChar32 c, UnicodeSet &set) const {
-    int32_t canonValue=getCanonValue(c)&~CANON_NOT_SEGMENT_STARTER;
-    if(canonValue==0) {
-        return FALSE;
-    }
-    set.clear();
-    int32_t value=canonValue&CANON_VALUE_MASK;
-    if((canonValue&CANON_HAS_SET)!=0) {
-        set.addAll(getCanonStartSet(value));
-    } else if(value!=0) {
-        set.add(value);
-    }
-    if((canonValue&CANON_HAS_COMPOSITIONS)!=0) {
-        uint16_t norm16=getNorm16(c);
-        if(norm16==JAMO_L) {
-            UChar32 syllable=
-                (UChar32)(Hangul::HANGUL_BASE+(c-Hangul::JAMO_L_BASE)*Hangul::JAMO_VT_COUNT);
-            set.add(syllable, syllable+Hangul::JAMO_VT_COUNT-1);
-        } else {
-            addComposites(getCompositionsList(norm16), set);
-        }
-    }
-    return TRUE;
-}
-
-U_NAMESPACE_END
-
-// Normalizer2 data swapping ----------------------------------------------- ***
-
-U_NAMESPACE_USE
-
-U_CAPI int32_t U_EXPORT2
-unorm2_swap(const UDataSwapper *ds,
-            const void *inData, int32_t length, void *outData,
-            UErrorCode *pErrorCode) {
-    const UDataInfo *pInfo;
-    int32_t headerSize;
-
-    const uint8_t *inBytes;
-    uint8_t *outBytes;
-
-    const int32_t *inIndexes;
-    int32_t indexes[Normalizer2Impl::IX_MIN_MAYBE_YES+1];
-
-    int32_t i, offset, nextOffset, size;
-
-    /* udata_swapDataHeader checks the arguments */
-    headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode);
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    /* check data format and format version */
-    pInfo=(const UDataInfo *)((const char *)inData+4);
-    if(!(
-        pInfo->dataFormat[0]==0x4e &&   /* dataFormat="Nrm2" */
-        pInfo->dataFormat[1]==0x72 &&
-        pInfo->dataFormat[2]==0x6d &&
-        pInfo->dataFormat[3]==0x32 &&
-        (pInfo->formatVersion[0]==1 || pInfo->formatVersion[0]==2)
-    )) {
-        udata_printError(ds, "unorm2_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as Normalizer2 data\n",
-                         pInfo->dataFormat[0], pInfo->dataFormat[1],
-                         pInfo->dataFormat[2], pInfo->dataFormat[3],
-                         pInfo->formatVersion[0]);
-        *pErrorCode=U_UNSUPPORTED_ERROR;
-        return 0;
-    }
-
-    inBytes=(const uint8_t *)inData+headerSize;
-    outBytes=(uint8_t *)outData+headerSize;
-
-    inIndexes=(const int32_t *)inBytes;
-
-    if(length>=0) {
-        length-=headerSize;
-        if(length<(int32_t)sizeof(indexes)) {
-            udata_printError(ds, "unorm2_swap(): too few bytes (%d after header) for Normalizer2 data\n",
-                             length);
-            *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-    }
-
-    /* read the first few indexes */
-    for(i=0; i<=Normalizer2Impl::IX_MIN_MAYBE_YES; ++i) {
-        indexes[i]=udata_readInt32(ds, inIndexes[i]);
-    }
-
-    /* get the total length of the data */
-    size=indexes[Normalizer2Impl::IX_TOTAL_SIZE];
-
-    if(length>=0) {
-        if(length<size) {
-            udata_printError(ds, "unorm2_swap(): too few bytes (%d after header) for all of Normalizer2 data\n",
-                             length);
-            *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            return 0;
-        }
-
-        /* copy the data for inaccessible bytes */
-        if(inBytes!=outBytes) {
-            uprv_memcpy(outBytes, inBytes, size);
-        }
-
-        offset=0;
-
-        /* swap the int32_t indexes[] */
-        nextOffset=indexes[Normalizer2Impl::IX_NORM_TRIE_OFFSET];
-        ds->swapArray32(ds, inBytes, nextOffset-offset, outBytes, pErrorCode);
-        offset=nextOffset;
-
-        /* swap the UTrie2 */
-        nextOffset=indexes[Normalizer2Impl::IX_EXTRA_DATA_OFFSET];
-        utrie2_swap(ds, inBytes+offset, nextOffset-offset, outBytes+offset, pErrorCode);
-        offset=nextOffset;
-
-        /* swap the uint16_t extraData[] */
-        nextOffset=indexes[Normalizer2Impl::IX_SMALL_FCD_OFFSET];
-        ds->swapArray16(ds, inBytes+offset, nextOffset-offset, outBytes+offset, pErrorCode);
-        offset=nextOffset;
-
-        /* no need to swap the uint8_t smallFCD[] (new in formatVersion 2) */
-        nextOffset=indexes[Normalizer2Impl::IX_SMALL_FCD_OFFSET+1];
-        offset=nextOffset;
-
-        U_ASSERT(offset==size);
-    }
-
-    return headerSize+size;
-}
-
-#endif  // !UCONFIG_NO_NORMALIZATION
diff --git a/src/third_party/mozjs/intl/icu/source/common/normalizer2impl.h b/src/third_party/mozjs/intl/icu/source/common/normalizer2impl.h
deleted file mode 100644
index f44e827..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/normalizer2impl.h
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  normalizer2impl.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009nov22
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __NORMALIZER2IMPL_H__
-#define __NORMALIZER2IMPL_H__
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/normalizer2.h"
-#include "unicode/udata.h"
-#include "unicode/unistr.h"
-#include "unicode/unorm.h"
-#include "unicode/utf16.h"
-#include "mutex.h"
-#include "uset_imp.h"
-#include "utrie2.h"
-
-U_NAMESPACE_BEGIN
-
-struct CanonIterData;
-
-class Hangul {
-public:
-    /* Korean Hangul and Jamo constants */
-    enum {
-        JAMO_L_BASE=0x1100,     /* "lead" jamo */
-        JAMO_V_BASE=0x1161,     /* "vowel" jamo */
-        JAMO_T_BASE=0x11a7,     /* "trail" jamo */
-
-        HANGUL_BASE=0xac00,
-
-        JAMO_L_COUNT=19,
-        JAMO_V_COUNT=21,
-        JAMO_T_COUNT=28,
-
-        JAMO_VT_COUNT=JAMO_V_COUNT*JAMO_T_COUNT,
-
-        HANGUL_COUNT=JAMO_L_COUNT*JAMO_V_COUNT*JAMO_T_COUNT,
-        HANGUL_LIMIT=HANGUL_BASE+HANGUL_COUNT
-    };
-
-    static inline UBool isHangul(UChar32 c) {
-        return HANGUL_BASE<=c && c<HANGUL_LIMIT;
-    }
-    static inline UBool
-    isHangulWithoutJamoT(UChar c) {
-        c-=HANGUL_BASE;
-        return c<HANGUL_COUNT && c%JAMO_T_COUNT==0;
-    }
-    static inline UBool isJamoL(UChar32 c) {
-        return (uint32_t)(c-JAMO_L_BASE)<JAMO_L_COUNT;
-    }
-    static inline UBool isJamoV(UChar32 c) {
-        return (uint32_t)(c-JAMO_V_BASE)<JAMO_V_COUNT;
-    }
-
-    /**
-     * Decomposes c, which must be a Hangul syllable, into buffer
-     * and returns the length of the decomposition (2 or 3).
-     */
-    static inline int32_t decompose(UChar32 c, UChar buffer[3]) {
-        c-=HANGUL_BASE;
-        UChar32 c2=c%JAMO_T_COUNT;
-        c/=JAMO_T_COUNT;
-        buffer[0]=(UChar)(JAMO_L_BASE+c/JAMO_V_COUNT);
-        buffer[1]=(UChar)(JAMO_V_BASE+c%JAMO_V_COUNT);
-        if(c2==0) {
-            return 2;
-        } else {
-            buffer[2]=(UChar)(JAMO_T_BASE+c2);
-            return 3;
-        }
-    }
-
-    /**
-     * Decomposes c, which must be a Hangul syllable, into buffer.
-     * This is the raw, not recursive, decomposition. Its length is always 2.
-     */
-    static inline void getRawDecomposition(UChar32 c, UChar buffer[2]) {
-        UChar32 orig=c;
-        c-=HANGUL_BASE;
-        UChar32 c2=c%JAMO_T_COUNT;
-        if(c2==0) {
-            c/=JAMO_T_COUNT;
-            buffer[0]=(UChar)(JAMO_L_BASE+c/JAMO_V_COUNT);
-            buffer[1]=(UChar)(JAMO_V_BASE+c%JAMO_V_COUNT);
-        } else {
-            buffer[0]=orig-c2;  // LV syllable
-            buffer[1]=(UChar)(JAMO_T_BASE+c2);
-        }
-    }
-private:
-    Hangul();  // no instantiation
-};
-
-class Normalizer2Impl;
-
-class ReorderingBuffer : public UMemory {
-public:
-    ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest) :
-        impl(ni), str(dest),
-        start(NULL), reorderStart(NULL), limit(NULL),
-        remainingCapacity(0), lastCC(0) {}
-    ~ReorderingBuffer() {
-        if(start!=NULL) {
-            str.releaseBuffer((int32_t)(limit-start));
-        }
-    }
-    UBool init(int32_t destCapacity, UErrorCode &errorCode);
-
-    UBool isEmpty() const { return start==limit; }
-    int32_t length() const { return (int32_t)(limit-start); }
-    UChar *getStart() { return start; }
-    UChar *getLimit() { return limit; }
-    uint8_t getLastCC() const { return lastCC; }
-
-    UBool equals(const UChar *start, const UChar *limit) const;
-
-    // For Hangul composition, replacing the Leading consonant Jamo with the syllable.
-    void setLastChar(UChar c) {
-        *(limit-1)=c;
-    }
-
-    UBool append(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
-        return (c<=0xffff) ?
-            appendBMP((UChar)c, cc, errorCode) :
-            appendSupplementary(c, cc, errorCode);
-    }
-    // s must be in NFD, otherwise change the implementation.
-    UBool append(const UChar *s, int32_t length,
-                 uint8_t leadCC, uint8_t trailCC,
-                 UErrorCode &errorCode);
-    UBool appendBMP(UChar c, uint8_t cc, UErrorCode &errorCode) {
-        if(remainingCapacity==0 && !resize(1, errorCode)) {
-            return FALSE;
-        }
-        if(lastCC<=cc || cc==0) {
-            *limit++=c;
-            lastCC=cc;
-            if(cc<=1) {
-                reorderStart=limit;
-            }
-        } else {
-            insert(c, cc);
-        }
-        --remainingCapacity;
-        return TRUE;
-    }
-    UBool appendZeroCC(UChar32 c, UErrorCode &errorCode);
-    UBool appendZeroCC(const UChar *s, const UChar *sLimit, UErrorCode &errorCode);
-    void remove();
-    void removeSuffix(int32_t suffixLength);
-    void setReorderingLimit(UChar *newLimit) {
-        remainingCapacity+=(int32_t)(limit-newLimit);
-        reorderStart=limit=newLimit;
-        lastCC=0;
-    }
-    void copyReorderableSuffixTo(UnicodeString &s) const {
-        s.setTo(reorderStart, (int32_t)(limit-reorderStart));
-    }
-private:
-    /*
-     * TODO: Revisit whether it makes sense to track reorderStart.
-     * It is set to after the last known character with cc<=1,
-     * which stops previousCC() before it reads that character and looks up its cc.
-     * previousCC() is normally only called from insert().
-     * In other words, reorderStart speeds up the insertion of a combining mark
-     * into a multi-combining mark sequence where it does not belong at the end.
-     * This might not be worth the trouble.
-     * On the other hand, it's not a huge amount of trouble.
-     *
-     * We probably need it for UNORM_SIMPLE_APPEND.
-     */
-
-    UBool appendSupplementary(UChar32 c, uint8_t cc, UErrorCode &errorCode);
-    void insert(UChar32 c, uint8_t cc);
-    static void writeCodePoint(UChar *p, UChar32 c) {
-        if(c<=0xffff) {
-            *p=(UChar)c;
-        } else {
-            p[0]=U16_LEAD(c);
-            p[1]=U16_TRAIL(c);
-        }
-    }
-    UBool resize(int32_t appendLength, UErrorCode &errorCode);
-
-    const Normalizer2Impl &impl;
-    UnicodeString &str;
-    UChar *start, *reorderStart, *limit;
-    int32_t remainingCapacity;
-    uint8_t lastCC;
-
-    // private backward iterator
-    void setIterator() { codePointStart=limit; }
-    void skipPrevious();  // Requires start<codePointStart.
-    uint8_t previousCC();  // Returns 0 if there is no previous character.
-
-    UChar *codePointStart, *codePointLimit;
-};
-
-class U_COMMON_API Normalizer2Impl : public UMemory {
-public:
-    Normalizer2Impl() : memory(NULL), normTrie(NULL) {
-        canonIterDataSingleton.fInstance=NULL;
-    }
-    ~Normalizer2Impl();
-
-    void load(const char *packageName, const char *name, UErrorCode &errorCode);
-
-    void addPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const;
-    void addCanonIterPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const;
-
-    // low-level properties ------------------------------------------------ ***
-
-    const UTrie2 *getNormTrie() const { return normTrie; }
-
-    UBool ensureCanonIterData(UErrorCode &errorCode) const;
-
-    uint16_t getNorm16(UChar32 c) const { return UTRIE2_GET16(normTrie, c); }
-
-    UNormalizationCheckResult getCompQuickCheck(uint16_t norm16) const {
-        if(norm16<minNoNo || MIN_YES_YES_WITH_CC<=norm16) {
-            return UNORM_YES;
-        } else if(minMaybeYes<=norm16) {
-            return UNORM_MAYBE;
-        } else {
-            return UNORM_NO;
-        }
-    }
-    UBool isCompNo(uint16_t norm16) const { return minNoNo<=norm16 && norm16<minMaybeYes; }
-    UBool isDecompYes(uint16_t norm16) const { return norm16<minYesNo || minMaybeYes<=norm16; }
-
-    uint8_t getCC(uint16_t norm16) const {
-        if(norm16>=MIN_NORMAL_MAYBE_YES) {
-            return (uint8_t)norm16;
-        }
-        if(norm16<minNoNo || limitNoNo<=norm16) {
-            return 0;
-        }
-        return getCCFromNoNo(norm16);
-    }
-    static uint8_t getCCFromYesOrMaybe(uint16_t norm16) {
-        return norm16>=MIN_NORMAL_MAYBE_YES ? (uint8_t)norm16 : 0;
-    }
-
-    /**
-     * Returns the FCD data for code point c.
-     * @param c A Unicode code point.
-     * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
-     */
-    uint16_t getFCD16(UChar32 c) const {
-        if(c<0) {
-            return 0;
-        } else if(c<0x180) {
-            return tccc180[c];
-        } else if(c<=0xffff) {
-            if(!singleLeadMightHaveNonZeroFCD16(c)) { return 0; }
-        }
-        return getFCD16FromNormData(c);
-    }
-    /**
-     * Returns the FCD data for the next code point (post-increment).
-     * Might skip only a lead surrogate rather than the whole surrogate pair if none of
-     * the supplementary code points associated with the lead surrogate have non-zero FCD data.
-     * @param s A valid pointer into a string. Requires s!=limit.
-     * @param limit The end of the string, or NULL.
-     * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
-     */
-    uint16_t nextFCD16(const UChar *&s, const UChar *limit) const {
-        UChar32 c=*s++;
-        if(c<0x180) {
-            return tccc180[c];
-        } else if(!singleLeadMightHaveNonZeroFCD16(c)) {
-            return 0;
-        }
-        UChar c2;
-        if(U16_IS_LEAD(c) && s!=limit && U16_IS_TRAIL(c2=*s)) {
-            c=U16_GET_SUPPLEMENTARY(c, c2);
-            ++s;
-        }
-        return getFCD16FromNormData(c);
-    }
-    /**
-     * Returns the FCD data for the previous code point (pre-decrement).
-     * @param start The start of the string.
-     * @param s A valid pointer into a string. Requires start<s.
-     * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
-     */
-    uint16_t previousFCD16(const UChar *start, const UChar *&s) const {
-        UChar32 c=*--s;
-        if(c<0x180) {
-            return tccc180[c];
-        }
-        if(!U16_IS_TRAIL(c)) {
-            if(!singleLeadMightHaveNonZeroFCD16(c)) {
-                return 0;
-            }
-        } else {
-            UChar c2;
-            if(start<s && U16_IS_LEAD(c2=*(s-1))) {
-                c=U16_GET_SUPPLEMENTARY(c2, c);
-                --s;
-            }
-        }
-        return getFCD16FromNormData(c);
-    }
-
-    /** Returns the FCD data for U+0000<=c<U+0180. */
-    uint16_t getFCD16FromBelow180(UChar32 c) const { return tccc180[c]; }
-    /** Returns TRUE if the single-or-lead code unit c might have non-zero FCD data. */
-    UBool singleLeadMightHaveNonZeroFCD16(UChar32 lead) const {
-        // 0<=lead<=0xffff
-        uint8_t bits=smallFCD[lead>>8];
-        if(bits==0) { return false; }
-        return (UBool)((bits>>((lead>>5)&7))&1);
-    }
-    /** Returns the FCD value from the regular normalization data. */
-    uint16_t getFCD16FromNormData(UChar32 c) const;
-
-    void makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16,
-                                     CanonIterData &newData, UErrorCode &errorCode) const;
-
-    /**
-     * Gets the decomposition for one code point.
-     * @param c code point
-     * @param buffer out-only buffer for algorithmic decompositions
-     * @param length out-only, takes the length of the decomposition, if any
-     * @return pointer to the decomposition, or NULL if none
-     */
-    const UChar *getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const;
-
-    /**
-     * Gets the raw decomposition for one code point.
-     * @param c code point
-     * @param buffer out-only buffer for algorithmic decompositions
-     * @param length out-only, takes the length of the decomposition, if any
-     * @return pointer to the decomposition, or NULL if none
-     */
-    const UChar *getRawDecomposition(UChar32 c, UChar buffer[30], int32_t &length) const;
-
-    UChar32 composePair(UChar32 a, UChar32 b) const;
-
-    UBool isCanonSegmentStarter(UChar32 c) const;
-    UBool getCanonStartSet(UChar32 c, UnicodeSet &set) const;
-
-    enum {
-        MIN_CCC_LCCC_CP=0x300
-    };
-
-    enum {
-        MIN_YES_YES_WITH_CC=0xff01,
-        JAMO_VT=0xff00,
-        MIN_NORMAL_MAYBE_YES=0xfe00,
-        JAMO_L=1,
-        MAX_DELTA=0x40
-    };
-
-    enum {
-        // Byte offsets from the start of the data, after the generic header.
-        IX_NORM_TRIE_OFFSET,
-        IX_EXTRA_DATA_OFFSET,
-        IX_SMALL_FCD_OFFSET,
-        IX_RESERVED3_OFFSET,
-        IX_RESERVED4_OFFSET,
-        IX_RESERVED5_OFFSET,
-        IX_RESERVED6_OFFSET,
-        IX_TOTAL_SIZE,
-
-        // Code point thresholds for quick check codes.
-        IX_MIN_DECOMP_NO_CP,
-        IX_MIN_COMP_NO_MAYBE_CP,
-
-        // Norm16 value thresholds for quick check combinations and types of extra data.
-        IX_MIN_YES_NO,  // Mappings & compositions in [minYesNo..minYesNoMappingsOnly[.
-        IX_MIN_NO_NO,
-        IX_LIMIT_NO_NO,
-        IX_MIN_MAYBE_YES,
-
-        IX_MIN_YES_NO_MAPPINGS_ONLY,  // Mappings only in [minYesNoMappingsOnly..minNoNo[.
-
-        IX_RESERVED15,
-        IX_COUNT
-    };
-
-    enum {
-        MAPPING_HAS_CCC_LCCC_WORD=0x80,
-        MAPPING_HAS_RAW_MAPPING=0x40,
-        MAPPING_NO_COMP_BOUNDARY_AFTER=0x20,
-        MAPPING_LENGTH_MASK=0x1f
-    };
-
-    enum {
-        COMP_1_LAST_TUPLE=0x8000,
-        COMP_1_TRIPLE=1,
-        COMP_1_TRAIL_LIMIT=0x3400,
-        COMP_1_TRAIL_MASK=0x7ffe,
-        COMP_1_TRAIL_SHIFT=9,  // 10-1 for the "triple" bit
-        COMP_2_TRAIL_SHIFT=6,
-        COMP_2_TRAIL_MASK=0xffc0
-    };
-
-    // higher-level functionality ------------------------------------------ ***
-
-    const UChar *decompose(const UChar *src, const UChar *limit,
-                           ReorderingBuffer *buffer, UErrorCode &errorCode) const;
-    void decomposeAndAppend(const UChar *src, const UChar *limit,
-                            UBool doDecompose,
-                            UnicodeString &safeMiddle,
-                            ReorderingBuffer &buffer,
-                            UErrorCode &errorCode) const;
-    UBool compose(const UChar *src, const UChar *limit,
-                  UBool onlyContiguous,
-                  UBool doCompose,
-                  ReorderingBuffer &buffer,
-                  UErrorCode &errorCode) const;
-    const UChar *composeQuickCheck(const UChar *src, const UChar *limit,
-                                   UBool onlyContiguous,
-                                   UNormalizationCheckResult *pQCResult) const;
-    void composeAndAppend(const UChar *src, const UChar *limit,
-                          UBool doCompose,
-                          UBool onlyContiguous,
-                          UnicodeString &safeMiddle,
-                          ReorderingBuffer &buffer,
-                          UErrorCode &errorCode) const;
-    const UChar *makeFCD(const UChar *src, const UChar *limit,
-                         ReorderingBuffer *buffer, UErrorCode &errorCode) const;
-    void makeFCDAndAppend(const UChar *src, const UChar *limit,
-                          UBool doMakeFCD,
-                          UnicodeString &safeMiddle,
-                          ReorderingBuffer &buffer,
-                          UErrorCode &errorCode) const;
-
-    UBool hasDecompBoundary(UChar32 c, UBool before) const;
-    UBool isDecompInert(UChar32 c) const { return isDecompYesAndZeroCC(getNorm16(c)); }
-
-    UBool hasCompBoundaryBefore(UChar32 c) const {
-        return c<minCompNoMaybeCP || hasCompBoundaryBefore(c, getNorm16(c));
-    }
-    UBool hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const;
-
-    UBool hasFCDBoundaryBefore(UChar32 c) const { return c<MIN_CCC_LCCC_CP || getFCD16(c)<=0xff; }
-    UBool hasFCDBoundaryAfter(UChar32 c) const {
-        uint16_t fcd16=getFCD16(c);
-        return fcd16<=1 || (fcd16&0xff)==0;
-    }
-    UBool isFCDInert(UChar32 c) const { return getFCD16(c)<=1; }
-private:
-    static UBool U_CALLCONV
-    isAcceptable(void *context, const char *type, const char *name, const UDataInfo *pInfo);
-
-    UBool isMaybe(uint16_t norm16) const { return minMaybeYes<=norm16 && norm16<=JAMO_VT; }
-    UBool isMaybeOrNonZeroCC(uint16_t norm16) const { return norm16>=minMaybeYes; }
-    static UBool isInert(uint16_t norm16) { return norm16==0; }
-    static UBool isJamoL(uint16_t norm16) { return norm16==1; }
-    static UBool isJamoVT(uint16_t norm16) { return norm16==JAMO_VT; }
-    UBool isHangul(uint16_t norm16) const { return norm16==minYesNo; }
-    UBool isCompYesAndZeroCC(uint16_t norm16) const { return norm16<minNoNo; }
-    // UBool isCompYes(uint16_t norm16) const {
-    //     return norm16>=MIN_YES_YES_WITH_CC || norm16<minNoNo;
-    // }
-    // UBool isCompYesOrMaybe(uint16_t norm16) const {
-    //     return norm16<minNoNo || minMaybeYes<=norm16;
-    // }
-    // UBool hasZeroCCFromDecompYes(uint16_t norm16) const {
-    //     return norm16<=MIN_NORMAL_MAYBE_YES || norm16==JAMO_VT;
-    // }
-    UBool isDecompYesAndZeroCC(uint16_t norm16) const {
-        return norm16<minYesNo ||
-               norm16==JAMO_VT ||
-               (minMaybeYes<=norm16 && norm16<=MIN_NORMAL_MAYBE_YES);
-    }
-    /**
-     * A little faster and simpler than isDecompYesAndZeroCC() but does not include
-     * the MaybeYes which combine-forward and have ccc=0.
-     * (Standard Unicode 5.2 normalization does not have such characters.)
-     */
-    UBool isMostDecompYesAndZeroCC(uint16_t norm16) const {
-        return norm16<minYesNo || norm16==MIN_NORMAL_MAYBE_YES || norm16==JAMO_VT;
-    }
-    UBool isDecompNoAlgorithmic(uint16_t norm16) const { return norm16>=limitNoNo; }
-
-    // For use with isCompYes().
-    // Perhaps the compiler can combine the two tests for MIN_YES_YES_WITH_CC.
-    // static uint8_t getCCFromYes(uint16_t norm16) {
-    //     return norm16>=MIN_YES_YES_WITH_CC ? (uint8_t)norm16 : 0;
-    // }
-    uint8_t getCCFromNoNo(uint16_t norm16) const {
-        const uint16_t *mapping=getMapping(norm16);
-        if(*mapping&MAPPING_HAS_CCC_LCCC_WORD) {
-            return (uint8_t)*(mapping-1);
-        } else {
-            return 0;
-        }
-    }
-    // requires that the [cpStart..cpLimit[ character passes isCompYesAndZeroCC()
-    uint8_t getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const;
-
-    // Requires algorithmic-NoNo.
-    UChar32 mapAlgorithmic(UChar32 c, uint16_t norm16) const {
-        return c+norm16-(minMaybeYes-MAX_DELTA-1);
-    }
-
-    // Requires minYesNo<norm16<limitNoNo.
-    const uint16_t *getMapping(uint16_t norm16) const { return extraData+norm16; }
-    const uint16_t *getCompositionsListForDecompYes(uint16_t norm16) const {
-        if(norm16==0 || MIN_NORMAL_MAYBE_YES<=norm16) {
-            return NULL;
-        } else if(norm16<minMaybeYes) {
-            return extraData+norm16;  // for yesYes; if Jamo L: harmless empty list
-        } else {
-            return maybeYesCompositions+norm16-minMaybeYes;
-        }
-    }
-    const uint16_t *getCompositionsListForComposite(uint16_t norm16) const {
-        const uint16_t *list=extraData+norm16;  // composite has both mapping & compositions list
-        return list+  // mapping pointer
-            1+  // +1 to skip the first unit with the mapping lenth
-            (*list&MAPPING_LENGTH_MASK);  // + mapping length
-    }
-    /**
-     * @param c code point must have compositions
-     * @return compositions list pointer
-     */
-    const uint16_t *getCompositionsList(uint16_t norm16) const {
-        return isDecompYes(norm16) ?
-                getCompositionsListForDecompYes(norm16) :
-                getCompositionsListForComposite(norm16);
-    }
-
-    const UChar *copyLowPrefixFromNulTerminated(const UChar *src,
-                                                UChar32 minNeedDataCP,
-                                                ReorderingBuffer *buffer,
-                                                UErrorCode &errorCode) const;
-    UBool decomposeShort(const UChar *src, const UChar *limit,
-                         ReorderingBuffer &buffer, UErrorCode &errorCode) const;
-    UBool decompose(UChar32 c, uint16_t norm16,
-                    ReorderingBuffer &buffer, UErrorCode &errorCode) const;
-
-    static int32_t combine(const uint16_t *list, UChar32 trail);
-    void addComposites(const uint16_t *list, UnicodeSet &set) const;
-    void recompose(ReorderingBuffer &buffer, int32_t recomposeStartIndex,
-                   UBool onlyContiguous) const;
-
-    UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const;
-    const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p) const;
-    const UChar *findNextCompBoundary(const UChar *p, const UChar *limit) const;
-
-    const UChar *findPreviousFCDBoundary(const UChar *start, const UChar *p) const;
-    const UChar *findNextFCDBoundary(const UChar *p, const UChar *limit) const;
-
-    int32_t getCanonValue(UChar32 c) const;
-    const UnicodeSet &getCanonStartSet(int32_t n) const;
-
-    UDataMemory *memory;
-    UVersionInfo dataVersion;
-
-    // Code point thresholds for quick check codes.
-    UChar32 minDecompNoCP;
-    UChar32 minCompNoMaybeCP;
-
-    // Norm16 value thresholds for quick check combinations and types of extra data.
-    uint16_t minYesNo;
-    uint16_t minYesNoMappingsOnly;
-    uint16_t minNoNo;
-    uint16_t limitNoNo;
-    uint16_t minMaybeYes;
-
-    UTrie2 *normTrie;
-    const uint16_t *maybeYesCompositions;
-    const uint16_t *extraData;  // mappings and/or compositions for yesYes, yesNo & noNo characters
-    const uint8_t *smallFCD;  // [0x100] one bit per 32 BMP code points, set if any FCD!=0
-    uint8_t tccc180[0x180];  // tccc values for U+0000..U+017F
-
-    SimpleSingleton canonIterDataSingleton;
-};
-
-// bits in canonIterData
-#define CANON_NOT_SEGMENT_STARTER 0x80000000
-#define CANON_HAS_COMPOSITIONS 0x40000000
-#define CANON_HAS_SET 0x200000
-#define CANON_VALUE_MASK 0x1fffff
-
-/**
- * ICU-internal shortcut for quick access to standard Unicode normalization.
- */
-class U_COMMON_API Normalizer2Factory {
-public:
-    static const Normalizer2 *getNFCInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getNFDInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getFCDInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getFCCInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getNFKCInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getNFKDInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getNFKC_CFInstance(UErrorCode &errorCode);
-    static const Normalizer2 *getNoopInstance(UErrorCode &errorCode);
-
-    static const Normalizer2 *getInstance(UNormalizationMode mode, UErrorCode &errorCode);
-
-    static const Normalizer2Impl *getNFCImpl(UErrorCode &errorCode);
-    static const Normalizer2Impl *getNFKCImpl(UErrorCode &errorCode);
-    static const Normalizer2Impl *getNFKC_CFImpl(UErrorCode &errorCode);
-
-    // Get the Impl instance of the Normalizer2.
-    // Must be used only when it is known that norm2 is a Normalizer2WithImpl instance.
-    static const Normalizer2Impl *getImpl(const Normalizer2 *norm2);
-private:
-    Normalizer2Factory();  // No instantiation.
-};
-
-U_NAMESPACE_END
-
-U_CAPI int32_t U_EXPORT2
-unorm2_swap(const UDataSwapper *ds,
-            const void *inData, int32_t length, void *outData,
-            UErrorCode *pErrorCode);
-
-/**
- * Get the NF*_QC property for a code point, for u_getIntPropertyValue().
- * @internal
- */
-U_CFUNC UNormalizationCheckResult
-unorm_getQuickCheck(UChar32 c, UNormalizationMode mode);
-
-/**
- * Gets the 16-bit FCD value (lead & trail CCs) for a code point, for u_getIntPropertyValue().
- * @internal
- */
-U_CFUNC uint16_t
-unorm_getFCD16(UChar32 c);
-
-/**
- * Format of Normalizer2 .nrm data files.
- * Format version 2.0.
- *
- * Normalizer2 .nrm data files provide data for the Unicode Normalization algorithms.
- * ICU ships with data files for standard Unicode Normalization Forms
- * NFC and NFD (nfc.nrm), NFKC and NFKD (nfkc.nrm) and NFKC_Casefold (nfkc_cf.nrm).
- * Custom (application-specific) data can be built into additional .nrm files
- * with the gennorm2 build tool.
- *
- * Normalizer2.getInstance() causes a .nrm file to be loaded, unless it has been
- * cached already. Internally, Normalizer2Impl.load() reads the .nrm file.
- *
- * A .nrm file begins with a standard ICU data file header
- * (DataHeader, see ucmndata.h and unicode/udata.h).
- * The UDataInfo.dataVersion field usually contains the Unicode version
- * for which the data was generated.
- *
- * After the header, the file contains the following parts.
- * Constants are defined as enum values of the Normalizer2Impl class.
- *
- * Many details of the data structures are described in the design doc
- * which is at http://site.icu-project.org/design/normalization/custom
- *
- * int32_t indexes[indexesLength]; -- indexesLength=indexes[IX_NORM_TRIE_OFFSET]/4;
- *
- *      The first eight indexes are byte offsets in ascending order.
- *      Each byte offset marks the start of the next part in the data file,
- *      and the end of the previous one.
- *      When two consecutive byte offsets are the same, then the corresponding part is empty.
- *      Byte offsets are offsets from after the header,
- *      that is, from the beginning of the indexes[].
- *      Each part starts at an offset with proper alignment for its data.
- *      If necessary, the previous part may include padding bytes to achieve this alignment.
- *
- *      minDecompNoCP=indexes[IX_MIN_DECOMP_NO_CP] is the lowest code point
- *      with a decomposition mapping, that is, with NF*D_QC=No.
- *      minCompNoMaybeCP=indexes[IX_MIN_COMP_NO_MAYBE_CP] is the lowest code point
- *      with NF*C_QC=No (has a one-way mapping) or Maybe (combines backward).
- *
- *      The next five indexes are thresholds of 16-bit trie values for ranges of
- *      values indicating multiple normalization properties.
- *          minYesNo=indexes[IX_MIN_YES_NO];
- *          minNoNo=indexes[IX_MIN_NO_NO];
- *          limitNoNo=indexes[IX_LIMIT_NO_NO];
- *          minMaybeYes=indexes[IX_MIN_MAYBE_YES];
- *          minYesNoMappingsOnly=indexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
- *      See the normTrie description below and the design doc for details.
- *
- * UTrie2 normTrie; -- see utrie2_impl.h and utrie2.h
- *
- *      The trie holds the main normalization data. Each code point is mapped to a 16-bit value.
- *      Rather than using independent bits in the value (which would require more than 16 bits),
- *      information is extracted primarily via range checks.
- *      For example, a 16-bit value norm16 in the range minYesNo<=norm16<minNoNo
- *      means that the character has NF*C_QC=Yes and NF*D_QC=No properties,
- *      which means it has a two-way (round-trip) decomposition mapping.
- *      Values in the range 2<=norm16<limitNoNo are also directly indexes into the extraData
- *      pointing to mappings, compositions lists, or both.
- *      Value norm16==0 means that the character is normalization-inert, that is,
- *      it does not have a mapping, does not participate in composition, has a zero
- *      canonical combining class, and forms a boundary where text before it and after it
- *      can be normalized independently.
- *      For details about how multiple properties are encoded in 16-bit values
- *      see the design doc.
- *      Note that the encoding cannot express all combinations of the properties involved;
- *      it only supports those combinations that are allowed by
- *      the Unicode Normalization algorithms. Details are in the design doc as well.
- *      The gennorm2 tool only builds .nrm files for data that conforms to the limitations.
- *
- *      The trie has a value for each lead surrogate code unit representing the "worst case"
- *      properties of the 1024 supplementary characters whose UTF-16 form starts with
- *      the lead surrogate. If all of the 1024 supplementary characters are normalization-inert,
- *      then their lead surrogate code unit has the trie value 0.
- *      When the lead surrogate unit's value exceeds the quick check minimum during processing,
- *      the properties for the full supplementary code point need to be looked up.
- *
- * uint16_t maybeYesCompositions[MIN_NORMAL_MAYBE_YES-minMaybeYes];
- * uint16_t extraData[];
- *
- *      There is only one byte offset for the end of these two arrays.
- *      The split between them is given by the constant and variable mentioned above.
- *
- *      The maybeYesCompositions array contains compositions lists for characters that
- *      combine both forward (as starters in composition pairs)
- *      and backward (as trailing characters in composition pairs).
- *      Such characters do not occur in Unicode 5.2 but are allowed by
- *      the Unicode Normalization algorithms.
- *      If there are no such characters, then minMaybeYes==MIN_NORMAL_MAYBE_YES
- *      and the maybeYesCompositions array is empty.
- *      If there are such characters, then minMaybeYes is subtracted from their norm16 values
- *      to get the index into this array.
- *
- *      The extraData array contains compositions lists for "YesYes" characters,
- *      followed by mappings and optional compositions lists for "YesNo" characters,
- *      followed by only mappings for "NoNo" characters.
- *      (Referring to pairs of NFC/NFD quick check values.)
- *      The norm16 values of those characters are directly indexes into the extraData array.
- *
- *      The data structures for compositions lists and mappings are described in the design doc.
- *
- * uint8_t smallFCD[0x100]; -- new in format version 2
- *
- *      This is a bit set to help speed up FCD value lookups in the absence of a full
- *      UTrie2 or other large data structure with the full FCD value mapping.
- *
- *      Each smallFCD bit is set if any of the corresponding 32 BMP code points
- *      has a non-zero FCD value (lccc!=0 or tccc!=0).
- *      Bit 0 of smallFCD[0] is for U+0000..U+001F. Bit 7 of smallFCD[0xff] is for U+FFE0..U+FFFF.
- *      A bit for 32 lead surrogates is set if any of the 32k corresponding
- *      _supplementary_ code points has a non-zero FCD value.
- *
- *      This bit set is most useful for the large blocks of CJK characters with FCD=0.
- *
- * Changes from format version 1 to format version 2 ---------------------------
- *
- * - Addition of data for raw (not recursively decomposed) mappings.
- *   + The MAPPING_NO_COMP_BOUNDARY_AFTER bit in the extraData is now also set when
- *     the mapping is to an empty string or when the character combines-forward.
- *     This subsumes the one actual use of the MAPPING_PLUS_COMPOSITION_LIST bit which
- *     is then repurposed for the MAPPING_HAS_RAW_MAPPING bit.
- *   + For details see the design doc.
- * - Addition of indexes[IX_MIN_YES_NO_MAPPINGS_ONLY] and separation of the yesNo extraData into
- *   distinct ranges (combines-forward vs. not)
- *   so that a range check can be used to find out if there is a compositions list.
- *   This is fully equivalent with formatVersion 1's MAPPING_PLUS_COMPOSITION_LIST flag.
- *   It is needed for the new (in ICU 49) composePair(), not for other normalization.
- * - Addition of the smallFCD[] bit set.
- */
-
-#endif  /* !UCONFIG_NO_NORMALIZATION */
-#endif  /* __NORMALIZER2IMPL_H__ */
diff --git a/src/third_party/mozjs/intl/icu/source/common/normlzr.cpp b/src/third_party/mozjs/intl/icu/source/common/normlzr.cpp
deleted file mode 100644
index 7a5209f..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/normlzr.cpp
+++ /dev/null
@@ -1,521 +0,0 @@
-/*
- *************************************************************************
- * COPYRIGHT: 
- * Copyright (c) 1996-2012, International Business Machines Corporation and
- * others. All Rights Reserved.
- *************************************************************************
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/uniset.h"
-#include "unicode/unistr.h"
-#include "unicode/chariter.h"
-#include "unicode/schriter.h"
-#include "unicode/uchriter.h"
-#include "unicode/normlzr.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "normalizer2impl.h"
-#include "uprops.h"  // for uniset_getUnicode32Instance()
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Normalizer)
-
-//-------------------------------------------------------------------------
-// Constructors and other boilerplate
-//-------------------------------------------------------------------------
-
-Normalizer::Normalizer(const UnicodeString& str, UNormalizationMode mode) :
-    UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
-    text(new StringCharacterIterator(str)),
-    currentIndex(0), nextIndex(0),
-    buffer(), bufferPos(0)
-{
-    init();
-}
-
-Normalizer::Normalizer(const UChar *str, int32_t length, UNormalizationMode mode) :
-    UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
-    text(new UCharCharacterIterator(str, length)),
-    currentIndex(0), nextIndex(0),
-    buffer(), bufferPos(0)
-{
-    init();
-}
-
-Normalizer::Normalizer(const CharacterIterator& iter, UNormalizationMode mode) :
-    UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
-    text(iter.clone()),
-    currentIndex(0), nextIndex(0),
-    buffer(), bufferPos(0)
-{
-    init();
-}
-
-Normalizer::Normalizer(const Normalizer &copy) :
-    UObject(copy), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(copy.fUMode), fOptions(copy.fOptions),
-    text(copy.text->clone()),
-    currentIndex(copy.currentIndex), nextIndex(copy.nextIndex),
-    buffer(copy.buffer), bufferPos(copy.bufferPos)
-{
-    init();
-}
-
-void
-Normalizer::init() {
-    UErrorCode errorCode=U_ZERO_ERROR;
-    fNorm2=Normalizer2Factory::getInstance(fUMode, errorCode);
-    if(fOptions&UNORM_UNICODE_3_2) {
-        delete fFilteredNorm2;
-        fNorm2=fFilteredNorm2=
-            new FilteredNormalizer2(*fNorm2, *uniset_getUnicode32Instance(errorCode));
-    }
-    if(U_FAILURE(errorCode)) {
-        errorCode=U_ZERO_ERROR;
-        fNorm2=Normalizer2Factory::getNoopInstance(errorCode);
-    }
-}
-
-Normalizer::~Normalizer()
-{
-    delete fFilteredNorm2;
-    delete text;
-}
-
-Normalizer* 
-Normalizer::clone() const
-{
-    return new Normalizer(*this);
-}
-
-/**
- * Generates a hash code for this iterator.
- */
-int32_t Normalizer::hashCode() const
-{
-    return text->hashCode() + fUMode + fOptions + buffer.hashCode() + bufferPos + currentIndex + nextIndex;
-}
-    
-UBool Normalizer::operator==(const Normalizer& that) const
-{
-    return
-        this==&that ||
-        (fUMode==that.fUMode &&
-        fOptions==that.fOptions &&
-        *text==*that.text &&
-        buffer==that.buffer &&
-        bufferPos==that.bufferPos &&
-        nextIndex==that.nextIndex);
-}
-
-//-------------------------------------------------------------------------
-// Static utility methods
-//-------------------------------------------------------------------------
-
-void U_EXPORT2
-Normalizer::normalize(const UnicodeString& source, 
-                      UNormalizationMode mode, int32_t options,
-                      UnicodeString& result, 
-                      UErrorCode &status) {
-    if(source.isBogus() || U_FAILURE(status)) {
-        result.setToBogus();
-        if(U_SUCCESS(status)) {
-            status=U_ILLEGAL_ARGUMENT_ERROR;
-        }
-    } else {
-        UnicodeString localDest;
-        UnicodeString *dest;
-
-        if(&source!=&result) {
-            dest=&result;
-        } else {
-            // the source and result strings are the same object, use a temporary one
-            dest=&localDest;
-        }
-        const Normalizer2 *n2=Normalizer2Factory::getInstance(mode, status);
-        if(U_SUCCESS(status)) {
-            if(options&UNORM_UNICODE_3_2) {
-                FilteredNormalizer2(*n2, *uniset_getUnicode32Instance(status)).
-                    normalize(source, *dest, status);
-            } else {
-                n2->normalize(source, *dest, status);
-            }
-        }
-        if(dest==&localDest && U_SUCCESS(status)) {
-            result=*dest;
-        }
-    }
-}
-
-void U_EXPORT2
-Normalizer::compose(const UnicodeString& source, 
-                    UBool compat, int32_t options,
-                    UnicodeString& result, 
-                    UErrorCode &status) {
-    normalize(source, compat ? UNORM_NFKC : UNORM_NFC, options, result, status);
-}
-
-void U_EXPORT2
-Normalizer::decompose(const UnicodeString& source, 
-                      UBool compat, int32_t options,
-                      UnicodeString& result, 
-                      UErrorCode &status) {
-    normalize(source, compat ? UNORM_NFKD : UNORM_NFD, options, result, status);
-}
-
-UNormalizationCheckResult
-Normalizer::quickCheck(const UnicodeString& source,
-                       UNormalizationMode mode, int32_t options,
-                       UErrorCode &status) {
-    const Normalizer2 *n2=Normalizer2Factory::getInstance(mode, status);
-    if(U_SUCCESS(status)) {
-        if(options&UNORM_UNICODE_3_2) {
-            return FilteredNormalizer2(*n2, *uniset_getUnicode32Instance(status)).
-                quickCheck(source, status);
-        } else {
-            return n2->quickCheck(source, status);
-        }
-    } else {
-        return UNORM_MAYBE;
-    }
-}
-
-UBool
-Normalizer::isNormalized(const UnicodeString& source,
-                         UNormalizationMode mode, int32_t options,
-                         UErrorCode &status) {
-    const Normalizer2 *n2=Normalizer2Factory::getInstance(mode, status);
-    if(U_SUCCESS(status)) {
-        if(options&UNORM_UNICODE_3_2) {
-            return FilteredNormalizer2(*n2, *uniset_getUnicode32Instance(status)).
-                isNormalized(source, status);
-        } else {
-            return n2->isNormalized(source, status);
-        }
-    } else {
-        return FALSE;
-    }
-}
-
-UnicodeString & U_EXPORT2
-Normalizer::concatenate(const UnicodeString &left, const UnicodeString &right,
-                        UnicodeString &result,
-                        UNormalizationMode mode, int32_t options,
-                        UErrorCode &errorCode) {
-    if(left.isBogus() || right.isBogus() || U_FAILURE(errorCode)) {
-        result.setToBogus();
-        if(U_SUCCESS(errorCode)) {
-            errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        }
-    } else {
-        UnicodeString localDest;
-        UnicodeString *dest;
-
-        if(&right!=&result) {
-            dest=&result;
-        } else {
-            // the right and result strings are the same object, use a temporary one
-            dest=&localDest;
-        }
-        *dest=left;
-        const Normalizer2 *n2=Normalizer2Factory::getInstance(mode, errorCode);
-        if(U_SUCCESS(errorCode)) {
-            if(options&UNORM_UNICODE_3_2) {
-                FilteredNormalizer2(*n2, *uniset_getUnicode32Instance(errorCode)).
-                    append(*dest, right, errorCode);
-            } else {
-                n2->append(*dest, right, errorCode);
-            }
-        }
-        if(dest==&localDest && U_SUCCESS(errorCode)) {
-            result=*dest;
-        }
-    }
-    return result;
-}
-
-//-------------------------------------------------------------------------
-// Iteration API
-//-------------------------------------------------------------------------
-
-/**
- * Return the current character in the normalized text.
- */
-UChar32 Normalizer::current() {
-    if(bufferPos<buffer.length() || nextNormalize()) {
-        return buffer.char32At(bufferPos);
-    } else {
-        return DONE;
-    }
-}
-
-/**
- * Return the next character in the normalized text and advance
- * the iteration position by one.  If the end
- * of the text has already been reached, {@link #DONE} is returned.
- */
-UChar32 Normalizer::next() {
-    if(bufferPos<buffer.length() ||  nextNormalize()) {
-        UChar32 c=buffer.char32At(bufferPos);
-        bufferPos+=U16_LENGTH(c);
-        return c;
-    } else {
-        return DONE;
-    }
-}
-
-/**
- * Return the previous character in the normalized text and decrement
- * the iteration position by one.  If the beginning
- * of the text has already been reached, {@link #DONE} is returned.
- */
-UChar32 Normalizer::previous() {
-    if(bufferPos>0 || previousNormalize()) {
-        UChar32 c=buffer.char32At(bufferPos-1);
-        bufferPos-=U16_LENGTH(c);
-        return c;
-    } else {
-        return DONE;
-    }
-}
-
-void Normalizer::reset() {
-    currentIndex=nextIndex=text->setToStart();
-    clearBuffer();
-}
-
-void
-Normalizer::setIndexOnly(int32_t index) {
-    text->setIndex(index);  // pins index
-    currentIndex=nextIndex=text->getIndex();
-    clearBuffer();
-}
-
-/**
- * Return the first character in the normalized text.  This resets
- * the <tt>Normalizer's</tt> position to the beginning of the text.
- */
-UChar32 Normalizer::first() {
-    reset();
-    return next();
-}
-
-/**
- * Return the last character in the normalized text.  This resets
- * the <tt>Normalizer's</tt> position to be just before the
- * the input text corresponding to that normalized character.
- */
-UChar32 Normalizer::last() {
-    currentIndex=nextIndex=text->setToEnd();
-    clearBuffer();
-    return previous();
-}
-
-/**
- * Retrieve the current iteration position in the input text that is
- * being normalized.  This method is useful in applications such as
- * searching, where you need to be able to determine the position in
- * the input text that corresponds to a given normalized output character.
- * <p>
- * <b>Note:</b> This method sets the position in the <em>input</em>, while
- * {@link #next} and {@link #previous} iterate through characters in the
- * <em>output</em>.  This means that there is not necessarily a one-to-one
- * correspondence between characters returned by <tt>next</tt> and
- * <tt>previous</tt> and the indices passed to and returned from
- * <tt>setIndex</tt> and {@link #getIndex}.
- *
- */
-int32_t Normalizer::getIndex() const {
-    if(bufferPos<buffer.length()) {
-        return currentIndex;
-    } else {
-        return nextIndex;
-    }
-}
-
-/**
- * Retrieve the index of the start of the input text.  This is the begin index
- * of the <tt>CharacterIterator</tt> or the start (i.e. 0) of the <tt>String</tt>
- * over which this <tt>Normalizer</tt> is iterating
- */
-int32_t Normalizer::startIndex() const {
-    return text->startIndex();
-}
-
-/**
- * Retrieve the index of the end of the input text.  This is the end index
- * of the <tt>CharacterIterator</tt> or the length of the <tt>String</tt>
- * over which this <tt>Normalizer</tt> is iterating
- */
-int32_t Normalizer::endIndex() const {
-    return text->endIndex();
-}
-
-//-------------------------------------------------------------------------
-// Property access methods
-//-------------------------------------------------------------------------
-
-void
-Normalizer::setMode(UNormalizationMode newMode) 
-{
-    fUMode = newMode;
-    init();
-}
-
-UNormalizationMode
-Normalizer::getUMode() const
-{
-    return fUMode;
-}
-
-void
-Normalizer::setOption(int32_t option, 
-                      UBool value) 
-{
-    if (value) {
-        fOptions |= option;
-    } else {
-        fOptions &= (~option);
-    }
-    init();
-}
-
-UBool
-Normalizer::getOption(int32_t option) const
-{
-    return (fOptions & option) != 0;
-}
-
-/**
- * Set the input text over which this <tt>Normalizer</tt> will iterate.
- * The iteration position is set to the beginning of the input text.
- */
-void
-Normalizer::setText(const UnicodeString& newText, 
-                    UErrorCode &status)
-{
-    if (U_FAILURE(status)) {
-        return;
-    }
-    CharacterIterator *newIter = new StringCharacterIterator(newText);
-    if (newIter == NULL) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    delete text;
-    text = newIter;
-    reset();
-}
-
-/**
- * Set the input text over which this <tt>Normalizer</tt> will iterate.
- * The iteration position is set to the beginning of the string.
- */
-void
-Normalizer::setText(const CharacterIterator& newText, 
-                    UErrorCode &status) 
-{
-    if (U_FAILURE(status)) {
-        return;
-    }
-    CharacterIterator *newIter = newText.clone();
-    if (newIter == NULL) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    delete text;
-    text = newIter;
-    reset();
-}
-
-void
-Normalizer::setText(const UChar* newText,
-                    int32_t length,
-                    UErrorCode &status)
-{
-    if (U_FAILURE(status)) {
-        return;
-    }
-    CharacterIterator *newIter = new UCharCharacterIterator(newText, length);
-    if (newIter == NULL) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    delete text;
-    text = newIter;
-    reset();
-}
-
-/**
- * Copies the text under iteration into the UnicodeString referred to by "result".
- * @param result Receives a copy of the text under iteration.
- */
-void
-Normalizer::getText(UnicodeString&  result) 
-{
-    text->getText(result);
-}
-
-//-------------------------------------------------------------------------
-// Private utility methods
-//-------------------------------------------------------------------------
-
-void Normalizer::clearBuffer() {
-    buffer.remove();
-    bufferPos=0;
-}
-
-UBool
-Normalizer::nextNormalize() {
-    clearBuffer();
-    currentIndex=nextIndex;
-    text->setIndex(nextIndex);
-    if(!text->hasNext()) {
-        return FALSE;
-    }
-    // Skip at least one character so we make progress.
-    UnicodeString segment(text->next32PostInc());
-    while(text->hasNext()) {
-        UChar32 c;
-        if(fNorm2->hasBoundaryBefore(c=text->next32PostInc())) {
-            text->move32(-1, CharacterIterator::kCurrent);
-            break;
-        }
-        segment.append(c);
-    }
-    nextIndex=text->getIndex();
-    UErrorCode errorCode=U_ZERO_ERROR;
-    fNorm2->normalize(segment, buffer, errorCode);
-    return U_SUCCESS(errorCode) && !buffer.isEmpty();
-}
-
-UBool
-Normalizer::previousNormalize() {
-    clearBuffer();
-    nextIndex=currentIndex;
-    text->setIndex(currentIndex);
-    if(!text->hasPrevious()) {
-        return FALSE;
-    }
-    UnicodeString segment;
-    while(text->hasPrevious()) {
-        UChar32 c=text->previous32();
-        segment.insert(0, c);
-        if(fNorm2->hasBoundaryBefore(c)) {
-            break;
-        }
-    }
-    currentIndex=text->getIndex();
-    UErrorCode errorCode=U_ZERO_ERROR;
-    fNorm2->normalize(segment, buffer, errorCode);
-    bufferPos=buffer.length();
-    return U_SUCCESS(errorCode) && !buffer.isEmpty();
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_NORMALIZATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/parsepos.cpp b/src/third_party/mozjs/intl/icu/source/common/parsepos.cpp
deleted file mode 100644
index 26f8820..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/parsepos.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2003-2003, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-
-#include "unicode/parsepos.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ParsePosition)
-
-ParsePosition::~ParsePosition() {}
-
-ParsePosition *
-ParsePosition::clone() const {
-    return new ParsePosition(*this);
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/patternprops.cpp b/src/third_party/mozjs/intl/icu/source/common/patternprops.cpp
deleted file mode 100644
index b2c5249..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/patternprops.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  patternprops.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2011mar13
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-#include "patternprops.h"
-
-U_NAMESPACE_BEGIN
-
-/*
- * One byte per Latin-1 character.
- * Bit 0 is set if either Pattern property is true,
- * bit 1 if Pattern_Syntax is true,
- * bit 2 if Pattern_White_Space is true.
- * That is, Pattern_Syntax is encoded as 3 and Pattern_White_Space as 5.
- */
-static const uint8_t latin1[256]={
-    // WS: 9..D
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    // WS: 20  Syntax: 21..2F
-    5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-    // Syntax: 3A..40
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
-    3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    // Syntax: 5B..5E
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0,
-    // Syntax: 60
-    3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    // Syntax: 7B..7E
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0,
-    // WS: 85
-    0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    // Syntax: A1..A7, A9, AB, AC, AE
-    0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3, 0, 3, 0,
-    // Syntax: B0, B1, B6, BB, BF
-    3, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 3,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    // Syntax: D7
-    0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    // Syntax: F7
-    0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/*
- * One byte per 32 characters from U+2000..U+303F indexing into
- * a small table of 32-bit data words.
- * The first two data words are all-zeros and all-ones.
- */
-static const uint8_t index2000[130]={
-    2, 3, 4, 0, 0, 0, 0, 0,  // 20xx
-    0, 0, 0, 0, 5, 1, 1, 1,  // 21xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 22xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 23xx
-    1, 1, 1, 0, 0, 0, 0, 0,  // 24xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 25xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 26xx
-    1, 1, 1, 6, 7, 1, 1, 1,  // 27xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 28xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 29xx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 2Axx
-    1, 1, 1, 1, 1, 1, 1, 1,  // 2Bxx
-    0, 0, 0, 0, 0, 0, 0, 0,  // 2Cxx
-    0, 0, 0, 0, 0, 0, 0, 0,  // 2Dxx
-    1, 1, 1, 1, 0, 0, 0, 0,  // 2Exx
-    0, 0, 0, 0, 0, 0, 0, 0,  // 2Fxx
-    8, 9  // 3000..303F
-};
-
-/*
- * One 32-bit integer per 32 characters. Ranges of all-false and all-true
- * are mapped to the first two values, other ranges map to appropriate bit patterns.
- */
-static const uint32_t syntax2000[]={
-    0,
-    0xffffffff,
-    0xffff0000,  // 2: 2010..201F
-    0x7fff00ff,  // 3: 2020..2027, 2030..203E
-    0x7feffffe,  // 4: 2041..2053, 2055..205E
-    0xffff0000,  // 5: 2190..219F
-    0x003fffff,  // 6: 2760..2775
-    0xfff00000,  // 7: 2794..279F
-    0xffffff0e,  // 8: 3001..3003, 3008..301F
-    0x00010001   // 9: 3020, 3030
-};
-
-/*
- * Same as syntax2000, but with additional bits set for the
- * Pattern_White_Space characters 200E 200F 2028 2029.
- */
-static const uint32_t syntaxOrWhiteSpace2000[]={
-    0,
-    0xffffffff,
-    0xffffc000,  // 2: 200E..201F
-    0x7fff03ff,  // 3: 2020..2029, 2030..203E
-    0x7feffffe,  // 4: 2041..2053, 2055..205E
-    0xffff0000,  // 5: 2190..219F
-    0x003fffff,  // 6: 2760..2775
-    0xfff00000,  // 7: 2794..279F
-    0xffffff0e,  // 8: 3001..3003, 3008..301F
-    0x00010001   // 9: 3020, 3030
-};
-
-UBool
-PatternProps::isSyntax(UChar32 c) {
-    if(c<0) {
-        return FALSE;
-    } else if(c<=0xff) {
-        return (UBool)(latin1[c]>>1)&1;
-    } else if(c<0x2010) {
-        return FALSE;
-    } else if(c<=0x3030) {
-        uint32_t bits=syntax2000[index2000[(c-0x2000)>>5]];
-        return (UBool)((bits>>(c&0x1f))&1);
-    } else if(0xfd3e<=c && c<=0xfe46) {
-        return c<=0xfd3f || 0xfe45<=c;
-    } else {
-        return FALSE;
-    }
-}
-
-UBool
-PatternProps::isSyntaxOrWhiteSpace(UChar32 c) {
-    if(c<0) {
-        return FALSE;
-    } else if(c<=0xff) {
-        return (UBool)(latin1[c]&1);
-    } else if(c<0x200e) {
-        return FALSE;
-    } else if(c<=0x3030) {
-        uint32_t bits=syntaxOrWhiteSpace2000[index2000[(c-0x2000)>>5]];
-        return (UBool)((bits>>(c&0x1f))&1);
-    } else if(0xfd3e<=c && c<=0xfe46) {
-        return c<=0xfd3f || 0xfe45<=c;
-    } else {
-        return FALSE;
-    }
-}
-
-UBool
-PatternProps::isWhiteSpace(UChar32 c) {
-    if(c<0) {
-        return FALSE;
-    } else if(c<=0xff) {
-        return (UBool)(latin1[c]>>2)&1;
-    } else if(0x200e<=c && c<=0x2029) {
-        return c<=0x200f || 0x2028<=c;
-    } else {
-        return FALSE;
-    }
-}
-
-const UChar *
-PatternProps::skipWhiteSpace(const UChar *s, int32_t length) {
-    while(length>0 && isWhiteSpace(*s)) {
-        ++s;
-        --length;
-    }
-    return s;
-}
-
-const UChar *
-PatternProps::trimWhiteSpace(const UChar *s, int32_t &length) {
-    if(length<=0 || (!isWhiteSpace(s[0]) && !isWhiteSpace(s[length-1]))) {
-        return s;
-    }
-    int32_t start=0;
-    int32_t limit=length;
-    while(start<limit && isWhiteSpace(s[start])) {
-        ++start;
-    }
-    if(start<limit) {
-        // There is non-white space at start; we will not move limit below that,
-        // so we need not test start<limit in the loop.
-        while(isWhiteSpace(s[limit-1])) {
-            --limit;
-        }
-    }
-    length=limit-start;
-    return s+start;
-}
-
-UBool
-PatternProps::isIdentifier(const UChar *s, int32_t length) {
-    if(length<=0) {
-        return FALSE;
-    }
-    const UChar *limit=s+length;
-    do {
-        if(isSyntaxOrWhiteSpace(*s++)) {
-            return FALSE;
-        }
-    } while(s<limit);
-    return TRUE;
-}
-
-const UChar *
-PatternProps::skipIdentifier(const UChar *s, int32_t length) {
-    while(length>0 && !isSyntaxOrWhiteSpace(*s)) {
-        ++s;
-        --length;
-    }
-    return s;
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/patternprops.h b/src/third_party/mozjs/intl/icu/source/common/patternprops.h
deleted file mode 100644
index 0ceab51..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/patternprops.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  patternprops.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2011mar13
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __PATTERNPROPS_H__
-#define __PATTERNPROPS_H__
-
-#include "unicode/utypes.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Implements the immutable Unicode properties Pattern_Syntax and Pattern_White_Space.
- * Hardcodes these properties, does not load data, does not depend on other ICU classes.
- * <p>
- * Note: Both properties include ASCII as well as non-ASCII, non-Latin-1 code points,
- * and both properties only include BMP code points (no supplementary ones).
- * Pattern_Syntax includes some unassigned code points.
- * <p>
- * [:Pattern_White_Space:] =
- *   [\u0009-\u000D\ \u0085\u200E\u200F\u2028\u2029]
- * <p>
- * [:Pattern_Syntax:] =
- *   [!-/\:-@\[-\^`\{-~\u00A1-\u00A7\u00A9\u00AB\u00AC\u00AE
- *    \u00B0\u00B1\u00B6\u00BB\u00BF\u00D7\u00F7
- *    \u2010-\u2027\u2030-\u203E\u2041-\u2053\u2055-\u205E
- *    \u2190-\u245F\u2500-\u2775\u2794-\u2BFF\u2E00-\u2E7F
- *    \u3001-\u3003\u3008-\u3020\u3030\uFD3E\uFD3F\uFE45\uFE46]
- * @author mscherer
- */
-class U_COMMON_API PatternProps {
-public:
-    /**
-     * @return TRUE if c is a Pattern_Syntax code point.
-     */
-    static UBool isSyntax(UChar32 c);
-
-    /**
-     * @return TRUE if c is a Pattern_Syntax or Pattern_White_Space code point.
-     */
-    static UBool isSyntaxOrWhiteSpace(UChar32 c);
-
-    /**
-     * @return TRUE if c is a Pattern_White_Space character.
-     */
-    static UBool isWhiteSpace(UChar32 c);
-
-    /**
-     * Skips over Pattern_White_Space starting at s.
-     * @return The smallest pointer at or after s with a non-white space character.
-     */
-    static const UChar *skipWhiteSpace(const UChar *s, int32_t length);
-
-    /**
-     * @return s except with leading and trailing Pattern_White_Space removed and length adjusted.
-     */
-    static const UChar *trimWhiteSpace(const UChar *s, int32_t &length);
-
-    /**
-     * Tests whether the string contains a "pattern identifier", that is,
-     * whether it contains only non-Pattern_White_Space, non-Pattern_Syntax characters.
-     * @return TRUE if there are no Pattern_White_Space or Pattern_Syntax characters in s.
-     */
-    static UBool isIdentifier(const UChar *s, int32_t length);
-
-    /**
-     * Skips over a "pattern identifier" starting at index s.
-     * @return The smallest pointer at or after s with
-     *         a Pattern_White_Space or Pattern_Syntax character.
-     */
-    static const UChar *skipIdentifier(const UChar *s, int32_t length);
-
-private:
-    PatternProps();  // no constructor: all static methods
-};
-
-U_NAMESPACE_END
-
-#endif  // __PATTERNPROPS_H__
diff --git a/src/third_party/mozjs/intl/icu/source/common/propname.cpp b/src/third_party/mozjs/intl/icu/source/common/propname.cpp
deleted file mode 100644
index 6d5d935..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/propname.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2002-2011, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: October 30 2002
-* Since: ICU 2.4
-* 2010nov19 Markus Scherer  Rewrite for formatVersion 2.
-**********************************************************************
-*/
-#include "propname.h"
-#include "unicode/uchar.h"
-#include "unicode/udata.h"
-#include "unicode/uscript.h"
-#include "umutex.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "ucln_cmn.h"
-#include "uarrsort.h"
-#include "uinvchar.h"
-
-#define INCLUDED_FROM_PROPNAME_CPP
-#include "propname_data.h"
-
-U_CDECL_BEGIN
-
-/**
- * Get the next non-ignorable ASCII character from a property name
- * and lowercases it.
- * @return ((advance count for the name)<<8)|character
- */
-static inline int32_t
-getASCIIPropertyNameChar(const char *name) {
-    int32_t i;
-    char c;
-
-    /* Ignore delimiters '-', '_', and ASCII White_Space */
-    for(i=0;
-        (c=name[i++])==0x2d || c==0x5f ||
-        c==0x20 || (0x09<=c && c<=0x0d);
-    ) {}
-
-    if(c!=0) {
-        return (i<<8)|(uint8_t)uprv_asciitolower((char)c);
-    } else {
-        return i<<8;
-    }
-}
-
-/**
- * Get the next non-ignorable EBCDIC character from a property name
- * and lowercases it.
- * @return ((advance count for the name)<<8)|character
- */
-static inline int32_t
-getEBCDICPropertyNameChar(const char *name) {
-    int32_t i;
-    char c;
-
-    /* Ignore delimiters '-', '_', and EBCDIC White_Space */
-    for(i=0;
-        (c=name[i++])==0x60 || c==0x6d ||
-        c==0x40 || c==0x05 || c==0x15 || c==0x25 || c==0x0b || c==0x0c || c==0x0d;
-    ) {}
-
-    if(c!=0) {
-        return (i<<8)|(uint8_t)uprv_ebcdictolower((char)c);
-    } else {
-        return i<<8;
-    }
-}
-
-/**
- * Unicode property names and property value names are compared "loosely".
- *
- * UCD.html 4.0.1 says:
- *   For all property names, property value names, and for property values for
- *   Enumerated, Binary, or Catalog properties, use the following
- *   loose matching rule:
- *
- *   LM3. Ignore case, whitespace, underscore ('_'), and hyphens.
- *
- * This function does just that, for (char *) name strings.
- * It is almost identical to ucnv_compareNames() but also ignores
- * C0 White_Space characters (U+0009..U+000d, and U+0085 on EBCDIC).
- *
- * @internal
- */
-
-U_CAPI int32_t U_EXPORT2
-uprv_compareASCIIPropertyNames(const char *name1, const char *name2) {
-    int32_t rc, r1, r2;
-
-    for(;;) {
-        r1=getASCIIPropertyNameChar(name1);
-        r2=getASCIIPropertyNameChar(name2);
-
-        /* If we reach the ends of both strings then they match */
-        if(((r1|r2)&0xff)==0) {
-            return 0;
-        }
-
-        /* Compare the lowercased characters */
-        if(r1!=r2) {
-            rc=(r1&0xff)-(r2&0xff);
-            if(rc!=0) {
-                return rc;
-            }
-        }
-
-        name1+=r1>>8;
-        name2+=r2>>8;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-uprv_compareEBCDICPropertyNames(const char *name1, const char *name2) {
-    int32_t rc, r1, r2;
-
-    for(;;) {
-        r1=getEBCDICPropertyNameChar(name1);
-        r2=getEBCDICPropertyNameChar(name2);
-
-        /* If we reach the ends of both strings then they match */
-        if(((r1|r2)&0xff)==0) {
-            return 0;
-        }
-
-        /* Compare the lowercased characters */
-        if(r1!=r2) {
-            rc=(r1&0xff)-(r2&0xff);
-            if(rc!=0) {
-                return rc;
-            }
-        }
-
-        name1+=r1>>8;
-        name2+=r2>>8;
-    }
-}
-
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-int32_t PropNameData::findProperty(int32_t property) {
-    int32_t i=1;  // valueMaps index, initially after numRanges
-    for(int32_t numRanges=valueMaps[0]; numRanges>0; --numRanges) {
-        // Read and skip the start and limit of this range.
-        int32_t start=valueMaps[i];
-        int32_t limit=valueMaps[i+1];
-        i+=2;
-        if(property<start) {
-            break;
-        }
-        if(property<limit) {
-            return i+(property-start)*2;
-        }
-        i+=(limit-start)*2;  // Skip all entries for this range.
-    }
-    return 0;
-}
-
-int32_t PropNameData::findPropertyValueNameGroup(int32_t valueMapIndex, int32_t value) {
-    if(valueMapIndex==0) {
-        return 0;  // The property does not have named values.
-    }
-    ++valueMapIndex;  // Skip the BytesTrie offset.
-    int32_t numRanges=valueMaps[valueMapIndex++];
-    if(numRanges<0x10) {
-        // Ranges of values.
-        for(; numRanges>0; --numRanges) {
-            // Read and skip the start and limit of this range.
-            int32_t start=valueMaps[valueMapIndex];
-            int32_t limit=valueMaps[valueMapIndex+1];
-            valueMapIndex+=2;
-            if(value<start) {
-                break;
-            }
-            if(value<limit) {
-                return valueMaps[valueMapIndex+value-start];
-            }
-            valueMapIndex+=limit-start;  // Skip all entries for this range.
-        }
-    } else {
-        // List of values.
-        int32_t valuesStart=valueMapIndex;
-        int32_t nameGroupOffsetsStart=valueMapIndex+numRanges-0x10;
-        do {
-            int32_t v=valueMaps[valueMapIndex];
-            if(value<v) {
-                break;
-            }
-            if(value==v) {
-                return valueMaps[nameGroupOffsetsStart+valueMapIndex-valuesStart];
-            }
-        } while(++valueMapIndex<nameGroupOffsetsStart);
-    }
-    return 0;
-}
-
-const char *PropNameData::getName(const char *nameGroup, int32_t nameIndex) {
-    int32_t numNames=*nameGroup++;
-    if(nameIndex<0 || numNames<=nameIndex) {
-        return NULL;
-    }
-    // Skip nameIndex names.
-    for(; nameIndex>0; --nameIndex) {
-        nameGroup=uprv_strchr(nameGroup, 0)+1;
-    }
-    if(*nameGroup==0) {
-        return NULL;  // no name (Property[Value]Aliases.txt has "n/a")
-    }
-    return nameGroup;
-}
-
-UBool PropNameData::containsName(BytesTrie &trie, const char *name) {
-    if(name==NULL) {
-        return FALSE;
-    }
-    UStringTrieResult result=USTRINGTRIE_NO_VALUE;
-    char c;
-    while((c=*name++)!=0) {
-        c=uprv_invCharToLowercaseAscii(c);
-        // Ignore delimiters '-', '_', and ASCII White_Space.
-        if(c==0x2d || c==0x5f || c==0x20 || (0x09<=c && c<=0x0d)) {
-            continue;
-        }
-        if(!USTRINGTRIE_HAS_NEXT(result)) {
-            return FALSE;
-        }
-        result=trie.next((uint8_t)c);
-    }
-    return USTRINGTRIE_HAS_VALUE(result);
-}
-
-const char *PropNameData::getPropertyName(int32_t property, int32_t nameChoice) {
-    int32_t valueMapIndex=findProperty(property);
-    if(valueMapIndex==0) {
-        return NULL;  // Not a known property.
-    }
-    return getName(nameGroups+valueMaps[valueMapIndex], nameChoice);
-}
-
-const char *PropNameData::getPropertyValueName(int32_t property, int32_t value, int32_t nameChoice) {
-    int32_t valueMapIndex=findProperty(property);
-    if(valueMapIndex==0) {
-        return NULL;  // Not a known property.
-    }
-    int32_t nameGroupOffset=findPropertyValueNameGroup(valueMaps[valueMapIndex+1], value);
-    if(nameGroupOffset==0) {
-        return NULL;
-    }
-    return getName(nameGroups+nameGroupOffset, nameChoice);
-}
-
-int32_t PropNameData::getPropertyOrValueEnum(int32_t bytesTrieOffset, const char *alias) {
-    BytesTrie trie(bytesTries+bytesTrieOffset);
-    if(containsName(trie, alias)) {
-        return trie.getValue();
-    } else {
-        return UCHAR_INVALID_CODE;
-    }
-}
-
-int32_t PropNameData::getPropertyEnum(const char *alias) {
-    return getPropertyOrValueEnum(0, alias);
-}
-
-int32_t PropNameData::getPropertyValueEnum(int32_t property, const char *alias) {
-    int32_t valueMapIndex=findProperty(property);
-    if(valueMapIndex==0) {
-        return UCHAR_INVALID_CODE;  // Not a known property.
-    }
-    valueMapIndex=valueMaps[valueMapIndex+1];
-    if(valueMapIndex==0) {
-        return UCHAR_INVALID_CODE;  // The property does not have named values.
-    }
-    // valueMapIndex is the start of the property's valueMap,
-    // where the first word is the BytesTrie offset.
-    return getPropertyOrValueEnum(valueMaps[valueMapIndex], alias);
-}
-U_NAMESPACE_END
-
-//----------------------------------------------------------------------
-// Public API implementation
-
-U_CAPI const char* U_EXPORT2
-u_getPropertyName(UProperty property,
-                  UPropertyNameChoice nameChoice) {
-    U_NAMESPACE_USE
-    return PropNameData::getPropertyName(property, nameChoice);
-}
-
-U_CAPI UProperty U_EXPORT2
-u_getPropertyEnum(const char* alias) {
-    U_NAMESPACE_USE
-    return (UProperty)PropNameData::getPropertyEnum(alias);
-}
-
-U_CAPI const char* U_EXPORT2
-u_getPropertyValueName(UProperty property,
-                       int32_t value,
-                       UPropertyNameChoice nameChoice) {
-    U_NAMESPACE_USE
-    return PropNameData::getPropertyValueName(property, value, nameChoice);
-}
-
-U_CAPI int32_t U_EXPORT2
-u_getPropertyValueEnum(UProperty property,
-                       const char* alias) {
-    U_NAMESPACE_USE
-    return PropNameData::getPropertyValueEnum(property, alias);
-}
-
-U_CAPI const char*  U_EXPORT2
-uscript_getName(UScriptCode scriptCode){
-    return u_getPropertyValueName(UCHAR_SCRIPT, scriptCode,
-                                  U_LONG_PROPERTY_NAME);
-}
-
-U_CAPI const char*  U_EXPORT2
-uscript_getShortName(UScriptCode scriptCode){
-    return u_getPropertyValueName(UCHAR_SCRIPT, scriptCode,
-                                  U_SHORT_PROPERTY_NAME);
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/propname.h b/src/third_party/mozjs/intl/icu/source/common/propname.h
deleted file mode 100644
index c20ae45..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/propname.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2002-2011, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: October 30 2002
-* Since: ICU 2.4
-* 2010nov19 Markus Scherer  Rewrite for formatVersion 2.
-**********************************************************************
-*/
-#ifndef PROPNAME_H
-#define PROPNAME_H
-
-#include "unicode/utypes.h"
-#include "unicode/bytestrie.h"
-#include "unicode/uchar.h"
-#include "udataswp.h"
-#include "uprops.h"
-
-/*
- * This header defines the in-memory layout of the property names data
- * structure representing the UCD data files PropertyAliases.txt and
- * PropertyValueAliases.txt.  It is used by:
- *   propname.cpp - reads data
- *   genpname     - creates data
- */
-
-/* low-level char * property name comparison -------------------------------- */
-
-U_CDECL_BEGIN
-
-/**
- * \var uprv_comparePropertyNames
- * Unicode property names and property value names are compared "loosely".
- *
- * UCD.html 4.0.1 says:
- *   For all property names, property value names, and for property values for
- *   Enumerated, Binary, or Catalog properties, use the following
- *   loose matching rule:
- *
- *   LM3. Ignore case, whitespace, underscore ('_'), and hyphens.
- *
- * This function does just that, for (char *) name strings.
- * It is almost identical to ucnv_compareNames() but also ignores
- * C0 White_Space characters (U+0009..U+000d, and U+0085 on EBCDIC).
- *
- * @internal
- */
-
-U_CAPI int32_t U_EXPORT2
-uprv_compareASCIIPropertyNames(const char *name1, const char *name2);
-
-U_CAPI int32_t U_EXPORT2
-uprv_compareEBCDICPropertyNames(const char *name1, const char *name2);
-
-#if U_CHARSET_FAMILY==U_ASCII_FAMILY
-#   define uprv_comparePropertyNames uprv_compareASCIIPropertyNames
-#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-#   define uprv_comparePropertyNames uprv_compareEBCDICPropertyNames
-#else
-#   error U_CHARSET_FAMILY is not valid
-#endif
-
-U_CDECL_END
-
-/* UDataMemory structure and signatures ------------------------------------- */
-
-#define PNAME_DATA_NAME "pnames"
-#define PNAME_DATA_TYPE "icu"
-
-/* Fields in UDataInfo: */
-
-/* PNAME_SIG[] is encoded as numeric literals for compatibility with the HP compiler */
-#define PNAME_SIG_0 ((uint8_t)0x70) /* p */
-#define PNAME_SIG_1 ((uint8_t)0x6E) /* n */
-#define PNAME_SIG_2 ((uint8_t)0x61) /* a */
-#define PNAME_SIG_3 ((uint8_t)0x6D) /* m */
-
-U_NAMESPACE_BEGIN
-
-class PropNameData {
-public:
-    enum {
-        // Byte offsets from the start of the data, after the generic header.
-        IX_VALUE_MAPS_OFFSET,
-        IX_BYTE_TRIES_OFFSET,
-        IX_NAME_GROUPS_OFFSET,
-        IX_RESERVED3_OFFSET,
-        IX_RESERVED4_OFFSET,
-        IX_TOTAL_SIZE,
-
-        // Other values.
-        IX_MAX_NAME_LENGTH,
-        IX_RESERVED7,
-        IX_COUNT
-    };
-
-    static const char *getPropertyName(int32_t property, int32_t nameChoice);
-    static const char *getPropertyValueName(int32_t property, int32_t value, int32_t nameChoice);
-
-    static int32_t getPropertyEnum(const char *alias);
-    static int32_t getPropertyValueEnum(int32_t property, const char *alias);
-
-private:
-    static int32_t findProperty(int32_t property);
-    static int32_t findPropertyValueNameGroup(int32_t valueMapIndex, int32_t value);
-    static const char *getName(const char *nameGroup, int32_t nameIndex);
-    static UBool containsName(BytesTrie &trie, const char *name);
-
-    static int32_t getPropertyOrValueEnum(int32_t bytesTrieOffset, const char *alias);
-
-    static const int32_t indexes[];
-    static const int32_t valueMaps[];
-    static const uint8_t bytesTries[];
-    static const char nameGroups[];
-};
-
-/*
- * pnames.icu formatVersion 2
- *
- * formatVersion 2 is new in ICU 4.8.
- * In ICU 4.8, the pnames.icu data file is used only in ICU4J.
- * ICU4C 4.8 has the same data structures hardcoded in source/common/propname_data.h.
- *
- * For documentation of pnames.icu formatVersion 1 see ICU4C 4.6 (2010-dec-01)
- * or earlier versions of this header file (source/common/propname.h).
- *
- * The pnames.icu begins with the standard ICU DataHeader/UDataInfo.
- * After that:
- *
- * int32_t indexes[8];
- *
- *      (See the PropNameData::IX_... constants.)
- *
- *      The first 6 indexes are byte offsets from the beginning of the data
- *      (beginning of indexes[]) to following structures.
- *      The length of each structure is the difference between its offset
- *      and the next one.
- *      All offsets are filled in: Where there is no data between two offsets,
- *      those two offsets are the same.
- *      The last offset (indexes[PropNameData::IX_TOTAL_SIZE]) indicates the
- *      total number of bytes in the file. (Not counting the standard headers.)
- *
- *      The sixth index (indexes[PropNameData::IX_MAX_NAME_LENGTH]) has the
- *      maximum length of any Unicode property (or property value) alias.
- *      (Without normalization, that is, including underscores etc.)
- *
- * int32_t valueMaps[];
- *
- *      The valueMaps[] begins with a map from UProperty enums to properties,
- *      followed by the per-property value maps from property values to names,
- *      for those properties that have named values.
- *      (Binary & enumerated, plus General_Category_Mask.)
- *
- *      valueMaps[0] contains the number of UProperty enum ranges.
- *      For each range:
- *        int32_t start, limit -- first and last+1 UProperty enum of a dense range
- *        Followed by (limit-start) pairs of
- *          int32_t nameGroupOffset;
- *            Offset into nameGroups[] for the property's names/aliases.
- *          int32_t valueMapIndex;
- *            Offset of the property's value map in the valueMaps[] array.
- *            If the valueMapIndex is 0, then the property does not have named values.
- *
- *      For each property's value map:
- *      int32_t bytesTrieOffset; -- Offset into bytesTries[] for name->value mapping.
- *      int32_t numRanges;
- *        If numRanges is in the range 1..15, then that many ranges of values follow.
- *        Per range:
- *          int32_t start, limit -- first and last+1 UProperty enum of a range
- *          Followed by (limit-start) entries of
- *            int32_t nameGroupOffset;
- *              Offset into nameGroups[] for the property value's names/aliases.
- *              If the nameGroupOffset is 0, then this is not a named value for this property.
- *              (That is, the ranges need not be dense.)
- *        If numRanges is >=0x10, then (numRanges-0x10) sorted values
- *        and then (numRanges-0x10) corresponding nameGroupOffsets follow.
- *        Values are sorted as signed integers.
- *        In this case, the set of values is dense; no nameGroupOffset will be 0.
- *
- *      For both properties and property values, ranges are sorted by their start/limit values.
- *
- * uint8_t bytesTries[];
- *
- *      This is a sequence of BytesTrie structures, byte-serialized tries for
- *      mapping from names/aliases to values.
- *      The first one maps from property names/aliases to UProperty enum constants.
- *      The following ones are indexed by property value map bytesTrieOffsets
- *      for mapping each property's names/aliases to their property values.
- *
- * char nameGroups[];
- *
- *      This is a sequence of property name groups.
- *      Each group is a list of names/aliases (invariant-character strings) for
- *      one property or property value, in the order of UCharNameChoice.
- *      The first byte of each group is the number of names in the group.
- *      It is followed by that many NUL-terminated strings.
- *      The first string is for the short name; if there is no short name,
- *      then the first string is empty.
- *      The second string is the long name. Further strings are additional aliases.
- *
- *      The first name group is for a property rather than a property value,
- *      so that a nameGroupOffset of 0 can be used to indicate "no value"
- *      in a property's sparse value ranges.
- */
-
-U_NAMESPACE_END
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/propname_data.h b/src/third_party/mozjs/intl/icu/source/common/propname_data.h
deleted file mode 100644
index f747f34..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/propname_data.h
+++ /dev/null
@@ -1,1414 +0,0 @@
-/*
- * Copyright (C) 1999-2012, International Business Machines
- * Corporation and others.  All Rights Reserved.
- *
- * file name: propname_data.h
- *
- * machine-generated by: icu/tools/unicode/c/genprops/pnamesbuilder.cpp
- */
-
-#ifndef INCLUDED_FROM_PROPNAME_CPP
-#   error This file must be #included from propname.cpp only.
-#endif
-
-U_NAMESPACE_BEGIN
-
-const int32_t PropNameData::indexes[8]={0x20,0x1130,0x3d7c,0x7895,0x7895,0x7895,0x2f,0};
-
-const int32_t PropNameData::valueMaps[1092]={
-6,0,0x39,0,0xc9,0x356,0xc9,0x36c,0xc9,0x381,0xc9,0x397,0xc9,0x3a2,0xc9,0x3c3,
-0xc9,0x3d3,0xc9,0x3e2,0xc9,0x3f0,0xc9,0x414,0xc9,0x42b,0xc9,0x443,0xc9,0x45a,0xc9,0x469,
-0xc9,0x478,0xc9,0x489,0xc9,0x497,0xc9,0x4a9,0xc9,0x4c3,0xc9,0x4de,0xc9,0x4f3,0xc9,0x510,
-0xc9,0x521,0xc9,0x52c,0xc9,0x54b,0xc9,0x561,0xc9,0x572,0xc9,0x582,0xc9,0x59d,0xc9,0x5b6,
-0xc9,0x5c7,0xc9,0x5e1,0xc9,0x5f4,0xc9,0x604,0xc9,0x61e,0xc9,0x62b,0xc9,0x642,0xc9,0x656,
-0xc9,0x66c,0xc9,0x680,0xc9,0x696,0xc9,0x6b0,0xc9,0x6c8,0xc9,0x6e4,0xc9,0x6ec,0xc9,0x6f4,
-0xc9,0x6fc,0xc9,0x704,0xc9,0x70d,0xc9,0x71a,0xc9,0x72d,0xc9,0x74a,0xc9,0x767,0xc9,0x784,
-0xc9,0x7a2,0xc9,0x7c0,0xc9,0x1000,0x1015,0x7e4,0x143,0x997,0x15a,0x2367,0xcf,0x2386,0x23b,0x24c4,
-0x251,0x251e,0x25b,0x277b,0x27d,0x2ae0,0x2bb,0x2b50,0x2c5,0x2dde,0x2f1,0x2e1c,0x2f9,0x368c,0x39c,0x370a,
-0x3a6,0x372f,0x3ac,0x3749,0x3b2,0x376a,0x3b9,0x3784,0xcf,0x37a9,0xcf,0x37cf,0x3c0,0x3855,0x3d1,0x38ce,
-0x3e4,0x2000,0x2001,0x3949,0x3f6,0x3000,0x3001,0x39d5,0,0x4000,0x400d,0x39e7,0,0x39f0,0,0x3a0a,
-0,0x3a1b,0,0x3a2c,0,0x3a42,0,0x3a4b,0,0x3a68,0,0x3a86,0,0x3aa4,0,0x3ac2,
-0,0x3ad8,0,0x3aec,0,0x7000,0x7001,0x3b02,0,0x6a8,0x12,0,1,0x12,0x20,0x6c6,
-0x49,0,1,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,
-0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,
-0x24,0x54,0x5b,0x67,0x6b,0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,
-0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x56,0x67,0x72,
-0x7f,0x8c,0x99,0xa6,0xb3,0xc0,0xcd,0xda,0xe7,0xf4,0x101,0x10e,0x11b,0x128,0x135,0x142,
-0x14f,0x15c,0x169,0x176,0x183,0x190,0x19d,0x1aa,0x1b7,0x1c4,0x1d1,0x1de,0x1eb,0x1fa,0x209,0x218,
-0x227,0x236,0x245,0x254,0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,
-0x321,0x332,0x343,0x858,1,0,0x13,0x7f3,0x804,0x815,0x829,0x840,0x858,0x86a,0x87f,0x896,
-0x8ab,0x8bb,0x8cd,0x8ea,0x906,0x918,0x935,0x951,0x96d,0x982,0x9b8,1,0,0xdd,0x9a2,0x9af,
-0x9c2,0x9ea,0xa08,0xa26,0xa3e,0xa69,0xa93,0xaab,0xabe,0xad1,0xae0,0xaef,0xafe,0xb0d,0xb24,0xb35,
-0xb48,0xb5b,0xb68,0xb75,0xb84,0xb95,0xbaa,0xbbb,0xbc6,0xbcf,0xbe0,0xbf1,0xc04,0xc16,0xc29,0xc3c,
-0xc7b,0xc88,0xc95,0xca2,0xcb7,0xce7,0xd01,0xd22,0xd4d,0xd70,0xdce,0xdf5,0xe10,0xe1f,0xe46,0xe6e,
-0xe91,0xeb4,0xede,0xef7,0xf16,0xf39,0xf5d,0xf70,0xf8a,0xfb4,0xfcc,0xff4,0x101d,0x1030,0x1043,0x1056,
-0x107d,0x108c,0x10ac,0x10da,0x10f8,0x1126,0x1142,0x115d,0x1176,0x118f,0x11b0,0x11e0,0x11ff,0x1221,0x1255,0x1282,
-0x12c7,0x12e8,0x1312,0x1333,0x135c,0x136f,0x13a2,0x13b9,0x13c8,0x13d9,0x1404,0x141b,0x144c,0x147a,0x14bd,0x14c8,
-0x1501,0x1512,0x1523,0x1530,0x1543,0x157d,0x15a1,0x15c5,0x15ff,0x1637,0x1662,0x167a,0x16a6,0x16d2,0x16df,0x16ee,
-0x170b,0x172d,0x175b,0x177b,0x17a2,0x17c9,0x17e8,0x17fb,0x180c,0x181d,0x1842,0x1867,0x188e,0x18c2,0x18ef,0x190d,
-0x1920,0x1939,0x1972,0x1981,0x19a1,0x19c3,0x19e5,0x19fc,0x1a13,0x1a40,0x1a59,0x1a72,0x1aa3,0x1acd,0x1ae8,0x1afb,
-0x1b1a,0x1b23,0x1b36,0x1b54,0x1b72,0x1b85,0x1b9c,0x1bb1,0x1be6,0x1c0a,0x1c1f,0x1c2e,0x1c41,0x1c65,0x1c6e,0x1c92,
-0x1ca9,0x1cbc,0x1ccb,0x1cd6,0x1cf7,0x1d0f,0x1d1e,0x1d2d,0x1d3c,0x1d53,0x1d68,0x1d7d,0x1db6,0x1dc9,0x1de5,0x1df0,
-0x1dfd,0x1e2b,0x1e4f,0x1e72,0x1e85,0x1ea7,0x1eba,0x1ed5,0x1ef8,0x1f1b,0x1f40,0x1f51,0x1f80,0x1fad,0x1fc4,0x1fdf,
-0x1fee,0x2019,0x2051,0x208b,0x20b9,0x20ca,0x20d7,0x20fb,0x210a,0x2126,0x2140,0x215d,0x2195,0x21aa,0x21d7,0x21f6,
-0x2224,0x2244,0x2278,0x2287,0x22b1,0x22d4,0x22ff,0x230a,0x231b,0x2336,0x235a,0x1838,1,0,0x12,0x239d,
-0x23ad,0x23c0,0x23d0,0x23e0,0x23ef,0x23ff,0x2411,0x2424,0x2436,0x2446,0x2456,0x2465,0x2474,0x2484,0x2491,0x24a0,
-0x24b4,0x18f6,1,0,6,0x24d9,0x24e4,0x24f1,0x24fe,0x250b,0x2516,0x193a,1,0,0x1e,0x2533,
-0x2542,0x2557,0x256c,0x2581,0x2595,0x25a6,0x25ba,0x25cd,0x25de,0x25f7,0x2609,0x261a,0x262e,0x2641,0x2659,0x266b,
-0x2676,0x2686,0x2694,0x26a9,0x26be,0x26d4,0x26ee,0x2704,0x2714,0x2728,0x273c,0x274d,0x2765,0x1b65,1,0,
-0x3a,0x278d,0x27b0,0x27b9,0x27c6,0x27d1,0x27da,0x27e5,0x27ee,0x2807,0x280c,0x2815,0x2832,0x283b,0x2848,0x2851,
-0x2875,0x287c,0x2885,0x2898,0x28a3,0x28ac,0x28b7,0x28d0,0x28d9,0x28e8,0x28f3,0x28fc,0x2907,0x2910,0x2917,0x2920,
-0x292b,0x2934,0x294d,0x2956,0x2963,0x296e,0x297f,0x298a,0x299f,0x29b6,0x29bf,0x29c8,0x29e1,0x29ec,0x29f5,0x29fe,
-0x2a15,0x2a32,0x2a3d,0x2a4e,0x2a59,0x2a60,0x2a6d,0x2a7a,0x2aa7,0x2abc,0x2ac5,0x1d1f,1,0,6,0x2af1,
-0x2b00,0x2b10,0x2b20,0x2b30,0x2b41,0x1d7d,1,0,0x28,0x2b5f,0x2b6b,0x2b79,0x2b88,0x2b97,0x2ba7,0x2bb8,
-0x2bcc,0x2be1,0x2bf7,0x2c0a,0x2c1e,0x2c2e,0x2c37,0x2c42,0x2c52,0x2c6e,0x2c80,0x2c8e,0x2c9d,0x2ca9,0x2cbe,0x2cd2,
-0x2ce5,0x2cf3,0x2d07,0x2d15,0x2d1f,0x2d31,0x2d3d,0x2d4b,0x2d5b,0x2d62,0x2d69,0x2d70,0x2d77,0x2d7e,0x2d94,0x2db5,
-0x2dc7,0x1fbf,1,0,4,0x2def,0x2dfa,0x2e06,0x2e10,0x1fe5,1,0,0x9f,0x2e27,0x2e34,0x2e49,
-0x2e56,0x2e65,0x2e73,0x2e82,0x2e91,0x2ea3,0x2eb2,0x2ec0,0x2ed1,0x2ee0,0x2eef,0x2efc,0x2f08,0x2f17,0x2f26,0x2f30,
-0x2f3d,0x2f4a,0x2f59,0x2f67,0x2f76,0x2f82,0x2f8c,0x2f98,0x2fa8,0x2fb8,0x2fc6,0x2fd2,0x2fe3,0x2fef,0x2ffb,0x3009,
-0x3016,0x3022,0x302f,0xbbb,0x303c,0x304a,0x3064,0x306d,0x307b,0x3089,0x3095,0x30a4,0x30b2,0x30c0,0x30cc,0x30db,
-0x30e9,0x30f7,0x3104,0x3113,0x312e,0x313d,0x314e,0x315f,0x3172,0x3184,0x3193,0x31a5,0x31b4,0x31c0,0x31cb,0x1ccb,
-0x31d8,0x31e3,0x31ee,0x31f9,0x3204,0x321f,0x322a,0x3235,0x3240,0x324b,0x3256,0x3261,0x3270,0x327f,0x328a,0x3295,
-0x32a2,0x32ad,0x32bb,0x32c6,0x32e1,0x32eb,0x32fc,0x3307,0x3316,0x3327,0x3332,0x333d,0x3348,0x3353,0x335e,0x3369,
-0x3374,0x337e,0x3389,0x3399,0x33a4,0x33b2,0x33bf,0x33ca,0x33d9,0x33e6,0x33f3,0x3402,0x340f,0x3420,0x342b,0x343b,
-0x3446,0x3459,0x3470,0x347e,0x348b,0x3496,0x34a3,0x34ae,0x34ca,0x34d5,0x34e0,0x34fd,0x350d,0x351c,0x3527,0x3532,
-0x1de5,0x353e,0x3549,0x3561,0x356c,0x3577,0x3582,0x358d,0x3598,0x35a3,0x35ae,0x35c5,0x35d0,0x35db,0x35e6,0x35f1,
-0x35fc,0x3607,0x3612,0x361d,0x3628,0x3636,0x3649,0x3655,0x3660,0x366b,0x3676,0x3681,0x26fe,1,0,6,
-0x36a6,0x36b9,0x36c9,0x36d7,0x36e8,0x36f8,0x275a,0x12,0,1,0x3722,0x3728,0x2767,0x12,0,1,
-0x3722,0x3728,0x2774,1,0,3,0x3722,0x3728,0x3761,0x278a,1,0,3,0x3722,0x3728,0x3761,
-0x27a0,1,0,0xd,0x37eb,0x37f5,0x3801,0x3808,0x3813,0x3818,0x381f,0x3826,0x382f,0x3834,0x3839,0x3849,
-0x2dc7,0x280e,1,0,0xf,0x37eb,0x3868,0x3872,0x387c,0x3887,0x2c9d,0x3891,0x389d,0x38a5,0x38ac,0x38b6,
-0x3801,0x3808,0x3818,0x38c0,0x2895,1,0,0xe,0x37eb,0x38dd,0x387c,0x38e9,0x38f6,0x3904,0x2c9d,0x390f,
-0x3801,0x3920,0x3818,0x392f,0x393d,0x2dc7,0x2935,0x36,1,2,4,8,0xe,0x10,0x20,0x3e,
-0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,
-0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,0x2533,0x2542,
-0x2557,0x256c,0x3977,0x2581,0x2595,0x396d,0x25a6,0x25ba,0x25cd,0x3988,0x25de,0x25f7,0x2609,0x399f,0x261a,0x262e,
-0x2641,0x39c8,0x2659,0x266b,0x2676,0x2686,0x3964,0x2694,0x26a9,0x26be,0x26d4,0x26ee,0x2704,0x2714,0x2728,0x273c,
-0x39be,0x274d,0x2765,0x39a9
-};
-
-const uint8_t PropNameData::bytesTries[11340]={
-0,0x15,0x6d,0xc3,0x16,0x73,0xc1,0xea,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1,
-0x64,0x50,0x69,0x10,0x64,1,0x63,0x30,0x73,0x62,0x13,0x74,0x61,0x72,0x74,0x63,
-0x60,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x61,0x13,0x69,0x67,0x69,0x74,0x81,
-1,0x61,0x24,0x73,0x69,0x1e,0x72,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,
-0x65,0x63,0x74,0x6f,0x72,0x69,3,0x62,0xc3,0x14,0x68,0x32,0x6f,0x42,0x73,0x13,
-0x70,0x61,0x63,0x65,0x5f,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x5f,0x16,
-0x72,0x64,0x62,0x72,0x65,0x61,0x6b,0xc3,0x14,0x73,0xa2,0x49,0x74,0xa4,0x2e,0x75,
-3,0x63,0xd9,0x40,0xc,0x69,0x52,0x6e,0x58,0x70,0x12,0x70,0x65,0x72,0x5c,0x13,
-0x63,0x61,0x73,0x65,0x5c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xc,
-0x12,0x64,0x65,0x6f,0x5b,0x10,0x69,1,0x63,0x3e,0x66,0x1b,0x69,0x65,0x64,0x69,
-0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x5b,0x17,0x6f,0x64,0x65,0x31,0x6e,0x61,
-0x6d,0x65,0xd9,0x40,0xb,0xa,0x69,0x84,0x70,0x19,0x70,0x30,0x74,0x36,0x75,0x10,
-0x63,0xd9,0x40,9,0x12,0x61,0x63,0x65,0x5f,1,0x63,0xd9,0x40,8,0x65,0x11,
-0x72,0x6d,0x67,0x69,0x3c,0x6c,0xa2,0x5f,0x6f,0x17,0x66,0x74,0x64,0x6f,0x74,0x74,
-0x65,0x64,0x57,0x13,0x6d,0x70,0x6c,0x65,3,0x63,0x50,0x6c,0x68,0x74,0x8a,0x75,
-0x1e,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,
-0xd9,0x40,9,0x19,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,
-6,0x1e,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,
-0x67,0xd9,0x40,7,0x1e,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,
-0x70,0x69,0x6e,0x67,0xd9,0x40,8,0x10,0x63,0xd9,0x40,7,0x62,0xc3,0x13,0x63,
-0x34,0x64,0x57,0x65,0x6e,0x66,0x10,0x63,0xd9,0x40,6,0xc2,0xa,2,0x66,0xd9,
-0x40,6,0x72,0x28,0x78,0xd9,0x70,0,0x12,0x69,0x70,0x74,0xc2,0xa,0x19,0x65,
-0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xd9,0x70,0,1,0x67,0x50,0x6e,
-1,0x73,0x3a,0x74,0x18,0x65,0x6e,0x63,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,0x13,
-0x14,0x69,0x74,0x69,0x76,0x65,0x65,1,0x6d,0x2e,0x73,0x13,0x74,0x61,0x72,0x74,
-0x73,0x19,0x65,0x6e,0x74,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x73,3,0x63,0x66,
-0x65,0x72,0x69,0x98,0x72,0x19,0x61,0x69,0x6c,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,
-0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,
-0x73,0xc3,0x11,0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e,
-0x69,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,
-0x1d,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,
-0x40,0xa,0x6d,0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64,
-0x69,0x63,0x61,0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,
-0xc3,9,0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,
-0x63,0x74,0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,
-0x65,0x72,0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,
-0x12,0x79,0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,
-0x64,0xa2,0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,
-0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,
-0x74,0x6d,1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,
-0x68,0x65,0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,
-1,0x63,0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,
-0x13,0x6e,0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,
-0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,
-0xd8,0x40,5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,
-0x61,0x72,0x51,1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73,
-0x2c,0x74,0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,
-0x73,0x38,0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,
-0x6e,0x74,0x61,0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,
-0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,
-0xfd,0x69,0xa2,0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98,
-0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63,
-0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11,
-0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74,
-0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63,
-0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,
-0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61,
-0x6b,0xc3,8,1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f,
-0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1,
-0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,
-0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,
-0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,
-0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-0x43,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a,
-0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72,
-0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,
-0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65,
-0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,
-0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10,
-0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,
-0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2,
-0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,
-0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65,
-0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72,
-0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65,
-0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,
-0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13,
-0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0x72,0x62,0xa2,0x57,0x63,0xa2,0xa4,0x64,
-0xa4,0x71,0x65,1,0x61,0x36,0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72,
-0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68,
-0xc3,4,3,0x67,0x44,0x68,0x4a,0x6c,0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,
-0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10,0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,
-1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20,0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,
-0x75,0x6d,0x79,3,0x63,0xc3,0,0x69,0x30,0x6c,0x90,0x6d,0x10,0x67,0xd9,0x40,
-1,0x11,0x64,0x69,1,0x63,0x54,0x6d,0x26,0x14,0x69,0x72,0x72,0x6f,0x72,1,
-0x65,0x38,0x69,0x16,0x6e,0x67,0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,1,0x10,0x64,
-0x27,0x24,1,0x6c,0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,
-0x73,0xc3,0,2,0x61,0x32,0x6b,0xc3,1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,
-0x6e,0x6b,0x7b,6,0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,
-0x30,0x6b,0x36,0x6c,0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,
-0x66,0x91,0x18,0x61,0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,
-0x6c,0x6e,0x7e,0x74,0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,
-0x89,0x12,0x61,0x73,0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,
-0x14,0x6f,0x6c,0x64,0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,
-0x64,0x87,0x1c,0x66,0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,
-0x91,0x18,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,
-0x78,0x33,0x61,0x2e,0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,
-0x65,3,0x64,0x83,0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,
-0x76,0x65,0x65,0x15,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,
-0x6f,0x72,0x61,0x62,0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,
-0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,
-0x63,0xc3,2,3,0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,
-0x68,0x29,2,0x63,0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,
-0x64,0x2d,0x1d,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,
-0x65,0xc3,3,0x15,0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,
-0x6c,0x65,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,
-0x15,0x63,0x72,0x69,0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,
-0x22,0x11,0x65,0x73,0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,
-0x22,0x12,0x72,0x75,0x65,0x23,0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,
-1,0x69,0x24,0x72,0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,
-0x72,0x6c,0x61,0x79,0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,
-0x6c,0x74,0x6e,3,0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,
-0x19,0x74,0x72,0x65,0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,
-0x31,0x18,0x6e,0x61,0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,
-0x66,0x74,0xa3,0xe0,0x61,0x5c,0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,
-1,0x6f,0x26,0x73,0xa3,0xf0,0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,
-0x70,0x74,0xa3,0xf0,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,
-2,0x61,0x74,0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,
-0x13,0x65,0x6c,0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,
-0x6f,0x76,0x65,0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,
-0x72,0xa3,0xd8,0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,
-0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,
-0xa2,0xdc,2,0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,
-0xdc,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,
-0xa3,0xda,0x11,0x63,0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,
-0x64,0x39,0x10,0x31,0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,
-0x45,0x39,0x47,0x30,0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,
-0xa3,0x67,0x37,0xa3,0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,
-0xa3,0x81,0x3a,2,0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,
-0x35,0x53,0x36,0x55,0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,
-0x33,0x4f,0x34,0x51,6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,
-0x5d,0x31,0x5f,0x32,0x61,0x10,0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,
-0x6f,0x13,0x75,0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,
-0xe9,0x13,0x62,0x6f,0x76,0x65,0xa3,0xea,0xa,0x6e,0xaf,0x72,0x52,0x72,0x44,0x73,
-0x98,0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,
-0x33,0x22,1,0x69,0x2c,0x6c,1,0x65,0x3d,0x6f,0x3f,0x18,0x67,0x68,0x74,0x74,
-0x6f,0x6c,0x65,0x66,0x74,0x22,1,0x65,0x34,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,
-0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,0x30,0x1e,0x65,
-0x67,0x6d,0x65,0x6e,0x74,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,
-0x88,0x6f,0xa2,0x46,0x70,2,0x61,0x50,0x64,0x70,0x6f,0x11,0x70,0x64,0x1f,0x69,
-0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x61,0x74,0x41,
-0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,
-0x72,0x2f,0x10,0x66,0x41,1,0x6f,0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,
-0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,
-0x65,0x72,0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,0x35,0x61,0x8c,0x62,0xa2,0x50,0x63,
-0xa2,0x61,0x65,0xa2,0x72,0x6c,0x20,1,0x65,0x2c,0x72,1,0x65,0x37,0x6f,0x39,
-0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,0x74,0x20,1,0x65,0x34,0x6f,0x16,
-0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,
-0x67,0x37,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,0x63,1,0x6c,0x30,
-0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,0x65,0x72,0x3b,0x2e,
-1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,0x65,0x75,0x74,0x72,
-0x61,0x6c,0x45,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,
-0x61,0x72,0x61,0x74,0x6f,0x72,0x2d,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,
-0x72,0x6f,0x70,0x65,0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,
-0x69,0x6e,0x61,0x74,0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,
-0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x27,0,0x14,0x6c,0xc6,0xab,0x72,0xc3,0xb,
-0x75,0xc0,0xd7,0x75,0x92,0x76,0xa2,0x7d,0x79,0x10,0x69,2,0x6a,0x3c,0x72,0x68,
-0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,
-0xa2,0x74,0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,2,0x63,
-0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,0x61,0x6e,0x61,0x64,0x69,
-0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x73,0x79,0x6c,
-0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,
-0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa3,0xad,0x15,0x61,0x72,0x69,
-0x74,0x69,0x63,0xa3,0x78,2,0x61,0x36,0x65,0x7a,0x73,0xa2,0x6c,0x12,0x73,0x75,
-0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,
-0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73,0x75,0x70,0x70,0x6c,
-0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19,0x74,0x69,0x63,0x61,
-0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65,0x78,0x74,0xa2,0xaf,
-0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,0x72,0xa2,0xa1,0x73,0xa2,0xc6,
-0x74,4,0x61,0x68,0x65,0xa2,0x74,0x68,0xa2,0x77,0x69,0xa2,0x7f,0x72,0x1c,0x61,
-0x6e,0x73,0x70,0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xcf,3,0x67,0x34,0x69,0x5a,0x6b,0xa2,0x46,
-0x6d,0x11,0x69,0x6c,0x49,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,
-0x67,0xa3,0x62,0x13,0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,
-0x5e,0x78,0x16,0x75,0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,
-0x12,0x69,0x65,0x74,0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x13,0x6c,0x75,0x67,0x75,
-0x4b,0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,1,0x62,0x32,0x66,
-0x14,0x69,0x6e,0x61,0x67,0x68,0xa3,0x90,0x13,0x65,0x74,0x61,0x6e,0x57,1,0x65,
-0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,0x69,0xa2,0xc0,0x1d,0x6e,
-0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xc0,0x13,
-0x6a,0x61,0x6e,0x67,0xa3,0xa3,7,0x6f,0xc1,0x12,0x6f,0x54,0x70,0x68,0x75,0xa2,
-0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b,0x17,0x6f,0x74,0x69,0x6e,
-0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,0x61,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,
-0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,0xa3,0x56,0x12,0x63,
-0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x73,0x2d,1,0x6e,0xa2,0xab,0x70,3,0x61,0xa2,0x4f,0x65,0xa2,0x71,
-0x6d,0xa2,0x91,0x70,1,0x6c,0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,
-0x50,0x72,0x1e,0x79,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,
-0x65,0x61,1,0x61,0xa3,0x6d,0x62,0xa3,0x6e,2,0x61,0x40,0x6d,0x56,0x70,0x19,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x14,0x72,0x72,0x6f,
-0x77,0x73,1,0x61,0xa3,0x67,0x62,0xa3,0x68,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,
-0x61,0x74,0x69,0x63,0x61,0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,
-0x6a,0x10,0x72,1,0x61,0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,
-0x6e,0x64,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,
-0x73,0x75,0x62,0x73,0x1b,0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,
-0x73,0xa3,0x6a,0x15,0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,
-0xa2,0xdb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,0x61,0x5a,0x68,0x84,
-0x69,0xa2,0x41,0x6d,0x16,0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,
-0x76,0x16,0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,
-0x72,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,
-0xa3,0xac,0x10,0x61,1,0x72,0x2e,0x76,0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,
-0x64,0x61,0xa3,0xd9,0x14,0x6e,0x68,0x61,0x6c,0x61,0x51,0x6c,0xa2,0x94,0x6d,0xa4,
-0x49,0x6e,0xa6,0xf2,0x6f,0xa8,0x19,0x70,3,0x68,0x4c,0x6c,0xa2,0x65,0x72,0xa2,
-0x6f,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
-0x71,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,
-0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,
-0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
-0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,
-0x73,0x74,0x6f,0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,
-0x61,0xa3,0x96,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,
-0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,
-0xa3,0x4e,4,0x61,0x54,0x65,0xa2,0x5c,0x69,0xa2,0x73,0x6f,0xa2,0x9e,0x79,1,
-0x63,0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,
-0x6f,0x55,0x74,0x11,0x69,0x6e,1,0x31,0x78,0x65,0x11,0x78,0x74,4,0x61,0x52,
-0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0x13,0x6e,0x64,0x65,0x64,3,0x61,
-0x30,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x26,0x18,0x64,0x64,0x69,0x74,0x69,
-0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d,
-0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65,
-0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d,
-0x2e,0x6e,0x34,0x73,0x10,0x75,0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x13,0x65,0x61,
-0x72,0x62,1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,
-0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,
-0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,5,0x6f,0x5b,0x6f,0x58,0x75,
-0xa2,0x44,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65,0x78,0x74,1,0x61,
-0xa3,0xb6,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xb6,1,0x64,0x32,0x6e,0x15,
-0x67,0x6f,0x6c,0x69,0x61,0x6e,0x6b,0x14,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x3c,
-0x74,0x19,0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,
-0x74,0x74,0x65,0x72,0x73,0x2d,0x12,0x73,0x69,0x63,0xa2,0x5c,0x18,0x61,0x6c,0x73,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x61,0xa2,0x9b,0x65,0xa4,9,0x69,1,
-0x61,0xa2,0x8f,0x73,0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,
-0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,
-0x8f,0x61,0xa2,0x66,0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,
-0x75,0x73,2,0x6d,0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,
-0x6c,0x81,0x11,0x61,0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,
-0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,
-0xa3,0x73,0x10,0x6f,0xa3,0xd8,3,0x68,0xa2,0x4f,0x6c,0xa2,0x5b,0x6e,0xa2,0x60,
-0x74,0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,
-0x72,0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,
-0x74,0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,
-0x72,0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,
-0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,0x13,0x6a,0x6f,0x6e,0x67,0xa2,0xaa,
-0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xaa,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,
-0x13,0x64,0x61,0x69,0x63,0xa3,0xc6,1,0x65,0x62,0x72,0x14,0x6f,0x69,0x74,0x69,
-0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,
-0xa3,0xd7,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x74,0x65,0x69,0x6d,
-0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e,0x73,
-0x69,0x6f,0x6e,0x73,0xa3,0xd5,4,0x62,0x21,0x65,0x40,0x6b,0x50,0x6f,0x54,0x75,
-0x18,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0x7b,0x16,0x77,0x74,0x61,0x69,
-0x6c,0x75,0x65,0xa3,0x8b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b,0x21,
-5,0x70,0x2e,0x70,0x36,0x72,0x6a,0x73,0x14,0x6d,0x61,0x6e,0x79,0x61,0xa3,0x7a,
-0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61,0x63,0x74,0x65,0x72,
-0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85,0x12,0x69,0x79,0x61,
-0x47,0x63,0x9a,0x67,0x9c,0x6c,1,0x63,0x80,0x64,3,0x69,0x3a,0x70,0x46,0x73,
-0x54,0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0xbf,0x14,0x74,0x61,0x6c,0x69,0x63,
-0xa3,0x58,0x15,0x65,0x72,0x73,0x69,0x61,0x6e,0xa3,0x8c,0x1a,0x6f,0x75,0x74,0x68,
-0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x13,0x68,0x69,0x6b,0x69,0xa3,0x9d,
-0x10,0x72,0x85,0x12,0x68,0x61,0x6d,0x65,0x67,0xc2,0x93,0x67,0xa2,0x94,0x68,0xa4,
-0x1c,0x69,0xa4,0xee,0x6a,0xa6,0x6b,0x6b,1,0x61,0x5a,0x68,1,0x61,0x3e,0x6d,
-0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x16,0x72,
-0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,3,0x69,0x38,0x6e,0x40,0x74,0x9c,0x79,
-0x13,0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,
-0x62,0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12,0x73,0x75,0x70,0xa2,0xcb,
-0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x75,0x6e,0xa3,0x42,0x11,
-0x78,0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,
-0x61,0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,
-0x63,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,
-0xa3,0x6b,4,0x65,0x58,0x6c,0xa2,0x55,0x6f,0xa2,0x5d,0x72,0xa2,0x61,0x75,1,
-0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,0x61,0x74,0x69,
-0x45,1,0x6e,0x70,0x6f,1,0x6d,0x4e,0x72,0x13,0x67,0x69,0x61,0x6e,0x5a,0x12,
-0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x87,0x1a,
-0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73,0x8d,0x1e,0x65,0x72,0x61,
-0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x61,0x67,
-0x6f,0x6c,0x69,0x74,0x69,0x63,0xa3,0x88,0x13,0x74,0x68,0x69,0x63,0xa3,0x59,0x12,
-0x65,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78,0x74,0x6e,0x14,0x65,0x6e,0x64,
-0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,0x69,0x63,0x31,2,0x61,0xa2,
-0x48,0x65,0xa2,0xc8,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,
-0x10,0x68,1,0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
-0xa3,0x4b,1,0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,
-0x73,0xa3,0x4c,0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,
-0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,1,0x6c,0xa2,0x49,0x6e,1,0x67,
-0x2e,0x75,0x12,0x6e,0x6f,0x6f,0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,
-0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,
-0x6d,0x70,0x61,0x74,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,
-0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,
-0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,
-0x64,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,
-0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,
-0x72,0x6d,0x73,0xa3,0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,0x13,0x62,0x72,0x65,
-0x77,0x37,3,0x64,0x4a,0x6d,0x8e,0x6e,0xa2,0x44,0x70,0x13,0x61,0x65,0x78,0x74,
-0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0x2b,1,0x63,0x99,0x65,0x1c,0x6f,
-0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x64,0x65,0x73,0x63,0x72,0x1f,0x69,0x70,0x74,
-0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x73,0x99,0x1c,0x70,
-0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0xba,1,0x64,
-0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,
-0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,0x13,0x6c,0x61,0x76,0x69,
-0xa3,0xbe,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,
-0xa3,0xb2,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,
-0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x61,0xa2,
-0xc6,0x62,0xa4,0xdc,0x63,0xa6,0x9a,0x64,0xaa,0xcd,0x65,3,0x67,0x8e,0x6d,0xa2,
-0x49,0x6e,0xa2,0x50,0x74,0x15,0x68,0x69,0x6f,0x70,0x69,0x63,0x5e,1,0x65,0x40,
-0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x86,
-0x11,0x78,0x74,0xa2,0x85,1,0x61,0xa3,0xc8,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,
-0x85,0x10,0x61,0xa3,0xc8,0x10,0x79,0x1f,0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,
-0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xc2,0x16,0x6f,0x74,0x69,0x63,0x6f,
-0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,0x61,0x5a,0x63,0x9e,
-0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x75,0x70,0xa2,
-0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68,0x61,
-0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0xc3,0x13,0x72,0x69,
-0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3,0x11,
-0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x61,0x6e,0x64,0x6d,
-0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,5,0x72,0x91,0x72,0x38,0x73,0xa2,0x87,0x76,
-0x14,0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,
-0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2,
-0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
-0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,
-0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,
-0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,
-0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,
-0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x65,0x9a,0x6c,0xa2,0x48,
-0x6e,0x14,0x63,0x69,0x65,0x6e,0x74,1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,
-0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,
-0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x7e,0x1a,0x67,0x65,0x61,0x6e,0x6e,
-0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,
-0x65,0x74,0x69,0x63,0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,
-0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,
-0x69,0x63,0x61,0x6c,0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,
-6,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,0x1b,0x7a,0x61,0x6e,
-0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,0x61,0x6c,0x73,0x79,
-0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,0x64,0x72,0x61,0x77,
-0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,0x65,0x78,0x74,0xa2,
-0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,0x68,0x40,0x69,0x12,
-0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x73,0x93,0x11,0x6d,
-0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,0x14,0x69,0x6e,0x65,
-0x73,0x65,0xa3,0x81,0x61,0x42,0x65,0xa2,0x41,0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,
-0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,0x34,0x6d,0x40,0x73,0x66,0x74,0x11,
-0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,
-0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
-0xca,0x16,0x69,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,0x69,
-0x41,5,0x6f,0xc1,0x2b,0x6f,0xa2,0x4f,0x75,0xa2,0xef,0x79,1,0x70,0x90,0x72,
-0x14,0x69,0x6c,0x6c,0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,
-0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,
-0x11,0x78,0x74,2,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x65,0x13,0x6e,0x64,0x65,0x64,
-1,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,0x6c,
-0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x89,0x70,0xa2,0x94,
-0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,0x6d,
-0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x53,0x70,0x15,0x61,
-0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,0x46,
-0x68,0x86,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,0x61,
-0x72,0x6b,0x73,0x2e,1,0x66,0xa4,0xd5,0x73,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,
-0x65,0x6e,0x74,0xa3,0x83,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,
-0x11,0x6f,0x6e,0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,
-0x6f,0x72,0x6d,0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,
-0x72,0x65,0x73,0x83,0x12,0x74,0x69,0x63,0xa3,0x84,1,0x6e,0x3e,0x72,0x1b,0x72,
-0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,
-0x6f,0x72,0x6d,0xa2,0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,
-0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,
-0x61,0xa2,0xd4,0x68,0xa2,0xeb,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x88,0x65,0xa2,
-0x7e,0x72,0xa2,0x8b,0x73,0xa2,0x9d,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,
-0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,
-0x6e,0x73,0x69,0x6f,0x6e,3,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,
-0xa3,0xd1,0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,
-0x44,0x64,0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,
-0x70,0xa3,0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,
-0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,
-0x78,0x74,3,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x19,
-0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,
-0x65,0x6e,0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,
-0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,
-0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,1,0x6e,0x2e,0x72,0x12,0x69,0x61,0x6e,0xa3,
-0xa8,0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,
-0x63,1,0x61,0x30,0x65,0x14,0x72,0x6f,0x6b,0x65,0x65,0x61,1,0x6b,0x26,0x6d,
-0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,2,0x65,0x44,0x69,0x84,0x6f,0x13,0x6d,0x69,
-0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,1,0x73,0x50,0x76,
-0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,0x14,
-0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,0x5a,1,0x61,
-0x30,0x6e,0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69,0x74,0x69,0x63,
-0x61,0x6c,0x73,0x2e,1,0x66,0x2c,0x73,0x11,0x75,0x70,0xa3,0x83,0x18,0x6f,0x72,
-0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,
-0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,0x64,0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,
-0x61,0x6c,0x33,2,0x61,0x40,0x62,0x37,0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,
-0x13,0x72,0x65,0x61,0x6b,0x37,0x10,0x72,0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,
-0x38,0x71,0x46,0x75,1,0x62,0x3d,0x70,0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,
-0x6c,0x39,0x11,0x6c,0x6c,0x39,1,0x72,0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,
-0x65,0x72,0x74,0x40,0x13,0x69,0x63,0x61,0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,
-0x69,1,0x6e,0x36,0x73,0x10,0x6f,0x30,0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,
-0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,0x2f,2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,
-0x24,0x12,0x70,0x61,0x74,0x25,0x10,0x6e,0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,
-0x23,0x13,0x72,0x63,0x6c,0x65,0x27,0x11,0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,
-0x72,0x10,0x61,0x2c,0x14,0x63,0x74,0x69,0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,
-0x6c,0x29,0x11,0x6e,0x74,0x2b,4,0x61,0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,
-0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,0x17,0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,
-0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,
-0x66,0x77,0x69,0x64,0x74,0x68,0x25,0x20,1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,
-0x61,0x6c,0x21,0x28,0x13,0x72,0x72,0x6f,0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,
-0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,0x7a,2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,
-0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,
-0x11,0x61,0x63,1,0x65,0x32,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,
-0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,
-0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,
-1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x23,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,
-0xa2,0x47,0x70,8,0x66,0x14,0x66,0x5b,0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,
-0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,
-0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,
-0x74,0x6f,0x72,0x3d,2,0x64,0x33,0x6c,0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,
-0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,
-0x72,3,0x6c,0x38,0x6e,0x42,0x70,0x4c,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,
-0x14,0x65,0x74,0x74,0x65,0x72,0x2b,0x14,0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,
-0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,
-0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,
-0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,0x63,0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,
-0x69,0x66,0x69,0x65,0x72,1,0x6c,0x30,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,
-0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x17,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,
-0x51,1,0x69,0x2e,0x6f,0x13,0x72,0x6d,0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,
-0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,
-0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,0x27,0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,
-0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,
-0x19,0x74,0x74,0x65,0x72,0x6e,0x75,0x6d,0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,
-0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,
-0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,
-0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,
-0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,0x74,0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,
-0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,
-0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,
-0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,
-0x30,0x65,0x4a,0x69,0x12,0x67,0x69,0x74,0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x47,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,
-0x6d,0x62,0x65,0x72,0x33,0,0x12,0x6d,0xc0,0xf2,0x73,0x92,0x73,0x4e,0x74,0xa2,
-0x47,0x77,0xa2,0x63,0x79,0xa2,0x64,0x7a,1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,
-0x8b,0x11,0x69,0x6e,0x85,4,0x61,0x40,0x65,0x4a,0x68,0x60,0x77,0x64,0x79,0x16,
-0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x10,0x64,0x62,0x11,0x68,0x65,0x65,1,
-0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67,0x11,0x69,0x6e,0x6b,
-0x15,0x61,0x73,0x68,0x6b,0x61,0x66,0x6d,1,0x61,0x4e,0x65,1,0x68,0x28,0x74,
-0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62,0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,
-0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11,0x61,0x77,0x79,1,0x65,0x32,0x75,0x11,
-0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,0x68,0x7a,1,0x62,0x34,0x77,0x16,0x69,
-0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,0x61,0x72,0x72,0x65,0x65,0x7d,0x6d,0x6a,
-0x6e,0x7c,0x70,0xa2,0x4b,0x71,0xa2,0x4b,0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,
-0x6e,0x67,0x79,0x61,0x79,0x65,0x68,0x93,1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,
-0x65,0x64,0x70,0x65,0x61,1,0x65,0x28,0x69,0x10,0x6d,0x53,0x11,0x65,0x6d,0x51,
-2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,0x6f,0x10,0x6e,0x55,
-0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,0x21,0x10,0x6e,0x57,
-0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,0x66,0x7b,0x66,0x42,
-0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,0x4c,0x12,0x61,0x64,0x68,
-0x4f,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,0x6d,0x6b,0x61,
-0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10,0x68,0x33,0x10,
-0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,0x40,0x65,0x3e,1,0x68,
-0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,0x43,1,0x68,0x3b,0x6d,
-0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,0x3d,2,0x61,0x3a,
-0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,0x4b,1,0x66,0x47,
-0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2c,0x62,0x4c,0x64,0x86,0x65,
-0x31,1,0x69,0x38,0x6c,1,0x61,0x28,0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,
-0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61,0x73,0x6b,
-0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29,0x74,0x10,
-0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68,0x2f,7,
-0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a,0x6f,0x69,
-0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69,0x6e,0x69,
-0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x2b,
-0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f,0x69,0x6e,
-0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,
-0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0,0x13,0x6e,
-0xc0,0xcd,0x73,0x46,0x73,0x42,0x75,0x72,0x77,0x7e,0x78,0x96,0x7a,0x10,0x77,0x58,
-0x14,0x73,0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67,0x53,0x70,0x28,0x75,0x30,
-0x79,0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,
-0x53,0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a,0x5d,0x6f,0x17,0x72,0x64,
-0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,
-0xa2,0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,
-0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,
-0x5b,0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72,0x69,0x63,0x47,0x15,0x78,
-0x74,0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x45,
-0x10,0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,
-0x72,0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,
-0x69,0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,
-0x7b,0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,
-0x61,0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d,4,0x32,0x5f,0x33,0x61,
-0x65,0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,
-0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,
-0x18,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d,0x3e,1,0x66,0x3e,0x73,
-0x11,0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,
-0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c,0x63,0x74,0x65,0x76,0x67,
-1,0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64,0x43,0x61,0x40,0x62,0x70,
-0x63,0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,2,0x69,
-0x23,0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x24,0x17,0x70,
-0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,
-0x2d,0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,
-0x6f,0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1,0x65,0x2a,0x6f,0x11,0x74,
-0x68,0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,
-0x69,0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,
-0x6e,0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,
-0x6c,0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74,0x61,0x72,0x74,0x65,0x72,
-0x6b,1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,
-0x51,0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,
-0x6a,0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61,0x38,0x75,0x18,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65,0x6e,0x74,0x68,0x65,0x73,
-0x69,0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72,0x65,0x74,0x75,0x72,0x6e,
-0x35,0x10,0x78,0x36,0x18,0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,1,
-0x64,0x42,0x6e,1,0x6f,0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,
-0x6e,0x65,0x21,1,0x65,0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,
-0x69,0x6d,0x61,0x6c,0x23,0,0x18,0x6e,0xc2,0xe3,0x74,0xc1,0x1f,0x77,0x53,0x77,
-0x7e,0x78,0x96,0x79,0xa2,0x45,0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,
-0x7a,0x7a,0xa3,0x67,0x11,0x78,0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x30,0x6d,
-0x34,0x73,0x11,0x79,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,
-1,0x61,0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa3,0x92,1,0x70,
-0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65,0x6f,0x9b,0x10,0x69,0x72,0x11,0x69,
-0x69,0x73,0x74,0x4a,0x75,0xa2,0xaf,0x76,1,0x61,0x2c,0x69,0x11,0x73,0x70,0xa3,
-0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,5,0x67,0x30,0x67,0x5c,0x68,0x60,
-0x69,2,0x62,0x2e,0x66,0x3e,0x72,0x10,0x68,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,
-0x12,0x74,0x61,0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,
-0x10,0x61,1,0x61,0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,
-0x56,0x66,0x11,0x6e,0x67,0x99,6,0x6c,0x1c,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,
-0x10,0x74,0xa3,0x7f,1,0x65,0x89,0x75,0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,
-0x67,0x10,0x67,0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,
-0xa3,0x99,1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,
-0x67,0x75,2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,
-0x89,0x12,0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,
-0x75,0x68,0x11,0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,
-0xa3,0x67,0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0,0xd4,0x71,
-0xa2,0xa6,0x72,0xa2,0xab,0x73,6,0x69,0x52,0x69,0x6e,0x6f,0x84,0x75,0x9e,0x79,
-1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e,
-0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72,
-0x69,0x95,0x10,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61,0x6c,0x61,0x63,0x11,
-0x72,0x61,0xa2,0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,
-0x64,0xa2,0x71,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,
-0x68,1,0x61,0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,
-0x12,0x61,0x64,0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,
-0x75,0x10,0x72,0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,
-0x26,0x72,0xa3,0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,
-0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,
-3,0x65,0x3e,0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,
-0x63,0x61,0x13,0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,0x11,0x72,
-0x6f,0xa3,0x5d,0x6e,0xa2,0x4c,0x6f,0xa2,0x79,0x70,4,0x61,0x38,0x65,0x3e,0x68,
-0x44,0x6c,0x94,0x72,0x11,0x74,0x69,0xa3,0x7d,0x11,0x6c,0x6d,0xa3,0x90,0x11,0x72,
-0x6d,0xa3,0x59,3,0x61,0x3e,0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,
-0x69,0x61,0x6e,0xa3,0x5b,0x10,0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,
-0x69,0xa3,0x7a,0x70,0xa3,0x7b,0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,0x11,0x72,0x64,
-0xa3,0x5c,4,0x61,0x38,0x62,0x3e,0x65,0x44,0x6b,0x52,0x73,0x11,0x68,0x75,0xa3,
-0x96,0x11,0x72,0x62,0xa3,0x8e,0x11,0x61,0x74,0xa3,0x8f,0x16,0x77,0x74,0x61,0x69,
-0x6c,0x75,0x65,0x97,1,0x67,0x2e,0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,
-0xa3,0x84,3,0x67,0x3e,0x6c,0x50,0x72,0xa2,0x52,0x73,0x11,0x6d,0x61,0x84,0x12,
-0x6e,0x79,0x61,0x85,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,0x6d,0x5b,1,
-0x63,0x7c,0x64,3,0x69,0x3a,0x70,0x44,0x73,0x50,0x74,0x14,0x75,0x72,0x6b,0x69,
-0x63,0xa3,0x58,0x14,0x74,0x61,0x6c,0x69,0x63,0x5d,0x15,0x65,0x72,0x73,0x69,0x61,
-0x6e,0x9b,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,
-1,0x68,0x26,0x6b,0xa3,0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d,2,0x69,0x2c,0x6b,
-0x30,0x79,0x10,0x61,0x5f,0x11,0x79,0x61,0x5f,0x10,0x68,0xa3,0x58,0x68,0xc2,0x44,
-0x6b,0xc1,0x82,0x6b,0xa2,0xa3,0x6c,0xa4,0x14,0x6d,7,0x6f,0x30,0x6f,0x44,0x72,
-0x64,0x74,0x6a,0x79,1,0x61,0x28,0x6d,0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,
-0x59,1,0x6e,0x2a,0x6f,0x10,0x6e,0xa3,0x72,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,
-0x61,0x6e,0x57,0x11,0x6f,0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x61,0x34,0x65,
-0x70,0x69,0xa2,0x60,0x6c,0x11,0x79,0x6d,0x55,2,0x6c,0x2e,0x6e,0x3a,0x79,0x10,
-0x61,0xa3,0x55,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x64,0x26,0x69,0xa3,
-0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,2,0x65,0x72,0x6e,0x84,0x72,1,
-0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,
-0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x56,0x15,0x75,0x72,0x73,
-0x69,0x76,0x65,0xa3,0x8d,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa3,0x73,
-0x10,0x64,0xa3,0x8c,0x11,0x61,0x6f,0xa3,0x5c,5,0x6f,0x14,0x6f,0x30,0x70,0x36,
-0x74,0x11,0x68,0x69,0xa3,0x78,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,
-0x61,0x2e,0x68,0x98,0x6e,0x11,0x64,0x61,0x4b,4,0x69,0x3c,0x6c,0x44,0x6e,0x48,
-0x74,0x56,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,0x78,
-0x10,0x69,0xa3,0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,0x6b,
-0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,0x8d,
-2,0x61,0x2e,0x6d,0x40,0x6f,0x10,0x6a,0xa3,0x9d,0x10,0x72,0x92,0x15,0x6f,0x73,
-0x68,0x74,0x68,0x69,0x93,1,0x65,0x24,0x72,0x4f,0x10,0x72,0x4f,4,0x61,0x5c,
-0x65,0x90,0x69,0xa0,0x6f,0xa2,0x59,0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2,0x6c,
-0x11,0x61,0x6e,0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2,0x6e,
-0x42,0x6f,0x46,0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53,0x10,
-0x6e,0x53,0x10,0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52,0x11,
-0x68,0x61,0xa3,0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10,0x62,
-0x80,0x10,0x75,0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x12,0x61,0x72,0x62,0x83,
-0x11,0x6d,0x61,0xa3,0x8b,0x68,0x60,0x69,0xa2,0x6e,0x6a,2,0x61,0x30,0x70,0x44,
-0x75,0x11,0x72,0x63,0xa3,0x94,0x11,0x76,0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73,0x65,
-0xa3,0x4e,0x11,0x61,0x6e,0xa3,0x69,6,0x6c,0x1a,0x6c,0x34,0x6d,0x3a,0x72,0x40,
-0x75,0x11,0x6e,0x67,0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x11,0x6e,0x67,0xa3,0x4b,
-0x11,0x6b,0x74,0x8d,0x61,0x3a,0x65,0x70,0x69,0x11,0x72,0x61,0x48,0x13,0x67,0x61,
-0x6e,0x61,0x49,0x10,0x6e,0x42,5,0x73,0xc,0x73,0xa3,0x49,0x74,0xa3,0x4a,0x75,
-0x12,0x6e,0x6f,0x6f,0x77,0x67,0x28,0x69,0x43,0x6f,0x77,0x44,0x11,0x75,0x6c,0x45,
-0x11,0x62,0x72,0x46,0x11,0x65,0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,
-0x6c,0x5d,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,
-0xa3,0x74,2,0x64,0x66,0x68,0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
-0x6e,0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,
-0x7d,0x13,0x6c,0x61,0x76,0x69,0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,
-0x74,0x65,0x64,0x23,0x64,0xb4,0x64,0xa2,0x5a,0x65,0xa2,0x7b,0x67,4,0x65,0x62,
-0x6c,0x7a,0x6f,0x8e,0x72,0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,
-0x13,0x75,0x6b,0x68,0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,
-0x3f,0x10,0x6f,1,0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,
-0x61,0x67,0x90,0x15,0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,0x11,0x74,0x68,0x3a,0x11,
-0x69,0x63,0x3b,1,0x61,0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,
-0x6e,0xa3,0x89,2,0x65,0x30,0x73,0x56,0x75,0x11,0x70,0x6c,0xa3,0x87,1,0x73,
-0x38,0x76,0x10,0x61,0x34,0x15,0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,
-0x65,0x74,0x33,0x11,0x72,0x74,0x33,2,0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,
-0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,
-0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,
-0x70,0x68,0x73,0xa3,0x47,0x11,0x62,0x61,0xa3,0x88,0x61,0xa2,0x8e,0x62,0xa2,0xbe,
-0x63,6,0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,
-0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,
-0x6f,0x74,0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,
-0x6f,0x6e,0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,
-0x65,0x61,0x30,0x68,0x7c,0x69,0x11,0x72,0x74,0xa3,0x43,2,0x6b,0x38,0x6e,0x3c,
-0x72,0x10,0x69,0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,0x10,0x6d,0xa3,0x76,1,0x61,
-0x24,0x73,0x71,0x1d,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,0x6e,
-0x61,0x6c,0x71,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,0x65,0x2d,
-1,0x6b,0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,2,0x66,0x44,0x72,0x4a,
-0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,0x73,0x74,0x61,0x6e,0xa3,0x75,
-0x11,0x61,0x6b,0xa3,0x93,1,0x61,0x3e,0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,
-0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,0x10,0x62,0x24,0x11,0x69,0x63,0x25,5,0x6f,
-0x36,0x6f,0x4e,0x72,0x5e,0x75,1,0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,0x64,
-0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,0x73,0x65,0x8f,0x11,0x70,0x6f,0x2a,0x13,0x6d,
-0x6f,0x66,0x6f,0x2b,0x10,0x61,1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,
-0xa2,0x41,0x11,0x6d,0x69,0xa3,0x41,0x61,0x2e,0x65,0x74,0x6c,0x11,0x69,0x73,0xa1,
-3,0x6c,0x3a,0x6d,0x48,0x73,0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,
-0x10,0x69,0x9c,0x13,0x6e,0x65,0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,
-0x82,0x10,0x73,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,0x6c,
-0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,0x6d,
-0x6f,0x25,0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,0x79,
-0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x29,
-0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,0x1a,
-0x74,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,0x61,
-0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,0x11,
-0x65,0x73,0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,
-0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,
-0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,
-0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,
-9,0x72,0x31,0x72,0x34,0x73,0x5c,0x74,0x31,0x76,0x33,0x78,0x10,0x78,0x21,1,
-0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,
-0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,0x61,0x63,0x69,0x6e,0x67,0x6d,
-0x61,0x72,0x6b,0x35,0x63,0x44,0x65,0x5c,0x6c,0x6a,0x6f,0x78,0x70,1,0x70,0x37,
-0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,
-0x6e,0x74,0x72,0x6f,0x6c,0x23,0x10,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,0x27,0x28,
-1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,9,0x6e,
-0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,
-0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,
-0x14,0x65,0x74,0x74,0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,
-0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,
-0x10,0x70,0x2f,0x10,0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,
-0x64,0x66,0x72,0x6c,2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,
-0x10,0x74,0x22,0x12,0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,
-0x73,0x65,0x25,0x10,0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,
-0x72,0x6d,0x61,0x74,0x27,0xa,0x6c,0x64,0x6f,0x24,0x6f,0x2c,0x72,0x34,0x78,0x10,
-0x78,0x21,0x13,0x74,0x68,0x65,0x72,0x21,1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,
-0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,0x6c,0x50,
-0x6d,0x56,0x6e,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,0x63,
-0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,1,0x65,0x23,0x66,0x35,3,0x62,0x37,
-0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,
-0x12,0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x61,0x44,0x63,0x50,
-0x65,0x52,0x66,0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,0x61,0x6e,0x61,0x27,
-0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,0x10,0x78,0x2e,0x13,0x74,
-0x65,0x6e,0x64,0x32,0x15,0x6e,0x75,0x6d,0x6c,0x65,0x74,0x2f,0x10,0x6f,0x24,0x13,
-0x72,0x6d,0x61,0x74,0x25,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,0x4c,0x74,0xa2,0x76,
-0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,0x70,0xd9,0x40,0,
-0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,0xff,8,0,0,
-0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,0xf,0,0,0,
-0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0,
-0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,0x16,0x72,0x72,0x6f,
-0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,0,0,0x65,0x38,0x6b,
-0xff,4,0,0,0,0x6d,0xff,1,0,0,0,0x16,0x70,0x61,0x72,0x61,
-0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,
-0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,
-0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,
-0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,0xf8,0,0,9,
-0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,0,0x72,0x54,0x73,
-0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,0,0x15,0x75,0x61,
-0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,0x61,0x74,0x65,0x75,
-0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,0,0x64,0xe9,0,0,
-0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,0x1f,0x72,0x61,0x67,0x72,
-0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x40,0,0xbe,
-0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,0x6d,0x62,0x65,0x72,
-0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,
-0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,1,3,0x6c,0x40,
-0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,8,0,0,0,
-0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,0x72,0xb3,0,0x19,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,0,0,0x1c,0x65,
-0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xf9,0,0,0x66,
-0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,0xa4,0xc0,4,0x61,
-0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,
-0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,4,0,0,0,
-0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,0x68,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,1,0x69,0x32,0x6f,
-0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,0x10,0x6e,0x1f,0x69,
-0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,
-0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,0x74,0x31,0x75,0x25,
-0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x29,
-0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,0x72,0x9c,0x15,0x6e,
-0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,
-0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,0x1b,0x6e,0x63,0x6c,
-0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,0x80,1,7,0x6e,
-0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,
-0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,0x22,0x12,0x74,0x72,
-0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,1,0x6e,0x30,0x74,0x12,
-0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,0x62,0x69,0x6e,0x69,
-0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,0x80,0,0x66,0xdb,
-0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
-0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,0x74,0x74,0x65,0x72,
-0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,0,0x1c,0x73,0x68,
-0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,0,0,0x1a,0x63,
-0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0
-};
-
-const char PropNameData::nameGroups[15129]={
-2,'A','l','p','h','a',0,'A','l','p','h','a','b','e','t','i','c',0,
-4,'N',0,'N','o',0,'F',0,'F','a','l','s','e',0,4,'Y',0,'Y','e','s',0,'T',0,'T','r','u','e',0,
-2,'N','R',0,'N','o','t','_','R','e','o','r','d','e','r','e','d',0,
-2,'O','V',0,'O','v','e','r','l','a','y',0,2,'N','K',0,'N','u','k','t','a',0,
-2,'K','V',0,'K','a','n','a','_','V','o','i','c','i','n','g',0,
-2,'V','R',0,'V','i','r','a','m','a',0,2,'C','C','C','1','0',0,'C','C','C','1','0',0,
-2,'C','C','C','1','1',0,'C','C','C','1','1',0,2,'C','C','C','1','2',0,'C','C','C','1','2',0,
-2,'C','C','C','1','3',0,'C','C','C','1','3',0,2,'C','C','C','1','4',0,'C','C','C','1','4',0,
-2,'C','C','C','1','5',0,'C','C','C','1','5',0,2,'C','C','C','1','6',0,'C','C','C','1','6',0,
-2,'C','C','C','1','7',0,'C','C','C','1','7',0,2,'C','C','C','1','8',0,'C','C','C','1','8',0,
-2,'C','C','C','1','9',0,'C','C','C','1','9',0,2,'C','C','C','2','0',0,'C','C','C','2','0',0,
-2,'C','C','C','2','1',0,'C','C','C','2','1',0,2,'C','C','C','2','2',0,'C','C','C','2','2',0,
-2,'C','C','C','2','3',0,'C','C','C','2','3',0,2,'C','C','C','2','4',0,'C','C','C','2','4',0,
-2,'C','C','C','2','5',0,'C','C','C','2','5',0,2,'C','C','C','2','6',0,'C','C','C','2','6',0,
-2,'C','C','C','2','7',0,'C','C','C','2','7',0,2,'C','C','C','2','8',0,'C','C','C','2','8',0,
-2,'C','C','C','2','9',0,'C','C','C','2','9',0,2,'C','C','C','3','0',0,'C','C','C','3','0',0,
-2,'C','C','C','3','1',0,'C','C','C','3','1',0,2,'C','C','C','3','2',0,'C','C','C','3','2',0,
-2,'C','C','C','3','3',0,'C','C','C','3','3',0,2,'C','C','C','3','4',0,'C','C','C','3','4',0,
-2,'C','C','C','3','5',0,'C','C','C','3','5',0,2,'C','C','C','3','6',0,'C','C','C','3','6',0,
-2,'C','C','C','8','4',0,'C','C','C','8','4',0,2,'C','C','C','9','1',0,'C','C','C','9','1',0,
-2,'C','C','C','1','0','3',0,'C','C','C','1','0','3',0,2,'C','C','C','1','0','7',0,'C','C','C','1','0','7',0,
-2,'C','C','C','1','1','8',0,'C','C','C','1','1','8',0,2,'C','C','C','1','2','2',0,'C','C','C','1','2','2',0,
-2,'C','C','C','1','2','9',0,'C','C','C','1','2','9',0,2,'C','C','C','1','3','0',0,'C','C','C','1','3','0',0,
-2,'C','C','C','1','3','2',0,'C','C','C','1','3','2',0,2,'C','C','C','1','3','3',0,'C','C','C','1','3','3',0,
-2,'A','T','B','L',0,'A','t','t','a','c','h','e','d','_','B','e','l','o','w','_','L','e','f','t',0,
-2,'A','T','B',0,'A','t','t','a','c','h','e','d','_','B','e','l','o','w',0,
-2,'A','T','A',0,'A','t','t','a','c','h','e','d','_','A','b','o','v','e',0,
-2,'A','T','A','R',0,'A','t','t','a','c','h','e','d','_','A','b','o','v','e','_','R','i','g','h','t',0,
-2,'B','L',0,'B','e','l','o','w','_','L','e','f','t',0,2,'B',0,'B','e','l','o','w',0,
-2,'B','R',0,'B','e','l','o','w','_','R','i','g','h','t',0,
-2,'L',0,'L','e','f','t',0,2,'R',0,'R','i','g','h','t',0,
-2,'A','L',0,'A','b','o','v','e','_','L','e','f','t',0,2,'A',0,'A','b','o','v','e',0,
-2,'A','R',0,'A','b','o','v','e','_','R','i','g','h','t',0,
-2,'D','B',0,'D','o','u','b','l','e','_','B','e','l','o','w',0,
-2,'D','A',0,'D','o','u','b','l','e','_','A','b','o','v','e',0,
-2,'I','S',0,'I','o','t','a','_','S','u','b','s','c','r','i','p','t',0,
-2,'A','H','e','x',0,'A','S','C','I','I','_','H','e','x','_','D','i','g','i','t',0,
-2,'B','i','d','i','_','C',0,'B','i','d','i','_','C','o','n','t','r','o','l',0,
-2,'B','i','d','i','_','M',0,'B','i','d','i','_','M','i','r','r','o','r','e','d',0,
-2,'D','a','s','h',0,'D','a','s','h',0,2,'D','I',0,'D','e','f','a','u','l','t','_','I','g','n','o','r','a','b','l','e',
-'_','C','o','d','e','_','P','o','i','n','t',0,2,'D','e','p',0,'D','e','p','r','e','c','a','t','e','d',0,
-2,'D','i','a',0,'D','i','a','c','r','i','t','i','c',0,2,'E','x','t',0,'E','x','t','e','n','d','e','r',0,
-2,'C','o','m','p','_','E','x',0,'F','u','l','l','_','C','o','m','p','o','s','i','t','i','o','n','_','E','x','c','l','u','s',
-'i','o','n',0,2,'G','r','_','B','a','s','e',0,'G','r','a','p','h','e','m','e','_','B','a','s','e',0,
-2,'G','r','_','E','x','t',0,'G','r','a','p','h','e','m','e','_','E','x','t','e','n','d',0,
-2,'G','r','_','L','i','n','k',0,'G','r','a','p','h','e','m','e','_','L','i','n','k',0,
-2,'H','e','x',0,'H','e','x','_','D','i','g','i','t',0,2,'H','y','p','h','e','n',0,'H','y','p','h','e','n',0,
-2,'I','D','C',0,'I','D','_','C','o','n','t','i','n','u','e',0,
-2,'I','D','S',0,'I','D','_','S','t','a','r','t',0,2,'I','d','e','o',0,'I','d','e','o','g','r','a','p','h','i','c',0,
-2,'I','D','S','B',0,'I','D','S','_','B','i','n','a','r','y','_','O','p','e','r','a','t','o','r',0,
-2,'I','D','S','T',0,'I','D','S','_','T','r','i','n','a','r','y','_','O','p','e','r','a','t','o','r',0,
-2,'J','o','i','n','_','C',0,'J','o','i','n','_','C','o','n','t','r','o','l',0,
-2,'L','O','E',0,'L','o','g','i','c','a','l','_','O','r','d','e','r','_','E','x','c','e','p','t','i','o','n',0,
-2,'L','o','w','e','r',0,'L','o','w','e','r','c','a','s','e',0,
-2,'M','a','t','h',0,'M','a','t','h',0,2,'N','C','h','a','r',0,'N','o','n','c','h','a','r','a','c','t','e','r','_','C',
-'o','d','e','_','P','o','i','n','t',0,2,'Q','M','a','r','k',0,'Q','u','o','t','a','t','i','o','n','_','M','a','r','k',0,
-2,'R','a','d','i','c','a','l',0,'R','a','d','i','c','a','l',0,
-2,'S','D',0,'S','o','f','t','_','D','o','t','t','e','d',0,
-2,'T','e','r','m',0,'T','e','r','m','i','n','a','l','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'U','I','d','e','o',0,'U','n','i','f','i','e','d','_','I','d','e','o','g','r','a','p','h',0,
-2,'U','p','p','e','r',0,'U','p','p','e','r','c','a','s','e',0,
-3,'W','S','p','a','c','e',0,'W','h','i','t','e','_','S','p','a','c','e',0,'s','p','a','c','e',0,
-2,'X','I','D','C',0,'X','I','D','_','C','o','n','t','i','n','u','e',0,
-2,'X','I','D','S',0,'X','I','D','_','S','t','a','r','t',0,
-2,'S','e','n','s','i','t','i','v','e',0,'C','a','s','e','_','S','e','n','s','i','t','i','v','e',0,
-2,'S','T','e','r','m',0,'S','T','e','r','m',0,2,'V','S',0,'V','a','r','i','a','t','i','o','n','_','S','e','l','e','c',
-'t','o','r',0,2,'n','f','d','i','n','e','r','t',0,'N','F','D','_','I','n','e','r','t',0,
-2,'n','f','k','d','i','n','e','r','t',0,'N','F','K','D','_','I','n','e','r','t',0,
-2,'n','f','c','i','n','e','r','t',0,'N','F','C','_','I','n','e','r','t',0,
-2,'n','f','k','c','i','n','e','r','t',0,'N','F','K','C','_','I','n','e','r','t',0,
-2,'s','e','g','s','t','a','r','t',0,'S','e','g','m','e','n','t','_','S','t','a','r','t','e','r',0,
-2,'P','a','t','_','S','y','n',0,'P','a','t','t','e','r','n','_','S','y','n','t','a','x',0,
-2,'P','a','t','_','W','S',0,'P','a','t','t','e','r','n','_','W','h','i','t','e','_','S','p','a','c','e',0,
-2,0,'a','l','n','u','m',0,2,0,'b','l','a','n','k',0,
-2,0,'g','r','a','p','h',0,2,0,'p','r','i','n','t',0,
-2,0,'x','d','i','g','i','t',0,2,'C','a','s','e','d',0,'C','a','s','e','d',0,
-2,'C','I',0,'C','a','s','e','_','I','g','n','o','r','a','b','l','e',0,
-2,'C','W','L',0,'C','h','a','n','g','e','s','_','W','h','e','n','_','L','o','w','e','r','c','a','s','e','d',0,
-2,'C','W','U',0,'C','h','a','n','g','e','s','_','W','h','e','n','_','U','p','p','e','r','c','a','s','e','d',0,
-2,'C','W','T',0,'C','h','a','n','g','e','s','_','W','h','e','n','_','T','i','t','l','e','c','a','s','e','d',0,
-2,'C','W','C','F',0,'C','h','a','n','g','e','s','_','W','h','e','n','_','C','a','s','e','f','o','l','d','e','d',0,
-2,'C','W','C','M',0,'C','h','a','n','g','e','s','_','W','h','e','n','_','C','a','s','e','m','a','p','p','e','d',0,
-2,'C','W','K','C','F',0,'C','h','a','n','g','e','s','_','W','h','e','n','_','N','F','K','C','_','C','a','s','e','f','o','l',
-'d','e','d',0,2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,
-2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
-2,'R',0,'R','i','g','h','t','_','T','o','_','L','e','f','t',0,
-2,'E','N',0,'E','u','r','o','p','e','a','n','_','N','u','m','b','e','r',0,
-2,'E','S',0,'E','u','r','o','p','e','a','n','_','S','e','p','a','r','a','t','o','r',0,
-2,'E','T',0,'E','u','r','o','p','e','a','n','_','T','e','r','m','i','n','a','t','o','r',0,
-2,'A','N',0,'A','r','a','b','i','c','_','N','u','m','b','e','r',0,
-2,'C','S',0,'C','o','m','m','o','n','_','S','e','p','a','r','a','t','o','r',0,
-2,'B',0,'P','a','r','a','g','r','a','p','h','_','S','e','p','a','r','a','t','o','r',0,
-2,'S',0,'S','e','g','m','e','n','t','_','S','e','p','a','r','a','t','o','r',0,
-2,'W','S',0,'W','h','i','t','e','_','S','p','a','c','e',0,
-2,'O','N',0,'O','t','h','e','r','_','N','e','u','t','r','a','l',0,
-2,'L','R','E',0,'L','e','f','t','_','T','o','_','R','i','g','h','t','_','E','m','b','e','d','d','i','n','g',0,
-2,'L','R','O',0,'L','e','f','t','_','T','o','_','R','i','g','h','t','_','O','v','e','r','r','i','d','e',0,
-2,'A','L',0,'A','r','a','b','i','c','_','L','e','t','t','e','r',0,
-2,'R','L','E',0,'R','i','g','h','t','_','T','o','_','L','e','f','t','_','E','m','b','e','d','d','i','n','g',0,
-2,'R','L','O',0,'R','i','g','h','t','_','T','o','_','L','e','f','t','_','O','v','e','r','r','i','d','e',0,
-2,'P','D','F',0,'P','o','p','_','D','i','r','e','c','t','i','o','n','a','l','_','F','o','r','m','a','t',0,
-2,'N','S','M',0,'N','o','n','s','p','a','c','i','n','g','_','M','a','r','k',0,
-2,'B','N',0,'B','o','u','n','d','a','r','y','_','N','e','u','t','r','a','l',0,
-2,'b','l','k',0,'B','l','o','c','k',0,2,'N','B',0,'N','o','_','B','l','o','c','k',0,
-2,'A','S','C','I','I',0,'B','a','s','i','c','_','L','a','t','i','n',0,
-3,'L','a','t','i','n','_','1','_','S','u','p',0,'L','a','t','i','n','_','1','_','S','u','p','p','l','e','m','e','n','t',0,
-'L','a','t','i','n','_','1',0,2,'L','a','t','i','n','_','E','x','t','_','A',0,'L','a','t','i','n','_','E','x','t','e','n',
-'d','e','d','_','A',0,2,'L','a','t','i','n','_','E','x','t','_','B',0,'L','a','t','i','n','_','E','x','t','e','n','d','e',
-'d','_','B',0,2,'I','P','A','_','E','x','t',0,'I','P','A','_','E','x','t','e','n','s','i','o','n','s',0,
-2,'M','o','d','i','f','i','e','r','_','L','e','t','t','e','r','s',0,'S','p','a','c','i','n','g','_','M','o','d','i','f','i',
-'e','r','_','L','e','t','t','e','r','s',0,2,'D','i','a','c','r','i','t','i','c','a','l','s',0,
-'C','o','m','b','i','n','i','n','g','_','D','i','a','c','r','i','t','i','c','a','l','_','M','a','r','k','s',0,
-2,'G','r','e','e','k',0,'G','r','e','e','k','_','A','n','d','_','C','o','p','t','i','c',0,
-2,'C','y','r','i','l','l','i','c',0,'C','y','r','i','l','l','i','c',0,
-2,'A','r','m','e','n','i','a','n',0,'A','r','m','e','n','i','a','n',0,
-2,'H','e','b','r','e','w',0,'H','e','b','r','e','w',0,2,'A','r','a','b','i','c',0,'A','r','a','b','i','c',0,
-2,'S','y','r','i','a','c',0,'S','y','r','i','a','c',0,2,'T','h','a','a','n','a',0,'T','h','a','a','n','a',0,
-2,'D','e','v','a','n','a','g','a','r','i',0,'D','e','v','a','n','a','g','a','r','i',0,
-2,'B','e','n','g','a','l','i',0,'B','e','n','g','a','l','i',0,
-2,'G','u','r','m','u','k','h','i',0,'G','u','r','m','u','k','h','i',0,
-2,'G','u','j','a','r','a','t','i',0,'G','u','j','a','r','a','t','i',0,
-2,'O','r','i','y','a',0,'O','r','i','y','a',0,2,'T','a','m','i','l',0,'T','a','m','i','l',0,
-2,'T','e','l','u','g','u',0,'T','e','l','u','g','u',0,2,'K','a','n','n','a','d','a',0,
-'K','a','n','n','a','d','a',0,2,'M','a','l','a','y','a','l','a','m',0,'M','a','l','a','y','a','l','a','m',0,
-2,'S','i','n','h','a','l','a',0,'S','i','n','h','a','l','a',0,
-2,'T','h','a','i',0,'T','h','a','i',0,2,'L','a','o',0,'L','a','o',0,
-2,'T','i','b','e','t','a','n',0,'T','i','b','e','t','a','n',0,
-2,'M','y','a','n','m','a','r',0,'M','y','a','n','m','a','r',0,
-2,'G','e','o','r','g','i','a','n',0,'G','e','o','r','g','i','a','n',0,
-2,'J','a','m','o',0,'H','a','n','g','u','l','_','J','a','m','o',0,
-2,'E','t','h','i','o','p','i','c',0,'E','t','h','i','o','p','i','c',0,
-2,'C','h','e','r','o','k','e','e',0,'C','h','e','r','o','k','e','e',0,
-3,'U','C','A','S',0,'U','n','i','f','i','e','d','_','C','a','n','a','d','i','a','n','_','A','b','o','r','i','g','i','n','a',
-'l','_','S','y','l','l','a','b','i','c','s',0,'C','a','n','a','d','i','a','n','_','S','y','l','l','a','b','i','c','s',0,
-2,'O','g','h','a','m',0,'O','g','h','a','m',0,2,'R','u','n','i','c',0,'R','u','n','i','c',0,
-2,'K','h','m','e','r',0,'K','h','m','e','r',0,2,'M','o','n','g','o','l','i','a','n',0,
-'M','o','n','g','o','l','i','a','n',0,2,'L','a','t','i','n','_','E','x','t','_','A','d','d','i','t','i','o','n','a','l',0,
-'L','a','t','i','n','_','E','x','t','e','n','d','e','d','_','A','d','d','i','t','i','o','n','a','l',0,
-2,'G','r','e','e','k','_','E','x','t',0,'G','r','e','e','k','_','E','x','t','e','n','d','e','d',0,
-2,'P','u','n','c','t','u','a','t','i','o','n',0,'G','e','n','e','r','a','l','_','P','u','n','c','t','u','a','t','i','o','n',
-0,2,'S','u','p','e','r','_','A','n','d','_','S','u','b',0,'S','u','p','e','r','s','c','r','i','p','t','s','_','A','n','d',
-'_','S','u','b','s','c','r','i','p','t','s',0,2,'C','u','r','r','e','n','c','y','_','S','y','m','b','o','l','s',0,
-'C','u','r','r','e','n','c','y','_','S','y','m','b','o','l','s',0,
-3,'D','i','a','c','r','i','t','i','c','a','l','s','_','F','o','r','_','S','y','m','b','o','l','s',0,
-'C','o','m','b','i','n','i','n','g','_','D','i','a','c','r','i','t','i','c','a','l','_','M','a','r','k','s','_','F','o','r','_',
-'S','y','m','b','o','l','s',0,'C','o','m','b','i','n','i','n','g','_','M','a','r','k','s','_','F','o','r','_','S','y','m','b',
-'o','l','s',0,2,'L','e','t','t','e','r','l','i','k','e','_','S','y','m','b','o','l','s',0,
-'L','e','t','t','e','r','l','i','k','e','_','S','y','m','b','o','l','s',0,
-2,'N','u','m','b','e','r','_','F','o','r','m','s',0,'N','u','m','b','e','r','_','F','o','r','m','s',0,
-2,'A','r','r','o','w','s',0,'A','r','r','o','w','s',0,2,'M','a','t','h','_','O','p','e','r','a','t','o','r','s',0,
-'M','a','t','h','e','m','a','t','i','c','a','l','_','O','p','e','r','a','t','o','r','s',0,
-2,'M','i','s','c','_','T','e','c','h','n','i','c','a','l',0,'M','i','s','c','e','l','l','a','n','e','o','u','s','_','T','e',
-'c','h','n','i','c','a','l',0,2,'C','o','n','t','r','o','l','_','P','i','c','t','u','r','e','s',0,
-'C','o','n','t','r','o','l','_','P','i','c','t','u','r','e','s',0,
-2,'O','C','R',0,'O','p','t','i','c','a','l','_','C','h','a','r','a','c','t','e','r','_','R','e','c','o','g','n','i','t','i',
-'o','n',0,2,'E','n','c','l','o','s','e','d','_','A','l','p','h','a','n','u','m',0,'E','n','c','l','o','s','e','d','_','A',
-'l','p','h','a','n','u','m','e','r','i','c','s',0,2,'B','o','x','_','D','r','a','w','i','n','g',0,
-'B','o','x','_','D','r','a','w','i','n','g',0,2,'B','l','o','c','k','_','E','l','e','m','e','n','t','s',0,
-'B','l','o','c','k','_','E','l','e','m','e','n','t','s',0,2,'G','e','o','m','e','t','r','i','c','_','S','h','a','p','e','s',
-0,'G','e','o','m','e','t','r','i','c','_','S','h','a','p','e','s',0,
-2,'M','i','s','c','_','S','y','m','b','o','l','s',0,'M','i','s','c','e','l','l','a','n','e','o','u','s','_','S','y','m','b',
-'o','l','s',0,2,'D','i','n','g','b','a','t','s',0,'D','i','n','g','b','a','t','s',0,
-2,'B','r','a','i','l','l','e',0,'B','r','a','i','l','l','e','_','P','a','t','t','e','r','n','s',0,
-2,'C','J','K','_','R','a','d','i','c','a','l','s','_','S','u','p',0,'C','J','K','_','R','a','d','i','c','a','l','s','_','S',
-'u','p','p','l','e','m','e','n','t',0,2,'K','a','n','g','x','i',0,'K','a','n','g','x','i','_','R','a','d','i','c','a','l',
-'s',0,2,'I','D','C',0,'I','d','e','o','g','r','a','p','h','i','c','_','D','e','s','c','r','i','p','t','i','o','n','_','C',
-'h','a','r','a','c','t','e','r','s',0,2,'C','J','K','_','S','y','m','b','o','l','s',0,'C','J','K','_','S','y','m','b','o',
-'l','s','_','A','n','d','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'H','i','r','a','g','a','n','a',0,'H','i','r','a','g','a','n','a',0,
-2,'K','a','t','a','k','a','n','a',0,'K','a','t','a','k','a','n','a',0,
-2,'B','o','p','o','m','o','f','o',0,'B','o','p','o','m','o','f','o',0,
-2,'C','o','m','p','a','t','_','J','a','m','o',0,'H','a','n','g','u','l','_','C','o','m','p','a','t','i','b','i','l','i','t',
-'y','_','J','a','m','o',0,2,'K','a','n','b','u','n',0,'K','a','n','b','u','n',0,
-2,'B','o','p','o','m','o','f','o','_','E','x','t',0,'B','o','p','o','m','o','f','o','_','E','x','t','e','n','d','e','d',0,
-2,'E','n','c','l','o','s','e','d','_','C','J','K',0,'E','n','c','l','o','s','e','d','_','C','J','K','_','L','e','t','t','e',
-'r','s','_','A','n','d','_','M','o','n','t','h','s',0,2,'C','J','K','_','C','o','m','p','a','t',0,
-'C','J','K','_','C','o','m','p','a','t','i','b','i','l','i','t','y',0,
-2,'C','J','K','_','E','x','t','_','A',0,'C','J','K','_','U','n','i','f','i','e','d','_','I','d','e','o','g','r','a','p','h',
-'s','_','E','x','t','e','n','s','i','o','n','_','A',0,2,'C','J','K',0,'C','J','K','_','U','n','i','f','i','e','d','_','I',
-'d','e','o','g','r','a','p','h','s',0,2,'Y','i','_','S','y','l','l','a','b','l','e','s',0,
-'Y','i','_','S','y','l','l','a','b','l','e','s',0,2,'Y','i','_','R','a','d','i','c','a','l','s',0,
-'Y','i','_','R','a','d','i','c','a','l','s',0,2,'H','a','n','g','u','l',0,'H','a','n','g','u','l','_','S','y','l','l','a',
-'b','l','e','s',0,2,'H','i','g','h','_','S','u','r','r','o','g','a','t','e','s',0,'H','i','g','h','_','S','u','r','r','o',
-'g','a','t','e','s',0,2,'H','i','g','h','_','P','U','_','S','u','r','r','o','g','a','t','e','s',0,
-'H','i','g','h','_','P','r','i','v','a','t','e','_','U','s','e','_','S','u','r','r','o','g','a','t','e','s',0,
-2,'L','o','w','_','S','u','r','r','o','g','a','t','e','s',0,'L','o','w','_','S','u','r','r','o','g','a','t','e','s',0,
-3,'P','U','A',0,'P','r','i','v','a','t','e','_','U','s','e','_','A','r','e','a',0,'P','r','i','v','a','t','e','_','U','s',
-'e',0,2,'C','J','K','_','C','o','m','p','a','t','_','I','d','e','o','g','r','a','p','h','s',0,
-'C','J','K','_','C','o','m','p','a','t','i','b','i','l','i','t','y','_','I','d','e','o','g','r','a','p','h','s',0,
-2,'A','l','p','h','a','b','e','t','i','c','_','P','F',0,'A','l','p','h','a','b','e','t','i','c','_','P','r','e','s','e','n',
-'t','a','t','i','o','n','_','F','o','r','m','s',0,3,'A','r','a','b','i','c','_','P','F','_','A',0,
-'A','r','a','b','i','c','_','P','r','e','s','e','n','t','a','t','i','o','n','_','F','o','r','m','s','_','A',0,
-'A','r','a','b','i','c','_','P','r','e','s','e','n','t','a','t','i','o','n','_','F','o','r','m','s','-','A',0,
-2,'H','a','l','f','_','M','a','r','k','s',0,'C','o','m','b','i','n','i','n','g','_','H','a','l','f','_','M','a','r','k','s',
-0,2,'C','J','K','_','C','o','m','p','a','t','_','F','o','r','m','s',0,'C','J','K','_','C','o','m','p','a','t','i','b','i',
-'l','i','t','y','_','F','o','r','m','s',0,2,'S','m','a','l','l','_','F','o','r','m','s',0,
-'S','m','a','l','l','_','F','o','r','m','_','V','a','r','i','a','n','t','s',0,
-2,'A','r','a','b','i','c','_','P','F','_','B',0,'A','r','a','b','i','c','_','P','r','e','s','e','n','t','a','t','i','o','n',
-'_','F','o','r','m','s','_','B',0,2,'S','p','e','c','i','a','l','s',0,'S','p','e','c','i','a','l','s',0,
-2,'H','a','l','f','_','A','n','d','_','F','u','l','l','_','F','o','r','m','s',0,'H','a','l','f','w','i','d','t','h','_','A',
-'n','d','_','F','u','l','l','w','i','d','t','h','_','F','o','r','m','s',0,
-2,'O','l','d','_','I','t','a','l','i','c',0,'O','l','d','_','I','t','a','l','i','c',0,
-2,'G','o','t','h','i','c',0,'G','o','t','h','i','c',0,2,'D','e','s','e','r','e','t',0,
-'D','e','s','e','r','e','t',0,2,'B','y','z','a','n','t','i','n','e','_','M','u','s','i','c',0,
-'B','y','z','a','n','t','i','n','e','_','M','u','s','i','c','a','l','_','S','y','m','b','o','l','s',0,
-2,'M','u','s','i','c',0,'M','u','s','i','c','a','l','_','S','y','m','b','o','l','s',0,
-2,'M','a','t','h','_','A','l','p','h','a','n','u','m',0,'M','a','t','h','e','m','a','t','i','c','a','l','_','A','l','p','h',
-'a','n','u','m','e','r','i','c','_','S','y','m','b','o','l','s',0,
-2,'C','J','K','_','E','x','t','_','B',0,'C','J','K','_','U','n','i','f','i','e','d','_','I','d','e','o','g','r','a','p','h',
-'s','_','E','x','t','e','n','s','i','o','n','_','B',0,2,'C','J','K','_','C','o','m','p','a','t','_','I','d','e','o','g','r',
-'a','p','h','s','_','S','u','p',0,'C','J','K','_','C','o','m','p','a','t','i','b','i','l','i','t','y','_','I','d','e','o','g',
-'r','a','p','h','s','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'T','a','g','s',0,'T','a','g','s',0,3,'C','y','r','i','l','l','i','c','_','S','u','p',0,
-'C','y','r','i','l','l','i','c','_','S','u','p','p','l','e','m','e','n','t',0,'C','y','r','i','l','l','i','c','_','S','u','p',
-'p','l','e','m','e','n','t','a','r','y',0,2,'T','a','g','a','l','o','g',0,'T','a','g','a','l','o','g',0,
-2,'H','a','n','u','n','o','o',0,'H','a','n','u','n','o','o',0,
-2,'B','u','h','i','d',0,'B','u','h','i','d',0,2,'T','a','g','b','a','n','w','a',0,'T','a','g','b','a','n','w','a',0,
-2,'M','i','s','c','_','M','a','t','h','_','S','y','m','b','o','l','s','_','A',0,'M','i','s','c','e','l','l','a','n','e','o',
-'u','s','_','M','a','t','h','e','m','a','t','i','c','a','l','_','S','y','m','b','o','l','s','_','A',0,
-2,'S','u','p','_','A','r','r','o','w','s','_','A',0,'S','u','p','p','l','e','m','e','n','t','a','l','_','A','r','r','o','w',
-'s','_','A',0,2,'S','u','p','_','A','r','r','o','w','s','_','B',0,'S','u','p','p','l','e','m','e','n','t','a','l','_','A',
-'r','r','o','w','s','_','B',0,2,'M','i','s','c','_','M','a','t','h','_','S','y','m','b','o','l','s','_','B',0,
-'M','i','s','c','e','l','l','a','n','e','o','u','s','_','M','a','t','h','e','m','a','t','i','c','a','l','_','S','y','m','b','o',
-'l','s','_','B',0,2,'S','u','p','_','M','a','t','h','_','O','p','e','r','a','t','o','r','s',0,
-'S','u','p','p','l','e','m','e','n','t','a','l','_','M','a','t','h','e','m','a','t','i','c','a','l','_','O','p','e','r','a','t',
-'o','r','s',0,2,'K','a','t','a','k','a','n','a','_','E','x','t',0,'K','a','t','a','k','a','n','a','_','P','h','o','n','e',
-'t','i','c','_','E','x','t','e','n','s','i','o','n','s',0,2,'V','S',0,'V','a','r','i','a','t','i','o','n','_','S','e','l',
-'e','c','t','o','r','s',0,2,'S','u','p','_','P','U','A','_','A',0,'S','u','p','p','l','e','m','e','n','t','a','r','y','_',
-'P','r','i','v','a','t','e','_','U','s','e','_','A','r','e','a','_','A',0,
-2,'S','u','p','_','P','U','A','_','B',0,'S','u','p','p','l','e','m','e','n','t','a','r','y','_','P','r','i','v','a','t','e',
-'_','U','s','e','_','A','r','e','a','_','B',0,2,'L','i','m','b','u',0,'L','i','m','b','u',0,
-2,'T','a','i','_','L','e',0,'T','a','i','_','L','e',0,2,'K','h','m','e','r','_','S','y','m','b','o','l','s',0,
-'K','h','m','e','r','_','S','y','m','b','o','l','s',0,2,'P','h','o','n','e','t','i','c','_','E','x','t',0,
-'P','h','o','n','e','t','i','c','_','E','x','t','e','n','s','i','o','n','s',0,
-2,'M','i','s','c','_','A','r','r','o','w','s',0,'M','i','s','c','e','l','l','a','n','e','o','u','s','_','S','y','m','b','o',
-'l','s','_','A','n','d','_','A','r','r','o','w','s',0,2,'Y','i','j','i','n','g',0,'Y','i','j','i','n','g','_','H','e','x',
-'a','g','r','a','m','_','S','y','m','b','o','l','s',0,2,'L','i','n','e','a','r','_','B','_','S','y','l','l','a','b','a','r',
-'y',0,'L','i','n','e','a','r','_','B','_','S','y','l','l','a','b','a','r','y',0,
-2,'L','i','n','e','a','r','_','B','_','I','d','e','o','g','r','a','m','s',0,'L','i','n','e','a','r','_','B','_','I','d','e',
-'o','g','r','a','m','s',0,2,'A','e','g','e','a','n','_','N','u','m','b','e','r','s',0,'A','e','g','e','a','n','_','N','u',
-'m','b','e','r','s',0,2,'U','g','a','r','i','t','i','c',0,'U','g','a','r','i','t','i','c',0,
-2,'S','h','a','v','i','a','n',0,'S','h','a','v','i','a','n',0,
-2,'O','s','m','a','n','y','a',0,'O','s','m','a','n','y','a',0,
-2,'C','y','p','r','i','o','t','_','S','y','l','l','a','b','a','r','y',0,'C','y','p','r','i','o','t','_','S','y','l','l','a',
-'b','a','r','y',0,2,'T','a','i','_','X','u','a','n','_','J','i','n','g',0,'T','a','i','_','X','u','a','n','_','J','i','n',
-'g','_','S','y','m','b','o','l','s',0,2,'V','S','_','S','u','p',0,'V','a','r','i','a','t','i','o','n','_','S','e','l','e',
-'c','t','o','r','s','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'A','n','c','i','e','n','t','_','G','r','e','e','k','_','M','u','s','i','c',0,'A','n','c','i','e','n','t','_','G','r','e',
-'e','k','_','M','u','s','i','c','a','l','_','N','o','t','a','t','i','o','n',0,
-2,'A','n','c','i','e','n','t','_','G','r','e','e','k','_','N','u','m','b','e','r','s',0,'A','n','c','i','e','n','t','_','G',
-'r','e','e','k','_','N','u','m','b','e','r','s',0,2,'A','r','a','b','i','c','_','S','u','p',0,
-'A','r','a','b','i','c','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'B','u','g','i','n','e','s','e',0,'B','u','g','i','n','e','s','e',0,
-2,'C','J','K','_','S','t','r','o','k','e','s',0,'C','J','K','_','S','t','r','o','k','e','s',0,
-2,'D','i','a','c','r','i','t','i','c','a','l','s','_','S','u','p',0,'C','o','m','b','i','n','i','n','g','_','D','i','a','c',
-'r','i','t','i','c','a','l','_','M','a','r','k','s','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'C','o','p','t','i','c',0,'C','o','p','t','i','c',0,2,'E','t','h','i','o','p','i','c','_','E','x','t',0,
-'E','t','h','i','o','p','i','c','_','E','x','t','e','n','d','e','d',0,
-2,'E','t','h','i','o','p','i','c','_','S','u','p',0,'E','t','h','i','o','p','i','c','_','S','u','p','p','l','e','m','e','n',
-'t',0,2,'G','e','o','r','g','i','a','n','_','S','u','p',0,'G','e','o','r','g','i','a','n','_','S','u','p','p','l','e','m',
-'e','n','t',0,2,'G','l','a','g','o','l','i','t','i','c',0,'G','l','a','g','o','l','i','t','i','c',0,
-2,'K','h','a','r','o','s','h','t','h','i',0,'K','h','a','r','o','s','h','t','h','i',0,
-2,'M','o','d','i','f','i','e','r','_','T','o','n','e','_','L','e','t','t','e','r','s',0,'M','o','d','i','f','i','e','r','_',
-'T','o','n','e','_','L','e','t','t','e','r','s',0,2,'N','e','w','_','T','a','i','_','L','u','e',0,
-'N','e','w','_','T','a','i','_','L','u','e',0,2,'O','l','d','_','P','e','r','s','i','a','n',0,
-'O','l','d','_','P','e','r','s','i','a','n',0,2,'P','h','o','n','e','t','i','c','_','E','x','t','_','S','u','p',0,
-'P','h','o','n','e','t','i','c','_','E','x','t','e','n','s','i','o','n','s','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'S','u','p','_','P','u','n','c','t','u','a','t','i','o','n',0,'S','u','p','p','l','e','m','e','n','t','a','l','_','P','u',
-'n','c','t','u','a','t','i','o','n',0,2,'S','y','l','o','t','i','_','N','a','g','r','i',0,
-'S','y','l','o','t','i','_','N','a','g','r','i',0,2,'T','i','f','i','n','a','g','h',0,'T','i','f','i','n','a','g','h',0,
-2,'V','e','r','t','i','c','a','l','_','F','o','r','m','s',0,'V','e','r','t','i','c','a','l','_','F','o','r','m','s',0,
-2,'N','K','o',0,'N','K','o',0,2,'B','a','l','i','n','e','s','e',0,'B','a','l','i','n','e','s','e',0,
-2,'L','a','t','i','n','_','E','x','t','_','C',0,'L','a','t','i','n','_','E','x','t','e','n','d','e','d','_','C',0,
-2,'L','a','t','i','n','_','E','x','t','_','D',0,'L','a','t','i','n','_','E','x','t','e','n','d','e','d','_','D',0,
-2,'P','h','a','g','s','_','P','a',0,'P','h','a','g','s','_','P','a',0,
-2,'P','h','o','e','n','i','c','i','a','n',0,'P','h','o','e','n','i','c','i','a','n',0,
-2,'C','u','n','e','i','f','o','r','m',0,'C','u','n','e','i','f','o','r','m',0,
-2,'C','u','n','e','i','f','o','r','m','_','N','u','m','b','e','r','s',0,'C','u','n','e','i','f','o','r','m','_','N','u','m',
-'b','e','r','s','_','A','n','d','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'C','o','u','n','t','i','n','g','_','R','o','d',0,'C','o','u','n','t','i','n','g','_','R','o','d','_','N','u','m','e','r',
-'a','l','s',0,2,'S','u','n','d','a','n','e','s','e',0,'S','u','n','d','a','n','e','s','e',0,
-2,'L','e','p','c','h','a',0,'L','e','p','c','h','a',0,2,'O','l','_','C','h','i','k','i',0,
-'O','l','_','C','h','i','k','i',0,2,'C','y','r','i','l','l','i','c','_','E','x','t','_','A',0,
-'C','y','r','i','l','l','i','c','_','E','x','t','e','n','d','e','d','_','A',0,
-2,'V','a','i',0,'V','a','i',0,2,'C','y','r','i','l','l','i','c','_','E','x','t','_','B',0,
-'C','y','r','i','l','l','i','c','_','E','x','t','e','n','d','e','d','_','B',0,
-2,'S','a','u','r','a','s','h','t','r','a',0,'S','a','u','r','a','s','h','t','r','a',0,
-2,'K','a','y','a','h','_','L','i',0,'K','a','y','a','h','_','L','i',0,
-2,'R','e','j','a','n','g',0,'R','e','j','a','n','g',0,2,'C','h','a','m',0,'C','h','a','m',0,
-2,'A','n','c','i','e','n','t','_','S','y','m','b','o','l','s',0,'A','n','c','i','e','n','t','_','S','y','m','b','o','l','s',
-0,2,'P','h','a','i','s','t','o','s',0,'P','h','a','i','s','t','o','s','_','D','i','s','c',0,
-2,'L','y','c','i','a','n',0,'L','y','c','i','a','n',0,2,'C','a','r','i','a','n',0,'C','a','r','i','a','n',0,
-2,'L','y','d','i','a','n',0,'L','y','d','i','a','n',0,2,'M','a','h','j','o','n','g',0,
-'M','a','h','j','o','n','g','_','T','i','l','e','s',0,2,'D','o','m','i','n','o',0,'D','o','m','i','n','o','_','T','i','l',
-'e','s',0,2,'S','a','m','a','r','i','t','a','n',0,'S','a','m','a','r','i','t','a','n',0,
-2,'U','C','A','S','_','E','x','t',0,'U','n','i','f','i','e','d','_','C','a','n','a','d','i','a','n','_','A','b','o','r','i',
-'g','i','n','a','l','_','S','y','l','l','a','b','i','c','s','_','E','x','t','e','n','d','e','d',0,
-2,'T','a','i','_','T','h','a','m',0,'T','a','i','_','T','h','a','m',0,
-2,'V','e','d','i','c','_','E','x','t',0,'V','e','d','i','c','_','E','x','t','e','n','s','i','o','n','s',0,
-2,'L','i','s','u',0,'L','i','s','u',0,2,'B','a','m','u','m',0,'B','a','m','u','m',0,
-2,'I','n','d','i','c','_','N','u','m','b','e','r','_','F','o','r','m','s',0,'C','o','m','m','o','n','_','I','n','d','i','c',
-'_','N','u','m','b','e','r','_','F','o','r','m','s',0,2,'D','e','v','a','n','a','g','a','r','i','_','E','x','t',0,
-'D','e','v','a','n','a','g','a','r','i','_','E','x','t','e','n','d','e','d',0,
-2,'J','a','m','o','_','E','x','t','_','A',0,'H','a','n','g','u','l','_','J','a','m','o','_','E','x','t','e','n','d','e','d',
-'_','A',0,2,'J','a','v','a','n','e','s','e',0,'J','a','v','a','n','e','s','e',0,
-2,'M','y','a','n','m','a','r','_','E','x','t','_','A',0,'M','y','a','n','m','a','r','_','E','x','t','e','n','d','e','d','_',
-'A',0,2,'T','a','i','_','V','i','e','t',0,'T','a','i','_','V','i','e','t',0,
-2,'M','e','e','t','e','i','_','M','a','y','e','k',0,'M','e','e','t','e','i','_','M','a','y','e','k',0,
-2,'J','a','m','o','_','E','x','t','_','B',0,'H','a','n','g','u','l','_','J','a','m','o','_','E','x','t','e','n','d','e','d',
-'_','B',0,2,'I','m','p','e','r','i','a','l','_','A','r','a','m','a','i','c',0,'I','m','p','e','r','i','a','l','_','A','r',
-'a','m','a','i','c',0,2,'O','l','d','_','S','o','u','t','h','_','A','r','a','b','i','a','n',0,
-'O','l','d','_','S','o','u','t','h','_','A','r','a','b','i','a','n',0,
-2,'A','v','e','s','t','a','n',0,'A','v','e','s','t','a','n',0,
-2,'I','n','s','c','r','i','p','t','i','o','n','a','l','_','P','a','r','t','h','i','a','n',0,
-'I','n','s','c','r','i','p','t','i','o','n','a','l','_','P','a','r','t','h','i','a','n',0,
-2,'I','n','s','c','r','i','p','t','i','o','n','a','l','_','P','a','h','l','a','v','i',0,'I','n','s','c','r','i','p','t','i',
-'o','n','a','l','_','P','a','h','l','a','v','i',0,2,'O','l','d','_','T','u','r','k','i','c',0,
-'O','l','d','_','T','u','r','k','i','c',0,2,'R','u','m','i',0,'R','u','m','i','_','N','u','m','e','r','a','l','_','S','y',
-'m','b','o','l','s',0,2,'K','a','i','t','h','i',0,'K','a','i','t','h','i',0,
-2,'E','g','y','p','t','i','a','n','_','H','i','e','r','o','g','l','y','p','h','s',0,'E','g','y','p','t','i','a','n','_','H',
-'i','e','r','o','g','l','y','p','h','s',0,2,'E','n','c','l','o','s','e','d','_','A','l','p','h','a','n','u','m','_','S','u',
-'p',0,'E','n','c','l','o','s','e','d','_','A','l','p','h','a','n','u','m','e','r','i','c','_','S','u','p','p','l','e','m','e',
-'n','t',0,2,'E','n','c','l','o','s','e','d','_','I','d','e','o','g','r','a','p','h','i','c','_','S','u','p',0,
-'E','n','c','l','o','s','e','d','_','I','d','e','o','g','r','a','p','h','i','c','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'C','J','K','_','E','x','t','_','C',0,'C','J','K','_','U','n','i','f','i','e','d','_','I','d','e','o','g','r','a','p','h',
-'s','_','E','x','t','e','n','s','i','o','n','_','C',0,2,'M','a','n','d','a','i','c',0,'M','a','n','d','a','i','c',0,
-2,'B','a','t','a','k',0,'B','a','t','a','k',0,2,'E','t','h','i','o','p','i','c','_','E','x','t','_','A',0,
-'E','t','h','i','o','p','i','c','_','E','x','t','e','n','d','e','d','_','A',0,
-2,'B','r','a','h','m','i',0,'B','r','a','h','m','i',0,2,'B','a','m','u','m','_','S','u','p',0,
-'B','a','m','u','m','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'K','a','n','a','_','S','u','p',0,'K','a','n','a','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'P','l','a','y','i','n','g','_','C','a','r','d','s',0,'P','l','a','y','i','n','g','_','C','a','r','d','s',0,
-2,'M','i','s','c','_','P','i','c','t','o','g','r','a','p','h','s',0,'M','i','s','c','e','l','l','a','n','e','o','u','s','_',
-'S','y','m','b','o','l','s','_','A','n','d','_','P','i','c','t','o','g','r','a','p','h','s',0,
-2,'E','m','o','t','i','c','o','n','s',0,'E','m','o','t','i','c','o','n','s',0,
-2,'T','r','a','n','s','p','o','r','t','_','A','n','d','_','M','a','p',0,'T','r','a','n','s','p','o','r','t','_','A','n','d',
-'_','M','a','p','_','S','y','m','b','o','l','s',0,2,'A','l','c','h','e','m','i','c','a','l',0,
-'A','l','c','h','e','m','i','c','a','l','_','S','y','m','b','o','l','s',0,
-2,'C','J','K','_','E','x','t','_','D',0,'C','J','K','_','U','n','i','f','i','e','d','_','I','d','e','o','g','r','a','p','h',
-'s','_','E','x','t','e','n','s','i','o','n','_','D',0,2,'A','r','a','b','i','c','_','E','x','t','_','A',0,
-'A','r','a','b','i','c','_','E','x','t','e','n','d','e','d','_','A',0,
-2,'A','r','a','b','i','c','_','M','a','t','h',0,'A','r','a','b','i','c','_','M','a','t','h','e','m','a','t','i','c','a','l',
-'_','A','l','p','h','a','b','e','t','i','c','_','S','y','m','b','o','l','s',0,
-2,'C','h','a','k','m','a',0,'C','h','a','k','m','a',0,2,'M','e','e','t','e','i','_','M','a','y','e','k','_','E','x','t',
-0,'M','e','e','t','e','i','_','M','a','y','e','k','_','E','x','t','e','n','s','i','o','n','s',0,
-2,'M','e','r','o','i','t','i','c','_','C','u','r','s','i','v','e',0,'M','e','r','o','i','t','i','c','_','C','u','r','s','i',
-'v','e',0,2,'M','e','r','o','i','t','i','c','_','H','i','e','r','o','g','l','y','p','h','s',0,
-'M','e','r','o','i','t','i','c','_','H','i','e','r','o','g','l','y','p','h','s',0,
-2,'M','i','a','o',0,'M','i','a','o',0,2,'S','h','a','r','a','d','a',0,'S','h','a','r','a','d','a',0,
-2,'S','o','r','a','_','S','o','m','p','e','n','g',0,'S','o','r','a','_','S','o','m','p','e','n','g',0,
-2,'S','u','n','d','a','n','e','s','e','_','S','u','p',0,'S','u','n','d','a','n','e','s','e','_','S','u','p','p','l','e','m',
-'e','n','t',0,2,'T','a','k','r','i',0,'T','a','k','r','i',0,
-2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i','n','g','_','C','l','a','s','s',0,
-2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_','T','y','p','e',0,
-3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0,
-3,'C','a','n',0,'C','a','n','o','n','i','c','a','l',0,'c','a','n',0,
-3,'C','o','m',0,'C','o','m','p','a','t',0,'c','o','m',0,
-3,'E','n','c',0,'C','i','r','c','l','e',0,'e','n','c',0,
-3,'F','i','n',0,'F','i','n','a','l',0,'f','i','n',0,3,'F','o','n','t',0,'F','o','n','t',0,
-'f','o','n','t',0,3,'F','r','a',0,'F','r','a','c','t','i','o','n',0,'f','r','a',0,
-3,'I','n','i','t',0,'I','n','i','t','i','a','l',0,'i','n','i','t',0,
-3,'I','s','o',0,'I','s','o','l','a','t','e','d',0,'i','s','o',0,
-3,'M','e','d',0,'M','e','d','i','a','l',0,'m','e','d',0,
-3,'N','a','r',0,'N','a','r','r','o','w',0,'n','a','r',0,
-3,'N','b',0,'N','o','b','r','e','a','k',0,'n','b',0,3,'S','m','l',0,'S','m','a','l','l',0,
-'s','m','l',0,3,'S','q','r',0,'S','q','u','a','r','e',0,'s','q','r',0,
-3,'S','u','b',0,'S','u','b',0,'s','u','b',0,3,'S','u','p',0,'S','u','p','e','r',0,
-'s','u','p',0,3,'V','e','r','t',0,'V','e','r','t','i','c','a','l',0,'v','e','r','t',0,
-3,'W','i','d','e',0,'W','i','d','e',0,'w','i','d','e',0,
-2,'e','a',0,'E','a','s','t','_','A','s','i','a','n','_','W','i','d','t','h',0,
-2,'N',0,'N','e','u','t','r','a','l',0,2,'A',0,'A','m','b','i','g','u','o','u','s',0,
-2,'H',0,'H','a','l','f','w','i','d','t','h',0,2,'F',0,'F','u','l','l','w','i','d','t','h',0,
-2,'N','a',0,'N','a','r','r','o','w',0,2,'W',0,'W','i','d','e',0,
-2,'g','c',0,'G','e','n','e','r','a','l','_','C','a','t','e','g','o','r','y',0,
-2,'C','n',0,'U','n','a','s','s','i','g','n','e','d',0,2,'L','u',0,'U','p','p','e','r','c','a','s','e','_','L','e','t',
-'t','e','r',0,2,'L','l',0,'L','o','w','e','r','c','a','s','e','_','L','e','t','t','e','r',0,
-2,'L','t',0,'T','i','t','l','e','c','a','s','e','_','L','e','t','t','e','r',0,
-2,'L','m',0,'M','o','d','i','f','i','e','r','_','L','e','t','t','e','r',0,
-2,'L','o',0,'O','t','h','e','r','_','L','e','t','t','e','r',0,
-2,'M','n',0,'N','o','n','s','p','a','c','i','n','g','_','M','a','r','k',0,
-2,'M','e',0,'E','n','c','l','o','s','i','n','g','_','M','a','r','k',0,
-2,'M','c',0,'S','p','a','c','i','n','g','_','M','a','r','k',0,
-3,'N','d',0,'D','e','c','i','m','a','l','_','N','u','m','b','e','r',0,'d','i','g','i','t',0,
-2,'N','l',0,'L','e','t','t','e','r','_','N','u','m','b','e','r',0,
-2,'N','o',0,'O','t','h','e','r','_','N','u','m','b','e','r',0,
-2,'Z','s',0,'S','p','a','c','e','_','S','e','p','a','r','a','t','o','r',0,
-2,'Z','l',0,'L','i','n','e','_','S','e','p','a','r','a','t','o','r',0,
-2,'Z','p',0,'P','a','r','a','g','r','a','p','h','_','S','e','p','a','r','a','t','o','r',0,
-3,'C','c',0,'C','o','n','t','r','o','l',0,'c','n','t','r','l',0,
-2,'C','f',0,'F','o','r','m','a','t',0,2,'C','o',0,'P','r','i','v','a','t','e','_','U','s','e',0,
-2,'C','s',0,'S','u','r','r','o','g','a','t','e',0,2,'P','d',0,'D','a','s','h','_','P','u','n','c','t','u','a','t','i',
-'o','n',0,2,'P','s',0,'O','p','e','n','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'P','e',0,'C','l','o','s','e','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'P','c',0,'C','o','n','n','e','c','t','o','r','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'P','o',0,'O','t','h','e','r','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'S','m',0,'M','a','t','h','_','S','y','m','b','o','l',0,
-2,'S','c',0,'C','u','r','r','e','n','c','y','_','S','y','m','b','o','l',0,
-2,'S','k',0,'M','o','d','i','f','i','e','r','_','S','y','m','b','o','l',0,
-2,'S','o',0,'O','t','h','e','r','_','S','y','m','b','o','l',0,
-2,'P','i',0,'I','n','i','t','i','a','l','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'P','f',0,'F','i','n','a','l','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'j','g',0,'J','o','i','n','i','n','g','_','G','r','o','u','p',0,
-2,'N','o','_','J','o','i','n','i','n','g','_','G','r','o','u','p',0,'N','o','_','J','o','i','n','i','n','g','_','G','r','o',
-'u','p',0,2,'A','i','n',0,'A','i','n',0,2,'A','l','a','p','h',0,'A','l','a','p','h',0,
-2,'A','l','e','f',0,'A','l','e','f',0,2,'B','e','h',0,'B','e','h',0,
-2,'B','e','t','h',0,'B','e','t','h',0,2,'D','a','l',0,'D','a','l',0,
-2,'D','a','l','a','t','h','_','R','i','s','h',0,'D','a','l','a','t','h','_','R','i','s','h',0,
-2,'E',0,'E',0,2,'F','e','h',0,'F','e','h',0,2,'F','i','n','a','l','_','S','e','m','k','a','t','h',0,
-'F','i','n','a','l','_','S','e','m','k','a','t','h',0,2,'G','a','f',0,'G','a','f',0,
-2,'G','a','m','a','l',0,'G','a','m','a','l',0,2,'H','a','h',0,'H','a','h',0,
-2,'T','e','h','_','M','a','r','b','u','t','a','_','G','o','a','l',0,'H','a','m','z','a','_','O','n','_','H','e','h','_','G',
-'o','a','l',0,2,'H','e',0,'H','e',0,2,'H','e','h',0,'H','e','h',0,
-2,'H','e','h','_','G','o','a','l',0,'H','e','h','_','G','o','a','l',0,
-2,'H','e','t','h',0,'H','e','t','h',0,2,'K','a','f',0,'K','a','f',0,
-2,'K','a','p','h',0,'K','a','p','h',0,2,'K','n','o','t','t','e','d','_','H','e','h',0,
-'K','n','o','t','t','e','d','_','H','e','h',0,2,'L','a','m',0,'L','a','m',0,
-2,'L','a','m','a','d','h',0,'L','a','m','a','d','h',0,2,'M','e','e','m',0,'M','e','e','m',0,
-2,'M','i','m',0,'M','i','m',0,2,'N','o','o','n',0,'N','o','o','n',0,
-2,'N','u','n',0,'N','u','n',0,2,'P','e',0,'P','e',0,
-2,'Q','a','f',0,'Q','a','f',0,2,'Q','a','p','h',0,'Q','a','p','h',0,
-2,'R','e','h',0,'R','e','h',0,2,'R','e','v','e','r','s','e','d','_','P','e',0,'R','e','v','e','r','s','e','d','_','P',
-'e',0,2,'S','a','d',0,'S','a','d',0,2,'S','a','d','h','e',0,'S','a','d','h','e',0,
-2,'S','e','e','n',0,'S','e','e','n',0,2,'S','e','m','k','a','t','h',0,'S','e','m','k','a','t','h',0,
-2,'S','h','i','n',0,'S','h','i','n',0,2,'S','w','a','s','h','_','K','a','f',0,'S','w','a','s','h','_','K','a','f',0,
-2,'S','y','r','i','a','c','_','W','a','w',0,'S','y','r','i','a','c','_','W','a','w',0,
-2,'T','a','h',0,'T','a','h',0,2,'T','a','w',0,'T','a','w',0,
-2,'T','e','h','_','M','a','r','b','u','t','a',0,'T','e','h','_','M','a','r','b','u','t','a',0,
-2,'T','e','t','h',0,'T','e','t','h',0,2,'W','a','w',0,'W','a','w',0,
-2,'Y','e','h',0,'Y','e','h',0,2,'Y','e','h','_','B','a','r','r','e','e',0,'Y','e','h','_','B','a','r','r','e','e',0,
-2,'Y','e','h','_','W','i','t','h','_','T','a','i','l',0,'Y','e','h','_','W','i','t','h','_','T','a','i','l',0,
-2,'Y','u','d','h',0,'Y','u','d','h',0,2,'Y','u','d','h','_','H','e',0,'Y','u','d','h','_','H','e',0,
-2,'Z','a','i','n',0,'Z','a','i','n',0,2,'F','e',0,'F','e',0,
-2,'K','h','a','p','h',0,'K','h','a','p','h',0,2,'Z','h','a','i','n',0,'Z','h','a','i','n',0,
-2,'B','u','r','u','s','h','a','s','k','i','_','Y','e','h','_','B','a','r','r','e','e',0,'B','u','r','u','s','h','a','s','k',
-'i','_','Y','e','h','_','B','a','r','r','e','e',0,2,'F','a','r','s','i','_','Y','e','h',0,
-'F','a','r','s','i','_','Y','e','h',0,2,'N','y','a',0,'N','y','a',0,
-2,'R','o','h','i','n','g','y','a','_','Y','e','h',0,'R','o','h','i','n','g','y','a','_','Y','e','h',0,
-2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0,
-2,'U',0,'N','o','n','_','J','o','i','n','i','n','g',0,2,'C',0,'J','o','i','n','_','C','a','u','s','i','n','g',0,
-2,'D',0,'D','u','a','l','_','J','o','i','n','i','n','g',0,
-2,'L',0,'L','e','f','t','_','J','o','i','n','i','n','g',0,
-2,'R',0,'R','i','g','h','t','_','J','o','i','n','i','n','g',0,
-2,'T',0,'T','r','a','n','s','p','a','r','e','n','t',0,2,'l','b',0,'L','i','n','e','_','B','r','e','a','k',0,
-2,'X','X',0,'U','n','k','n','o','w','n',0,2,'A','I',0,'A','m','b','i','g','u','o','u','s',0,
-2,'A','L',0,'A','l','p','h','a','b','e','t','i','c',0,2,'B','2',0,'B','r','e','a','k','_','B','o','t','h',0,
-2,'B','A',0,'B','r','e','a','k','_','A','f','t','e','r',0,
-2,'B','B',0,'B','r','e','a','k','_','B','e','f','o','r','e',0,
-2,'B','K',0,'M','a','n','d','a','t','o','r','y','_','B','r','e','a','k',0,
-2,'C','B',0,'C','o','n','t','i','n','g','e','n','t','_','B','r','e','a','k',0,
-2,'C','L',0,'C','l','o','s','e','_','P','u','n','c','t','u','a','t','i','o','n',0,
-2,'C','M',0,'C','o','m','b','i','n','i','n','g','_','M','a','r','k',0,
-2,'C','R',0,'C','a','r','r','i','a','g','e','_','R','e','t','u','r','n',0,
-2,'E','X',0,'E','x','c','l','a','m','a','t','i','o','n',0,
-2,'G','L',0,'G','l','u','e',0,2,'H','Y',0,'H','y','p','h','e','n',0,
-2,'I','D',0,'I','d','e','o','g','r','a','p','h','i','c',0,
-3,'I','N',0,'I','n','s','e','p','a','r','a','b','l','e',0,'I','n','s','e','p','e','r','a','b','l','e',0,
-2,'I','S',0,'I','n','f','i','x','_','N','u','m','e','r','i','c',0,
-2,'L','F',0,'L','i','n','e','_','F','e','e','d',0,2,'N','S',0,'N','o','n','s','t','a','r','t','e','r',0,
-2,'N','U',0,'N','u','m','e','r','i','c',0,2,'O','P',0,'O','p','e','n','_','P','u','n','c','t','u','a','t','i','o','n',
-0,2,'P','O',0,'P','o','s','t','f','i','x','_','N','u','m','e','r','i','c',0,
-2,'P','R',0,'P','r','e','f','i','x','_','N','u','m','e','r','i','c',0,
-2,'Q','U',0,'Q','u','o','t','a','t','i','o','n',0,2,'S','A',0,'C','o','m','p','l','e','x','_','C','o','n','t','e','x',
-'t',0,2,'S','G',0,'S','u','r','r','o','g','a','t','e',0,
-2,'S','P',0,'S','p','a','c','e',0,2,'S','Y',0,'B','r','e','a','k','_','S','y','m','b','o','l','s',0,
-2,'Z','W',0,'Z','W','S','p','a','c','e',0,2,'N','L',0,'N','e','x','t','_','L','i','n','e',0,
-2,'W','J',0,'W','o','r','d','_','J','o','i','n','e','r',0,
-2,'H','2',0,'H','2',0,2,'H','3',0,'H','3',0,2,'J','L',0,'J','L',0,
-2,'J','T',0,'J','T',0,2,'J','V',0,'J','V',0,2,'C','P',0,'C','l','o','s','e','_','P','a','r','e','n','t','h','e',
-'s','i','s',0,2,'C','J',0,'C','o','n','d','i','t','i','o','n','a','l','_','J','a','p','a','n','e','s','e','_','S','t','a',
-'r','t','e','r',0,2,'H','L',0,'H','e','b','r','e','w','_','L','e','t','t','e','r',0,
-2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0,
-2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0,
-2,'N','o','n','e',0,'N','o','n','e',0,2,'D','e',0,'D','e','c','i','m','a','l',0,
-2,'D','i',0,'D','i','g','i','t',0,2,'N','u',0,'N','u','m','e','r','i','c',0,
-2,'s','c',0,'S','c','r','i','p','t',0,2,'Z','y','y','y',0,'C','o','m','m','o','n',0,
-3,'Z','i','n','h',0,'I','n','h','e','r','i','t','e','d',0,'Q','a','a','i',0,
-2,'A','r','a','b',0,'A','r','a','b','i','c',0,2,'A','r','m','n',0,'A','r','m','e','n','i','a','n',0,
-2,'B','e','n','g',0,'B','e','n','g','a','l','i',0,2,'B','o','p','o',0,'B','o','p','o','m','o','f','o',0,
-2,'C','h','e','r',0,'C','h','e','r','o','k','e','e',0,3,'C','o','p','t',0,'C','o','p','t','i','c',0,
-'Q','a','a','c',0,2,'C','y','r','l',0,'C','y','r','i','l','l','i','c',0,
-2,'D','s','r','t',0,'D','e','s','e','r','e','t',0,2,'D','e','v','a',0,'D','e','v','a','n','a','g','a','r','i',0,
-2,'E','t','h','i',0,'E','t','h','i','o','p','i','c',0,2,'G','e','o','r',0,'G','e','o','r','g','i','a','n',0,
-2,'G','o','t','h',0,'G','o','t','h','i','c',0,2,'G','r','e','k',0,'G','r','e','e','k',0,
-2,'G','u','j','r',0,'G','u','j','a','r','a','t','i',0,2,'G','u','r','u',0,'G','u','r','m','u','k','h','i',0,
-2,'H','a','n','i',0,'H','a','n',0,2,'H','a','n','g',0,'H','a','n','g','u','l',0,
-2,'H','e','b','r',0,'H','e','b','r','e','w',0,2,'H','i','r','a',0,'H','i','r','a','g','a','n','a',0,
-2,'K','n','d','a',0,'K','a','n','n','a','d','a',0,2,'K','a','n','a',0,'K','a','t','a','k','a','n','a',0,
-2,'K','h','m','r',0,'K','h','m','e','r',0,2,'L','a','o','o',0,'L','a','o',0,
-2,'L','a','t','n',0,'L','a','t','i','n',0,2,'M','l','y','m',0,'M','a','l','a','y','a','l','a','m',0,
-2,'M','o','n','g',0,'M','o','n','g','o','l','i','a','n',0,
-2,'M','y','m','r',0,'M','y','a','n','m','a','r',0,2,'O','g','a','m',0,'O','g','h','a','m',0,
-2,'I','t','a','l',0,'O','l','d','_','I','t','a','l','i','c',0,
-2,'O','r','y','a',0,'O','r','i','y','a',0,2,'R','u','n','r',0,'R','u','n','i','c',0,
-2,'S','i','n','h',0,'S','i','n','h','a','l','a',0,2,'S','y','r','c',0,'S','y','r','i','a','c',0,
-2,'T','a','m','l',0,'T','a','m','i','l',0,2,'T','e','l','u',0,'T','e','l','u','g','u',0,
-2,'T','h','a','a',0,'T','h','a','a','n','a',0,2,'T','i','b','t',0,'T','i','b','e','t','a','n',0,
-2,'C','a','n','s',0,'C','a','n','a','d','i','a','n','_','A','b','o','r','i','g','i','n','a','l',0,
-2,'Y','i','i','i',0,'Y','i',0,2,'T','g','l','g',0,'T','a','g','a','l','o','g',0,
-2,'H','a','n','o',0,'H','a','n','u','n','o','o',0,2,'B','u','h','d',0,'B','u','h','i','d',0,
-2,'T','a','g','b',0,'T','a','g','b','a','n','w','a',0,2,'B','r','a','i',0,'B','r','a','i','l','l','e',0,
-2,'C','p','r','t',0,'C','y','p','r','i','o','t',0,2,'L','i','m','b',0,'L','i','m','b','u',0,
-2,'L','i','n','b',0,'L','i','n','e','a','r','_','B',0,2,'O','s','m','a',0,'O','s','m','a','n','y','a',0,
-2,'S','h','a','w',0,'S','h','a','v','i','a','n',0,2,'T','a','l','e',0,'T','a','i','_','L','e',0,
-2,'U','g','a','r',0,'U','g','a','r','i','t','i','c',0,2,'H','r','k','t',0,'K','a','t','a','k','a','n','a','_','O','r',
-'_','H','i','r','a','g','a','n','a',0,2,'B','u','g','i',0,'B','u','g','i','n','e','s','e',0,
-2,'G','l','a','g',0,'G','l','a','g','o','l','i','t','i','c',0,
-2,'K','h','a','r',0,'K','h','a','r','o','s','h','t','h','i',0,
-2,'S','y','l','o',0,'S','y','l','o','t','i','_','N','a','g','r','i',0,
-2,'T','a','l','u',0,'N','e','w','_','T','a','i','_','L','u','e',0,
-2,'T','f','n','g',0,'T','i','f','i','n','a','g','h',0,2,'X','p','e','o',0,'O','l','d','_','P','e','r','s','i','a','n',
-0,2,'B','a','l','i',0,'B','a','l','i','n','e','s','e',0,
-2,'B','a','t','k',0,'B','a','t','a','k',0,2,'B','l','i','s',0,'B','l','i','s',0,
-2,'B','r','a','h',0,'B','r','a','h','m','i',0,2,'C','i','r','t',0,'C','i','r','t',0,
-2,'C','y','r','s',0,'C','y','r','s',0,2,'E','g','y','d',0,'E','g','y','d',0,
-2,'E','g','y','h',0,'E','g','y','h',0,2,'E','g','y','p',0,'E','g','y','p','t','i','a','n','_','H','i','e','r','o','g',
-'l','y','p','h','s',0,2,'G','e','o','k',0,'G','e','o','k',0,
-2,'H','a','n','s',0,'H','a','n','s',0,2,'H','a','n','t',0,'H','a','n','t',0,
-2,'H','m','n','g',0,'H','m','n','g',0,2,'H','u','n','g',0,'H','u','n','g',0,
-2,'I','n','d','s',0,'I','n','d','s',0,2,'J','a','v','a',0,'J','a','v','a','n','e','s','e',0,
-2,'K','a','l','i',0,'K','a','y','a','h','_','L','i',0,2,'L','a','t','f',0,'L','a','t','f',0,
-2,'L','a','t','g',0,'L','a','t','g',0,2,'L','e','p','c',0,'L','e','p','c','h','a',0,
-2,'L','i','n','a',0,'L','i','n','a',0,2,'M','a','n','d',0,'M','a','n','d','a','i','c',0,
-2,'M','a','y','a',0,'M','a','y','a',0,2,'M','e','r','o',0,'M','e','r','o','i','t','i','c','_','H','i','e','r','o','g',
-'l','y','p','h','s',0,2,'N','k','o','o',0,'N','k','o',0,
-2,'O','r','k','h',0,'O','l','d','_','T','u','r','k','i','c',0,
-2,'P','e','r','m',0,'P','e','r','m',0,2,'P','h','a','g',0,'P','h','a','g','s','_','P','a',0,
-2,'P','h','n','x',0,'P','h','o','e','n','i','c','i','a','n',0,
-2,'P','l','r','d',0,'M','i','a','o',0,2,'R','o','r','o',0,'R','o','r','o',0,
-2,'S','a','r','a',0,'S','a','r','a',0,2,'S','y','r','e',0,'S','y','r','e',0,
-2,'S','y','r','j',0,'S','y','r','j',0,2,'S','y','r','n',0,'S','y','r','n',0,
-2,'T','e','n','g',0,'T','e','n','g',0,2,'V','a','i','i',0,'V','a','i',0,
-2,'V','i','s','p',0,'V','i','s','p',0,2,'X','s','u','x',0,'C','u','n','e','i','f','o','r','m',0,
-2,'Z','x','x','x',0,'Z','x','x','x',0,2,'Z','z','z','z',0,'U','n','k','n','o','w','n',0,
-2,'C','a','r','i',0,'C','a','r','i','a','n',0,2,'J','p','a','n',0,'J','p','a','n',0,
-2,'L','a','n','a',0,'T','a','i','_','T','h','a','m',0,2,'L','y','c','i',0,'L','y','c','i','a','n',0,
-2,'L','y','d','i',0,'L','y','d','i','a','n',0,2,'O','l','c','k',0,'O','l','_','C','h','i','k','i',0,
-2,'R','j','n','g',0,'R','e','j','a','n','g',0,2,'S','a','u','r',0,'S','a','u','r','a','s','h','t','r','a',0,
-2,'S','g','n','w',0,'S','g','n','w',0,2,'S','u','n','d',0,'S','u','n','d','a','n','e','s','e',0,
-2,'M','o','o','n',0,'M','o','o','n',0,2,'M','t','e','i',0,'M','e','e','t','e','i','_','M','a','y','e','k',0,
-2,'A','r','m','i',0,'I','m','p','e','r','i','a','l','_','A','r','a','m','a','i','c',0,
-2,'A','v','s','t',0,'A','v','e','s','t','a','n',0,2,'C','a','k','m',0,'C','h','a','k','m','a',0,
-2,'K','o','r','e',0,'K','o','r','e',0,2,'K','t','h','i',0,'K','a','i','t','h','i',0,
-2,'M','a','n','i',0,'M','a','n','i',0,2,'P','h','l','i',0,'I','n','s','c','r','i','p','t','i','o','n','a','l','_','P',
-'a','h','l','a','v','i',0,2,'P','h','l','p',0,'P','h','l','p',0,
-2,'P','h','l','v',0,'P','h','l','v',0,2,'P','r','t','i',0,'I','n','s','c','r','i','p','t','i','o','n','a','l','_','P',
-'a','r','t','h','i','a','n',0,2,'S','a','m','r',0,'S','a','m','a','r','i','t','a','n',0,
-2,'T','a','v','t',0,'T','a','i','_','V','i','e','t',0,2,'Z','m','t','h',0,'Z','m','t','h',0,
-2,'Z','s','y','m',0,'Z','s','y','m',0,2,'B','a','m','u',0,'B','a','m','u','m',0,
-2,'N','k','g','b',0,'N','k','g','b',0,2,'S','a','r','b',0,'O','l','d','_','S','o','u','t','h','_','A','r','a','b','i',
-'a','n',0,2,'B','a','s','s',0,'B','a','s','s',0,2,'D','u','p','l',0,'D','u','p','l',0,
-2,'E','l','b','a',0,'E','l','b','a',0,2,'G','r','a','n',0,'G','r','a','n',0,
-2,'K','p','e','l',0,'K','p','e','l',0,2,'L','o','m','a',0,'L','o','m','a',0,
-2,'M','e','n','d',0,'M','e','n','d',0,2,'M','e','r','c',0,'M','e','r','o','i','t','i','c','_','C','u','r','s','i','v',
-'e',0,2,'N','a','r','b',0,'N','a','r','b',0,2,'N','b','a','t',0,'N','b','a','t',0,
-2,'P','a','l','m',0,'P','a','l','m',0,2,'S','i','n','d',0,'S','i','n','d',0,
-2,'W','a','r','a',0,'W','a','r','a',0,2,'A','f','a','k',0,'A','f','a','k',0,
-2,'J','u','r','c',0,'J','u','r','c',0,2,'M','r','o','o',0,'M','r','o','o',0,
-2,'N','s','h','u',0,'N','s','h','u',0,2,'S','h','r','d',0,'S','h','a','r','a','d','a',0,
-2,'S','o','r','a',0,'S','o','r','a','_','S','o','m','p','e','n','g',0,
-2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g',0,
-2,'W','o','l','e',0,'W','o','l','e',0,2,'H','l','u','w',0,'H','l','u','w',0,
-2,'K','h','o','j',0,'K','h','o','j',0,2,'T','i','r','h',0,'T','i','r','h',0,
-2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l','e','_','T','y','p','e',0,
-2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0,
-2,'L',0,'L','e','a','d','i','n','g','_','J','a','m','o',0,
-2,'V',0,'V','o','w','e','l','_','J','a','m','o',0,2,'T',0,'T','r','a','i','l','i','n','g','_','J','a','m','o',0,
-2,'L','V',0,'L','V','_','S','y','l','l','a','b','l','e',0,
-2,'L','V','T',0,'L','V','T','_','S','y','l','l','a','b','l','e',0,
-2,'N','F','D','_','Q','C',0,'N','F','D','_','Q','u','i','c','k','_','C','h','e','c','k',0,
-2,'N',0,'N','o',0,2,'Y',0,'Y','e','s',0,2,'N','F','K','D','_','Q','C',0,'N','F','K','D','_','Q','u','i','c','k',
-'_','C','h','e','c','k',0,2,'N','F','C','_','Q','C',0,'N','F','C','_','Q','u','i','c','k','_','C','h','e','c','k',0,
-2,'M',0,'M','a','y','b','e',0,2,'N','F','K','C','_','Q','C',0,'N','F','K','C','_','Q','u','i','c','k','_','C','h','e',
-'c','k',0,2,'l','c','c','c',0,'L','e','a','d','_','C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i','n',
-'g','_','C','l','a','s','s',0,2,'t','c','c','c',0,'T','r','a','i','l','_','C','a','n','o','n','i','c','a','l','_','C','o',
-'m','b','i','n','i','n','g','_','C','l','a','s','s',0,2,'G','C','B',0,'G','r','a','p','h','e','m','e','_','C','l','u','s',
-'t','e','r','_','B','r','e','a','k',0,2,'X','X',0,'O','t','h','e','r',0,
-2,'C','N',0,'C','o','n','t','r','o','l',0,2,'C','R',0,'C','R',0,
-2,'E','X',0,'E','x','t','e','n','d',0,2,'L',0,'L',0,
-2,'L','F',0,'L','F',0,2,'L','V',0,'L','V',0,2,'L','V','T',0,'L','V','T',0,
-2,'T',0,'T',0,2,'V',0,'V',0,2,'S','M',0,'S','p','a','c','i','n','g','M','a','r','k',0,
-2,'P','P',0,'P','r','e','p','e','n','d',0,2,'S','B',0,'S','e','n','t','e','n','c','e','_','B','r','e','a','k',0,
-2,'A','T',0,'A','T','e','r','m',0,2,'C','L',0,'C','l','o','s','e',0,
-2,'F','O',0,'F','o','r','m','a','t',0,2,'L','O',0,'L','o','w','e','r',0,
-2,'L','E',0,'O','L','e','t','t','e','r',0,2,'S','E',0,'S','e','p',0,
-2,'S','P',0,'S','p',0,2,'S','T',0,'S','T','e','r','m',0,
-2,'U','P',0,'U','p','p','e','r',0,2,'S','C',0,'S','C','o','n','t','i','n','u','e',0,
-2,'W','B',0,'W','o','r','d','_','B','r','e','a','k',0,2,'L','E',0,'A','L','e','t','t','e','r',0,
-2,'K','A',0,'K','a','t','a','k','a','n','a',0,2,'M','L',0,'M','i','d','L','e','t','t','e','r',0,
-2,'M','N',0,'M','i','d','N','u','m',0,2,'E','X',0,'E','x','t','e','n','d','N','u','m','L','e','t',0,
-2,'E','x','t','e','n','d',0,'E','x','t','e','n','d',0,2,'M','B',0,'M','i','d','N','u','m','L','e','t',0,
-2,'N','L',0,'N','e','w','l','i','n','e',0,2,'g','c','m',0,'G','e','n','e','r','a','l','_','C','a','t','e','g','o','r',
-'y','_','M','a','s','k',0,2,'C',0,'O','t','h','e','r',0,
-2,'L',0,'L','e','t','t','e','r',0,2,'L','C',0,'C','a','s','e','d','_','L','e','t','t','e','r',0,
-3,'M',0,'M','a','r','k',0,'C','o','m','b','i','n','i','n','g','_','M','a','r','k',0,
-2,'N',0,'N','u','m','b','e','r',0,3,'P',0,'P','u','n','c','t','u','a','t','i','o','n',0,
-'p','u','n','c','t',0,2,'S',0,'S','y','m','b','o','l',0,
-2,'Z',0,'S','e','p','a','r','a','t','o','r',0,2,'n','v',0,'N','u','m','e','r','i','c','_','V','a','l','u','e',0,
-2,'a','g','e',0,'A','g','e',0,2,'b','m','g',0,'B','i','d','i','_','M','i','r','r','o','r','i','n','g','_','G','l','y',
-'p','h',0,2,'c','f',0,'C','a','s','e','_','F','o','l','d','i','n','g',0,
-2,'i','s','c',0,'I','S','O','_','C','o','m','m','e','n','t',0,
-2,'l','c',0,'L','o','w','e','r','c','a','s','e','_','M','a','p','p','i','n','g',0,
-2,'n','a',0,'N','a','m','e',0,3,'s','c','f',0,'S','i','m','p','l','e','_','C','a','s','e','_','F','o','l','d','i','n',
-'g',0,'s','f','c',0,2,'s','l','c',0,'S','i','m','p','l','e','_','L','o','w','e','r','c','a','s','e','_','M','a','p','p',
-'i','n','g',0,2,'s','t','c',0,'S','i','m','p','l','e','_','T','i','t','l','e','c','a','s','e','_','M','a','p','p','i','n',
-'g',0,2,'s','u','c',0,'S','i','m','p','l','e','_','U','p','p','e','r','c','a','s','e','_','M','a','p','p','i','n','g',0,
-2,'t','c',0,'T','i','t','l','e','c','a','s','e','_','M','a','p','p','i','n','g',0,
-2,'n','a','1',0,'U','n','i','c','o','d','e','_','1','_','N','a','m','e',0,
-2,'u','c',0,'U','p','p','e','r','c','a','s','e','_','M','a','p','p','i','n','g',0,
-2,'s','c','x',0,'S','c','r','i','p','t','_','E','x','t','e','n','s','i','o','n','s',0
-};
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/propsvec.c b/src/third_party/mozjs/intl/icu/source/common/propsvec.c
deleted file mode 100644
index f91a155..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/propsvec.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  propsvec.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002feb22
-*   created by: Markus W. Scherer
-*
-*   Store bits (Unicode character properties) in bit set vectors.
-*/
-
-#include <stdlib.h>
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "utrie.h"
-#include "utrie2.h"
-#include "uarrsort.h"
-#include "propsvec.h"
-#include "uassert.h"
-
-struct UPropsVectors {
-    uint32_t *v;
-    int32_t columns;  /* number of columns, plus two for start & limit values */
-    int32_t maxRows;
-    int32_t rows;
-    int32_t prevRow;  /* search optimization: remember last row seen */
-    UBool isCompacted;
-};
-
-#define UPVEC_INITIAL_ROWS (1<<12)
-#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16)
-#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1)
-
-U_CAPI UPropsVectors * U_EXPORT2
-upvec_open(int32_t columns, UErrorCode *pErrorCode) {
-    UPropsVectors *pv;
-    uint32_t *v, *row;
-    uint32_t cp;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return NULL;
-    }
-    if(columns<1) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    columns+=2; /* count range start and limit columns */
-
-    pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors));
-    v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4);
-    if(pv==NULL || v==NULL) {
-        uprv_free(pv);
-        uprv_free(v);
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    uprv_memset(pv, 0, sizeof(UPropsVectors));
-    pv->v=v;
-    pv->columns=columns;
-    pv->maxRows=UPVEC_INITIAL_ROWS;
-    pv->rows=2+(UPVEC_MAX_CP-UPVEC_FIRST_SPECIAL_CP);
-
-    /* set the all-Unicode row and the special-value rows */
-    row=pv->v;
-    uprv_memset(row, 0, pv->rows*columns*4);
-    row[0]=0;
-    row[1]=0x110000;
-    row+=columns;
-    for(cp=UPVEC_FIRST_SPECIAL_CP; cp<=UPVEC_MAX_CP; ++cp) {
-        row[0]=cp;
-        row[1]=cp+1;
-        row+=columns;
-    }
-    return pv;
-}
-
-U_CAPI void U_EXPORT2
-upvec_close(UPropsVectors *pv) {
-    if(pv!=NULL) {
-        uprv_free(pv->v);
-        uprv_free(pv);
-    }
-}
-
-static uint32_t *
-_findRow(UPropsVectors *pv, UChar32 rangeStart) {
-    uint32_t *row;
-    int32_t columns, i, start, limit, prevRow;
-
-    columns=pv->columns;
-    limit=pv->rows;
-    prevRow=pv->prevRow;
-
-    /* check the vicinity of the last-seen row (start searching with an unrolled loop) */
-    row=pv->v+prevRow*columns;
-    if(rangeStart>=(UChar32)row[0]) {
-        if(rangeStart<(UChar32)row[1]) {
-            /* same row as last seen */
-            return row;
-        } else if(rangeStart<(UChar32)(row+=columns)[1]) {
-            /* next row after the last one */
-            pv->prevRow=prevRow+1;
-            return row;
-        } else if(rangeStart<(UChar32)(row+=columns)[1]) {
-            /* second row after the last one */
-            pv->prevRow=prevRow+2;
-            return row;
-        } else if((rangeStart-(UChar32)row[1])<10) {
-            /* we are close, continue looping */
-            prevRow+=2;
-            do {
-                ++prevRow;
-                row+=columns;
-            } while(rangeStart>=(UChar32)row[1]);
-            pv->prevRow=prevRow;
-            return row;
-        }
-    } else if(rangeStart<(UChar32)pv->v[1]) {
-        /* the very first row */
-        pv->prevRow=0;
-        return pv->v;
-    }
-
-    /* do a binary search for the start of the range */
-    start=0;
-    while(start<limit-1) {
-        i=(start+limit)/2;
-        row=pv->v+i*columns;
-        if(rangeStart<(UChar32)row[0]) {
-            limit=i;
-        } else if(rangeStart<(UChar32)row[1]) {
-            pv->prevRow=i;
-            return row;
-        } else {
-            start=i;
-        }
-    }
-
-    /* must be found because all ranges together always cover all of Unicode */
-    pv->prevRow=start;
-    return pv->v+start*columns;
-}
-
-U_CAPI void U_EXPORT2
-upvec_setValue(UPropsVectors *pv,
-               UChar32 start, UChar32 end,
-               int32_t column,
-               uint32_t value, uint32_t mask,
-               UErrorCode *pErrorCode) {
-    uint32_t *firstRow, *lastRow;
-    int32_t columns;
-    UChar32 limit;
-    UBool splitFirstRow, splitLastRow;
-
-    /* argument checking */
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-    if( pv==NULL ||
-        start<0 || start>end || end>UPVEC_MAX_CP ||
-        column<0 || column>=(pv->columns-2)
-    ) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if(pv->isCompacted) {
-        *pErrorCode=U_NO_WRITE_PERMISSION;
-        return;
-    }
-    limit=end+1;
-
-    /* initialize */
-    columns=pv->columns;
-    column+=2; /* skip range start and limit columns */
-    value&=mask;
-
-    /* find the rows whose ranges overlap with the input range */
-
-    /* find the first and last rows, always successful */
-    firstRow=_findRow(pv, start);
-    lastRow=_findRow(pv, end);
-
-    /*
-     * Rows need to be split if they partially overlap with the
-     * input range (only possible for the first and last rows)
-     * and if their value differs from the input value.
-     */
-    splitFirstRow= (UBool)(start!=(UChar32)firstRow[0] && value!=(firstRow[column]&mask));
-    splitLastRow= (UBool)(limit!=(UChar32)lastRow[1] && value!=(lastRow[column]&mask));
-
-    /* split first/last rows if necessary */
-    if(splitFirstRow || splitLastRow) {
-        int32_t count, rows;
-
-        rows=pv->rows;
-        if((rows+splitFirstRow+splitLastRow)>pv->maxRows) {
-            uint32_t *newVectors;
-            int32_t newMaxRows;
-
-            if(pv->maxRows<UPVEC_MEDIUM_ROWS) {
-                newMaxRows=UPVEC_MEDIUM_ROWS;
-            } else if(pv->maxRows<UPVEC_MAX_ROWS) {
-                newMaxRows=UPVEC_MAX_ROWS;
-            } else {
-                /* Implementation bug, or UPVEC_MAX_ROWS too low. */
-                *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
-                return;
-            }
-            newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
-            if(newVectors==NULL) {
-                *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-                return;
-            }
-            uprv_memcpy(newVectors, pv->v, rows*columns*4);
-            firstRow=newVectors+(firstRow-pv->v);
-            lastRow=newVectors+(lastRow-pv->v);
-            uprv_free(pv->v);
-            pv->v=newVectors;
-            pv->maxRows=newMaxRows;
-        }
-
-        /* count the number of row cells to move after the last row, and move them */
-        count = (int32_t)((pv->v+rows*columns)-(lastRow+columns));
-        if(count>0) {
-            uprv_memmove(
-                lastRow+(1+splitFirstRow+splitLastRow)*columns,
-                lastRow+columns,
-                count*4);
-        }
-        pv->rows=rows+splitFirstRow+splitLastRow;
-
-        /* split the first row, and move the firstRow pointer to the second part */
-        if(splitFirstRow) {
-            /* copy all affected rows up one and move the lastRow pointer */
-            count = (int32_t)((lastRow-firstRow)+columns);
-            uprv_memmove(firstRow+columns, firstRow, count*4);
-            lastRow+=columns;
-
-            /* split the range and move the firstRow pointer */
-            firstRow[1]=firstRow[columns]=(uint32_t)start;
-            firstRow+=columns;
-        }
-
-        /* split the last row */
-        if(splitLastRow) {
-            /* copy the last row data */
-            uprv_memcpy(lastRow+columns, lastRow, columns*4);
-
-            /* split the range and move the firstRow pointer */
-            lastRow[1]=lastRow[columns]=(uint32_t)limit;
-        }
-    }
-
-    /* set the "row last seen" to the last row for the range */
-    pv->prevRow=(int32_t)((lastRow-(pv->v))/columns);
-
-    /* set the input value in all remaining rows */
-    firstRow+=column;
-    lastRow+=column;
-    mask=~mask;
-    for(;;) {
-        *firstRow=(*firstRow&mask)|value;
-        if(firstRow==lastRow) {
-            break;
-        }
-        firstRow+=columns;
-    }
-}
-
-U_CAPI uint32_t U_EXPORT2
-upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column) {
-    uint32_t *row;
-    UPropsVectors *ncpv;
-
-    if(pv->isCompacted || c<0 || c>UPVEC_MAX_CP || column<0 || column>=(pv->columns-2)) {
-        return 0;
-    }
-    ncpv=(UPropsVectors *)pv;
-    row=_findRow(ncpv, c);
-    return row[2+column];
-}
-
-U_CAPI uint32_t * U_EXPORT2
-upvec_getRow(const UPropsVectors *pv, int32_t rowIndex,
-             UChar32 *pRangeStart, UChar32 *pRangeEnd) {
-    uint32_t *row;
-    int32_t columns;
-
-    if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) {
-        return NULL;
-    }
-
-    columns=pv->columns;
-    row=pv->v+rowIndex*columns;
-    if(pRangeStart!=NULL) {
-        *pRangeStart=(UChar32)row[0];
-    }
-    if(pRangeEnd!=NULL) {
-        *pRangeEnd=(UChar32)row[1]-1;
-    }
-    return row+2;
-}
-
-static int32_t U_CALLCONV
-upvec_compareRows(const void *context, const void *l, const void *r) {
-    const uint32_t *left=(const uint32_t *)l, *right=(const uint32_t *)r;
-    const UPropsVectors *pv=(const UPropsVectors *)context;
-    int32_t i, count, columns;
-
-    count=columns=pv->columns; /* includes start/limit columns */
-
-    /* start comparing after start/limit but wrap around to them */
-    i=2;
-    do {
-        if(left[i]!=right[i]) {
-            return left[i]<right[i] ? -1 : 1;
-        }
-        if(++i==columns) {
-            i=0;
-        }
-    } while(--count>0);
-
-    return 0;
-}
-
-U_CAPI void U_EXPORT2
-upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) {
-    uint32_t *row;
-    int32_t i, columns, valueColumns, rows, count;
-    UChar32 start, limit;
-
-    /* argument checking */
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-    if(handler==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if(pv->isCompacted) {
-        return;
-    }
-
-    /* Set the flag now: Sorting and compacting destroys the builder data structure. */
-    pv->isCompacted=TRUE;
-
-    rows=pv->rows;
-    columns=pv->columns;
-    U_ASSERT(columns>=3); /* upvec_open asserts this */
-    valueColumns=columns-2; /* not counting start & limit */
-
-    /* sort the properties vectors to find unique vector values */
-    uprv_sortArray(pv->v, rows, columns*4,
-                   upvec_compareRows, pv, FALSE, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /*
-     * Find and set the special values.
-     * This has to do almost the same work as the compaction below,
-     * to find the indexes where the special-value rows will move.
-     */
-    row=pv->v;
-    count=-valueColumns;
-    for(i=0; i<rows; ++i) {
-        start=(UChar32)row[0];
-
-        /* count a new values vector if it is different from the current one */
-        if(count<0 || 0!=uprv_memcmp(row+2, row-valueColumns, valueColumns*4)) {
-            count+=valueColumns;
-        }
-
-        if(start>=UPVEC_FIRST_SPECIAL_CP) {
-            handler(context, start, start, count, row+2, valueColumns, pErrorCode);
-            if(U_FAILURE(*pErrorCode)) {
-                return;
-            }
-        }
-
-        row+=columns;
-    }
-
-    /* count is at the beginning of the last vector, add valueColumns to include that last vector */
-    count+=valueColumns;
-
-    /* Call the handler once more to signal the start of delivering real values. */
-    handler(context, UPVEC_START_REAL_VALUES_CP, UPVEC_START_REAL_VALUES_CP,
-            count, row-valueColumns, valueColumns, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /*
-     * Move vector contents up to a contiguous array with only unique
-     * vector values, and call the handler function for each vector.
-     *
-     * This destroys the Properties Vector structure and replaces it
-     * with an array of just vector values.
-     */
-    row=pv->v;
-    count=-valueColumns;
-    for(i=0; i<rows; ++i) {
-        /* fetch these first before memmove() may overwrite them */
-        start=(UChar32)row[0];
-        limit=(UChar32)row[1];
-
-        /* add a new values vector if it is different from the current one */
-        if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) {
-            count+=valueColumns;
-            uprv_memmove(pv->v+count, row+2, valueColumns*4);
-        }
-
-        if(start<UPVEC_FIRST_SPECIAL_CP) {
-            handler(context, start, limit-1, count, pv->v+count, valueColumns, pErrorCode);
-            if(U_FAILURE(*pErrorCode)) {
-                return;
-            }
-        }
-
-        row+=columns;
-    }
-
-    /* count is at the beginning of the last vector, add one to include that last vector */
-    pv->rows=count/valueColumns+1;
-}
-
-U_CAPI const uint32_t * U_EXPORT2
-upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) {
-    if(!pv->isCompacted) {
-        return NULL;
-    }
-    if(pRows!=NULL) {
-        *pRows=pv->rows;
-    }
-    if(pColumns!=NULL) {
-        *pColumns=pv->columns-2;
-    }
-    return pv->v;
-}
-
-U_CAPI uint32_t * U_EXPORT2
-upvec_cloneArray(const UPropsVectors *pv,
-                 int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode) {
-    uint32_t *clonedArray;
-    int32_t byteLength;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return NULL;
-    }
-    if(!pv->isCompacted) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    byteLength=pv->rows*(pv->columns-2)*4;
-    clonedArray=(uint32_t *)uprv_malloc(byteLength);
-    if(clonedArray==NULL) {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    uprv_memcpy(clonedArray, pv->v, byteLength);
-    if(pRows!=NULL) {
-        *pRows=pv->rows;
-    }
-    if(pColumns!=NULL) {
-        *pColumns=pv->columns-2;
-    }
-    return clonedArray;
-}
-
-U_CAPI UTrie2 * U_EXPORT2
-upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) {
-    UPVecToUTrie2Context toUTrie2={ NULL };
-    upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode);
-    utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        utrie2_close(toUTrie2.trie);
-        toUTrie2.trie=NULL;
-    }
-    return toUTrie2.trie;
-}
-
-/*
- * TODO(markus): Add upvec_16BitsToUTrie2() function that enumerates all rows, extracts
- * some 16-bit field and builds and returns a UTrie2.
- */
-
-U_CAPI void U_CALLCONV
-upvec_compactToUTrie2Handler(void *context,
-                             UChar32 start, UChar32 end,
-                             int32_t rowIndex, uint32_t *row, int32_t columns,
-                             UErrorCode *pErrorCode) {
-    UPVecToUTrie2Context *toUTrie2=(UPVecToUTrie2Context *)context;
-    if(start<UPVEC_FIRST_SPECIAL_CP) {
-        utrie2_setRange32(toUTrie2->trie, start, end, (uint32_t)rowIndex, TRUE, pErrorCode);
-    } else {
-        switch(start) {
-        case UPVEC_INITIAL_VALUE_CP:
-            toUTrie2->initialValue=rowIndex;
-            break;
-        case UPVEC_ERROR_VALUE_CP:
-            toUTrie2->errorValue=rowIndex;
-            break;
-        case UPVEC_START_REAL_VALUES_CP:
-            toUTrie2->maxValue=rowIndex;
-            if(rowIndex>0xffff) {
-                /* too many rows for a 16-bit trie */
-                *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            } else {
-                toUTrie2->trie=utrie2_open(toUTrie2->initialValue,
-                                           toUTrie2->errorValue, pErrorCode);
-            }
-            break;
-        default:
-            break;
-        }
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/propsvec.h b/src/third_party/mozjs/intl/icu/source/common/propsvec.h
deleted file mode 100644
index fb62809..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/propsvec.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  propsvec.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002feb22
-*   created by: Markus W. Scherer
-*
-*   Store bits (Unicode character properties) in bit set vectors.
-*/
-
-#ifndef __UPROPSVEC_H__
-#define __UPROPSVEC_H__
-
-#include "unicode/utypes.h"
-#include "utrie.h"
-#include "utrie2.h"
-
-U_CDECL_BEGIN
-
-/**
- * Unicode Properties Vectors associated with code point ranges.
- *
- * Rows of uint32_t integers in a contiguous array store
- * the range limits and the properties vectors.
- *
- * Logically, each row has a certain number of uint32_t values,
- * which is set via the upvec_open() "columns" parameter.
- *
- * Internally, two additional columns are stored.
- * In each internal row,
- * row[0] contains the start code point and
- * row[1] contains the limit code point,
- * which is the start of the next range.
- *
- * Initially, there is only one "normal" row for
- * range [0..0x110000[ with values 0.
- * There are additional rows for special purposes, see UPVEC_FIRST_SPECIAL_CP.
- *
- * It would be possible to store only one range boundary per row,
- * but self-contained rows allow to later sort them by contents.
- */
-struct UPropsVectors;
-typedef struct UPropsVectors UPropsVectors;
-
-/*
- * Special pseudo code points for storing the initialValue and the errorValue,
- * which are used to initialize a UTrie2 or similar.
- */
-#define UPVEC_FIRST_SPECIAL_CP 0x110000
-#define UPVEC_INITIAL_VALUE_CP 0x110000
-#define UPVEC_ERROR_VALUE_CP 0x110001
-#define UPVEC_MAX_CP 0x110001
-
-/*
- * Special pseudo code point used in upvec_compact() signalling the end of
- * delivering special values and the beginning of delivering real ones.
- * Stable value, unlike UPVEC_MAX_CP which might grow over time.
- */
-#define UPVEC_START_REAL_VALUES_CP 0x200000
-
-/*
- * Open a UPropsVectors object.
- * @param columns Number of value integers (uint32_t) per row.
- */
-U_CAPI UPropsVectors * U_EXPORT2
-upvec_open(int32_t columns, UErrorCode *pErrorCode);
-
-U_CAPI void U_EXPORT2
-upvec_close(UPropsVectors *pv);
-
-/*
- * In rows for code points [start..end], select the column,
- * reset the mask bits and set the value bits (ANDed with the mask).
- *
- * Will set U_NO_WRITE_PERMISSION if called after upvec_compact().
- */
-U_CAPI void U_EXPORT2
-upvec_setValue(UPropsVectors *pv,
-               UChar32 start, UChar32 end,
-               int32_t column,
-               uint32_t value, uint32_t mask,
-               UErrorCode *pErrorCode);
-
-/*
- * Logically const but must not be used on the same pv concurrently!
- * Always returns 0 if called after upvec_compact().
- */
-U_CAPI uint32_t U_EXPORT2
-upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column);
-
-/*
- * pRangeStart and pRangeEnd can be NULL.
- * @return NULL if rowIndex out of range and for illegal arguments,
- *         or if called after upvec_compact()
- */
-U_CAPI uint32_t * U_EXPORT2
-upvec_getRow(const UPropsVectors *pv, int32_t rowIndex,
-             UChar32 *pRangeStart, UChar32 *pRangeEnd);
-
-/*
- * Compact the vectors:
- * - modify the memory
- * - keep only unique vectors
- * - store them contiguously from the beginning of the memory
- * - for each (non-unique) row, call the handler function
- *
- * The handler's rowIndex is the index of the row in the compacted
- * memory block.
- * (Therefore, it starts at 0 increases in increments of the columns value.)
- *
- * In a first phase, only special values are delivered (each exactly once),
- * with start==end both equalling a special pseudo code point.
- * Then the handler is called once more with start==end==UPVEC_START_REAL_VALUES_CP
- * where rowIndex is the length of the compacted array,
- * and the row is arbitrary (but not NULL).
- * Then, in the second phase, the handler is called for each row of real values.
- */
-typedef void U_CALLCONV
-UPVecCompactHandler(void *context,
-                    UChar32 start, UChar32 end,
-                    int32_t rowIndex, uint32_t *row, int32_t columns,
-                    UErrorCode *pErrorCode);
-
-U_CAPI void U_EXPORT2
-upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode);
-
-/*
- * Get the vectors array after calling upvec_compact().
- * The caller must not modify nor release the returned array.
- * Returns NULL if called before upvec_compact().
- */
-U_CAPI const uint32_t * U_EXPORT2
-upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns);
-
-/*
- * Get a clone of the vectors array after calling upvec_compact().
- * The caller owns the returned array and must uprv_free() it.
- * Returns NULL if called before upvec_compact().
- */
-U_CAPI uint32_t * U_EXPORT2
-upvec_cloneArray(const UPropsVectors *pv,
-                 int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode);
-
-/*
- * Call upvec_compact(), create a 16-bit UTrie2 with indexes into the compacted
- * vectors array, and freeze the trie.
- */
-U_CAPI UTrie2 * U_EXPORT2
-upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode);
-
-struct UPVecToUTrie2Context {
-    UTrie2 *trie;
-    int32_t initialValue;
-    int32_t errorValue;
-    int32_t maxValue;
-};
-typedef struct UPVecToUTrie2Context UPVecToUTrie2Context;
-
-/* context=UPVecToUTrie2Context, creates the trie and stores the rowIndex values */
-U_CAPI void U_CALLCONV
-upvec_compactToUTrie2Handler(void *context,
-                             UChar32 start, UChar32 end,
-                             int32_t rowIndex, uint32_t *row, int32_t columns,
-                             UErrorCode *pErrorCode);
-
-U_CDECL_END
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/punycode.cpp b/src/third_party/mozjs/intl/icu/source/common/punycode.cpp
deleted file mode 100644
index e2b3a58..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/punycode.cpp
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  punycode.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002jan31
-*   created by: Markus W. Scherer
-*/
-
-
-/* This ICU code derived from: */
-/*
-punycode.c 0.4.0 (2001-Nov-17-Sat)
-http://www.cs.berkeley.edu/~amc/idn/
-Adam M. Costello
-http://www.nicemice.net/amc/
-
-Disclaimer and license
-
-    Regarding this entire document or any portion of it (including
-    the pseudocode and C code), the author makes no guarantees and
-    is not responsible for any damage resulting from its use.  The
-    author grants irrevocable permission to anyone to use, modify,
-    and distribute it in any way that does not diminish the rights
-    of anyone else to use, modify, and distribute it, provided that
-    redistributed derivative works do not contain misleading author or
-    version information.  Derivative works need not be licensed under
-    similar terms.
-*/
-/*
- * ICU modifications:
- * - ICU data types and coding conventions
- * - ICU string buffer handling with implicit source lengths
- *   and destination preflighting
- * - UTF-16 handling
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_IDNA
-
-#include "unicode/ustring.h"
-#include "unicode/utf.h"
-#include "unicode/utf16.h"
-#include "ustr_imp.h"
-#include "cstring.h"
-#include "cmemory.h"
-#include "punycode.h"
-#include "uassert.h"
-
-
-/* Punycode ----------------------------------------------------------------- */
-
-/* Punycode parameters for Bootstring */
-#define BASE            36
-#define TMIN            1
-#define TMAX            26
-#define SKEW            38
-#define DAMP            700
-#define INITIAL_BIAS    72
-#define INITIAL_N       0x80
-
-/* "Basic" Unicode/ASCII code points */
-#define _HYPHEN         0X2d
-#define DELIMITER       _HYPHEN
-
-#define _ZERO_          0X30
-#define _NINE           0x39
-
-#define _SMALL_A        0X61
-#define _SMALL_Z        0X7a
-
-#define _CAPITAL_A      0X41
-#define _CAPITAL_Z      0X5a
-
-#define IS_BASIC(c) ((c)<0x80)
-#define IS_BASIC_UPPERCASE(c) (_CAPITAL_A<=(c) && (c)<=_CAPITAL_Z)
-
-/**
- * digitToBasic() returns the basic code point whose value
- * (when used for representing integers) is d, which must be in the
- * range 0 to BASE-1. The lowercase form is used unless the uppercase flag is
- * nonzero, in which case the uppercase form is used.
- */
-static inline char
-digitToBasic(int32_t digit, UBool uppercase) {
-    /*  0..25 map to ASCII a..z or A..Z */
-    /* 26..35 map to ASCII 0..9         */
-    if(digit<26) {
-        if(uppercase) {
-            return (char)(_CAPITAL_A+digit);
-        } else {
-            return (char)(_SMALL_A+digit);
-        }
-    } else {
-        return (char)((_ZERO_-26)+digit);
-    }
-}
-
-/**
- * basicToDigit[] contains the numeric value of a basic code
- * point (for use in representing integers) in the range 0 to
- * BASE-1, or -1 if b is does not represent a value.
- */
-static const int8_t
-basicToDigit[256]={
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-
-    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
-    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-
-    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
-    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-};
-
-static inline char
-asciiCaseMap(char b, UBool uppercase) {
-    if(uppercase) {
-        if(_SMALL_A<=b && b<=_SMALL_Z) {
-            b-=(_SMALL_A-_CAPITAL_A);
-        }
-    } else {
-        if(_CAPITAL_A<=b && b<=_CAPITAL_Z) {
-            b+=(_SMALL_A-_CAPITAL_A);
-        }
-    }
-    return b;
-}
-
-/* Punycode-specific Bootstring code ---------------------------------------- */
-
-/*
- * The following code omits the {parts} of the pseudo-algorithm in the spec
- * that are not used with the Punycode parameter set.
- */
-
-/* Bias adaptation function. */
-static int32_t
-adaptBias(int32_t delta, int32_t length, UBool firstTime) {
-    int32_t count;
-
-    if(firstTime) {
-        delta/=DAMP;
-    } else {
-        delta/=2;
-    }
-
-    delta+=delta/length;
-    for(count=0; delta>((BASE-TMIN)*TMAX)/2; count+=BASE) {
-        delta/=(BASE-TMIN);
-    }
-
-    return count+(((BASE-TMIN+1)*delta)/(delta+SKEW));
-}
-
-#define MAX_CP_COUNT    200
-
-U_CFUNC int32_t
-u_strToPunycode(const UChar *src, int32_t srcLength,
-                UChar *dest, int32_t destCapacity,
-                const UBool *caseFlags,
-                UErrorCode *pErrorCode) {
-
-    int32_t cpBuffer[MAX_CP_COUNT];
-    int32_t n, delta, handledCPCount, basicLength, destLength, bias, j, m, q, k, t, srcCPCount;
-    UChar c, c2;
-
-    /* argument checking */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    if(src==NULL || srcLength<-1 || (dest==NULL && destCapacity!=0)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    /*
-     * Handle the basic code points and
-     * convert extended ones to UTF-32 in cpBuffer (caseFlag in sign bit):
-     */
-    srcCPCount=destLength=0;
-    if(srcLength==-1) {
-        /* NUL-terminated input */
-        for(j=0; /* no condition */; ++j) {
-            if((c=src[j])==0) {
-                break;
-            }
-            if(srcCPCount==MAX_CP_COUNT) {
-                /* too many input code points */
-                *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-                return 0;
-            }
-            if(IS_BASIC(c)) {
-                cpBuffer[srcCPCount++]=0;
-                if(destLength<destCapacity) {
-                    dest[destLength]=
-                        caseFlags!=NULL ?
-                            asciiCaseMap((char)c, caseFlags[j]) :
-                            (char)c;
-                }
-                ++destLength;
-            } else {
-                n=(caseFlags!=NULL && caseFlags[j])<<31L;
-                if(U16_IS_SINGLE(c)) {
-                    n|=c;
-                } else if(U16_IS_LEAD(c) && U16_IS_TRAIL(c2=src[j+1])) {
-                    ++j;
-                    n|=(int32_t)U16_GET_SUPPLEMENTARY(c, c2);
-                } else {
-                    /* error: unmatched surrogate */
-                    *pErrorCode=U_INVALID_CHAR_FOUND;
-                    return 0;
-                }
-                cpBuffer[srcCPCount++]=n;
-            }
-        }
-    } else {
-        /* length-specified input */
-        for(j=0; j<srcLength; ++j) {
-            if(srcCPCount==MAX_CP_COUNT) {
-                /* too many input code points */
-                *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-                return 0;
-            }
-            c=src[j];
-            if(IS_BASIC(c)) {
-                cpBuffer[srcCPCount++]=0;
-                if(destLength<destCapacity) {
-                    dest[destLength]=
-                        caseFlags!=NULL ?
-                            asciiCaseMap((char)c, caseFlags[j]) :
-                            (char)c;
-                }
-                ++destLength;
-            } else {
-                n=(caseFlags!=NULL && caseFlags[j])<<31L;
-                if(U16_IS_SINGLE(c)) {
-                    n|=c;
-                } else if(U16_IS_LEAD(c) && (j+1)<srcLength && U16_IS_TRAIL(c2=src[j+1])) {
-                    ++j;
-                    n|=(int32_t)U16_GET_SUPPLEMENTARY(c, c2);
-                } else {
-                    /* error: unmatched surrogate */
-                    *pErrorCode=U_INVALID_CHAR_FOUND;
-                    return 0;
-                }
-                cpBuffer[srcCPCount++]=n;
-            }
-        }
-    }
-
-    /* Finish the basic string - if it is not empty - with a delimiter. */
-    basicLength=destLength;
-    if(basicLength>0) {
-        if(destLength<destCapacity) {
-            dest[destLength]=DELIMITER;
-        }
-        ++destLength;
-    }
-
-    /*
-     * handledCPCount is the number of code points that have been handled
-     * basicLength is the number of basic code points
-     * destLength is the number of chars that have been output
-     */
-
-    /* Initialize the state: */
-    n=INITIAL_N;
-    delta=0;
-    bias=INITIAL_BIAS;
-
-    /* Main encoding loop: */
-    for(handledCPCount=basicLength; handledCPCount<srcCPCount; /* no op */) {
-        /*
-         * All non-basic code points < n have been handled already.
-         * Find the next larger one:
-         */
-        for(m=0x7fffffff, j=0; j<srcCPCount; ++j) {
-            q=cpBuffer[j]&0x7fffffff; /* remove case flag from the sign bit */
-            if(n<=q && q<m) {
-                m=q;
-            }
-        }
-
-        /*
-         * Increase delta enough to advance the decoder's
-         * <n,i> state to <m,0>, but guard against overflow:
-         */
-        if(m-n>(0x7fffffff-MAX_CP_COUNT-delta)/(handledCPCount+1)) {
-            *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
-            return 0;
-        }
-        delta+=(m-n)*(handledCPCount+1);
-        n=m;
-
-        /* Encode a sequence of same code points n */
-        for(j=0; j<srcCPCount; ++j) {
-            q=cpBuffer[j]&0x7fffffff; /* remove case flag from the sign bit */
-            if(q<n) {
-                ++delta;
-            } else if(q==n) {
-                /* Represent delta as a generalized variable-length integer: */
-                for(q=delta, k=BASE; /* no condition */; k+=BASE) {
-
-                    /** RAM: comment out the old code for conformance with draft-ietf-idn-punycode-03.txt
-
-                    t=k-bias;
-                    if(t<TMIN) {
-                        t=TMIN;
-                    } else if(t>TMAX) {
-                        t=TMAX;
-                    }
-                    */
-
-                    t=k-bias;
-                    if(t<TMIN) {
-                        t=TMIN;
-                    } else if(k>=(bias+TMAX)) {
-                        t=TMAX;
-                    }
-
-                    if(q<t) {
-                        break;
-                    }
-
-                    if(destLength<destCapacity) {
-                        dest[destLength]=digitToBasic(t+(q-t)%(BASE-t), 0);
-                    }
-                    ++destLength;
-                    q=(q-t)/(BASE-t);
-                }
-
-                if(destLength<destCapacity) {
-                    dest[destLength]=digitToBasic(q, (UBool)(cpBuffer[j]<0));
-                }
-                ++destLength;
-                bias=adaptBias(delta, handledCPCount+1, (UBool)(handledCPCount==basicLength));
-                delta=0;
-                ++handledCPCount;
-            }
-        }
-
-        ++delta;
-        ++n;
-    }
-
-    return u_terminateUChars(dest, destCapacity, destLength, pErrorCode);
-}
-
-U_CFUNC int32_t
-u_strFromPunycode(const UChar *src, int32_t srcLength,
-                  UChar *dest, int32_t destCapacity,
-                  UBool *caseFlags,
-                  UErrorCode *pErrorCode) {
-    int32_t n, destLength, i, bias, basicLength, j, in, oldi, w, k, digit, t,
-            destCPCount, firstSupplementaryIndex, cpLength;
-    UChar b;
-
-    /* argument checking */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    if(src==NULL || srcLength<-1 || (dest==NULL && destCapacity!=0)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    if(srcLength==-1) {
-        srcLength=u_strlen(src);
-    }
-
-    /*
-     * Handle the basic code points:
-     * Let basicLength be the number of input code points
-     * before the last delimiter, or 0 if there is none,
-     * then copy the first basicLength code points to the output.
-     *
-     * The two following loops iterate backward.
-     */
-    for(j=srcLength; j>0;) {
-        if(src[--j]==DELIMITER) {
-            break;
-        }
-    }
-    destLength=basicLength=destCPCount=j;
-    U_ASSERT(destLength>=0);
-
-    while(j>0) {
-        b=src[--j];
-        if(!IS_BASIC(b)) {
-            *pErrorCode=U_INVALID_CHAR_FOUND;
-            return 0;
-        }
-
-        if(j<destCapacity) {
-            dest[j]=(UChar)b;
-
-            if(caseFlags!=NULL) {
-                caseFlags[j]=IS_BASIC_UPPERCASE(b);
-            }
-        }
-    }
-
-    /* Initialize the state: */
-    n=INITIAL_N;
-    i=0;
-    bias=INITIAL_BIAS;
-    firstSupplementaryIndex=1000000000;
-
-    /*
-     * Main decoding loop:
-     * Start just after the last delimiter if any
-     * basic code points were copied; start at the beginning otherwise.
-     */
-    for(in=basicLength>0 ? basicLength+1 : 0; in<srcLength; /* no op */) {
-        /*
-         * in is the index of the next character to be consumed, and
-         * destCPCount is the number of code points in the output array.
-         *
-         * Decode a generalized variable-length integer into delta,
-         * which gets added to i.  The overflow checking is easier
-         * if we increase i as we go, then subtract off its starting
-         * value at the end to obtain delta.
-         */
-        for(oldi=i, w=1, k=BASE; /* no condition */; k+=BASE) {
-            if(in>=srcLength) {
-                *pErrorCode=U_ILLEGAL_CHAR_FOUND;
-                return 0;
-            }
-
-            digit=basicToDigit[(uint8_t)src[in++]];
-            if(digit<0) {
-                *pErrorCode=U_INVALID_CHAR_FOUND;
-                return 0;
-            }
-            if(digit>(0x7fffffff-i)/w) {
-                /* integer overflow */
-                *pErrorCode=U_ILLEGAL_CHAR_FOUND;
-                return 0;
-            }
-
-            i+=digit*w;
-            /** RAM: comment out the old code for conformance with draft-ietf-idn-punycode-03.txt  
-            t=k-bias;
-            if(t<TMIN) {
-                t=TMIN;
-            } else if(t>TMAX) {
-                t=TMAX;
-            }
-            */
-            t=k-bias;
-            if(t<TMIN) {
-                t=TMIN;
-            } else if(k>=(bias+TMAX)) {
-                t=TMAX;
-            }
-            if(digit<t) {
-                break;
-            }
-
-            if(w>0x7fffffff/(BASE-t)) {
-                /* integer overflow */
-                *pErrorCode=U_ILLEGAL_CHAR_FOUND;
-                return 0;
-            }
-            w*=BASE-t;
-        }
-
-        /*
-         * Modification from sample code:
-         * Increments destCPCount here,
-         * where needed instead of in for() loop tail.
-         */
-        ++destCPCount;
-        bias=adaptBias(i-oldi, destCPCount, (UBool)(oldi==0));
-
-        /*
-         * i was supposed to wrap around from (incremented) destCPCount to 0,
-         * incrementing n each time, so we'll fix that now:
-         */
-        if(i/destCPCount>(0x7fffffff-n)) {
-            /* integer overflow */
-            *pErrorCode=U_ILLEGAL_CHAR_FOUND;
-            return 0;
-        }
-
-        n+=i/destCPCount;
-        i%=destCPCount;
-        /* not needed for Punycode: */
-        /* if (decode_digit(n) <= BASE) return punycode_invalid_input; */
-
-        if(n>0x10ffff || U_IS_SURROGATE(n)) {
-            /* Unicode code point overflow */
-            *pErrorCode=U_ILLEGAL_CHAR_FOUND;
-            return 0;
-        }
-
-        /* Insert n at position i of the output: */
-        cpLength=U16_LENGTH(n);
-        if(dest!=NULL && ((destLength+cpLength)<=destCapacity)) {
-            int32_t codeUnitIndex;
-
-            /*
-             * Handle indexes when supplementary code points are present.
-             *
-             * In almost all cases, there will be only BMP code points before i
-             * and even in the entire string.
-             * This is handled with the same efficiency as with UTF-32.
-             *
-             * Only the rare cases with supplementary code points are handled
-             * more slowly - but not too bad since this is an insertion anyway.
-             */
-            if(i<=firstSupplementaryIndex) {
-                codeUnitIndex=i;
-                if(cpLength>1) {
-                    firstSupplementaryIndex=codeUnitIndex;
-                } else {
-                    ++firstSupplementaryIndex;
-                }
-            } else {
-                codeUnitIndex=firstSupplementaryIndex;
-                U16_FWD_N(dest, codeUnitIndex, destLength, i-codeUnitIndex);
-            }
-
-            /* use the UChar index codeUnitIndex instead of the code point index i */
-            if(codeUnitIndex<destLength) {
-                uprv_memmove(dest+codeUnitIndex+cpLength,
-                             dest+codeUnitIndex,
-                             (destLength-codeUnitIndex)*U_SIZEOF_UCHAR);
-                if(caseFlags!=NULL) {
-                    uprv_memmove(caseFlags+codeUnitIndex+cpLength,
-                                 caseFlags+codeUnitIndex,
-                                 destLength-codeUnitIndex);
-                }
-            }
-            if(cpLength==1) {
-                /* BMP, insert one code unit */
-                dest[codeUnitIndex]=(UChar)n;
-            } else {
-                /* supplementary character, insert two code units */
-                dest[codeUnitIndex]=U16_LEAD(n);
-                dest[codeUnitIndex+1]=U16_TRAIL(n);
-            }
-            if(caseFlags!=NULL) {
-                /* Case of last character determines uppercase flag: */
-                caseFlags[codeUnitIndex]=IS_BASIC_UPPERCASE(src[in-1]);
-                if(cpLength==2) {
-                    caseFlags[codeUnitIndex+1]=FALSE;
-                }
-            }
-        }
-        destLength+=cpLength;
-        U_ASSERT(destLength>=0);
-        ++i;
-    }
-
-    return u_terminateUChars(dest, destCapacity, destLength, pErrorCode);
-}
-
-/* ### check notes on overflow handling - only necessary if not IDNA? are these Punycode functions to be public? */
-
-#endif /* #if !UCONFIG_NO_IDNA */
diff --git a/src/third_party/mozjs/intl/icu/source/common/punycode.h b/src/third_party/mozjs/intl/icu/source/common/punycode.h
deleted file mode 100644
index 21ae91d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/punycode.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2003, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  punycode.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002jan31
-*   created by: Markus W. Scherer
-*/
-
-/* This ICU code derived from: */
-/*
-punycode.c 0.4.0 (2001-Nov-17-Sat)
-http://www.cs.berkeley.edu/~amc/idn/
-Adam M. Costello
-http://www.nicemice.net/amc/
-*/
-
-#ifndef __PUNYCODE_H__
-#define __PUNYCODE_H__
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_IDNA
-
-/**
- * u_strToPunycode() converts Unicode to Punycode.
- *
- * The input string must not contain single, unpaired surrogates.
- * The output will be represented as an array of ASCII code points.
- *
- * The output string is NUL-terminated according to normal ICU
- * string output rules.
- *
- * @param src Input Unicode string.
- *            This function handles a limited amount of code points
- *            (the limit is >=64).
- *            U_INDEX_OUTOFBOUNDS_ERROR is set if the limit is exceeded.
- * @param srcLength Number of UChars in src, or -1 if NUL-terminated.
- * @param dest Output Punycode array.
- * @param destCapacity Size of dest.
- * @param caseFlags Vector of boolean values, one per input UChar,
- *                  indicating that the corresponding character is to be
- *                  marked for the decoder optionally
- *                  uppercasing (TRUE) or lowercasing (FALSE)
- *                  the character.
- *                  ASCII characters are output directly in the case as marked.
- *                  Flags corresponding to trail surrogates are ignored.
- *                  If caseFlags==NULL then input characters are not
- *                  case-mapped.
- * @param pErrorCode ICU in/out error code parameter.
- *                   U_INVALID_CHAR_FOUND if src contains
- *                   unmatched single surrogates.
- *                   U_INDEX_OUTOFBOUNDS_ERROR if src contains
- *                   too many code points.
- * @return Number of ASCII characters in puny.
- *
- * @see u_strFromPunycode
- */
-U_CFUNC int32_t
-u_strToPunycode(const UChar *src, int32_t srcLength,
-                UChar *dest, int32_t destCapacity,
-                const UBool *caseFlags,
-                UErrorCode *pErrorCode);
-
-/**
- * u_strFromPunycode() converts Punycode to Unicode.
- * The Unicode string will be at most as long (in UChars)
- * than the Punycode string (in chars).
- *
- * @param src Input Punycode string.
- * @param srcLength Length of puny, or -1 if NUL-terminated
- * @param dest Output Unicode string buffer.
- * @param destCapacity Size of dest in number of UChars,
- *                     and of caseFlags in numbers of UBools.
- * @param caseFlags Output array for case flags as
- *                  defined by the Punycode string.
- *                  The caller should uppercase (TRUE) or lowercase (FASLE)
- *                  the corresponding character in dest.
- *                  For supplementary characters, only the lead surrogate
- *                  is marked, and FALSE is stored for the trail surrogate.
- *                  This is redundant and not necessary for ASCII characters
- *                  because they are already in the case indicated.
- *                  Can be NULL if the case flags are not needed.
- * @param pErrorCode ICU in/out error code parameter.
- *                   U_INVALID_CHAR_FOUND if a non-ASCII character
- *                   precedes the last delimiter ('-'),
- *                   or if an invalid character (not a-zA-Z0-9) is found
- *                   after the last delimiter.
- *                   U_ILLEGAL_CHAR_FOUND if the delta sequence is ill-formed.
- * @return Number of UChars written to dest.
- *
- * @see u_strToPunycode
- */
-U_CFUNC int32_t
-u_strFromPunycode(const UChar *src, int32_t srcLength,
-                  UChar *dest, int32_t destCapacity,
-                  UBool *caseFlags,
-                  UErrorCode *pErrorCode);
-
-#endif /* #if !UCONFIG_NO_IDNA */
-
-#endif
-
-/*
- * Hey, Emacs, please set the following:
- *
- * Local Variables:
- * indent-tabs-mode: nil
- * End:
- *
- */
diff --git a/src/third_party/mozjs/intl/icu/source/common/putil.cpp b/src/third_party/mozjs/intl/icu/source/common/putil.cpp
deleted file mode 100644
index 4694aa9..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/putil.cpp
+++ /dev/null
@@ -1,2279 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-*  FILE NAME : putil.c (previously putil.cpp and ptypes.cpp)
-*
-*   Date        Name        Description
-*   04/14/97    aliu        Creation.
-*   04/24/97    aliu        Added getDefaultDataDirectory() and
-*                            getDefaultLocaleID().
-*   04/28/97    aliu        Rewritten to assume Unix and apply general methods
-*                            for assumed case.  Non-UNIX platforms must be
-*                            special-cased.  Rewrote numeric methods dealing
-*                            with NaN and Infinity to be platform independent
-*                             over all IEEE 754 platforms.
-*   05/13/97    aliu        Restored sign of timezone
-*                            (semantics are hours West of GMT)
-*   06/16/98    erm         Added IEEE_754 stuff, cleaned up isInfinite, isNan,
-*                             nextDouble..
-*   07/22/98    stephen     Added remainder, max, min, trunc
-*   08/13/98    stephen     Added isNegativeInfinity, isPositiveInfinity
-*   08/24/98    stephen     Added longBitsFromDouble
-*   09/08/98    stephen     Minor changes for Mac Port
-*   03/02/99    stephen     Removed openFile().  Added AS400 support.
-*                            Fixed EBCDIC tables
-*   04/15/99    stephen     Converted to C.
-*   06/28/99    stephen     Removed mutex locking in u_isBigEndian().
-*   08/04/99    jeffrey R.  Added OS/2 changes
-*   11/15/99    helena      Integrated S/390 IEEE support.
-*   04/26/01    Barry N.    OS/400 support for uprv_getDefaultLocaleID
-*   08/15/01    Steven H.   OS/400 support for uprv_getDefaultCodepage
-*   01/03/08    Steven L.   Fake Time Support
-******************************************************************************
-*/
-
-// Defines _XOPEN_SOURCE for access to POSIX functions.
-// Must be before any other #includes.
-#include "uposixdefs.h"
-
-/* include ICU headers */
-#include "unicode/utypes.h"
-#include "unicode/putil.h"
-#include "unicode/ustring.h"
-#include "putilimp.h"
-#include "uassert.h"
-#include "umutex.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "locmap.h"
-#include "ucln_cmn.h"
-
-/* Include standard headers. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <locale.h>
-#include <float.h>
-
-#ifndef U_COMMON_IMPLEMENTATION
-#error U_COMMON_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see http://userguide.icu-project.org/howtouseicu
-#endif
-
-
-/* include system headers */
-#if U_PLATFORM_USES_ONLY_WIN32_API
-    /*
-     * TODO: U_PLATFORM_USES_ONLY_WIN32_API includes MinGW.
-     * Should Cygwin be included as well (U_PLATFORM_HAS_WIN32_API)
-     * to use native APIs as much as possible?
-     */
-#   define WIN32_LEAN_AND_MEAN
-#   define VC_EXTRALEAN
-#   define NOUSER
-#   define NOSERVICE
-#   define NOIME
-#   define NOMCX
-#   include <windows.h>
-#   include "wintz.h"
-#elif U_PLATFORM == U_PF_OS400
-#   include <float.h>
-#   include <qusec.h>       /* error code structure */
-#   include <qusrjobi.h>
-#   include <qliept.h>      /* EPT_CALL macro  - this include must be after all other "QSYSINCs" */
-#   include <mih/testptr.h> /* For uprv_maximumPtr */
-#elif U_PLATFORM == U_PF_CLASSIC_MACOS
-#   include <Files.h>
-#   include <IntlResources.h>
-#   include <Script.h>
-#   include <Folders.h>
-#   include <MacTypes.h>
-#   include <TextUtils.h>
-#   define ICU_NO_USER_DATA_OVERRIDE 1
-#elif U_PLATFORM == U_PF_OS390
-#   include "unicode/ucnv.h"   /* Needed for UCNV_SWAP_LFNL_OPTION_STRING */
-#elif U_PLATFORM_IS_DARWIN_BASED || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD
-#   include <limits.h>
-#   include <unistd.h>
-#elif U_PLATFORM == U_PF_QNX
-#   include <sys/neutrino.h>
-#elif U_PLATFORM == U_PF_SOLARIS
-#   ifndef _XPG4_2
-#       define _XPG4_2
-#   endif
-#endif
-
-#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
-/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
-#undef __STRICT_ANSI__
-#endif
-
-/*
- * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement.
- */
-#include <time.h>
-
-#if !U_PLATFORM_USES_ONLY_WIN32_API
-#include <sys/time.h>
-#endif
-
-/*
- * Only include langinfo.h if we have a way to get the codeset. If we later
- * depend on more feature, we can test on U_HAVE_NL_LANGINFO.
- *
- */
-
-#if U_HAVE_NL_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-
-/**
- * Simple things (presence of functions, etc) should just go in configure.in and be added to
- * icucfg.h via autoheader.
- */
-#if U_PLATFORM_IMPLEMENTS_POSIX
-#   if U_PLATFORM == U_PF_OS400
-#    define HAVE_DLFCN_H 0
-#    define HAVE_DLOPEN 0
-#   else
-#   ifndef HAVE_DLFCN_H
-#    define HAVE_DLFCN_H 1
-#   endif
-#   ifndef HAVE_DLOPEN
-#    define HAVE_DLOPEN 1
-#   endif
-#   endif
-#   ifndef HAVE_GETTIMEOFDAY
-#    define HAVE_GETTIMEOFDAY 1
-#   endif
-#else
-#   define HAVE_DLFCN_H 0
-#   define HAVE_DLOPEN 0
-#   define HAVE_GETTIMEOFDAY 0
-#endif
-
-#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
-
-/* Define the extension for data files, again... */
-#define DATA_TYPE "dat"
-
-/* Leave this copyright notice here! */
-static const char copyright[] = U_COPYRIGHT_STRING;
-
-/* floating point implementations ------------------------------------------- */
-
-/* We return QNAN rather than SNAN*/
-#define SIGN 0x80000000U
-
-/* Make it easy to define certain types of constants */
-typedef union {
-    int64_t i64; /* This must be defined first in order to allow the initialization to work. This is a C89 feature. */
-    double d64;
-} BitPatternConversion;
-static const BitPatternConversion gNan = { (int64_t) INT64_C(0x7FF8000000000000) };
-static const BitPatternConversion gInf = { (int64_t) INT64_C(0x7FF0000000000000) };
-
-/*---------------------------------------------------------------------------
-  Platform utilities
-  Our general strategy is to assume we're on a POSIX platform.  Platforms which
-  are non-POSIX must declare themselves so.  The default POSIX implementation
-  will sometimes work for non-POSIX platforms as well (e.g., the NaN-related
-  functions).
-  ---------------------------------------------------------------------------*/
-
-#if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CLASSIC_MACOS || U_PLATFORM == U_PF_OS400
-#   undef U_POSIX_LOCALE
-#else
-#   define U_POSIX_LOCALE    1
-#endif
-
-/*
-    WARNING! u_topNBytesOfDouble and u_bottomNBytesOfDouble
-    can't be properly optimized by the gcc compiler sometimes (i.e. gcc 3.2).
-*/
-#if !IEEE_754
-static char*
-u_topNBytesOfDouble(double* d, int n)
-{
-#if U_IS_BIG_ENDIAN
-    return (char*)d;
-#else
-    return (char*)(d + 1) - n;
-#endif
-}
-
-static char*
-u_bottomNBytesOfDouble(double* d, int n)
-{
-#if U_IS_BIG_ENDIAN
-    return (char*)(d + 1) - n;
-#else
-    return (char*)d;
-#endif
-}
-#endif   /* !IEEE_754 */
-
-#if IEEE_754
-static UBool
-u_signBit(double d) {
-    uint8_t hiByte;
-#if U_IS_BIG_ENDIAN
-    hiByte = *(uint8_t *)&d;
-#else
-    hiByte = *(((uint8_t *)&d) + sizeof(double) - 1);
-#endif
-    return (hiByte & 0x80) != 0;
-}
-#endif
-
-
-
-#if defined (U_DEBUG_FAKETIME)
-/* Override the clock to test things without having to move the system clock.
- * Assumes POSIX gettimeofday() will function
- */
-UDate fakeClock_t0 = 0; /** Time to start the clock from **/
-UDate fakeClock_dt = 0; /** Offset (fake time - real time) **/
-UBool fakeClock_set = FALSE; /** True if fake clock has spun up **/
-static UMutex fakeClockMutex = U_MUTEX_INTIALIZER;
-
-static UDate getUTCtime_real() {
-    struct timeval posixTime;
-    gettimeofday(&posixTime, NULL);
-    return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
-}
-
-static UDate getUTCtime_fake() {
-    umtx_lock(&fakeClockMutex);
-    if(!fakeClock_set) {
-        UDate real = getUTCtime_real();
-        const char *fake_start = getenv("U_FAKETIME_START");
-        if((fake_start!=NULL) && (fake_start[0]!=0)) {
-            sscanf(fake_start,"%lf",&fakeClock_t0);
-            fakeClock_dt = fakeClock_t0 - real;
-            fprintf(stderr,"U_DEBUG_FAKETIME was set at compile time, so the ICU clock will start at a preset value\n"
-                    "env variable U_FAKETIME_START=%.0f (%s) for an offset of %.0f ms from the current time %.0f\n",
-                    fakeClock_t0, fake_start, fakeClock_dt, real);
-        } else {
-          fakeClock_dt = 0;
-            fprintf(stderr,"U_DEBUG_FAKETIME was set at compile time, but U_FAKETIME_START was not set.\n"
-                    "Set U_FAKETIME_START to the number of milliseconds since 1/1/1970 to set the ICU clock.\n");
-        }
-        fakeClock_set = TRUE;
-    }
-    umtx_unlock(&fakeClockMutex);
-
-    return getUTCtime_real() + fakeClock_dt;
-}
-#endif
-
-#if U_PLATFORM_USES_ONLY_WIN32_API
-typedef union {
-    int64_t int64;
-    FILETIME fileTime;
-} FileTimeConversion;   /* This is like a ULARGE_INTEGER */
-
-/* Number of 100 nanoseconds from 1/1/1601 to 1/1/1970 */
-#define EPOCH_BIAS  INT64_C(116444736000000000)
-#define HECTONANOSECOND_PER_MILLISECOND   10000
-
-#endif
-
-/*---------------------------------------------------------------------------
-  Universal Implementations
-  These are designed to work on all platforms.  Try these, and if they
-  don't work on your platform, then special case your platform with new
-  implementations.
----------------------------------------------------------------------------*/
-
-U_CAPI UDate U_EXPORT2
-uprv_getUTCtime()
-{
-#if defined(U_DEBUG_FAKETIME)
-    return getUTCtime_fake(); /* Hook for overriding the clock */
-#else
-    return uprv_getRawUTCtime();
-#endif
-}
-
-/* Return UTC (GMT) time measured in milliseconds since 0:00 on 1/1/70.*/
-U_CAPI UDate U_EXPORT2
-uprv_getRawUTCtime()
-{
-#if U_PLATFORM == U_PF_CLASSIC_MACOS
-    time_t t, t1, t2;
-    struct tm tmrec;
-
-    uprv_memset( &tmrec, 0, sizeof(tmrec) );
-    tmrec.tm_year = 70;
-    tmrec.tm_mon = 0;
-    tmrec.tm_mday = 1;
-    t1 = mktime(&tmrec);    /* seconds of 1/1/1970*/
-
-    time(&t);
-    uprv_memcpy( &tmrec, gmtime(&t), sizeof(tmrec) );
-    t2 = mktime(&tmrec);    /* seconds of current GMT*/
-    return (UDate)(t2 - t1) * U_MILLIS_PER_SECOND;         /* GMT (or UTC) in seconds since 1970*/
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-
-    FileTimeConversion winTime;
-    GetSystemTimeAsFileTime(&winTime.fileTime);
-    return (UDate)((winTime.int64 - EPOCH_BIAS) / HECTONANOSECOND_PER_MILLISECOND);
-#else
-
-#if HAVE_GETTIMEOFDAY
-    struct timeval posixTime;
-    gettimeofday(&posixTime, NULL);
-    return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
-#else
-    time_t epochtime;
-    time(&epochtime);
-    return (UDate)epochtime * U_MILLIS_PER_SECOND;
-#endif
-
-#endif
-}
-
-/*-----------------------------------------------------------------------------
-  IEEE 754
-  These methods detect and return NaN and infinity values for doubles
-  conforming to IEEE 754.  Platforms which support this standard include X86,
-  Mac 680x0, Mac PowerPC, AIX RS/6000, and most others.
-  If this doesn't work on your platform, you have non-IEEE floating-point, and
-  will need to code your own versions.  A naive implementation is to return 0.0
-  for getNaN and getInfinity, and false for isNaN and isInfinite.
-  ---------------------------------------------------------------------------*/
-
-U_CAPI UBool U_EXPORT2
-uprv_isNaN(double number)
-{
-#if IEEE_754
-    BitPatternConversion convertedNumber;
-    convertedNumber.d64 = number;
-    /* Infinity is 0x7FF0000000000000U. Anything greater than that is a NaN */
-    return (UBool)((convertedNumber.i64 & U_INT64_MAX) > gInf.i64);
-
-#elif U_PLATFORM == U_PF_OS390
-    uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number,
-                        sizeof(uint32_t));
-    uint32_t lowBits  = *(uint32_t*)u_bottomNBytesOfDouble(&number,
-                        sizeof(uint32_t));
-
-    return ((highBits & 0x7F080000L) == 0x7F080000L) &&
-      (lowBits == 0x00000000L);
-
-#else
-    /* If your platform doesn't support IEEE 754 but *does* have an NaN value,*/
-    /* you'll need to replace this default implementation with what's correct*/
-    /* for your platform.*/
-    return number != number;
-#endif
-}
-
-U_CAPI UBool U_EXPORT2
-uprv_isInfinite(double number)
-{
-#if IEEE_754
-    BitPatternConversion convertedNumber;
-    convertedNumber.d64 = number;
-    /* Infinity is exactly 0x7FF0000000000000U. */
-    return (UBool)((convertedNumber.i64 & U_INT64_MAX) == gInf.i64);
-#elif U_PLATFORM == U_PF_OS390
-    uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number,
-                        sizeof(uint32_t));
-    uint32_t lowBits  = *(uint32_t*)u_bottomNBytesOfDouble(&number,
-                        sizeof(uint32_t));
-
-    return ((highBits  & ~SIGN) == 0x70FF0000L) && (lowBits == 0x00000000L);
-
-#else
-    /* If your platform doesn't support IEEE 754 but *does* have an infinity*/
-    /* value, you'll need to replace this default implementation with what's*/
-    /* correct for your platform.*/
-    return number == (2.0 * number);
-#endif
-}
-
-U_CAPI UBool U_EXPORT2
-uprv_isPositiveInfinity(double number)
-{
-#if IEEE_754 || U_PLATFORM == U_PF_OS390
-    return (UBool)(number > 0 && uprv_isInfinite(number));
-#else
-    return uprv_isInfinite(number);
-#endif
-}
-
-U_CAPI UBool U_EXPORT2
-uprv_isNegativeInfinity(double number)
-{
-#if IEEE_754 || U_PLATFORM == U_PF_OS390
-    return (UBool)(number < 0 && uprv_isInfinite(number));
-
-#else
-    uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number,
-                        sizeof(uint32_t));
-    return((highBits & SIGN) && uprv_isInfinite(number));
-
-#endif
-}
-
-U_CAPI double U_EXPORT2
-uprv_getNaN()
-{
-#if IEEE_754 || U_PLATFORM == U_PF_OS390
-    return gNan.d64;
-#else
-    /* If your platform doesn't support IEEE 754 but *does* have an NaN value,*/
-    /* you'll need to replace this default implementation with what's correct*/
-    /* for your platform.*/
-    return 0.0;
-#endif
-}
-
-U_CAPI double U_EXPORT2
-uprv_getInfinity()
-{
-#if IEEE_754 || U_PLATFORM == U_PF_OS390
-    return gInf.d64;
-#else
-    /* If your platform doesn't support IEEE 754 but *does* have an infinity*/
-    /* value, you'll need to replace this default implementation with what's*/
-    /* correct for your platform.*/
-    return 0.0;
-#endif
-}
-
-U_CAPI double U_EXPORT2
-uprv_floor(double x)
-{
-    return floor(x);
-}
-
-U_CAPI double U_EXPORT2
-uprv_ceil(double x)
-{
-    return ceil(x);
-}
-
-U_CAPI double U_EXPORT2
-uprv_round(double x)
-{
-    return uprv_floor(x + 0.5);
-}
-
-U_CAPI double U_EXPORT2
-uprv_fabs(double x)
-{
-    return fabs(x);
-}
-
-U_CAPI double U_EXPORT2
-uprv_modf(double x, double* y)
-{
-    return modf(x, y);
-}
-
-U_CAPI double U_EXPORT2
-uprv_fmod(double x, double y)
-{
-    return fmod(x, y);
-}
-
-U_CAPI double U_EXPORT2
-uprv_pow(double x, double y)
-{
-    /* This is declared as "double pow(double x, double y)" */
-    return pow(x, y);
-}
-
-U_CAPI double U_EXPORT2
-uprv_pow10(int32_t x)
-{
-    return pow(10.0, (double)x);
-}
-
-U_CAPI double U_EXPORT2
-uprv_fmax(double x, double y)
-{
-#if IEEE_754
-    /* first handle NaN*/
-    if(uprv_isNaN(x) || uprv_isNaN(y))
-        return uprv_getNaN();
-
-    /* check for -0 and 0*/
-    if(x == 0.0 && y == 0.0 && u_signBit(x))
-        return y;
-
-#endif
-
-    /* this should work for all flt point w/o NaN and Inf special cases */
-    return (x > y ? x : y);
-}
-
-U_CAPI double U_EXPORT2
-uprv_fmin(double x, double y)
-{
-#if IEEE_754
-    /* first handle NaN*/
-    if(uprv_isNaN(x) || uprv_isNaN(y))
-        return uprv_getNaN();
-
-    /* check for -0 and 0*/
-    if(x == 0.0 && y == 0.0 && u_signBit(y))
-        return y;
-
-#endif
-
-    /* this should work for all flt point w/o NaN and Inf special cases */
-    return (x > y ? y : x);
-}
-
-/**
- * Truncates the given double.
- * trunc(3.3) = 3.0, trunc (-3.3) = -3.0
- * This is different than calling floor() or ceil():
- * floor(3.3) = 3, floor(-3.3) = -4
- * ceil(3.3) = 4, ceil(-3.3) = -3
- */
-U_CAPI double U_EXPORT2
-uprv_trunc(double d)
-{
-#if IEEE_754
-    /* handle error cases*/
-    if(uprv_isNaN(d))
-        return uprv_getNaN();
-    if(uprv_isInfinite(d))
-        return uprv_getInfinity();
-
-    if(u_signBit(d))    /* Signbit() picks up -0.0;  d<0 does not. */
-        return ceil(d);
-    else
-        return floor(d);
-
-#else
-    return d >= 0 ? floor(d) : ceil(d);
-
-#endif
-}
-
-/**
- * Return the largest positive number that can be represented by an integer
- * type of arbitrary bit length.
- */
-U_CAPI double U_EXPORT2
-uprv_maxMantissa(void)
-{
-    return pow(2.0, DBL_MANT_DIG + 1.0) - 1.0;
-}
-
-U_CAPI double U_EXPORT2
-uprv_log(double d)
-{
-    return log(d);
-}
-
-U_CAPI void * U_EXPORT2
-uprv_maximumPtr(void * base)
-{
-#if U_PLATFORM == U_PF_OS400
-    /*
-     * With the provided function we should never be out of range of a given segment
-     * (a traditional/typical segment that is).  Our segments have 5 bytes for the
-     * id and 3 bytes for the offset.  The key is that the casting takes care of
-     * only retrieving the offset portion minus x1000.  Hence, the smallest offset
-     * seen in a program is x001000 and when casted to an int would be 0.
-     * That's why we can only add 0xffefff.  Otherwise, we would exceed the segment.
-     *
-     * Currently, 16MB is the current addressing limitation on i5/OS if the activation is
-     * non-TERASPACE.  If it is TERASPACE it is 2GB - 4k(header information).
-     * This function determines the activation based on the pointer that is passed in and
-     * calculates the appropriate maximum available size for
-     * each pointer type (TERASPACE and non-TERASPACE)
-     *
-     * Unlike other operating systems, the pointer model isn't determined at
-     * compile time on i5/OS.
-     */
-    if ((base != NULL) && (_TESTPTR(base, _C_TERASPACE_CHECK))) {
-        /* if it is a TERASPACE pointer the max is 2GB - 4k */
-        return ((void *)(((char *)base)-((uint32_t)(base))+((uint32_t)0x7fffefff)));
-    }
-    /* otherwise 16MB since NULL ptr is not checkable or the ptr is not TERASPACE */
-    return ((void *)(((char *)base)-((uint32_t)(base))+((uint32_t)0xffefff)));
-
-#else
-    return U_MAX_PTR(base);
-#endif
-}
-
-/*---------------------------------------------------------------------------
-  Platform-specific Implementations
-  Try these, and if they don't work on your platform, then special case your
-  platform with new implementations.
-  ---------------------------------------------------------------------------*/
-
-/* Generic time zone layer -------------------------------------------------- */
-
-/* Time zone utilities */
-U_CAPI void U_EXPORT2
-uprv_tzset()
-{
-#if defined(U_TZSET)
-    U_TZSET();
-#else
-    /* no initialization*/
-#endif
-}
-
-U_CAPI int32_t U_EXPORT2
-uprv_timezone()
-{
-#ifdef U_TIMEZONE
-    return U_TIMEZONE;
-#else
-    time_t t, t1, t2;
-    struct tm tmrec;
-    UBool dst_checked;
-    int32_t tdiff = 0;
-
-    time(&t);
-    uprv_memcpy( &tmrec, localtime(&t), sizeof(tmrec) );
-    dst_checked = (tmrec.tm_isdst != 0); /* daylight savings time is checked*/
-    t1 = mktime(&tmrec);                 /* local time in seconds*/
-    uprv_memcpy( &tmrec, gmtime(&t), sizeof(tmrec) );
-    t2 = mktime(&tmrec);                 /* GMT (or UTC) in seconds*/
-    tdiff = t2 - t1;
-    /* imitate NT behaviour, which returns same timezone offset to GMT for
-       winter and summer.
-       This does not work on all platforms. For instance, on glibc on Linux
-       and on Mac OS 10.5, tdiff calculated above remains the same
-       regardless of whether DST is in effect or not. However, U_TIMEZONE
-       is defined on those platforms and this code is not reached so that
-       we can leave this alone. If there's a platform behaving
-       like glibc that uses this code, we need to add platform-dependent
-       preprocessor here. */
-    if (dst_checked)
-        tdiff += 3600;
-    return tdiff;
-#endif
-}
-
-/* Note that U_TZNAME does *not* have to be tzname, but if it is,
-   some platforms need to have it declared here. */
-
-#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED || (U_PLATFORM == U_PF_CYGWIN && !U_PLATFORM_USES_ONLY_WIN32_API))
-/* RS6000 and others reject char **tzname.  */
-extern U_IMPORT char *U_TZNAME[];
-#endif
-
-#if !UCONFIG_NO_FILE_IO && (U_PLATFORM_IS_DARWIN_BASED || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD)
-/* These platforms are likely to use Olson timezone IDs. */
-#define CHECK_LOCALTIME_LINK 1
-#if U_PLATFORM_IS_DARWIN_BASED
-#include <tzfile.h>
-#define TZZONEINFO      (TZDIR "/")
-#else
-#define TZDEFAULT       "/etc/localtime"
-#define TZZONEINFO      "/usr/share/zoneinfo/"
-#endif
-#if U_HAVE_DIRENT_H
-#define TZFILE_SKIP     "posixrules" /* tz file to skip when searching. */
-/* Some Linux distributions have 'localtime' in /usr/share/zoneinfo
-   symlinked to /etc/localtime, which makes searchForTZFile return
-   'localtime' when it's the first match. */
-#define TZFILE_SKIP2    "localtime"
-#define SEARCH_TZFILE
-#include <dirent.h>  /* Needed to search through system timezone files */
-#endif
-static char gTimeZoneBuffer[PATH_MAX];
-static char *gTimeZoneBufferPtr = NULL;
-#endif
-
-#if !U_PLATFORM_USES_ONLY_WIN32_API
-#define isNonDigit(ch) (ch < '0' || '9' < ch)
-static UBool isValidOlsonID(const char *id) {
-    int32_t idx = 0;
-
-    /* Determine if this is something like Iceland (Olson ID)
-    or AST4ADT (non-Olson ID) */
-    while (id[idx] && isNonDigit(id[idx]) && id[idx] != ',') {
-        idx++;
-    }
-
-    /* If we went through the whole string, then it might be okay.
-    The timezone is sometimes set to "CST-7CDT", "CST6CDT5,J129,J131/19:30",
-    "GRNLNDST3GRNLNDDT" or similar, so we cannot use it.
-    The rest of the time it could be an Olson ID. George */
-    return (UBool)(id[idx] == 0
-        || uprv_strcmp(id, "PST8PDT") == 0
-        || uprv_strcmp(id, "MST7MDT") == 0
-        || uprv_strcmp(id, "CST6CDT") == 0
-        || uprv_strcmp(id, "EST5EDT") == 0);
-}
-
-/* On some Unix-like OS, 'posix' subdirectory in
-   /usr/share/zoneinfo replicates the top-level contents. 'right'
-   subdirectory has the same set of files, but individual files
-   are different from those in the top-level directory or 'posix'
-   because 'right' has files for TAI (Int'l Atomic Time) while 'posix'
-   has files for UTC.
-   When the first match for /etc/localtime is in either of them
-   (usually in posix because 'right' has different file contents),
-   or TZ environment variable points to one of them, createTimeZone
-   fails because, say, 'posix/America/New_York' is not an Olson
-   timezone id ('America/New_York' is). So, we have to skip
-   'posix/' and 'right/' at the beginning. */
-static void skipZoneIDPrefix(const char** id) {
-    if (uprv_strncmp(*id, "posix/", 6) == 0
-        || uprv_strncmp(*id, "right/", 6) == 0)
-    {
-        *id += 6;
-    }
-}
-#endif
-
-#if defined(U_TZNAME) && !U_PLATFORM_USES_ONLY_WIN32_API
-
-#define CONVERT_HOURS_TO_SECONDS(offset) (int32_t)(offset*3600)
-typedef struct OffsetZoneMapping {
-    int32_t offsetSeconds;
-    int32_t daylightType; /* 0=U_DAYLIGHT_NONE, 1=daylight in June-U_DAYLIGHT_JUNE, 2=daylight in December=U_DAYLIGHT_DECEMBER*/
-    const char *stdID;
-    const char *dstID;
-    const char *olsonID;
-} OffsetZoneMapping;
-
-enum { U_DAYLIGHT_NONE=0,U_DAYLIGHT_JUNE=1,U_DAYLIGHT_DECEMBER=2 };
-
-/*
-This list tries to disambiguate a set of abbreviated timezone IDs and offsets
-and maps it to an Olson ID.
-Before adding anything to this list, take a look at
-icu/source/tools/tzcode/tz.alias
-Sometimes no daylight savings (0) is important to define due to aliases.
-This list can be tested with icu/source/test/compat/tzone.pl
-More values could be added to daylightType to increase precision.
-*/
-static const struct OffsetZoneMapping OFFSET_ZONE_MAPPINGS[] = {
-    {-45900, 2, "CHAST", "CHADT", "Pacific/Chatham"},
-    {-43200, 1, "PETT", "PETST", "Asia/Kamchatka"},
-    {-43200, 2, "NZST", "NZDT", "Pacific/Auckland"},
-    {-43200, 1, "ANAT", "ANAST", "Asia/Anadyr"},
-    {-39600, 1, "MAGT", "MAGST", "Asia/Magadan"},
-    {-37800, 2, "LHST", "LHST", "Australia/Lord_Howe"},
-    {-36000, 2, "EST", "EST", "Australia/Sydney"},
-    {-36000, 1, "SAKT", "SAKST", "Asia/Sakhalin"},
-    {-36000, 1, "VLAT", "VLAST", "Asia/Vladivostok"},
-    {-34200, 2, "CST", "CST", "Australia/South"},
-    {-32400, 1, "YAKT", "YAKST", "Asia/Yakutsk"},
-    {-32400, 1, "CHOT", "CHOST", "Asia/Choibalsan"},
-    {-31500, 2, "CWST", "CWST", "Australia/Eucla"},
-    {-28800, 1, "IRKT", "IRKST", "Asia/Irkutsk"},
-    {-28800, 1, "ULAT", "ULAST", "Asia/Ulaanbaatar"},
-    {-28800, 2, "WST", "WST", "Australia/West"},
-    {-25200, 1, "HOVT", "HOVST", "Asia/Hovd"},
-    {-25200, 1, "KRAT", "KRAST", "Asia/Krasnoyarsk"},
-    {-21600, 1, "NOVT", "NOVST", "Asia/Novosibirsk"},
-    {-21600, 1, "OMST", "OMSST", "Asia/Omsk"},
-    {-18000, 1, "YEKT", "YEKST", "Asia/Yekaterinburg"},
-    {-14400, 1, "SAMT", "SAMST", "Europe/Samara"},
-    {-14400, 1, "AMT", "AMST", "Asia/Yerevan"},
-    {-14400, 1, "AZT", "AZST", "Asia/Baku"},
-    {-10800, 1, "AST", "ADT", "Asia/Baghdad"},
-    {-10800, 1, "MSK", "MSD", "Europe/Moscow"},
-    {-10800, 1, "VOLT", "VOLST", "Europe/Volgograd"},
-    {-7200, 0, "EET", "CEST", "Africa/Tripoli"},
-    {-7200, 1, "EET", "EEST", "Europe/Athens"}, /* Conflicts with Africa/Cairo */
-    {-7200, 1, "IST", "IDT", "Asia/Jerusalem"},
-    {-3600, 0, "CET", "WEST", "Africa/Algiers"},
-    {-3600, 2, "WAT", "WAST", "Africa/Windhoek"},
-    {0, 1, "GMT", "IST", "Europe/Dublin"},
-    {0, 1, "GMT", "BST", "Europe/London"},
-    {0, 0, "WET", "WEST", "Africa/Casablanca"},
-    {0, 0, "WET", "WET", "Africa/El_Aaiun"},
-    {3600, 1, "AZOT", "AZOST", "Atlantic/Azores"},
-    {3600, 1, "EGT", "EGST", "America/Scoresbysund"},
-    {10800, 1, "PMST", "PMDT", "America/Miquelon"},
-    {10800, 2, "UYT", "UYST", "America/Montevideo"},
-    {10800, 1, "WGT", "WGST", "America/Godthab"},
-    {10800, 2, "BRT", "BRST", "Brazil/East"},
-    {12600, 1, "NST", "NDT", "America/St_Johns"},
-    {14400, 1, "AST", "ADT", "Canada/Atlantic"},
-    {14400, 2, "AMT", "AMST", "America/Cuiaba"},
-    {14400, 2, "CLT", "CLST", "Chile/Continental"},
-    {14400, 2, "FKT", "FKST", "Atlantic/Stanley"},
-    {14400, 2, "PYT", "PYST", "America/Asuncion"},
-    {18000, 1, "CST", "CDT", "America/Havana"},
-    {18000, 1, "EST", "EDT", "US/Eastern"}, /* Conflicts with America/Grand_Turk */
-    {21600, 2, "EAST", "EASST", "Chile/EasterIsland"},
-    {21600, 0, "CST", "MDT", "Canada/Saskatchewan"},
-    {21600, 0, "CST", "CDT", "America/Guatemala"},
-    {21600, 1, "CST", "CDT", "US/Central"}, /* Conflicts with Mexico/General */
-    {25200, 1, "MST", "MDT", "US/Mountain"}, /* Conflicts with Mexico/BajaSur */
-    {28800, 0, "PST", "PST", "Pacific/Pitcairn"},
-    {28800, 1, "PST", "PDT", "US/Pacific"}, /* Conflicts with Mexico/BajaNorte */
-    {32400, 1, "AKST", "AKDT", "US/Alaska"},
-    {36000, 1, "HAST", "HADT", "US/Aleutian"}
-};
-
-/*#define DEBUG_TZNAME*/
-
-static const char* remapShortTimeZone(const char *stdID, const char *dstID, int32_t daylightType, int32_t offset)
-{
-    int32_t idx;
-#ifdef DEBUG_TZNAME
-    fprintf(stderr, "TZ=%s std=%s dst=%s daylight=%d offset=%d\n", getenv("TZ"), stdID, dstID, daylightType, offset);
-#endif
-    for (idx = 0; idx < LENGTHOF(OFFSET_ZONE_MAPPINGS); idx++)
-    {
-        if (offset == OFFSET_ZONE_MAPPINGS[idx].offsetSeconds
-            && daylightType == OFFSET_ZONE_MAPPINGS[idx].daylightType
-            && strcmp(OFFSET_ZONE_MAPPINGS[idx].stdID, stdID) == 0
-            && strcmp(OFFSET_ZONE_MAPPINGS[idx].dstID, dstID) == 0)
-        {
-            return OFFSET_ZONE_MAPPINGS[idx].olsonID;
-        }
-    }
-    return NULL;
-}
-#endif
-
-#ifdef SEARCH_TZFILE
-#define MAX_PATH_SIZE PATH_MAX /* Set the limit for the size of the path. */
-#define MAX_READ_SIZE 512
-
-typedef struct DefaultTZInfo {
-    char* defaultTZBuffer;
-    int64_t defaultTZFileSize;
-    FILE* defaultTZFilePtr;
-    UBool defaultTZstatus;
-    int32_t defaultTZPosition;
-} DefaultTZInfo;
-
-/*
- * This method compares the two files given to see if they are a match.
- * It is currently use to compare two TZ files.
- */
-static UBool compareBinaryFiles(const char* defaultTZFileName, const char* TZFileName, DefaultTZInfo* tzInfo) {
-    FILE* file; 
-    int64_t sizeFile;
-    int64_t sizeFileLeft;
-    int32_t sizeFileRead;
-    int32_t sizeFileToRead;
-    char bufferFile[MAX_READ_SIZE];
-    UBool result = TRUE;
-
-    if (tzInfo->defaultTZFilePtr == NULL) {
-        tzInfo->defaultTZFilePtr = fopen(defaultTZFileName, "r");
-    }
-    file = fopen(TZFileName, "r");
-
-    tzInfo->defaultTZPosition = 0; /* reset position to begin search */
-
-    if (file != NULL && tzInfo->defaultTZFilePtr != NULL) {
-        /* First check that the file size are equal. */
-        if (tzInfo->defaultTZFileSize == 0) {
-            fseek(tzInfo->defaultTZFilePtr, 0, SEEK_END);
-            tzInfo->defaultTZFileSize = ftell(tzInfo->defaultTZFilePtr);
-        }
-        fseek(file, 0, SEEK_END);
-        sizeFile = ftell(file);
-        sizeFileLeft = sizeFile;
-
-        if (sizeFile != tzInfo->defaultTZFileSize) {
-            result = FALSE;
-        } else {
-            /* Store the data from the files in seperate buffers and
-             * compare each byte to determine equality.
-             */
-            if (tzInfo->defaultTZBuffer == NULL) {
-                rewind(tzInfo->defaultTZFilePtr);
-                tzInfo->defaultTZBuffer = (char*)uprv_malloc(sizeof(char) * tzInfo->defaultTZFileSize);
-                sizeFileRead = fread(tzInfo->defaultTZBuffer, 1, tzInfo->defaultTZFileSize, tzInfo->defaultTZFilePtr);
-            }
-            rewind(file);
-            while(sizeFileLeft > 0) {
-                uprv_memset(bufferFile, 0, MAX_READ_SIZE);
-                sizeFileToRead = sizeFileLeft < MAX_READ_SIZE ? sizeFileLeft : MAX_READ_SIZE;
-
-                sizeFileRead = fread(bufferFile, 1, sizeFileToRead, file);
-                if (memcmp(tzInfo->defaultTZBuffer + tzInfo->defaultTZPosition, bufferFile, sizeFileRead) != 0) {
-                    result = FALSE;
-                    break;
-                }
-                sizeFileLeft -= sizeFileRead;
-                tzInfo->defaultTZPosition += sizeFileRead;
-            }
-        }
-    } else {
-        result = FALSE;
-    }
-
-    if (file != NULL) {
-        fclose(file);
-    }
-
-    return result;
-}
-/*
- * This method recursively traverses the directory given for a matching TZ file and returns the first match.
- */
-/* dirent also lists two entries: "." and ".." that we can safely ignore. */
-#define SKIP1 "."
-#define SKIP2 ".."
-static char SEARCH_TZFILE_RESULT[MAX_PATH_SIZE] = "";
-static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
-    char curpath[MAX_PATH_SIZE];
-    DIR* dirp = opendir(path);
-    DIR* subDirp = NULL;
-    struct dirent* dirEntry = NULL;
-
-    char* result = NULL;
-    if (dirp == NULL) {
-        return result;
-    }
-
-    /* Save the current path */
-    uprv_memset(curpath, 0, MAX_PATH_SIZE);
-    uprv_strcpy(curpath, path);
-
-    /* Check each entry in the directory. */
-    while((dirEntry = readdir(dirp)) != NULL) {
-        const char* dirName = dirEntry->d_name;
-        if (uprv_strcmp(dirName, SKIP1) != 0 && uprv_strcmp(dirName, SKIP2) != 0) {
-            /* Create a newpath with the new entry to test each entry in the directory. */
-            char newpath[MAX_PATH_SIZE];
-            uprv_strcpy(newpath, curpath);
-            uprv_strcat(newpath, dirName);
-
-            if ((subDirp = opendir(newpath)) != NULL) {
-                /* If this new path is a directory, make a recursive call with the newpath. */
-                closedir(subDirp);
-                uprv_strcat(newpath, "/");
-                result = searchForTZFile(newpath, tzInfo);
-                /*
-                 Have to get out here. Otherwise, we'd keep looking
-                 and return the first match in the top-level directory
-                 if there's a match in the top-level. If not, this function
-                 would return NULL and set gTimeZoneBufferPtr to NULL in initDefault().
-                 It worked without this in most cases because we have a fallback of calling
-                 localtime_r to figure out the default timezone.
-                */
-                if (result != NULL)
-                    break;
-            } else if (uprv_strcmp(TZFILE_SKIP, dirName) != 0 && uprv_strcmp(TZFILE_SKIP2, dirName) != 0) {
-                if(compareBinaryFiles(TZDEFAULT, newpath, tzInfo)) {
-                    const char* zoneid = newpath + (sizeof(TZZONEINFO)) - 1;
-                    skipZoneIDPrefix(&zoneid);
-                    uprv_strcpy(SEARCH_TZFILE_RESULT, zoneid);
-                    result = SEARCH_TZFILE_RESULT;
-                    /* Get out after the first one found. */
-                    break;
-                }
-            }
-        }
-    }
-    closedir(dirp);
-    return result;
-}
-#endif
-U_CAPI const char* U_EXPORT2
-uprv_tzname(int n)
-{
-    const char *tzid = NULL;
-#if U_PLATFORM_USES_ONLY_WIN32_API
-    tzid = uprv_detectWindowsTimeZone();
-
-    if (tzid != NULL) {
-        return tzid;
-    }
-#else
-
-/*#if U_PLATFORM_IS_DARWIN_BASED
-    int ret;
-
-    tzid = getenv("TZFILE");
-    if (tzid != NULL) {
-        return tzid;
-    }
-#endif*/
-
-/* This code can be temporarily disabled to test tzname resolution later on. */
-#ifndef DEBUG_TZNAME
-    tzid = getenv("TZ");
-    if (tzid != NULL && isValidOlsonID(tzid))
-    {
-        /* This might be a good Olson ID. */
-        skipZoneIDPrefix(&tzid);
-        return tzid;
-    }
-    /* else U_TZNAME will give a better result. */
-#endif
-
-#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
-    /* Caller must handle threading issues */
-    if (gTimeZoneBufferPtr == NULL) {
-        /*
-        This is a trick to look at the name of the link to get the Olson ID
-        because the tzfile contents is underspecified.
-        This isn't guaranteed to work because it may not be a symlink.
-        */
-        int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer));
-        if (0 < ret) {
-            int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO);
-            gTimeZoneBuffer[ret] = 0;
-            if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO, tzZoneInfoLen) == 0
-                && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen))
-            {
-                return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen);
-            }
-        } else {
-#if defined(SEARCH_TZFILE)
-            DefaultTZInfo* tzInfo = (DefaultTZInfo*)uprv_malloc(sizeof(DefaultTZInfo));
-            if (tzInfo != NULL) {
-                tzInfo->defaultTZBuffer = NULL;
-                tzInfo->defaultTZFileSize = 0;
-                tzInfo->defaultTZFilePtr = NULL;
-                tzInfo->defaultTZstatus = FALSE;
-                tzInfo->defaultTZPosition = 0;
-
-                gTimeZoneBufferPtr = searchForTZFile(TZZONEINFO, tzInfo);
-
-                /* Free previously allocated memory */
-                if (tzInfo->defaultTZBuffer != NULL) {
-                    uprv_free(tzInfo->defaultTZBuffer);
-                }
-                if (tzInfo->defaultTZFilePtr != NULL) {
-                    fclose(tzInfo->defaultTZFilePtr);
-                }
-                uprv_free(tzInfo);
-            }
-
-            if (gTimeZoneBufferPtr != NULL && isValidOlsonID(gTimeZoneBufferPtr)) {
-                return gTimeZoneBufferPtr;
-            }
-#endif
-        }
-    }
-    else {
-        return gTimeZoneBufferPtr;
-    }
-#endif
-#endif
-
-#ifdef U_TZNAME
-#if U_PLATFORM_USES_ONLY_WIN32_API
-    /* The return value is free'd in timezone.cpp on Windows because
-     * the other code path returns a pointer to a heap location. */
-    return uprv_strdup(U_TZNAME[n]);
-#else
-    /*
-    U_TZNAME is usually a non-unique abbreviation, which isn't normally usable.
-    So we remap the abbreviation to an olson ID.
-
-    Since Windows exposes a little more timezone information,
-    we normally don't use this code on Windows because
-    uprv_detectWindowsTimeZone should have already given the correct answer.
-    */
-    {
-        struct tm juneSol, decemberSol;
-        int daylightType;
-        static const time_t juneSolstice=1182478260; /*2007-06-21 18:11 UT*/
-        static const time_t decemberSolstice=1198332540; /*2007-12-22 06:09 UT*/
-
-        /* This probing will tell us when daylight savings occurs.  */
-        localtime_r(&juneSolstice, &juneSol);
-        localtime_r(&decemberSolstice, &decemberSol);
-        if(decemberSol.tm_isdst > 0) {
-          daylightType = U_DAYLIGHT_DECEMBER;
-        } else if(juneSol.tm_isdst > 0) {
-          daylightType = U_DAYLIGHT_JUNE;
-        } else {
-          daylightType = U_DAYLIGHT_NONE;
-        }
-        tzid = remapShortTimeZone(U_TZNAME[0], U_TZNAME[1], daylightType, uprv_timezone());
-        if (tzid != NULL) {
-            return tzid;
-        }
-    }
-    return U_TZNAME[n];
-#endif
-#else
-    return "";
-#endif
-}
-
-/* Get and set the ICU data directory --------------------------------------- */
-
-static char *gDataDirectory = NULL;
-#if U_POSIX_LOCALE
- static char *gCorrectedPOSIXLocale = NULL; /* Heap allocated */
-#endif
-
-static UBool U_CALLCONV putil_cleanup(void)
-{
-    if (gDataDirectory && *gDataDirectory) {
-        uprv_free(gDataDirectory);
-    }
-    gDataDirectory = NULL;
-#if U_POSIX_LOCALE
-    if (gCorrectedPOSIXLocale) {
-        uprv_free(gCorrectedPOSIXLocale);
-        gCorrectedPOSIXLocale = NULL;
-    }
-#endif
-    return TRUE;
-}
-
-/*
- * Set the data directory.
- *    Make a copy of the passed string, and set the global data dir to point to it.
- *    TODO:  see bug #2849, regarding thread safety.
- */
-U_CAPI void U_EXPORT2
-u_setDataDirectory(const char *directory) {
-    char *newDataDir;
-    int32_t length;
-
-    if(directory==NULL || *directory==0) {
-        /* A small optimization to prevent the malloc and copy when the
-        shared library is used, and this is a way to make sure that NULL
-        is never returned.
-        */
-        newDataDir = (char *)"";
-    }
-    else {
-        length=(int32_t)uprv_strlen(directory);
-        newDataDir = (char *)uprv_malloc(length + 2);
-        /* Exit out if newDataDir could not be created. */
-        if (newDataDir == NULL) {
-            return;
-        }
-        uprv_strcpy(newDataDir, directory);
-
-#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
-        {
-            char *p;
-            while(p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) {
-                *p = U_FILE_SEP_CHAR;
-            }
-        }
-#endif
-    }
-
-    umtx_lock(NULL);
-    if (gDataDirectory && *gDataDirectory) {
-        uprv_free(gDataDirectory);
-    }
-    gDataDirectory = newDataDir;
-    ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
-    umtx_unlock(NULL);
-}
-
-U_CAPI UBool U_EXPORT2
-uprv_pathIsAbsolute(const char *path)
-{
-  if(!path || !*path) {
-    return FALSE;
-  }
-
-  if(*path == U_FILE_SEP_CHAR) {
-    return TRUE;
-  }
-
-#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
-  if(*path == U_FILE_ALT_SEP_CHAR) {
-    return TRUE;
-  }
-#endif
-
-#if U_PLATFORM_USES_ONLY_WIN32_API
-  if( (((path[0] >= 'A') && (path[0] <= 'Z')) ||
-       ((path[0] >= 'a') && (path[0] <= 'z'))) &&
-      path[1] == ':' ) {
-    return TRUE;
-  }
-#endif
-
-  return FALSE;
-}
-
-/* Temporary backup setting of ICU_DATA_DIR_PREFIX_ENV_VAR
-   until some client wrapper makefiles are updated */
-#if U_PLATFORM_IS_DARWIN_BASED && TARGET_IPHONE_SIMULATOR
-# if !defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
-#  define ICU_DATA_DIR_PREFIX_ENV_VAR "IPHONE_SIMULATOR_ROOT"
-# endif
-#endif
-
-U_CAPI const char * U_EXPORT2
-u_getDataDirectory(void) {
-    const char *path = NULL;
-#if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
-    char datadir_path_buffer[PATH_MAX];
-#endif
-
-    /* if we have the directory, then return it immediately */
-    UMTX_CHECK(NULL, gDataDirectory, path);
-
-    if(path) {
-        return path;
-    }
-
-    /*
-    When ICU_NO_USER_DATA_OVERRIDE is defined, users aren't allowed to
-    override ICU's data with the ICU_DATA environment variable. This prevents
-    problems where multiple custom copies of ICU's specific version of data
-    are installed on a system. Either the application must define the data
-    directory with u_setDataDirectory, define ICU_DATA_DIR when compiling
-    ICU, set the data with udata_setCommonData or trust that all of the
-    required data is contained in ICU's data library that contains
-    the entry point defined by U_ICUDATA_ENTRY_POINT.
-
-    There may also be some platforms where environment variables
-    are not allowed.
-    */
-#   if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO
-    /* First try to get the environment variable */
-    path=getenv("ICU_DATA");
-#   endif
-
-    /* ICU_DATA_DIR may be set as a compile option.
-     * U_ICU_DATA_DEFAULT_DIR is provided and is set by ICU at compile time
-     * and is used only when data is built in archive mode eliminating the need
-     * for ICU_DATA_DIR to be set. U_ICU_DATA_DEFAULT_DIR is set to the installation
-     * directory of the data dat file. Users should use ICU_DATA_DIR if they want to
-     * set their own path.
-     */
-#if defined(ICU_DATA_DIR) || defined(U_ICU_DATA_DEFAULT_DIR)
-    if(path==NULL || *path==0) {
-# if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
-        const char *prefix = getenv(ICU_DATA_DIR_PREFIX_ENV_VAR);
-# endif
-# ifdef ICU_DATA_DIR
-        path=ICU_DATA_DIR;
-# else
-        path=U_ICU_DATA_DEFAULT_DIR;
-# endif
-# if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
-        if (prefix != NULL) {
-            snprintf(datadir_path_buffer, PATH_MAX, "%s%s", prefix, path);
-            path=datadir_path_buffer;
-        }
-# endif
-    }
-#endif
-
-    if(path==NULL) {
-        /* It looks really bad, set it to something. */
-        path = "";
-    }
-
-    u_setDataDirectory(path);
-    return gDataDirectory;
-}
-
-
-
-
-
-/* Macintosh-specific locale information ------------------------------------ */
-#if U_PLATFORM == U_PF_CLASSIC_MACOS
-
-typedef struct {
-    int32_t script;
-    int32_t region;
-    int32_t lang;
-    int32_t date_region;
-    const char* posixID;
-} mac_lc_rec;
-
-/* Todo: This will be updated with a newer version from www.unicode.org web
-   page when it's available.*/
-#define MAC_LC_MAGIC_NUMBER -5
-#define MAC_LC_INIT_NUMBER -9
-
-static const mac_lc_rec mac_lc_recs[] = {
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 0, "en_US",
-    /* United States*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 1, "fr_FR",
-    /* France*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 2, "en_GB",
-    /* Great Britain*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 3, "de_DE",
-    /* Germany*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 4, "it_IT",
-    /* Italy*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 5, "nl_NL",
-    /* Metherlands*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 6, "fr_BE",
-    /* French for Belgium or Lxembourg*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 7, "sv_SE",
-    /* Sweden*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 9, "da_DK",
-    /* Denmark*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 10, "pt_PT",
-    /* Portugal*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 11, "fr_CA",
-    /* French Canada*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 13, "is_IS",
-    /* Israel*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 14, "ja_JP",
-    /* Japan*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 15, "en_AU",
-    /* Australia*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 16, "ar_AE",
-    /* the Arabic world (?)*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 17, "fi_FI",
-    /* Finland*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 18, "fr_CH",
-    /* French for Switzerland*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 19, "de_CH",
-    /* German for Switzerland*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 20, "el_GR",
-    /* Greece*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 21, "is_IS",
-    /* Iceland ===*/
-    /*MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 22, "",*/
-    /* Malta ===*/
-    /*MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 23, "",*/
-    /* Cyprus ===*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 24, "tr_TR",
-    /* Turkey ===*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 25, "sh_YU",
-    /* Croatian system for Yugoslavia*/
-    /*MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 33, "",*/
-    /* Hindi system for India*/
-    /*MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 34, "",*/
-    /* Pakistan*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 41, "lt_LT",
-    /* Lithuania*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 42, "pl_PL",
-    /* Poland*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 43, "hu_HU",
-    /* Hungary*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 44, "et_EE",
-    /* Estonia*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 45, "lv_LV",
-    /* Latvia*/
-    /*MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 46, "",*/
-    /* Lapland  [Ask Rich for the data. HS]*/
-    /*MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 47, "",*/
-    /* Faeroe Islands*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 48, "fa_IR",
-    /* Iran*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 49, "ru_RU",
-    /* Russia*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 50, "en_IE",
-    /* Ireland*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 51, "ko_KR",
-    /* Korea*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 52, "zh_CN",
-    /* People's Republic of China*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 53, "zh_TW",
-    /* Taiwan*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, 54, "th_TH",
-    /* Thailand*/
-
-    /* fallback is en_US*/
-    MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER, MAC_LC_MAGIC_NUMBER,
-    MAC_LC_MAGIC_NUMBER, "en_US"
-};
-
-#endif
-
-#if U_POSIX_LOCALE
-/* A helper function used by uprv_getPOSIXIDForDefaultLocale and
- * uprv_getPOSIXIDForDefaultCodepage. Returns the posix locale id for
- * LC_CTYPE and LC_MESSAGES. It doesn't support other locale categories.
- */
-static const char *uprv_getPOSIXIDForCategory(int category)
-{
-    const char* posixID = NULL;
-    if (category == LC_MESSAGES || category == LC_CTYPE) {
-        /*
-        * On Solaris two different calls to setlocale can result in
-        * different values. Only get this value once.
-        *
-        * We must check this first because an application can set this.
-        *
-        * LC_ALL can't be used because it's platform dependent. The LANG
-        * environment variable seems to affect LC_CTYPE variable by default.
-        * Here is what setlocale(LC_ALL, NULL) can return.
-        * HPUX can return 'C C C C C C C'
-        * Solaris can return /en_US/C/C/C/C/C on the second try.
-        * Linux can return LC_CTYPE=C;LC_NUMERIC=C;...
-        *
-        * The default codepage detection also needs to use LC_CTYPE.
-        *
-        * Do not call setlocale(LC_*, "")! Using an empty string instead
-        * of NULL, will modify the libc behavior.
-        */
-        posixID = setlocale(category, NULL);
-        if ((posixID == 0)
-            || (uprv_strcmp("C", posixID) == 0)
-            || (uprv_strcmp("POSIX", posixID) == 0))
-        {
-            /* Maybe we got some garbage.  Try something more reasonable */
-            posixID = getenv("LC_ALL");
-            if (posixID == 0) {
-                posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
-                if (posixID == 0) {
-                    posixID = getenv("LANG");
-                }
-            }
-        }
-    }
-    if ((posixID==0)
-        || (uprv_strcmp("C", posixID) == 0)
-        || (uprv_strcmp("POSIX", posixID) == 0))
-    {
-        /* Nothing worked.  Give it a nice POSIX default value. */
-        posixID = "en_US_POSIX";
-    }
-    return posixID;
-}
-
-/* Return just the POSIX id for the default locale, whatever happens to be in
- * it. It gets the value from LC_MESSAGES and indirectly from LC_ALL and LANG.
- */
-static const char *uprv_getPOSIXIDForDefaultLocale(void)
-{
-    static const char* posixID = NULL;
-    if (posixID == 0) {
-        posixID = uprv_getPOSIXIDForCategory(LC_MESSAGES);
-    }
-    return posixID;
-}
-
-#if !U_CHARSET_IS_UTF8
-/* Return just the POSIX id for the default codepage, whatever happens to be in
- * it. It gets the value from LC_CTYPE and indirectly from LC_ALL and LANG.
- */
-static const char *uprv_getPOSIXIDForDefaultCodepage(void)
-{
-    static const char* posixID = NULL;
-    if (posixID == 0) {
-        posixID = uprv_getPOSIXIDForCategory(LC_CTYPE);
-    }
-    return posixID;
-}
-#endif
-#endif
-
-/* NOTE: The caller should handle thread safety */
-U_CAPI const char* U_EXPORT2
-uprv_getDefaultLocaleID()
-{
-#if U_POSIX_LOCALE
-/*
-  Note that:  (a '!' means the ID is improper somehow)
-     LC_ALL  ---->     default_loc          codepage
---------------------------------------------------------
-     ab.CD             ab                   CD
-     ab@CD             ab__CD               -
-     ab@CD.EF          ab__CD               EF
-
-     ab_CD.EF@GH       ab_CD_GH             EF
-
-Some 'improper' ways to do the same as above:
-  !  ab_CD@GH.EF       ab_CD_GH             EF
-  !  ab_CD.EF@GH.IJ    ab_CD_GH             EF
-  !  ab_CD@ZZ.EF@GH.IJ ab_CD_GH             EF
-
-     _CD@GH            _CD_GH               -
-     _CD.EF@GH         _CD_GH               EF
-
-The variant cannot have dots in it.
-The 'rightmost' variant (@xxx) wins.
-The leftmost codepage (.xxx) wins.
-*/
-    char *correctedPOSIXLocale = 0;
-    const char* posixID = uprv_getPOSIXIDForDefaultLocale();
-    const char *p;
-    const char *q;
-    int32_t len;
-
-    /* Format: (no spaces)
-    ll [ _CC ] [ . MM ] [ @ VV]
-
-      l = lang, C = ctry, M = charmap, V = variant
-    */
-
-    if (gCorrectedPOSIXLocale != NULL) {
-        return gCorrectedPOSIXLocale;
-    }
-
-    if ((p = uprv_strchr(posixID, '.')) != NULL) {
-        /* assume new locale can't be larger than old one? */
-        correctedPOSIXLocale = static_cast<char *>(uprv_malloc(uprv_strlen(posixID)+1));
-        /* Exit on memory allocation error. */
-        if (correctedPOSIXLocale == NULL) {
-            return NULL;
-        }
-        uprv_strncpy(correctedPOSIXLocale, posixID, p-posixID);
-        correctedPOSIXLocale[p-posixID] = 0;
-
-        /* do not copy after the @ */
-        if ((p = uprv_strchr(correctedPOSIXLocale, '@')) != NULL) {
-            correctedPOSIXLocale[p-correctedPOSIXLocale] = 0;
-        }
-    }
-
-    /* Note that we scan the *uncorrected* ID. */
-    if ((p = uprv_strrchr(posixID, '@')) != NULL) {
-        if (correctedPOSIXLocale == NULL) {
-            correctedPOSIXLocale = static_cast<char *>(uprv_malloc(uprv_strlen(posixID)+1));
-            /* Exit on memory allocation error. */
-            if (correctedPOSIXLocale == NULL) {
-                return NULL;
-            }
-            uprv_strncpy(correctedPOSIXLocale, posixID, p-posixID);
-            correctedPOSIXLocale[p-posixID] = 0;
-        }
-        p++;
-
-        /* Take care of any special cases here.. */
-        if (!uprv_strcmp(p, "nynorsk")) {
-            p = "NY";
-            /* Don't worry about no__NY. In practice, it won't appear. */
-        }
-
-        if (uprv_strchr(correctedPOSIXLocale,'_') == NULL) {
-            uprv_strcat(correctedPOSIXLocale, "__"); /* aa@b -> aa__b */
-        }
-        else {
-            uprv_strcat(correctedPOSIXLocale, "_"); /* aa_CC@b -> aa_CC_b */
-        }
-
-        if ((q = uprv_strchr(p, '.')) != NULL) {
-            /* How big will the resulting string be? */
-            len = (int32_t)(uprv_strlen(correctedPOSIXLocale) + (q-p));
-            uprv_strncat(correctedPOSIXLocale, p, q-p);
-            correctedPOSIXLocale[len] = 0;
-        }
-        else {
-            /* Anything following the @ sign */
-            uprv_strcat(correctedPOSIXLocale, p);
-        }
-
-        /* Should there be a map from 'no@nynorsk' -> no_NO_NY here?
-         * How about 'russian' -> 'ru'?
-         * Many of the other locales using ISO codes will be handled by the
-         * canonicalization functions in uloc_getDefault.
-         */
-    }
-
-    /* Was a correction made? */
-    if (correctedPOSIXLocale != NULL) {
-        posixID = correctedPOSIXLocale;
-    }
-    else {
-        /* copy it, just in case the original pointer goes away.  See j2395 */
-        correctedPOSIXLocale = (char *)uprv_malloc(uprv_strlen(posixID) + 1);
-        /* Exit on memory allocation error. */
-        if (correctedPOSIXLocale == NULL) {
-            return NULL;
-        }
-        posixID = uprv_strcpy(correctedPOSIXLocale, posixID);
-    }
-
-    if (gCorrectedPOSIXLocale == NULL) {
-        gCorrectedPOSIXLocale = correctedPOSIXLocale;
-        ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
-        correctedPOSIXLocale = NULL;
-    }
-
-    if (correctedPOSIXLocale != NULL) {  /* Was already set - clean up. */
-        uprv_free(correctedPOSIXLocale);
-    }
-
-    return posixID;
-
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-    UErrorCode status = U_ZERO_ERROR;
-    LCID id = GetThreadLocale();
-    const char* locID = uprv_convertToPosix(id, &status);
-
-    if (U_FAILURE(status)) {
-        locID = "en_US";
-    }
-    return locID;
-
-#elif U_PLATFORM == U_PF_CLASSIC_MACOS
-    int32_t script = MAC_LC_INIT_NUMBER;
-    /* = IntlScript(); or GetScriptManagerVariable(smSysScript);*/
-    int32_t region = MAC_LC_INIT_NUMBER;
-    /* = GetScriptManagerVariable(smRegionCode);*/
-    int32_t lang = MAC_LC_INIT_NUMBER;
-    /* = GetScriptManagerVariable(smScriptLang);*/
-    int32_t date_region = MAC_LC_INIT_NUMBER;
-    const char* posixID = 0;
-    int32_t count = sizeof(mac_lc_recs) / sizeof(mac_lc_rec);
-    int32_t i;
-    Intl1Hndl ih;
-
-    ih = (Intl1Hndl) GetIntlResource(1);
-    if (ih)
-        date_region = ((uint16_t)(*ih)->intl1Vers) >> 8;
-
-    for (i = 0; i < count; i++) {
-        if (   ((mac_lc_recs[i].script == MAC_LC_MAGIC_NUMBER)
-             || (mac_lc_recs[i].script == script))
-            && ((mac_lc_recs[i].region == MAC_LC_MAGIC_NUMBER)
-             || (mac_lc_recs[i].region == region))
-            && ((mac_lc_recs[i].lang == MAC_LC_MAGIC_NUMBER)
-             || (mac_lc_recs[i].lang == lang))
-            && ((mac_lc_recs[i].date_region == MAC_LC_MAGIC_NUMBER)
-             || (mac_lc_recs[i].date_region == date_region))
-            )
-        {
-            posixID = mac_lc_recs[i].posixID;
-            break;
-        }
-    }
-
-    return posixID;
-
-#elif U_PLATFORM == U_PF_OS400
-    /* locales are process scoped and are by definition thread safe */
-    static char correctedLocale[64];
-    const  char *localeID = getenv("LC_ALL");
-           char *p;
-
-    if (localeID == NULL)
-        localeID = getenv("LANG");
-    if (localeID == NULL)
-        localeID = setlocale(LC_ALL, NULL);
-    /* Make sure we have something... */
-    if (localeID == NULL)
-        return "en_US_POSIX";
-
-    /* Extract the locale name from the path. */
-    if((p = uprv_strrchr(localeID, '/')) != NULL)
-    {
-        /* Increment p to start of locale name. */
-        p++;
-        localeID = p;
-    }
-
-    /* Copy to work location. */
-    uprv_strcpy(correctedLocale, localeID);
-
-    /* Strip off the '.locale' extension. */
-    if((p = uprv_strchr(correctedLocale, '.')) != NULL) {
-        *p = 0;
-    }
-
-    /* Upper case the locale name. */
-    T_CString_toUpperCase(correctedLocale);
-
-    /* See if we are using the POSIX locale.  Any of the
-    * following are equivalent and use the same QLGPGCMA
-    * (POSIX) locale.
-    * QLGPGCMA2 means UCS2
-    * QLGPGCMA_4 means UTF-32
-    * QLGPGCMA_8 means UTF-8
-    */
-    if ((uprv_strcmp("C", correctedLocale) == 0) ||
-        (uprv_strcmp("POSIX", correctedLocale) == 0) ||
-        (uprv_strncmp("QLGPGCMA", correctedLocale, 8) == 0))
-    {
-        uprv_strcpy(correctedLocale, "en_US_POSIX");
-    }
-    else
-    {
-        int16_t LocaleLen;
-
-        /* Lower case the lang portion. */
-        for(p = correctedLocale; *p != 0 && *p != '_'; p++)
-        {
-            *p = uprv_tolower(*p);
-        }
-
-        /* Adjust for Euro.  After '_E' add 'URO'. */
-        LocaleLen = uprv_strlen(correctedLocale);
-        if (correctedLocale[LocaleLen - 2] == '_' &&
-            correctedLocale[LocaleLen - 1] == 'E')
-        {
-            uprv_strcat(correctedLocale, "URO");
-        }
-
-        /* If using Lotus-based locale then convert to
-         * equivalent non Lotus.
-         */
-        else if (correctedLocale[LocaleLen - 2] == '_' &&
-            correctedLocale[LocaleLen - 1] == 'L')
-        {
-            correctedLocale[LocaleLen - 2] = 0;
-        }
-
-        /* There are separate simplified and traditional
-         * locales called zh_HK_S and zh_HK_T.
-         */
-        else if (uprv_strncmp(correctedLocale, "zh_HK", 5) == 0)
-        {
-            uprv_strcpy(correctedLocale, "zh_HK");
-        }
-
-        /* A special zh_CN_GBK locale...
-        */
-        else if (uprv_strcmp(correctedLocale, "zh_CN_GBK") == 0)
-        {
-            uprv_strcpy(correctedLocale, "zh_CN");
-        }
-
-    }
-
-    return correctedLocale;
-#endif
-
-}
-
-#if !U_CHARSET_IS_UTF8
-#if U_POSIX_LOCALE
-/*
-Due to various platform differences, one platform may specify a charset,
-when they really mean a different charset. Remap the names so that they are
-compatible with ICU. Only conflicting/ambiguous aliases should be resolved
-here. Before adding anything to this function, please consider adding unique
-names to the ICU alias table in the data directory.
-*/
-static const char*
-remapPlatformDependentCodepage(const char *locale, const char *name) {
-    if (locale != NULL && *locale == 0) {
-        /* Make sure that an empty locale is handled the same way. */
-        locale = NULL;
-    }
-    if (name == NULL) {
-        return NULL;
-    }
-#if U_PLATFORM == U_PF_AIX
-    if (uprv_strcmp(name, "IBM-943") == 0) {
-        /* Use the ASCII compatible ibm-943 */
-        name = "Shift-JIS";
-    }
-    else if (uprv_strcmp(name, "IBM-1252") == 0) {
-        /* Use the windows-1252 that contains the Euro */
-        name = "IBM-5348";
-    }
-#elif U_PLATFORM == U_PF_SOLARIS
-    if (locale != NULL && uprv_strcmp(name, "EUC") == 0) {
-        /* Solaris underspecifies the "EUC" name. */
-        if (uprv_strcmp(locale, "zh_CN") == 0) {
-            name = "EUC-CN";
-        }
-        else if (uprv_strcmp(locale, "zh_TW") == 0) {
-            name = "EUC-TW";
-        }
-        else if (uprv_strcmp(locale, "ko_KR") == 0) {
-            name = "EUC-KR";
-        }
-    }
-    else if (uprv_strcmp(name, "eucJP") == 0) {
-        /*
-        ibm-954 is the best match.
-        ibm-33722 is the default for eucJP (similar to Windows).
-        */
-        name = "eucjis";
-    }
-    else if (uprv_strcmp(name, "646") == 0) {
-        /*
-         * The default codepage given by Solaris is 646 but the C library routines treat it as if it was
-         * ISO-8859-1 instead of US-ASCII(646).
-         */
-        name = "ISO-8859-1";
-    }
-#elif U_PLATFORM_IS_DARWIN_BASED
-    if (locale == NULL && *name == 0) {
-        /*
-        No locale was specified, and an empty name was passed in.
-        This usually indicates that nl_langinfo didn't return valid information.
-        Mac OS X uses UTF-8 by default (especially the locale data and console).
-        */
-        name = "UTF-8";
-    }
-    else if (uprv_strcmp(name, "CP949") == 0) {
-        /* Remap CP949 to a similar codepage to avoid issues with backslash and won symbol. */
-        name = "EUC-KR";
-    }
-    else if (locale != NULL && uprv_strcmp(locale, "en_US_POSIX") != 0 && uprv_strcmp(name, "US-ASCII") == 0) {
-        /*
-         * For non C/POSIX locale, default the code page to UTF-8 instead of US-ASCII.
-         */
-        name = "UTF-8";
-    }
-#elif U_PLATFORM == U_PF_BSD
-    if (uprv_strcmp(name, "CP949") == 0) {
-        /* Remap CP949 to a similar codepage to avoid issues with backslash and won symbol. */
-        name = "EUC-KR";
-    }
-#elif U_PLATFORM == U_PF_HPUX
-    if (locale != NULL && uprv_strcmp(locale, "zh_HK") == 0 && uprv_strcmp(name, "big5") == 0) {
-        /* HP decided to extend big5 as hkbig5 even though it's not compatible :-( */
-        /* zh_TW.big5 is not the same charset as zh_HK.big5! */
-        name = "hkbig5";
-    }
-    else if (uprv_strcmp(name, "eucJP") == 0) {
-        /*
-        ibm-1350 is the best match, but unavailable.
-        ibm-954 is mostly a superset of ibm-1350.
-        ibm-33722 is the default for eucJP (similar to Windows).
-        */
-        name = "eucjis";
-    }
-#elif U_PLATFORM == U_PF_LINUX
-    if (locale != NULL && uprv_strcmp(name, "euc") == 0) {
-        /* Linux underspecifies the "EUC" name. */
-        if (uprv_strcmp(locale, "korean") == 0) {
-            name = "EUC-KR";
-        }
-        else if (uprv_strcmp(locale, "japanese") == 0) {
-            /* See comment below about eucJP */
-            name = "eucjis";
-        }
-    }
-    else if (uprv_strcmp(name, "eucjp") == 0) {
-        /*
-        ibm-1350 is the best match, but unavailable.
-        ibm-954 is mostly a superset of ibm-1350.
-        ibm-33722 is the default for eucJP (similar to Windows).
-        */
-        name = "eucjis";
-    }
-    else if (locale != NULL && uprv_strcmp(locale, "en_US_POSIX") != 0 &&
-            (uprv_strcmp(name, "ANSI_X3.4-1968") == 0 || uprv_strcmp(name, "US-ASCII") == 0)) {
-        /*
-         * For non C/POSIX locale, default the code page to UTF-8 instead of US-ASCII.
-         */
-        name = "UTF-8";
-    }
-    /*
-     * Linux returns ANSI_X3.4-1968 for C/POSIX, but the call site takes care of
-     * it by falling back to 'US-ASCII' when NULL is returned from this
-     * function. So, we don't have to worry about it here.
-     */
-#endif
-    /* return NULL when "" is passed in */
-    if (*name == 0) {
-        name = NULL;
-    }
-    return name;
-}
-
-static const char*
-getCodepageFromPOSIXID(const char *localeName, char * buffer, int32_t buffCapacity)
-{
-    char localeBuf[100];
-    const char *name = NULL;
-    char *variant = NULL;
-
-    if (localeName != NULL && (name = (uprv_strchr(localeName, '.'))) != NULL) {
-        size_t localeCapacity = uprv_min(sizeof(localeBuf), (name-localeName)+1);
-        uprv_strncpy(localeBuf, localeName, localeCapacity);
-        localeBuf[localeCapacity-1] = 0; /* ensure NULL termination */
-        name = uprv_strncpy(buffer, name+1, buffCapacity);
-        buffer[buffCapacity-1] = 0; /* ensure NULL termination */
-        if ((variant = const_cast<char *>(uprv_strchr(name, '@'))) != NULL) {
-            *variant = 0;
-        }
-        name = remapPlatformDependentCodepage(localeBuf, name);
-    }
-    return name;
-}
-#endif
-
-static const char*
-int_getDefaultCodepage()
-{
-#if U_PLATFORM == U_PF_OS400
-    uint32_t ccsid = 37; /* Default to ibm-37 */
-    static char codepage[64];
-    Qwc_JOBI0400_t jobinfo;
-    Qus_EC_t error = { sizeof(Qus_EC_t) }; /* SPI error code */
-
-    EPT_CALL(QUSRJOBI)(&jobinfo, sizeof(jobinfo), "JOBI0400",
-        "*                         ", "                ", &error);
-
-    if (error.Bytes_Available == 0) {
-        if (jobinfo.Coded_Char_Set_ID != 0xFFFF) {
-            ccsid = (uint32_t)jobinfo.Coded_Char_Set_ID;
-        }
-        else if (jobinfo.Default_Coded_Char_Set_Id != 0xFFFF) {
-            ccsid = (uint32_t)jobinfo.Default_Coded_Char_Set_Id;
-        }
-        /* else use the default */
-    }
-    sprintf(codepage,"ibm-%d", ccsid);
-    return codepage;
-
-#elif U_PLATFORM == U_PF_OS390
-    static char codepage[64];
-
-    strncpy(codepage, nl_langinfo(CODESET),63-strlen(UCNV_SWAP_LFNL_OPTION_STRING));
-    strcat(codepage,UCNV_SWAP_LFNL_OPTION_STRING);
-    codepage[63] = 0; /* NULL terminate */
-
-    return codepage;
-
-#elif U_PLATFORM == U_PF_CLASSIC_MACOS
-    return "macintosh"; /* TODO: Macintosh Roman. There must be a better way. fixme! */
-
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-    static char codepage[64];
-    sprintf(codepage, "windows-%d", GetACP());
-    return codepage;
-
-#elif U_POSIX_LOCALE
-    static char codesetName[100];
-    const char *localeName = NULL;
-    const char *name = NULL;
-
-    localeName = uprv_getPOSIXIDForDefaultCodepage();
-    uprv_memset(codesetName, 0, sizeof(codesetName));
-#if U_HAVE_NL_LANGINFO_CODESET
-    /* When available, check nl_langinfo first because it usually gives more
-       useful names. It depends on LC_CTYPE.
-       nl_langinfo may use the same buffer as setlocale. */
-    {
-        const char *codeset = nl_langinfo(U_NL_LANGINFO_CODESET);
-#if U_PLATFORM_IS_DARWIN_BASED || U_PLATFORM_IS_LINUX_BASED
-        /*
-         * On Linux and MacOSX, ensure that default codepage for non C/POSIX locale is UTF-8
-         * instead of ASCII.
-         */
-        if (uprv_strcmp(localeName, "en_US_POSIX") != 0) {
-            codeset = remapPlatformDependentCodepage(localeName, codeset);
-        } else
-#endif
-        {
-            codeset = remapPlatformDependentCodepage(NULL, codeset);
-        }
-
-        if (codeset != NULL) {
-            uprv_strncpy(codesetName, codeset, sizeof(codesetName));
-            codesetName[sizeof(codesetName)-1] = 0;
-            return codesetName;
-        }
-    }
-#endif
-
-    /* Use setlocale in a nice way, and then check some environment variables.
-       Maybe the application used setlocale already.
-    */
-    uprv_memset(codesetName, 0, sizeof(codesetName));
-    name = getCodepageFromPOSIXID(localeName, codesetName, sizeof(codesetName));
-    if (name) {
-        /* if we can find the codeset name from setlocale, return that. */
-        return name;
-    }
-
-    if (*codesetName == 0)
-    {
-        /* Everything failed. Return US ASCII (ISO 646). */
-        (void)uprv_strcpy(codesetName, "US-ASCII");
-    }
-    return codesetName;
-#else
-    return "US-ASCII";
-#endif
-}
-
-
-U_CAPI const char*  U_EXPORT2
-uprv_getDefaultCodepage()
-{
-    static char const  *name = NULL;
-    umtx_lock(NULL);
-    if (name == NULL) {
-        name = int_getDefaultCodepage();
-    }
-    umtx_unlock(NULL);
-    return name;
-}
-#endif  /* !U_CHARSET_IS_UTF8 */
-
-
-/* end of platform-specific implementation -------------- */
-
-/* version handling --------------------------------------------------------- */
-
-U_CAPI void U_EXPORT2
-u_versionFromString(UVersionInfo versionArray, const char *versionString) {
-    char *end;
-    uint16_t part=0;
-
-    if(versionArray==NULL) {
-        return;
-    }
-
-    if(versionString!=NULL) {
-        for(;;) {
-            versionArray[part]=(uint8_t)uprv_strtoul(versionString, &end, 10);
-            if(end==versionString || ++part==U_MAX_VERSION_LENGTH || *end!=U_VERSION_DELIMITER) {
-                break;
-            }
-            versionString=end+1;
-        }
-    }
-
-    while(part<U_MAX_VERSION_LENGTH) {
-        versionArray[part++]=0;
-    }
-}
-
-U_CAPI void U_EXPORT2
-u_versionFromUString(UVersionInfo versionArray, const UChar *versionString) {
-    if(versionArray!=NULL && versionString!=NULL) {
-        char versionChars[U_MAX_VERSION_STRING_LENGTH+1];
-        int32_t len = u_strlen(versionString);
-        if(len>U_MAX_VERSION_STRING_LENGTH) {
-            len = U_MAX_VERSION_STRING_LENGTH;
-        }
-        u_UCharsToChars(versionString, versionChars, len);
-        versionChars[len]=0;
-        u_versionFromString(versionArray, versionChars);
-    }
-}
-
-U_CAPI void U_EXPORT2
-u_versionToString(const UVersionInfo versionArray, char *versionString) {
-    uint16_t count, part;
-    uint8_t field;
-
-    if(versionString==NULL) {
-        return;
-    }
-
-    if(versionArray==NULL) {
-        versionString[0]=0;
-        return;
-    }
-
-    /* count how many fields need to be written */
-    for(count=4; count>0 && versionArray[count-1]==0; --count) {
-    }
-
-    if(count <= 1) {
-        count = 2;
-    }
-
-    /* write the first part */
-    /* write the decimal field value */
-    field=versionArray[0];
-    if(field>=100) {
-        *versionString++=(char)('0'+field/100);
-        field%=100;
-    }
-    if(field>=10) {
-        *versionString++=(char)('0'+field/10);
-        field%=10;
-    }
-    *versionString++=(char)('0'+field);
-
-    /* write the following parts */
-    for(part=1; part<count; ++part) {
-        /* write a dot first */
-        *versionString++=U_VERSION_DELIMITER;
-
-        /* write the decimal field value */
-        field=versionArray[part];
-        if(field>=100) {
-            *versionString++=(char)('0'+field/100);
-            field%=100;
-        }
-        if(field>=10) {
-            *versionString++=(char)('0'+field/10);
-            field%=10;
-        }
-        *versionString++=(char)('0'+field);
-    }
-
-    /* NUL-terminate */
-    *versionString=0;
-}
-
-U_CAPI void U_EXPORT2
-u_getVersion(UVersionInfo versionArray) {
-    u_versionFromString(versionArray, U_ICU_VERSION);
-}
-
-/**
- * icucfg.h dependent code 
- */
-
-#if U_ENABLE_DYLOAD
- 
-#if HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API
-
-#if HAVE_DLFCN_H
-
-#ifdef __MVS__
-#ifndef __SUSV3
-#define __SUSV3 1
-#endif
-#endif
-#include <dlfcn.h>
-#endif
-
-U_INTERNAL void * U_EXPORT2
-uprv_dl_open(const char *libName, UErrorCode *status) {
-  void *ret = NULL;
-  if(U_FAILURE(*status)) return ret;
-  ret =  dlopen(libName, RTLD_NOW|RTLD_GLOBAL);
-  if(ret==NULL) {
-#ifdef U_TRACE_DYLOAD
-    printf("dlerror on dlopen(%s): %s\n", libName, dlerror());
-#endif
-    *status = U_MISSING_RESOURCE_ERROR;
-  }
-  return ret;
-}
-
-U_INTERNAL void U_EXPORT2
-uprv_dl_close(void *lib, UErrorCode *status) {
-  if(U_FAILURE(*status)) return;
-  dlclose(lib);
-}
-
-U_INTERNAL UVoidFunction* U_EXPORT2
-uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
-  union {
-      UVoidFunction *fp;
-      void *vp;
-  } uret;
-  uret.fp = NULL;
-  if(U_FAILURE(*status)) return uret.fp;
-  uret.vp = dlsym(lib, sym);
-  if(uret.vp == NULL) {
-#ifdef U_TRACE_DYLOAD
-    printf("dlerror on dlsym(%p,%s): %s\n", lib,sym, dlerror());
-#endif
-    *status = U_MISSING_RESOURCE_ERROR;
-  }
-  return uret.fp;
-}
-
-#else
-
-/* null (nonexistent) implementation. */
-
-U_INTERNAL void * U_EXPORT2
-uprv_dl_open(const char *libName, UErrorCode *status) {
-  if(U_FAILURE(*status)) return NULL;
-  *status = U_UNSUPPORTED_ERROR;
-  return NULL;
-}
-
-U_INTERNAL void U_EXPORT2
-uprv_dl_close(void *lib, UErrorCode *status) {
-  if(U_FAILURE(*status)) return;
-  *status = U_UNSUPPORTED_ERROR;
-  return;
-}
-
-
-U_INTERNAL UVoidFunction* U_EXPORT2
-uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
-  if(U_SUCCESS(*status)) {
-    *status = U_UNSUPPORTED_ERROR;
-  }
-  return (UVoidFunction*)NULL;
-}
-
-
-
-#endif
-
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-
-U_INTERNAL void * U_EXPORT2
-uprv_dl_open(const char *libName, UErrorCode *status) {
-  HMODULE lib = NULL;
-  
-  if(U_FAILURE(*status)) return NULL;
-  
-  lib = LoadLibraryA(libName);
-  
-  if(lib==NULL) {
-    *status = U_MISSING_RESOURCE_ERROR;
-  }
-  
-  return (void*)lib;
-}
-
-U_INTERNAL void U_EXPORT2
-uprv_dl_close(void *lib, UErrorCode *status) {
-  HMODULE handle = (HMODULE)lib;
-  if(U_FAILURE(*status)) return;
-  
-  FreeLibrary(handle);
-  
-  return;
-}
-
-
-U_INTERNAL UVoidFunction* U_EXPORT2
-uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
-  HMODULE handle = (HMODULE)lib;
-  UVoidFunction* addr = NULL;
-  
-  if(U_FAILURE(*status) || lib==NULL) return NULL;
-  
-  addr = (UVoidFunction*)GetProcAddress(handle, sym);
-  
-  if(addr==NULL) {
-    DWORD lastError = GetLastError();
-    if(lastError == ERROR_PROC_NOT_FOUND) {
-      *status = U_MISSING_RESOURCE_ERROR;
-    } else {
-      *status = U_UNSUPPORTED_ERROR; /* other unknown error. */
-    }
-  }
-  
-  return addr;
-}
-
-
-#else
-
-/* No dynamic loading set. */
-
-U_INTERNAL void * U_EXPORT2
-uprv_dl_open(const char *libName, UErrorCode *status) {
-    if(U_FAILURE(*status)) return NULL;
-    *status = U_UNSUPPORTED_ERROR;
-    return NULL;
-}
-
-U_INTERNAL void U_EXPORT2
-uprv_dl_close(void *lib, UErrorCode *status) {
-    if(U_FAILURE(*status)) return;
-    *status = U_UNSUPPORTED_ERROR;
-    return;
-}
-
-
-U_INTERNAL UVoidFunction* U_EXPORT2
-uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
-  if(U_SUCCESS(*status)) {
-    *status = U_UNSUPPORTED_ERROR;
-  }
-  return (UVoidFunction*)NULL;
-}
-
-#endif /* U_ENABLE_DYLOAD */
-
-/*
- * Hey, Emacs, please set the following:
- *
- * Local Variables:
- * indent-tabs-mode: nil
- * End:
- *
- */
diff --git a/src/third_party/mozjs/intl/icu/source/common/putilimp.h b/src/third_party/mozjs/intl/icu/source/common/putilimp.h
deleted file mode 100644
index 3229242..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/putilimp.h
+++ /dev/null
@@ -1,570 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-*  FILE NAME : putilimp.h
-*
-*   Date        Name        Description
-*   10/17/04    grhoten     Move internal functions from putil.h to this file.
-******************************************************************************
-*/
-
-#ifndef PUTILIMP_H
-#define PUTILIMP_H
-
-#include "unicode/utypes.h"
-#include "unicode/putil.h"
-
-/**
- * \def U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC
- * Nearly all CPUs and compilers implement a right-shift of a signed integer
- * as an Arithmetic Shift Right which copies the sign bit (the Most Significant Bit (MSB))
- * into the vacated bits (sign extension).
- * For example, (int32_t)0xfff5fff3>>4 becomes 0xffff5fff and -1>>1=-1.
- *
- * This can be useful for storing a signed value in the upper bits
- * and another bit field in the lower bits.
- * The signed value can be retrieved by simple right-shifting.
- *
- * This is consistent with the Java language.
- *
- * However, the C standard allows compilers to implement a right-shift of a signed integer
- * as a Logical Shift Right which copies a 0 into the vacated bits.
- * For example, (int32_t)0xfff5fff3>>4 becomes 0x0fff5fff and -1>>1=0x7fffffff.
- *
- * Code that depends on the natural behavior should be guarded with this macro,
- * with an alternate path for unusual platforms.
- * @internal
- */
-#ifdef U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC
-    /* Use the predefined value. */
-#else
-    /*
-     * Nearly all CPUs & compilers implement a right-shift of a signed integer
-     * as an Arithmetic Shift Right (with sign extension).
-     */
-#   define U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC 1
-#endif
-
-/** Define this to 1 if your platform supports IEEE 754 floating point,
-   to 0 if it does not. */
-#ifndef IEEE_754
-#   define IEEE_754 1
-#endif
-
-/**
- * uintptr_t is an optional part of the standard definitions in stdint.h.
- * The opengroup.org documentation for stdint.h says
- * "On XSI-conformant systems, the intptr_t and uintptr_t types are required;
- * otherwise, they are optional."
- * We assume that when uintptr_t is defined, UINTPTR_MAX is defined as well.
- *
- * Do not use ptrdiff_t since it is signed. size_t is unsigned.
- */
-/* TODO: This check fails on some z environments. Filed a ticket #9357 for this. */
-#if !defined(__intptr_t_defined) && !defined(UINTPTR_MAX) && (U_PLATFORM != U_PF_OS390)
-typedef size_t uintptr_t;
-#endif
-
-/**
- * \def U_HAVE_MSVC_2003_OR_EARLIER
- * Flag for workaround of MSVC 2003 optimization bugs
- * @internal
- */
-#if !defined(U_HAVE_MSVC_2003_OR_EARLIER) && defined(_MSC_VER) && (_MSC_VER < 1400)
-#define U_HAVE_MSVC_2003_OR_EARLIER
-#endif
-
-/*===========================================================================*/
-/** @{ Information about POSIX support                                       */
-/*===========================================================================*/
-
-#ifdef U_HAVE_NL_LANGINFO_CODESET
-    /* Use the predefined value. */
-#elif U_PLATFORM_HAS_WIN32_API
-#   define U_HAVE_NL_LANGINFO_CODESET 0
-#else
-#   define U_HAVE_NL_LANGINFO_CODESET 1
-#endif
-
-#ifdef U_NL_LANGINFO_CODESET
-    /* Use the predefined value. */
-#elif !U_HAVE_NL_LANGINFO_CODESET
-#   define U_NL_LANGINFO_CODESET -1
-#elif U_PLATFORM == U_PF_OS400
-   /* not defined */
-#else
-#   define U_NL_LANGINFO_CODESET CODESET
-#endif
-
-#ifdef U_TZSET
-    /* Use the predefined value. */
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-#   define U_TZSET _tzset
-#elif U_PLATFORM == U_PF_OS400
-   /* not defined */
-#else
-#   define U_TZSET tzset
-#endif
-
-#ifdef U_TIMEZONE
-    /* Use the predefined value. */
-#elif U_PLATFORM == U_PF_ANDROID
-#   define U_TIMEZONE timezone
-#elif U_PLATFORM_IS_LINUX_BASED
-#   define U_TIMEZONE __timezone
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-#   define U_TIMEZONE _timezone
-#elif U_PLATFORM == U_PF_BSD && !defined(__NetBSD__)
-   /* not defined */
-#elif U_PLATFORM == U_PF_OS400
-   /* not defined */
-#else
-#   define U_TIMEZONE timezone
-#endif
-
-#ifdef U_TZNAME
-    /* Use the predefined value. */
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-#   define U_TZNAME _tzname
-#elif U_PLATFORM == U_PF_OS400
-   /* not defined */
-#else
-#   define U_TZNAME tzname
-#endif
-
-#ifdef U_HAVE_MMAP
-    /* Use the predefined value. */
-#elif U_PLATFORM_HAS_WIN32_API
-#   define U_HAVE_MMAP 0
-#else
-#   define U_HAVE_MMAP 1
-#endif
-
-#ifdef U_HAVE_POPEN
-    /* Use the predefined value. */
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-#   define U_HAVE_POPEN 0
-#elif U_PLATFORM == U_PF_OS400
-#   define U_HAVE_POPEN 0
-#else
-#   define U_HAVE_POPEN 1
-#endif
-
-/**
- * \def U_HAVE_DIRENT_H
- * Defines whether dirent.h is available.
- * @internal
- */
-#ifdef U_HAVE_DIRENT_H
-    /* Use the predefined value. */
-#elif U_PLATFORM_HAS_WIN32_API
-#   define U_HAVE_DIRENT_H 0
-#else
-#   define U_HAVE_DIRENT_H 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ GCC built in functions for atomic memory operations                   */
-/*===========================================================================*/
-
-/**
- * \def U_HAVE_GCC_ATOMICS
- * @internal
- */
-#ifdef U_HAVE_GCC_ATOMICS
-    /* Use the predefined value. */
-#elif U_GCC_MAJOR_MINOR >= 404
-#   define U_HAVE_GCC_ATOMICS 1
-#else
-#   define U_HAVE_GCC_ATOMICS 0
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Code alignment                                                        */
-/*===========================================================================*/
-
-/**
- * \def U_ALIGN_CODE
- * This is used to align code fragments to a specific byte boundary.
- * This is useful for getting consistent performance test results.
- * @internal
- */
-#ifdef U_ALIGN_CODE
-    /* Use the predefined value. */
-#elif defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED)
-#   define U_ALIGN_CODE(boundarySize) __asm  align boundarySize
-#else
-#   define U_ALIGN_CODE(boundarySize) 
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                             */
-/*===========================================================================*/
-
-/**
- * \def U_MAKE_IS_NMAKE
- * Defines whether the "make" program is Windows nmake.
- */
-#ifdef U_MAKE_IS_NMAKE
-    /* Use the predefined value. */
-#elif U_PLATFORM == U_PF_WINDOWS
-#   define U_MAKE_IS_NMAKE 1
-#else
-#   define U_MAKE_IS_NMAKE 0
-#endif
-
-/** @} */
-
-/*==========================================================================*/
-/* Platform utilities                                                       */
-/*==========================================================================*/
-
-/**
- * Platform utilities isolates the platform dependencies of the
- * libarary.  For each platform which this code is ported to, these
- * functions may have to be re-implemented.
- */
-
-/**
- * Floating point utility to determine if a double is Not a Number (NaN).
- * @internal
- */
-U_INTERNAL UBool   U_EXPORT2 uprv_isNaN(double d);
-/**
- * Floating point utility to determine if a double has an infinite value.
- * @internal
- */
-U_INTERNAL UBool   U_EXPORT2 uprv_isInfinite(double d);
-/**
- * Floating point utility to determine if a double has a positive infinite value.
- * @internal
- */
-U_INTERNAL UBool   U_EXPORT2 uprv_isPositiveInfinity(double d);
-/**
- * Floating point utility to determine if a double has a negative infinite value.
- * @internal
- */
-U_INTERNAL UBool   U_EXPORT2 uprv_isNegativeInfinity(double d);
-/**
- * Floating point utility that returns a Not a Number (NaN) value.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_getNaN(void);
-/**
- * Floating point utility that returns an infinite value.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_getInfinity(void);
-
-/**
- * Floating point utility to truncate a double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_trunc(double d);
-/**
- * Floating point utility to calculate the floor of a double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_floor(double d);
-/**
- * Floating point utility to calculate the ceiling of a double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_ceil(double d);
-/**
- * Floating point utility to calculate the absolute value of a double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_fabs(double d);
-/**
- * Floating point utility to calculate the fractional and integer parts of a double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_modf(double d, double* pinteger);
-/**
- * Floating point utility to calculate the remainder of a double divided by another double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_fmod(double d, double y);
-/**
- * Floating point utility to calculate d to the power of exponent (d^exponent).
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_pow(double d, double exponent);
-/**
- * Floating point utility to calculate 10 to the power of exponent (10^exponent).
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_pow10(int32_t exponent);
-/**
- * Floating point utility to calculate the maximum value of two doubles.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_fmax(double d, double y);
-/**
- * Floating point utility to calculate the minimum value of two doubles.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_fmin(double d, double y);
-/**
- * Private utility to calculate the maximum value of two integers.
- * @internal
- */
-U_INTERNAL int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y);
-/**
- * Private utility to calculate the minimum value of two integers.
- * @internal
- */
-U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y);
-
-#if U_IS_BIG_ENDIAN
-#   define uprv_isNegative(number) (*((signed char *)&(number))<0)
-#else
-#   define uprv_isNegative(number) (*((signed char *)&(number)+sizeof(number)-1)<0)
-#endif
-
-/**
- * Return the largest positive number that can be represented by an integer
- * type of arbitrary bit length.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_maxMantissa(void);
-
-/**
- * Floating point utility to calculate the logarithm of a double.
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_log(double d);
-
-/**
- * Does common notion of rounding e.g. uprv_floor(x + 0.5);
- * @param x the double number
- * @return the rounded double
- * @internal
- */
-U_INTERNAL double  U_EXPORT2 uprv_round(double x);
-
-#if 0
-/**
- * Returns the number of digits after the decimal point in a double number x.
- *
- * @param x the double number
- * @return the number of digits after the decimal point in a double number x.
- * @internal
- */
-/*U_INTERNAL int32_t  U_EXPORT2 uprv_digitsAfterDecimal(double x);*/
-#endif
-
-#if !U_CHARSET_IS_UTF8
-/**
- * Please use ucnv_getDefaultName() instead.
- * Return the default codepage for this platform and locale.
- * This function can call setlocale() on Unix platforms. Please read the
- * platform documentation on setlocale() before calling this function.
- * @return the default codepage for this platform 
- * @internal
- */
-U_INTERNAL const char*  U_EXPORT2 uprv_getDefaultCodepage(void);
-#endif
-
-/**
- * Please use uloc_getDefault() instead.
- * Return the default locale ID string by querying ths system, or
- *     zero if one cannot be found. 
- * This function can call setlocale() on Unix platforms. Please read the
- * platform documentation on setlocale() before calling this function.
- * @return the default locale ID string
- * @internal
- */
-U_INTERNAL const char*  U_EXPORT2 uprv_getDefaultLocaleID(void);
-
-/**
- * Time zone utilities
- *
- * Wrappers for C runtime library functions relating to timezones.
- * The t_tzset() function (similar to tzset) uses the current setting
- * of the environment variable TZ to assign values to three global
- * variables: daylight, timezone, and tzname. These variables have the
- * following meanings, and are declared in &lt;time.h&gt;.
- *
- *   daylight   Nonzero if daylight-saving-time zone (DST) is specified
- *              in TZ; otherwise, 0. Default value is 1.
- *   timezone   Difference in seconds between coordinated universal
- *              time and local time. E.g., -28,800 for PST (GMT-8hrs)
- *   tzname(0)  Three-letter time-zone name derived from TZ environment
- *              variable. E.g., "PST".
- *   tzname(1)  Three-letter DST zone name derived from TZ environment
- *              variable.  E.g., "PDT". If DST zone is omitted from TZ,
- *              tzname(1) is an empty string.
- *
- * Notes: For example, to set the TZ environment variable to correspond
- * to the current time zone in Germany, you can use one of the
- * following statements:
- *
- *   set TZ=GST1GDT
- *   set TZ=GST+1GDT
- *
- * If the TZ value is not set, t_tzset() attempts to use the time zone
- * information specified by the operating system. Under Windows NT
- * and Windows 95, this information is specified in the Control Panel's
- * Date/Time application.
- * @internal
- */
-U_INTERNAL void     U_EXPORT2 uprv_tzset(void);
-
-/**
- * Difference in seconds between coordinated universal
- * time and local time. E.g., -28,800 for PST (GMT-8hrs)
- * @return the difference in seconds between coordinated universal time and local time.
- * @internal
- */
-U_INTERNAL int32_t  U_EXPORT2 uprv_timezone(void);
-
-/**
- *   tzname(0)  Three-letter time-zone name derived from TZ environment
- *              variable. E.g., "PST".
- *   tzname(1)  Three-letter DST zone name derived from TZ environment
- *              variable.  E.g., "PDT". If DST zone is omitted from TZ,
- *              tzname(1) is an empty string.
- * @internal
- */
-U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n);
-
-/**
- * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
- * This function is affected by 'faketime' and should be the bottleneck for all user-visible ICU time functions.
- * @return the UTC time measured in milliseconds
- * @internal
- */
-U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void);
-
-/**
- * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
- * This function is not affected by 'faketime', so it should only be used by low level test functions- not by anything that
- * exposes time to the end user.
- * @return the UTC time measured in milliseconds
- * @internal
- */
-U_INTERNAL UDate U_EXPORT2 uprv_getRawUTCtime(void);
-
-/**
- * Determine whether a pathname is absolute or not, as defined by the platform.
- * @param path Pathname to test
- * @return TRUE if the path is absolute
- * @internal (ICU 3.0)
- */
-U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
-
-/**
- * Use U_MAX_PTR instead of this function.
- * @param void pointer to test
- * @return the largest possible pointer greater than the base
- * @internal (ICU 3.8)
- */
-U_INTERNAL void * U_EXPORT2 uprv_maximumPtr(void *base);
-
-/**
- * Maximum value of a (void*) - use to indicate the limit of an 'infinite' buffer.
- * In fact, buffer sizes must not exceed 2GB so that the difference between
- * the buffer limit and the buffer start can be expressed in an int32_t.
- *
- * The definition of U_MAX_PTR must fulfill the following conditions:
- * - return the largest possible pointer greater than base
- * - return a valid pointer according to the machine architecture (AS/400, 64-bit, etc.)
- * - avoid wrapping around at high addresses
- * - make sure that the returned pointer is not farther from base than 0x7fffffff bytes
- *
- * @param base The beginning of a buffer to find the maximum offset from
- * @internal
- */
-#ifndef U_MAX_PTR
-#  if U_PLATFORM == U_PF_OS390 && !defined(_LP64)
-    /* We have 31-bit pointers. */
-#    define U_MAX_PTR(base) ((void *)0x7fffffff)
-#  elif U_PLATFORM == U_PF_OS400
-#    define U_MAX_PTR(base) uprv_maximumPtr((void *)base)
-#  elif 0
-    /*
-     * For platforms where pointers are scalar values (which is normal, but unlike i5/OS)
-     * but that do not define uintptr_t.
-     *
-     * However, this does not work on modern compilers:
-     * The C++ standard does not define pointer overflow, and allows compilers to
-     * assume that p+u>p for any pointer p and any integer u>0.
-     * Thus, modern compilers optimize away the ">" comparison.
-     * (See ICU tickets #7187 and #8096.)
-     */
-#    define U_MAX_PTR(base) \
-    ((void *)(((char *)(base)+0x7fffffffu) > (char *)(base) \
-        ? ((char *)(base)+0x7fffffffu) \
-        : (char *)-1))
-#  else
-    /* Default version. C++ standard compliant for scalar pointers. */
-#    define U_MAX_PTR(base) \
-    ((void *)(((uintptr_t)(base)+0x7fffffffu) > (uintptr_t)(base) \
-        ? ((uintptr_t)(base)+0x7fffffffu) \
-        : (uintptr_t)-1))
-#  endif
-#endif
-
-/*  Dynamic Library Functions */
-
-typedef void (UVoidFunction)(void);
-
-#if U_ENABLE_DYLOAD
-/**
- * Load a library
- * @internal (ICU 4.4)
- */
-U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status);
-
-/**
- * Close a library
- * @internal (ICU 4.4)
- */
-U_INTERNAL void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status);
-
-/**
- * Extract a symbol from a library (function)
- * @internal (ICU 4.8)
- */
-U_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func( void *lib, const char *symbolName, UErrorCode *status);
-
-/**
- * Extract a symbol from a library (function)
- * Not implemented, no clients.
- * @internal
- */
-/* U_INTERNAL void * U_EXPORT2 uprv_dlsym_data( void *lib, const char *symbolName, UErrorCode *status); */
-
-#endif
-
-/**
- * Define malloc and related functions
- * @internal
- */
-#if U_PLATFORM == U_PF_OS400
-# define uprv_default_malloc(x) _C_TS_malloc(x)
-# define uprv_default_realloc(x,y) _C_TS_realloc(x,y)
-# define uprv_default_free(x) _C_TS_free(x)
-/* also _C_TS_calloc(x) */
-#else
-/* C defaults */
-# define uprv_default_malloc(x) malloc(x)
-# define uprv_default_realloc(x,y) realloc(x,y)
-# define uprv_default_free(x) free(x)
-#endif
-
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbi.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbi.cpp
deleted file mode 100644
index 5ceca10..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbi.cpp
+++ /dev/null
@@ -1,1941 +0,0 @@
-/*
-***************************************************************************
-*   Copyright (C) 1999-2012 International Business Machines Corporation
-*   and others. All rights reserved.
-***************************************************************************
-*/
-//
-//  file:  rbbi.c    Contains the implementation of the rule based break iterator
-//                   runtime engine and the API implementation for
-//                   class RuleBasedBreakIterator
-//
-
-#include "utypeinfo.h"  // for 'typeid' to work
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/rbbi.h"
-#include "unicode/schriter.h"
-#include "unicode/uchriter.h"
-#include "unicode/udata.h"
-#include "unicode/uclean.h"
-#include "rbbidata.h"
-#include "rbbirb.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "umutex.h"
-#include "ucln_cmn.h"
-#include "brkeng.h"
-
-#include "uassert.h"
-#include "uvector.h"
-
-// if U_LOCAL_SERVICE_HOOK is defined, then localsvc.cpp is expected to be included.
-#if U_LOCAL_SERVICE_HOOK
-#include "localsvc.h"
-#endif
-
-#ifdef RBBI_DEBUG
-static UBool fTrace = FALSE;
-#endif
-
-U_NAMESPACE_BEGIN
-
-// The state number of the starting state
-#define START_STATE 1
-
-// The state-transition value indicating "stop"
-#define STOP_STATE  0
-
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator)
-
-
-//=======================================================================
-// constructors
-//=======================================================================
-
-/**
- * Constructs a RuleBasedBreakIterator that uses the already-created
- * tables object that is passed in as a parameter.
- */
-RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status)
-{
-    init();
-    fData = new RBBIDataWrapper(data, status); // status checked in constructor
-    if (U_FAILURE(status)) {return;}
-    if(fData == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-}
-
-/**
- * Same as above but does not adopt memory
- */
-RuleBasedBreakIterator::RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status)
-{
-    init();
-    fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); // status checked in constructor
-    if (U_FAILURE(status)) {return;}
-    if(fData == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-}
-
-
-//
-//  Construct from precompiled binary rules (tables).  This constructor is public API,
-//  taking the rules as a (const uint8_t *) to match the type produced by getBinaryRules().
-//
-RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules,
-                       uint32_t       ruleLength,
-                       UErrorCode     &status) {
-    init();
-    if (U_FAILURE(status)) {
-        return;
-    }
-    if (compiledRules == NULL || ruleLength < sizeof(RBBIDataHeader)) {
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    const RBBIDataHeader *data = (const RBBIDataHeader *)compiledRules;
-    if (data->fLength > ruleLength) {
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); 
-    if (U_FAILURE(status)) {return;}
-    if(fData == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-}    
-
-
-//-------------------------------------------------------------------------------
-//
-//   Constructor   from a UDataMemory handle to precompiled break rules
-//                 stored in an ICU data file.
-//
-//-------------------------------------------------------------------------------
-RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &status)
-{
-    init();
-    fData = new RBBIDataWrapper(udm, status); // status checked in constructor
-    if (U_FAILURE(status)) {return;}
-    if(fData == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-}
-
-
-
-//-------------------------------------------------------------------------------
-//
-//   Constructor       from a set of rules supplied as a string.
-//
-//-------------------------------------------------------------------------------
-RuleBasedBreakIterator::RuleBasedBreakIterator( const UnicodeString  &rules,
-                                                UParseError          &parseError,
-                                                UErrorCode           &status)
-{
-    init();
-    if (U_FAILURE(status)) {return;}
-    RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)
-        RBBIRuleBuilder::createRuleBasedBreakIterator(rules, &parseError, status);
-    // Note:  This is a bit awkward.  The RBBI ruleBuilder has a factory method that
-    //        creates and returns a complete RBBI.  From here, in a constructor, we
-    //        can't just return the object created by the builder factory, hence
-    //        the assignment of the factory created object to "this".
-    if (U_SUCCESS(status)) {
-        *this = *bi;
-        delete bi;
-    }
-}
-
-
-//-------------------------------------------------------------------------------
-//
-// Default Constructor.      Create an empty shell that can be set up later.
-//                           Used when creating a RuleBasedBreakIterator from a set
-//                           of rules.
-//-------------------------------------------------------------------------------
-RuleBasedBreakIterator::RuleBasedBreakIterator() {
-    init();
-}
-
-
-//-------------------------------------------------------------------------------
-//
-//   Copy constructor.  Will produce a break iterator with the same behavior,
-//                      and which iterates over the same text, as the one passed in.
-//
-//-------------------------------------------------------------------------------
-RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& other)
-: BreakIterator(other)
-{
-    this->init();
-    *this = other;
-}
-
-
-/**
- * Destructor
- */
-RuleBasedBreakIterator::~RuleBasedBreakIterator() {
-    if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
-        // fCharIter was adopted from the outside.
-        delete fCharIter;
-    }
-    fCharIter = NULL;
-    delete fSCharIter;
-    fCharIter = NULL;
-    delete fDCharIter;
-    fDCharIter = NULL;
-    
-    utext_close(fText);
-
-    if (fData != NULL) {
-        fData->removeReference();
-        fData = NULL;
-    }
-    if (fCachedBreakPositions) {
-        uprv_free(fCachedBreakPositions);
-        fCachedBreakPositions = NULL;
-    }
-    if (fLanguageBreakEngines) {
-        delete fLanguageBreakEngines;
-        fLanguageBreakEngines = NULL;
-    }
-    if (fUnhandledBreakEngine) {
-        delete fUnhandledBreakEngine;
-        fUnhandledBreakEngine = NULL;
-    }
-}
-
-/**
- * Assignment operator.  Sets this iterator to have the same behavior,
- * and iterate over the same text, as the one passed in.
- */
-RuleBasedBreakIterator&
-RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) {
-    if (this == &that) {
-        return *this;
-    }
-    reset();    // Delete break cache information
-    fBreakType = that.fBreakType;
-    if (fLanguageBreakEngines != NULL) {
-        delete fLanguageBreakEngines;
-        fLanguageBreakEngines = NULL;   // Just rebuild for now
-    }
-    // TODO: clone fLanguageBreakEngines from "that"
-    UErrorCode status = U_ZERO_ERROR;
-    fText = utext_clone(fText, that.fText, FALSE, TRUE, &status);
-
-    if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
-        delete fCharIter;
-    }
-    fCharIter = NULL;
-
-    if (that.fCharIter != NULL ) {
-        // This is a little bit tricky - it will intially appear that
-        //  this->fCharIter is adopted, even if that->fCharIter was
-        //  not adopted.  That's ok.
-        fCharIter = that.fCharIter->clone();
-    }
-
-    if (fData != NULL) {
-        fData->removeReference();
-        fData = NULL;
-    }
-    if (that.fData != NULL) {
-        fData = that.fData->addReference();
-    }
-
-    return *this;
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//    init()      Shared initialization routine.   Used by all the constructors.
-//                Initializes all fields, leaving the object in a consistent state.
-//
-//-----------------------------------------------------------------------------
-void RuleBasedBreakIterator::init() {
-    UErrorCode  status    = U_ZERO_ERROR;
-    fBufferClone          = FALSE;
-    fText                 = utext_openUChars(NULL, NULL, 0, &status);
-    fCharIter             = NULL;
-    fSCharIter            = NULL;
-    fDCharIter            = NULL;
-    fData                 = NULL;
-    fLastRuleStatusIndex  = 0;
-    fLastStatusIndexValid = TRUE;
-    fDictionaryCharCount  = 0;
-    fBreakType            = UBRK_WORD;  // Defaulting BreakType to word gives reasonable
-                                        //   dictionary behavior for Break Iterators that are
-                                        //   built from rules.  Even better would be the ability to
-                                        //   declare the type in the rules.
-
-    fCachedBreakPositions    = NULL;
-    fLanguageBreakEngines    = NULL;
-    fUnhandledBreakEngine    = NULL;
-    fNumCachedBreakPositions = 0;
-    fPositionInCache         = 0;
-
-#ifdef RBBI_DEBUG
-    static UBool debugInitDone = FALSE;
-    if (debugInitDone == FALSE) {
-        char *debugEnv = getenv("U_RBBIDEBUG");
-        if (debugEnv && uprv_strstr(debugEnv, "trace")) {
-            fTrace = TRUE;
-        }
-        debugInitDone = TRUE;
-    }
-#endif
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//    clone - Returns a newly-constructed RuleBasedBreakIterator with the same
-//            behavior, and iterating over the same text, as this one.
-//            Virtual function: does the right thing with subclasses.
-//
-//-----------------------------------------------------------------------------
-BreakIterator*
-RuleBasedBreakIterator::clone(void) const {
-    return new RuleBasedBreakIterator(*this);
-}
-
-/**
- * Equality operator.  Returns TRUE if both BreakIterators are of the
- * same class, have the same behavior, and iterate over the same text.
- */
-UBool
-RuleBasedBreakIterator::operator==(const BreakIterator& that) const {
-    if (typeid(*this) != typeid(that)) {
-        return FALSE;
-    }
-
-    const RuleBasedBreakIterator& that2 = (const RuleBasedBreakIterator&) that;
-
-    if (!utext_equals(fText, that2.fText)) {
-        // The two break iterators are operating on different text,
-        //   or have a different interation position.
-        return FALSE;
-    };
-
-    // TODO:  need a check for when in a dictionary region at different offsets.
-
-    if (that2.fData == fData ||
-        (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) {
-            // The two break iterators are using the same rules.
-            return TRUE;
-        }
-    return FALSE;
-}
-
-/**
- * Compute a hash code for this BreakIterator
- * @return A hash code
- */
-int32_t
-RuleBasedBreakIterator::hashCode(void) const {
-    int32_t   hash = 0;
-    if (fData != NULL) {
-        hash = fData->hashCode();
-    }
-    return hash;
-}
-
-
-void RuleBasedBreakIterator::setText(UText *ut, UErrorCode &status) {
-    if (U_FAILURE(status)) {
-        return;
-    }
-    reset();
-    fText = utext_clone(fText, ut, FALSE, TRUE, &status);
-
-    // Set up a dummy CharacterIterator to be returned if anyone
-    //   calls getText().  With input from UText, there is no reasonable
-    //   way to return a characterIterator over the actual input text.
-    //   Return one over an empty string instead - this is the closest
-    //   we can come to signaling a failure.
-    //   (GetText() is obsolete, this failure is sort of OK)
-    if (fDCharIter == NULL) {
-        static const UChar c = 0;
-        fDCharIter = new UCharCharacterIterator(&c, 0);
-        if (fDCharIter == NULL) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    }
-
-    if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
-        // existing fCharIter was adopted from the outside.  Delete it now.
-        delete fCharIter;
-    }
-    fCharIter = fDCharIter;
-
-    this->first();
-}
-
-
-UText *RuleBasedBreakIterator::getUText(UText *fillIn, UErrorCode &status) const {
-    UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status);  
-    return result;
-}
-
-
-
-/**
- * Returns the description used to create this iterator
- */
-const UnicodeString&
-RuleBasedBreakIterator::getRules() const {
-    if (fData != NULL) {
-        return fData->getRuleSourceString();
-    } else {
-        static const UnicodeString *s;
-        if (s == NULL) {
-            // TODO:  something more elegant here.
-            //        perhaps API should return the string by value.
-            //        Note:  thread unsafe init & leak are semi-ok, better than
-            //               what was before.  Sould be cleaned up, though.
-            s = new UnicodeString;
-        }
-        return *s;
-    }
-}
-
-//=======================================================================
-// BreakIterator overrides
-//=======================================================================
-
-/**
- * Return a CharacterIterator over the text being analyzed.  
- */
-CharacterIterator&
-RuleBasedBreakIterator::getText() const {
-    return *fCharIter;
-}
-
-/**
- * Set the iterator to analyze a new piece of text.  This function resets
- * the current iteration position to the beginning of the text.
- * @param newText An iterator over the text to analyze.
- */
-void
-RuleBasedBreakIterator::adoptText(CharacterIterator* newText) {
-    // If we are holding a CharacterIterator adopted from a 
-    //   previous call to this function, delete it now.
-    if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
-        delete fCharIter;
-    }
-
-    fCharIter = newText;
-    UErrorCode status = U_ZERO_ERROR;
-    reset();
-    if (newText==NULL || newText->startIndex() != 0) {   
-        // startIndex !=0 wants to be an error, but there's no way to report it.
-        // Make the iterator text be an empty string.
-        fText = utext_openUChars(fText, NULL, 0, &status);
-    } else {
-        fText = utext_openCharacterIterator(fText, newText, &status);
-    }
-    this->first();
-}
-
-/**
- * Set the iterator to analyze a new piece of text.  This function resets
- * the current iteration position to the beginning of the text.
- * @param newText An iterator over the text to analyze.
- */
-void
-RuleBasedBreakIterator::setText(const UnicodeString& newText) {
-    UErrorCode status = U_ZERO_ERROR;
-    reset();
-    fText = utext_openConstUnicodeString(fText, &newText, &status);
-
-    // Set up a character iterator on the string.  
-    //   Needed in case someone calls getText().
-    //  Can not, unfortunately, do this lazily on the (probably never)
-    //  call to getText(), because getText is const.
-    if (fSCharIter == NULL) {
-        fSCharIter = new StringCharacterIterator(newText);
-    } else {
-        fSCharIter->setText(newText);
-    }
-
-    if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
-        // old fCharIter was adopted from the outside.  Delete it.
-        delete fCharIter;
-    }
-    fCharIter = fSCharIter;
-
-    this->first();
-}
-
-
-/**
- *  Provide a new UText for the input text.  Must reference text with contents identical
- *  to the original.
- *  Intended for use with text data originating in Java (garbage collected) environments
- *  where the data may be moved in memory at arbitrary times.
- */
-RuleBasedBreakIterator &RuleBasedBreakIterator::refreshInputText(UText *input, UErrorCode &status) {
-    if (U_FAILURE(status)) {
-        return *this;
-    }
-    if (input == NULL) {
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-        return *this;
-    }
-    int64_t pos = utext_getNativeIndex(fText);
-    //  Shallow read-only clone of the new UText into the existing input UText
-    fText = utext_clone(fText, input, FALSE, TRUE, &status);
-    if (U_FAILURE(status)) {
-        return *this;
-    }
-    utext_setNativeIndex(fText, pos);
-    if (utext_getNativeIndex(fText) != pos) {
-        // Sanity check.  The new input utext is supposed to have the exact same
-        // contents as the old.  If we can't set to the same position, it doesn't.
-        // The contents underlying the old utext might be invalid at this point,
-        // so it's not safe to check directly.
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-    return *this;
-}
-
-
-/**
- * Sets the current iteration position to the beginning of the text.
- * @return The offset of the beginning of the text.
- */
-int32_t RuleBasedBreakIterator::first(void) {
-    reset();
-    fLastRuleStatusIndex  = 0;
-    fLastStatusIndexValid = TRUE;
-    //if (fText == NULL)
-    //    return BreakIterator::DONE;
-
-    utext_setNativeIndex(fText, 0);
-    return 0;
-}
-
-/**
- * Sets the current iteration position to the end of the text.
- * @return The text's past-the-end offset.
- */
-int32_t RuleBasedBreakIterator::last(void) {
-    reset();
-    if (fText == NULL) {
-        fLastRuleStatusIndex  = 0;
-        fLastStatusIndexValid = TRUE;
-        return BreakIterator::DONE;
-    }
-
-    fLastStatusIndexValid = FALSE;
-    int32_t pos = (int32_t)utext_nativeLength(fText);
-    utext_setNativeIndex(fText, pos);
-    return pos;
-}
-
-/**
- * Advances the iterator either forward or backward the specified number of steps.
- * Negative values move backward, and positive values move forward.  This is
- * equivalent to repeatedly calling next() or previous().
- * @param n The number of steps to move.  The sign indicates the direction
- * (negative is backwards, and positive is forwards).
- * @return The character offset of the boundary position n boundaries away from
- * the current one.
- */
-int32_t RuleBasedBreakIterator::next(int32_t n) {
-    int32_t result = current();
-    while (n > 0) {
-        result = next();
-        --n;
-    }
-    while (n < 0) {
-        result = previous();
-        ++n;
-    }
-    return result;
-}
-
-/**
- * Advances the iterator to the next boundary position.
- * @return The position of the first boundary after this one.
- */
-int32_t RuleBasedBreakIterator::next(void) {
-    // if we have cached break positions and we're still in the range
-    // covered by them, just move one step forward in the cache
-    if (fCachedBreakPositions != NULL) {
-        if (fPositionInCache < fNumCachedBreakPositions - 1) {
-            ++fPositionInCache;
-            int32_t pos = fCachedBreakPositions[fPositionInCache];
-            utext_setNativeIndex(fText, pos);
-            return pos;
-        }
-        else {
-            reset();
-        }
-    }
-
-    int32_t startPos = current();
-    int32_t result = handleNext(fData->fForwardTable);
-    if (fDictionaryCharCount > 0) {
-        result = checkDictionary(startPos, result, FALSE);
-    }
-    return result;
-}
-
-/**
- * Advances the iterator backwards, to the last boundary preceding this one.
- * @return The position of the last boundary position preceding this one.
- */
-int32_t RuleBasedBreakIterator::previous(void) {
-    int32_t result;
-    int32_t startPos;
-
-    // if we have cached break positions and we're still in the range
-    // covered by them, just move one step backward in the cache
-    if (fCachedBreakPositions != NULL) {
-        if (fPositionInCache > 0) {
-            --fPositionInCache;
-            // If we're at the beginning of the cache, need to reevaluate the
-            // rule status
-            if (fPositionInCache <= 0) {
-                fLastStatusIndexValid = FALSE;
-            }
-            int32_t pos = fCachedBreakPositions[fPositionInCache];
-            utext_setNativeIndex(fText, pos);
-            return pos;
-        }
-        else {
-            reset();
-        }
-    }
-
-    // if we're already sitting at the beginning of the text, return DONE
-    if (fText == NULL || (startPos = current()) == 0) {
-        fLastRuleStatusIndex  = 0;
-        fLastStatusIndexValid = TRUE;
-        return BreakIterator::DONE;
-    }
-
-    if (fData->fSafeRevTable != NULL || fData->fSafeFwdTable != NULL) {
-        result = handlePrevious(fData->fReverseTable);
-        if (fDictionaryCharCount > 0) {
-            result = checkDictionary(result, startPos, TRUE);
-        }
-        return result;
-    }
-
-    // old rule syntax
-    // set things up.  handlePrevious() will back us up to some valid
-    // break position before the current position (we back our internal
-    // iterator up one step to prevent handlePrevious() from returning
-    // the current position), but not necessarily the last one before
-
-    // where we started
-
-    int32_t start = current();
-
-    (void)UTEXT_PREVIOUS32(fText);
-    int32_t lastResult    = handlePrevious(fData->fReverseTable);
-    if (lastResult == UBRK_DONE) {
-        lastResult = 0;
-        utext_setNativeIndex(fText, 0);
-    }
-    result = lastResult;
-    int32_t lastTag       = 0;
-    UBool   breakTagValid = FALSE;
-
-    // iterate forward from the known break position until we pass our
-    // starting point.  The last break position before the starting
-    // point is our return value
-
-    for (;;) {
-        result         = next();
-        if (result == BreakIterator::DONE || result >= start) {
-            break;
-        }
-        lastResult     = result;
-        lastTag        = fLastRuleStatusIndex;
-        breakTagValid  = TRUE;
-    }
-
-    // fLastBreakTag wants to have the value for section of text preceding
-    // the result position that we are to return (in lastResult.)  If
-    // the backwards rules overshot and the above loop had to do two or more
-    // next()s to move up to the desired return position, we will have a valid
-    // tag value. But, if handlePrevious() took us to exactly the correct result positon,
-    // we wont have a tag value for that position, which is only set by handleNext().
-
-    // set the current iteration position to be the last break position
-    // before where we started, and then return that value
-    utext_setNativeIndex(fText, lastResult);
-    fLastRuleStatusIndex  = lastTag;       // for use by getRuleStatus()
-    fLastStatusIndexValid = breakTagValid;
-
-    // No need to check the dictionary; it will have been handled by
-    // next()
-
-    return lastResult;
-}
-
-/**
- * Sets the iterator to refer to the first boundary position following
- * the specified position.
- * @offset The position from which to begin searching for a break position.
- * @return The position of the first break after the current position.
- */
-int32_t RuleBasedBreakIterator::following(int32_t offset) {
-    // if we have cached break positions and offset is in the range
-    // covered by them, use them
-    // TODO: could use binary search
-    // TODO: what if offset is outside range, but break is not?
-    if (fCachedBreakPositions != NULL) {
-        if (offset >= fCachedBreakPositions[0]
-                && offset < fCachedBreakPositions[fNumCachedBreakPositions - 1]) {
-            fPositionInCache = 0;
-            // We are guaranteed not to leave the array due to range test above
-            while (offset >= fCachedBreakPositions[fPositionInCache]) {
-                ++fPositionInCache;
-            }
-            int32_t pos = fCachedBreakPositions[fPositionInCache];
-            utext_setNativeIndex(fText, pos);
-            return pos;
-        }
-        else {
-            reset();
-        }
-    }
-
-    // if the offset passed in is already past the end of the text,
-    // just return DONE; if it's before the beginning, return the
-    // text's starting offset
-    fLastRuleStatusIndex  = 0;
-    fLastStatusIndexValid = TRUE;
-    if (fText == NULL || offset >= utext_nativeLength(fText)) {
-        last();
-        return next();
-    }
-    else if (offset < 0) {
-        return first();
-    }
-
-    // otherwise, set our internal iteration position (temporarily)
-    // to the position passed in.  If this is the _beginning_ position,
-    // then we can just use next() to get our return value
-
-    int32_t result = 0;
-
-    if (fData->fSafeRevTable != NULL) {
-        // new rule syntax
-        utext_setNativeIndex(fText, offset);
-        // move forward one codepoint to prepare for moving back to a
-        // safe point.
-        // this handles offset being between a supplementary character
-        (void)UTEXT_NEXT32(fText);
-        // handlePrevious will move most of the time to < 1 boundary away
-        handlePrevious(fData->fSafeRevTable);
-        int32_t result = next();
-        while (result <= offset) {
-            result = next();
-        }
-        return result;
-    }
-    if (fData->fSafeFwdTable != NULL) {
-        // backup plan if forward safe table is not available
-        utext_setNativeIndex(fText, offset);
-        (void)UTEXT_PREVIOUS32(fText);
-        // handle next will give result >= offset
-        handleNext(fData->fSafeFwdTable);
-        // previous will give result 0 or 1 boundary away from offset,
-        // most of the time
-        // we have to
-        int32_t oldresult = previous();
-        while (oldresult > offset) {
-            int32_t result = previous();
-            if (result <= offset) {
-                return oldresult;
-            }
-            oldresult = result;
-        }
-        int32_t result = next();
-        if (result <= offset) {
-            return next();
-        }
-        return result;
-    }
-    // otherwise, we have to sync up first.  Use handlePrevious() to back
-    // up to a known break position before the specified position (if
-    // we can determine that the specified position is a break position,
-    // we don't back up at all).  This may or may not be the last break
-    // position at or before our starting position.  Advance forward
-    // from here until we've passed the starting position.  The position
-    // we stop on will be the first break position after the specified one.
-    // old rule syntax
-
-    utext_setNativeIndex(fText, offset);
-    if (offset==0 || 
-        (offset==1  && utext_getNativeIndex(fText)==0)) {
-        return next();
-    }
-    result = previous();
-
-    while (result != BreakIterator::DONE && result <= offset) {
-        result = next();
-    }
-
-    return result;
-}
-
-/**
- * Sets the iterator to refer to the last boundary position before the
- * specified position.
- * @offset The position to begin searching for a break from.
- * @return The position of the last boundary before the starting position.
- */
-int32_t RuleBasedBreakIterator::preceding(int32_t offset) {
-    // if we have cached break positions and offset is in the range
-    // covered by them, use them
-    if (fCachedBreakPositions != NULL) {
-        // TODO: binary search?
-        // TODO: What if offset is outside range, but break is not?
-        if (offset > fCachedBreakPositions[0]
-                && offset <= fCachedBreakPositions[fNumCachedBreakPositions - 1]) {
-            fPositionInCache = 0;
-            while (fPositionInCache < fNumCachedBreakPositions
-                   && offset > fCachedBreakPositions[fPositionInCache])
-                ++fPositionInCache;
-            --fPositionInCache;
-            // If we're at the beginning of the cache, need to reevaluate the
-            // rule status
-            if (fPositionInCache <= 0) {
-                fLastStatusIndexValid = FALSE;
-            }
-            utext_setNativeIndex(fText, fCachedBreakPositions[fPositionInCache]);
-            return fCachedBreakPositions[fPositionInCache];
-        }
-        else {
-            reset();
-        }
-    }
-
-    // if the offset passed in is already past the end of the text,
-    // just return DONE; if it's before the beginning, return the
-    // text's starting offset
-    if (fText == NULL || offset > utext_nativeLength(fText)) {
-        // return BreakIterator::DONE;
-        return last();
-    }
-    else if (offset < 0) {
-        return first();
-    }
-
-    // if we start by updating the current iteration position to the
-    // position specified by the caller, we can just use previous()
-    // to carry out this operation
-
-    if (fData->fSafeFwdTable != NULL) {
-        // new rule syntax
-        utext_setNativeIndex(fText, offset);
-        int32_t newOffset = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        if (newOffset != offset) {
-            // Will come here if specified offset was not a code point boundary AND
-            //   the underlying implmentation is using UText, which snaps any non-code-point-boundary
-            //   indices to the containing code point.
-            // For breakitereator::preceding only, these non-code-point indices need to be moved
-            //   up to refer to the following codepoint.
-            (void)UTEXT_NEXT32(fText);
-            offset = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        }
-
-        // TODO:  (synwee) would it be better to just check for being in the middle of a surrogate pair,
-        //        rather than adjusting the position unconditionally?
-        //        (Change would interact with safe rules.)
-        // TODO:  change RBBI behavior for off-boundary indices to match that of UText?
-        //        affects only preceding(), seems cleaner, but is slightly different.
-        (void)UTEXT_PREVIOUS32(fText);
-        handleNext(fData->fSafeFwdTable);
-        int32_t result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        while (result >= offset) {
-            result = previous();
-        }
-        return result;
-    }
-    if (fData->fSafeRevTable != NULL) {
-        // backup plan if forward safe table is not available
-        //  TODO:  check whether this path can be discarded
-        //         It's probably OK to say that rules must supply both safe tables
-        //            if they use safe tables at all.  We have certainly never described
-        //            to anyone how to work with just one safe table.
-        utext_setNativeIndex(fText, offset);
-        (void)UTEXT_NEXT32(fText);
-        
-        // handle previous will give result <= offset
-        handlePrevious(fData->fSafeRevTable);
-
-        // next will give result 0 or 1 boundary away from offset,
-        // most of the time
-        // we have to
-        int32_t oldresult = next();
-        while (oldresult < offset) {
-            int32_t result = next();
-            if (result >= offset) {
-                return oldresult;
-            }
-            oldresult = result;
-        }
-        int32_t result = previous();
-        if (result >= offset) {
-            return previous();
-        }
-        return result;
-    }
-
-    // old rule syntax
-    utext_setNativeIndex(fText, offset);
-    return previous();
-}
-
-/**
- * Returns true if the specfied position is a boundary position.  As a side
- * effect, leaves the iterator pointing to the first boundary position at
- * or after "offset".
- * @param offset the offset to check.
- * @return True if "offset" is a boundary position.
- */
-UBool RuleBasedBreakIterator::isBoundary(int32_t offset) {
-    // the beginning index of the iterator is always a boundary position by definition
-    if (offset == 0) {
-        first();       // For side effects on current position, tag values.
-        return TRUE;
-    }
-
-    if (offset == (int32_t)utext_nativeLength(fText)) {
-        last();       // For side effects on current position, tag values.
-        return TRUE;
-    }
-
-    // out-of-range indexes are never boundary positions
-    if (offset < 0) {
-        first();       // For side effects on current position, tag values.
-        return FALSE;
-    }
-
-    if (offset > utext_nativeLength(fText)) {
-        last();        // For side effects on current position, tag values.
-        return FALSE;
-    }
-
-    // otherwise, we can use following() on the position before the specified
-    // one and return true if the position we get back is the one the user
-    // specified
-    utext_previous32From(fText, offset);
-    int32_t backOne = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    UBool    result  = following(backOne) == offset;
-    return result;
-}
-
-/**
- * Returns the current iteration position.
- * @return The current iteration position.
- */
-int32_t RuleBasedBreakIterator::current(void) const {
-    int32_t  pos = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    return pos;
-}
- 
-//=======================================================================
-// implementation
-//=======================================================================
-
-//
-// RBBIRunMode  -  the state machine runs an extra iteration at the beginning and end
-//                 of user text.  A variable with this enum type keeps track of where we
-//                 are.  The state machine only fetches user input while in the RUN mode.
-//
-enum RBBIRunMode {
-    RBBI_START,     // state machine processing is before first char of input
-    RBBI_RUN,       // state machine processing is in the user text
-    RBBI_END        // state machine processing is after end of user text.
-};
-
-
-//-----------------------------------------------------------------------------------
-//
-//  handleNext(stateTable)
-//     This method is the actual implementation of the rbbi next() method. 
-//     This method initializes the state machine to state 1
-//     and advances through the text character by character until we reach the end
-//     of the text or the state machine transitions to state 0.  We update our return
-//     value every time the state machine passes through an accepting state.
-//
-//-----------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) {
-    int32_t             state;
-    uint16_t            category        = 0;
-    RBBIRunMode         mode;
-    
-    RBBIStateTableRow  *row;
-    UChar32             c;
-    int32_t             lookaheadStatus = 0;
-    int32_t             lookaheadTagIdx = 0;
-    int32_t             result          = 0;
-    int32_t             initialPosition = 0;
-    int32_t             lookaheadResult = 0;
-    UBool               lookAheadHardBreak = (statetable->fFlags & RBBI_LOOKAHEAD_HARD_BREAK) != 0;
-    const char         *tableData       = statetable->fTableData;
-    uint32_t            tableRowLen     = statetable->fRowLen;
-
-    #ifdef RBBI_DEBUG
-        if (fTrace) {
-            RBBIDebugPuts("Handle Next   pos   char  state category");
-        }
-    #endif
-
-    // No matter what, handleNext alway correctly sets the break tag value.
-    fLastStatusIndexValid = TRUE;
-    fLastRuleStatusIndex = 0;
-
-    // if we're already at the end of the text, return DONE.
-    initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); 
-    result          = initialPosition;
-    c               = UTEXT_NEXT32(fText);
-    if (fData == NULL || c==U_SENTINEL) {
-        return BreakIterator::DONE;
-    }
-
-    //  Set the initial state for the state machine
-    state = START_STATE;
-    row = (RBBIStateTableRow *)
-            //(statetable->fTableData + (statetable->fRowLen * state));
-            (tableData + tableRowLen * state);
-            
-    
-    mode     = RBBI_RUN;
-    if (statetable->fFlags & RBBI_BOF_REQUIRED) {
-        category = 2;
-        mode     = RBBI_START;
-    }
-
-
-    // loop until we reach the end of the text or transition to state 0
-    //
-    for (;;) {
-        if (c == U_SENTINEL) {
-            // Reached end of input string.
-            if (mode == RBBI_END) {
-                // We have already run the loop one last time with the 
-                //   character set to the psueudo {eof} value.  Now it is time
-                //   to unconditionally bail out.
-                if (lookaheadResult > result) {
-                    // We ran off the end of the string with a pending look-ahead match.
-                    // Treat this as if the look-ahead condition had been met, and return
-                    //  the match at the / position from the look-ahead rule.
-                    result               = lookaheadResult;
-                    fLastRuleStatusIndex = lookaheadTagIdx;
-                    lookaheadStatus = 0;
-                } 
-                break;
-            }
-            // Run the loop one last time with the fake end-of-input character category.
-            mode = RBBI_END;
-            category = 1;
-        }
-
-        //
-        // Get the char category.  An incoming category of 1 or 2 means that
-        //      we are preset for doing the beginning or end of input, and
-        //      that we shouldn't get a category from an actual text input character.
-        //
-        if (mode == RBBI_RUN) {
-            // look up the current character's character category, which tells us
-            // which column in the state table to look at.
-            // Note:  the 16 in UTRIE_GET16 refers to the size of the data being returned,
-            //        not the size of the character going in, which is a UChar32.
-            //
-            UTRIE_GET16(&fData->fTrie, c, category);
-
-            // Check the dictionary bit in the character's category.
-            //    Counter is only used by dictionary based iterators (subclasses).
-            //    Chars that need to be handled by a dictionary have a flag bit set
-            //    in their category values.
-            //
-            if ((category & 0x4000) != 0)  {
-                fDictionaryCharCount++;
-                //  And off the dictionary flag bit.
-                category &= ~0x4000;
-            }
-        }
-
-       #ifdef RBBI_DEBUG
-            if (fTrace) {
-                RBBIDebugPrintf("             %4ld   ", utext_getNativeIndex(fText));
-                if (0x20<=c && c<0x7f) {
-                    RBBIDebugPrintf("\"%c\"  ", c);
-                } else {
-                    RBBIDebugPrintf("%5x  ", c);
-                }
-                RBBIDebugPrintf("%3d  %3d\n", state, category);
-            }
-        #endif
-
-        // State Transition - move machine to its next state
-        //
-
-        // Note: fNextState is defined as uint16_t[2], but we are casting
-        // a generated RBBI table to RBBIStateTableRow and some tables
-        // actually have more than 2 categories.
-        U_ASSERT(category<fData->fHeader->fCatCount);
-        state = row->fNextState[category];  /*Not accessing beyond memory*/
-        row = (RBBIStateTableRow *)
-            // (statetable->fTableData + (statetable->fRowLen * state));
-            (tableData + tableRowLen * state);
-
-
-        if (row->fAccepting == -1) {
-            // Match found, common case.
-            if (mode != RBBI_START) {
-                result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-            }
-            fLastRuleStatusIndex = row->fTagIdx;   // Remember the break status (tag) values.
-        }
-
-        if (row->fLookAhead != 0) {
-            if (lookaheadStatus != 0
-                && row->fAccepting == lookaheadStatus) {
-                // Lookahead match is completed.  
-                result               = lookaheadResult;
-                fLastRuleStatusIndex = lookaheadTagIdx;
-                lookaheadStatus      = 0;
-                // TODO:  make a standalone hard break in a rule work.
-                if (lookAheadHardBreak) {
-                    UTEXT_SETNATIVEINDEX(fText, result);
-                    return result;
-                }
-                // Look-ahead completed, but other rules may match further.  Continue on
-                //  TODO:  junk this feature?  I don't think it's used anywhwere.
-                goto continueOn;
-            }
-
-            int32_t  r = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-            lookaheadResult = r;
-            lookaheadStatus = row->fLookAhead;
-            lookaheadTagIdx = row->fTagIdx;
-            goto continueOn;
-        }
-
-
-        if (row->fAccepting != 0) {
-            // Because this is an accepting state, any in-progress look-ahead match
-            //   is no longer relavant.  Clear out the pending lookahead status.
-            lookaheadStatus = 0;           // clear out any pending look-ahead match.
-        }
-
-continueOn:
-        if (state == STOP_STATE) {
-            // This is the normal exit from the lookup state machine.
-            // We have advanced through the string until it is certain that no
-            //   longer match is possible, no matter what characters follow.
-            break;
-        }
-        
-        // Advance to the next character.  
-        // If this is a beginning-of-input loop iteration, don't advance
-        //    the input position.  The next iteration will be processing the
-        //    first real input character.
-        if (mode == RBBI_RUN) {
-            c = UTEXT_NEXT32(fText);
-        } else {
-            if (mode == RBBI_START) {
-                mode = RBBI_RUN;
-            }
-        }
-
-
-    }
-
-    // The state machine is done.  Check whether it found a match...
-
-    // If the iterator failed to advance in the match engine, force it ahead by one.
-    //   (This really indicates a defect in the break rules.  They should always match
-    //    at least one character.)
-    if (result == initialPosition) {
-        UTEXT_SETNATIVEINDEX(fText, initialPosition);
-        UTEXT_NEXT32(fText);
-        result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    }
-
-    // Leave the iterator at our result position.
-    UTEXT_SETNATIVEINDEX(fText, result);
-    #ifdef RBBI_DEBUG
-        if (fTrace) {
-            RBBIDebugPrintf("result = %d\n\n", result);
-        }
-    #endif
-    return result;
-}
-
-
-
-//-----------------------------------------------------------------------------------
-//
-//  handlePrevious()
-//
-//      Iterate backwards, according to the logic of the reverse rules.
-//      This version handles the exact style backwards rules.
-//
-//      The logic of this function is very similar to handleNext(), above.
-//
-//-----------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) {
-    int32_t             state;
-    uint16_t            category        = 0;
-    RBBIRunMode         mode;
-    RBBIStateTableRow  *row;
-    UChar32             c;
-    int32_t             lookaheadStatus = 0;
-    int32_t             result          = 0;
-    int32_t             initialPosition = 0;
-    int32_t             lookaheadResult = 0;
-    UBool               lookAheadHardBreak = (statetable->fFlags & RBBI_LOOKAHEAD_HARD_BREAK) != 0;
-
-    #ifdef RBBI_DEBUG
-        if (fTrace) {
-            RBBIDebugPuts("Handle Previous   pos   char  state category");
-        }
-    #endif
-
-    // handlePrevious() never gets the rule status.
-    // Flag the status as invalid; if the user ever asks for status, we will need
-    // to back up, then re-find the break position using handleNext(), which does
-    // get the status value.
-    fLastStatusIndexValid = FALSE;
-    fLastRuleStatusIndex = 0;
-
-    // if we're already at the start of the text, return DONE.
-    if (fText == NULL || fData == NULL || UTEXT_GETNATIVEINDEX(fText)==0) {
-        return BreakIterator::DONE;
-    }
-
-    //  Set up the starting char.
-    initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    result          = initialPosition;
-    c               = UTEXT_PREVIOUS32(fText);
-
-    //  Set the initial state for the state machine
-    state = START_STATE;
-    row = (RBBIStateTableRow *)
-            (statetable->fTableData + (statetable->fRowLen * state));
-    category = 3;
-    mode     = RBBI_RUN;
-    if (statetable->fFlags & RBBI_BOF_REQUIRED) {
-        category = 2;
-        mode     = RBBI_START;
-    }
-
-
-    // loop until we reach the start of the text or transition to state 0
-    //
-    for (;;) {
-        if (c == U_SENTINEL) {
-            // Reached end of input string.
-            if (mode == RBBI_END) {
-                // We have already run the loop one last time with the 
-                //   character set to the psueudo {eof} value.  Now it is time
-                //   to unconditionally bail out.
-                if (lookaheadResult < result) {
-                    // We ran off the end of the string with a pending look-ahead match.
-                    // Treat this as if the look-ahead condition had been met, and return
-                    //  the match at the / position from the look-ahead rule.
-                    result               = lookaheadResult;
-                    lookaheadStatus = 0;
-                } else if (result == initialPosition) {
-                    // Ran off start, no match found.
-                    // move one index one (towards the start, since we are doing a previous())
-                    UTEXT_SETNATIVEINDEX(fText, initialPosition);
-                    (void)UTEXT_PREVIOUS32(fText);   // TODO:  shouldn't be necessary.  We're already at beginning.  Check.
-                }
-                break;
-            }
-            // Run the loop one last time with the fake end-of-input character category.
-            mode = RBBI_END;
-            category = 1;
-        }
-
-        //
-        // Get the char category.  An incoming category of 1 or 2 means that
-        //      we are preset for doing the beginning or end of input, and
-        //      that we shouldn't get a category from an actual text input character.
-        //
-        if (mode == RBBI_RUN) {
-            // look up the current character's character category, which tells us
-            // which column in the state table to look at.
-            // Note:  the 16 in UTRIE_GET16 refers to the size of the data being returned,
-            //        not the size of the character going in, which is a UChar32.
-            //
-            UTRIE_GET16(&fData->fTrie, c, category);
-
-            // Check the dictionary bit in the character's category.
-            //    Counter is only used by dictionary based iterators (subclasses).
-            //    Chars that need to be handled by a dictionary have a flag bit set
-            //    in their category values.
-            //
-            if ((category & 0x4000) != 0)  {
-                fDictionaryCharCount++;
-                //  And off the dictionary flag bit.
-                category &= ~0x4000;
-            }
-        }
-
-        #ifdef RBBI_DEBUG
-            if (fTrace) {
-                RBBIDebugPrintf("             %4d   ", (int32_t)utext_getNativeIndex(fText));
-                if (0x20<=c && c<0x7f) {
-                    RBBIDebugPrintf("\"%c\"  ", c);
-                } else {
-                    RBBIDebugPrintf("%5x  ", c);
-                }
-                RBBIDebugPrintf("%3d  %3d\n", state, category);
-            }
-        #endif
-
-        // State Transition - move machine to its next state
-        //
-
-        // Note: fNextState is defined as uint16_t[2], but we are casting
-        // a generated RBBI table to RBBIStateTableRow and some tables
-        // actually have more than 2 categories.
-        U_ASSERT(category<fData->fHeader->fCatCount);
-        state = row->fNextState[category];  /*Not accessing beyond memory*/
-        row = (RBBIStateTableRow *)
-            (statetable->fTableData + (statetable->fRowLen * state));
-
-        if (row->fAccepting == -1) {
-            // Match found, common case.
-            result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        }
-
-        if (row->fLookAhead != 0) {
-            if (lookaheadStatus != 0
-                && row->fAccepting == lookaheadStatus) {
-                // Lookahead match is completed.  
-                result               = lookaheadResult;
-                lookaheadStatus      = 0;
-                // TODO:  make a standalone hard break in a rule work.
-                if (lookAheadHardBreak) {
-                    UTEXT_SETNATIVEINDEX(fText, result);
-                    return result;
-                }
-                // Look-ahead completed, but other rules may match further.  Continue on
-                //  TODO:  junk this feature?  I don't think it's used anywhwere.
-                goto continueOn;
-            }
-
-            int32_t  r = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-            lookaheadResult = r;
-            lookaheadStatus = row->fLookAhead;
-            goto continueOn;
-        }
-
-
-        if (row->fAccepting != 0) {
-            // Because this is an accepting state, any in-progress look-ahead match
-            //   is no longer relavant.  Clear out the pending lookahead status.
-            lookaheadStatus = 0;    
-        }
-
-continueOn:
-        if (state == STOP_STATE) {
-            // This is the normal exit from the lookup state machine.
-            // We have advanced through the string until it is certain that no
-            //   longer match is possible, no matter what characters follow.
-            break;
-        }
-
-        // Move (backwards) to the next character to process.  
-        // If this is a beginning-of-input loop iteration, don't advance
-        //    the input position.  The next iteration will be processing the
-        //    first real input character.
-        if (mode == RBBI_RUN) {
-            c = UTEXT_PREVIOUS32(fText);
-        } else {            
-            if (mode == RBBI_START) {
-                mode = RBBI_RUN;
-            }
-        }
-    }
-
-    // The state machine is done.  Check whether it found a match...
-
-    // If the iterator failed to advance in the match engine, force it ahead by one.
-    //   (This really indicates a defect in the break rules.  They should always match
-    //    at least one character.)
-    if (result == initialPosition) {
-        UTEXT_SETNATIVEINDEX(fText, initialPosition);
-        UTEXT_PREVIOUS32(fText);
-        result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    }
-
-    // Leave the iterator at our result position.
-    UTEXT_SETNATIVEINDEX(fText, result);
-    #ifdef RBBI_DEBUG
-        if (fTrace) {
-            RBBIDebugPrintf("result = %d\n\n", result);
-        }
-    #endif
-    return result;
-}
-
-
-void
-RuleBasedBreakIterator::reset()
-{
-    if (fCachedBreakPositions) {
-        uprv_free(fCachedBreakPositions);
-    }
-    fCachedBreakPositions = NULL;
-    fNumCachedBreakPositions = 0;
-    fDictionaryCharCount = 0;
-    fPositionInCache = 0;
-}
-
-
-
-//-------------------------------------------------------------------------------
-//
-//   getRuleStatus()   Return the break rule tag associated with the current
-//                     iterator position.  If the iterator arrived at its current
-//                     position by iterating forwards, the value will have been
-//                     cached by the handleNext() function.
-//
-//                     If no cached status value is available, the status is
-//                     found by doing a previous() followed by a next(), which
-//                     leaves the iterator where it started, and computes the
-//                     status while doing the next().
-//
-//-------------------------------------------------------------------------------
-void RuleBasedBreakIterator::makeRuleStatusValid() {
-    if (fLastStatusIndexValid == FALSE) {
-        //  No cached status is available.
-        if (fText == NULL || current() == 0) {
-            //  At start of text, or there is no text.  Status is always zero.
-            fLastRuleStatusIndex = 0;
-            fLastStatusIndexValid = TRUE;
-        } else {
-            //  Not at start of text.  Find status the tedious way.
-            int32_t pa = current();
-            previous();
-            if (fNumCachedBreakPositions > 0) {
-                reset();                // Blow off the dictionary cache
-            }
-            int32_t pb = next();
-            if (pa != pb) {
-                // note: the if (pa != pb) test is here only to eliminate warnings for
-                //       unused local variables on gcc.  Logically, it isn't needed.
-                U_ASSERT(pa == pb);
-            }
-        }
-    }
-    U_ASSERT(fLastRuleStatusIndex >= 0  &&  fLastRuleStatusIndex < fData->fStatusMaxIdx);
-}
-
-
-int32_t  RuleBasedBreakIterator::getRuleStatus() const {
-    RuleBasedBreakIterator *nonConstThis  = (RuleBasedBreakIterator *)this;
-    nonConstThis->makeRuleStatusValid();
-
-    // fLastRuleStatusIndex indexes to the start of the appropriate status record
-    //                                                 (the number of status values.)
-    //   This function returns the last (largest) of the array of status values.
-    int32_t  idx = fLastRuleStatusIndex + fData->fRuleStatusTable[fLastRuleStatusIndex];
-    int32_t  tagVal = fData->fRuleStatusTable[idx];
-
-    return tagVal;
-}
-
-
-
-
-int32_t RuleBasedBreakIterator::getRuleStatusVec(
-             int32_t *fillInVec, int32_t capacity, UErrorCode &status)
-{
-    if (U_FAILURE(status)) {
-        return 0;
-    }
-
-    RuleBasedBreakIterator *nonConstThis  = (RuleBasedBreakIterator *)this;
-    nonConstThis->makeRuleStatusValid();
-    int32_t  numVals = fData->fRuleStatusTable[fLastRuleStatusIndex];
-    int32_t  numValsToCopy = numVals;
-    if (numVals > capacity) {
-        status = U_BUFFER_OVERFLOW_ERROR;
-        numValsToCopy = capacity;
-    }
-    int i;
-    for (i=0; i<numValsToCopy; i++) {
-        fillInVec[i] = fData->fRuleStatusTable[fLastRuleStatusIndex + i + 1];
-    }
-    return numVals;
-}
-
-
-
-//-------------------------------------------------------------------------------
-//
-//   getBinaryRules        Access to the compiled form of the rules,
-//                         for use by build system tools that save the data
-//                         for standard iterator types.
-//
-//-------------------------------------------------------------------------------
-const uint8_t  *RuleBasedBreakIterator::getBinaryRules(uint32_t &length) {
-    const uint8_t  *retPtr = NULL;
-    length = 0;
-
-    if (fData != NULL) {
-        retPtr = (const uint8_t *)fData->fHeader;
-        length = fData->fHeader->fLength;
-    }
-    return retPtr;
-}
-
-
-
-
-//-------------------------------------------------------------------------------
-//
-//  BufferClone       TODO:  In my (Andy) opinion, this function should be deprecated.
-//                    Saving one heap allocation isn't worth the trouble.
-//                    Cloning shouldn't be done in tight loops, and
-//                    making the clone copy involves other heap operations anyway.
-//                    And the application code for correctly dealing with buffer
-//                    size problems and the eventual object destruction is ugly.
-//
-//-------------------------------------------------------------------------------
-BreakIterator *  RuleBasedBreakIterator::createBufferClone(void *stackBuffer,
-                                   int32_t &bufferSize,
-                                   UErrorCode &status)
-{
-    if (U_FAILURE(status)){
-        return NULL;
-    }
-
-    //
-    //  If user buffer size is zero this is a preflight operation to
-    //    obtain the needed buffer size, allowing for worst case misalignment.
-    //
-    if (bufferSize == 0) {
-        bufferSize = sizeof(RuleBasedBreakIterator) + U_ALIGNMENT_OFFSET_UP(0);
-        return NULL;
-    }
-
-
-    //
-    //  Check the alignment and size of the user supplied buffer.
-    //  Allocate heap memory if the user supplied memory is insufficient.
-    //
-    char    *buf   = (char *)stackBuffer;
-    uint32_t s      = bufferSize;
-
-    if (stackBuffer == NULL) {
-        s = 0;   // Ignore size, force allocation if user didn't give us a buffer.
-    }
-    if (U_ALIGNMENT_OFFSET(stackBuffer) != 0) {
-        uint32_t offsetUp = (uint32_t)U_ALIGNMENT_OFFSET_UP(buf);
-        s   -= offsetUp;
-        buf += offsetUp;
-    }
-    if (s < sizeof(RuleBasedBreakIterator)) {
-        // Not enough room in the caller-supplied buffer.
-        // Do a plain-vanilla heap based clone and return that, along with
-        //   a warning that the clone was allocated.
-        RuleBasedBreakIterator *clonedBI = new RuleBasedBreakIterator(*this);
-        if (clonedBI == 0) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-        } else {
-            status = U_SAFECLONE_ALLOCATED_WARNING;
-        }
-        return clonedBI;
-    }
-
-    //
-    //  Clone the source BI into the caller-supplied buffer.
-    //
-    RuleBasedBreakIterator *clone = new(buf) RuleBasedBreakIterator(*this);
-    clone->fBufferClone = TRUE;   // Flag to prevent deleting storage on close (From C code)
-
-    return clone;
-}
-
-
-//-------------------------------------------------------------------------------
-//
-//  isDictionaryChar      Return true if the category lookup for this char
-//                        indicates that it is in the set of dictionary lookup
-//                        chars.
-//
-//                        This function is intended for use by dictionary based
-//                        break iterators.
-//
-//-------------------------------------------------------------------------------
-/*UBool RuleBasedBreakIterator::isDictionaryChar(UChar32   c) {
-    if (fData == NULL) {
-        return FALSE;
-    }
-    uint16_t category;
-    UTRIE_GET16(&fData->fTrie, c, category);
-    return (category & 0x4000) != 0;
-}*/
-
-
-//-------------------------------------------------------------------------------
-//
-//  checkDictionary       This function handles all processing of characters in
-//                        the "dictionary" set. It will determine the appropriate
-//                        course of action, and possibly set up a cache in the
-//                        process.
-//
-//-------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos,
-                            int32_t endPos,
-                            UBool reverse) {
-    // Reset the old break cache first.
-    reset();
-
-    // note: code segment below assumes that dictionary chars are in the 
-    // startPos-endPos range
-    // value returned should be next character in sequence
-    if ((endPos - startPos) <= 1) {
-        return (reverse ? startPos : endPos);
-    }
-    
-    // Bug 5532.  The dictionary code will crash if the input text is UTF-8
-    //      because native indexes are different from UTF-16 indexes.
-    //      Temporary hack: skip dictionary lookup for UTF-8 encoded text.
-    //      It wont give the right breaks, but it's better than a crash.
-    //
-    //      Check the type of the UText by checking its pFuncs field, which
-    //      is UText's function dispatch table.  It will be the same for all
-    //      UTF-8 UTexts and different for any other UText type.
-    //
-    //      We have no other type of UText available with non-UTF-16 native indexing.
-    //      This whole check will go away once the dictionary code is fixed.
-    static const void *utext_utf8Funcs;
-    if (utext_utf8Funcs == NULL) {
-        // Cache the UTF-8 UText function pointer value.
-        UErrorCode status = U_ZERO_ERROR;
-        UText tempUText = UTEXT_INITIALIZER; 
-        utext_openUTF8(&tempUText, NULL, 0, &status);
-        utext_utf8Funcs = tempUText.pFuncs;
-        utext_close(&tempUText);
-    }
-    if (fText->pFuncs == utext_utf8Funcs) {
-        return (reverse ? startPos : endPos);
-    }
-
-    // Starting from the starting point, scan towards the proposed result,
-    // looking for the first dictionary character (which may be the one
-    // we're on, if we're starting in the middle of a range).
-    utext_setNativeIndex(fText, reverse ? endPos : startPos);
-    if (reverse) {
-        UTEXT_PREVIOUS32(fText);
-    }
-    
-    int32_t rangeStart = startPos;
-    int32_t rangeEnd = endPos;
-
-    uint16_t    category;
-    int32_t     current;
-    UErrorCode  status = U_ZERO_ERROR;
-    UStack      breaks(status);
-    int32_t     foundBreakCount = 0;
-    UChar32     c = utext_current32(fText);
-
-    UTRIE_GET16(&fData->fTrie, c, category);
-    
-    // Is the character we're starting on a dictionary character? If so, we
-    // need to back up to include the entire run; otherwise the results of
-    // the break algorithm will differ depending on where we start. Since
-    // the result is cached and there is typically a non-dictionary break
-    // within a small number of words, there should be little performance impact.
-    if (category & 0x4000) {
-        if (reverse) {
-            do {
-                utext_next32(fText);          // TODO:  recast to work directly with postincrement.
-                c = utext_current32(fText);
-                UTRIE_GET16(&fData->fTrie, c, category);
-            } while (c != U_SENTINEL && (category & 0x4000));
-            // Back up to the last dictionary character
-            rangeEnd = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-            if (c == U_SENTINEL) {
-                // c = fText->last32();
-                //   TODO:  why was this if needed?
-                c = UTEXT_PREVIOUS32(fText);
-            }
-            else {
-                c = UTEXT_PREVIOUS32(fText);
-            }
-        }
-        else {
-            do {
-                c = UTEXT_PREVIOUS32(fText);
-                UTRIE_GET16(&fData->fTrie, c, category);
-            }
-            while (c != U_SENTINEL && (category & 0x4000));
-            // Back up to the last dictionary character
-            if (c == U_SENTINEL) {
-                // c = fText->first32();
-                c = utext_current32(fText);
-            }
-            else {
-                utext_next32(fText);
-                c = utext_current32(fText);
-            }
-            rangeStart = (int32_t)UTEXT_GETNATIVEINDEX(fText);;
-        }
-        UTRIE_GET16(&fData->fTrie, c, category);
-    }
-    
-    // Loop through the text, looking for ranges of dictionary characters.
-    // For each span, find the appropriate break engine, and ask it to find
-    // any breaks within the span.
-    // Note: we always do this in the forward direction, so that the break
-    // cache is built in the right order.
-    if (reverse) {
-        utext_setNativeIndex(fText, rangeStart);
-        c = utext_current32(fText);
-        UTRIE_GET16(&fData->fTrie, c, category);
-    }
-    while(U_SUCCESS(status)) {
-        while((current = (int32_t)UTEXT_GETNATIVEINDEX(fText)) < rangeEnd && (category & 0x4000) == 0) {
-            utext_next32(fText);           // TODO:  tweak for post-increment operation
-            c = utext_current32(fText);
-            UTRIE_GET16(&fData->fTrie, c, category);
-        }
-        if (current >= rangeEnd) {
-            break;
-        }
-        
-        // We now have a dictionary character. Get the appropriate language object
-        // to deal with it.
-        const LanguageBreakEngine *lbe = getLanguageBreakEngine(c);
-        
-        // Ask the language object if there are any breaks. It will leave the text
-        // pointer on the other side of its range, ready to search for the next one.
-        if (lbe != NULL) {
-            foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, FALSE, fBreakType, breaks);
-        }
-        
-        // Reload the loop variables for the next go-round
-        c = utext_current32(fText);
-        UTRIE_GET16(&fData->fTrie, c, category);
-    }
-    
-    // If we found breaks, build a new break cache. The first and last entries must
-    // be the original starting and ending position.
-    if (foundBreakCount > 0) {
-        int32_t totalBreaks = foundBreakCount;
-        if (startPos < breaks.elementAti(0)) {
-            totalBreaks += 1;
-        }
-        if (endPos > breaks.peeki()) {
-            totalBreaks += 1;
-        }
-        fCachedBreakPositions = (int32_t *)uprv_malloc(totalBreaks * sizeof(int32_t));
-        if (fCachedBreakPositions != NULL) {
-            int32_t out = 0;
-            fNumCachedBreakPositions = totalBreaks;
-            if (startPos < breaks.elementAti(0)) {
-                fCachedBreakPositions[out++] = startPos;
-            }
-            for (int32_t i = 0; i < foundBreakCount; ++i) {
-                fCachedBreakPositions[out++] = breaks.elementAti(i);
-            }
-            if (endPos > fCachedBreakPositions[out-1]) {
-                fCachedBreakPositions[out] = endPos;
-            }
-            // If there are breaks, then by definition, we are replacing the original
-            // proposed break by one of the breaks we found. Use following() and
-            // preceding() to do the work. They should never recurse in this case.
-            if (reverse) {
-                return preceding(endPos);
-            }
-            else {
-                return following(startPos);
-            }
-        }
-        // If the allocation failed, just fall through to the "no breaks found" case.
-    }
-
-    // If we get here, there were no language-based breaks. Set the text pointer
-    // to the original proposed break.
-    utext_setNativeIndex(fText, reverse ? startPos : endPos);
-    return (reverse ? startPos : endPos);
-}
-
-U_NAMESPACE_END
-
-// defined in ucln_cmn.h
-
-static icu::UStack *gLanguageBreakFactories = NULL;
-
-/**
- * Release all static memory held by breakiterator.  
- */
-U_CDECL_BEGIN
-static UBool U_CALLCONV breakiterator_cleanup_dict(void) {
-    if (gLanguageBreakFactories) {
-        delete gLanguageBreakFactories;
-        gLanguageBreakFactories = NULL;
-    }
-    return TRUE;
-}
-U_CDECL_END
-
-U_CDECL_BEGIN
-static void U_CALLCONV _deleteFactory(void *obj) {
-    delete (icu::LanguageBreakFactory *) obj;
-}
-U_CDECL_END
-U_NAMESPACE_BEGIN
-
-static const LanguageBreakEngine*
-getLanguageBreakEngineFromFactory(UChar32 c, int32_t breakType)
-{
-    UBool       needsInit;
-    UErrorCode  status = U_ZERO_ERROR;
-    UMTX_CHECK(NULL, (UBool)(gLanguageBreakFactories == NULL), needsInit);
-    
-    if (needsInit) {
-        UStack  *factories = new UStack(_deleteFactory, NULL, status);
-        if (factories != NULL && U_SUCCESS(status)) {
-            ICULanguageBreakFactory *builtIn = new ICULanguageBreakFactory(status);
-            factories->push(builtIn, status);
-#ifdef U_LOCAL_SERVICE_HOOK
-            LanguageBreakFactory *extra = (LanguageBreakFactory *)uprv_svc_hook("languageBreakFactory", &status);
-            if (extra != NULL) {
-                factories->push(extra, status);
-            }
-#endif
-        }
-        umtx_lock(NULL);
-        if (gLanguageBreakFactories == NULL) {
-            gLanguageBreakFactories = factories;
-            factories = NULL;
-            ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR_DICT, breakiterator_cleanup_dict);
-        }
-        umtx_unlock(NULL);
-        delete factories;
-    }
-    
-    if (gLanguageBreakFactories == NULL) {
-        return NULL;
-    }
-    
-    int32_t i = gLanguageBreakFactories->size();
-    const LanguageBreakEngine *lbe = NULL;
-    while (--i >= 0) {
-        LanguageBreakFactory *factory = (LanguageBreakFactory *)(gLanguageBreakFactories->elementAt(i));
-        lbe = factory->getEngineFor(c, breakType);
-        if (lbe != NULL) {
-            break;
-        }
-    }
-    return lbe;
-}
-
-
-//-------------------------------------------------------------------------------
-//
-//  getLanguageBreakEngine  Find an appropriate LanguageBreakEngine for the
-//                          the character c.
-//
-//-------------------------------------------------------------------------------
-const LanguageBreakEngine *
-RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) {
-    const LanguageBreakEngine *lbe = NULL;
-    UErrorCode status = U_ZERO_ERROR;
-    
-    if (fLanguageBreakEngines == NULL) {
-        fLanguageBreakEngines = new UStack(status);
-        if (fLanguageBreakEngines == NULL || U_FAILURE(status)) {
-            delete fLanguageBreakEngines;
-            fLanguageBreakEngines = 0;
-            return NULL;
-        }
-    }
-    
-    int32_t i = fLanguageBreakEngines->size();
-    while (--i >= 0) {
-        lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i));
-        if (lbe->handles(c, fBreakType)) {
-            return lbe;
-        }
-    }
-    
-    // No existing dictionary took the character. See if a factory wants to
-    // give us a new LanguageBreakEngine for this character.
-    lbe = getLanguageBreakEngineFromFactory(c, fBreakType);
-    
-    // If we got one, use it and push it on our stack.
-    if (lbe != NULL) {
-        fLanguageBreakEngines->push((void *)lbe, status);
-        // Even if we can't remember it, we can keep looking it up, so
-        // return it even if the push fails.
-        return lbe;
-    }
-    
-    // No engine is forthcoming for this character. Add it to the
-    // reject set. Create the reject break engine if needed.
-    if (fUnhandledBreakEngine == NULL) {
-        fUnhandledBreakEngine = new UnhandledEngine(status);
-        if (U_SUCCESS(status) && fUnhandledBreakEngine == NULL) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-        }
-        // Put it last so that scripts for which we have an engine get tried
-        // first.
-        fLanguageBreakEngines->insertElementAt(fUnhandledBreakEngine, 0, status);
-        // If we can't insert it, or creation failed, get rid of it
-        if (U_FAILURE(status)) {
-            delete fUnhandledBreakEngine;
-            fUnhandledBreakEngine = 0;
-            return NULL;
-        }
-    }
-    
-    // Tell the reject engine about the character; at its discretion, it may
-    // add more than just the one character.
-    fUnhandledBreakEngine->handleCharacter(c, fBreakType);
-        
-    return fUnhandledBreakEngine;
-}
-
-
-
-/*int32_t RuleBasedBreakIterator::getBreakType() const {
-    return fBreakType;
-}*/
-
-void RuleBasedBreakIterator::setBreakType(int32_t type) {
-    fBreakType = type;
-    reset();
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbicst.pl b/src/third_party/mozjs/intl/icu/source/common/rbbicst.pl
deleted file mode 100755
index 98b06cb..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbicst.pl
+++ /dev/null
@@ -1,453 +0,0 @@
-#**************************************************************************
-#   Copyright (C) 2002-2005 International Business Machines Corporation   *
-#   and others. All rights reserved.                                      *
-#**************************************************************************
-#
-#  rbbicst   Compile the RBBI rule paser state table data into initialized C data.
-#            Usage:
-#                   cd icu/source/common
-#                   perl rbbicst.pl    < rbbirpt.txt > rbbirpt.h
-#                   perl rbbicst.pl -j < rbbirpt.txt > RBBIRuleParseTable.java
-#
-#             The output file, rbbrpt.h, is included by some of the .cpp rbbi
-#             implementation files.   This perl script is NOT run as part
-#             of a normal ICU build.  It is run by hand when needed, and the
-#             rbbirpt.h generated file is put back into cvs.
-#
-#             See rbbirpt.txt for a description of the input format for this script.
-#
-
-if ($ARGV[0] eq "-j") {
-    $javaOutput = 1;
-    shift @ARGV;
-}
-
-
-$num_states = 1;     # Always the state number for the line being compiled.
-$line_num  = 0;      # The line number in the input file.
-
-$states{"pop"} = 255;    # Add the "pop"  to the list of defined state names.
-                         # This prevents any state from being labelled with "pop",
-                         #  and resolves references to "pop" in the next state field.
-
-line_loop: while (<>) {
-    chomp();
-    $line = $_;
-    @fields = split();
-    $line_num++;
-
-    # Remove # comments, which are any fields beginning with a #, plus all
-    #  that follow on the line.
-    for ($i=0; $i<@fields; $i++) {
-        if ($fields[$i] =~ /^#/) {
-            @fields = @fields[0 .. $i-1];
-            last;
-        }
-    }
-    # ignore blank lines, and those with no fields left after stripping comments..
-    if (@fields == 0) {
-        next;
-    }
-
-    #
-    # State Label:  handling.
-    #    Does the first token end with a ":"?  If so, it's the name  of a state.
-    #    Put in a hash, together with the current state number,
-    #        so that we can later look up the number from the name.
-    #
-    if (@fields[0] =~ /.*:$/) {
-        $state_name = @fields[0];
-        $state_name =~ s/://;        # strip off the colon from the state name.
-
-        if ($states{$state_name} != 0) {
-            print "  rbbicst: at line $line-num duplicate definition of state $state_name\n";
-        }
-        $states{$state_name} = $num_states;
-        $stateNames[$num_states] = $state_name;
-
-        # if the label was the only thing on this line, go on to the next line,
-        # otherwise assume that a state definition is on the same line and fall through.
-        if (@fields == 1) {
-            next line_loop;
-        }
-        shift @fields;                       # shift off label field in preparation
-                                             #  for handling the rest of the line.
-    }
-
-    #
-    # State Transition line.
-    #   syntax is this,
-    #       character   [n]  target-state  [^push-state]  [function-name]
-    #   where
-    #      [something]   is an optional something
-    #      character     is either a single quoted character e.g. '['
-    #                       or a name of a character class, e.g. white_space
-    #
-
-    $state_line_num[$num_states] = $line_num;   # remember line number with each state
-                                                #  so we can make better error messages later.
-    #
-    # First field, character class or literal character for this transition.
-    #
-    if ($fields[0] =~ /^'.'$/) {
-        # We've got a quoted literal character.
-        $state_literal_chars[$num_states] = $fields[0];
-        $state_literal_chars[$num_states] =~ s/'//g;
-    } else {
-        # We've got the name of a character class.
-        $state_char_class[$num_states] = $fields[0];
-        if ($fields[0] =~ /[\W]/) {
-            print "  rbbicsts:  at line $line_num, bad character literal or character class name.\n";
-            print "     scanning $fields[0]\n";
-            exit(-1);
-        }
-    }
-    shift @fields;
-
-    #
-    # do the 'n' flag
-    #
-    $state_flag[$num_states] = $javaOutput? "false" : "FALSE";
-    if ($fields[0] eq "n") {
-        $state_flag[$num_states] = $javaOutput? "true": "TRUE";
-        shift @fields;
-    }
-
-    #
-    # do the destination state.
-    #
-    $state_dest_state[$num_states] = $fields[0];
-    if ($fields[0] eq "") {
-        print "  rbbicsts:  at line $line_num, destination state missing.\n";
-        exit(-1);
-    }
-    shift @fields;
-
-    #
-    # do the push state, if present.
-    #
-    if ($fields[0] =~ /^\^/) {
-        $fields[0] =~ s/^\^//;
-        $state_push_state[$num_states] = $fields[0];
-        if ($fields[0] eq "" ) {
-            print "  rbbicsts:  at line $line_num, expected state after ^ (no spaces).\n";
-            exit(-1);
-        }
-        shift @fields;
-    }
-
-    #
-    # Lastly, do the optional action name.
-    #
-    if ($fields[0] ne "") {
-        $state_func_name[$num_states] = $fields[0];
-        shift @fields;
-    }
-
-    #
-    #  There should be no fields left on the line at this point.
-    #
-    if (@fields > 0) {
-       print "  rbbicsts:  at line $line_num, unexpected extra stuff on input line.\n";
-       print "     scanning $fields[0]\n";
-   }
-   $num_states++;
-}
-
-#
-# We've read in the whole file, now go back and output the
-#   C source code for the state transition table.
-#
-# We read all states first, before writing anything,  so that the state numbers
-# for the destination states are all available to be written.
-#
-
-#
-# Make hashes for the names of the character classes and
-#      for the names of the actions that appeared.
-#
-for ($state=1; $state < $num_states; $state++) {
-    if ($state_char_class[$state] ne "") {
-        if ($charClasses{$state_char_class[$state]} == 0) {
-            $charClasses{$state_char_class[$state]} = 1;
-        }
-    }
-    if ($state_func_name[$state] eq "") {
-        $state_func_name[$state] = "doNOP";
-    }
-    if ($actions{$state_action_name[$state]} == 0) {
-        $actions{$state_func_name[$state]} = 1;
-    }
-}
-
-#
-# Check that all of the destination states have been defined
-#
-#
-$states{"exit"} = 0;              # Predefined state name, terminates state machine.
-for ($state=1; $state<$num_states; $state++) {
-   if ($states{$state_dest_state[$state]} == 0 && $state_dest_state[$state] ne "exit") {
-       print "Error at line $state_line_num[$state]: target state \"$state_dest_state[$state]\" is not defined.\n";
-       $errors++;
-   }
-   if ($state_push_state[$state] ne "" && $states{$state_push_state[$state]} == 0) {
-       print "Error at line $state_line_num[$state]: target state \"$state_push_state[$state]\" is not defined.\n";
-       $errors++;
-   }
-}
-
-die if ($errors>0);
-
-#
-# Assign numbers to each of the character classes classes  used.
-#   Sets are numbered from 128 - 250
-#   The values 0-127 in the state table are used for matching
-#     individual ASCII characters (the only thing that can appear in the rules.)
-#   The "set" names appearing in the code below (default, etc.)  need special
-#     handling because they do not correspond to a normal set of characters,
-#     but trigger special handling by code in the state machine.
-#
-$i = 128;
-foreach $setName (sort keys %charClasses) {
-    if ($setName eq "default") {
-        $charClasses{$setName} = 255;}
-    elsif ($setName eq "escaped") {
-        $charClasses{$setName} = 254;}
-    elsif ($setName eq "escapedP") {
-        $charClasses{$setName} = 253;}
-    elsif ($setName eq "eof") {
-        $charClasses{$setName} = 252;}
-    else {
-        # Normal (single) character class.  Number them.
-        $charClasses{$setName} = $i;
-        $i++;
-    }
-}
-
-
-my ($sec, $min, $hour, , $day, $mon, $year, $wday, $yday, $isdst) = localtime;
-$year += 1900;
-
-if ($javaOutput) {
-    print "/*\n";
-    print " *******************************************************************************\n";
-    print " * Copyright (C) 2003-$year,\n";
-    print " * International Business Machines Corporation and others. All Rights Reserved.\n";
-    print " *******************************************************************************\n";
-    print " */\n";
-    print " \n";
-    print "package com.ibm.icu.text;\n";
-    print " \n";
-    print "/**\n";
-    print " * Generated Java File.  Do not edit by hand.\n";
-    print " * This file contains the state table for the ICU Rule Based Break Iterator\n";
-    print " * rule parser.\n";
-    print " * It is generated by the Perl script \"rbbicst.pl\" from\n";
-    print " * the rule parser state definitions file \"rbbirpt.txt\".\n";
-    print " * \@internal \n";
-    print " *\n";
-    print " */\n";
-
-    print "class RBBIRuleParseTable\n";
-    print "{\n";
-
-     #
-    # Emit the constants for the actions to be performed.
-    #
-    $n = 1;
-    foreach $act (sort keys %actions) {
-        print "     static final short $act = $n;\n";
-        $n++;
-    }
-    print " \n";
-    
-    #
-    # Emit constants for char class names
-    #
-    foreach $setName (sort keys %charClasses) {
-       print "     static final short kRuleSet_$setName = $charClasses{$setName};\n";
-    }
-    print "\n\n";
-    
-    
-    print "   static class RBBIRuleTableElement { \n";
-    print "      short      fAction; \n";
-    print "      short      fCharClass; \n";
-    print "      short      fNextState; \n";
-    print "      short      fPushState; \n";
-    print "      boolean    fNextChar;  \n";
-    print "      String     fStateName; \n";
-    print "      RBBIRuleTableElement(short a, int cc, int ns, int ps, boolean nc, String sn) {  \n";
-    print "      fAction = a; \n";
-    print "      fCharClass = (short)cc; \n";
-    print "      fNextState = (short)ns; \n";
-    print "      fPushState = (short)ps; \n";
-    print "      fNextChar  = nc; \n";
-    print "      fStateName = sn; \n";
-    print "   } \n";
-    print "   }; \n";
-    print "  \n";
-    
-    
-    print "    static RBBIRuleTableElement[] gRuleParseStateTable = { \n ";
-    print "      new RBBIRuleTableElement(doNOP, 0, 0,0,  true,   null )     //  0 \n";  #output the unused state 0. 
-    for ($state=1; $state < $num_states; $state++) {
-        print "     , new RBBIRuleTableElement($state_func_name[$state],";
-        if ($state_literal_chars[$state] ne "") {
-            $c = $state_literal_chars[$state];
-            print("'$c', "); 
-        }else {
-            print " $charClasses{$state_char_class[$state]},";
-        }
-        print " $states{$state_dest_state[$state]},";
- 
-        # The push-state field is optional.  If omitted, fill field with a zero, which flags
-        #   the state machine that there is no push state.
-        if ($state_push_state[$state] eq "") {
-            print "0, ";
-        } else {
-            print " $states{$state_push_state[$state]},";
-        }
-        print " $state_flag[$state], ";
- 
-        # if this is the first row of the table for this state, put out the state name.
-        if ($stateNames[$state] ne "") {
-            print "  \"$stateNames[$state]\") ";
-        } else {
-            print "  null ) ";
-        }
-            
-        # Put out a comment showing the number (index) of this state row,
-        print "    //  $state ";
-        print "\n";
-    }
-    print " };\n";
-
-    print "}; \n";
-    
-}
-else
-{
-    #
-    #  C++ Output ...
-    #
-
-
-    print "//---------------------------------------------------------------------------------\n";
-    print "//\n";
-    print "// Generated Header File.  Do not edit by hand.\n";
-    print "//    This file contains the state table for the ICU Rule Based Break Iterator\n";
-    print "//    rule parser.\n";
-    print "//    It is generated by the Perl script \"rbbicst.pl\" from\n";
-    print "//    the rule parser state definitions file \"rbbirpt.txt\".\n";
-    print "//\n";
-    print "//   Copyright (C) 2002-$year International Business Machines Corporation \n";
-    print "//   and others. All rights reserved.  \n";
-    print "//\n";
-    print "//---------------------------------------------------------------------------------\n";
-    print "#ifndef RBBIRPT_H\n";
-    print "#define RBBIRPT_H\n";
-    print "\n";
-    print "U_NAMESPACE_BEGIN\n";
-
-    #
-    # Emit the constants for indicies of Unicode Sets
-    #   Define one constant for each of the character classes encountered.
-    #   At the same time, store the index corresponding to the set name back into hash.
-    #
-    print "//\n";
-    print "// Character classes for RBBI rule scanning.\n";
-    print "//\n";
-    foreach $setName (sort keys %charClasses) {
-        if ($charClasses{$setName} < 250) {
-           # Normal character class.
-           print "    static const uint8_t kRuleSet_$setName = $charClasses{$setName};\n";
-        }
-    }
-    print "\n\n";
-
-    #
-    # Emit the enum for the actions to be performed.
-    #
-    print "enum RBBI_RuleParseAction {\n";
-    foreach $act (sort keys %actions) {
-        print "    $act,\n";
-    }
-    print "    rbbiLastAction};\n\n";
-
-    #
-    # Emit the struct definition for transtion table elements.
-    #
-    print "//-------------------------------------------------------------------------------\n";
-    print "//\n";
-    print "//  RBBIRuleTableEl    represents the structure of a row in the transition table\n";
-    print "//                     for the rule parser state machine.\n";
-    print "//-------------------------------------------------------------------------------\n";
-    print "struct RBBIRuleTableEl {\n";
-    print "    RBBI_RuleParseAction          fAction;\n";
-    print "    uint8_t                       fCharClass;       // 0-127:    an individual ASCII character\n";
-    print "                                                    // 128-255:  character class index\n";
-    print "    uint8_t                       fNextState;       // 0-250:    normal next-stat numbers\n";
-    print "                                                    // 255:      pop next-state from stack.\n";
-    print "    uint8_t                       fPushState;\n";
-    print "    UBool                         fNextChar;\n";
-    print "};\n\n";
-
-    #
-    # emit the state transition table
-    #
-    print "static const struct RBBIRuleTableEl gRuleParseStateTable[] = {\n";
-    print "    {doNOP, 0, 0, 0, TRUE}\n";    # State 0 is a dummy.  Real states start with index = 1.
-    for ($state=1; $state < $num_states; $state++) {
-        print "    , {$state_func_name[$state],";
-        if ($state_literal_chars[$state] ne "") {
-            $c = $state_literal_chars[$state];
-            printf(" %d /* $c */,", ord($c));   #  use numeric value, so EBCDIC machines are ok.
-        }else {
-            print " $charClasses{$state_char_class[$state]},";
-        }
-        print " $states{$state_dest_state[$state]},";
-
-        # The push-state field is optional.  If omitted, fill field with a zero, which flags
-        #   the state machine that there is no push state.
-        if ($state_push_state[$state] eq "") {
-            print "0, ";
-        } else {
-            print " $states{$state_push_state[$state]},";
-        }
-        print " $state_flag[$state]} ";
-
-        # Put out a C++ comment showing the number (index) of this state row,
-        #   and, if this is the first row of the table for this state, the state name.
-        print "    //  $state ";
-        if ($stateNames[$state] ne "") {
-            print "     $stateNames[$state]";
-        }
-        print "\n";
-    };
-    print " };\n";
-
-
-    #
-    # emit a mapping array from state numbers to state names.
-    #
-    #    This array is used for producing debugging output from the rule parser.
-    #
-    print "#ifdef RBBI_DEBUG\n";
-    print "static const char * const RBBIRuleStateNames[] = {";
-    for ($state=0; $state<$num_states; $state++) {
-        if ($stateNames[$state] ne "") {
-            print "     \"$stateNames[$state]\",\n";
-        } else {
-            print "    0,\n";
-        }
-    }
-    print "    0};\n";
-    print "#endif\n\n";
-
-    print "U_NAMESPACE_END\n";
-    print "#endif\n";
-}
-
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbidata.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbidata.cpp
deleted file mode 100644
index 09d4796..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbidata.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-***************************************************************************
-*   Copyright (C) 1999-2010 International Business Machines Corporation   *
-*   and others. All rights reserved.                                      *
-***************************************************************************
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/utypes.h"
-#include "rbbidata.h"
-#include "rbbirb.h"
-#include "utrie.h"
-#include "udatamem.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "umutex.h"
-
-#include "uassert.h"
-
-
-//-----------------------------------------------------------------------------------
-//
-//   Trie access folding function.  Copied as-is from properties code in uchar.c
-//
-//-----------------------------------------------------------------------------------
-U_CDECL_BEGIN
-static int32_t U_CALLCONV
-getFoldingOffset(uint32_t data) {
-    /* if bit 15 is set, then the folding offset is in bits 14..0 of the 16-bit trie result */
-    if(data&0x8000) {
-        return (int32_t)(data&0x7fff);
-    } else {
-        return 0;
-    }
-}
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-//-----------------------------------------------------------------------------
-//
-//    Constructors.
-//
-//-----------------------------------------------------------------------------
-RBBIDataWrapper::RBBIDataWrapper(const RBBIDataHeader *data, UErrorCode &status) {
-    init(data, status);
-}
-
-RBBIDataWrapper::RBBIDataWrapper(const RBBIDataHeader *data, enum EDontAdopt, UErrorCode &status) {
-    init(data, status);
-    fDontFreeData = TRUE;
-}
-
-RBBIDataWrapper::RBBIDataWrapper(UDataMemory* udm, UErrorCode &status) {
-    const RBBIDataHeader *d = (const RBBIDataHeader *)
-        // ((char *)&(udm->pHeader->info) + udm->pHeader->info.size);
-        // taking into consideration the padding added in by udata_write
-        ((char *)(udm->pHeader) + udm->pHeader->dataHeader.headerSize);
-    init(d, status);
-    fUDataMem = udm;
-}
-
-//-----------------------------------------------------------------------------
-//
-//    init().   Does most of the work of construction, shared between the
-//              constructors.
-//
-//-----------------------------------------------------------------------------
-void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) {
-    if (U_FAILURE(status)) {
-        return;
-    }
-    fHeader = data;
-    if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3) 
-    {
-        status = U_INVALID_FORMAT_ERROR;
-        return;
-    }
-    // Note: in ICU version 3.2 and earlier, there was a formatVersion 1
-    //       that is no longer supported.  At that time fFormatVersion was
-    //       an int32_t field, rather than an array of 4 bytes.
-
-    fDontFreeData = FALSE;
-    fUDataMem     = NULL;
-    fReverseTable = NULL;
-    fSafeFwdTable = NULL;
-    fSafeRevTable = NULL;
-    if (data->fFTableLen != 0) {
-        fForwardTable = (RBBIStateTable *)((char *)data + fHeader->fFTable);
-    }
-    if (data->fRTableLen != 0) {
-        fReverseTable = (RBBIStateTable *)((char *)data + fHeader->fRTable);
-    }
-    if (data->fSFTableLen != 0) {
-        fSafeFwdTable = (RBBIStateTable *)((char *)data + fHeader->fSFTable);
-    }
-    if (data->fSRTableLen != 0) {
-        fSafeRevTable = (RBBIStateTable *)((char *)data + fHeader->fSRTable);
-    }
-
-
-    utrie_unserialize(&fTrie,
-                       (uint8_t *)data + fHeader->fTrie,
-                       fHeader->fTrieLen,
-                       &status);
-    if (U_FAILURE(status)) {
-        return;
-    }
-    fTrie.getFoldingOffset=getFoldingOffset;
-
-
-    fRuleSource   = (UChar *)((char *)data + fHeader->fRuleSource);
-    fRuleString.setTo(TRUE, fRuleSource, -1);
-    U_ASSERT(data->fRuleSourceLen > 0);
-
-    fRuleStatusTable = (int32_t *)((char *)data + fHeader->fStatusTable);
-    fStatusMaxIdx    = data->fStatusTableLen / sizeof(int32_t);
-
-    fRefCount = 1;
-
-#ifdef RBBI_DEBUG
-    char *debugEnv = getenv("U_RBBIDEBUG");
-    if (debugEnv && uprv_strstr(debugEnv, "data")) {this->printData();}
-#endif
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//    Destructor.     Don't call this - use removeReference() instead.
-//
-//-----------------------------------------------------------------------------
-RBBIDataWrapper::~RBBIDataWrapper() {
-    U_ASSERT(fRefCount == 0);
-    if (fUDataMem) {
-        udata_close(fUDataMem);
-    } else if (!fDontFreeData) {
-        uprv_free((void *)fHeader);
-    }
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   Operator ==    Consider two RBBIDataWrappers to be equal if they
-//                  refer to the same underlying data.  Although
-//                  the data wrappers are normally shared between
-//                  iterator instances, it's possible to independently
-//                  open the same data twice, and get two instances, which
-//                  should still be ==.
-//
-//-----------------------------------------------------------------------------
-UBool RBBIDataWrapper::operator ==(const RBBIDataWrapper &other) const {
-    if (fHeader == other.fHeader) {
-        return TRUE;
-    }
-    if (fHeader->fLength != other.fHeader->fLength) {
-        return FALSE;
-    }
-    if (uprv_memcmp(fHeader, other.fHeader, fHeader->fLength) == 0) {
-        return TRUE;
-    }
-    return FALSE;
-}
-
-int32_t  RBBIDataWrapper::hashCode() {
-    return fHeader->fFTableLen;
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//    Reference Counting.   A single RBBIDataWrapper object is shared among
-//                          however many RulesBasedBreakIterator instances are
-//                          referencing the same data.
-//
-//-----------------------------------------------------------------------------
-void RBBIDataWrapper::removeReference() {
-    if (umtx_atomic_dec(&fRefCount) == 0) {
-        delete this;
-    }
-}
-
-
-RBBIDataWrapper *RBBIDataWrapper::addReference() {
-   umtx_atomic_inc(&fRefCount);
-   return this;
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//  getRuleSourceString
-//
-//-----------------------------------------------------------------------------
-const UnicodeString &RBBIDataWrapper::getRuleSourceString() const {
-    return fRuleString;
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//  print   -  debugging function to dump the runtime data tables.
-//
-//-----------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void  RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *table) {
-    uint32_t   c;
-    uint32_t   s;
-
-    RBBIDebugPrintf("   %s\n", heading);
-
-    RBBIDebugPrintf("State |  Acc  LA TagIx");
-    for (c=0; c<fHeader->fCatCount; c++) {RBBIDebugPrintf("%3d ", c);}
-    RBBIDebugPrintf("\n------|---------------"); for (c=0;c<fHeader->fCatCount; c++) {
-        RBBIDebugPrintf("----");
-    }
-    RBBIDebugPrintf("\n");
-
-    if (table == NULL) {
-        RBBIDebugPrintf("         N U L L   T A B L E\n\n");
-        return;
-    }
-    for (s=0; s<table->fNumStates; s++) {
-        RBBIStateTableRow *row = (RBBIStateTableRow *)
-                                  (table->fTableData + (table->fRowLen * s));
-        RBBIDebugPrintf("%4d  |  %3d %3d %3d ", s, row->fAccepting, row->fLookAhead, row->fTagIdx);
-        for (c=0; c<fHeader->fCatCount; c++)  {
-            RBBIDebugPrintf("%3d ", row->fNextState[c]);
-        }
-        RBBIDebugPrintf("\n");
-    }
-    RBBIDebugPrintf("\n");
-}
-#endif
-
-
-#ifdef RBBI_DEBUG
-void  RBBIDataWrapper::printData() {
-    RBBIDebugPrintf("RBBI Data at %p\n", (void *)fHeader);
-    RBBIDebugPrintf("   Version = {%d %d %d %d}\n", fHeader->fFormatVersion[0], fHeader->fFormatVersion[1],
-                                                    fHeader->fFormatVersion[2], fHeader->fFormatVersion[3]);
-    RBBIDebugPrintf("   total length of data  = %d\n", fHeader->fLength);
-    RBBIDebugPrintf("   number of character categories = %d\n\n", fHeader->fCatCount);
-
-    printTable("Forward State Transition Table", fForwardTable);
-    printTable("Reverse State Transition Table", fReverseTable);
-    printTable("Safe Forward State Transition Table", fSafeFwdTable);
-    printTable("Safe Reverse State Transition Table", fSafeRevTable);
-
-    RBBIDebugPrintf("\nOrignal Rules source:\n");
-    for (int32_t c=0; fRuleSource[c] != 0; c++) {
-        RBBIDebugPrintf("%c", fRuleSource[c]);
-    }
-    RBBIDebugPrintf("\n\n");
-}
-#endif
-
-
-U_NAMESPACE_END
-U_NAMESPACE_USE
-
-//-----------------------------------------------------------------------------
-//
-//  ubrk_swap   -  byte swap and char encoding swap of RBBI data
-//
-//-----------------------------------------------------------------------------
-
-U_CAPI int32_t U_EXPORT2
-ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outData,
-           UErrorCode *status) {
-
-    if (status == NULL || U_FAILURE(*status)) {
-        return 0;
-    }
-    if(ds==NULL || inData==NULL || length<-1 || (length>0 && outData==NULL)) {
-        *status=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    //
-    //  Check that the data header is for for break data.
-    //    (Header contents are defined in genbrk.cpp)
-    //
-    const UDataInfo *pInfo = (const UDataInfo *)((const char *)inData+4);
-    if(!(  pInfo->dataFormat[0]==0x42 &&   /* dataFormat="Brk " */
-           pInfo->dataFormat[1]==0x72 &&
-           pInfo->dataFormat[2]==0x6b &&
-           pInfo->dataFormat[3]==0x20 &&
-           pInfo->formatVersion[0]==3  )) {
-        udata_printError(ds, "ubrk_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized\n",
-                         pInfo->dataFormat[0], pInfo->dataFormat[1],
-                         pInfo->dataFormat[2], pInfo->dataFormat[3],
-                         pInfo->formatVersion[0]);
-        *status=U_UNSUPPORTED_ERROR;
-        return 0;
-    }
-
-    //
-    // Swap the data header.  (This is the generic ICU Data Header, not the RBBI Specific
-    //                         RBBIDataHeader).  This swap also conveniently gets us
-    //                         the size of the ICU d.h., which lets us locate the start
-    //                         of the RBBI specific data.
-    //
-    int32_t headerSize=udata_swapDataHeader(ds, inData, length, outData, status);
-
-
-    //
-    // Get the RRBI Data Header, and check that it appears to be OK.
-    //
-    //    Note:  ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually 
-    //           an int32_t with a value of 1.  Starting with ICU 3.4,
-    //           RBBI's fDataFormat matches the dataFormat field from the
-    //           UDataInfo header, four int8_t bytes.  The value is {3,1,0,0}
-    //
-    const uint8_t  *inBytes =(const uint8_t *)inData+headerSize;
-    RBBIDataHeader *rbbiDH = (RBBIDataHeader *)inBytes;
-    if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 || 
-        rbbiDH->fFormatVersion[0] != 3 ||
-        ds->readUInt32(rbbiDH->fLength)  <  sizeof(RBBIDataHeader)) 
-    {
-        udata_printError(ds, "ubrk_swap(): RBBI Data header is invalid.\n");
-        *status=U_UNSUPPORTED_ERROR;
-        return 0;
-    }
-
-    //
-    // Prefight operation?  Just return the size
-    //
-    int32_t breakDataLength = ds->readUInt32(rbbiDH->fLength);
-    int32_t totalSize = headerSize + breakDataLength;
-    if (length < 0) {
-        return totalSize;
-    }
-
-    //
-    // Check that length passed in is consistent with length from RBBI data header.
-    //
-    if (length < totalSize) {
-        udata_printError(ds, "ubrk_swap(): too few bytes (%d after ICU Data header) for break data.\n",
-                            breakDataLength);
-        *status=U_INDEX_OUTOFBOUNDS_ERROR;
-        return 0;
-        }
-
-
-    //
-    // Swap the Data.  Do the data itself first, then the RBBI Data Header, because
-    //                 we need to reference the header to locate the data, and an
-    //                 inplace swap of the header leaves it unusable.
-    //
-    uint8_t         *outBytes = (uint8_t *)outData + headerSize;
-    RBBIDataHeader  *outputDH = (RBBIDataHeader *)outBytes;
-
-    int32_t   tableStartOffset;
-    int32_t   tableLength;
-
-    //
-    // If not swapping in place, zero out the output buffer before starting.
-    //    Individual tables and other data items within are aligned to 8 byte boundaries
-    //    when originally created.  Any unused space between items needs to be zero.
-    //
-    if (inBytes != outBytes) {
-        uprv_memset(outBytes, 0, breakDataLength);
-    }
-
-    //
-    // Each state table begins with several 32 bit fields.  Calculate the size
-    //   in bytes of these.
-    //
-    int32_t         topSize = offsetof(RBBIStateTable, fTableData);
-
-    // Forward state table.  
-    tableStartOffset = ds->readUInt32(rbbiDH->fFTable);
-    tableLength      = ds->readUInt32(rbbiDH->fFTableLen);
-
-    if (tableLength > 0) {
-        ds->swapArray32(ds, inBytes+tableStartOffset, topSize, 
-                            outBytes+tableStartOffset, status);
-        ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
-                            outBytes+tableStartOffset+topSize, status);
-    }
-    
-    // Reverse state table.  Same layout as forward table, above.
-    tableStartOffset = ds->readUInt32(rbbiDH->fRTable);
-    tableLength      = ds->readUInt32(rbbiDH->fRTableLen);
-
-    if (tableLength > 0) {
-        ds->swapArray32(ds, inBytes+tableStartOffset, topSize, 
-                            outBytes+tableStartOffset, status);
-        ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
-                            outBytes+tableStartOffset+topSize, status);
-    }
-
-    // Safe Forward state table.  Same layout as forward table, above.
-    tableStartOffset = ds->readUInt32(rbbiDH->fSFTable);
-    tableLength      = ds->readUInt32(rbbiDH->fSFTableLen);
-
-    if (tableLength > 0) {
-        ds->swapArray32(ds, inBytes+tableStartOffset, topSize, 
-                            outBytes+tableStartOffset, status);
-        ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
-                            outBytes+tableStartOffset+topSize, status);
-    }
-
-    // Safe Reverse state table.  Same layout as forward table, above.
-    tableStartOffset = ds->readUInt32(rbbiDH->fSRTable);
-    tableLength      = ds->readUInt32(rbbiDH->fSRTableLen);
-
-    if (tableLength > 0) {
-        ds->swapArray32(ds, inBytes+tableStartOffset, topSize, 
-                            outBytes+tableStartOffset, status);
-        ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
-                            outBytes+tableStartOffset+topSize, status);
-    }
-
-    // Trie table for character categories
-    utrie_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen),
-                            outBytes+ds->readUInt32(rbbiDH->fTrie), status);
-
-    // Source Rules Text.  It's UChar data
-    ds->swapArray16(ds, inBytes+ds->readUInt32(rbbiDH->fRuleSource), ds->readUInt32(rbbiDH->fRuleSourceLen),
-                        outBytes+ds->readUInt32(rbbiDH->fRuleSource), status);
-
-    // Table of rule status values.  It's all int_32 values
-    ds->swapArray32(ds, inBytes+ds->readUInt32(rbbiDH->fStatusTable), ds->readUInt32(rbbiDH->fStatusTableLen),
-                        outBytes+ds->readUInt32(rbbiDH->fStatusTable), status);
-
-    // And, last, the header.
-    //   It is all int32_t values except for fFormataVersion, which is an array of four bytes.
-    //   Swap the whole thing as int32_t, then re-swap the one field.
-    //
-    ds->swapArray32(ds, inBytes, sizeof(RBBIDataHeader), outBytes, status);
-    ds->swapArray32(ds, outputDH->fFormatVersion, 4, outputDH->fFormatVersion, status);
-
-    return totalSize;
-}
-
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbidata.h b/src/third_party/mozjs/intl/icu/source/common/rbbidata.h
deleted file mode 100644
index 7073b8d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbidata.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2011 International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  rbbidata.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   RBBI data formats  Includes
-*
-*                          Structs that describes the format of the Binary RBBI data,
-*                          as it is stored in ICU's data file.
-*
-*      RBBIDataWrapper  -  Instances of this class sit between the
-*                          raw data structs and the RulesBasedBreakIterator objects
-*                          that are created by applications.  The wrapper class
-*                          provides reference counting for the underlying data,
-*                          and direct pointers to data that would not otherwise
-*                          be accessible without ugly pointer arithmetic.  The
-*                          wrapper does not attempt to provide any higher level
-*                          abstractions for the data itself.
-*
-*                          There will be only one instance of RBBIDataWrapper for any
-*                          set of RBBI run time data being shared by instances
-*                          (clones) of RulesBasedBreakIterator.
-*/
-
-#ifndef __RBBIDATA_H__
-#define __RBBIDATA_H__
-
-#include "unicode/utypes.h"
-#include "unicode/udata.h"
-#include "udataswp.h"
-
-/**
- * Swap RBBI data. See udataswp.h.
- * @internal
- */
-U_CAPI int32_t U_EXPORT2
-ubrk_swap(const UDataSwapper *ds,
-          const void *inData, int32_t length, void *outData,
-          UErrorCode *pErrorCode);
-
-#ifdef __cplusplus
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "utrie.h"
-
-U_NAMESPACE_BEGIN
-
-/*  
- *   The following structs map exactly onto the raw data from ICU common data file. 
- */
-struct RBBIDataHeader {
-    uint32_t         fMagic;           /*  == 0xbla0                                               */
-    uint8_t          fFormatVersion[4]; /* Data Format.  Same as the value in struct UDataInfo      */
-                                       /*   if there is one associated with this data.             */
-                                       /*     (version originates in rbbi, is copied to UDataInfo) */
-                                       /*   For ICU 3.2 and earlier, this field was                */
-                                       /*       uint32_t  fVersion                                 */
-                                       /*   with a value of 1.                                     */
-    uint32_t         fLength;          /*  Total length in bytes of this RBBI Data,                */
-                                       /*      including all sections, not just the header.        */
-    uint32_t         fCatCount;        /*  Number of character categories.                         */
-
-    /*                                                                        */
-    /*  Offsets and sizes of each of the subsections within the RBBI data.    */
-    /*  All offsets are bytes from the start of the RBBIDataHeader.           */
-    /*  All sizes are in bytes.                                               */
-    /*                                                                        */
-    uint32_t         fFTable;         /*  forward state transition table. */
-    uint32_t         fFTableLen;
-    uint32_t         fRTable;         /*  Offset to the reverse state transition table. */
-    uint32_t         fRTableLen;
-    uint32_t         fSFTable;        /*  safe point forward transition table */
-    uint32_t         fSFTableLen;
-    uint32_t         fSRTable;        /*  safe point reverse transition table */
-    uint32_t         fSRTableLen;
-    uint32_t         fTrie;           /*  Offset to Trie data for character categories */
-    uint32_t         fTrieLen;
-    uint32_t         fRuleSource;     /*  Offset to the source for for the break */
-    uint32_t         fRuleSourceLen;  /*    rules.  Stored UChar *. */
-    uint32_t         fStatusTable;    /* Offset to the table of rule status values */
-    uint32_t         fStatusTableLen;
-
-    uint32_t         fReserved[6];    /*  Reserved for expansion */
-
-};
-
-
-
-struct  RBBIStateTableRow {
-    int16_t          fAccepting;    /*  Non-zero if this row is for an accepting state.   */
-                                    /*  Value 0: not an accepting state.                  */
-                                    /*       -1: Unconditional Accepting state.           */
-                                    /*    positive:  Look-ahead match has completed.      */
-                                    /*           Actual boundary position happened earlier */
-                                    /*           Value here == fLookAhead in earlier      */
-                                    /*              state, at actual boundary pos.        */
-    int16_t          fLookAhead;    /*  Non-zero if this row is for a state that          */
-                                    /*    corresponds to a '/' in the rule source.        */
-                                    /*    Value is the same as the fAccepting             */
-                                    /*      value for the rule (which will appear         */
-                                    /*      in a different state.                         */
-    int16_t          fTagIdx;       /*  Non-zero if this row covers a {tagged} position   */
-                                    /*     from a rule.  Value is the index in the        */
-                                    /*     StatusTable of the set of matching             */
-                                    /*     tags (rule status values)                      */
-    int16_t          fReserved;
-    uint16_t         fNextState[2]; /*  Next State, indexed by char category.             */
-                                    /*  This array does not have two elements             */
-                                    /*    Array Size is actually fData->fHeader->fCatCount         */
-                                    /*    CAUTION:  see RBBITableBuilder::getTableSize()  */
-                                    /*              before changing anything here.        */
-};
-
-
-struct RBBIStateTable {
-    uint32_t         fNumStates;    /*  Number of states.                                 */
-    uint32_t         fRowLen;       /*  Length of a state table row, in bytes.            */
-    uint32_t         fFlags;        /*  Option Flags for this state table                 */
-    uint32_t         fReserved;     /*  reserved                                          */
-    char             fTableData[4]; /*  First RBBIStateTableRow begins here.              */
-                                    /*    (making it char[] simplifies ugly address       */
-                                    /*     arithmetic for indexing variable length rows.) */
-};
-
-typedef enum {
-    RBBI_LOOKAHEAD_HARD_BREAK = 1,
-    RBBI_BOF_REQUIRED = 2
-} RBBIStateTableFlags;
-
-
-/*                                        */
-/*   The reference counting wrapper class */
-/*                                        */
-class RBBIDataWrapper : public UMemory {
-public:
-    enum EDontAdopt {
-        kDontAdopt
-    };
-    RBBIDataWrapper(const RBBIDataHeader *data, UErrorCode &status);
-    RBBIDataWrapper(const RBBIDataHeader *data, enum EDontAdopt dontAdopt, UErrorCode &status);
-    RBBIDataWrapper(UDataMemory* udm, UErrorCode &status);
-    ~RBBIDataWrapper();
-
-    void                  init(const RBBIDataHeader *data, UErrorCode &status);
-    RBBIDataWrapper      *addReference();
-    void                  removeReference();
-    UBool                 operator ==(const RBBIDataWrapper &other) const;
-    int32_t               hashCode();
-    const UnicodeString  &getRuleSourceString() const;
-#ifdef RBBI_DEBUG
-    void                  printData();
-    void                  printTable(const char *heading, const RBBIStateTable *table);
-#else
-    #define printData()
-    #define printTable(heading, table)
-#endif
-
-    /*                                     */
-    /*   Pointers to items within the data */
-    /*                                     */
-    const RBBIDataHeader     *fHeader;
-    const RBBIStateTable     *fForwardTable;
-    const RBBIStateTable     *fReverseTable;
-    const RBBIStateTable     *fSafeFwdTable;
-    const RBBIStateTable     *fSafeRevTable;
-    const UChar              *fRuleSource;
-    const int32_t            *fRuleStatusTable; 
-
-    /* number of int32_t values in the rule status table.   Used to sanity check indexing */
-    int32_t             fStatusMaxIdx;
-
-    UTrie               fTrie;
-
-private:
-    int32_t             fRefCount;
-    UDataMemory        *fUDataMem;
-    UnicodeString       fRuleString;
-    UBool               fDontFreeData;
-
-    RBBIDataWrapper(const RBBIDataWrapper &other); /*  forbid copying of this class */
-    RBBIDataWrapper &operator=(const RBBIDataWrapper &other); /*  forbid copying of this class */
-};
-
-
-
-U_NAMESPACE_END
-
-#endif /* C++ */
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbinode.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbinode.cpp
deleted file mode 100644
index 49e0ad3..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbinode.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-***************************************************************************
-*   Copyright (C) 2002-2008 International Business Machines Corporation   *
-*   and others. All rights reserved.                                      *
-***************************************************************************
-*/
-
-//
-//  File:  rbbinode.cpp
-//
-//         Implementation of class RBBINode, which represents a node in the
-//         tree generated when parsing the Rules Based Break Iterator rules.
-//
-//         This "Class" is actually closer to a struct.
-//         Code using it is expected to directly access fields much of the time.
-//
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/unistr.h"
-#include "unicode/uniset.h"
-#include "unicode/uchar.h"
-#include "unicode/parsepos.h"
-#include "uvector.h"
-
-#include "rbbirb.h"
-#include "rbbinode.h"
-
-#include "uassert.h"
-
-
-U_NAMESPACE_BEGIN
-
-#ifdef RBBI_DEBUG
-static int  gLastSerial = 0;
-#endif
-
-
-//-------------------------------------------------------------------------
-//
-//    Constructor.   Just set the fields to reasonable default values.
-//
-//-------------------------------------------------------------------------
-RBBINode::RBBINode(NodeType t) : UMemory() {
-#ifdef RBBI_DEBUG
-    fSerialNum    = ++gLastSerial;
-#endif
-    fType         = t;
-    fParent       = NULL;
-    fLeftChild    = NULL;
-    fRightChild   = NULL;
-    fInputSet     = NULL;
-    fFirstPos     = 0;
-    fLastPos      = 0;
-    fNullable     = FALSE;
-    fLookAheadEnd = FALSE;
-    fVal          = 0;
-    fPrecedence   = precZero;
-
-    UErrorCode     status = U_ZERO_ERROR;
-    fFirstPosSet  = new UVector(status);  // TODO - get a real status from somewhere
-    fLastPosSet   = new UVector(status);
-    fFollowPos    = new UVector(status);
-    if      (t==opCat)    {fPrecedence = precOpCat;}
-    else if (t==opOr)     {fPrecedence = precOpOr;}
-    else if (t==opStart)  {fPrecedence = precStart;}
-    else if (t==opLParen) {fPrecedence = precLParen;}
-
-}
-
-
-RBBINode::RBBINode(const RBBINode &other) : UMemory(other) {
-#ifdef RBBI_DEBUG
-    fSerialNum   = ++gLastSerial;
-#endif
-    fType        = other.fType;
-    fParent      = NULL;
-    fLeftChild   = NULL;
-    fRightChild  = NULL;
-    fInputSet    = other.fInputSet;
-    fPrecedence  = other.fPrecedence;
-    fText        = other.fText;
-    fFirstPos    = other.fFirstPos;
-    fLastPos     = other.fLastPos;
-    fNullable    = other.fNullable;
-    fVal         = other.fVal;
-    UErrorCode     status = U_ZERO_ERROR;
-    fFirstPosSet = new UVector(status);   // TODO - get a real status from somewhere
-    fLastPosSet  = new UVector(status);
-    fFollowPos   = new UVector(status);
-}
-
-
-//-------------------------------------------------------------------------
-//
-//    Destructor.   Deletes both this node AND any child nodes,
-//                  except in the case of variable reference nodes.  For
-//                  these, the l. child points back to the definition, which
-//                  is common for all references to the variable, meaning
-//                  it can't be deleted here.
-//
-//-------------------------------------------------------------------------
-RBBINode::~RBBINode() {
-    // printf("deleting node %8x   serial %4d\n", this, this->fSerialNum);
-    delete fInputSet;
-    fInputSet = NULL;
-
-    switch (this->fType) {
-    case varRef:
-    case setRef:
-        // for these node types, multiple instances point to the same "children"
-        // Storage ownership of children handled elsewhere.  Don't delete here.
-        break;
-
-    default:
-        delete        fLeftChild;
-        fLeftChild =   NULL;
-        delete        fRightChild;
-        fRightChild = NULL;
-    }
-
-
-    delete fFirstPosSet;
-    delete fLastPosSet;
-    delete fFollowPos;
-
-}
-
-
-//-------------------------------------------------------------------------
-//
-//    cloneTree     Make a copy of the subtree rooted at this node.
-//                  Discard any variable references encountered along the way,
-//                  and replace with copies of the variable's definitions.
-//                  Used to replicate the expression underneath variable
-//                  references in preparation for generating the DFA tables.
-//
-//-------------------------------------------------------------------------
-RBBINode *RBBINode::cloneTree() {
-    RBBINode    *n;
-
-    if (fType == RBBINode::varRef) {
-        // If the current node is a variable reference, skip over it
-        //   and clone the definition of the variable instead.
-        n = fLeftChild->cloneTree();
-    } else if (fType == RBBINode::uset) {
-        n = this;
-    } else {
-        n = new RBBINode(*this);
-        // Check for null pointer.
-        if (n != NULL) {
-            if (fLeftChild != NULL) {
-                n->fLeftChild          = fLeftChild->cloneTree();
-                n->fLeftChild->fParent = n;
-            }
-            if (fRightChild != NULL) {
-                n->fRightChild          = fRightChild->cloneTree();
-                n->fRightChild->fParent = n;
-            }
-        }
-    }
-    return n;
-}
-
-
-
-//-------------------------------------------------------------------------
-//
-//   flattenVariables   Walk a parse tree, replacing any variable
-//                      references with a copy of the variable's definition.
-//                      Aside from variables, the tree is not changed.
-//
-//                      Return the root of the tree.  If the root was not a variable
-//                      reference, it remains unchanged - the root we started with
-//                      is the root we return.  If, however, the root was a variable
-//                      reference, the root of the newly cloned replacement tree will
-//                      be returned, and the original tree deleted.
-//
-//                      This function works by recursively walking the tree
-//                      without doing anything until a variable reference is
-//                      found, then calling cloneTree() at that point.  Any
-//                      nested references are handled by cloneTree(), not here.
-//
-//-------------------------------------------------------------------------
-RBBINode *RBBINode::flattenVariables() {
-    if (fType == varRef) {
-        RBBINode *retNode = fLeftChild->cloneTree();
-        delete this;
-        return retNode;
-    }
-
-    if (fLeftChild != NULL) {
-        fLeftChild = fLeftChild->flattenVariables();
-        fLeftChild->fParent  = this;
-    }
-    if (fRightChild != NULL) {
-        fRightChild = fRightChild->flattenVariables();
-        fRightChild->fParent = this;
-    }
-    return this;
-}
-
-
-//-------------------------------------------------------------------------
-//
-//  flattenSets    Walk the parse tree, replacing any nodes of type setRef
-//                 with a copy of the expression tree for the set.  A set's
-//                 equivalent expression tree is precomputed and saved as
-//                 the left child of the uset node.
-//
-//-------------------------------------------------------------------------
-void RBBINode::flattenSets() {
-    U_ASSERT(fType != setRef);
-
-    if (fLeftChild != NULL) {
-        if (fLeftChild->fType==setRef) {
-            RBBINode *setRefNode = fLeftChild;
-            RBBINode *usetNode   = setRefNode->fLeftChild;
-            RBBINode *replTree   = usetNode->fLeftChild;
-            fLeftChild           = replTree->cloneTree();
-            fLeftChild->fParent  = this;
-            delete setRefNode;
-        } else {
-            fLeftChild->flattenSets();
-        }
-    }
-
-    if (fRightChild != NULL) {
-        if (fRightChild->fType==setRef) {
-            RBBINode *setRefNode = fRightChild;
-            RBBINode *usetNode   = setRefNode->fLeftChild;
-            RBBINode *replTree   = usetNode->fLeftChild;
-            fRightChild           = replTree->cloneTree();
-            fRightChild->fParent  = this;
-            delete setRefNode;
-        } else {
-            fRightChild->flattenSets();
-        }
-    }
-}
-
-
-
-//-------------------------------------------------------------------------
-//
-//   findNodes()     Locate all the nodes of the specified type, starting
-//                   at the specified root.
-//
-//-------------------------------------------------------------------------
-void   RBBINode::findNodes(UVector *dest, RBBINode::NodeType kind, UErrorCode &status) {
-    /* test for buffer overflows */
-    if (U_FAILURE(status)) {
-        return;
-    }
-    if (fType == kind) {
-        dest->addElement(this, status);
-    }
-    if (fLeftChild != NULL) {
-        fLeftChild->findNodes(dest, kind, status);
-    }
-    if (fRightChild != NULL) {
-        fRightChild->findNodes(dest, kind, status);
-    }
-}
-
-
-//-------------------------------------------------------------------------
-//
-//    print.         Print out a single node, for debugging.
-//
-//-------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBINode::printNode() {
-    static const char * const nodeTypeNames[] = {
-                "setRef",
-                "uset",
-                "varRef",
-                "leafChar",
-                "lookAhead",
-                "tag",
-                "endMark",
-                "opStart",
-                "opCat",
-                "opOr",
-                "opStar",
-                "opPlus",
-                "opQuestion",
-                "opBreak",
-                "opReverse",
-                "opLParen"
-    };
-
-    if (this==NULL) {
-        RBBIDebugPrintf("%10p", (void *)this);
-    } else {
-        RBBIDebugPrintf("%10p  %12s  %10p  %10p  %10p      %4d     %6d   %d ",
-            (void *)this, nodeTypeNames[fType], (void *)fParent, (void *)fLeftChild, (void *)fRightChild,
-            fSerialNum, fFirstPos, fVal);
-        if (fType == varRef) {
-            RBBI_DEBUG_printUnicodeString(fText);
-        }
-    }
-    RBBIDebugPrintf("\n");
-}
-#endif
-
-
-#ifdef RBBI_DEBUG
-U_CFUNC void RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth)
-{
-    int i;
-    for (i=0; i<s.length(); i++) {
-        RBBIDebugPrintf("%c", s.charAt(i));
-        // putc(s.charAt(i), stdout);
-    }
-    for (i=s.length(); i<minWidth; i++) {
-        RBBIDebugPrintf(" ");
-    }
-}
-#endif
-
-
-//-------------------------------------------------------------------------
-//
-//    print.         Print out the tree of nodes rooted at "this"
-//
-//-------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBINode::printTree(UBool printHeading) {
-    if (printHeading) {
-        RBBIDebugPrintf( "-------------------------------------------------------------------\n"
-                         "    Address       type         Parent   LeftChild  RightChild    serial  position value\n"
-              );
-    }
-    this->printNode();
-    if (this != NULL) {
-        // Only dump the definition under a variable reference if asked to.
-        // Unconditinally dump children of all other node types.
-        if (fType != varRef) {
-            if (fLeftChild != NULL) {
-                fLeftChild->printTree(FALSE);
-            }
-            
-            if (fRightChild != NULL) {
-                fRightChild->printTree(FALSE);
-            }
-        }
-    }
-}
-#endif
-
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbinode.h b/src/third_party/mozjs/intl/icu/source/common/rbbinode.h
deleted file mode 100644
index 0cbf6a7..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbinode.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/********************************************************************
- * COPYRIGHT:
- * Copyright (c) 2001-2006, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************/
-
-#ifndef RBBINODE_H
-#define RBBINODE_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
-//
-//  class RBBINode
-//
-//                    Represents a node in the parse tree generated when reading
-//                    a rule file.
-//
-
-U_NAMESPACE_BEGIN
-
-class    UnicodeSet;
-class    UVector;
-
-class RBBINode : public UMemory {
-    public:
-        enum NodeType {
-            setRef,
-            uset,
-            varRef,
-            leafChar,
-            lookAhead,
-            tag,
-            endMark,
-            opStart,
-            opCat,
-            opOr,
-            opStar,
-            opPlus,
-            opQuestion,
-            opBreak,
-            opReverse,
-            opLParen
-        };
-
-        enum OpPrecedence {      
-            precZero,
-            precStart,
-            precLParen,
-            precOpOr,
-            precOpCat
-        };
-            
-        NodeType      fType;
-        RBBINode      *fParent;
-        RBBINode      *fLeftChild;
-        RBBINode      *fRightChild;
-        UnicodeSet    *fInputSet;           // For uset nodes only.
-        OpPrecedence  fPrecedence;          // For binary ops only.
-        
-        UnicodeString fText;                // Text corresponding to this node.
-                                            //   May be lazily evaluated when (if) needed
-                                            //   for some node types.
-        int           fFirstPos;            // Position in the rule source string of the
-                                            //   first text associated with the node.
-                                            //   If there's a left child, this will be the same
-                                            //   as that child's left pos.
-        int           fLastPos;             //  Last position in the rule source string
-                                            //    of any text associated with this node.
-                                            //    If there's a right child, this will be the same
-                                            //    as that child's last postion.
-
-        UBool         fNullable;            // See Aho.
-        int32_t       fVal;                 // For leafChar nodes, the value.
-                                            //   Values are the character category,
-                                            //   corresponds to columns in the final
-                                            //   state transition table.
-
-        UBool         fLookAheadEnd;        // For endMark nodes, set TRUE if
-                                            //   marking the end of a look-ahead rule.
-
-        UVector       *fFirstPosSet;
-        UVector       *fLastPosSet;         // TODO: rename fFirstPos & fLastPos to avoid confusion.
-        UVector       *fFollowPos;
-
-
-        RBBINode(NodeType t);
-        RBBINode(const RBBINode &other);
-        ~RBBINode();
-        
-        RBBINode    *cloneTree();
-        RBBINode    *flattenVariables();
-        void         flattenSets();
-        void         findNodes(UVector *dest, RBBINode::NodeType kind, UErrorCode &status);
-
-#ifdef RBBI_DEBUG
-        void        printNode();
-        void        printTree(UBool withHeading);
-#endif
-
-    private:
-        RBBINode &operator = (const RBBINode &other); // No defs.
-        UBool operator == (const RBBINode &other);    // Private, so these functions won't accidently be used.
-
-#ifdef RBBI_DEBUG
-        int           fSerialNum;           //  Debugging aids.
-#endif
-};
-
-#ifdef RBBI_DEBUG
-U_CFUNC void 
-RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth=0);
-#endif
-
-U_NAMESPACE_END
-
-#endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbirb.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbirb.cpp
deleted file mode 100644
index 12de395..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbirb.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-//
-//  file:  rbbirb.cpp
-//
-//  Copyright (C) 2002-2011, International Business Machines Corporation and others.
-//  All Rights Reserved.
-//
-//  This file contains the RBBIRuleBuilder class implementation.  This is the main class for
-//    building (compiling) break rules into the tables required by the runtime
-//    RBBI engine.
-//
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/brkiter.h"
-#include "unicode/rbbi.h"
-#include "unicode/ubrk.h"
-#include "unicode/unistr.h"
-#include "unicode/uniset.h"
-#include "unicode/uchar.h"
-#include "unicode/uchriter.h"
-#include "unicode/parsepos.h"
-#include "unicode/parseerr.h"
-#include "cmemory.h"
-#include "cstring.h"
-
-#include "rbbirb.h"
-#include "rbbinode.h"
-
-#include "rbbiscan.h"
-#include "rbbisetb.h"
-#include "rbbitblb.h"
-#include "rbbidata.h"
-
-
-U_NAMESPACE_BEGIN
-
-
-//----------------------------------------------------------------------------------------
-//
-//  Constructor.
-//
-//----------------------------------------------------------------------------------------
-RBBIRuleBuilder::RBBIRuleBuilder(const UnicodeString   &rules,
-                                       UParseError     *parseErr,
-                                       UErrorCode      &status)
- : fRules(rules)
-{
-    fStatus = &status; // status is checked below
-    fParseError = parseErr;
-    fDebugEnv   = NULL;
-#ifdef RBBI_DEBUG
-    fDebugEnv   = getenv("U_RBBIDEBUG");
-#endif
-
-
-    fForwardTree        = NULL;
-    fReverseTree        = NULL;
-    fSafeFwdTree        = NULL;
-    fSafeRevTree        = NULL;
-    fDefaultTree        = &fForwardTree;
-    fForwardTables      = NULL;
-    fReverseTables      = NULL;
-    fSafeFwdTables      = NULL;
-    fSafeRevTables      = NULL;
-    fRuleStatusVals     = NULL;
-    fChainRules         = FALSE;
-    fLBCMNoChain        = FALSE;
-    fLookAheadHardBreak = FALSE;
-    fUSetNodes          = NULL;
-    fRuleStatusVals     = NULL;
-    fScanner            = NULL;
-    fSetBuilder         = NULL;
-    if (parseErr) {
-        uprv_memset(parseErr, 0, sizeof(UParseError));
-    }
-
-    if (U_FAILURE(status)) {
-        return;
-    }
-
-    fUSetNodes          = new UVector(status); // bcos status gets overwritten here
-    fRuleStatusVals     = new UVector(status);
-    fScanner            = new RBBIRuleScanner(this);
-    fSetBuilder         = new RBBISetBuilder(this);
-    if (U_FAILURE(status)) {
-        return;
-    }
-    if(fSetBuilder == 0 || fScanner == 0 || fUSetNodes == 0 || fRuleStatusVals == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-    }
-}
-
-
-
-//----------------------------------------------------------------------------------------
-//
-//  Destructor
-//
-//----------------------------------------------------------------------------------------
-RBBIRuleBuilder::~RBBIRuleBuilder() {
-
-    int        i;
-    for (i=0; ; i++) {
-        RBBINode *n = (RBBINode *)fUSetNodes->elementAt(i);
-        if (n==NULL) {
-            break;
-        }
-        delete n;
-    }
-
-    delete fUSetNodes;
-    delete fSetBuilder;
-    delete fForwardTables;
-    delete fReverseTables;
-    delete fSafeFwdTables;
-    delete fSafeRevTables;
-
-    delete fForwardTree;
-    delete fReverseTree;
-    delete fSafeFwdTree;
-    delete fSafeRevTree;
-    delete fScanner;
-    delete fRuleStatusVals;
-}
-
-
-
-
-
-//----------------------------------------------------------------------------------------
-//
-//   flattenData() -  Collect up the compiled RBBI rule data and put it into
-//                    the format for saving in ICU data files,
-//                    which is also the format needed by the RBBI runtime engine.
-//
-//----------------------------------------------------------------------------------------
-static int32_t align8(int32_t i) {return (i+7) & 0xfffffff8;}
-
-RBBIDataHeader *RBBIRuleBuilder::flattenData() {
-    int32_t    i;
-
-    if (U_FAILURE(*fStatus)) {
-        return NULL;
-    }
-
-    // Remove comments and whitespace from the rules to make it smaller.
-    UnicodeString strippedRules((const UnicodeString&)RBBIRuleScanner::stripRules(fRules));
-
-    // Calculate the size of each section in the data.
-    //   Sizes here are padded up to a multiple of 8 for better memory alignment.
-    //   Sections sizes actually stored in the header are for the actual data
-    //     without the padding.
-    //
-    int32_t headerSize        = align8(sizeof(RBBIDataHeader));
-    int32_t forwardTableSize  = align8(fForwardTables->getTableSize());
-    int32_t reverseTableSize  = align8(fReverseTables->getTableSize());
-    int32_t safeFwdTableSize  = align8(fSafeFwdTables->getTableSize());
-    int32_t safeRevTableSize  = align8(fSafeRevTables->getTableSize());
-    int32_t trieSize          = align8(fSetBuilder->getTrieSize());
-    int32_t statusTableSize   = align8(fRuleStatusVals->size() * sizeof(int32_t));
-    int32_t rulesSize         = align8((strippedRules.length()+1) * sizeof(UChar));
-
-    int32_t         totalSize = headerSize + forwardTableSize + reverseTableSize
-                                + safeFwdTableSize + safeRevTableSize 
-                                + statusTableSize + trieSize + rulesSize;
-
-    RBBIDataHeader  *data     = (RBBIDataHeader *)uprv_malloc(totalSize);
-    if (data == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    uprv_memset(data, 0, totalSize);
-
-
-    data->fMagic            = 0xb1a0;
-    data->fFormatVersion[0] = 3;
-    data->fFormatVersion[1] = 1;
-    data->fFormatVersion[2] = 0;
-    data->fFormatVersion[3] = 0;
-    data->fLength           = totalSize;
-    data->fCatCount         = fSetBuilder->getNumCharCategories();
-
-    data->fFTable        = headerSize;
-    data->fFTableLen     = forwardTableSize;
-    data->fRTable        = data->fFTable  + forwardTableSize;
-    data->fRTableLen     = reverseTableSize;
-    data->fSFTable       = data->fRTable  + reverseTableSize;
-    data->fSFTableLen    = safeFwdTableSize;
-    data->fSRTable       = data->fSFTable + safeFwdTableSize;
-    data->fSRTableLen    = safeRevTableSize;
-
-    data->fTrie          = data->fSRTable + safeRevTableSize;
-    data->fTrieLen       = fSetBuilder->getTrieSize();
-    data->fStatusTable   = data->fTrie    + trieSize;
-    data->fStatusTableLen= statusTableSize;
-    data->fRuleSource    = data->fStatusTable + statusTableSize;
-    data->fRuleSourceLen = strippedRules.length() * sizeof(UChar);
-
-    uprv_memset(data->fReserved, 0, sizeof(data->fReserved));
-
-    fForwardTables->exportTable((uint8_t *)data + data->fFTable);
-    fReverseTables->exportTable((uint8_t *)data + data->fRTable);
-    fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable);
-    fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable);
-    fSetBuilder->serializeTrie ((uint8_t *)data + data->fTrie);
-
-    int32_t *ruleStatusTable = (int32_t *)((uint8_t *)data + data->fStatusTable);
-    for (i=0; i<fRuleStatusVals->size(); i++) {
-        ruleStatusTable[i] = fRuleStatusVals->elementAti(i);
-    }
-
-    strippedRules.extract((UChar *)((uint8_t *)data+data->fRuleSource), rulesSize/2+1, *fStatus);
-
-    return data;
-}
-
-
-
-
-
-
-//----------------------------------------------------------------------------------------
-//
-//  createRuleBasedBreakIterator    construct from source rules that are passed in
-//                                  in a UnicodeString
-//
-//----------------------------------------------------------------------------------------
-BreakIterator *
-RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString    &rules,
-                                    UParseError      *parseError,
-                                    UErrorCode       &status)
-{
-    // status checked below
-
-    //
-    // Read the input rules, generate a parse tree, symbol table,
-    // and list of all Unicode Sets referenced by the rules.
-    //
-    RBBIRuleBuilder  builder(rules, parseError, status);
-    if (U_FAILURE(status)) { // status checked here bcos build below doesn't
-        return NULL;
-    }
-    builder.fScanner->parse();
-
-    //
-    // UnicodeSet processing.
-    //    Munge the Unicode Sets to create a set of character categories.
-    //    Generate the mapping tables (TRIE) from input 32-bit characters to
-    //    the character categories.
-    //
-    builder.fSetBuilder->build();
-
-
-    //
-    //   Generate the DFA state transition table.
-    //
-    builder.fForwardTables = new RBBITableBuilder(&builder, &builder.fForwardTree);
-    builder.fReverseTables = new RBBITableBuilder(&builder, &builder.fReverseTree);
-    builder.fSafeFwdTables = new RBBITableBuilder(&builder, &builder.fSafeFwdTree);
-    builder.fSafeRevTables = new RBBITableBuilder(&builder, &builder.fSafeRevTree);
-    if (builder.fForwardTables == NULL || builder.fReverseTables == NULL ||
-        builder.fSafeFwdTables == NULL || builder.fSafeRevTables == NULL)
-    {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        delete builder.fForwardTables; builder.fForwardTables = NULL;
-        delete builder.fReverseTables; builder.fReverseTables = NULL;
-        delete builder.fSafeFwdTables; builder.fSafeFwdTables = NULL;
-        delete builder.fSafeRevTables; builder.fSafeRevTables = NULL;
-        return NULL;
-    }
-
-    builder.fForwardTables->build();
-    builder.fReverseTables->build();
-    builder.fSafeFwdTables->build();
-    builder.fSafeRevTables->build();
-
-#ifdef RBBI_DEBUG
-    if (builder.fDebugEnv && uprv_strstr(builder.fDebugEnv, "states")) {
-        builder.fForwardTables->printRuleStatusTable();
-    }
-#endif
-
-    //
-    //   Package up the compiled data into a memory image
-    //      in the run-time format.
-    //
-    RBBIDataHeader *data = builder.flattenData(); // returns NULL if error
-    if (U_FAILURE(*builder.fStatus)) {
-        return NULL;
-    }
-
-
-    //
-    //  Clean up the compiler related stuff
-    //
-
-
-    //
-    //  Create a break iterator from the compiled rules.
-    //     (Identical to creation from stored pre-compiled rules)
-    //
-    // status is checked after init in construction.
-    RuleBasedBreakIterator *This = new RuleBasedBreakIterator(data, status);
-    if (U_FAILURE(status)) {
-        delete This;
-        This = NULL;
-    } 
-    else if(This == NULL) { // test for NULL
-        status = U_MEMORY_ALLOCATION_ERROR;
-    }
-    return This;
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbirb.h b/src/third_party/mozjs/intl/icu/source/common/rbbirb.h
deleted file mode 100644
index deb9b0e..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbirb.h
+++ /dev/null
@@ -1,211 +0,0 @@
-//
-//  rbbirb.h
-//
-//  Copyright (C) 2002-2008, International Business Machines Corporation and others.
-//  All Rights Reserved.
-//
-//  This file contains declarations for several classes from the
-//    Rule Based Break Iterator rule builder.
-//
-
-
-#ifndef RBBIRB_H
-#define RBBIRB_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/rbbi.h"
-#include "unicode/uniset.h"
-#include "unicode/parseerr.h"
-#include "uhash.h"
-#include "uvector.h"
-#include "unicode/symtable.h"// For UnicodeSet parsing, is the interface that
-                          //    looks up references to $variables within a set.
-
-
-
-U_NAMESPACE_BEGIN
-
-class               RBBIRuleScanner;
-struct              RBBIRuleTableEl;
-class               RBBISetBuilder;
-class               RBBINode;
-class               RBBITableBuilder;
-
-
-
-//--------------------------------------------------------------------------------
-//
-//   RBBISymbolTable.    Implements SymbolTable interface that is used by the
-//                       UnicodeSet parser to resolve references to $variables.
-//
-//--------------------------------------------------------------------------------
-class RBBISymbolTableEntry : public UMemory { // The symbol table hash table contains one
-public:                                       //   of these structs for each entry.
-    RBBISymbolTableEntry();
-    UnicodeString          key;
-    RBBINode               *val;
-    ~RBBISymbolTableEntry();
-
-private:
-    RBBISymbolTableEntry(const RBBISymbolTableEntry &other); // forbid copying of this class
-    RBBISymbolTableEntry &operator=(const RBBISymbolTableEntry &other); // forbid copying of this class
-};
-
-
-class RBBISymbolTable : public UMemory, public SymbolTable {
-private:
-    const UnicodeString      &fRules;
-    UHashtable               *fHashTable;
-    RBBIRuleScanner          *fRuleScanner;
-
-    // These next two fields are part of the mechanism for passing references to
-    //   already-constructed UnicodeSets back to the UnicodeSet constructor
-    //   when the pattern includes $variable references.
-    const UnicodeString      ffffString;      // = "/uffff"
-    UnicodeSet              *fCachedSetLookup;
-
-public:
-    //  API inherited from class SymbolTable
-    virtual const UnicodeString*  lookup(const UnicodeString& s) const;
-    virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const;
-    virtual UnicodeString parseReference(const UnicodeString& text,
-                                         ParsePosition& pos, int32_t limit) const;
-
-    //  Additional Functions
-    RBBISymbolTable(RBBIRuleScanner *, const UnicodeString &fRules, UErrorCode &status);
-    virtual ~RBBISymbolTable();
-
-    virtual RBBINode *lookupNode(const UnicodeString &key) const;
-    virtual void      addEntry  (const UnicodeString &key, RBBINode *val, UErrorCode &err);
-
-#ifdef RBBI_DEBUG
-    virtual void      rbbiSymtablePrint() const;
-#else
-    // A do-nothing inline function for non-debug builds.  Member funcs can't be empty
-    //  or the call sites won't compile.
-    int32_t fFakeField;
-    #define rbbiSymtablePrint() fFakeField=0; 
-#endif
-
-private:
-    RBBISymbolTable(const RBBISymbolTable &other); // forbid copying of this class
-    RBBISymbolTable &operator=(const RBBISymbolTable &other); // forbid copying of this class
-};
-
-
-//--------------------------------------------------------------------------------
-//
-//  class RBBIRuleBuilder       The top-level class handling RBBI rule compiling.
-//
-//--------------------------------------------------------------------------------
-class RBBIRuleBuilder : public UMemory {
-public:
-
-    //  Create a rule based break iterator from a set of rules.
-    //  This function is the main entry point into the rule builder.  The
-    //   public ICU API for creating RBBIs uses this function to do the actual work.
-    //
-    static BreakIterator * createRuleBasedBreakIterator( const UnicodeString    &rules,
-                                    UParseError      *parseError,
-                                    UErrorCode       &status);
-
-public:
-    // The "public" functions and data members that appear below are accessed
-    //  (and shared) by the various parts that make up the rule builder.  They
-    //  are NOT intended to be accessed by anything outside of the
-    //  rule builder implementation.
-    RBBIRuleBuilder(const UnicodeString  &rules,
-                    UParseError          *parseErr,
-                    UErrorCode           &status
-        );
-
-    virtual    ~RBBIRuleBuilder();
-    char                          *fDebugEnv;        // controls debug trace output
-    UErrorCode                    *fStatus;          // Error reporting.  Keeping status
-    UParseError                   *fParseError;      //   here avoids passing it everywhere.
-    const UnicodeString           &fRules;           // The rule string that we are compiling
-
-    RBBIRuleScanner               *fScanner;         // The scanner.
-    RBBINode                      *fForwardTree;     // The parse trees, generated by the scanner,
-    RBBINode                      *fReverseTree;     //   then manipulated by subsequent steps.
-    RBBINode                      *fSafeFwdTree;
-    RBBINode                      *fSafeRevTree;
-
-    RBBINode                      **fDefaultTree;    // For rules not qualified with a !
-                                                     //   the tree to which they belong to.
-
-    UBool                         fChainRules;       // True for chained Unicode TR style rules.
-                                                     // False for traditional regexp rules.
-
-    UBool                         fLBCMNoChain;      // True:  suppress chaining of rules on
-                                                     //   chars with LineBreak property == CM.
-
-    UBool                         fLookAheadHardBreak;  // True:  Look ahead matches cause an
-                                                     // immediate break, no continuing for the
-                                                     // longest match.
-
-    RBBISetBuilder                *fSetBuilder;      // Set and Character Category builder.
-    UVector                       *fUSetNodes;       // Vector of all uset nodes.
-
-    RBBITableBuilder              *fForwardTables;   // State transition tables
-    RBBITableBuilder              *fReverseTables;
-    RBBITableBuilder              *fSafeFwdTables;
-    RBBITableBuilder              *fSafeRevTables;
-
-    UVector                       *fRuleStatusVals;  // The values that can be returned
-                                                     //   from getRuleStatus().
-
-    RBBIDataHeader                *flattenData();    // Create the flattened (runtime format)
-                                                     // data tables..
-private:
-    RBBIRuleBuilder(const RBBIRuleBuilder &other); // forbid copying of this class
-    RBBIRuleBuilder &operator=(const RBBIRuleBuilder &other); // forbid copying of this class
-};
-
-
-
-
-//----------------------------------------------------------------------------
-//
-//   RBBISetTableEl   is an entry in the hash table of UnicodeSets that have
-//                    been encountered.  The val Node will be of nodetype uset
-//                    and contain pointers to the actual UnicodeSets.
-//                    The Key is the source string for initializing the set.
-//
-//                    The hash table is used to avoid creating duplicate
-//                    unnamed (not $var references) UnicodeSets.
-//
-//                    Memory Management:
-//                       The Hash Table owns these RBBISetTableEl structs and
-//                            the key strings.  It does NOT own the val nodes.
-//
-//----------------------------------------------------------------------------
-struct RBBISetTableEl {
-    UnicodeString *key;
-    RBBINode      *val;
-};
-
-
-//----------------------------------------------------------------------------
-//
-//   RBBIDebugPrintf    Printf equivalent, for debugging output.
-//                      Conditional compilation of the implementation lets us
-//                      get rid of the stdio dependency in environments where it
-//                      is unavailable.
-//
-//----------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-#include <stdio.h>
-#define RBBIDebugPrintf printf
-#define RBBIDebugPuts puts
-#else
-#undef RBBIDebugPrintf 
-#define RBBIDebugPuts(arg)
-#endif
-
-U_NAMESPACE_END
-#endif
-
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbirpt.h b/src/third_party/mozjs/intl/icu/source/common/rbbirpt.h
deleted file mode 100644
index deea57b..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbirpt.h
+++ /dev/null
@@ -1,275 +0,0 @@
-//---------------------------------------------------------------------------------
-//
-// Generated Header File.  Do not edit by hand.
-//    This file contains the state table for the ICU Rule Based Break Iterator
-//    rule parser.
-//    It is generated by the Perl script "rbbicst.pl" from
-//    the rule parser state definitions file "rbbirpt.txt".
-//
-//   Copyright (C) 2002-2005 International Business Machines Corporation 
-//   and others. All rights reserved.  
-//
-//---------------------------------------------------------------------------------
-#ifndef RBBIRPT_H
-#define RBBIRPT_H
-
-U_NAMESPACE_BEGIN
-//
-// Character classes for RBBI rule scanning.
-//
-    static const uint8_t kRuleSet_digit_char = 128;
-    static const uint8_t kRuleSet_name_char = 129;
-    static const uint8_t kRuleSet_name_start_char = 130;
-    static const uint8_t kRuleSet_rule_char = 131;
-    static const uint8_t kRuleSet_white_space = 132;
-
-
-enum RBBI_RuleParseAction {
-    doCheckVarDef,
-    doDotAny,
-    doEndAssign,
-    doEndOfRule,
-    doEndVariableName,
-    doExit,
-    doExprCatOperator,
-    doExprFinished,
-    doExprOrOperator,
-    doExprRParen,
-    doExprStart,
-    doLParen,
-    doNOP,
-    doOptionEnd,
-    doOptionStart,
-    doReverseDir,
-    doRuleChar,
-    doRuleError,
-    doRuleErrorAssignExpr,
-    doScanUnicodeSet,
-    doSlash,
-    doStartAssign,
-    doStartTagValue,
-    doStartVariableName,
-    doTagDigit,
-    doTagExpectedError,
-    doTagValue,
-    doUnaryOpPlus,
-    doUnaryOpQuestion,
-    doUnaryOpStar,
-    doVariableNameExpectedErr,
-    rbbiLastAction};
-
-//-------------------------------------------------------------------------------
-//
-//  RBBIRuleTableEl    represents the structure of a row in the transition table
-//                     for the rule parser state machine.
-//-------------------------------------------------------------------------------
-struct RBBIRuleTableEl {
-    RBBI_RuleParseAction          fAction;
-    uint8_t                       fCharClass;       // 0-127:    an individual ASCII character
-                                                    // 128-255:  character class index
-    uint8_t                       fNextState;       // 0-250:    normal next-stat numbers
-                                                    // 255:      pop next-state from stack.
-    uint8_t                       fPushState;
-    UBool                         fNextChar;
-};
-
-static const struct RBBIRuleTableEl gRuleParseStateTable[] = {
-    {doNOP, 0, 0, 0, TRUE}
-    , {doExprStart, 254, 21, 8, FALSE}     //  1      start
-    , {doNOP, 132, 1,0,  TRUE}     //  2 
-    , {doExprStart, 36 /* $ */, 80, 90, FALSE}     //  3 
-    , {doNOP, 33 /* ! */, 11,0,  TRUE}     //  4 
-    , {doNOP, 59 /* ; */, 1,0,  TRUE}     //  5 
-    , {doNOP, 252, 0,0,  FALSE}     //  6 
-    , {doExprStart, 255, 21, 8, FALSE}     //  7 
-    , {doEndOfRule, 59 /* ; */, 1,0,  TRUE}     //  8      break-rule-end
-    , {doNOP, 132, 8,0,  TRUE}     //  9 
-    , {doRuleError, 255, 95,0,  FALSE}     //  10 
-    , {doNOP, 33 /* ! */, 13,0,  TRUE}     //  11      rev-option
-    , {doReverseDir, 255, 20, 8, FALSE}     //  12 
-    , {doOptionStart, 130, 15,0,  TRUE}     //  13      option-scan1
-    , {doRuleError, 255, 95,0,  FALSE}     //  14 
-    , {doNOP, 129, 15,0,  TRUE}     //  15      option-scan2
-    , {doOptionEnd, 255, 17,0,  FALSE}     //  16 
-    , {doNOP, 59 /* ; */, 1,0,  TRUE}     //  17      option-scan3
-    , {doNOP, 132, 17,0,  TRUE}     //  18 
-    , {doRuleError, 255, 95,0,  FALSE}     //  19 
-    , {doExprStart, 255, 21, 8, FALSE}     //  20      reverse-rule
-    , {doRuleChar, 254, 30,0,  TRUE}     //  21      term
-    , {doNOP, 132, 21,0,  TRUE}     //  22 
-    , {doRuleChar, 131, 30,0,  TRUE}     //  23 
-    , {doNOP, 91 /* [ */, 86, 30, FALSE}     //  24 
-    , {doLParen, 40 /* ( */, 21, 30, TRUE}     //  25 
-    , {doNOP, 36 /* $ */, 80, 29, FALSE}     //  26 
-    , {doDotAny, 46 /* . */, 30,0,  TRUE}     //  27 
-    , {doRuleError, 255, 95,0,  FALSE}     //  28 
-    , {doCheckVarDef, 255, 30,0,  FALSE}     //  29      term-var-ref
-    , {doNOP, 132, 30,0,  TRUE}     //  30      expr-mod
-    , {doUnaryOpStar, 42 /* * */, 35,0,  TRUE}     //  31 
-    , {doUnaryOpPlus, 43 /* + */, 35,0,  TRUE}     //  32 
-    , {doUnaryOpQuestion, 63 /* ? */, 35,0,  TRUE}     //  33 
-    , {doNOP, 255, 35,0,  FALSE}     //  34 
-    , {doExprCatOperator, 254, 21,0,  FALSE}     //  35      expr-cont
-    , {doNOP, 132, 35,0,  TRUE}     //  36 
-    , {doExprCatOperator, 131, 21,0,  FALSE}     //  37 
-    , {doExprCatOperator, 91 /* [ */, 21,0,  FALSE}     //  38 
-    , {doExprCatOperator, 40 /* ( */, 21,0,  FALSE}     //  39 
-    , {doExprCatOperator, 36 /* $ */, 21,0,  FALSE}     //  40 
-    , {doExprCatOperator, 46 /* . */, 21,0,  FALSE}     //  41 
-    , {doExprCatOperator, 47 /* / */, 47,0,  FALSE}     //  42 
-    , {doExprCatOperator, 123 /* { */, 59,0,  TRUE}     //  43 
-    , {doExprOrOperator, 124 /* | */, 21,0,  TRUE}     //  44 
-    , {doExprRParen, 41 /* ) */, 255,0,  TRUE}     //  45 
-    , {doExprFinished, 255, 255,0,  FALSE}     //  46 
-    , {doSlash, 47 /* / */, 49,0,  TRUE}     //  47      look-ahead
-    , {doNOP, 255, 95,0,  FALSE}     //  48 
-    , {doExprCatOperator, 254, 21,0,  FALSE}     //  49      expr-cont-no-slash
-    , {doNOP, 132, 35,0,  TRUE}     //  50 
-    , {doExprCatOperator, 131, 21,0,  FALSE}     //  51 
-    , {doExprCatOperator, 91 /* [ */, 21,0,  FALSE}     //  52 
-    , {doExprCatOperator, 40 /* ( */, 21,0,  FALSE}     //  53 
-    , {doExprCatOperator, 36 /* $ */, 21,0,  FALSE}     //  54 
-    , {doExprCatOperator, 46 /* . */, 21,0,  FALSE}     //  55 
-    , {doExprOrOperator, 124 /* | */, 21,0,  TRUE}     //  56 
-    , {doExprRParen, 41 /* ) */, 255,0,  TRUE}     //  57 
-    , {doExprFinished, 255, 255,0,  FALSE}     //  58 
-    , {doNOP, 132, 59,0,  TRUE}     //  59      tag-open
-    , {doStartTagValue, 128, 62,0,  FALSE}     //  60 
-    , {doTagExpectedError, 255, 95,0,  FALSE}     //  61 
-    , {doNOP, 132, 66,0,  TRUE}     //  62      tag-value
-    , {doNOP, 125 /* } */, 66,0,  FALSE}     //  63 
-    , {doTagDigit, 128, 62,0,  TRUE}     //  64 
-    , {doTagExpectedError, 255, 95,0,  FALSE}     //  65 
-    , {doNOP, 132, 66,0,  TRUE}     //  66      tag-close
-    , {doTagValue, 125 /* } */, 69,0,  TRUE}     //  67 
-    , {doTagExpectedError, 255, 95,0,  FALSE}     //  68 
-    , {doExprCatOperator, 254, 21,0,  FALSE}     //  69      expr-cont-no-tag
-    , {doNOP, 132, 69,0,  TRUE}     //  70 
-    , {doExprCatOperator, 131, 21,0,  FALSE}     //  71 
-    , {doExprCatOperator, 91 /* [ */, 21,0,  FALSE}     //  72 
-    , {doExprCatOperator, 40 /* ( */, 21,0,  FALSE}     //  73 
-    , {doExprCatOperator, 36 /* $ */, 21,0,  FALSE}     //  74 
-    , {doExprCatOperator, 46 /* . */, 21,0,  FALSE}     //  75 
-    , {doExprCatOperator, 47 /* / */, 47,0,  FALSE}     //  76 
-    , {doExprOrOperator, 124 /* | */, 21,0,  TRUE}     //  77 
-    , {doExprRParen, 41 /* ) */, 255,0,  TRUE}     //  78 
-    , {doExprFinished, 255, 255,0,  FALSE}     //  79 
-    , {doStartVariableName, 36 /* $ */, 82,0,  TRUE}     //  80      scan-var-name
-    , {doNOP, 255, 95,0,  FALSE}     //  81 
-    , {doNOP, 130, 84,0,  TRUE}     //  82      scan-var-start
-    , {doVariableNameExpectedErr, 255, 95,0,  FALSE}     //  83 
-    , {doNOP, 129, 84,0,  TRUE}     //  84      scan-var-body
-    , {doEndVariableName, 255, 255,0,  FALSE}     //  85 
-    , {doScanUnicodeSet, 91 /* [ */, 255,0,  TRUE}     //  86      scan-unicode-set
-    , {doScanUnicodeSet, 112 /* p */, 255,0,  TRUE}     //  87 
-    , {doScanUnicodeSet, 80 /* P */, 255,0,  TRUE}     //  88 
-    , {doNOP, 255, 95,0,  FALSE}     //  89 
-    , {doNOP, 132, 90,0,  TRUE}     //  90      assign-or-rule
-    , {doStartAssign, 61 /* = */, 21, 93, TRUE}     //  91 
-    , {doNOP, 255, 29, 8, FALSE}     //  92 
-    , {doEndAssign, 59 /* ; */, 1,0,  TRUE}     //  93      assign-end
-    , {doRuleErrorAssignExpr, 255, 95,0,  FALSE}     //  94 
-    , {doExit, 255, 95,0,  TRUE}     //  95      errorDeath
- };
-#ifdef RBBI_DEBUG
-static const char * const RBBIRuleStateNames[] = {    0,
-     "start",
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-     "break-rule-end",
-    0,
-    0,
-     "rev-option",
-    0,
-     "option-scan1",
-    0,
-     "option-scan2",
-    0,
-     "option-scan3",
-    0,
-    0,
-     "reverse-rule",
-     "term",
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-     "term-var-ref",
-     "expr-mod",
-    0,
-    0,
-    0,
-    0,
-     "expr-cont",
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-     "look-ahead",
-    0,
-     "expr-cont-no-slash",
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-     "tag-open",
-    0,
-    0,
-     "tag-value",
-    0,
-    0,
-    0,
-     "tag-close",
-    0,
-    0,
-     "expr-cont-no-tag",
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-     "scan-var-name",
-    0,
-     "scan-var-start",
-    0,
-     "scan-var-body",
-    0,
-     "scan-unicode-set",
-    0,
-    0,
-    0,
-     "assign-or-rule",
-    0,
-    0,
-     "assign-end",
-    0,
-     "errorDeath",
-    0};
-#endif
-
-U_NAMESPACE_END
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbirpt.txt b/src/third_party/mozjs/intl/icu/source/common/rbbirpt.txt
deleted file mode 100644
index 8e932a6..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbirpt.txt
+++ /dev/null
@@ -1,315 +0,0 @@
-
-#*****************************************************************************
-#
-#   Copyright (C) 2002-2003, International Business Machines Corporation and others.
-#   All Rights Reserved.
-#
-#*****************************************************************************
-#
-#  file:  rbbirpt.txt
-#  ICU Break Iterator Rule Parser State Table
-#
-#     This state table is used when reading and parsing a set of RBBI rules
-#     The rule parser uses a state machine; the data in this file define the
-#     state transitions that occur for each input character.
-#
-#     *** This file defines the RBBI rule grammar.   This is it.
-#     *** The determination of what is accepted is here.
-#
-#     This file is processed by a perl script "rbbicst.pl" to produce initialized C arrays
-#     that are then built with the rule parser.
-#
-
-#
-# Here is the syntax of the state definitions in this file:
-#
-#
-#StateName:
-#   input-char           n next-state           ^push-state     action    
-#   input-char           n next-state           ^push-state     action    
-#       |                |   |                      |             |
-#       |                |   |                      |             |--- action to be performed by state machine
-#       |                |   |                      |                  See function RBBIRuleScanner::doParseActions()
-#       |                |   |                      |
-#       |                |   |                      |--- Push this named state onto the state stack.
-#       |                |   |                           Later, when next state is specified as "pop",
-#       |                |   |                           the pushed state will become the current state.
-#       |                |   |
-#       |                |   |--- Transition to this state if the current input character matches the input
-#       |                |        character or char class in the left hand column.  "pop" causes the next
-#       |                |        state to be popped from the state stack.
-#       |                |
-#       |                |--- When making the state transition specified on this line, advance to the next
-#       |                     character from the input only if 'n' appears here.
-#       |
-#       |--- Character or named character classes to test for.  If the current character being scanned
-#            matches, peform the actions and go to the state specified on this line.
-#            The input character is tested sequentally, in the order written.  The characters and
-#            character classes tested for do not need to be mutually exclusive.  The first match wins.
-#            
-
-
-
-
-#
-#  start state, scan position is at the beginning of the rules file, or in between two rules.
-#
-start:
-    escaped                term                  ^break-rule-end    doExprStart                       
-    white_space          n start                     
-    '$'                    scan-var-name         ^assign-or-rule    doExprStart
-    '!'                  n rev-option                             
-    ';'                  n start                                                  # ignore empty rules.
-    eof                    exit              
-    default                term                  ^break-rule-end    doExprStart
-    
-#
-#  break-rule-end:  Returned from doing a break-rule expression.
-#
-break-rule-end:
-    ';'	                 n start                                    doEndOfRule
-    white_space          n break-rule-end
-    default                errorDeath                               doRuleError
-     
-
-#
-#   !               We've just scanned a '!', indicating either a !!key word flag or a
-#                   !Reverse rule.
-#
-rev-option:
-    '!'                  n option-scan1   
-    default                reverse-rule           ^break-rule-end   doReverseDir
-    
-option-scan1:
-    name_start_char      n option-scan2                             doOptionStart
-    default                errorDeath                               doRuleError
-    
-option-scan2:
-    name_char            n option-scan2
-    default                option-scan3                             doOptionEnd
-    
-option-scan3:
-    ';'                  n start 
-    white_space          n option-scan3 
-    default                errorDeath                               doRuleError 
-    
-
-reverse-rule:
-    default                term                   ^break-rule-end   doExprStart
-    
-    
-#
-#  term.  Eat through a single rule character, or a composite thing, which
-#         could be a parenthesized expression, a variable name, or a Unicode Set.
-#
-term:
-    escaped              n expr-mod                                 doRuleChar
-    white_space          n term
-    rule_char            n expr-mod                                 doRuleChar
-    '['                    scan-unicode-set      ^expr-mod
-    '('                  n term                  ^expr-mod          doLParen
-    '$'                    scan-var-name         ^term-var-ref
-    '.'                  n expr-mod                                 doDotAny
-    default                errorDeath                               doRuleError
-    
-    
-
-#
-#  term-var-ref   We've just finished scanning a reference to a $variable.
-#                 Check that the variable was defined.
-#                 The variable name scanning is in common with assignment statements,
-#                 so the check can't be done there.
-term-var-ref:
-    default                expr-mod                                 doCheckVarDef
-    
-    
-#
-#   expr-mod      We've just finished scanning a term, now look for the optional
-#                 trailing '*', '?', '+'
-#
-expr-mod:
-    white_space          n  expr-mod
-    '*'                  n  expr-cont                               doUnaryOpStar
-    '+'                  n  expr-cont                               doUnaryOpPlus
-    '?'                  n  expr-cont                               doUnaryOpQuestion
-    default                 expr-cont 
-    
-    
-#
-#  expr-cont      Expression, continuation.  At a point where additional terms are
-#                                            allowed, but not required.
-#
-expr-cont:
-    escaped                 term                                    doExprCatOperator
-    white_space          n  expr-cont
-    rule_char               term                                    doExprCatOperator
-    '['                     term                                    doExprCatOperator
-    '('                     term                                    doExprCatOperator
-    '$'                     term                                    doExprCatOperator
-    '.'                     term                                    doExprCatOperator
-    '/'                     look-ahead                              doExprCatOperator
-    '{'                  n  tag-open                                doExprCatOperator
-    '|'                  n  term                                    doExprOrOperator
-    ')'                  n  pop                                     doExprRParen
-    default                 pop                                     doExprFinished
-    
-
-#
-#   look-ahead    Scanning a '/', which identifies a break point, assuming that the
-#                 remainder of the expression matches.
-#
-#                 Generate a parse tree as if this was a special kind of input symbol
-#                 appearing in an otherwise normal concatenation expression.
-#
-look-ahead:
-    '/'                   n expr-cont-no-slash                      doSlash
-    default                 errorDeath
-
-
-#
-#  expr-cont-no-slash    Expression, continuation.  At a point where additional terms are
-#                                            allowed, but not required.  Just like
-#                                            expr-cont, above, except that no '/'
-#                                            look-ahead symbol is permitted.
-#
-expr-cont-no-slash:
-    escaped                 term                                    doExprCatOperator
-    white_space          n  expr-cont
-    rule_char               term                                    doExprCatOperator
-    '['                     term                                    doExprCatOperator
-    '('                     term                                    doExprCatOperator
-    '$'                     term                                    doExprCatOperator
-    '.'                     term                                    doExprCatOperator
-    '|'                  n  term                                    doExprOrOperator
-    ')'                  n  pop                                     doExprRParen
-    default                 pop                                     doExprFinished
-
-
-#
-#   tags             scanning a '{', the opening delimiter for a tag that identifies
-#                    the kind of match.  Scan the whole {dddd} tag, where d=digit
-#
-tag-open:
-    white_space          n  tag-open
-    digit_char              tag-value                               doStartTagValue
-    default                 errorDeath                              doTagExpectedError
-    
-tag-value:
-    white_space          n  tag-close
-    '}'                     tag-close
-    digit_char           n  tag-value                               doTagDigit
-    default                 errorDeath                              doTagExpectedError
-    
-tag-close:
-    white_space          n  tag-close
-    '}'                  n  expr-cont-no-tag                        doTagValue
-    default                 errorDeath                              doTagExpectedError
-    
-    
-    
-#
-#  expr-cont-no-tag    Expression, continuation.  At a point where additional terms are
-#                                            allowed, but not required.  Just like
-#                                            expr-cont, above, except that no "{ddd}"
-#                                            tagging is permitted.
-#
-expr-cont-no-tag:
-    escaped                 term                                    doExprCatOperator
-    white_space          n  expr-cont-no-tag
-    rule_char               term                                    doExprCatOperator
-    '['                     term                                    doExprCatOperator
-    '('                     term                                    doExprCatOperator
-    '$'                     term                                    doExprCatOperator
-    '.'                     term                                    doExprCatOperator
-    '/'                     look-ahead                              doExprCatOperator
-    '|'                  n  term                                    doExprOrOperator
-    ')'                  n  pop                                     doExprRParen
-    default                 pop                                     doExprFinished
-    
-    
-
-
-#
-#   Variable Name Scanning.
-#
-#                    The state that branched to here must have pushed a return state
-#                    to go to after completion of the variable name scanning.
-#
-#                    The current input character must be the $ that introduces the name.
-#                    The $ is consummed here rather than in the state that first detected it
-#                    so that the doStartVariableName action only needs to happen in one
-#                    place (here), and the other states don't need to worry about it.
-#
-scan-var-name:
-   '$'                  n scan-var-start                            doStartVariableName
-   default                errorDeath
-
-
-scan-var-start:
-    name_start_char      n scan-var-body
-    default                errorDeath                               doVariableNameExpectedErr
-    
-scan-var-body:
-    name_char            n scan-var-body
-    default                pop                                      doEndVariableName
-    
-    
-    
-#
-#  scan-unicode-set   Unicode Sets are parsed by the the UnicodeSet class.
-#                     Within the RBBI parser, after finding the first character
-#                     of a Unicode Set, we just hand the rule input at that
-#                     point of to the Unicode Set constructor, then pick
-#                     up parsing after the close of the set.
-#
-#                     The action for this state invokes the UnicodeSet parser.
-#
-scan-unicode-set:
-    '['                   n pop                                      doScanUnicodeSet
-    'p'                   n pop                                      doScanUnicodeSet
-    'P'                   n pop                                      doScanUnicodeSet
-    default		    errorDeath 
-    
-    
-
-
-
-
-
-#
-#  assign-or-rule.   A $variable was encountered at the start of something, could be
-#                    either an assignment statement or a rule, depending on whether an '='
-#                    follows the variable name.  We get to this state when the variable name
-#                    scanning does a return.
-#
-assign-or-rule:
-    white_space          n assign-or-rule
-    '='                  n term                  ^assign-end        doStartAssign   # variable was target of assignment
-    default                term-var-ref          ^break-rule-end                    # variable was a term in a rule
-
-
-
-#
-#  assign-end        This state is entered when the end of the expression on the
-#                    right hand side of an assignment is found.  We get here via
-#                    a pop; this state is pushed when the '=' in an assignment is found.
-#
-#                    The only thing allowed at this point is a ';'.  The RHS of an
-#                    assignment must look like a rule expression, and we come here
-#                    when what is being scanned no longer looks like an expression.
-#
-assign-end:
-    ';'                  n start                                    doEndAssign
-    default                errorDeath                               doRuleErrorAssignExpr
-    
-    
-    
-#
-# errorDeath.   This state is specified as the next state whenever a syntax error
-#               in the source rules is detected.  Barring bugs, the state machine will never
-#               actually get here, but will stop because of the action associated with the error.
-#               But, just in case, this state asks the state machine to exit.
-errorDeath:
-    default              n errorDeath                               doExit
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbiscan.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbiscan.cpp
deleted file mode 100644
index 0113c08..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbiscan.cpp
+++ /dev/null
@@ -1,1213 +0,0 @@
-
-//
-//  file:  rbbiscan.cpp
-//
-//  Copyright (C) 2002-2012, International Business Machines Corporation and others.
-//  All Rights Reserved.
-//
-//  This file contains the Rule Based Break Iterator Rule Builder functions for
-//   scanning the rules and assembling a parse tree.  This is the first phase
-//   of compiling the rules.
-//
-//  The overall of the rules is managed by class RBBIRuleBuilder, which will
-//  create and use an instance of this class as part of the process.
-//
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/unistr.h"
-#include "unicode/uniset.h"
-#include "unicode/uchar.h"
-#include "unicode/uchriter.h"
-#include "unicode/parsepos.h"
-#include "unicode/parseerr.h"
-#include "cmemory.h"
-#include "cstring.h"
-
-#include "rbbirpt.h"   // Contains state table for the rbbi rules parser.
-                       //   generated by a Perl script.
-#include "rbbirb.h"
-#include "rbbinode.h"
-#include "rbbiscan.h"
-#include "rbbitblb.h"
-
-#include "uassert.h"
-
-#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
-
-//------------------------------------------------------------------------------
-//
-// Unicode Set init strings for each of the character classes needed for parsing a rule file.
-//               (Initialized with hex values for portability to EBCDIC based machines.
-//                Really ugly, but there's no good way to avoid it.)
-//
-//              The sets are referred to by name in the rbbirpt.txt, which is the
-//              source form of the state transition table for the RBBI rule parser.
-//
-//------------------------------------------------------------------------------
-static const UChar gRuleSet_rule_char_pattern[]       = {
- //   [    ^      [    \     p     {      Z     }     \     u    0      0    2      0
-    0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30,
- //   -    \      u    0     0     7      f     ]     -     [    \      p
-    0x2d, 0x5c, 0x75, 0x30, 0x30, 0x37, 0x66, 0x5d, 0x2d, 0x5b, 0x5c, 0x70,
- //   {     L     }    ]     -     [      \     p     {     N    }      ]     ]
-    0x7b, 0x4c, 0x7d, 0x5d, 0x2d, 0x5b, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5d, 0x5d, 0};
-
-static const UChar gRuleSet_name_char_pattern[]       = {
-//    [    _      \    p     {     L      }     \     p     {    N      }     ]
-    0x5b, 0x5f, 0x5c, 0x70, 0x7b, 0x4c, 0x7d, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5d, 0};
-
-static const UChar gRuleSet_digit_char_pattern[] = {
-//    [    0      -    9     ]
-    0x5b, 0x30, 0x2d, 0x39, 0x5d, 0};
-
-static const UChar gRuleSet_name_start_char_pattern[] = {
-//    [    _      \    p     {     L      }     ]
-    0x5b, 0x5f, 0x5c, 0x70, 0x7b, 0x4c, 0x7d, 0x5d, 0 };
-
-static const UChar kAny[] = {0x61, 0x6e, 0x79, 0x00};  // "any"
-
-
-U_CDECL_BEGIN
-static void U_CALLCONV RBBISetTable_deleter(void *p) {
-    icu::RBBISetTableEl *px = (icu::RBBISetTableEl *)p;
-    delete px->key;
-    // Note:  px->val is owned by the linked list "fSetsListHead" in scanner.
-    //        Don't delete the value nodes here.
-    uprv_free(px);
-}
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-//------------------------------------------------------------------------------
-//
-//  Constructor.
-//
-//------------------------------------------------------------------------------
-RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb)
-{
-    fRB                 = rb;
-    fStackPtr           = 0;
-    fStack[fStackPtr]   = 0;
-    fNodeStackPtr       = 0;
-    fRuleNum            = 0;
-    fNodeStack[0]       = NULL;
-
-    fSymbolTable                            = NULL;
-    fSetTable                               = NULL;
-
-    fScanIndex = 0;
-    fNextIndex = 0;
-
-    fReverseRule        = FALSE;
-    fLookAheadRule      = FALSE;
-
-    fLineNum    = 1;
-    fCharNum    = 0;
-    fQuoteMode  = FALSE;
-
-    // Do not check status until after all critical fields are sufficiently initialized
-    //   that the destructor can run cleanly.
-    if (U_FAILURE(*rb->fStatus)) {
-        return;
-    }
-
-    //
-    //  Set up the constant Unicode Sets.
-    //     Note:  These could be made static, lazily initialized, and shared among
-    //            all instances of RBBIRuleScanners.  BUT this is quite a bit simpler,
-    //            and the time to build these few sets should be small compared to a
-    //            full break iterator build.
-    fRuleSets[kRuleSet_rule_char-128]
-        = UnicodeSet(UnicodeString(gRuleSet_rule_char_pattern),       *rb->fStatus);
-    // fRuleSets[kRuleSet_white_space-128] = [:Pattern_White_Space:]
-    fRuleSets[kRuleSet_white_space-128].
-        add(9, 0xd).add(0x20).add(0x85).add(0x200e, 0x200f).add(0x2028, 0x2029);
-    fRuleSets[kRuleSet_name_char-128]
-        = UnicodeSet(UnicodeString(gRuleSet_name_char_pattern),       *rb->fStatus);
-    fRuleSets[kRuleSet_name_start_char-128]
-        = UnicodeSet(UnicodeString(gRuleSet_name_start_char_pattern), *rb->fStatus);
-    fRuleSets[kRuleSet_digit_char-128]
-        = UnicodeSet(UnicodeString(gRuleSet_digit_char_pattern),      *rb->fStatus);
-    if (*rb->fStatus == U_ILLEGAL_ARGUMENT_ERROR) {
-        // This case happens if ICU's data is missing.  UnicodeSet tries to look up property
-        //   names from the init string, can't find them, and claims an illegal argument.
-        //   Change the error so that the actual problem will be clearer to users.
-        *rb->fStatus = U_BRK_INIT_ERROR;
-    }
-    if (U_FAILURE(*rb->fStatus)) {
-        return;
-    }
-
-    fSymbolTable = new RBBISymbolTable(this, rb->fRules, *rb->fStatus);
-    if (fSymbolTable == NULL) {
-        *rb->fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    fSetTable    = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, rb->fStatus);
-    if (U_FAILURE(*rb->fStatus)) {
-        return;
-    }
-    uhash_setValueDeleter(fSetTable, RBBISetTable_deleter);
-}
-
-
-
-//------------------------------------------------------------------------------
-//
-//  Destructor
-//
-//------------------------------------------------------------------------------
-RBBIRuleScanner::~RBBIRuleScanner() {
-    delete fSymbolTable;
-    if (fSetTable != NULL) {
-         uhash_close(fSetTable);
-         fSetTable = NULL;
-
-    }
-
-
-    // Node Stack.
-    //   Normally has one entry, which is the entire parse tree for the rules.
-    //   If errors occured, there may be additional subtrees left on the stack.
-    while (fNodeStackPtr > 0) {
-        delete fNodeStack[fNodeStackPtr];
-        fNodeStackPtr--;
-    }
-
-}
-
-//------------------------------------------------------------------------------
-//
-//  doParseAction        Do some action during rule parsing.
-//                       Called by the parse state machine.
-//                       Actions build the parse tree and Unicode Sets,
-//                       and maintain the parse stack for nested expressions.
-//
-//                       TODO:  unify EParseAction and RBBI_RuleParseAction enum types.
-//                              They represent exactly the same thing.  They're separate
-//                              only to work around enum forward declaration restrictions
-//                              in some compilers, while at the same time avoiding multiple
-//                              definitions problems.  I'm sure that there's a better way.
-//
-//------------------------------------------------------------------------------
-UBool RBBIRuleScanner::doParseActions(int32_t action)
-{
-    RBBINode *n       = NULL;
-
-    UBool   returnVal = TRUE;
-
-    switch (action) {
-
-    case doExprStart:
-        pushNewNode(RBBINode::opStart);
-        fRuleNum++;
-        break;
-
-
-    case doExprOrOperator:
-        {
-            fixOpStack(RBBINode::precOpCat);
-            RBBINode  *operandNode = fNodeStack[fNodeStackPtr--];
-            RBBINode  *orNode      = pushNewNode(RBBINode::opOr);
-            orNode->fLeftChild     = operandNode;
-            operandNode->fParent   = orNode;
-        }
-        break;
-
-    case doExprCatOperator:
-        // concatenation operator.
-        // For the implicit concatenation of adjacent terms in an expression that are
-        //   not separated by any other operator.  Action is invoked between the
-        //   actions for the two terms.
-        {
-            fixOpStack(RBBINode::precOpCat);
-            RBBINode  *operandNode = fNodeStack[fNodeStackPtr--];
-            RBBINode  *catNode     = pushNewNode(RBBINode::opCat);
-            catNode->fLeftChild    = operandNode;
-            operandNode->fParent   = catNode;
-        }
-        break;
-
-    case doLParen:
-        // Open Paren.
-        //   The openParen node is a dummy operation type with a low precedence,
-        //     which has the affect of ensuring that any real binary op that
-        //     follows within the parens binds more tightly to the operands than
-        //     stuff outside of the parens.
-        pushNewNode(RBBINode::opLParen);
-        break;
-
-    case doExprRParen:
-        fixOpStack(RBBINode::precLParen);
-        break;
-
-    case doNOP:
-        break;
-
-    case doStartAssign:
-        // We've just scanned "$variable = "
-        // The top of the node stack has the $variable ref node.
-
-        // Save the start position of the RHS text in the StartExpression node
-        //   that precedes the $variableReference node on the stack.
-        //   This will eventually be used when saving the full $variable replacement
-        //   text as a string.
-        n = fNodeStack[fNodeStackPtr-1];
-        n->fFirstPos = fNextIndex;              // move past the '='
-
-        // Push a new start-of-expression node; needed to keep parse of the
-        //   RHS expression happy.
-        pushNewNode(RBBINode::opStart);
-        break;
-
-
-
-
-    case doEndAssign:
-        {
-            // We have reached the end of an assignement statement.
-            //   Current scan char is the ';' that terminates the assignment.
-
-            // Terminate expression, leaves expression parse tree rooted in TOS node.
-            fixOpStack(RBBINode::precStart);
-
-            RBBINode *startExprNode  = fNodeStack[fNodeStackPtr-2];
-            RBBINode *varRefNode     = fNodeStack[fNodeStackPtr-1];
-            RBBINode *RHSExprNode    = fNodeStack[fNodeStackPtr];
-
-            // Save original text of right side of assignment, excluding the terminating ';'
-            //  in the root of the node for the right-hand-side expression.
-            RHSExprNode->fFirstPos = startExprNode->fFirstPos;
-            RHSExprNode->fLastPos  = fScanIndex;
-            fRB->fRules.extractBetween(RHSExprNode->fFirstPos, RHSExprNode->fLastPos, RHSExprNode->fText);
-
-            // Expression parse tree becomes l. child of the $variable reference node.
-            varRefNode->fLeftChild = RHSExprNode;
-            RHSExprNode->fParent   = varRefNode;
-
-            // Make a symbol table entry for the $variableRef node.
-            fSymbolTable->addEntry(varRefNode->fText, varRefNode, *fRB->fStatus);
-            if (U_FAILURE(*fRB->fStatus)) {
-                // This is a round-about way to get the parse position set
-                //  so that duplicate symbols error messages include a line number.
-                UErrorCode t = *fRB->fStatus;
-                *fRB->fStatus = U_ZERO_ERROR;
-                error(t);
-            }
-
-            // Clean up the stack.
-            delete startExprNode;
-            fNodeStackPtr-=3;
-            break;
-        }
-
-    case doEndOfRule:
-        {
-        fixOpStack(RBBINode::precStart);      // Terminate expression, leaves expression
-        if (U_FAILURE(*fRB->fStatus)) {       //   parse tree rooted in TOS node.
-            break;
-        }
-#ifdef RBBI_DEBUG
-        if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "rtree")) {printNodeStack("end of rule");}
-#endif
-        U_ASSERT(fNodeStackPtr == 1);
-
-        // If this rule includes a look-ahead '/', add a endMark node to the
-        //   expression tree.
-        if (fLookAheadRule) {
-            RBBINode  *thisRule       = fNodeStack[fNodeStackPtr];
-            RBBINode  *endNode        = pushNewNode(RBBINode::endMark);
-            RBBINode  *catNode        = pushNewNode(RBBINode::opCat);
-            fNodeStackPtr -= 2;
-            catNode->fLeftChild       = thisRule;
-            catNode->fRightChild      = endNode;
-            fNodeStack[fNodeStackPtr] = catNode;
-            endNode->fVal             = fRuleNum;
-            endNode->fLookAheadEnd    = TRUE;
-        }
-
-        // All rule expressions are ORed together.
-        // The ';' that terminates an expression really just functions as a '|' with
-        //   a low operator prededence.
-        //
-        // Each of the four sets of rules are collected separately.
-        //  (forward, reverse, safe_forward, safe_reverse)
-        //  OR this rule into the appropriate group of them.
-        //
-        RBBINode **destRules = (fReverseRule? &fRB->fReverseTree : fRB->fDefaultTree);
-
-        if (*destRules != NULL) {
-            // This is not the first rule encounted.
-            // OR previous stuff  (from *destRules)
-            // with the current rule expression (on the Node Stack)
-            //  with the resulting OR expression going to *destRules
-            //
-            RBBINode  *thisRule    = fNodeStack[fNodeStackPtr];
-            RBBINode  *prevRules   = *destRules;
-            RBBINode  *orNode      = pushNewNode(RBBINode::opOr);
-            orNode->fLeftChild     = prevRules;
-            prevRules->fParent     = orNode;
-            orNode->fRightChild    = thisRule;
-            thisRule->fParent      = orNode;
-            *destRules             = orNode;
-        }
-        else
-        {
-            // This is the first rule encountered (for this direction).
-            // Just move its parse tree from the stack to *destRules.
-            *destRules = fNodeStack[fNodeStackPtr];
-        }
-        fReverseRule   = FALSE;   // in preparation for the next rule.
-        fLookAheadRule = FALSE;
-        fNodeStackPtr  = 0;
-        }
-        break;
-
-
-    case doRuleError:
-        error(U_BRK_RULE_SYNTAX);
-        returnVal = FALSE;
-        break;
-
-
-    case doVariableNameExpectedErr:
-        error(U_BRK_RULE_SYNTAX);
-        break;
-
-
-    //
-    //  Unary operands  + ? *
-    //    These all appear after the operand to which they apply.
-    //    When we hit one, the operand (may be a whole sub expression)
-    //    will be on the top of the stack.
-    //    Unary Operator becomes TOS, with the old TOS as its one child.
-    case doUnaryOpPlus:
-        {
-            RBBINode  *operandNode = fNodeStack[fNodeStackPtr--];
-            RBBINode  *plusNode    = pushNewNode(RBBINode::opPlus);
-            plusNode->fLeftChild   = operandNode;
-            operandNode->fParent   = plusNode;
-        }
-        break;
-
-    case doUnaryOpQuestion:
-        {
-            RBBINode  *operandNode = fNodeStack[fNodeStackPtr--];
-            RBBINode  *qNode       = pushNewNode(RBBINode::opQuestion);
-            qNode->fLeftChild      = operandNode;
-            operandNode->fParent   = qNode;
-        }
-        break;
-
-    case doUnaryOpStar:
-        {
-            RBBINode  *operandNode = fNodeStack[fNodeStackPtr--];
-            RBBINode  *starNode    = pushNewNode(RBBINode::opStar);
-            starNode->fLeftChild   = operandNode;
-            operandNode->fParent   = starNode;
-        }
-        break;
-
-    case doRuleChar:
-        // A "Rule Character" is any single character that is a literal part
-        // of the regular expression.  Like a, b and c in the expression "(abc*) | [:L:]"
-        // These are pretty uncommon in break rules; the terms are more commonly
-        //  sets.  To keep things uniform, treat these characters like as
-        // sets that just happen to contain only one character.
-        {
-            n = pushNewNode(RBBINode::setRef);
-            findSetFor(UnicodeString(fC.fChar), n);
-            n->fFirstPos = fScanIndex;
-            n->fLastPos  = fNextIndex;
-            fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText);
-            break;
-        }
-
-    case doDotAny:
-        // scanned a ".", meaning match any single character.
-        {
-            n = pushNewNode(RBBINode::setRef);
-            findSetFor(UnicodeString(TRUE, kAny, 3), n);
-            n->fFirstPos = fScanIndex;
-            n->fLastPos  = fNextIndex;
-            fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText);
-            break;
-        }
-
-    case doSlash:
-        // Scanned a '/', which identifies a look-ahead break position in a rule.
-        n = pushNewNode(RBBINode::lookAhead);
-        n->fVal      = fRuleNum;
-        n->fFirstPos = fScanIndex;
-        n->fLastPos  = fNextIndex;
-        fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText);
-        fLookAheadRule = TRUE;
-        break;
-
-
-    case doStartTagValue:
-        // Scanned a '{', the opening delimiter for a tag value within a rule.
-        n = pushNewNode(RBBINode::tag);
-        n->fVal      = 0;
-        n->fFirstPos = fScanIndex;
-        n->fLastPos  = fNextIndex;
-        break;
-
-    case doTagDigit:
-        // Just scanned a decimal digit that's part of a tag value
-        {
-            n = fNodeStack[fNodeStackPtr];
-            uint32_t v = u_charDigitValue(fC.fChar);
-            U_ASSERT(v < 10);
-            n->fVal = n->fVal*10 + v;
-            break;
-        }
-
-    case doTagValue:
-        n = fNodeStack[fNodeStackPtr];
-        n->fLastPos = fNextIndex;
-        fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText);
-        break;
-
-    case doTagExpectedError:
-        error(U_BRK_MALFORMED_RULE_TAG);
-        returnVal = FALSE;
-        break;
-
-    case doOptionStart:
-        // Scanning a !!option.   At the start of string.
-        fOptionStart = fScanIndex;
-        break;
-
-    case doOptionEnd:
-        {
-            UnicodeString opt(fRB->fRules, fOptionStart, fScanIndex-fOptionStart);
-            if (opt == UNICODE_STRING("chain", 5)) {
-                fRB->fChainRules = TRUE;
-            } else if (opt == UNICODE_STRING("LBCMNoChain", 11)) {
-                fRB->fLBCMNoChain = TRUE;
-            } else if (opt == UNICODE_STRING("forward", 7)) {
-                fRB->fDefaultTree   = &fRB->fForwardTree;
-            } else if (opt == UNICODE_STRING("reverse", 7)) {
-                fRB->fDefaultTree   = &fRB->fReverseTree;
-            } else if (opt == UNICODE_STRING("safe_forward", 12)) {
-                fRB->fDefaultTree   = &fRB->fSafeFwdTree;
-            } else if (opt == UNICODE_STRING("safe_reverse", 12)) {
-                fRB->fDefaultTree   = &fRB->fSafeRevTree;
-            } else if (opt == UNICODE_STRING("lookAheadHardBreak", 18)) {
-                fRB->fLookAheadHardBreak = TRUE;
-            } else {
-                error(U_BRK_UNRECOGNIZED_OPTION);
-            }
-        }
-        break;
-
-    case doReverseDir:
-        fReverseRule = TRUE;
-        break;
-
-    case doStartVariableName:
-        n = pushNewNode(RBBINode::varRef);
-        if (U_FAILURE(*fRB->fStatus)) {
-            break;
-        }
-        n->fFirstPos = fScanIndex;
-        break;
-
-    case doEndVariableName:
-        n = fNodeStack[fNodeStackPtr];
-        if (n==NULL || n->fType != RBBINode::varRef) {
-            error(U_BRK_INTERNAL_ERROR);
-            break;
-        }
-        n->fLastPos = fScanIndex;
-        fRB->fRules.extractBetween(n->fFirstPos+1, n->fLastPos, n->fText);
-        // Look the newly scanned name up in the symbol table
-        //   If there's an entry, set the l. child of the var ref to the replacement expression.
-        //   (We also pass through here when scanning assignments, but no harm is done, other
-        //    than a slight wasted effort that seems hard to avoid.  Lookup will be null)
-        n->fLeftChild = fSymbolTable->lookupNode(n->fText);
-        break;
-
-    case doCheckVarDef:
-        n = fNodeStack[fNodeStackPtr];
-        if (n->fLeftChild == NULL) {
-            error(U_BRK_UNDEFINED_VARIABLE);
-            returnVal = FALSE;
-        }
-        break;
-
-    case doExprFinished:
-        break;
-
-    case doRuleErrorAssignExpr:
-        error(U_BRK_ASSIGN_ERROR);
-        returnVal = FALSE;
-        break;
-
-    case doExit:
-        returnVal = FALSE;
-        break;
-
-    case doScanUnicodeSet:
-        scanSet();
-        break;
-
-    default:
-        error(U_BRK_INTERNAL_ERROR);
-        returnVal = FALSE;
-        break;
-    }
-    return returnVal;
-}
-
-
-
-
-//------------------------------------------------------------------------------
-//
-//  Error         Report a rule parse error.
-//                Only report it if no previous error has been recorded.
-//
-//------------------------------------------------------------------------------
-void RBBIRuleScanner::error(UErrorCode e) {
-    if (U_SUCCESS(*fRB->fStatus)) {
-        *fRB->fStatus = e;
-        if (fRB->fParseError) {
-            fRB->fParseError->line  = fLineNum;
-            fRB->fParseError->offset = fCharNum;
-            fRB->fParseError->preContext[0] = 0;
-            fRB->fParseError->preContext[0] = 0;
-        }
-    }
-}
-
-
-
-
-//------------------------------------------------------------------------------
-//
-//  fixOpStack   The parse stack holds partially assembled chunks of the parse tree.
-//               An entry on the stack may be as small as a single setRef node,
-//               or as large as the parse tree
-//               for an entire expression (this will be the one item left on the stack
-//               when the parsing of an RBBI rule completes.
-//
-//               This function is called when a binary operator is encountered.
-//               It looks back up the stack for operators that are not yet associated
-//               with a right operand, and if the precedence of the stacked operator >=
-//               the precedence of the current operator, binds the operand left,
-//               to the previously encountered operator.
-//
-//------------------------------------------------------------------------------
-void RBBIRuleScanner::fixOpStack(RBBINode::OpPrecedence p) {
-    RBBINode *n;
-    // printNodeStack("entering fixOpStack()");
-    for (;;) {
-        n = fNodeStack[fNodeStackPtr-1];   // an operator node
-        if (n->fPrecedence == 0) {
-            RBBIDebugPuts("RBBIRuleScanner::fixOpStack, bad operator node");
-            error(U_BRK_INTERNAL_ERROR);
-            return;
-        }
-
-        if (n->fPrecedence < p || n->fPrecedence <= RBBINode::precLParen) {
-            // The most recent operand goes with the current operator,
-            //   not with the previously stacked one.
-            break;
-        }
-            // Stack operator is a binary op  ( '|' or concatenation)
-            //   TOS operand becomes right child of this operator.
-            //   Resulting subexpression becomes the TOS operand.
-            n->fRightChild = fNodeStack[fNodeStackPtr];
-            fNodeStack[fNodeStackPtr]->fParent = n;
-            fNodeStackPtr--;
-        // printNodeStack("looping in fixOpStack()   ");
-    }
-
-    if (p <= RBBINode::precLParen) {
-        // Scan is at a right paren or end of expression.
-        //  The scanned item must match the stack, or else there was an error.
-        //  Discard the left paren (or start expr) node from the stack,
-            //  leaving the completed (sub)expression as TOS.
-            if (n->fPrecedence != p) {
-                // Right paren encountered matched start of expression node, or
-                // end of expression matched with a left paren node.
-                error(U_BRK_MISMATCHED_PAREN);
-            }
-            fNodeStack[fNodeStackPtr-1] = fNodeStack[fNodeStackPtr];
-            fNodeStackPtr--;
-            // Delete the now-discarded LParen or Start node.
-            delete n;
-    }
-    // printNodeStack("leaving fixOpStack()");
-}
-
-
-
-
-//------------------------------------------------------------------------------
-//
-//   findSetFor    given a UnicodeString,
-//                  - find the corresponding Unicode Set  (uset node)
-//                         (create one if necessary)
-//                  - Set fLeftChild of the caller's node (should be a setRef node)
-//                         to the uset node
-//                 Maintain a hash table of uset nodes, so the same one is always used
-//                    for the same string.
-//                 If a "to adopt" set is provided and we haven't seen this key before,
-//                    add the provided set to the hash table.
-//                 If the string is one (32 bit) char in length, the set contains
-//                    just one element which is the char in question.
-//                 If the string is "any", return a set containing all chars.
-//
-//------------------------------------------------------------------------------
-void RBBIRuleScanner::findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt) {
-
-    RBBISetTableEl   *el;
-
-    // First check whether we've already cached a set for this string.
-    // If so, just use the cached set in the new node.
-    //   delete any set provided by the caller, since we own it.
-    el = (RBBISetTableEl *)uhash_get(fSetTable, &s);
-    if (el != NULL) {
-        delete setToAdopt;
-        node->fLeftChild = el->val;
-        U_ASSERT(node->fLeftChild->fType == RBBINode::uset);
-        return;
-    }
-
-    // Haven't seen this set before.
-    // If the caller didn't provide us with a prebuilt set,
-    //   create a new UnicodeSet now.
-    if (setToAdopt == NULL) {
-        if (s.compare(kAny, -1) == 0) {
-            setToAdopt = new UnicodeSet(0x000000, 0x10ffff);
-        } else {
-            UChar32 c;
-            c = s.char32At(0);
-            setToAdopt = new UnicodeSet(c, c);
-        }
-    }
-
-    //
-    // Make a new uset node to refer to this UnicodeSet
-    // This new uset node becomes the child of the caller's setReference node.
-    //
-    RBBINode *usetNode    = new RBBINode(RBBINode::uset);
-    if (usetNode == NULL) {
-        error(U_MEMORY_ALLOCATION_ERROR);
-        return;
-    }
-    usetNode->fInputSet   = setToAdopt;
-    usetNode->fParent     = node;
-    node->fLeftChild      = usetNode;
-    usetNode->fText = s;
-
-
-    //
-    // Add the new uset node to the list of all uset nodes.
-    //
-    fRB->fUSetNodes->addElement(usetNode, *fRB->fStatus);
-
-
-    //
-    // Add the new set to the set hash table.
-    //
-    el      = (RBBISetTableEl *)uprv_malloc(sizeof(RBBISetTableEl));
-    UnicodeString *tkey = new UnicodeString(s);
-    if (tkey == NULL || el == NULL || setToAdopt == NULL) {
-        // Delete to avoid memory leak
-        delete tkey;
-        tkey = NULL;
-        uprv_free(el);
-        el = NULL;
-        delete setToAdopt;
-        setToAdopt = NULL;
-
-        error(U_MEMORY_ALLOCATION_ERROR);
-        return;
-    }
-    el->key = tkey;
-    el->val = usetNode;
-    uhash_put(fSetTable, el->key, el, fRB->fStatus);
-
-    return;
-}
-
-
-
-//
-//  Assorted Unicode character constants.
-//     Numeric because there is no portable way to enter them as literals.
-//     (Think EBCDIC).
-//
-static const UChar      chCR        = 0x0d;      // New lines, for terminating comments.
-static const UChar      chLF        = 0x0a;
-static const UChar      chNEL       = 0x85;      //    NEL newline variant
-static const UChar      chLS        = 0x2028;    //    Unicode Line Separator
-static const UChar      chApos      = 0x27;      //  single quote, for quoted chars.
-static const UChar      chPound     = 0x23;      // '#', introduces a comment.
-static const UChar      chBackSlash = 0x5c;      // '\'  introduces a char escape
-static const UChar      chLParen    = 0x28;
-static const UChar      chRParen    = 0x29;
-
-
-//------------------------------------------------------------------------------
-//
-//  stripRules    Return a rules string without unnecessary
-//                characters.
-//
-//------------------------------------------------------------------------------
-UnicodeString RBBIRuleScanner::stripRules(const UnicodeString &rules) {
-    UnicodeString strippedRules;
-    int rulesLength = rules.length();
-    for (int idx = 0; idx < rulesLength; ) {
-        UChar ch = rules[idx++];
-        if (ch == chPound) {
-            while (idx < rulesLength
-                && ch != chCR && ch != chLF && ch != chNEL)
-            {
-                ch = rules[idx++];
-            }
-        }
-        if (!u_isISOControl(ch)) {
-            strippedRules.append(ch);
-        }
-    }
-    // strippedRules = strippedRules.unescape();
-    return strippedRules;
-}
-
-
-//------------------------------------------------------------------------------
-//
-//  nextCharLL    Low Level Next Char from rule input source.
-//                Get a char from the input character iterator,
-//                keep track of input position for error reporting.
-//
-//------------------------------------------------------------------------------
-UChar32  RBBIRuleScanner::nextCharLL() {
-    UChar32  ch;
-
-    if (fNextIndex >= fRB->fRules.length()) {
-        return (UChar32)-1;
-    }
-    ch         = fRB->fRules.char32At(fNextIndex);
-    fNextIndex = fRB->fRules.moveIndex32(fNextIndex, 1);
-
-    if (ch == chCR ||
-        ch == chNEL ||
-        ch == chLS   ||
-        (ch == chLF && fLastChar != chCR)) {
-        // Character is starting a new line.  Bump up the line number, and
-        //  reset the column to 0.
-        fLineNum++;
-        fCharNum=0;
-        if (fQuoteMode) {
-            error(U_BRK_NEW_LINE_IN_QUOTED_STRING);
-            fQuoteMode = FALSE;
-        }
-    }
-    else {
-        // Character is not starting a new line.  Except in the case of a
-        //   LF following a CR, increment the column position.
-        if (ch != chLF) {
-            fCharNum++;
-        }
-    }
-    fLastChar = ch;
-    return ch;
-}
-
-
-//------------------------------------------------------------------------------
-//
-//   nextChar     for rules scanning.  At this level, we handle stripping
-//                out comments and processing backslash character escapes.
-//                The rest of the rules grammar is handled at the next level up.
-//
-//------------------------------------------------------------------------------
-void RBBIRuleScanner::nextChar(RBBIRuleChar &c) {
-
-    // Unicode Character constants needed for the processing done by nextChar(),
-    //   in hex because literals wont work on EBCDIC machines.
-
-    fScanIndex = fNextIndex;
-    c.fChar    = nextCharLL();
-    c.fEscaped = FALSE;
-
-    //
-    //  check for '' sequence.
-    //  These are recognized in all contexts, whether in quoted text or not.
-    //
-    if (c.fChar == chApos) {
-        if (fRB->fRules.char32At(fNextIndex) == chApos) {
-            c.fChar    = nextCharLL();        // get nextChar officially so character counts
-            c.fEscaped = TRUE;                //   stay correct.
-        }
-        else
-        {
-            // Single quote, by itself.
-            //   Toggle quoting mode.
-            //   Return either '('  or ')', because quotes cause a grouping of the quoted text.
-            fQuoteMode = !fQuoteMode;
-            if (fQuoteMode == TRUE) {
-                c.fChar = chLParen;
-            } else {
-                c.fChar = chRParen;
-            }
-            c.fEscaped = FALSE;      // The paren that we return is not escaped.
-            return;
-        }
-    }
-
-    if (fQuoteMode) {
-        c.fEscaped = TRUE;
-    }
-    else
-    {
-        // We are not in a 'quoted region' of the source.
-        //
-        if (c.fChar == chPound) {
-            // Start of a comment.  Consume the rest of it.
-            //  The new-line char that terminates the comment is always returned.
-            //  It will be treated as white-space, and serves to break up anything
-            //    that might otherwise incorrectly clump together with a comment in
-            //    the middle (a variable name, for example.)
-            for (;;) {
-                c.fChar = nextCharLL();
-                if (c.fChar == (UChar32)-1 ||  // EOF
-                    c.fChar == chCR     ||
-                    c.fChar == chLF     ||
-                    c.fChar == chNEL    ||
-                    c.fChar == chLS)       {break;}
-            }
-        }
-        if (c.fChar == (UChar32)-1) {
-            return;
-        }
-
-        //
-        //  check for backslash escaped characters.
-        //  Use UnicodeString::unescapeAt() to handle them.
-        //
-        if (c.fChar == chBackSlash) {
-            c.fEscaped = TRUE;
-            int32_t startX = fNextIndex;
-            c.fChar = fRB->fRules.unescapeAt(fNextIndex);
-            if (fNextIndex == startX) {
-                error(U_BRK_HEX_DIGITS_EXPECTED);
-            }
-            fCharNum += fNextIndex-startX;
-        }
-    }
-    // putc(c.fChar, stdout);
-}
-
-//------------------------------------------------------------------------------
-//
-//  Parse RBBI rules.   The state machine for rules parsing is here.
-//                      The state tables are hand-written in the file rbbirpt.txt,
-//                      and converted to the form used here by a perl
-//                      script rbbicst.pl
-//
-//------------------------------------------------------------------------------
-void RBBIRuleScanner::parse() {
-    uint16_t                state;
-    const RBBIRuleTableEl  *tableEl;
-
-    if (U_FAILURE(*fRB->fStatus)) {
-        return;
-    }
-
-    state = 1;
-    nextChar(fC);
-    //
-    // Main loop for the rule parsing state machine.
-    //   Runs once per state transition.
-    //   Each time through optionally performs, depending on the state table,
-    //      - an advance to the the next input char
-    //      - an action to be performed.
-    //      - pushing or popping a state to/from the local state return stack.
-    //
-    for (;;) {
-        //  Bail out if anything has gone wrong.
-        //  RBBI rule file parsing stops on the first error encountered.
-        if (U_FAILURE(*fRB->fStatus)) {
-            break;
-        }
-
-        // Quit if state == 0.  This is the normal way to exit the state machine.
-        //
-        if (state == 0) {
-            break;
-        }
-
-        // Find the state table element that matches the input char from the rule, or the
-        //    class of the input character.  Start with the first table row for this
-        //    state, then linearly scan forward until we find a row that matches the
-        //    character.  The last row for each state always matches all characters, so
-        //    the search will stop there, if not before.
-        //
-        tableEl = &gRuleParseStateTable[state];
-        #ifdef RBBI_DEBUG
-            if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) {
-                RBBIDebugPrintf("char, line, col = (\'%c\', %d, %d)    state=%s ",
-                    fC.fChar, fLineNum, fCharNum, RBBIRuleStateNames[state]);
-            }
-        #endif
-
-        for (;;) {
-            #ifdef RBBI_DEBUG
-                if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPrintf(".");}
-            #endif
-            if (tableEl->fCharClass < 127 && fC.fEscaped == FALSE &&   tableEl->fCharClass == fC.fChar) {
-                // Table row specified an individual character, not a set, and
-                //   the input character is not escaped, and
-                //   the input character matched it.
-                break;
-            }
-            if (tableEl->fCharClass == 255) {
-                // Table row specified default, match anything character class.
-                break;
-            }
-            if (tableEl->fCharClass == 254 && fC.fEscaped)  {
-                // Table row specified "escaped" and the char was escaped.
-                break;
-            }
-            if (tableEl->fCharClass == 253 && fC.fEscaped &&
-                (fC.fChar == 0x50 || fC.fChar == 0x70 ))  {
-                // Table row specified "escaped P" and the char is either 'p' or 'P'.
-                break;
-            }
-            if (tableEl->fCharClass == 252 && fC.fChar == (UChar32)-1)  {
-                // Table row specified eof and we hit eof on the input.
-                break;
-            }
-
-            if (tableEl->fCharClass >= 128 && tableEl->fCharClass < 240 &&   // Table specs a char class &&
-                fC.fEscaped == FALSE &&                                      //   char is not escaped &&
-                fC.fChar != (UChar32)-1) {                                   //   char is not EOF
-                U_ASSERT((tableEl->fCharClass-128) < LENGTHOF(fRuleSets));
-                if (fRuleSets[tableEl->fCharClass-128].contains(fC.fChar)) {
-                    // Table row specified a character class, or set of characters,
-                    //   and the current char matches it.
-                    break;
-                }
-            }
-
-            // No match on this row, advance to the next  row for this state,
-            tableEl++;
-        }
-        if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPuts("");}
-
-        //
-        // We've found the row of the state table that matches the current input
-        //   character from the rules string.
-        // Perform any action specified  by this row in the state table.
-        if (doParseActions((int32_t)tableEl->fAction) == FALSE) {
-            // Break out of the state machine loop if the
-            //   the action signalled some kind of error, or
-            //   the action was to exit, occurs on normal end-of-rules-input.
-            break;
-        }
-
-        if (tableEl->fPushState != 0) {
-            fStackPtr++;
-            if (fStackPtr >= kStackSize) {
-                error(U_BRK_INTERNAL_ERROR);
-                RBBIDebugPuts("RBBIRuleScanner::parse() - state stack overflow.");
-                fStackPtr--;
-            }
-            fStack[fStackPtr] = tableEl->fPushState;
-        }
-
-        if (tableEl->fNextChar) {
-            nextChar(fC);
-        }
-
-        // Get the next state from the table entry, or from the
-        //   state stack if the next state was specified as "pop".
-        if (tableEl->fNextState != 255) {
-            state = tableEl->fNextState;
-        } else {
-            state = fStack[fStackPtr];
-            fStackPtr--;
-            if (fStackPtr < 0) {
-                error(U_BRK_INTERNAL_ERROR);
-                RBBIDebugPuts("RBBIRuleScanner::parse() - state stack underflow.");
-                fStackPtr++;
-            }
-        }
-
-    }
-
-    //
-    // If there were NO user specified reverse rules, set up the equivalent of ".*;"
-    //
-    if (fRB->fReverseTree == NULL) {
-        fRB->fReverseTree  = pushNewNode(RBBINode::opStar);
-        RBBINode  *operand = pushNewNode(RBBINode::setRef);
-        findSetFor(UnicodeString(TRUE, kAny, 3), operand);
-        fRB->fReverseTree->fLeftChild = operand;
-        operand->fParent              = fRB->fReverseTree;
-        fNodeStackPtr -= 2;
-    }
-
-
-    //
-    // Parsing of the input RBBI rules is complete.
-    // We now have a parse tree for the rule expressions
-    // and a list of all UnicodeSets that are referenced.
-    //
-#ifdef RBBI_DEBUG
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "symbols")) {fSymbolTable->rbbiSymtablePrint();}
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ptree"))
-    {
-        RBBIDebugPrintf("Completed Forward Rules Parse Tree...\n");
-        fRB->fForwardTree->printTree(TRUE);
-        RBBIDebugPrintf("\nCompleted Reverse Rules Parse Tree...\n");
-        fRB->fReverseTree->printTree(TRUE);
-        RBBIDebugPrintf("\nCompleted Safe Point Forward Rules Parse Tree...\n");
-        fRB->fSafeFwdTree->printTree(TRUE);
-        RBBIDebugPrintf("\nCompleted Safe Point Reverse Rules Parse Tree...\n");
-        fRB->fSafeRevTree->printTree(TRUE);
-    }
-#endif
-}
-
-
-//------------------------------------------------------------------------------
-//
-//  printNodeStack     for debugging...
-//
-//------------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBIRuleScanner::printNodeStack(const char *title) {
-    int i;
-    RBBIDebugPrintf("%s.  Dumping node stack...\n", title);
-    for (i=fNodeStackPtr; i>0; i--) {fNodeStack[i]->printTree(TRUE);}
-}
-#endif
-
-
-
-
-//------------------------------------------------------------------------------
-//
-//  pushNewNode   create a new RBBINode of the specified type and push it
-//                onto the stack of nodes.
-//
-//------------------------------------------------------------------------------
-RBBINode  *RBBIRuleScanner::pushNewNode(RBBINode::NodeType  t) {
-    fNodeStackPtr++;
-    if (fNodeStackPtr >= kStackSize) {
-        error(U_BRK_INTERNAL_ERROR);
-        RBBIDebugPuts("RBBIRuleScanner::pushNewNode - stack overflow.");
-        *fRB->fStatus = U_BRK_INTERNAL_ERROR;
-        return NULL;
-    }
-    fNodeStack[fNodeStackPtr] = new RBBINode(t);
-    if (fNodeStack[fNodeStackPtr] == NULL) {
-        *fRB->fStatus = U_MEMORY_ALLOCATION_ERROR;
-    }
-    return fNodeStack[fNodeStackPtr];
-}
-
-
-
-//------------------------------------------------------------------------------
-//
-//  scanSet    Construct a UnicodeSet from the text at the current scan
-//             position.  Advance the scan position to the first character
-//             after the set.
-//
-//             A new RBBI setref node referring to the set is pushed onto the node
-//             stack.
-//
-//             The scan position is normally under the control of the state machine
-//             that controls rule parsing.  UnicodeSets, however, are parsed by
-//             the UnicodeSet constructor, not by the RBBI rule parser.
-//
-//------------------------------------------------------------------------------
-void RBBIRuleScanner::scanSet() {
-    UnicodeSet    *uset;
-    ParsePosition  pos;
-    int            startPos;
-    int            i;
-
-    if (U_FAILURE(*fRB->fStatus)) {
-        return;
-    }
-
-    pos.setIndex(fScanIndex);
-    startPos = fScanIndex;
-    UErrorCode localStatus = U_ZERO_ERROR;
-    uset = new UnicodeSet();
-    if (uset == NULL) {
-        localStatus = U_MEMORY_ALLOCATION_ERROR;
-    } else {
-        uset->applyPatternIgnoreSpace(fRB->fRules, pos, fSymbolTable, localStatus);
-    }
-    if (U_FAILURE(localStatus)) {
-        //  TODO:  Get more accurate position of the error from UnicodeSet's return info.
-        //         UnicodeSet appears to not be reporting correctly at this time.
-        #ifdef RBBI_DEBUG
-            RBBIDebugPrintf("UnicodeSet parse postion.ErrorIndex = %d\n", pos.getIndex());
-        #endif
-        error(localStatus);
-        delete uset;
-        return;
-    }
-
-    // Verify that the set contains at least one code point.
-    //
-    U_ASSERT(uset!=NULL);
-    if (uset->isEmpty()) {
-        // This set is empty.
-        //  Make it an error, because it almost certainly is not what the user wanted.
-        //  Also, avoids having to think about corner cases in the tree manipulation code
-        //   that occurs later on.
-        error(U_BRK_RULE_EMPTY_SET);
-        delete uset;
-        return;
-    }
-
-
-    // Advance the RBBI parse postion over the UnicodeSet pattern.
-    //   Don't just set fScanIndex because the line/char positions maintained
-    //   for error reporting would be thrown off.
-    i = pos.getIndex();
-    for (;;) {
-        if (fNextIndex >= i) {
-            break;
-        }
-        nextCharLL();
-    }
-
-    if (U_SUCCESS(*fRB->fStatus)) {
-        RBBINode         *n;
-
-        n = pushNewNode(RBBINode::setRef);
-        n->fFirstPos = startPos;
-        n->fLastPos  = fNextIndex;
-        fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText);
-        //  findSetFor() serves several purposes here:
-        //     - Adopts storage for the UnicodeSet, will be responsible for deleting.
-        //     - Mantains collection of all sets in use, needed later for establishing
-        //          character categories for run time engine.
-        //     - Eliminates mulitiple instances of the same set.
-        //     - Creates a new uset node if necessary (if this isn't a duplicate.)
-        findSetFor(n->fText, n, uset);
-    }
-
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbiscan.h b/src/third_party/mozjs/intl/icu/source/common/rbbiscan.h
deleted file mode 100644
index dd9b8e6..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbiscan.h
+++ /dev/null
@@ -1,162 +0,0 @@
-//
-//  rbbiscan.h
-//
-//  Copyright (C) 2002-2008, International Business Machines Corporation and others.
-//  All Rights Reserved.
-//
-//  This file contains declarations for class RBBIRuleScanner
-//
-
-
-#ifndef RBBISCAN_H
-#define RBBISCAN_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/rbbi.h"
-#include "unicode/uniset.h"
-#include "unicode/parseerr.h"
-#include "uhash.h"
-#include "uvector.h"
-#include "unicode/symtable.h"// For UnicodeSet parsing, is the interface that
-                          //    looks up references to $variables within a set.
-#include "rbbinode.h"
-//#include "rbbitblb.h"
-
-
-
-U_NAMESPACE_BEGIN
-
-class   RBBIRuleBuilder;
-class   RBBISymbolTable;
-
-
-//--------------------------------------------------------------------------------
-//
-//  class RBBIRuleScanner does the lowest level, character-at-a-time
-//                        scanning of break iterator rules.  
-//
-//                        The output of the scanner is parse trees for
-//                        the rule expressions and a list of all Unicode Sets
-//                        encountered.
-//
-//--------------------------------------------------------------------------------
-
-class RBBIRuleScanner : public UMemory {
-public:
-
-    enum {
-        kStackSize = 100            // The size of the state stack for
-    };                              //   rules parsing.  Corresponds roughly
-                                    //   to the depth of parentheses nesting
-                                    //   that is allowed in the rules.
-
-    struct RBBIRuleChar {
-        UChar32             fChar;
-        UBool               fEscaped;
-    };
-
-    RBBIRuleScanner(RBBIRuleBuilder  *rb);
-
-
-    virtual    ~RBBIRuleScanner();
-
-    void        nextChar(RBBIRuleChar &c);          // Get the next char from the input stream.
-                                                    // Return false if at end.
-
-    UBool       push(const RBBIRuleChar &c);        // Push (unget) one character.
-                                                    //   Only a single character may be pushed.
-
-    void        parse();                            // Parse the rules, generating two parse
-                                                    //   trees, one each for the forward and
-                                                    //   reverse rules,
-                                                    //   and a list of UnicodeSets encountered.
-
-    /**
-     * Return a rules string without unnecessary
-     * characters.
-     */
-    static UnicodeString stripRules(const UnicodeString &rules);
-private:
-
-    UBool       doParseActions(int32_t a);
-    void        error(UErrorCode e);                   // error reporting convenience function.
-    void        fixOpStack(RBBINode::OpPrecedence p);
-                                                       //   a character.
-    void        findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt = NULL);
-
-    UChar32     nextCharLL();
-#ifdef RBBI_DEBUG
-    void        printNodeStack(const char *title);
-#endif
-    RBBINode    *pushNewNode(RBBINode::NodeType  t);
-    void        scanSet();
-
-
-    RBBIRuleBuilder               *fRB;              // The rule builder that we are part of.
-
-    int32_t                       fScanIndex;        // Index of current character being processed
-                                                     //   in the rule input string.
-    int32_t                       fNextIndex;        // Index of the next character, which
-                                                     //   is the first character not yet scanned.
-    UBool                         fQuoteMode;        // Scan is in a 'quoted region'
-    int32_t                       fLineNum;          // Line number in input file.
-    int32_t                       fCharNum;          // Char position within the line.
-    UChar32                       fLastChar;         // Previous char, needed to count CR-LF
-                                                     //   as a single line, not two.
-
-    RBBIRuleChar                  fC;                // Current char for parse state machine
-                                                     //   processing.
-    UnicodeString                 fVarName;          // $variableName, valid when we've just
-                                                     //   scanned one.
-
-    RBBIRuleTableEl               **fStateTable;     // State Transition Table for RBBI Rule
-                                                     //   parsing.  index by p[state][char-class]
-
-    uint16_t                      fStack[kStackSize];  // State stack, holds state pushes
-    int32_t                       fStackPtr;           //  and pops as specified in the state
-                                                       //  transition rules.
-
-    RBBINode                      *fNodeStack[kStackSize]; // Node stack, holds nodes created
-                                                           //  during the parse of a rule
-    int32_t                        fNodeStackPtr;
-
-
-    UBool                          fReverseRule;     // True if the rule currently being scanned
-                                                     //  is a reverse direction rule (if it
-                                                     //  starts with a '!')
-
-    UBool                          fLookAheadRule;   // True if the rule includes a '/'
-                                                     //   somewhere within it.
-
-    RBBISymbolTable               *fSymbolTable;     // symbol table, holds definitions of
-                                                     //   $variable symbols.
-
-    UHashtable                    *fSetTable;        // UnicocodeSet hash table, holds indexes to
-                                                     //   the sets created while parsing rules.
-                                                     //   The key is the string used for creating
-                                                     //   the set.
-
-    UnicodeSet                     fRuleSets[10];    // Unicode Sets that are needed during
-                                                     //  the scanning of RBBI rules.  The
-                                                     //  indicies for these are assigned by the
-                                                     //  perl script that builds the state tables.
-                                                     //  See rbbirpt.h.
-
-    int32_t                        fRuleNum;         // Counts each rule as it is scanned.
-
-    int32_t                        fOptionStart;     // Input index of start of a !!option
-                                                     //   keyword, while being scanned.
-
-    UnicodeSet *gRuleSet_rule_char;
-    UnicodeSet *gRuleSet_white_space;
-    UnicodeSet *gRuleSet_name_char;
-    UnicodeSet *gRuleSet_name_start_char;
-
-    RBBIRuleScanner(const RBBIRuleScanner &other); // forbid copying of this class
-    RBBIRuleScanner &operator=(const RBBIRuleScanner &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbisetb.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbisetb.cpp
deleted file mode 100644
index cd855f7..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbisetb.cpp
+++ /dev/null
@@ -1,695 +0,0 @@
-//
-//  rbbisetb.cpp
-//
-/*
-***************************************************************************
-*   Copyright (C) 2002-2008 International Business Machines Corporation   *
-*   and others. All rights reserved.                                      *
-***************************************************************************
-*/
-//
-//  RBBISetBuilder   Handles processing of Unicode Sets from RBBI rules
-//                   (part of the rule building process.)
-//
-//      Starting with the rules parse tree from the scanner,
-//
-//                   -  Enumerate the set of UnicodeSets that are referenced
-//                      by the RBBI rules.
-//                   -  compute a set of non-overlapping character ranges
-//                      with all characters within a range belonging to the same
-//                      set of input uniocde sets.
-//                   -  Derive a set of non-overlapping UnicodeSet (like things)
-//                      that will correspond to columns in the state table for
-//                      the RBBI execution engine.  All characters within one
-//                      of these sets belong to the same set of the original
-//                      UnicodeSets from the user's rules.
-//                   -  construct the trie table that maps input characters
-//                      to the index of the matching non-overlapping set of set from
-//                      the previous step.
-//
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/uniset.h"
-#include "utrie.h"
-#include "uvector.h"
-#include "uassert.h"
-#include "cmemory.h"
-#include "cstring.h"
-
-#include "rbbisetb.h"
-#include "rbbinode.h"
-
-
-//------------------------------------------------------------------------
-//
-//   getFoldedRBBIValue        Call-back function used during building of Trie table.
-//                             Folding value: just store the offset (16 bits)
-//                             if there is any non-0 entry.
-//                             (It'd really be nice if the Trie builder would provide a
-//                             simple default, so this function could go away from here.)
-//
-//------------------------------------------------------------------------
-/* folding value: just store the offset (16 bits) if there is any non-0 entry */
-U_CDECL_BEGIN
-static uint32_t U_CALLCONV
-getFoldedRBBIValue(UNewTrie *trie, UChar32 start, int32_t offset) {
-    uint32_t value;
-    UChar32 limit;
-    UBool inBlockZero;
-
-    limit=start+0x400;
-    while(start<limit) {
-        value=utrie_get32(trie, start, &inBlockZero);
-        if(inBlockZero) {
-            start+=UTRIE_DATA_BLOCK_LENGTH;
-        } else if(value!=0) {
-            return (uint32_t)(offset|0x8000);
-        } else {
-            ++start;
-        }
-    }
-    return 0;
-}
-
-
-U_CDECL_END
-
-
-
-U_NAMESPACE_BEGIN
-
-//------------------------------------------------------------------------
-//
-//   Constructor
-//
-//------------------------------------------------------------------------
-RBBISetBuilder::RBBISetBuilder(RBBIRuleBuilder *rb)
-{
-    fRB             = rb;
-    fStatus         = rb->fStatus;
-    fRangeList      = 0;
-    fTrie           = 0;
-    fTrieSize       = 0;
-    fGroupCount     = 0;
-    fSawBOF         = FALSE;
-}
-
-
-//------------------------------------------------------------------------
-//
-//   Destructor
-//
-//------------------------------------------------------------------------
-RBBISetBuilder::~RBBISetBuilder()
-{
-    RangeDescriptor   *nextRangeDesc;
-
-    // Walk through & delete the linked list of RangeDescriptors
-    for (nextRangeDesc = fRangeList; nextRangeDesc!=NULL;) {
-        RangeDescriptor *r = nextRangeDesc;
-        nextRangeDesc      = r->fNext;
-        delete r;
-    }
-
-    utrie_close(fTrie);
-}
-
-
-
-
-//------------------------------------------------------------------------
-//
-//   build          Build the list of non-overlapping character ranges
-//                  from the Unicode Sets.
-//
-//------------------------------------------------------------------------
-void RBBISetBuilder::build() {
-    RBBINode        *usetNode;
-    RangeDescriptor *rlRange;
-
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "usets")) {printSets();}
-
-    //
-    //  Initialize the process by creating a single range encompassing all characters
-    //  that is in no sets.
-    //
-    fRangeList                = new RangeDescriptor(*fStatus); // will check for status here
-    if (fRangeList == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    fRangeList->fStartChar    = 0;
-    fRangeList->fEndChar      = 0x10ffff;
-
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    //
-    //  Find the set of non-overlapping ranges of characters
-    //
-    int  ni;
-    for (ni=0; ; ni++) {        // Loop over each of the UnicodeSets encountered in the input rules
-        usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni);
-        if (usetNode==NULL) {
-            break;
-        }
-
-        UnicodeSet      *inputSet             = usetNode->fInputSet;
-        int32_t          inputSetRangeCount   = inputSet->getRangeCount();
-        int              inputSetRangeIndex   = 0;
-                         rlRange              = fRangeList;
-
-        for (;;) {
-            if (inputSetRangeIndex >= inputSetRangeCount) {
-                break;
-            }
-            UChar32      inputSetRangeBegin  = inputSet->getRangeStart(inputSetRangeIndex);
-            UChar32      inputSetRangeEnd    = inputSet->getRangeEnd(inputSetRangeIndex);
-
-            // skip over ranges from the range list that are completely
-            //   below the current range from the input unicode set.
-            while (rlRange->fEndChar < inputSetRangeBegin) {
-                rlRange = rlRange->fNext;
-            }
-
-            // If the start of the range from the range list is before with
-            //   the start of the range from the unicode set, split the range list range
-            //   in two, with one part being before (wholly outside of) the unicode set
-            //   and the other containing the rest.
-            //   Then continue the loop; the post-split current range will then be skipped
-            //     over
-            if (rlRange->fStartChar < inputSetRangeBegin) {
-                rlRange->split(inputSetRangeBegin, *fStatus);
-                if (U_FAILURE(*fStatus)) {
-                    return;
-                }
-                continue;
-            }
-
-            // Same thing at the end of the ranges...
-            // If the end of the range from the range list doesn't coincide with
-            //   the end of the range from the unicode set, split the range list
-            //   range in two.  The first part of the split range will be
-            //   wholly inside the Unicode set.
-            if (rlRange->fEndChar > inputSetRangeEnd) {
-                rlRange->split(inputSetRangeEnd+1, *fStatus);
-                if (U_FAILURE(*fStatus)) {
-                    return;
-                }
-            }
-
-            // The current rlRange is now entirely within the UnicodeSet range.
-            // Add this unicode set to the list of sets for this rlRange
-            if (rlRange->fIncludesSets->indexOf(usetNode) == -1) {
-                rlRange->fIncludesSets->addElement(usetNode, *fStatus);
-                if (U_FAILURE(*fStatus)) {
-                    return;
-                }
-            }
-
-            // Advance over ranges that we are finished with.
-            if (inputSetRangeEnd == rlRange->fEndChar) {
-                inputSetRangeIndex++;
-            }
-            rlRange = rlRange->fNext;
-        }
-    }
-
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "range")) { printRanges();}
-
-    //
-    //  Group the above ranges, with each group consisting of one or more
-    //    ranges that are in exactly the same set of original UnicodeSets.
-    //    The groups are numbered, and these group numbers are the set of
-    //    input symbols recognized by the run-time state machine.
-    //
-    //    Numbering: # 0  (state table column 0) is unused.
-    //               # 1  is reserved - table column 1 is for end-of-input
-    //               # 2  is reserved - table column 2 is for beginning-in-input
-    //               # 3  is the first range list.
-    //
-    RangeDescriptor *rlSearchRange;
-    for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
-        for (rlSearchRange=fRangeList; rlSearchRange != rlRange; rlSearchRange=rlSearchRange->fNext) {
-            if (rlRange->fIncludesSets->equals(*rlSearchRange->fIncludesSets)) {
-                rlRange->fNum = rlSearchRange->fNum;
-                break;
-            }
-        }
-        if (rlRange->fNum == 0) {
-            fGroupCount ++;
-            rlRange->fNum = fGroupCount+2; 
-            rlRange->setDictionaryFlag();
-            addValToSets(rlRange->fIncludesSets, fGroupCount+2);
-        }
-    }
-
-    // Handle input sets that contain the special string {eof}.
-    //   Column 1 of the state table is reserved for EOF on input.
-    //   Column 2 is reserved for before-the-start-input.
-    //            (This column can be optimized away later if there are no rule
-    //             references to {bof}.)
-    //   Add this column value (1 or 2) to the equivalent expression
-    //     subtree for each UnicodeSet that contains the string {eof}
-    //   Because {bof} and {eof} are not a characters in the normal sense,
-    //   they doesn't affect the computation of ranges or TRIE.
-    static const UChar eofUString[] = {0x65, 0x6f, 0x66, 0};
-    static const UChar bofUString[] = {0x62, 0x6f, 0x66, 0};
-
-    UnicodeString eofString(eofUString);
-    UnicodeString bofString(bofUString);
-    for (ni=0; ; ni++) {        // Loop over each of the UnicodeSets encountered in the input rules
-        usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni);
-        if (usetNode==NULL) {
-            break;
-        }
-        UnicodeSet      *inputSet = usetNode->fInputSet;
-        if (inputSet->contains(eofString)) {
-            addValToSet(usetNode, 1);
-        }
-        if (inputSet->contains(bofString)) {
-            addValToSet(usetNode, 2);
-            fSawBOF = TRUE;
-        }
-    }
-
-
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "rgroup")) {printRangeGroups();}
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "esets")) {printSets();}
-
-    //
-    // Build the Trie table for mapping UChar32 values to the corresponding
-    //   range group number
-    //
-    fTrie = utrie_open(NULL,    //  Pre-existing trie to be filled in
-                      NULL,    //  Data array  (utrie will allocate one)
-                      100000,  //  Max Data Length
-                      0,       //  Initial value for all code points
-                      0,       //  Lead surrogate unit value
-                      TRUE);   //  Keep Latin 1 in separately
-
-
-    for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
-        utrie_setRange32(fTrie, rlRange->fStartChar, rlRange->fEndChar+1, rlRange->fNum, TRUE);
-    }
-}
-
-
-
-//-----------------------------------------------------------------------------------
-//
-//  getTrieSize()    Return the size that will be required to serialize the Trie.
-//
-//-----------------------------------------------------------------------------------
-int32_t RBBISetBuilder::getTrieSize() /*const*/ {
-    fTrieSize  = utrie_serialize(fTrie,
-                                    NULL,                // Buffer
-                                    0,                   // Capacity
-                                    getFoldedRBBIValue,
-                                    TRUE,                // Reduce to 16 bits
-                                    fStatus);
-    // RBBIDebugPrintf("Trie table size is %d\n", trieSize);
-    return fTrieSize;
-}
-
-
-//-----------------------------------------------------------------------------------
-//
-//  serializeTrie()   Put the serialized trie at the specified address.
-//                    Trust the caller to have given us enough memory.
-//                    getTrieSize() MUST be called first.
-//
-//-----------------------------------------------------------------------------------
-void RBBISetBuilder::serializeTrie(uint8_t *where) {
-    utrie_serialize(fTrie,
-                    where,                   // Buffer
-                    fTrieSize,               // Capacity
-                    getFoldedRBBIValue,
-                    TRUE,                    // Reduce to 16 bits
-                    fStatus);
-}
-
-//------------------------------------------------------------------------
-//
-//  addValToSets     Add a runtime-mapped input value to each uset from a
-//                   list of uset nodes. (val corresponds to a state table column.)
-//                   For each of the original Unicode sets - which correspond
-//                   directly to uset nodes - a logically equivalent expression
-//                   is constructed in terms of the remapped runtime input
-//                   symbol set.  This function adds one runtime input symbol to
-//                   a list of sets.
-//
-//                   The "logically equivalent expression" is the tree for an
-//                   or-ing together of all of the symbols that go into the set.
-//
-//------------------------------------------------------------------------
-void  RBBISetBuilder::addValToSets(UVector *sets, uint32_t val) {
-    int32_t       ix;
-
-    for (ix=0; ix<sets->size(); ix++) {
-        RBBINode *usetNode = (RBBINode *)sets->elementAt(ix);
-        addValToSet(usetNode, val);
-    }
-}
-
-void  RBBISetBuilder::addValToSet(RBBINode *usetNode, uint32_t val) {
-    RBBINode *leafNode = new RBBINode(RBBINode::leafChar);
-    if (leafNode == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    leafNode->fVal = (unsigned short)val;
-    if (usetNode->fLeftChild == NULL) {
-        usetNode->fLeftChild = leafNode;
-        leafNode->fParent    = usetNode;
-    } else {
-        // There are already input symbols present for this set.
-        // Set up an OR node, with the previous stuff as the left child
-        //   and the new value as the right child.
-        RBBINode *orNode = new RBBINode(RBBINode::opOr);
-        if (orNode == NULL) {
-            *fStatus = U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-        orNode->fLeftChild  = usetNode->fLeftChild;
-        orNode->fRightChild = leafNode;
-        orNode->fLeftChild->fParent  = orNode;
-        orNode->fRightChild->fParent = orNode;
-        usetNode->fLeftChild = orNode;
-        orNode->fParent = usetNode;
-    }
-}
-
-
-//------------------------------------------------------------------------
-//
-//   getNumCharCategories
-//
-//------------------------------------------------------------------------
-int32_t  RBBISetBuilder::getNumCharCategories() const {
-    return fGroupCount + 3;
-}
-
-
-//------------------------------------------------------------------------
-//
-//   sawBOF
-//
-//------------------------------------------------------------------------
-UBool  RBBISetBuilder::sawBOF() const {
-    return fSawBOF;
-}
-
-
-//------------------------------------------------------------------------
-//
-//   getFirstChar      Given a runtime RBBI character category, find
-//                     the first UChar32 that is in the set of chars 
-//                     in the category.
-//------------------------------------------------------------------------
-UChar32  RBBISetBuilder::getFirstChar(int32_t category) const {
-    RangeDescriptor   *rlRange;
-    UChar32            retVal = (UChar32)-1;
-    for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
-        if (rlRange->fNum == category) {
-            retVal = rlRange->fStartChar;
-            break;
-        }
-    }
-    return retVal;
-}
-
-
-
-//------------------------------------------------------------------------
-//
-//   printRanges        A debugging function.
-//                      dump out all of the range definitions.
-//
-//------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBISetBuilder::printRanges() {
-    RangeDescriptor       *rlRange;
-    int                    i;
-
-    RBBIDebugPrintf("\n\n Nonoverlapping Ranges ...\n");
-    for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
-        RBBIDebugPrintf("%2i  %4x-%4x  ", rlRange->fNum, rlRange->fStartChar, rlRange->fEndChar);
-
-        for (i=0; i<rlRange->fIncludesSets->size(); i++) {
-            RBBINode       *usetNode    = (RBBINode *)rlRange->fIncludesSets->elementAt(i);
-            UnicodeString   setName = UNICODE_STRING("anon", 4);
-            RBBINode       *setRef = usetNode->fParent;
-            if (setRef != NULL) {
-                RBBINode *varRef = setRef->fParent;
-                if (varRef != NULL  &&  varRef->fType == RBBINode::varRef) {
-                    setName = varRef->fText;
-                }
-            }
-            RBBI_DEBUG_printUnicodeString(setName); RBBIDebugPrintf("  ");
-        }
-        RBBIDebugPrintf("\n");
-    }
-}
-#endif
-
-
-//------------------------------------------------------------------------
-//
-//   printRangeGroups     A debugging function.
-//                        dump out all of the range groups.
-//
-//------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBISetBuilder::printRangeGroups() {
-    RangeDescriptor       *rlRange;
-    RangeDescriptor       *tRange;
-    int                    i;
-    int                    lastPrintedGroupNum = 0;
-
-    RBBIDebugPrintf("\nRanges grouped by Unicode Set Membership...\n");
-    for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
-        int groupNum = rlRange->fNum & 0xbfff;
-        if (groupNum > lastPrintedGroupNum) {
-            lastPrintedGroupNum = groupNum;
-            RBBIDebugPrintf("%2i  ", groupNum);
-
-            if (rlRange->fNum & 0x4000) { RBBIDebugPrintf(" <DICT> ");}
-
-            for (i=0; i<rlRange->fIncludesSets->size(); i++) {
-                RBBINode       *usetNode    = (RBBINode *)rlRange->fIncludesSets->elementAt(i);
-                UnicodeString   setName = UNICODE_STRING("anon", 4);
-                RBBINode       *setRef = usetNode->fParent;
-                if (setRef != NULL) {
-                    RBBINode *varRef = setRef->fParent;
-                    if (varRef != NULL  &&  varRef->fType == RBBINode::varRef) {
-                        setName = varRef->fText;
-                    }
-                }
-                RBBI_DEBUG_printUnicodeString(setName); RBBIDebugPrintf(" ");
-            }
-
-            i = 0;
-            for (tRange = rlRange; tRange != 0; tRange = tRange->fNext) {
-                if (tRange->fNum == rlRange->fNum) {
-                    if (i++ % 5 == 0) {
-                        RBBIDebugPrintf("\n    ");
-                    }
-                    RBBIDebugPrintf("  %05x-%05x", tRange->fStartChar, tRange->fEndChar);
-                }
-            }
-            RBBIDebugPrintf("\n");
-        }
-    }
-    RBBIDebugPrintf("\n");
-}
-#endif
-
-
-//------------------------------------------------------------------------
-//
-//   printSets          A debugging function.
-//                      dump out all of the set definitions.
-//
-//------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBISetBuilder::printSets() {
-    int                   i;
-
-    RBBIDebugPrintf("\n\nUnicode Sets List\n------------------\n");
-    for (i=0; ; i++) {
-        RBBINode        *usetNode;
-        RBBINode        *setRef;
-        RBBINode        *varRef;
-        UnicodeString    setName;
-
-        usetNode = (RBBINode *)fRB->fUSetNodes->elementAt(i);
-        if (usetNode == NULL) {
-            break;
-        }
-
-        RBBIDebugPrintf("%3d    ", i);
-        setName = UNICODE_STRING("anonymous", 9);
-        setRef = usetNode->fParent;
-        if (setRef != NULL) {
-            varRef = setRef->fParent;
-            if (varRef != NULL  &&  varRef->fType == RBBINode::varRef) {
-                setName = varRef->fText;
-            }
-        }
-        RBBI_DEBUG_printUnicodeString(setName);
-        RBBIDebugPrintf("   ");
-        RBBI_DEBUG_printUnicodeString(usetNode->fText);
-        RBBIDebugPrintf("\n");
-        if (usetNode->fLeftChild != NULL) {
-            usetNode->fLeftChild->printTree(TRUE);
-        }
-    }
-    RBBIDebugPrintf("\n");
-}
-#endif
-
-
-
-//-------------------------------------------------------------------------------------
-//
-//  RangeDescriptor copy constructor
-//
-//-------------------------------------------------------------------------------------
-
-RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &status) {
-    int  i;
-
-    this->fStartChar    = other.fStartChar;
-    this->fEndChar      = other.fEndChar;
-    this->fNum          = other.fNum;
-    this->fNext         = NULL;
-    UErrorCode oldstatus = status;
-    this->fIncludesSets = new UVector(status);
-    if (U_FAILURE(oldstatus)) {
-        status = oldstatus;
-    }
-    if (U_FAILURE(status)) {
-        return;
-    }
-    /* test for NULL */
-    if (this->fIncludesSets == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-
-    for (i=0; i<other.fIncludesSets->size(); i++) {
-        this->fIncludesSets->addElement(other.fIncludesSets->elementAt(i), status);
-    }
-}
-
-
-//-------------------------------------------------------------------------------------
-//
-//  RangeDesriptor default constructor
-//
-//-------------------------------------------------------------------------------------
-RangeDescriptor::RangeDescriptor(UErrorCode &status) {
-    this->fStartChar    = 0;
-    this->fEndChar      = 0;
-    this->fNum          = 0;
-    this->fNext         = NULL;
-    UErrorCode oldstatus = status;
-    this->fIncludesSets = new UVector(status);
-    if (U_FAILURE(oldstatus)) {
-        status = oldstatus;
-    }
-    if (U_FAILURE(status)) {
-        return;
-    }
-    /* test for NULL */
-    if(this->fIncludesSets == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-
-}
-
-
-//-------------------------------------------------------------------------------------
-//
-//  RangeDesriptor Destructor
-//
-//-------------------------------------------------------------------------------------
-RangeDescriptor::~RangeDescriptor() {
-    delete  fIncludesSets;
-    fIncludesSets = NULL;
-}
-
-//-------------------------------------------------------------------------------------
-//
-//  RangeDesriptor::split()
-//
-//-------------------------------------------------------------------------------------
-void RangeDescriptor::split(UChar32 where, UErrorCode &status) {
-    U_ASSERT(where>fStartChar && where<=fEndChar);
-    RangeDescriptor *nr = new RangeDescriptor(*this, status);
-    if(nr == 0) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    if (U_FAILURE(status)) {
-        delete nr;
-        return;
-    }
-    //  RangeDescriptor copy constructor copies all fields.
-    //  Only need to update those that are different after the split.
-    nr->fStartChar = where;
-    this->fEndChar = where-1;
-    nr->fNext      = this->fNext;
-    this->fNext    = nr;
-}
-
-
-//-------------------------------------------------------------------------------------
-//
-//   RangeDescriptor::setDictionaryFlag
-//
-//            Character Category Numbers that include characters from
-//            the original Unicode Set named "dictionary" have bit 14
-//            set to 1.  The RBBI runtime engine uses this to trigger
-//            use of the word dictionary.
-//
-//            This function looks through the Unicode Sets that it
-//            (the range) includes, and sets the bit in fNum when
-//            "dictionary" is among them.
-//
-//            TODO:  a faster way would be to find the set node for
-//                   "dictionary" just once, rather than looking it
-//                   up by name every time.
-//
-//-------------------------------------------------------------------------------------
-void RangeDescriptor::setDictionaryFlag() {
-    int i;
-
-    for (i=0; i<this->fIncludesSets->size(); i++) {
-        RBBINode       *usetNode    = (RBBINode *)fIncludesSets->elementAt(i);
-        UnicodeString   setName;
-        RBBINode       *setRef = usetNode->fParent;
-        if (setRef != NULL) {
-            RBBINode *varRef = setRef->fParent;
-            if (varRef != NULL  &&  varRef->fType == RBBINode::varRef) {
-                setName = varRef->fText;
-            }
-        }
-        if (setName.compare(UNICODE_STRING("dictionary", 10)) == 0) {   // TODO:  no string literals.
-            this->fNum |= 0x4000;
-            break;
-        }
-    }
-}
-
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbisetb.h b/src/third_party/mozjs/intl/icu/source/common/rbbisetb.h
deleted file mode 100644
index c8bc1df..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbisetb.h
+++ /dev/null
@@ -1,130 +0,0 @@
-//
-//  rbbisetb.h
-/*
-**********************************************************************
-*   Copyright (c) 2001-2005, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-
-#ifndef RBBISETB_H
-#define RBBISETB_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "rbbirb.h"
-#include "uvector.h"
-
-struct  UNewTrie;
-
-U_NAMESPACE_BEGIN
-
-//
-//  RBBISetBuilder   Derives the character categories used by the runtime RBBI engine
-//                   from the Unicode Sets appearing in the source  RBBI rules, and
-//                   creates the TRIE table used to map from Unicode to the
-//                   character categories.
-//
-
-
-//
-//  RangeDescriptor
-//
-//     Each of the non-overlapping character ranges gets one of these descriptors.
-//     All of them are strung together in a linked list, which is kept in order
-//     (by character)
-//
-class RangeDescriptor : public UMemory {
-public:
-    UChar32            fStartChar;      // Start of range, unicode 32 bit value.
-    UChar32            fEndChar;        // End of range, unicode 32 bit value.
-    int32_t            fNum;            // runtime-mapped input value for this range.
-    UVector           *fIncludesSets;   // vector of the the original
-                                        //   Unicode sets that include this range.
-                                        //    (Contains ptrs to uset nodes)
-    RangeDescriptor   *fNext;           // Next RangeDescriptor in the linked list.
-
-    RangeDescriptor(UErrorCode &status);
-    RangeDescriptor(const RangeDescriptor &other, UErrorCode &status);
-    ~RangeDescriptor();
-    void split(UChar32 where, UErrorCode &status);   // Spit this range in two at "where", with
-                                        //   where appearing in the second (higher) part.
-    void setDictionaryFlag();           // Check whether this range appears as part of
-                                        //   the Unicode set named "dictionary"
-
-private:
-    RangeDescriptor(const RangeDescriptor &other); // forbid copying of this class
-    RangeDescriptor &operator=(const RangeDescriptor &other); // forbid copying of this class
-};
-
-
-//
-//  RBBISetBuilder   Handles processing of Unicode Sets from RBBI rules.
-//
-//      Starting with the rules parse tree from the scanner,
-//
-//                   -  Enumerate the set of UnicodeSets that are referenced
-//                      by the RBBI rules.
-//                   -  compute a derived set of non-overlapping UnicodeSets
-//                      that will correspond to columns in the state table for
-//                      the RBBI execution engine.
-//                   -  construct the trie table that maps input characters
-//                      to set numbers in the non-overlapping set of sets.
-//
-
-
-class RBBISetBuilder : public UMemory {
-public:
-    RBBISetBuilder(RBBIRuleBuilder *rb);
-    ~RBBISetBuilder();
-
-    void     build();
-    void     addValToSets(UVector *sets,      uint32_t val);
-    void     addValToSet (RBBINode *usetNode, uint32_t val);
-    int32_t  getNumCharCategories() const;   // CharCategories are the same as input symbol set to the
-                                             //    runtime state machine, which are the same as
-                                             //    columns in the DFA state table
-    int32_t  getTrieSize() /*const*/;        // Size in bytes of the serialized Trie.
-    void     serializeTrie(uint8_t *where);  // write out the serialized Trie.
-    UChar32  getFirstChar(int32_t  val) const;
-    UBool    sawBOF() const;                 // Indicate whether any references to the {bof} pseudo
-                                             //   character were encountered.
-#ifdef RBBI_DEBUG
-    void     printSets();
-    void     printRanges();
-    void     printRangeGroups();
-#else
-    #define printSets()
-    #define printRanges()
-    #define printRangeGroups()
-#endif
-
-private:
-    void           numberSets();
-
-    RBBIRuleBuilder       *fRB;             // The RBBI Rule Compiler that owns us.
-    UErrorCode            *fStatus;
-
-    RangeDescriptor       *fRangeList;      // Head of the linked list of RangeDescriptors
-
-    UNewTrie              *fTrie;           // The mapping TRIE that is the end result of processing
-    uint32_t              fTrieSize;        //  the Unicode Sets.
-
-    // Groups correspond to character categories -
-    //       groups of ranges that are in the same original UnicodeSets.
-    //       fGroupCount is the index of the last used group.
-    //       fGroupCount+1 is also the number of columns in the RBBI state table being compiled.
-    //       State table column 0 is not used.  Column 1 is for end-of-input.
-    //       column 2 is for group 0.  Funny counting.
-    int32_t               fGroupCount;
-
-    UBool                 fSawBOF;
-
-    RBBISetBuilder(const RBBISetBuilder &other); // forbid copying of this class
-    RBBISetBuilder &operator=(const RBBISetBuilder &other); // forbid copying of this class
-};
-
-
-
-U_NAMESPACE_END
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbistbl.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbistbl.cpp
deleted file mode 100644
index 804eca7..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbistbl.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-//
-//  file:  rbbistbl.cpp    Implementation of the ICU RBBISymbolTable class
-//
-/*
-***************************************************************************
-*   Copyright (C) 2002-2011 International Business Machines Corporation
-*   and others. All rights reserved.
-***************************************************************************
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/unistr.h"
-#include "unicode/uniset.h"
-#include "unicode/uchar.h"
-#include "unicode/parsepos.h"
-
-#include "umutex.h"
-
-#include "rbbirb.h"
-#include "rbbinode.h"
-
-
-//
-//  RBBISymbolTableEntry_deleter    Used by the UHashTable to delete the contents
-//                                  when the hash table is deleted.
-//
-U_CDECL_BEGIN
-static void U_CALLCONV RBBISymbolTableEntry_deleter(void *p) {
-    icu::RBBISymbolTableEntry *px = (icu::RBBISymbolTableEntry *)p;
-    delete px;
-}
-U_CDECL_END
-
-
-
-U_NAMESPACE_BEGIN
-
-RBBISymbolTable::RBBISymbolTable(RBBIRuleScanner *rs, const UnicodeString &rules, UErrorCode &status)
-    :fRules(rules), fRuleScanner(rs), ffffString(UChar(0xffff))
-{
-    fHashTable       = NULL;
-    fCachedSetLookup = NULL;
-    
-    fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, &status);
-    // uhash_open checks status
-    if (U_FAILURE(status)) {
-        return;
-    }
-    uhash_setValueDeleter(fHashTable, RBBISymbolTableEntry_deleter);
-}
-
-
-
-RBBISymbolTable::~RBBISymbolTable()
-{
-    uhash_close(fHashTable);
-}
-
-
-//
-//  RBBISymbolTable::lookup       This function from the abstract symbol table inteface
-//                                looks up a variable name and returns a UnicodeString
-//                                containing the substitution text.
-//
-//                                The variable name does NOT include the leading $.
-//
-const UnicodeString  *RBBISymbolTable::lookup(const UnicodeString& s) const
-{
-    RBBISymbolTableEntry  *el;
-    RBBINode              *varRefNode;
-    RBBINode              *exprNode;
-    RBBINode              *usetNode;
-    const UnicodeString   *retString;
-    RBBISymbolTable       *This = (RBBISymbolTable *)this;   // cast off const
-
-    el = (RBBISymbolTableEntry *)uhash_get(fHashTable, &s);
-    if (el == NULL) {
-        return NULL;
-    }
-
-    varRefNode = el->val;
-    exprNode   = varRefNode->fLeftChild;     // Root node of expression for variable
-    if (exprNode->fType == RBBINode::setRef) {
-        // The $variable refers to a single UnicodeSet
-        //   return the ffffString, which will subsequently be interpreted as a
-        //   stand-in character for the set by RBBISymbolTable::lookupMatcher()
-        usetNode = exprNode->fLeftChild;
-        This->fCachedSetLookup = usetNode->fInputSet;
-        retString = &ffffString;
-    }
-    else
-    {
-        // The variable refers to something other than just a set.
-        // return the original source string for the expression
-        retString = &exprNode->fText;
-        This->fCachedSetLookup = NULL;
-    }
-    return retString;
-}
-
-
-
-//
-//  RBBISymbolTable::lookupMatcher   This function from the abstract symbol table
-//                                   interface maps a single stand-in character to a
-//                                   pointer to a Unicode Set.   The Unicode Set code uses this
-//                                   mechanism to get all references to the same $variable
-//                                   name to refer to a single common Unicode Set instance.
-//
-//    This implementation cheats a little, and does not maintain a map of stand-in chars
-//    to sets.  Instead, it takes advantage of the fact that  the UnicodeSet
-//    constructor will always call this function right after calling lookup(),
-//    and we just need to remember what set to return between these two calls.
-const UnicodeFunctor *RBBISymbolTable::lookupMatcher(UChar32 ch) const
-{
-    UnicodeSet *retVal = NULL;
-    RBBISymbolTable *This = (RBBISymbolTable *)this;   // cast off const
-    if (ch == 0xffff) {
-        retVal = fCachedSetLookup;
-        This->fCachedSetLookup = 0;
-    }
-    return retVal;
-}
-
-//
-// RBBISymbolTable::parseReference   This function from the abstract symbol table interface
-//                                   looks for a $variable name in the source text.
-//                                   It does not look it up, only scans for it.
-//                                   It is used by the UnicodeSet parser.
-//
-//                                   This implementation is lifted pretty much verbatim
-//                                   from the rules based transliterator implementation.
-//                                   I didn't see an obvious way of sharing it.
-//
-UnicodeString   RBBISymbolTable::parseReference(const UnicodeString& text,
-                                                ParsePosition& pos, int32_t limit) const
-{
-    int32_t start = pos.getIndex();
-    int32_t i = start;
-    UnicodeString result;
-    while (i < limit) {
-        UChar c = text.charAt(i);
-        if ((i==start && !u_isIDStart(c)) || !u_isIDPart(c)) {
-            break;
-        }
-        ++i;
-    }
-    if (i == start) { // No valid name chars
-        return result; // Indicate failure with empty string
-    }
-    pos.setIndex(i);
-    text.extractBetween(start, i, result);
-    return result;
-}
-
-
-
-//
-// RBBISymbolTable::lookupNode      Given a key (a variable name), return the
-//                                  corresponding RBBI Node.  If there is no entry
-//                                  in the table for this name, return NULL.
-//
-RBBINode       *RBBISymbolTable::lookupNode(const UnicodeString &key) const{
-
-    RBBINode             *retNode = NULL;
-    RBBISymbolTableEntry *el;
-
-    el = (RBBISymbolTableEntry *)uhash_get(fHashTable, &key);
-    if (el != NULL) {
-        retNode = el->val;
-    }
-    return retNode;
-}
-
-
-//
-//    RBBISymbolTable::addEntry     Add a new entry to the symbol table.
-//                                  Indicate an error if the name already exists -
-//                                    this will only occur in the case of duplicate
-//                                    variable assignments.
-//
-void            RBBISymbolTable::addEntry  (const UnicodeString &key, RBBINode *val, UErrorCode &err) {
-    RBBISymbolTableEntry *e;
-    /* test for buffer overflows */
-    if (U_FAILURE(err)) {
-        return;
-    }
-    e = (RBBISymbolTableEntry *)uhash_get(fHashTable, &key);
-    if (e != NULL) {
-        err = U_BRK_VARIABLE_REDFINITION;
-        return;
-    }
-
-    e = new RBBISymbolTableEntry;
-    if (e == NULL) {
-        err = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    e->key = key;
-    e->val = val;
-    uhash_put( fHashTable, &e->key, e, &err);
-}
-
-
-RBBISymbolTableEntry::RBBISymbolTableEntry() : UMemory(), key(), val(NULL) {}
-
-RBBISymbolTableEntry::~RBBISymbolTableEntry() {
-    // The "val" of a symbol table entry is a variable reference node.
-    // The l. child of the val is the rhs expression from the assignment.
-    // Unlike other node types, children of variable reference nodes are not
-    //    automatically recursively deleted.  We do it manually here.
-    delete val->fLeftChild;
-    val->fLeftChild = NULL;
-
-    delete  val;
-
-    // Note: the key UnicodeString is destructed by virtue of being in the object by value.
-}
-
-
-//
-//  RBBISymbolTable::print    Debugging function, dump out the symbol table contents.
-//
-#ifdef RBBI_DEBUG
-void RBBISymbolTable::rbbiSymtablePrint() const {
-    RBBIDebugPrintf("Variable Definitions\n"
-           "Name               Node Val     String Val\n"
-           "----------------------------------------------------------------------\n");
-
-    int32_t pos = -1;
-    const UHashElement  *e   = NULL;
-    for (;;) {
-        e = uhash_nextElement(fHashTable,  &pos);
-        if (e == NULL ) {
-            break;
-        }
-        RBBISymbolTableEntry  *s   = (RBBISymbolTableEntry *)e->value.pointer;
-
-        RBBI_DEBUG_printUnicodeString(s->key, 15);
-        RBBIDebugPrintf("   %8p   ", (void *)s->val);
-        RBBI_DEBUG_printUnicodeString(s->val->fLeftChild->fText);
-        RBBIDebugPrintf("\n");
-    }
-
-    RBBIDebugPrintf("\nParsed Variable Definitions\n");
-    pos = -1;
-    for (;;) {
-        e = uhash_nextElement(fHashTable,  &pos);
-        if (e == NULL ) {
-            break;
-        }
-        RBBISymbolTableEntry  *s   = (RBBISymbolTableEntry *)e->value.pointer;
-        RBBI_DEBUG_printUnicodeString(s->key);
-        s->val->fLeftChild->printTree(TRUE);
-        RBBIDebugPrintf("\n");
-    }
-}
-#endif
-
-
-
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbitblb.cpp b/src/third_party/mozjs/intl/icu/source/common/rbbitblb.cpp
deleted file mode 100644
index 2ce82df..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbitblb.cpp
+++ /dev/null
@@ -1,1260 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (c) 2002-2009, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-//
-//  rbbitblb.cpp
-//
-
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/unistr.h"
-#include "rbbitblb.h"
-#include "rbbirb.h"
-#include "rbbisetb.h"
-#include "rbbidata.h"
-#include "cstring.h"
-#include "uassert.h"
-#include "cmemory.h"
-
-U_NAMESPACE_BEGIN
-
-RBBITableBuilder::RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode) :
- fTree(*rootNode) {
-    fRB                 = rb;
-    fStatus             = fRB->fStatus;
-    UErrorCode status   = U_ZERO_ERROR;
-    fDStates            = new UVector(status);
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    if (U_FAILURE(status)) {
-        *fStatus = status;
-        return;
-    }
-    if (fDStates == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;;
-    }
-}
-
-
-
-RBBITableBuilder::~RBBITableBuilder() {
-    int i;
-    for (i=0; i<fDStates->size(); i++) {
-        delete (RBBIStateDescriptor *)fDStates->elementAt(i);
-    }
-    delete   fDStates;
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//   RBBITableBuilder::build  -  This is the main function for building the DFA state transtion
-//                               table from the RBBI rules parse tree.
-//
-//-----------------------------------------------------------------------------
-void  RBBITableBuilder::build() {
-
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    // If there were no rules, just return.  This situation can easily arise
-    //   for the reverse rules.
-    if (fTree==NULL) {
-        return;
-    }
-
-    //
-    // Walk through the tree, replacing any references to $variables with a copy of the
-    //   parse tree for the substition expression.
-    //
-    fTree = fTree->flattenVariables();
-#ifdef RBBI_DEBUG
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ftree")) {
-        RBBIDebugPuts("Parse tree after flattening variable references.");
-        fTree->printTree(TRUE);
-    }
-#endif
-
-    //
-    // If the rules contained any references to {bof} 
-    //   add a {bof} <cat> <former root of tree> to the
-    //   tree.  Means that all matches must start out with the 
-    //   {bof} fake character.
-    // 
-    if (fRB->fSetBuilder->sawBOF()) {
-        RBBINode *bofTop    = new RBBINode(RBBINode::opCat);
-        RBBINode *bofLeaf   = new RBBINode(RBBINode::leafChar);
-        // Delete and exit if memory allocation failed.
-        if (bofTop == NULL || bofLeaf == NULL) {
-            *fStatus = U_MEMORY_ALLOCATION_ERROR;
-            delete bofTop;
-            delete bofLeaf;
-            return;
-        }
-        bofTop->fLeftChild  = bofLeaf;
-        bofTop->fRightChild = fTree;
-        bofLeaf->fParent    = bofTop;
-        bofLeaf->fVal       = 2;      // Reserved value for {bof}.
-        fTree               = bofTop;
-    }
-
-    //
-    // Add a unique right-end marker to the expression.
-    //   Appears as a cat-node, left child being the original tree,
-    //   right child being the end marker.
-    //
-    RBBINode *cn = new RBBINode(RBBINode::opCat);
-    // Exit if memory allocation failed.
-    if (cn == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    cn->fLeftChild = fTree;
-    fTree->fParent = cn;
-    cn->fRightChild = new RBBINode(RBBINode::endMark);
-    // Delete and exit if memory allocation failed.
-    if (cn->fRightChild == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        delete cn;
-        return;
-    }
-    cn->fRightChild->fParent = cn;
-    fTree = cn;
-
-    //
-    //  Replace all references to UnicodeSets with the tree for the equivalent
-    //      expression.
-    //
-    fTree->flattenSets();
-#ifdef RBBI_DEBUG
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "stree")) {
-        RBBIDebugPuts("Parse tree after flattening Unicode Set references.");
-        fTree->printTree(TRUE);
-    }
-#endif
-
-
-    //
-    // calculate the functions nullable, firstpos, lastpos and followpos on
-    // nodes in the parse tree.
-    //    See the alogrithm description in Aho.
-    //    Understanding how this works by looking at the code alone will be
-    //       nearly impossible.
-    //
-    calcNullable(fTree);
-    calcFirstPos(fTree);
-    calcLastPos(fTree);
-    calcFollowPos(fTree);
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "pos")) {
-        RBBIDebugPuts("\n");
-        printPosSets(fTree);
-    }
-
-    //
-    //  For "chained" rules, modify the followPos sets
-    //
-    if (fRB->fChainRules) {
-        calcChainedFollowPos(fTree);
-    }
-
-    //
-    //  BOF (start of input) test fixup.
-    //
-    if (fRB->fSetBuilder->sawBOF()) {
-        bofFixup();
-    }
-
-    //
-    // Build the DFA state transition tables.
-    //
-    buildStateTable();
-    flagAcceptingStates();
-    flagLookAheadStates();
-    flagTaggedStates();
-
-    //
-    // Update the global table of rule status {tag} values
-    // The rule builder has a global vector of status values that are common
-    //    for all tables.  Merge the ones from this table into the global set.
-    //
-    mergeRuleStatusVals();
-
-    if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "states")) {printStates();};
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   calcNullable.    Impossible to explain succinctly.  See Aho, section 3.9
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::calcNullable(RBBINode *n) {
-    if (n == NULL) {
-        return;
-    }
-    if (n->fType == RBBINode::setRef ||
-        n->fType == RBBINode::endMark ) {
-        // These are non-empty leaf node types.
-        n->fNullable = FALSE;
-        return;
-    }
-
-    if (n->fType == RBBINode::lookAhead || n->fType == RBBINode::tag) {
-        // Lookahead marker node.  It's a leaf, so no recursion on children.
-        // It's nullable because it does not match any literal text from the input stream.
-        n->fNullable = TRUE;
-        return;
-    }
-
-
-    // The node is not a leaf.
-    //  Calculate nullable on its children.
-    calcNullable(n->fLeftChild);
-    calcNullable(n->fRightChild);
-
-    // Apply functions from table 3.40 in Aho
-    if (n->fType == RBBINode::opOr) {
-        n->fNullable = n->fLeftChild->fNullable || n->fRightChild->fNullable;
-    }
-    else if (n->fType == RBBINode::opCat) {
-        n->fNullable = n->fLeftChild->fNullable && n->fRightChild->fNullable;
-    }
-    else if (n->fType == RBBINode::opStar || n->fType == RBBINode::opQuestion) {
-        n->fNullable = TRUE;
-    }
-    else {
-        n->fNullable = FALSE;
-    }
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   calcFirstPos.    Impossible to explain succinctly.  See Aho, section 3.9
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::calcFirstPos(RBBINode *n) {
-    if (n == NULL) {
-        return;
-    }
-    if (n->fType == RBBINode::leafChar  ||
-        n->fType == RBBINode::endMark   ||
-        n->fType == RBBINode::lookAhead ||
-        n->fType == RBBINode::tag) {
-        // These are non-empty leaf node types.
-        // Note: In order to maintain the sort invariant on the set,
-        // this function should only be called on a node whose set is
-        // empty to start with.
-        n->fFirstPosSet->addElement(n, *fStatus);
-        return;
-    }
-
-    // The node is not a leaf.
-    //  Calculate firstPos on its children.
-    calcFirstPos(n->fLeftChild);
-    calcFirstPos(n->fRightChild);
-
-    // Apply functions from table 3.40 in Aho
-    if (n->fType == RBBINode::opOr) {
-        setAdd(n->fFirstPosSet, n->fLeftChild->fFirstPosSet);
-        setAdd(n->fFirstPosSet, n->fRightChild->fFirstPosSet);
-    }
-    else if (n->fType == RBBINode::opCat) {
-        setAdd(n->fFirstPosSet, n->fLeftChild->fFirstPosSet);
-        if (n->fLeftChild->fNullable) {
-            setAdd(n->fFirstPosSet, n->fRightChild->fFirstPosSet);
-        }
-    }
-    else if (n->fType == RBBINode::opStar ||
-             n->fType == RBBINode::opQuestion ||
-             n->fType == RBBINode::opPlus) {
-        setAdd(n->fFirstPosSet, n->fLeftChild->fFirstPosSet);
-    }
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   calcLastPos.    Impossible to explain succinctly.  See Aho, section 3.9
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::calcLastPos(RBBINode *n) {
-    if (n == NULL) {
-        return;
-    }
-    if (n->fType == RBBINode::leafChar  ||
-        n->fType == RBBINode::endMark   ||
-        n->fType == RBBINode::lookAhead ||
-        n->fType == RBBINode::tag) {
-        // These are non-empty leaf node types.
-        // Note: In order to maintain the sort invariant on the set,
-        // this function should only be called on a node whose set is
-        // empty to start with.
-        n->fLastPosSet->addElement(n, *fStatus);
-        return;
-    }
-
-    // The node is not a leaf.
-    //  Calculate lastPos on its children.
-    calcLastPos(n->fLeftChild);
-    calcLastPos(n->fRightChild);
-
-    // Apply functions from table 3.40 in Aho
-    if (n->fType == RBBINode::opOr) {
-        setAdd(n->fLastPosSet, n->fLeftChild->fLastPosSet);
-        setAdd(n->fLastPosSet, n->fRightChild->fLastPosSet);
-    }
-    else if (n->fType == RBBINode::opCat) {
-        setAdd(n->fLastPosSet, n->fRightChild->fLastPosSet);
-        if (n->fRightChild->fNullable) {
-            setAdd(n->fLastPosSet, n->fLeftChild->fLastPosSet);
-        }
-    }
-    else if (n->fType == RBBINode::opStar     ||
-             n->fType == RBBINode::opQuestion ||
-             n->fType == RBBINode::opPlus) {
-        setAdd(n->fLastPosSet, n->fLeftChild->fLastPosSet);
-    }
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   calcFollowPos.    Impossible to explain succinctly.  See Aho, section 3.9
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::calcFollowPos(RBBINode *n) {
-    if (n == NULL ||
-        n->fType == RBBINode::leafChar ||
-        n->fType == RBBINode::endMark) {
-        return;
-    }
-
-    calcFollowPos(n->fLeftChild);
-    calcFollowPos(n->fRightChild);
-
-    // Aho rule #1
-    if (n->fType == RBBINode::opCat) {
-        RBBINode *i;   // is 'i' in Aho's description
-        uint32_t     ix;
-
-        UVector *LastPosOfLeftChild = n->fLeftChild->fLastPosSet;
-
-        for (ix=0; ix<(uint32_t)LastPosOfLeftChild->size(); ix++) {
-            i = (RBBINode *)LastPosOfLeftChild->elementAt(ix);
-            setAdd(i->fFollowPos, n->fRightChild->fFirstPosSet);
-        }
-    }
-
-    // Aho rule #2
-    if (n->fType == RBBINode::opStar ||
-        n->fType == RBBINode::opPlus) {
-        RBBINode   *i;  // again, n and i are the names from Aho's description.
-        uint32_t    ix;
-
-        for (ix=0; ix<(uint32_t)n->fLastPosSet->size(); ix++) {
-            i = (RBBINode *)n->fLastPosSet->elementAt(ix);
-            setAdd(i->fFollowPos, n->fFirstPosSet);
-        }
-    }
-
-
-
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//   calcChainedFollowPos.    Modify the previously calculated followPos sets
-//                            to implement rule chaining.  NOT described by Aho
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) {
-
-    UVector         endMarkerNodes(*fStatus);
-    UVector         leafNodes(*fStatus);
-    int32_t         i;
-
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    // get a list of all endmarker nodes.
-    tree->findNodes(&endMarkerNodes, RBBINode::endMark, *fStatus);
-
-    // get a list all leaf nodes
-    tree->findNodes(&leafNodes, RBBINode::leafChar, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    // Get all nodes that can be the start a match, which is FirstPosition()
-    // of the portion of the tree corresponding to user-written rules.
-    // See the tree description in bofFixup().
-    RBBINode *userRuleRoot = tree;
-    if (fRB->fSetBuilder->sawBOF()) {
-        userRuleRoot = tree->fLeftChild->fRightChild;
-    }
-    U_ASSERT(userRuleRoot != NULL);
-    UVector *matchStartNodes = userRuleRoot->fFirstPosSet;
-
-
-    // Iteratate over all leaf nodes,
-    //
-    int32_t  endNodeIx;
-    int32_t  startNodeIx;
-
-    for (endNodeIx=0; endNodeIx<leafNodes.size(); endNodeIx++) {
-        RBBINode *tNode   = (RBBINode *)leafNodes.elementAt(endNodeIx);
-        RBBINode *endNode = NULL;
-
-        // Identify leaf nodes that correspond to overall rule match positions.
-        //   These include an endMarkerNode in their followPos sets.
-        for (i=0; i<endMarkerNodes.size(); i++) {
-            if (tNode->fFollowPos->contains(endMarkerNodes.elementAt(i))) {
-                endNode = tNode;
-                break;
-            }
-        }
-        if (endNode == NULL) {
-            // node wasn't an end node.  Try again with the next.
-            continue;
-        }
-
-        // We've got a node that can end a match.
-
-        // Line Break Specific hack:  If this node's val correspond to the $CM char class,
-        //                            don't chain from it.
-        // TODO:  Add rule syntax for this behavior, get specifics out of here and
-        //        into the rule file.
-        if (fRB->fLBCMNoChain) {
-            UChar32 c = this->fRB->fSetBuilder->getFirstChar(endNode->fVal);
-            if (c != -1) {
-                // c == -1 occurs with sets containing only the {eof} marker string.
-                ULineBreak cLBProp = (ULineBreak)u_getIntPropertyValue(c, UCHAR_LINE_BREAK);
-                if (cLBProp == U_LB_COMBINING_MARK) {
-                    continue;
-                }
-            }
-        }
-
-
-        // Now iterate over the nodes that can start a match, looking for ones
-        //   with the same char class as our ending node.
-        RBBINode *startNode;
-        for (startNodeIx = 0; startNodeIx<matchStartNodes->size(); startNodeIx++) {
-            startNode = (RBBINode *)matchStartNodes->elementAt(startNodeIx);
-            if (startNode->fType != RBBINode::leafChar) {
-                continue;
-            }
-
-            if (endNode->fVal == startNode->fVal) {
-                // The end val (character class) of one possible match is the
-                //   same as the start of another.
-
-                // Add all nodes from the followPos of the start node to the
-                //  followPos set of the end node, which will have the effect of
-                //  letting matches transition from a match state at endNode
-                //  to the second char of a match starting with startNode.
-                setAdd(endNode->fFollowPos, startNode->fFollowPos);
-            }
-        }
-    }
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//   bofFixup.    Fixup for state tables that include {bof} beginning of input testing.
-//                Do an swizzle similar to chaining, modifying the followPos set of
-//                the bofNode to include the followPos nodes from other {bot} nodes
-//                scattered through the tree.
-//
-//                This function has much in common with calcChainedFollowPos().
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::bofFixup() {
-
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    //   The parse tree looks like this ...
-    //         fTree root  --->       <cat>
-    //                               /     \       .
-    //                            <cat>   <#end node>
-    //                           /     \  .
-    //                     <bofNode>   rest
-    //                               of tree
-    //
-    //    We will be adding things to the followPos set of the <bofNode>
-    //
-    RBBINode  *bofNode = fTree->fLeftChild->fLeftChild;
-    U_ASSERT(bofNode->fType == RBBINode::leafChar);
-    U_ASSERT(bofNode->fVal == 2);
-
-    // Get all nodes that can be the start a match of the user-written rules
-    //  (excluding the fake bofNode)
-    //  We want the nodes that can start a match in the
-    //     part labeled "rest of tree"
-    // 
-    UVector *matchStartNodes = fTree->fLeftChild->fRightChild->fFirstPosSet;
-
-    RBBINode *startNode;
-    int       startNodeIx;
-    for (startNodeIx = 0; startNodeIx<matchStartNodes->size(); startNodeIx++) {
-        startNode = (RBBINode *)matchStartNodes->elementAt(startNodeIx);
-        if (startNode->fType != RBBINode::leafChar) {
-            continue;
-        }
-
-        if (startNode->fVal == bofNode->fVal) {
-            //  We found a leaf node corresponding to a {bof} that was
-            //    explicitly written into a rule.
-            //  Add everything from the followPos set of this node to the
-            //    followPos set of the fake bofNode at the start of the tree.
-            //  
-            setAdd(bofNode->fFollowPos, startNode->fFollowPos);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-//
-//   buildStateTable()    Determine the set of runtime DFA states and the
-//                        transition tables for these states, by the algorithm
-//                        of fig. 3.44 in Aho.
-//
-//                        Most of the comments are quotes of Aho's psuedo-code.
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::buildStateTable() {
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    RBBIStateDescriptor *failState;
-    // Set it to NULL to avoid uninitialized warning
-    RBBIStateDescriptor *initialState = NULL; 
-    //
-    // Add a dummy state 0 - the stop state.  Not from Aho.
-    int      lastInputSymbol = fRB->fSetBuilder->getNumCharCategories() - 1;
-    failState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
-    if (failState == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        goto ExitBuildSTdeleteall;
-    }
-    failState->fPositions = new UVector(*fStatus);
-    if (failState->fPositions == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-    }
-    if (failState->fPositions == NULL || U_FAILURE(*fStatus)) {
-        goto ExitBuildSTdeleteall;
-    }
-    fDStates->addElement(failState, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        goto ExitBuildSTdeleteall;
-    }
-
-    // initially, the only unmarked state in Dstates is firstpos(root),
-    //       where toot is the root of the syntax tree for (r)#;
-    initialState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
-    if (initialState == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-    }
-    if (U_FAILURE(*fStatus)) {
-        goto ExitBuildSTdeleteall;
-    }
-    initialState->fPositions = new UVector(*fStatus);
-    if (initialState->fPositions == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-    }
-    if (U_FAILURE(*fStatus)) {
-        goto ExitBuildSTdeleteall;
-    }
-    setAdd(initialState->fPositions, fTree->fFirstPosSet);
-    fDStates->addElement(initialState, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        goto ExitBuildSTdeleteall;
-    }
-
-    // while there is an unmarked state T in Dstates do begin
-    for (;;) {
-        RBBIStateDescriptor *T = NULL;
-        int32_t              tx;
-        for (tx=1; tx<fDStates->size(); tx++) {
-            RBBIStateDescriptor *temp;
-            temp = (RBBIStateDescriptor *)fDStates->elementAt(tx);
-            if (temp->fMarked == FALSE) {
-                T = temp;
-                break;
-            }
-        }
-        if (T == NULL) {
-            break;
-        }
-
-        // mark T;
-        T->fMarked = TRUE;
-
-        // for each input symbol a do begin
-        int32_t  a;
-        for (a = 1; a<=lastInputSymbol; a++) {
-            // let U be the set of positions that are in followpos(p)
-            //    for some position p in T
-            //    such that the symbol at position p is a;
-            UVector    *U = NULL;
-            RBBINode   *p;
-            int32_t     px;
-            for (px=0; px<T->fPositions->size(); px++) {
-                p = (RBBINode *)T->fPositions->elementAt(px);
-                if ((p->fType == RBBINode::leafChar) &&  (p->fVal == a)) {
-                    if (U == NULL) {
-                        U = new UVector(*fStatus);
-                        if (U == NULL) {
-                        	*fStatus = U_MEMORY_ALLOCATION_ERROR;
-                        	goto ExitBuildSTdeleteall;
-                        }
-                    }
-                    setAdd(U, p->fFollowPos);
-                }
-            }
-
-            // if U is not empty and not in DStates then
-            int32_t  ux = 0;
-            UBool    UinDstates = FALSE;
-            if (U != NULL) {
-                U_ASSERT(U->size() > 0);
-                int  ix;
-                for (ix=0; ix<fDStates->size(); ix++) {
-                    RBBIStateDescriptor *temp2;
-                    temp2 = (RBBIStateDescriptor *)fDStates->elementAt(ix);
-                    if (setEquals(U, temp2->fPositions)) {
-                        delete U;
-                        U  = temp2->fPositions;
-                        ux = ix;
-                        UinDstates = TRUE;
-                        break;
-                    }
-                }
-
-                // Add U as an unmarked state to Dstates
-                if (!UinDstates)
-                {
-                    RBBIStateDescriptor *newState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
-                    if (newState == NULL) {
-                    	*fStatus = U_MEMORY_ALLOCATION_ERROR;
-                    }
-                    if (U_FAILURE(*fStatus)) {
-                        goto ExitBuildSTdeleteall;
-                    }
-                    newState->fPositions = U;
-                    fDStates->addElement(newState, *fStatus);
-                    if (U_FAILURE(*fStatus)) {
-                        return;
-                    }
-                    ux = fDStates->size()-1;
-                }
-
-                // Dtran[T, a] := U;
-                T->fDtran->setElementAt(ux, a);
-            }
-        }
-    }
-    return;
-    // delete local pointers only if error occured.
-ExitBuildSTdeleteall:
-    delete initialState;
-    delete failState;
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   flagAcceptingStates    Identify accepting states.
-//                          First get a list of all of the end marker nodes.
-//                          Then, for each state s,
-//                              if s contains one of the end marker nodes in its list of tree positions then
-//                                  s is an accepting state.
-//
-//-----------------------------------------------------------------------------
-void     RBBITableBuilder::flagAcceptingStates() {
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    UVector     endMarkerNodes(*fStatus);
-    RBBINode    *endMarker;
-    int32_t     i;
-    int32_t     n;
-
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    fTree->findNodes(&endMarkerNodes, RBBINode::endMark, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-
-    for (i=0; i<endMarkerNodes.size(); i++) {
-        endMarker = (RBBINode *)endMarkerNodes.elementAt(i);
-        for (n=0; n<fDStates->size(); n++) {
-            RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
-            if (sd->fPositions->indexOf(endMarker) >= 0) {
-                // Any non-zero value for fAccepting means this is an accepting node.
-                // The value is what will be returned to the user as the break status.
-                // If no other value was specified, force it to -1.
-
-                if (sd->fAccepting==0) {
-                    // State hasn't been marked as accepting yet.  Do it now.
-                    sd->fAccepting = endMarker->fVal;
-                    if (sd->fAccepting == 0) {
-                        sd->fAccepting = -1;
-                    }
-                }
-                if (sd->fAccepting==-1 && endMarker->fVal != 0) {
-                    // Both lookahead and non-lookahead accepting for this state.
-                    // Favor the look-ahead.  Expedient for line break.
-                    // TODO:  need a more elegant resolution for conflicting rules.
-                    sd->fAccepting = endMarker->fVal;
-                }
-                // implicit else:
-                // if sd->fAccepting already had a value other than 0 or -1, leave it be.
-
-                // If the end marker node is from a look-ahead rule, set
-                //   the fLookAhead field or this state also.
-                if (endMarker->fLookAheadEnd) {
-                    // TODO:  don't change value if already set?
-                    // TODO:  allow for more than one active look-ahead rule in engine.
-                    //        Make value here an index to a side array in engine?
-                    sd->fLookAhead = sd->fAccepting;
-                }
-            }
-        }
-    }
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//    flagLookAheadStates   Very similar to flagAcceptingStates, above.
-//
-//-----------------------------------------------------------------------------
-void     RBBITableBuilder::flagLookAheadStates() {
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    UVector     lookAheadNodes(*fStatus);
-    RBBINode    *lookAheadNode;
-    int32_t     i;
-    int32_t     n;
-
-    fTree->findNodes(&lookAheadNodes, RBBINode::lookAhead, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    for (i=0; i<lookAheadNodes.size(); i++) {
-        lookAheadNode = (RBBINode *)lookAheadNodes.elementAt(i);
-
-        for (n=0; n<fDStates->size(); n++) {
-            RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
-            if (sd->fPositions->indexOf(lookAheadNode) >= 0) {
-                sd->fLookAhead = lookAheadNode->fVal;
-            }
-        }
-    }
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-//
-//    flagTaggedStates
-//
-//-----------------------------------------------------------------------------
-void     RBBITableBuilder::flagTaggedStates() {
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    UVector     tagNodes(*fStatus);
-    RBBINode    *tagNode;
-    int32_t     i;
-    int32_t     n;
-
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    fTree->findNodes(&tagNodes, RBBINode::tag, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    for (i=0; i<tagNodes.size(); i++) {                   // For each tag node t (all of 'em)
-        tagNode = (RBBINode *)tagNodes.elementAt(i);
-
-        for (n=0; n<fDStates->size(); n++) {              //    For each state  s (row in the state table)
-            RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
-            if (sd->fPositions->indexOf(tagNode) >= 0) {  //       if  s include the tag node t
-                sortedAdd(&sd->fTagVals, tagNode->fVal);
-            }
-        }
-    }
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-//
-//  mergeRuleStatusVals
-//
-//      Update the global table of rule status {tag} values
-//      The rule builder has a global vector of status values that are common
-//      for all tables.  Merge the ones from this table into the global set.
-//
-//-----------------------------------------------------------------------------
-void  RBBITableBuilder::mergeRuleStatusVals() {
-    //
-    //  The basic outline of what happens here is this...
-    //
-    //    for each state in this state table
-    //       if the status tag list for this state is in the global statuses list
-    //           record where and
-    //           continue with the next state
-    //       else
-    //           add the tag list for this state to the global list.
-    //
-    int i;
-    int n;
-
-    // Pre-set a single tag of {0} into the table.
-    //   We will need this as a default, for rule sets with no explicit tagging.
-    if (fRB->fRuleStatusVals->size() == 0) {
-        fRB->fRuleStatusVals->addElement(1, *fStatus);  // Num of statuses in group
-        fRB->fRuleStatusVals->addElement((int32_t)0, *fStatus);  //   and our single status of zero
-    }
-
-    //    For each state
-    for (n=0; n<fDStates->size(); n++) {
-        RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
-        UVector *thisStatesTagValues = sd->fTagVals;
-        if (thisStatesTagValues == NULL) {
-            // No tag values are explicitly associated with this state.
-            //   Set the default tag value.
-            sd->fTagsIdx = 0;
-            continue;
-        }
-
-        // There are tag(s) associated with this state.
-        //   fTagsIdx will be the index into the global tag list for this state's tag values.
-        //   Initial value of -1 flags that we haven't got it set yet.
-        sd->fTagsIdx = -1;
-        int32_t  thisTagGroupStart = 0;   // indexes into the global rule status vals list
-        int32_t  nextTagGroupStart = 0;
-
-        // Loop runs once per group of tags in the global list
-        while (nextTagGroupStart < fRB->fRuleStatusVals->size()) {
-            thisTagGroupStart = nextTagGroupStart;
-            nextTagGroupStart += fRB->fRuleStatusVals->elementAti(thisTagGroupStart) + 1;
-            if (thisStatesTagValues->size() != fRB->fRuleStatusVals->elementAti(thisTagGroupStart)) {
-                // The number of tags for this state is different from
-                //    the number of tags in this group from the global list.
-                //    Continue with the next group from the global list.
-                continue;
-            }
-            // The lengths match, go ahead and compare the actual tag values
-            //    between this state and the group from the global list.
-            for (i=0; i<thisStatesTagValues->size(); i++) {
-                if (thisStatesTagValues->elementAti(i) !=
-                    fRB->fRuleStatusVals->elementAti(thisTagGroupStart + 1 + i) ) {
-                    // Mismatch.
-                    break;
-                }
-            }
-
-            if (i == thisStatesTagValues->size()) {
-                // We found a set of tag values in the global list that match
-                //   those for this state.  Use them.
-                sd->fTagsIdx = thisTagGroupStart;
-                break;
-            }
-        }
-
-        if (sd->fTagsIdx == -1) {
-            // No suitable entry in the global tag list already.  Add one
-            sd->fTagsIdx = fRB->fRuleStatusVals->size();
-            fRB->fRuleStatusVals->addElement(thisStatesTagValues->size(), *fStatus);
-            for (i=0; i<thisStatesTagValues->size(); i++) {
-                fRB->fRuleStatusVals->addElement(thisStatesTagValues->elementAti(i), *fStatus);
-            }
-        }
-    }
-}
-
-
-
-
-
-
-
-//-----------------------------------------------------------------------------
-//
-//  sortedAdd  Add a value to a vector of sorted values (ints).
-//             Do not replicate entries; if the value is already there, do not
-//                add a second one.
-//             Lazily create the vector if it does not already exist.
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::sortedAdd(UVector **vector, int32_t val) {
-    int32_t i;
-
-    if (*vector == NULL) {
-        *vector = new UVector(*fStatus);
-    }
-    if (*vector == NULL || U_FAILURE(*fStatus)) {
-        return;
-    }
-    UVector *vec = *vector;
-    int32_t  vSize = vec->size();
-    for (i=0; i<vSize; i++) {
-        int32_t valAtI = vec->elementAti(i);
-        if (valAtI == val) {
-            // The value is already in the vector.  Don't add it again.
-            return;
-        }
-        if (valAtI > val) {
-            break;
-        }
-    }
-    vec->insertElementAt(val, i, *fStatus);
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//  setAdd     Set operation on UVector
-//             dest = dest union source
-//             Elements may only appear once and must be sorted.
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
-    int32_t destOriginalSize = dest->size();
-    int32_t sourceSize       = source->size();
-    int32_t di           = 0;
-    MaybeStackArray<void *, 16> destArray, sourceArray;  // Handle small cases without malloc
-    void **destPtr, **sourcePtr;
-    void **destLim, **sourceLim;
-
-    if (destOriginalSize > destArray.getCapacity()) {
-        if (destArray.resize(destOriginalSize) == NULL) {
-            return;
-        }
-    }
-    destPtr = destArray.getAlias();
-    destLim = destPtr + destOriginalSize;  // destArray.getArrayLimit()?
-
-    if (sourceSize > sourceArray.getCapacity()) {
-        if (sourceArray.resize(sourceSize) == NULL) {
-            return;
-        }
-    }
-    sourcePtr = sourceArray.getAlias();
-    sourceLim = sourcePtr + sourceSize;  // sourceArray.getArrayLimit()?
-
-    // Avoid multiple "get element" calls by getting the contents into arrays
-    (void) dest->toArray(destPtr);
-    (void) source->toArray(sourcePtr);
-
-    dest->setSize(sourceSize+destOriginalSize, *fStatus);
-
-    while (sourcePtr < sourceLim && destPtr < destLim) {
-        if (*destPtr == *sourcePtr) {
-            dest->setElementAt(*sourcePtr++, di++);
-            destPtr++;
-        }
-        // This check is required for machines with segmented memory, like i5/OS.
-        // Direct pointer comparison is not recommended.
-        else if (uprv_memcmp(destPtr, sourcePtr, sizeof(void *)) < 0) {
-            dest->setElementAt(*destPtr++, di++);
-        }
-        else { /* *sourcePtr < *destPtr */
-            dest->setElementAt(*sourcePtr++, di++);
-        }
-    }
-
-    // At most one of these two cleanup loops will execute
-    while (destPtr < destLim) {
-        dest->setElementAt(*destPtr++, di++);
-    }
-    while (sourcePtr < sourceLim) {
-        dest->setElementAt(*sourcePtr++, di++);
-    }
-
-    dest->setSize(di, *fStatus);
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//  setEqual    Set operation on UVector.
-//              Compare for equality.
-//              Elements must be sorted.
-//
-//-----------------------------------------------------------------------------
-UBool RBBITableBuilder::setEquals(UVector *a, UVector *b) {
-    return a->equals(*b);
-}
-
-
-//-----------------------------------------------------------------------------
-//
-//  printPosSets   Debug function.  Dump Nullable, firstpos, lastpos and followpos
-//                 for each node in the tree.
-//
-//-----------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBITableBuilder::printPosSets(RBBINode *n) {
-    if (n==NULL) {
-        return;
-    }
-    n->printNode();
-    RBBIDebugPrintf("         Nullable:  %s\n", n->fNullable?"TRUE":"FALSE");
-
-    RBBIDebugPrintf("         firstpos:  ");
-    printSet(n->fFirstPosSet);
-
-    RBBIDebugPrintf("         lastpos:   ");
-    printSet(n->fLastPosSet);
-
-    RBBIDebugPrintf("         followpos: ");
-    printSet(n->fFollowPos);
-
-    printPosSets(n->fLeftChild);
-    printPosSets(n->fRightChild);
-}
-#endif
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   getTableSize()    Calculate the size of the runtime form of this
-//                     state transition table.
-//
-//-----------------------------------------------------------------------------
-int32_t  RBBITableBuilder::getTableSize() const {
-    int32_t    size = 0;
-    int32_t    numRows;
-    int32_t    numCols;
-    int32_t    rowSize;
-
-    if (fTree == NULL) {
-        return 0;
-    }
-
-    size    = sizeof(RBBIStateTable) - 4;    // The header, with no rows to the table.
-
-    numRows = fDStates->size();
-    numCols = fRB->fSetBuilder->getNumCharCategories();
-
-    //  Note  The declaration of RBBIStateTableRow is for a table of two columns.
-    //        Therefore we subtract two from numCols when determining
-    //        how much storage to add to a row for the total columns.
-    rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2);
-    size   += numRows * rowSize;
-    return size;
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   exportTable()    export the state transition table in the format required
-//                    by the runtime engine.  getTableSize() bytes of memory
-//                    must be available at the output address "where".
-//
-//-----------------------------------------------------------------------------
-void RBBITableBuilder::exportTable(void *where) {
-    RBBIStateTable    *table = (RBBIStateTable *)where;
-    uint32_t           state;
-    int                col;
-
-    if (U_FAILURE(*fStatus) || fTree == NULL) {
-        return;
-    }
-
-    if (fRB->fSetBuilder->getNumCharCategories() > 0x7fff ||
-        fDStates->size() > 0x7fff) {
-        *fStatus = U_BRK_INTERNAL_ERROR;
-        return;
-    }
-
-    table->fRowLen    = sizeof(RBBIStateTableRow) +
-                            sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 2);
-    table->fNumStates = fDStates->size();
-    table->fFlags     = 0;
-    if (fRB->fLookAheadHardBreak) {
-        table->fFlags  |= RBBI_LOOKAHEAD_HARD_BREAK;
-    }
-    if (fRB->fSetBuilder->sawBOF()) {
-        table->fFlags  |= RBBI_BOF_REQUIRED;
-    }
-    table->fReserved  = 0;
-
-    for (state=0; state<table->fNumStates; state++) {
-        RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(state);
-        RBBIStateTableRow   *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen);
-        U_ASSERT (-32768 < sd->fAccepting && sd->fAccepting <= 32767);
-        U_ASSERT (-32768 < sd->fLookAhead && sd->fLookAhead <= 32767);
-        row->fAccepting = (int16_t)sd->fAccepting;
-        row->fLookAhead = (int16_t)sd->fLookAhead;
-        row->fTagIdx    = (int16_t)sd->fTagsIdx;
-        for (col=0; col<fRB->fSetBuilder->getNumCharCategories(); col++) {
-            row->fNextState[col] = (uint16_t)sd->fDtran->elementAti(col);
-        }
-    }
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   printSet    Debug function.   Print the contents of a UVector
-//
-//-----------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBITableBuilder::printSet(UVector *s) {
-    int32_t  i;
-    for (i=0; i<s->size(); i++) {
-        void *v = s->elementAt(i);
-        RBBIDebugPrintf("%10p", v);
-    }
-    RBBIDebugPrintf("\n");
-}
-#endif
-
-
-//-----------------------------------------------------------------------------
-//
-//   printStates    Debug Function.  Dump the fully constructed state transition table.
-//
-//-----------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBITableBuilder::printStates() {
-    int     c;    // input "character"
-    int     n;    // state number
-
-    RBBIDebugPrintf("state |           i n p u t     s y m b o l s \n");
-    RBBIDebugPrintf("      | Acc  LA    Tag");
-    for (c=0; c<fRB->fSetBuilder->getNumCharCategories(); c++) {
-        RBBIDebugPrintf(" %2d", c);
-    }
-    RBBIDebugPrintf("\n");
-    RBBIDebugPrintf("      |---------------");
-    for (c=0; c<fRB->fSetBuilder->getNumCharCategories(); c++) {
-        RBBIDebugPrintf("---");
-    }
-    RBBIDebugPrintf("\n");
-
-    for (n=0; n<fDStates->size(); n++) {
-        RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
-        RBBIDebugPrintf("  %3d | " , n);
-        RBBIDebugPrintf("%3d %3d %5d ", sd->fAccepting, sd->fLookAhead, sd->fTagsIdx);
-        for (c=0; c<fRB->fSetBuilder->getNumCharCategories(); c++) {
-            RBBIDebugPrintf(" %2d", sd->fDtran->elementAti(c));
-        }
-        RBBIDebugPrintf("\n");
-    }
-    RBBIDebugPrintf("\n\n");
-}
-#endif
-
-
-
-//-----------------------------------------------------------------------------
-//
-//   printRuleStatusTable    Debug Function.  Dump the common rule status table
-//
-//-----------------------------------------------------------------------------
-#ifdef RBBI_DEBUG
-void RBBITableBuilder::printRuleStatusTable() {
-    int32_t  thisRecord = 0;
-    int32_t  nextRecord = 0;
-    int      i;
-    UVector  *tbl = fRB->fRuleStatusVals;
-
-    RBBIDebugPrintf("index |  tags \n");
-    RBBIDebugPrintf("-------------------\n");
-
-    while (nextRecord < tbl->size()) {
-        thisRecord = nextRecord;
-        nextRecord = thisRecord + tbl->elementAti(thisRecord) + 1;
-        RBBIDebugPrintf("%4d   ", thisRecord);
-        for (i=thisRecord+1; i<nextRecord; i++) {
-            RBBIDebugPrintf("  %5d", tbl->elementAti(i));
-        }
-        RBBIDebugPrintf("\n");
-    }
-    RBBIDebugPrintf("\n\n");
-}
-#endif
-
-
-//-----------------------------------------------------------------------------
-//
-//   RBBIStateDescriptor     Methods.  This is a very struct-like class
-//                           Most access is directly to the fields.
-//
-//-----------------------------------------------------------------------------
-
-RBBIStateDescriptor::RBBIStateDescriptor(int lastInputSymbol, UErrorCode *fStatus) {
-    fMarked    = FALSE;
-    fAccepting = 0;
-    fLookAhead = 0;
-    fTagsIdx   = 0;
-    fTagVals   = NULL;
-    fPositions = NULL;
-    fDtran     = NULL;
-
-    fDtran     = new UVector(lastInputSymbol+1, *fStatus);
-    if (U_FAILURE(*fStatus)) {
-        return;
-    }
-    if (fDtran == NULL) {
-        *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    fDtran->setSize(lastInputSymbol+1, *fStatus);    // fDtran needs to be pre-sized.
-                                           //   It is indexed by input symbols, and will
-                                           //   hold  the next state number for each
-                                           //   symbol.
-}
-
-
-RBBIStateDescriptor::~RBBIStateDescriptor() {
-    delete       fPositions;
-    delete       fDtran;
-    delete       fTagVals;
-    fPositions = NULL;
-    fDtran     = NULL;
-    fTagVals   = NULL;
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/rbbitblb.h b/src/third_party/mozjs/intl/icu/source/common/rbbitblb.h
deleted file mode 100644
index 3805b67..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/rbbitblb.h
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-//  rbbitblb.h
-//
-
-/*
-**********************************************************************
-*   Copyright (c) 2002-2005, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-
-#ifndef RBBITBLB_H
-#define RBBITBLB_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/rbbi.h"
-#include "rbbinode.h"
-
-
-U_NAMESPACE_BEGIN
-
-class RBBIRuleScanner;
-class RBBIRuleBuilder;
-
-//
-//  class RBBITableBuilder is part of the RBBI rule compiler.
-//                         It builds the state transition table used by the RBBI runtime
-//                         from the expression syntax tree generated by the rule scanner.
-//
-//                         This class is part of the RBBI implementation only.
-//                         There is no user-visible public API here.
-//
-
-class RBBITableBuilder : public UMemory {
-public:
-    RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode);
-    ~RBBITableBuilder();
-
-    void     build();
-    int32_t  getTableSize() const;      // Return the runtime size in bytes of
-                                        //     the built state table
-    void     exportTable(void *where);  // fill in the runtime state table.
-                                        //     Sufficient memory must exist at
-                                        //     the specified location.
-
-
-private:
-    void     calcNullable(RBBINode *n);
-    void     calcFirstPos(RBBINode *n);
-    void     calcLastPos(RBBINode  *n);
-    void     calcFollowPos(RBBINode *n);
-    void     calcChainedFollowPos(RBBINode *n);
-    void     bofFixup();
-    void     buildStateTable();
-    void     flagAcceptingStates();
-    void     flagLookAheadStates();
-    void     flagTaggedStates();
-    void     mergeRuleStatusVals();
-
-    // Set functions for UVector.
-    //   TODO:  make a USet subclass of UVector
-
-    void     setAdd(UVector *dest, UVector *source);
-    UBool    setEquals(UVector *a, UVector *b);
-
-    void     sortedAdd(UVector **dest, int32_t val);
-
-public:
-#ifdef RBBI_DEBUG
-    void     printSet(UVector *s);
-    void     printPosSets(RBBINode *n /* = NULL*/);
-    void     printStates();
-    void     printRuleStatusTable();
-#else
-    #define  printSet(s)
-    #define  printPosSets(n)
-    #define  printStates()
-    #define  printRuleStatusTable()
-#endif
-
-private:
-    RBBIRuleBuilder  *fRB;
-    RBBINode         *&fTree;              // The root node of the parse tree to build a
-                                           //   table for.
-    UErrorCode       *fStatus;
-
-    UVector          *fDStates;            //  D states (Aho's terminology)
-                                           //  Index is state number
-                                           //  Contents are RBBIStateDescriptor pointers.
-
-
-    RBBITableBuilder(const RBBITableBuilder &other); // forbid copying of this class
-    RBBITableBuilder &operator=(const RBBITableBuilder &other); // forbid copying of this class
-};
-
-//
-//  RBBIStateDescriptor - The DFA is constructed as a set of these descriptors,
-//                        one for each state.
-class RBBIStateDescriptor : public UMemory {
-public:
-    UBool            fMarked;
-    int32_t          fAccepting;
-    int32_t          fLookAhead;
-    UVector          *fTagVals;
-    int32_t          fTagsIdx;
-    UVector          *fPositions;          // Set of parse tree positions associated
-                                           //   with this state.  Unordered (it's a set).
-                                           //   UVector contents are RBBINode *
-
-    UVector          *fDtran;              // Transitions out of this state.
-                                           //   indexed by input character
-                                           //   contents is int index of dest state
-                                           //   in RBBITableBuilder.fDStates
-
-    RBBIStateDescriptor(int maxInputSymbol,  UErrorCode *fStatus);
-    ~RBBIStateDescriptor();
-
-private:
-    RBBIStateDescriptor(const RBBIStateDescriptor &other); // forbid copying of this class
-    RBBIStateDescriptor &operator=(const RBBIStateDescriptor &other); // forbid copying of this class
-};
-
-
-
-U_NAMESPACE_END
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/resbund.cpp b/src/third_party/mozjs/intl/icu/source/common/resbund.cpp
deleted file mode 100644
index f87a572..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/resbund.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1997-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*
-* File resbund.cpp
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/05/97    aliu        Fixed bug in chopLocale.  Added scanForLocaleInFile
-*                           based on code taken from scanForLocale.  Added
-*                           constructor which attempts to read resource bundle
-*                           from a specific file, without searching other files.
-*   02/11/97    aliu        Added UErrorCode return values to constructors. Fixed
-*                           infinite loops in scanForFile and scanForLocale.
-*                           Modified getRawResourceData to not delete storage in
-*                           localeData and resourceData which it doesn't own.
-*                           Added Mac compatibility #ifdefs for tellp() and
-*                           ios::nocreate.
-*   03/04/97    aliu        Modified to use ExpandingDataSink objects instead of
-*                           the highly inefficient ostrstream objects.
-*   03/13/97    aliu        Rewrote to load in entire resource bundle and store
-*                           it as a Hashtable of ResourceBundleData objects.
-*                           Added state table to govern parsing of files.
-*                           Modified to load locale index out of new file distinct
-*                           from default.txt.
-*   03/25/97    aliu        Modified to support 2-d arrays, needed for timezone data.
-*                           Added support for custom file suffixes.  Again, needed
-*                           to support timezone data.  Improved error handling to
-*                           detect duplicate tags and subtags.
-*   04/07/97    aliu        Fixed bug in getHashtableForLocale().  Fixed handling
-*                           of failing UErrorCode values on entry to API methods.
-*                           Fixed bugs in getArrayItem() for negative indices.
-*   04/29/97    aliu        Update to use new Hashtable deletion protocol.
-*   05/06/97    aliu        Flattened kTransitionTable for HP compiler.
-*                           Fixed usage of CharString.
-* 06/11/99      stephen     Removed parsing of .txt files.
-*                           Reworked to use new binary format.
-*                           Cleaned up.
-* 06/14/99      stephen     Removed methods taking a filename suffix.
-* 06/22/99      stephen     Added missing T_FileStream_close in parse()
-* 11/09/99      weiv        Added getLocale(), rewritten constructForLocale()
-* March 2000    weiv        complete overhaul.
-******************************************************************************
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/resbund.h"
-#include "umutex.h"
-
-#include "uresimp.h"
-
-U_NAMESPACE_BEGIN
-
-/*-----------------------------------------------------------------------------
- * Implementation Notes
- *
- * Resource bundles are read in once, and thereafter cached.
- * ResourceBundle statically keeps track of which files have been
- * read, so we are guaranteed that each file is read at most once.
- * Resource bundles can be loaded from different data directories and
- * will be treated as distinct, even if they are for the same locale.
- *
- * Resource bundles are lightweight objects, which have pointers to
- * one or more shared Hashtable objects containing all the data.
- * Copying would be cheap, but there is no copy constructor, since
- * there wasn't one in the original API.
- *
- * The ResourceBundle parsing mechanism is implemented as a transition
- * network, for easy maintenance and modification.  The network is
- * implemented as a matrix (instead of in code) to make this even
- * easier.  The matrix contains Transition objects.  Each Transition
- * object describes a destination node and an action to take before
- * moving to the destination node.  The source node is encoded by the
- * index of the object in the array that contains it.  The pieces
- * needed to understand the transition network are the enums for node
- * IDs and actions, the parse() method, which walks through the
- * network and implements the actions, and the network itself.  The
- * network guarantees certain conditions, for example, that a new
- * resource will not be closed until one has been opened first; or
- * that data will not be stored into a TaggedList until a TaggedList
- * has been created.  Nonetheless, the code in parse() does some
- * consistency checks as it runs the network, and fails with an
- * U_INTERNAL_PROGRAM_ERROR if one of these checks fails.  If the input
- * data has a bad format, an U_INVALID_FORMAT_ERROR is returned.  If you
- * see an U_INTERNAL_PROGRAM_ERROR the transition matrix has a bug in
- * it.
- *
- * Old functionality of multiple locales in a single file is still
- * supported.  For this reason, LOCALE names override FILE names.  If
- * data for en_US is located in the en.txt file, once it is loaded,
- * the code will not care where it came from (other than remembering
- * which directory it came from).  However, if there is an en_US
- * resource in en_US.txt, that will take precedence.  There is no
- * limit to the number or type of resources that can be stored in a
- * file, however, files are only searched in a specific way.  If
- * en_US_CA is requested, then first en_US_CA.txt is searched, then
- * en_US.txt, then en.txt, then default.txt.  So it only makes sense
- * to put certain locales in certain files.  In this example, it would
- * be logical to put en_US_CA, en_US, and en into the en.txt file,
- * since they would be found there if asked for.  The extreme example
- * is to place all locale resources into default.txt, which should
- * also work.
- *
- * Inheritance is implemented.  For example, xx_YY_zz inherits as
- * follows: xx_YY_zz, xx_YY, xx, default.  Inheritance is implemented
- * as an array of hashtables.  There will be from 1 to 4 hashtables in
- * the array.
- *
- * Fallback files are implemented.  The fallback pattern is Language
- * Country Variant (LCV) -> LC -> L.  Fallback is first done for the
- * requested locale.  Then it is done for the default locale, as
- * returned by Locale::getDefault().  Then the special file
- * default.txt is searched for the default locale.  The overall FILE
- * fallback path is LCV -> LC -> L -> dLCV -> dLC -> dL -> default.
- *
- * Note that although file name searching includes the default locale,
- * once a ResourceBundle object is constructed, the inheritance path
- * no longer includes the default locale.  The path is LCV -> LC -> L
- * -> default.
- *
- * File parsing is lazy.  Nothing is parsed unless it is called for by
- * someone.  So when a ResourceBundle for xx_YY_zz is constructed,
- * only that locale is parsed (along with anything else in the same
- * file).  Later, if the FooBar tag is asked for, and if it isn't
- * found in xx_YY_zz, then xx_YY.txt will be parsed and checked, and
- * so forth, until the chain is exhausted or the tag is found.
- *
- * Thread-safety is implemented around caches, both the cache that
- * stores all the resouce data, and the cache that stores flags
- * indicating whether or not a file has been visited.  These caches
- * delete their storage at static cleanup time, when the process
- * quits.
- *
- * ResourceBundle supports TableCollation as a special case.  This
- * involves having special ResourceBundle objects which DO own their
- * data, since we don't want large collation rule strings in the
- * ResourceBundle cache (these are already cached in the
- * TableCollation cache).  TableCollation files (.ctx files) have the
- * same format as normal resource data files, with a different
- * interpretation, from the standpoint of ResourceBundle.  .ctx files
- * are loaded into otherwise ordinary ResourceBundle objects.  They
- * don't inherit (that's implemented by TableCollation) and they own
- * their data (as mentioned above).  However, they still support
- * possible multiple locales in a single .ctx file.  (This is in
- * practice a bad idea, since you only want the one locale you're
- * looking for, and only one tag will be present
- * ("CollationElements"), so you don't need an inheritance chain of
- * multiple locales.)  Up to 4 locale resources will be loaded from a
- * .ctx file; everything after the first 4 is ignored (parsed and
- * deleted).  (Normal .txt files have no limit.)  Instead of being
- * loaded into the cache, and then looked up as needed, the locale
- * resources are read straight into the ResourceBundle object.
- *
- * The Index, which used to reside in default.txt, has been moved to a
- * new file, index.txt.  This file contains a slightly modified format
- * with the addition of the "InstalledLocales" tag; it looks like:
- *
- * Index {
- *   InstalledLocales {
- *     ar
- *     ..
- *     zh_TW
- *   }
- * }
- */
-//-----------------------------------------------------------------------------
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ResourceBundle)
-
-ResourceBundle::ResourceBundle(UErrorCode &err)
-                                :UObject(), fLocale(NULL)
-{
-    fResource = ures_open(0, Locale::getDefault().getName(), &err);
-}
-
-ResourceBundle::ResourceBundle(const ResourceBundle &other)
-                              :UObject(other), fLocale(NULL)
-{
-    UErrorCode status = U_ZERO_ERROR;
-
-    if (other.fResource) {
-        fResource = ures_copyResb(0, other.fResource, &status);
-    } else {
-        /* Copying a bad resource bundle */
-        fResource = NULL;
-    }
-}
-
-ResourceBundle::ResourceBundle(UResourceBundle *res, UErrorCode& err)
-                               :UObject(), fLocale(NULL)
-{
-    if (res) {
-        fResource = ures_copyResb(0, res, &err);
-    } else {
-        /* Copying a bad resource bundle */
-        fResource = NULL;
-    }
-}
-
-ResourceBundle::ResourceBundle(const char* path, const Locale& locale, UErrorCode& err) 
-                               :UObject(), fLocale(NULL)
-{
-    fResource = ures_open(path, locale.getName(), &err);
-}
-
-
-ResourceBundle& ResourceBundle::operator=(const ResourceBundle& other)
-{
-    if(this == &other) {
-        return *this;
-    }
-    if(fResource != 0) {
-        ures_close(fResource);
-        fResource = NULL;
-    }
-    UErrorCode status = U_ZERO_ERROR;
-    if (other.fResource) {
-        fResource = ures_copyResb(0, other.fResource, &status);
-    } else {
-        /* Copying a bad resource bundle */
-        fResource = NULL;
-    }
-    return *this;
-}
-
-ResourceBundle::~ResourceBundle()
-{
-    if(fResource != 0) {
-        ures_close(fResource);
-    }
-    if(fLocale != NULL) {
-      delete(fLocale);
-    }
-}
-
-ResourceBundle *
-ResourceBundle::clone() const {
-    return new ResourceBundle(*this);
-}
-
-UnicodeString ResourceBundle::getString(UErrorCode& status) const {
-    int32_t len = 0;
-    const UChar *r = ures_getString(fResource, &len, &status);
-    return UnicodeString(TRUE, r, len);
-}
-
-const uint8_t *ResourceBundle::getBinary(int32_t& len, UErrorCode& status) const {
-    return ures_getBinary(fResource, &len, &status);
-}
-
-const int32_t *ResourceBundle::getIntVector(int32_t& len, UErrorCode& status) const {
-    return ures_getIntVector(fResource, &len, &status);
-}
-
-uint32_t ResourceBundle::getUInt(UErrorCode& status) const {
-    return ures_getUInt(fResource, &status);
-}
-
-int32_t ResourceBundle::getInt(UErrorCode& status) const {
-    return ures_getInt(fResource, &status);
-}
-
-const char *ResourceBundle::getName(void) const {
-    return ures_getName(fResource);
-}
-
-const char *ResourceBundle::getKey(void) const {
-    return ures_getKey(fResource);
-}
-
-UResType ResourceBundle::getType(void) const {
-    return ures_getType(fResource);
-}
-
-int32_t ResourceBundle::getSize(void) const {
-    return ures_getSize(fResource);
-}
-
-UBool ResourceBundle::hasNext(void) const {
-    return ures_hasNext(fResource);
-}
-
-void ResourceBundle::resetIterator(void) {
-    ures_resetIterator(fResource);
-}
-
-ResourceBundle ResourceBundle::getNext(UErrorCode& status) {
-    UResourceBundle r;
-
-    ures_initStackObject(&r);
-    ures_getNextResource(fResource, &r, &status);
-    ResourceBundle res(&r, status);
-    if (U_SUCCESS(status)) {
-        ures_close(&r);
-    }
-    return res;
-}
-
-UnicodeString ResourceBundle::getNextString(UErrorCode& status) {
-    int32_t len = 0;
-    const UChar* r = ures_getNextString(fResource, &len, 0, &status);
-    return UnicodeString(TRUE, r, len);
-}
-
-UnicodeString ResourceBundle::getNextString(const char ** key, UErrorCode& status) {
-    int32_t len = 0;
-    const UChar* r = ures_getNextString(fResource, &len, key, &status);
-    return UnicodeString(TRUE, r, len);
-}
-
-ResourceBundle ResourceBundle::get(int32_t indexR, UErrorCode& status) const {
-    UResourceBundle r;
-
-    ures_initStackObject(&r);
-    ures_getByIndex(fResource, indexR, &r, &status);
-    ResourceBundle res(&r, status);
-    if (U_SUCCESS(status)) {
-        ures_close(&r);
-    }
-    return res;
-}
-
-UnicodeString ResourceBundle::getStringEx(int32_t indexS, UErrorCode& status) const {
-    int32_t len = 0;
-    const UChar* r = ures_getStringByIndex(fResource, indexS, &len, &status);
-    return UnicodeString(TRUE, r, len);
-}
-
-ResourceBundle ResourceBundle::get(const char* key, UErrorCode& status) const {
-    UResourceBundle r;
-
-    ures_initStackObject(&r);
-    ures_getByKey(fResource, key, &r, &status);
-    ResourceBundle res(&r, status);
-    if (U_SUCCESS(status)) {
-        ures_close(&r);
-    }
-    return res;
-}
-
-ResourceBundle ResourceBundle::getWithFallback(const char* key, UErrorCode& status){
-    UResourceBundle r;
-    ures_initStackObject(&r);
-    ures_getByKeyWithFallback(fResource, key, &r, &status);
-    ResourceBundle res(&r, status);
-    if(U_SUCCESS(status)){
-        ures_close(&r);
-    }
-    return res;
-}
-UnicodeString ResourceBundle::getStringEx(const char* key, UErrorCode& status) const {
-    int32_t len = 0;
-    const UChar* r = ures_getStringByKey(fResource, key, &len, &status);
-    return UnicodeString(TRUE, r, len);
-}
-
-const char*
-ResourceBundle::getVersionNumber()  const
-{
-    return ures_getVersionNumberInternal(fResource);
-}
-
-void ResourceBundle::getVersion(UVersionInfo versionInfo) const {
-    ures_getVersion(fResource, versionInfo);
-}
-
-const Locale &ResourceBundle::getLocale(void) const
-{
-    UBool needInit;
-    UMTX_CHECK(NULL, (fLocale == NULL), needInit);
-    if(needInit) {
-        UErrorCode status = U_ZERO_ERROR;
-        const char *localeName = ures_getLocaleInternal(fResource, &status);
-        Locale  *tLocale = new Locale(localeName);
-        // Null pointer check
-        if (tLocale == NULL) {
-        	return Locale::getDefault(); // Return default locale if one could not be created.
-        }
-        umtx_lock(NULL);
-        ResourceBundle *me = (ResourceBundle *)this; // semantically const
-        if (me->fLocale == NULL) {
-            me->fLocale = tLocale;
-            tLocale = NULL;
-        }
-        umtx_unlock(NULL);
-        delete tLocale;
-    }
-    return *fLocale;
-}
-
-const Locale ResourceBundle::getLocale(ULocDataLocaleType type, UErrorCode &status) const
-{
-  return ures_getLocaleByType(fResource, type, &status);
-}
-
-//eof
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/resbund_cnv.cpp b/src/third_party/mozjs/intl/icu/source/common/resbund_cnv.cpp
deleted file mode 100644
index a18e57e..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/resbund_cnv.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1997-2006, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  resbund_cnv.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2004aug25
-*   created by: Markus W. Scherer
-*
-*   Character conversion functions moved here from resbund.cpp
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/resbund.h"
-#include "uinvchar.h"
-
-U_NAMESPACE_BEGIN
-
-ResourceBundle::ResourceBundle( const UnicodeString&    path,
-                                const Locale&           locale,
-                                UErrorCode&              error)
-                                :UObject(), fLocale(NULL)
-{
-    constructForLocale(path, locale, error);
-}
-
-ResourceBundle::ResourceBundle( const UnicodeString&    path,
-                                UErrorCode&              error)
-                                :UObject(), fLocale(NULL)
-{
-    constructForLocale(path, Locale::getDefault(), error);
-}
-
-void 
-ResourceBundle::constructForLocale(const UnicodeString& path,
-                                   const Locale& locale,
-                                   UErrorCode& error)
-{
-    if (path.isEmpty()) {
-        fResource = ures_open(NULL, locale.getName(), &error);
-    }
-    else {
-        UnicodeString nullTerminatedPath(path);
-        nullTerminatedPath.append((UChar)0);
-        fResource = ures_openU(nullTerminatedPath.getBuffer(), locale.getName(), &error);
-    }
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/ruleiter.cpp b/src/third_party/mozjs/intl/icu/source/common/ruleiter.cpp
deleted file mode 100644
index 667795e..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ruleiter.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2003-2011, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: September 24 2003
-* Since: ICU 2.8
-**********************************************************************
-*/
-#include "ruleiter.h"
-#include "unicode/parsepos.h"
-#include "unicode/symtable.h"
-#include "unicode/unistr.h"
-#include "unicode/utf16.h"
-#include "patternprops.h"
-
-/* \U87654321 or \ud800\udc00 */
-#define MAX_U_NOTATION_LEN 12
-
-U_NAMESPACE_BEGIN
-
-RuleCharacterIterator::RuleCharacterIterator(const UnicodeString& theText, const SymbolTable* theSym,
-                      ParsePosition& thePos) :
-    text(theText),
-    pos(thePos),
-    sym(theSym),
-    buf(0),
-    bufPos(0)
-{}
-
-UBool RuleCharacterIterator::atEnd() const {
-    return buf == 0 && pos.getIndex() == text.length();
-}
-
-UChar32 RuleCharacterIterator::next(int32_t options, UBool& isEscaped, UErrorCode& ec) {
-    if (U_FAILURE(ec)) return DONE;
-
-    UChar32 c = DONE;
-    isEscaped = FALSE;
-
-    for (;;) {
-        c = _current();
-        _advance(U16_LENGTH(c));
-
-        if (c == SymbolTable::SYMBOL_REF && buf == 0 &&
-            (options & PARSE_VARIABLES) != 0 && sym != 0) {
-            UnicodeString name = sym->parseReference(text, pos, text.length());
-            // If name is empty there was an isolated SYMBOL_REF;
-            // return it.  Caller must be prepared for this.
-            if (name.length() == 0) {
-                break;
-            }
-            bufPos = 0;
-            buf = sym->lookup(name);
-            if (buf == 0) {
-                ec = U_UNDEFINED_VARIABLE;
-                return DONE;
-            }
-            // Handle empty variable value
-            if (buf->length() == 0) {
-                buf = 0;
-            }
-            continue;
-        }
-
-        if ((options & SKIP_WHITESPACE) != 0 && PatternProps::isWhiteSpace(c)) {
-            continue;
-        }
-
-        if (c == 0x5C /*'\\'*/ && (options & PARSE_ESCAPES) != 0) {
-            UnicodeString tempEscape;
-            int32_t offset = 0;
-            c = lookahead(tempEscape, MAX_U_NOTATION_LEN).unescapeAt(offset);
-            jumpahead(offset);
-            isEscaped = TRUE;
-            if (c < 0) {
-                ec = U_MALFORMED_UNICODE_ESCAPE;
-                return DONE;
-            }
-        }
-
-        break;
-    }
-
-    return c;
-}
-
-void RuleCharacterIterator::getPos(RuleCharacterIterator::Pos& p) const {
-    p.buf = buf;
-    p.pos = pos.getIndex();
-    p.bufPos = bufPos;
-}
-
-void RuleCharacterIterator::setPos(const RuleCharacterIterator::Pos& p) {
-    buf = p.buf;
-    pos.setIndex(p.pos);
-    bufPos = p.bufPos;
-}
-
-void RuleCharacterIterator::skipIgnored(int32_t options) {
-    if ((options & SKIP_WHITESPACE) != 0) {
-        for (;;) {
-            UChar32 a = _current();
-            if (!PatternProps::isWhiteSpace(a)) break;
-            _advance(U16_LENGTH(a));
-        }
-    }
-}
-
-UnicodeString& RuleCharacterIterator::lookahead(UnicodeString& result, int32_t maxLookAhead) const {
-    if (maxLookAhead < 0) {
-        maxLookAhead = 0x7FFFFFFF;
-    }
-    if (buf != 0) {
-        buf->extract(bufPos, maxLookAhead, result);
-    } else {
-        text.extract(pos.getIndex(), maxLookAhead, result);
-    }
-    return result;
-}
-
-void RuleCharacterIterator::jumpahead(int32_t count) {
-    _advance(count);
-}
-
-/*
-UnicodeString& RuleCharacterIterator::toString(UnicodeString& result) const {
-    int32_t b = pos.getIndex();
-    text.extract(0, b, result);
-    return result.append((UChar) 0x7C).append(text, b, 0x7FFFFFFF); // Insert '|' at index
-}
-*/
-
-UChar32 RuleCharacterIterator::_current() const {
-    if (buf != 0) {
-        return buf->char32At(bufPos);
-    } else {
-        int i = pos.getIndex();
-        return (i < text.length()) ? text.char32At(i) : (UChar32)DONE;
-    }
-}
-
-void RuleCharacterIterator::_advance(int32_t count) {
-    if (buf != 0) {
-        bufPos += count;
-        if (bufPos == buf->length()) {
-            buf = 0;
-        }
-    } else {
-        pos.setIndex(pos.getIndex() + count);
-        if (pos.getIndex() > text.length()) {
-            pos.setIndex(text.length());
-        }
-    }
-}
-
-U_NAMESPACE_END
-
-//eof
diff --git a/src/third_party/mozjs/intl/icu/source/common/ruleiter.h b/src/third_party/mozjs/intl/icu/source/common/ruleiter.h
deleted file mode 100644
index d8fe212..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ruleiter.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2003-2011, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: September 24 2003
-* Since: ICU 2.8
-**********************************************************************
-*/
-#ifndef _RULEITER_H_
-#define _RULEITER_H_
-
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-
-class UnicodeString;
-class ParsePosition;
-class SymbolTable;
-
-/**
- * An iterator that returns 32-bit code points.  This class is deliberately
- * <em>not</em> related to any of the ICU character iterator classes
- * in order to minimize complexity.
- * @author Alan Liu
- * @since ICU 2.8
- */
-class RuleCharacterIterator : public UMemory {
-
-    // TODO: Ideas for later.  (Do not implement if not needed, lest the
-    // code coverage numbers go down due to unused methods.)
-    // 1. Add a copy constructor, operator==() method.
-    // 2. Rather than return DONE, throw an exception if the end
-    // is reached -- this is an alternate usage model, probably not useful.
-
-private:
-    /**
-     * Text being iterated.
-     */    
-    const UnicodeString& text;
-
-    /**
-     * Position of iterator.
-     */
-    ParsePosition& pos;
-
-    /**
-     * Symbol table used to parse and dereference variables.  May be 0.
-     */
-    const SymbolTable* sym;
-    
-    /**
-     * Current variable expansion, or 0 if none.
-     */
-    const UnicodeString* buf;
-
-    /**
-     * Position within buf.  Meaningless if buf == 0.
-     */
-    int32_t bufPos;
-
-public:
-    /**
-     * Value returned when there are no more characters to iterate.
-     */
-    enum { DONE = -1 };
-
-    /**
-     * Bitmask option to enable parsing of variable names.  If (options &
-     * PARSE_VARIABLES) != 0, then an embedded variable will be expanded to
-     * its value.  Variables are parsed using the SymbolTable API.
-     */
-    enum { PARSE_VARIABLES = 1 };
-
-    /**
-     * Bitmask option to enable parsing of escape sequences.  If (options &
-     * PARSE_ESCAPES) != 0, then an embedded escape sequence will be expanded
-     * to its value.  Escapes are parsed using Utility.unescapeAt().
-     */
-    enum { PARSE_ESCAPES   = 2 };
-
-    /**
-     * Bitmask option to enable skipping of whitespace.  If (options &
-     * SKIP_WHITESPACE) != 0, then Pattern_White_Space characters will be silently
-     * skipped, as if they were not present in the input.
-     */
-    enum { SKIP_WHITESPACE = 4 };
-
-    /**
-     * Constructs an iterator over the given text, starting at the given
-     * position.
-     * @param text the text to be iterated
-     * @param sym the symbol table, or null if there is none.  If sym is null,
-     * then variables will not be deferenced, even if the PARSE_VARIABLES
-     * option is set.
-     * @param pos upon input, the index of the next character to return.  If a
-     * variable has been dereferenced, then pos will <em>not</em> increment as
-     * characters of the variable value are iterated.
-     */
-    RuleCharacterIterator(const UnicodeString& text, const SymbolTable* sym,
-                          ParsePosition& pos);
-    
-    /**
-     * Returns true if this iterator has no more characters to return.
-     */
-    UBool atEnd() const;
-
-    /**
-     * Returns the next character using the given options, or DONE if there
-     * are no more characters, and advance the position to the next
-     * character.
-     * @param options one or more of the following options, bitwise-OR-ed
-     * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
-     * @param isEscaped output parameter set to TRUE if the character
-     * was escaped
-     * @param ec input-output error code.  An error will only be set by
-     * this routing if options includes PARSE_VARIABLES and an unknown
-     * variable name is seen, or if options includes PARSE_ESCAPES and
-     * an invalid escape sequence is seen.
-     * @return the current 32-bit code point, or DONE
-     */
-    UChar32 next(int32_t options, UBool& isEscaped, UErrorCode& ec);
-
-    /**
-     * Returns true if this iterator is currently within a variable expansion.
-     */
-    inline UBool inVariable() const;
-
-    /**
-     * An opaque object representing the position of a RuleCharacterIterator.
-     */
-    struct Pos : public UMemory {
-    private:
-        const UnicodeString* buf;
-        int32_t pos;
-        int32_t bufPos;
-        friend class RuleCharacterIterator;
-    };
-
-    /**
-     * Sets an object which, when later passed to setPos(), will
-     * restore this iterator's position.  Usage idiom:
-     *
-     * RuleCharacterIterator iterator = ...;
-     * RuleCharacterIterator::Pos pos;
-     * iterator.getPos(pos);
-     * for (;;) {
-     *   iterator.getPos(pos);
-     *   int c = iterator.next(...);
-     *   ...
-     * }
-     * iterator.setPos(pos);
-     *
-     * @param p a position object to be set to this iterator's
-     * current position.
-     */
-    void getPos(Pos& p) const;
-
-    /**
-     * Restores this iterator to the position it had when getPos()
-     * set the given object.
-     * @param p a position object previously set by getPos()
-     */
-    void setPos(const Pos& p);
-
-    /**
-     * Skips ahead past any ignored characters, as indicated by the given
-     * options.  This is useful in conjunction with the lookahead() method.
-     *
-     * Currently, this only has an effect for SKIP_WHITESPACE.
-     * @param options one or more of the following options, bitwise-OR-ed
-     * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
-     */
-    void skipIgnored(int32_t options);
-
-    /**
-     * Returns a string containing the remainder of the characters to be
-     * returned by this iterator, without any option processing.  If the
-     * iterator is currently within a variable expansion, this will only
-     * extend to the end of the variable expansion.  This method is provided
-     * so that iterators may interoperate with string-based APIs.  The typical
-     * sequence of calls is to call skipIgnored(), then call lookahead(), then
-     * parse the string returned by lookahead(), then call jumpahead() to
-     * resynchronize the iterator.
-     * @param result a string to receive the characters to be returned
-     * by future calls to next()
-     * @param maxLookAhead The maximum to copy into the result.
-     * @return a reference to result
-     */
-    UnicodeString& lookahead(UnicodeString& result, int32_t maxLookAhead = -1) const;
-
-    /**
-     * Advances the position by the given number of 16-bit code units.
-     * This is useful in conjunction with the lookahead() method.
-     * @param count the number of 16-bit code units to jump over
-     */
-    void jumpahead(int32_t count);
-
-    /**
-     * Returns a string representation of this object, consisting of the
-     * characters being iterated, with a '|' marking the current position.
-     * Position within an expanded variable is <em>not</em> indicated.
-     * @param result output parameter to receive a string
-     * representation of this object
-     */
-//    UnicodeString& toString(UnicodeString& result) const;
-    
-private:
-    /**
-     * Returns the current 32-bit code point without parsing escapes, parsing
-     * variables, or skipping whitespace.
-     * @return the current 32-bit code point
-     */
-    UChar32 _current() const;
-    
-    /**
-     * Advances the position by the given amount.
-     * @param count the number of 16-bit code units to advance past
-     */
-    void _advance(int32_t count);
-};
-
-inline UBool RuleCharacterIterator::inVariable() const {
-    return buf != 0;
-}
-
-U_NAMESPACE_END
-
-#endif // _RULEITER_H_
-//eof
diff --git a/src/third_party/mozjs/intl/icu/source/common/schriter.cpp b/src/third_party/mozjs/intl/icu/source/common/schriter.cpp
deleted file mode 100644
index 17ce400..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/schriter.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-******************************************************************************
-* Copyright (C) 1998-2012, International Business Machines Corporation and
-* others. All Rights Reserved.
-******************************************************************************
-*
-* File schriter.cpp
-*
-* Modification History:
-*
-*   Date        Name        Description
-*  05/05/99     stephen     Cleaned up.
-******************************************************************************
-*/
-
-#include "utypeinfo.h"  // for 'typeid' to work
-
-#include "unicode/chariter.h"
-#include "unicode/schriter.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringCharacterIterator)
-
-StringCharacterIterator::StringCharacterIterator()
-  : UCharCharacterIterator(),
-    text()
-{
-  // NEVER DEFAULT CONSTRUCT!
-}
-
-StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr)
-  : UCharCharacterIterator(textStr.getBuffer(), textStr.length()),
-    text(textStr)
-{
-    // we had set the input parameter's array, now we need to set our copy's array
-    UCharCharacterIterator::text = this->text.getBuffer();
-}
-
-StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr,
-                                                 int32_t textPos)
-  : UCharCharacterIterator(textStr.getBuffer(), textStr.length(), textPos),
-    text(textStr)
-{
-    // we had set the input parameter's array, now we need to set our copy's array
-    UCharCharacterIterator::text = this->text.getBuffer();
-}
-
-StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr,
-                                                 int32_t textBegin,
-                                                 int32_t textEnd,
-                                                 int32_t textPos)
-  : UCharCharacterIterator(textStr.getBuffer(), textStr.length(), textBegin, textEnd, textPos),
-    text(textStr)
-{
-    // we had set the input parameter's array, now we need to set our copy's array
-    UCharCharacterIterator::text = this->text.getBuffer();
-}
-
-StringCharacterIterator::StringCharacterIterator(const StringCharacterIterator& that)
-  : UCharCharacterIterator(that),
-    text(that.text)
-{
-    // we had set the input parameter's array, now we need to set our copy's array
-    UCharCharacterIterator::text = this->text.getBuffer();
-}
-
-StringCharacterIterator::~StringCharacterIterator() {
-}
-
-StringCharacterIterator&
-StringCharacterIterator::operator=(const StringCharacterIterator& that) {
-    UCharCharacterIterator::operator=(that);
-    text = that.text;
-    // we had set the input parameter's array, now we need to set our copy's array
-    UCharCharacterIterator::text = this->text.getBuffer();
-    return *this;
-}
-
-UBool
-StringCharacterIterator::operator==(const ForwardCharacterIterator& that) const {
-    if (this == &that) {
-        return TRUE;
-    }
-
-    // do not call UCharCharacterIterator::operator==()
-    // because that checks for array pointer equality
-    // while we compare UnicodeString objects
-
-    if (typeid(*this) != typeid(that)) {
-        return FALSE;
-    }
-
-    StringCharacterIterator&    realThat = (StringCharacterIterator&)that;
-
-    return text == realThat.text
-        && pos == realThat.pos
-        && begin == realThat.begin
-        && end == realThat.end;
-}
-
-CharacterIterator*
-StringCharacterIterator::clone() const {
-    return new StringCharacterIterator(*this);
-}
-
-void
-StringCharacterIterator::setText(const UnicodeString& newText) {
-    text = newText;
-    UCharCharacterIterator::setText(text.getBuffer(), text.length());
-}
-
-void
-StringCharacterIterator::getText(UnicodeString& result) {
-    result = text;
-}
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/serv.cpp b/src/third_party/mozjs/intl/icu/source/common/serv.cpp
deleted file mode 100644
index 1a8c916..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/serv.cpp
+++ /dev/null
@@ -1,981 +0,0 @@
-/**
-*******************************************************************************
-* Copyright (C) 2001-2012, International Business Machines Corporation.
-* All Rights Reserved.
-*******************************************************************************
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "serv.h"
-#include "umutex.h"
-
-#undef SERVICE_REFCOUNT
-
-// in case we use the refcount stuff
-
-U_NAMESPACE_BEGIN
-
-/*
-******************************************************************
-*/
-
-const UChar ICUServiceKey::PREFIX_DELIMITER = 0x002F;   /* '/' */
-
-ICUServiceKey::ICUServiceKey(const UnicodeString& id) 
-: _id(id) {
-}
-
-ICUServiceKey::~ICUServiceKey() 
-{
-}
-
-const UnicodeString& 
-ICUServiceKey::getID() const 
-{
-    return _id;
-}
-
-UnicodeString& 
-ICUServiceKey::canonicalID(UnicodeString& result) const 
-{
-    return result.append(_id);
-}
-
-UnicodeString& 
-ICUServiceKey::currentID(UnicodeString& result) const 
-{
-    return canonicalID(result);
-}
-
-UnicodeString& 
-ICUServiceKey::currentDescriptor(UnicodeString& result) const 
-{
-    prefix(result);
-    result.append(PREFIX_DELIMITER);
-    return currentID(result);
-}
-
-UBool 
-ICUServiceKey::fallback() 
-{
-    return FALSE;
-}
-
-UBool 
-ICUServiceKey::isFallbackOf(const UnicodeString& id) const 
-{
-    return id == _id;
-}
-
-UnicodeString& 
-ICUServiceKey::prefix(UnicodeString& result) const 
-{
-    return result;
-}
-
-UnicodeString& 
-ICUServiceKey::parsePrefix(UnicodeString& result) 
-{
-    int32_t n = result.indexOf(PREFIX_DELIMITER);
-    if (n < 0) {
-        n = 0;
-    }
-    result.remove(n);
-    return result;
-}
-
-UnicodeString& 
-ICUServiceKey::parseSuffix(UnicodeString& result) 
-{
-    int32_t n = result.indexOf(PREFIX_DELIMITER);
-    if (n >= 0) {
-        result.remove(0, n+1);
-    }
-    return result;
-}
-
-#ifdef SERVICE_DEBUG
-UnicodeString& 
-ICUServiceKey::debug(UnicodeString& result) const 
-{
-    debugClass(result);
-    result.append(" id: ");
-    result.append(_id);
-    return result;
-}
-
-UnicodeString& 
-ICUServiceKey::debugClass(UnicodeString& result) const 
-{
-    return result.append("ICUServiceKey");
-}
-#endif
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUServiceKey)
-
-/*
-******************************************************************
-*/
-
-ICUServiceFactory::~ICUServiceFactory() {}
-
-SimpleFactory::SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible) 
-: _instance(instanceToAdopt), _id(id), _visible(visible)
-{
-}
-
-SimpleFactory::~SimpleFactory() 
-{
-    delete _instance;
-}
-
-UObject* 
-SimpleFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const 
-{
-    if (U_SUCCESS(status)) {
-        UnicodeString temp;
-        if (_id == key.currentID(temp)) {
-            return service->cloneInstance(_instance); 
-        }
-    }
-    return NULL;
-}
-
-void 
-SimpleFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const 
-{
-    if (_visible) {
-        result.put(_id, (void*)this, status); // cast away const
-    } else {
-        result.remove(_id);
-    }
-}
-
-UnicodeString& 
-SimpleFactory::getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const 
-{
-    if (_visible && _id == id) {
-        result = _id;
-    } else {
-        result.setToBogus();
-    }
-    return result;
-}
-
-#ifdef SERVICE_DEBUG
-UnicodeString& 
-SimpleFactory::debug(UnicodeString& toAppendTo) const 
-{
-    debugClass(toAppendTo);
-    toAppendTo.append(" id: ");
-    toAppendTo.append(_id);
-    toAppendTo.append(", visible: ");
-    toAppendTo.append(_visible ? "T" : "F");
-    return toAppendTo;
-}
-
-UnicodeString& 
-SimpleFactory::debugClass(UnicodeString& toAppendTo) const 
-{
-    return toAppendTo.append("SimpleFactory");
-}
-#endif
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleFactory)
-
-/*
-******************************************************************
-*/
-
-ServiceListener::~ServiceListener() {}
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ServiceListener)
-
-/*
-******************************************************************
-*/
-
-// Record the actual id for this service in the cache, so we can return it
-// even if we succeed later with a different id.
-class CacheEntry : public UMemory {
-private:
-    int32_t refcount;
-
-public:
-    UnicodeString actualDescriptor;
-    UObject* service;
-
-    /**
-    * Releases a reference to the shared resource.
-    */
-    ~CacheEntry() {
-        delete service;
-    }
-
-    CacheEntry(const UnicodeString& _actualDescriptor, UObject* _service) 
-        : refcount(1), actualDescriptor(_actualDescriptor), service(_service) {
-    }
-
-    /**
-    * Instantiation creates an initial reference, so don't call this
-    * unless you're creating a new pointer to this.  Management of
-    * that pointer will have to know how to deal with refcounts.  
-    * Return true if the resource has not already been released.
-    */
-    CacheEntry* ref() {
-        ++refcount;
-        return this;
-    }
-
-    /**
-    * Destructions removes a reference, so don't call this unless
-    * you're removing pointer to this somewhere.  Management of that
-    * pointer will have to know how to deal with refcounts.  Once
-    * the refcount drops to zero, the resource is released.  Return
-    * false if the resouce has been released.
-    */
-    CacheEntry* unref() {
-        if ((--refcount) == 0) {
-            delete this;
-            return NULL;
-        }
-        return this;
-    }
-
-    /**
-    * Return TRUE if there is at least one reference to this and the
-    * resource has not been released.
-    */
-    UBool isShared() const {
-        return refcount > 1;
-    }
-};
-
-// UObjectDeleter for serviceCache
-U_CDECL_BEGIN
-static void U_CALLCONV
-cacheDeleter(void* obj) {
-    U_NAMESPACE_USE ((CacheEntry*)obj)->unref();
-}
-
-/**
-* Deleter for UObjects
-*/
-static void U_CALLCONV
-deleteUObject(void *obj) {
-    U_NAMESPACE_USE delete (UObject*) obj;
-}
-U_CDECL_END
-
-/*
-******************************************************************
-*/
-
-class DNCache : public UMemory {
-public:
-    Hashtable cache;
-    const Locale locale;
-
-    DNCache(const Locale& _locale) 
-        : cache(), locale(_locale) 
-    {
-        // cache.setKeyDeleter(uprv_deleteUObject);
-    }
-};
-
-
-/*
-******************************************************************
-*/
-
-StringPair* 
-StringPair::create(const UnicodeString& displayName, 
-                   const UnicodeString& id,
-                   UErrorCode& status)
-{
-    if (U_SUCCESS(status)) {
-        StringPair* sp = new StringPair(displayName, id);
-        if (sp == NULL || sp->isBogus()) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-            delete sp;
-            return NULL;
-        }
-        return sp;
-    }
-    return NULL;
-}
-
-UBool 
-StringPair::isBogus() const {
-    return displayName.isBogus() || id.isBogus();
-}
-
-StringPair::StringPair(const UnicodeString& _displayName, 
-                       const UnicodeString& _id)
-: displayName(_displayName)
-, id(_id)
-{
-}
-
-U_CDECL_BEGIN
-static void U_CALLCONV
-userv_deleteStringPair(void *obj) {
-    U_NAMESPACE_USE delete (StringPair*) obj;
-}
-U_CDECL_END
-
-/*
-******************************************************************
-*/
-
-static UMutex lock = U_MUTEX_INITIALIZER;
-
-ICUService::ICUService()
-: name()
-, timestamp(0)
-, factories(NULL)
-, serviceCache(NULL)
-, idCache(NULL)
-, dnCache(NULL)
-{
-}
-
-ICUService::ICUService(const UnicodeString& newName) 
-: name(newName)
-, timestamp(0)
-, factories(NULL)
-, serviceCache(NULL)
-, idCache(NULL)
-, dnCache(NULL)
-{
-}
-
-ICUService::~ICUService()
-{
-    {
-        Mutex mutex(&lock);
-        clearCaches();
-        delete factories;
-        factories = NULL;
-    }
-}
-
-UObject* 
-ICUService::get(const UnicodeString& descriptor, UErrorCode& status) const 
-{
-    return get(descriptor, NULL, status);
-}
-
-UObject* 
-ICUService::get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const 
-{
-    UObject* result = NULL;
-    ICUServiceKey* key = createKey(&descriptor, status);
-    if (key) {
-        result = getKey(*key, actualReturn, status);
-        delete key;
-    }
-    return result;
-}
-
-UObject* 
-ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const 
-{
-    return getKey(key, NULL, status);
-}
-
-// this is a vector that subclasses of ICUService can override to further customize the result object
-// before returning it.  All other public get functions should call this one.
-
-UObject* 
-ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const 
-{
-    return getKey(key, actualReturn, NULL, status);
-}
-
-// make it possible to call reentrantly on systems that don't have reentrant mutexes.
-// we can use this simple approach since we know the situation where we're calling
-// reentrantly even without knowing the thread.
-class XMutex : public UMemory {
-public:
-    inline XMutex(UMutex *mutex, UBool reentering) 
-        : fMutex(mutex)
-        , fActive(!reentering) 
-    {
-        if (fActive) umtx_lock(fMutex);
-    }
-    inline ~XMutex() {
-        if (fActive) umtx_unlock(fMutex);
-    }
-
-private:
-    UMutex  *fMutex;
-    UBool fActive;
-};
-
-struct UVectorDeleter {
-    UVector* _obj;
-    UVectorDeleter() : _obj(NULL) {}
-    ~UVectorDeleter() { delete _obj; }
-};
-
-// called only by factories, treat as private
-UObject* 
-ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const 
-{
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
-    if (isDefault()) {
-        return handleDefault(key, actualReturn, status);
-    }
-
-    ICUService* ncthis = (ICUService*)this; // cast away semantic const
-
-    CacheEntry* result = NULL;
-    {
-        // The factory list can't be modified until we're done, 
-        // otherwise we might update the cache with an invalid result.
-        // The cache has to stay in synch with the factory list.
-        // ICU doesn't have monitors so we can't use rw locks, so 
-        // we single-thread everything using this service, for now.
-
-        // if factory is not null, we're calling from within the mutex,
-        // and since some unix machines don't have reentrant mutexes we
-        // need to make sure not to try to lock it again.
-        XMutex mutex(&lock, factory != NULL);
-
-        if (serviceCache == NULL) {
-            ncthis->serviceCache = new Hashtable(status);
-            if (ncthis->serviceCache == NULL) {
-                return NULL;
-            }
-            if (U_FAILURE(status)) {
-                delete serviceCache;
-                return NULL;
-            }
-            serviceCache->setValueDeleter(cacheDeleter);
-        }
-
-        UnicodeString currentDescriptor;
-        UVectorDeleter cacheDescriptorList;
-        UBool putInCache = FALSE;
-
-        int32_t startIndex = 0;
-        int32_t limit = factories->size();
-        UBool cacheResult = TRUE;
-
-        if (factory != NULL) {
-            for (int32_t i = 0; i < limit; ++i) {
-                if (factory == (const ICUServiceFactory*)factories->elementAt(i)) {
-                    startIndex = i + 1;
-                    break;
-                }
-            }
-            if (startIndex == 0) {
-                // throw new InternalError("Factory " + factory + "not registered with service: " + this);
-                status = U_ILLEGAL_ARGUMENT_ERROR;
-                return NULL;
-            }
-            cacheResult = FALSE;
-        }
-
-        do {
-            currentDescriptor.remove();
-            key.currentDescriptor(currentDescriptor);
-            result = (CacheEntry*)serviceCache->get(currentDescriptor);
-            if (result != NULL) {
-                break;
-            }
-
-            // first test of cache failed, so we'll have to update
-            // the cache if we eventually succeed-- that is, if we're 
-            // going to update the cache at all.
-            putInCache = TRUE;
-
-            int32_t index = startIndex;
-            while (index < limit) {
-                ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(index++);
-                UObject* service = f->create(key, this, status);
-                if (U_FAILURE(status)) {
-                    delete service;
-                    return NULL;
-                }
-                if (service != NULL) {
-                    result = new CacheEntry(currentDescriptor, service);
-                    if (result == NULL) {
-                        delete service;
-                        status = U_MEMORY_ALLOCATION_ERROR;
-                        return NULL;
-                    }
-
-                    goto outerEnd;
-                }
-            }
-
-            // prepare to load the cache with all additional ids that 
-            // will resolve to result, assuming we'll succeed.  We
-            // don't want to keep querying on an id that's going to
-            // fallback to the one that succeeded, we want to hit the
-            // cache the first time next goaround.
-            if (cacheDescriptorList._obj == NULL) {
-                cacheDescriptorList._obj = new UVector(uprv_deleteUObject, NULL, 5, status);
-                if (U_FAILURE(status)) {
-                    return NULL;
-                }
-            }
-            UnicodeString* idToCache = new UnicodeString(currentDescriptor);
-            if (idToCache == NULL || idToCache->isBogus()) {
-                status = U_MEMORY_ALLOCATION_ERROR;
-                return NULL;
-            }
-
-            cacheDescriptorList._obj->addElement(idToCache, status);
-            if (U_FAILURE(status)) {
-                return NULL;
-            }
-        } while (key.fallback());
-outerEnd:
-
-        if (result != NULL) {
-            if (putInCache && cacheResult) {
-                serviceCache->put(result->actualDescriptor, result, status);
-                if (U_FAILURE(status)) {
-                    delete result;
-                    return NULL;
-                }
-
-                if (cacheDescriptorList._obj != NULL) {
-                    for (int32_t i = cacheDescriptorList._obj->size(); --i >= 0;) {
-                        UnicodeString* desc = (UnicodeString*)cacheDescriptorList._obj->elementAt(i);
-                        serviceCache->put(*desc, result, status);
-                        if (U_FAILURE(status)) {
-                            delete result;
-                            return NULL;
-                        }
-
-                        result->ref();
-                        cacheDescriptorList._obj->removeElementAt(i);
-                    }
-                }
-            }
-
-            if (actualReturn != NULL) {
-                // strip null prefix
-                if (result->actualDescriptor.indexOf((UChar)0x2f) == 0) { // U+002f=slash (/)
-                    actualReturn->remove();
-                    actualReturn->append(result->actualDescriptor, 
-                        1, 
-                        result->actualDescriptor.length() - 1);
-                } else {
-                    *actualReturn = result->actualDescriptor;
-                }
-
-                if (actualReturn->isBogus()) {
-                    status = U_MEMORY_ALLOCATION_ERROR;
-                    delete result;
-                    return NULL;
-                }
-            }
-
-            UObject* service = cloneInstance(result->service);
-            if (putInCache && !cacheResult) {
-                delete result;
-            }
-            return service;
-        }
-    }
-
-    return handleDefault(key, actualReturn, status);
-}
-
-UObject* 
-ICUService::handleDefault(const ICUServiceKey& /* key */, UnicodeString* /* actualIDReturn */, UErrorCode& /* status */) const 
-{
-    return NULL;
-}
-
-UVector& 
-ICUService::getVisibleIDs(UVector& result, UErrorCode& status) const {
-    return getVisibleIDs(result, NULL, status);
-}
-
-UVector& 
-ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorCode& status) const 
-{
-    result.removeAllElements();
-
-    if (U_FAILURE(status)) {
-        return result;
-    }
-
-    {
-        Mutex mutex(&lock);
-        const Hashtable* map = getVisibleIDMap(status);
-        if (map != NULL) {
-            ICUServiceKey* fallbackKey = createKey(matchID, status);
-
-            for (int32_t pos = -1;;) {
-                const UHashElement* e = map->nextElement(pos);
-                if (e == NULL) {
-                    break;
-                }
-
-                const UnicodeString* id = (const UnicodeString*)e->key.pointer;
-                if (fallbackKey != NULL) {
-                    if (!fallbackKey->isFallbackOf(*id)) {
-                        continue;
-                    }
-                }
-
-                UnicodeString* idClone = new UnicodeString(*id);
-                if (idClone == NULL || idClone->isBogus()) {
-                    delete idClone;
-                    status = U_MEMORY_ALLOCATION_ERROR;
-                    break;
-                }
-                result.addElement(idClone, status);
-                if (U_FAILURE(status)) {
-                    delete idClone;
-                    break;
-                }
-            }
-            delete fallbackKey;
-        }
-    }
-    if (U_FAILURE(status)) {
-        result.removeAllElements();
-    }
-    return result;
-}
-
-const Hashtable* 
-ICUService::getVisibleIDMap(UErrorCode& status) const {
-    if (U_FAILURE(status)) return NULL;
-
-    // must only be called when lock is already held
-
-    ICUService* ncthis = (ICUService*)this; // cast away semantic const
-    if (idCache == NULL) {
-        ncthis->idCache = new Hashtable(status);
-        if (idCache == NULL) {
-            status = U_MEMORY_ALLOCATION_ERROR;
-        } else if (factories != NULL) {
-            for (int32_t pos = factories->size(); --pos >= 0;) {
-                ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(pos);
-                f->updateVisibleIDs(*idCache, status);
-            }
-            if (U_FAILURE(status)) {
-                delete idCache;
-                ncthis->idCache = NULL;
-            }
-        }
-    }
-
-    return idCache;
-}
-
-
-UnicodeString& 
-ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result) const 
-{
-    return getDisplayName(id, result, Locale::getDefault());
-}
-
-UnicodeString& 
-ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const 
-{
-    {
-        UErrorCode status = U_ZERO_ERROR;
-        Mutex mutex(&lock);
-        const Hashtable* map = getVisibleIDMap(status);
-        if (map != NULL) {
-            ICUServiceFactory* f = (ICUServiceFactory*)map->get(id);
-            if (f != NULL) {
-                f->getDisplayName(id, locale, result);
-                return result;
-            }
-
-            // fallback
-            UErrorCode status = U_ZERO_ERROR;
-            ICUServiceKey* fallbackKey = createKey(&id, status);
-            while (fallbackKey->fallback()) {
-                UnicodeString us;
-                fallbackKey->currentID(us);
-                f = (ICUServiceFactory*)map->get(us);
-                if (f != NULL) {
-                    f->getDisplayName(id, locale, result);
-                    delete fallbackKey;
-                    return result;
-                }
-            }
-            delete fallbackKey;
-        }
-    }
-    result.setToBogus();
-    return result;
-}
-
-UVector& 
-ICUService::getDisplayNames(UVector& result, UErrorCode& status) const 
-{
-    return getDisplayNames(result, Locale::getDefault(), NULL, status);
-}
-
-
-UVector& 
-ICUService::getDisplayNames(UVector& result, const Locale& locale, UErrorCode& status) const 
-{
-    return getDisplayNames(result, locale, NULL, status);
-}
-
-UVector& 
-ICUService::getDisplayNames(UVector& result, 
-                            const Locale& locale, 
-                            const UnicodeString* matchID, 
-                            UErrorCode& status) const 
-{
-    result.removeAllElements();
-    result.setDeleter(userv_deleteStringPair);
-    if (U_SUCCESS(status)) {
-        ICUService* ncthis = (ICUService*)this; // cast away semantic const
-        Mutex mutex(&lock);
-
-        if (dnCache != NULL && dnCache->locale != locale) {
-            delete dnCache;
-            ncthis->dnCache = NULL;
-        }
-
-        if (dnCache == NULL) {
-            const Hashtable* m = getVisibleIDMap(status);
-            if (U_FAILURE(status)) {
-                return result;
-            }
-            ncthis->dnCache = new DNCache(locale); 
-            if (dnCache == NULL) {
-                status = U_MEMORY_ALLOCATION_ERROR;
-                return result;
-            }
-
-            int32_t pos = -1;
-            const UHashElement* entry = NULL;
-            while ((entry = m->nextElement(pos)) != NULL) {
-                const UnicodeString* id = (const UnicodeString*)entry->key.pointer;
-                ICUServiceFactory* f = (ICUServiceFactory*)entry->value.pointer;
-                UnicodeString dname;
-                f->getDisplayName(*id, locale, dname);
-                if (dname.isBogus()) {
-                    status = U_MEMORY_ALLOCATION_ERROR;
-                } else {
-                    dnCache->cache.put(dname, (void*)id, status); // share pointer with visibleIDMap
-                    if (U_SUCCESS(status)) {
-                        continue;
-                    }
-                }
-                delete dnCache;
-                ncthis->dnCache = NULL;
-                return result;
-            }
-        }
-    }
-
-    ICUServiceKey* matchKey = createKey(matchID, status);
-    /* To ensure that all elements in the hashtable are iterated, set pos to -1.
-     * nextElement(pos) will skip the position at pos and begin the iteration
-     * at the next position, which in this case will be 0.
-     */
-    int32_t pos = -1; 
-    const UHashElement *entry = NULL;
-    while ((entry = dnCache->cache.nextElement(pos)) != NULL) {
-        const UnicodeString* id = (const UnicodeString*)entry->value.pointer;
-        if (matchKey != NULL && !matchKey->isFallbackOf(*id)) {
-            continue;
-        }
-        const UnicodeString* dn = (const UnicodeString*)entry->key.pointer;
-        StringPair* sp = StringPair::create(*id, *dn, status);
-        result.addElement(sp, status);
-        if (U_FAILURE(status)) {
-            result.removeAllElements();
-            break;
-        }
-    }
-    delete matchKey;
-
-    return result;
-}
-
-URegistryKey
-ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UErrorCode& status) 
-{
-    return registerInstance(objToAdopt, id, TRUE, status);
-}
-
-URegistryKey
-ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status) 
-{
-    ICUServiceKey* key = createKey(&id, status);
-    if (key != NULL) {
-        UnicodeString canonicalID;
-        key->canonicalID(canonicalID);
-        delete key;
-
-        ICUServiceFactory* f = createSimpleFactory(objToAdopt, canonicalID, visible, status);
-        if (f != NULL) {
-            return registerFactory(f, status);
-        }
-    }
-    delete objToAdopt;
-    return NULL;
-}
-
-ICUServiceFactory* 
-ICUService::createSimpleFactory(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status)
-{
-    if (U_SUCCESS(status)) {
-        if ((objToAdopt != NULL) && (!id.isBogus())) {
-            return new SimpleFactory(objToAdopt, id, visible);
-        }
-        status = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-    return NULL;
-}
-
-URegistryKey
-ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status) 
-{
-    if (U_SUCCESS(status) && factoryToAdopt != NULL) {
-        Mutex mutex(&lock);
-
-        if (factories == NULL) {
-            factories = new UVector(deleteUObject, NULL, status);
-            if (U_FAILURE(status)) {
-                delete factories;
-                return NULL;
-            }
-        }
-        factories->insertElementAt(factoryToAdopt, 0, status);
-        if (U_SUCCESS(status)) {
-            clearCaches();
-        } else {
-            delete factoryToAdopt;
-            factoryToAdopt = NULL;
-        }
-    }
-
-    if (factoryToAdopt != NULL) {
-        notifyChanged();
-    }
-
-    return (URegistryKey)factoryToAdopt;
-}
-
-UBool 
-ICUService::unregister(URegistryKey rkey, UErrorCode& status) 
-{
-    ICUServiceFactory *factory = (ICUServiceFactory*)rkey;
-    UBool result = FALSE;
-    if (factory != NULL && factories != NULL) {
-        Mutex mutex(&lock);
-
-        if (factories->removeElement(factory)) {
-            clearCaches();
-            result = TRUE;
-        } else {
-            status = U_ILLEGAL_ARGUMENT_ERROR;
-            delete factory;
-        }
-    }
-    if (result) {
-        notifyChanged();
-    }
-    return result;
-}
-
-void 
-ICUService::reset() 
-{
-    {
-        Mutex mutex(&lock);
-        reInitializeFactories();
-        clearCaches();
-    }
-    notifyChanged();
-}
-
-void 
-ICUService::reInitializeFactories() 
-{
-    if (factories != NULL) {
-        factories->removeAllElements();
-    }
-}
-
-UBool 
-ICUService::isDefault() const 
-{
-    return countFactories() == 0;
-}
-
-ICUServiceKey* 
-ICUService::createKey(const UnicodeString* id, UErrorCode& status) const 
-{
-    return (U_FAILURE(status) || id == NULL) ? NULL : new ICUServiceKey(*id);
-}
-
-void 
-ICUService::clearCaches() 
-{
-    // callers synchronize before use
-    ++timestamp;
-    delete dnCache;
-    dnCache = NULL;
-    delete idCache;
-    idCache = NULL;
-    delete serviceCache; serviceCache = NULL;
-}
-
-void 
-ICUService::clearServiceCache() 
-{
-    // callers synchronize before use
-    delete serviceCache; serviceCache = NULL;
-}
-
-UBool 
-ICUService::acceptsListener(const EventListener& l) const 
-{
-    return dynamic_cast<const ServiceListener*>(&l) != NULL;
-}
-
-void 
-ICUService::notifyListener(EventListener& l) const 
-{
-    ((ServiceListener&)l).serviceChanged(*this);
-}
-
-UnicodeString&
-ICUService::getName(UnicodeString& result) const 
-{
-    return result.append(name);
-}
-
-int32_t 
-ICUService::countFactories() const 
-{
-    return factories == NULL ? 0 : factories->size();
-}
-
-int32_t
-ICUService::getTimestamp() const
-{
-    return timestamp;
-}
-
-U_NAMESPACE_END
-
-/* UCONFIG_NO_SERVICE */
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/serv.h b/src/third_party/mozjs/intl/icu/source/common/serv.h
deleted file mode 100644
index 5100809..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/serv.h
+++ /dev/null
@@ -1,994 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2011, International Business Machines Corporation.       *
- * All Rights Reserved.                                                        *
- *******************************************************************************
- */
-
-#ifndef ICUSERV_H
-#define ICUSERV_H
-
-#include "unicode/utypes.h"
-
-#if UCONFIG_NO_SERVICE
-
-U_NAMESPACE_BEGIN
-
-/*
- * Allow the declaration of APIs with pointers to ICUService
- * even when service is removed from the build.
- */
-class ICUService;
-
-U_NAMESPACE_END
-
-#else
-
-#include "unicode/unistr.h"
-#include "unicode/locid.h"
-#include "unicode/umisc.h"
-
-#include "hash.h"
-#include "uvector.h"
-#include "servnotf.h"
-
-class ICUServiceTest;
-
-U_NAMESPACE_BEGIN
-
-class ICUServiceKey;
-class ICUServiceFactory;
-class SimpleFactory;
-class ServiceListener;
-class ICUService;
-
-class DNCache;
-
-/*******************************************************************
- * ICUServiceKey
- */
-
-/**
- * <p>ICUServiceKeys are used to communicate with factories to
- * generate an instance of the service.  ICUServiceKeys define how
- * ids are canonicalized, provide both a current id and a current
- * descriptor to use in querying the cache and factories, and
- * determine the fallback strategy.</p>
- *
- * <p>ICUServiceKeys provide both a currentDescriptor and a currentID.
- * The descriptor contains an optional prefix, followed by '/'
- * and the currentID.  Factories that handle complex keys,
- * for example number format factories that generate multiple
- * kinds of formatters for the same locale, use the descriptor 
- * to provide a fully unique identifier for the service object, 
- * while using the currentID (in this case, the locale string),
- * as the visible IDs that can be localized.</p>
- *
- * <p>The default implementation of ICUServiceKey has no fallbacks and
- * has no custom descriptors.</p> 
- */
-class U_COMMON_API ICUServiceKey : public UObject {
- private: 
-  const UnicodeString _id;
-
- protected:
-  static const UChar PREFIX_DELIMITER;
-
- public:
-
-  /**
-   * <p>Construct a key from an id.</p>
-   *
-   * @param id the ID from which to construct the key.
-   */
-  ICUServiceKey(const UnicodeString& id);
-
-  /**
-   * <p>Virtual destructor.</p>
-   */
-  virtual ~ICUServiceKey();
-
- /**
-  * <p>Return the original ID used to construct this key.</p>
-  *
-  * @return the ID used to construct this key.
-  */
-  virtual const UnicodeString& getID() const;
-
- /**
-  * <p>Return the canonical version of the original ID.  This implementation
-  * appends the original ID to result.  Result is returned as a convenience.</p>
-  *
-  * @param result the output parameter to which the id will be appended.
-  * @return the modified result.
-  */
-  virtual UnicodeString& canonicalID(UnicodeString& result) const;
-
- /**
-  * <p>Return the (canonical) current ID.  This implementation appends
-  * the canonical ID to result.  Result is returned as a convenience.</p>
-  *
-  * @param result the output parameter to which the current id will be appended.
-  * @return the modified result.  
-  */
-  virtual UnicodeString& currentID(UnicodeString& result) const;
-
- /**
-  * <p>Return the current descriptor.  This implementation appends
-  * the current descriptor to result.  Result is returned as a convenience.</p>
-  *
-  * <p>The current descriptor is used to fully
-  * identify an instance of the service in the cache.  A
-  * factory may handle all descriptors for an ID, or just a
-  * particular descriptor.  The factory can either parse the
-  * descriptor or use custom API on the key in order to
-  * instantiate the service.</p>
-  *
-  * @param result the output parameter to which the current id will be appended.
-  * @return the modified result.  
-  */
-  virtual UnicodeString& currentDescriptor(UnicodeString& result) const;
-
- /**
-  * <p>If the key has a fallback, modify the key and return true,
-  * otherwise return false.  The current ID will change if there
-  * is a fallback.  No currentIDs should be repeated, and fallback
-  * must eventually return false.  This implementation has no fallbacks
-  * and always returns false.</p>
-  *
-  * @return TRUE if the ICUServiceKey changed to a valid fallback value.
-  */
-  virtual UBool fallback();
-
- /**
-  * <p>Return TRUE if a key created from id matches, or would eventually
-  * fallback to match, the canonical ID of this ICUServiceKey.</p>
-  *
-  * @param id the id to test.
-  * @return TRUE if this ICUServiceKey's canonical ID is a fallback of id.
-  */
-  virtual UBool isFallbackOf(const UnicodeString& id) const;
-
- /**
-  * <p>Return the prefix.  This implementation leaves result unchanged.
-  * Result is returned as a convenience.</p>
-  *
-  * @param result the output parameter to which the prefix will be appended.
-  * @return the modified result.
-  */
-  virtual UnicodeString& prefix(UnicodeString& result) const;
-
- /**
-  * <p>A utility to parse the prefix out of a descriptor string.  Only
-  * the (undelimited) prefix, if any, remains in result.  Result is returned as a 
-  * convenience.</p>
-  *
-  * @param result an input/output parameter that on entry is a descriptor, and 
-  * on exit is the prefix of that descriptor.
-  * @return the modified result.
-  */
-  static UnicodeString& parsePrefix(UnicodeString& result);
-
-  /**
-  * <p>A utility to parse the suffix out of a descriptor string.  Only
-  * the (undelimited) suffix, if any, remains in result.  Result is returned as a 
-  * convenience.</p>
-  *
-  * @param result an input/output parameter that on entry is a descriptor, and 
-  * on exit is the suffix of that descriptor.
-  * @return the modified result.
-  */
-  static UnicodeString& parseSuffix(UnicodeString& result);
-
-public:
-  /**
-   * UObject RTTI boilerplate.
-   */
-  static UClassID U_EXPORT2 getStaticClassID();
-
-  /**
-   * UObject RTTI boilerplate.
-   */
-  virtual UClassID getDynamicClassID() const;
-
-#ifdef SERVICE_DEBUG
- public:
-  virtual UnicodeString& debug(UnicodeString& result) const;
-  virtual UnicodeString& debugClass(UnicodeString& result) const;
-#endif
-
-};
-
- /*******************************************************************
-  * ICUServiceFactory
-  */
-
- /**
-  * <p>An implementing ICUServiceFactory generates the service objects maintained by the
-  * service.  A factory generates a service object from a key,
-  * updates id->factory mappings, and returns the display name for
-  * a supported id.</p>
-  */
-class U_COMMON_API ICUServiceFactory : public UObject {
- public:
-    virtual ~ICUServiceFactory();
-
-    /**
-     * <p>Create a service object from the key, if this factory
-     * supports the key.  Otherwise, return NULL.</p>
-     *
-     * <p>If the factory supports the key, then it can call
-     * the service's getKey(ICUServiceKey, String[], ICUServiceFactory) method
-     * passing itself as the factory to get the object that
-     * the service would have created prior to the factory's
-     * registration with the service.  This can change the
-     * key, so any information required from the key should
-     * be extracted before making such a callback.</p>
-     *
-     * @param key the service key.
-     * @param service the service with which this factory is registered.
-     * @param status the error code status.
-     * @return the service object, or NULL if the factory does not support the key.
-     */
-    virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const = 0;
-
-    /**
-     * <p>Update result to reflect the IDs (not descriptors) that this
-     * factory publicly handles.  Result contains mappings from ID to
-     * factory.  On entry it will contain all (visible) mappings from
-     * previously-registered factories.</p>
-     *
-     * <p>This function, together with getDisplayName, are used to
-     * support ICUService::getDisplayNames.  The factory determines
-     * which IDs (of those it supports) it will make visible, and of
-     * those, which it will provide localized display names for.  In
-     * most cases it will register mappings from all IDs it supports
-     * to itself.</p>
-     *
-     * @param result the mapping table to update.
-     * @param status the error code status.
-     */
-    virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const = 0;
-
-    /**
-     * <p>Return, in result, the display name of the id in the provided locale.
-     * This is an id, not a descriptor.  If the id is 
-     * not visible, sets result to bogus.  If the
-     * incoming result is bogus, it remains bogus.  Result is returned as a
-     * convenience.  Results are not defined if id is not one supported by this
-         * factory.</p>
-     *
-     * @param id a visible id supported by this factory.
-     * @param locale the locale for which to generate the corresponding localized display name.
-     * @param result output parameter to hold the display name.
-     * @return result.
-     */
-    virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const = 0;
-};
-
-/*
- ******************************************************************
- */
-
- /**
-  * <p>A default implementation of factory.  This provides default
-  * implementations for subclasses, and implements a singleton
-  * factory that matches a single ID and returns a single
-  * (possibly deferred-initialized) instance.  This implements
-  * updateVisibleIDs to add a mapping from its ID to itself
-  * if visible is true, or to remove any existing mapping
-  * for its ID if visible is false.  No localization of display
-  * names is performed.</p>
-  */
-class U_COMMON_API SimpleFactory : public ICUServiceFactory {
- protected:
-  UObject* _instance;
-  const UnicodeString _id;
-  const UBool _visible;
-
- public:
-  /**
-   * <p>Construct a SimpleFactory that maps a single ID to a single 
-   * service instance.  If visible is TRUE, the ID will be visible.
-   * The instance must not be NULL.  The SimpleFactory will adopt
-   * the instance, which must not be changed subsequent to this call.</p>
-   *
-   * @param instanceToAdopt the service instance to adopt.
-   * @param id the ID to assign to this service instance.
-   * @param visible if TRUE, the ID will be visible.
-   */
-  SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible = TRUE);
-
-  /**
-   * <p>Destructor.</p>
-   */
-  virtual ~SimpleFactory();
-
-  /**
-   * <p>This implementation returns a clone of the service instance if the factory's ID is equal to
-   * the key's currentID.  Service and prefix are ignored.</p>
-   *
-   * @param key the service key.
-   * @param service the service with which this factory is registered.
-   * @param status the error code status.
-   * @return the service object, or NULL if the factory does not support the key.
-   */
-  virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
-
-  /**
-   * <p>This implementation adds a mapping from ID -> this to result if visible is TRUE, 
-   * otherwise it removes ID from result.</p>
-   *
-   * @param result the mapping table to update.
-   * @param status the error code status.
-   */
-  virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
-
-  /**
-   * <p>This implementation returns the factory ID if it equals id and visible is TRUE,
-   * otherwise it returns the empty string.  (This implementation provides
-   * no localized id information.)</p>
-   *
-   * @param id a visible id supported by this factory.
-   * @param locale the locale for which to generate the corresponding localized display name.
-   * @param result output parameter to hold the display name.
-   * @return result.
-   */
-  virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const;
-
-public:
- /**
-  * UObject RTTI boilerplate.
-  */
-  static UClassID U_EXPORT2 getStaticClassID();
-
- /**
-  * UObject RTTI boilerplate.
-  */
-  virtual UClassID getDynamicClassID() const;
-
-#ifdef SERVICE_DEBUG
- public:
-  virtual UnicodeString& debug(UnicodeString& toAppendTo) const;
-  virtual UnicodeString& debugClass(UnicodeString& toAppendTo) const;
-#endif
-
-};
-
-/*
- ******************************************************************
- */
-
-/**
- * <p>ServiceListener is the listener that ICUService provides by default.
- * ICUService will notifiy this listener when factories are added to
- * or removed from the service.  Subclasses can provide
- * different listener interfaces that extend EventListener, and modify
- * acceptsListener and notifyListener as appropriate.</p>
- */
-class U_COMMON_API ServiceListener : public EventListener {
-public:
-    virtual ~ServiceListener();
-
-    /**
-     * <p>This method is called when the service changes. At the time of the
-     * call this listener is registered with the service.  It must
-     * not modify the notifier in the context of this call.</p>
-     * 
-     * @param service the service that changed.
-     */
-    virtual void serviceChanged(const ICUService& service) const = 0;
-    
-public:
-    /**
-     * UObject RTTI boilerplate.
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-    
-    /**
-     * UObject RTTI boilerplate.
-     */
-    virtual UClassID getDynamicClassID() const;
-    
-};
-
-/*
- ******************************************************************
- */
-
-/**
- * <p>A StringPair holds a displayName/ID pair.  ICUService uses it
- * as the array elements returned by getDisplayNames.
- */
-class U_COMMON_API StringPair : public UMemory {
-public:
-  /**
-   * <p>The display name of the pair.</p>
-   */
-  const UnicodeString displayName;
-
-  /**
-   * <p>The ID of the pair.</p>
-   */
-  const UnicodeString id;
-
-  /**
-   * <p>Creates a string pair from a displayName and an ID.</p>
-   *
-   * @param displayName the displayName.
-   * @param id the ID.
-   * @param status the error code status.
-   * @return a StringPair if the creation was successful, otherwise NULL.
-   */
-  static StringPair* create(const UnicodeString& displayName, 
-                            const UnicodeString& id,
-                            UErrorCode& status);
-
-  /**
-   * <p>Return TRUE if either string of the pair is bogus.</p>
-   * @return TRUE if either string of the pair is bogus.
-   */
-  UBool isBogus() const;
-
-private:
-  StringPair(const UnicodeString& displayName, const UnicodeString& id);
-};
-
-/*******************************************************************
- * ICUService
- */
-
- /**
- * <p>A Service provides access to service objects that implement a
- * particular service, e.g. transliterators.  Users provide a String
- * id (for example, a locale string) to the service, and get back an
- * object for that id.  Service objects can be any kind of object.  A
- * new service object is returned for each query. The caller is
- * responsible for deleting it.</p>
- *
- * <p>Services 'canonicalize' the query ID and use the canonical ID to
- * query for the service.  The service also defines a mechanism to
- * 'fallback' the ID multiple times.  Clients can optionally request
- * the actual ID that was matched by a query when they use an ID to
- * retrieve a service object.</p>
- *
- * <p>Service objects are instantiated by ICUServiceFactory objects
- * registered with the service.  The service queries each
- * ICUServiceFactory in turn, from most recently registered to
- * earliest registered, until one returns a service object.  If none
- * responds with a service object, a fallback ID is generated, and the
- * process repeats until a service object is returned or until the ID
- * has no further fallbacks.</p>
- *
- * <p>In ICU 2.4, UObject (the base class of service instances) does
- * not define a polymorphic clone function.  ICUService uses clones to
- * manage ownership.  Thus, for now, ICUService defines an abstract
- * method, cloneInstance, that clients must implement to create clones
- * of the service instances.  This may change in future releases of
- * ICU.</p>
- *
- * <p>ICUServiceFactories can be dynamically registered and
- * unregistered with the service.  When registered, an
- * ICUServiceFactory is installed at the head of the factory list, and
- * so gets 'first crack' at any keys or fallback keys.  When
- * unregistered, it is removed from the service and can no longer be
- * located through it.  Service objects generated by this factory and
- * held by the client are unaffected.</p>
- *
- * <p>If a service has variants (e.g., the different variants of
- * BreakIterator) an ICUServiceFactory can use the prefix of the
- * ICUServiceKey to determine the variant of a service to generate.
- * If it does not support all variants, it can request
- * previously-registered factories to handle the ones it does not
- * support.</p>
- *
- * <p>ICUService uses ICUServiceKeys to query factories and perform
- * fallback.  The ICUServiceKey defines the canonical form of the ID,
- * and implements the fallback strategy.  Custom ICUServiceKeys can be
- * defined that parse complex IDs into components that
- * ICUServiceFactories can more easily use.  The ICUServiceKey can
- * cache the results of this parsing to save repeated effort.
- * ICUService provides convenience APIs that take UnicodeStrings and
- * generate default ICUServiceKeys for use in querying.</p>
- *
- * <p>ICUService provides API to get the list of IDs publicly
- * supported by the service (although queries aren't restricted to
- * this list).  This list contains only 'simple' IDs, and not fully
- * unique IDs.  ICUServiceFactories are associated with each simple ID
- * and the responsible factory can also return a human-readable
- * localized version of the simple ID, for use in user interfaces.
- * ICUService can also provide an array of the all the localized
- * visible IDs and their corresponding internal IDs.</p>
- *
- * <p>ICUService implements ICUNotifier, so that clients can register
- * to receive notification when factories are added or removed from
- * the service.  ICUService provides a default EventListener
- * subinterface, ServiceListener, which can be registered with the
- * service.  When the service changes, the ServiceListener's
- * serviceChanged method is called with the service as the
- * argument.</p>
- *
- * <p>The ICUService API is both rich and generic, and it is expected
- * that most implementations will statically 'wrap' ICUService to
- * present a more appropriate API-- for example, to declare the type
- * of the objects returned from get, to limit the factories that can
- * be registered with the service, or to define their own listener
- * interface with a custom callback method.  They might also customize
- * ICUService by overriding it, for example, to customize the
- * ICUServiceKey and fallback strategy.  ICULocaleService is a
- * subclass of ICUService that uses Locale names as IDs and uses
- * ICUServiceKeys that implement the standard resource bundle fallback
- * strategy.  Most clients will wish to subclass it instead of
- * ICUService.</p> 
- */
-class U_COMMON_API ICUService : public ICUNotifier {
- protected: 
-    /**
-     * Name useful for debugging.
-     */
-    const UnicodeString name;
-
- private:
-
-    /**
-     * Timestamp so iterators can be fail-fast.
-     */
-    uint32_t timestamp;
-
-    /**
-     * All the factories registered with this service.
-     */
-    UVector* factories;
-
-    /**
-     * The service cache.
-     */
-    Hashtable* serviceCache;
-
-    /**
-     * The ID cache.
-     */
-    Hashtable* idCache;
-
-    /**
-     * The name cache.
-     */
-    DNCache* dnCache;
-
-    /**
-     * Constructor.
-     */
- public:
-    /**
-     * <p>Construct a new ICUService.</p>
-     */
-    ICUService();
-
-    /**
-     * <p>Construct with a name (useful for debugging).</p>
-     *
-     * @param name a name to use in debugging.
-     */
-    ICUService(const UnicodeString& name);
-
-    /**
-     * <p>Destructor.</p>
-     */
-    virtual ~ICUService();
-
-    /**
-     * <p>Return the name of this service. This will be the empty string if none was assigned.
-     * Returns result as a convenience.</p>
-     *
-     * @param result an output parameter to contain the name of this service.
-     * @return the name of this service.
-     */
-    UnicodeString& getName(UnicodeString& result) const;
-
-    /**
-     * <p>Convenience override for get(ICUServiceKey&, UnicodeString*). This uses
-     * createKey to create a key for the provided descriptor.</p>
-     *
-     * @param descriptor the descriptor.
-     * @param status the error code status.
-     * @return the service instance, or NULL.
-     */
-    UObject* get(const UnicodeString& descriptor, UErrorCode& status) const;
-
-    /**
-     * <p>Convenience override for get(ICUServiceKey&, UnicodeString*).  This uses
-     * createKey to create a key from the provided descriptor.</p>
-     *
-     * @param descriptor the descriptor.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
-     * @param status the error code status.
-     * @return the service instance, or NULL.
-     */
-    UObject* get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const;
-
-    /**
-     * <p>Convenience override for get(ICUServiceKey&, UnicodeString*).</p>
-     *
-     * @param key the key.
-     * @param status the error code status.
-     * @return the service instance, or NULL.
-     */
-    UObject* getKey(ICUServiceKey& key, UErrorCode& status) const;
-
-    /**
-     * <p>Given a key, return a service object, and, if actualReturn
-     * is not NULL, the descriptor with which it was found in the
-     * first element of actualReturn.  If no service object matches
-     * this key, returns NULL and leaves actualReturn unchanged.</p>
-     *
-     * <p>This queries the cache using the key's descriptor, and if no
-     * object in the cache matches, tries the key on each
-     * registered factory, in order.  If none generates a service
-     * object for the key, repeats the process with each fallback of
-     * the key, until either a factory returns a service object, or the key
-     * has no fallback.  If no object is found, the result of handleDefault
-     * is returned.</p>
-     *
-     * <p>Subclasses can override this method to further customize the 
-     * result before returning it.
-     *
-     * @param key the key.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
-     * @param status the error code status.
-     * @return the service instance, or NULL.
-     */
-    virtual UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const;
-
-    /**
-     * <p>This version of getKey is only called by ICUServiceFactories within the scope
-     * of a previous getKey call, to determine what previously-registered factories would
-     * have returned.  For details, see getKey(ICUServiceKey&, UErrorCode&).  Subclasses
-     * should not call it directly, but call through one of the other get functions.</p>
-     * 
-     * @param key the key.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
-     * @param factory the factory making the recursive call.
-     * @param status the error code status.
-     * @return the service instance, or NULL.
-     */
-    UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const;
-
-    /**
-     * <p>Convenience override for getVisibleIDs(String) that passes null
-     * as the fallback, thus returning all visible IDs.</p>
-     *
-     * @param result a vector to hold the returned IDs.
-     * @param status the error code status.
-     * @return the result vector.
-     */
-    UVector& getVisibleIDs(UVector& result, UErrorCode& status) const;
-
-    /**
-     * <p>Return a snapshot of the visible IDs for this service.  This
-     * list will not change as ICUServiceFactories are added or removed, but the
-     * supported IDs will, so there is no guarantee that all and only
-     * the IDs in the returned list will be visible and supported by the
-     * service in subsequent calls.</p>
-     *
-     * <p>The IDs are returned as pointers to UnicodeStrings.  The
-     * caller owns the IDs.  Previous contents of result are discarded before
-     * new elements, if any, are added.</p>
-     *
-     * <p>matchID is passed to createKey to create a key.  If the key
-     * is not NULL, its isFallbackOf method is used to filter out IDs
-     * that don't match the key or have it as a fallback.</p>
-     *
-     * @param result a vector to hold the returned IDs.
-     * @param matchID an ID used to filter the result, or NULL if all IDs are desired.
-     * @param status the error code status.
-     * @return the result vector.
-     */
-    UVector& getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorCode& status) const;
-
-    /**
-     * <p>Convenience override for getDisplayName(const UnicodeString&, const Locale&, UnicodeString&) that
-     * uses the current default locale.</p>
-     *
-     * @param id the ID for which to retrieve the localized displayName.
-     * @param result an output parameter to hold the display name.
-     * @return the modified result.
-     */
-    UnicodeString& getDisplayName(const UnicodeString& id, UnicodeString& result) const;
-
-    /**
-     * <p>Given a visible ID, return the display name in the requested locale.
-     * If there is no directly supported ID corresponding to this ID, result is
-     * set to bogus.</p>
-     *
-     * @param id the ID for which to retrieve the localized displayName.
-     * @param result an output parameter to hold the display name.
-     * @param locale the locale in which to localize the ID.
-     * @return the modified result.
-     */
-    UnicodeString& getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const;
-
-    /**
-     * <p>Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that 
-     * uses the current default Locale as the locale and NULL for
-     * the matchID.</p>
-     *
-     * @param result a vector to hold the returned displayName/id StringPairs.
-     * @param status the error code status.
-     * @return the modified result vector.
-     */
-    UVector& getDisplayNames(UVector& result, UErrorCode& status) const;
-
-    /**
-     * <p>Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that 
-     * uses NULL for the matchID.</p>
-     *
-     * @param result a vector to hold the returned displayName/id StringPairs.
-     * @param locale the locale in which to localize the ID.
-     * @param status the error code status.
-     * @return the modified result vector.
-     */
-    UVector& getDisplayNames(UVector& result, const Locale& locale, UErrorCode& status) const;
-
-    /**
-     * <p>Return a snapshot of the mapping from display names to visible
-     * IDs for this service.  This set will not change as factories
-     * are added or removed, but the supported IDs will, so there is
-     * no guarantee that all and only the IDs in the returned map will
-     * be visible and supported by the service in subsequent calls,
-     * nor is there any guarantee that the current display names match
-     * those in the result.</p>
-     *
-     * <p>The names are returned as pointers to StringPairs, which
-     * contain both the displayName and the corresponding ID.  The
-     * caller owns the StringPairs.  Previous contents of result are
-     * discarded before new elements, if any, are added.</p>
-     *
-     * <p>matchID is passed to createKey to create a key.  If the key
-     * is not NULL, its isFallbackOf method is used to filter out IDs
-     * that don't match the key or have it as a fallback.</p>
-     *
-     * @param result a vector to hold the returned displayName/id StringPairs.
-     * @param locale the locale in which to localize the ID.
-     * @param matchID an ID used to filter the result, or NULL if all IDs are desired.
-     * @param status the error code status.
-     * @return the result vector.  */
-    UVector& getDisplayNames(UVector& result,
-                             const Locale& locale, 
-                             const UnicodeString* matchID, 
-                             UErrorCode& status) const;
-
-    /**
-     * <p>A convenience override of registerInstance(UObject*, const UnicodeString&, UBool)
-     * that defaults visible to TRUE.</p>
-     *
-     * @param objToAdopt the object to register and adopt.
-     * @param id the ID to assign to this object.
-     * @param status the error code status.
-     * @return a registry key that can be passed to unregister to unregister
-     * (and discard) this instance.
-     */
-    URegistryKey registerInstance(UObject* objToAdopt, const UnicodeString& id, UErrorCode& status);
-
-    /**
-     * <p>Register a service instance with the provided ID.  The ID will be 
-     * canonicalized.  The canonicalized ID will be returned by
-     * getVisibleIDs if visible is TRUE.  The service instance will be adopted and
-     * must not be modified subsequent to this call.</p>
-     *
-     * <p>This issues a serviceChanged notification to registered listeners.</p>
-     *
-     * <p>This implementation wraps the object using
-     * createSimpleFactory, and calls registerFactory.</p>
-     *
-     * @param objToAdopt the object to register and adopt.
-     * @param id the ID to assign to this object.
-     * @param visible TRUE if getVisibleIDs is to return this ID.
-     * @param status the error code status.
-     * @return a registry key that can be passed to unregister() to unregister
-     * (and discard) this instance.
-     */
-    virtual URegistryKey registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status);
-
-    /**
-     * <p>Register an ICUServiceFactory.  Returns a registry key that
-     * can be used to unregister the factory.  The factory
-     * must not be modified subsequent to this call.  The service owns
-     * all registered factories. In case of an error, the factory is
-     * deleted.</p>
-     *
-     * <p>This issues a serviceChanged notification to registered listeners.</p>
-     *
-     * <p>The default implementation accepts all factories.</p>
-     *
-     * @param factoryToAdopt the factory to register and adopt.
-     * @param status the error code status.
-     * @return a registry key that can be passed to unregister to unregister
-     * (and discard) this factory.
-     */
-    virtual URegistryKey registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status);
-
-    /**
-     * <p>Unregister a factory using a registry key returned by
-     * registerInstance or registerFactory.  After a successful call,
-     * the factory will be removed from the service factory list and
-     * deleted, and the key becomes invalid.</p>
-     *
-     * <p>This issues a serviceChanged notification to registered
-     * listeners.</p>
-     *
-     * @param rkey the registry key.
-     * @param status the error code status.  
-     * @return TRUE if the call successfully unregistered the factory.
-     */
-    virtual UBool unregister(URegistryKey rkey, UErrorCode& status);
-
-    /**
-     * </p>Reset the service to the default factories.  The factory
-     * lock is acquired and then reInitializeFactories is called.</p>
-     *
-     * <p>This issues a serviceChanged notification to registered listeners.</p>
-     */
-    virtual void reset(void);
-
-    /**
-     * <p>Return TRUE if the service is in its default state.</p>
-     *
-     * <p>The default implementation returns TRUE if there are no 
-     * factories registered.</p>
-     */
-    virtual UBool isDefault(void) const;
-
-    /**
-     * <p>Create a key from an ID.  If ID is NULL, returns NULL.</p>
-     *
-     * <p>The default implementation creates an ICUServiceKey instance.
-     * Subclasses can override to define more useful keys appropriate
-     * to the factories they accept.</p>
-     *
-     * @param a pointer to the ID for which to create a default ICUServiceKey.
-     * @param status the error code status.
-     * @return the ICUServiceKey corresponding to ID, or NULL.
-     */
-    virtual ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const;
-
-    /**
-     * <p>Clone object so that caller can own the copy.  In ICU2.4, UObject doesn't define
-     * clone, so we need an instance-aware method that knows how to do this.
-     * This is public so factories can call it, but should really be protected.</p>
-     *
-     * @param instance the service instance to clone.
-     * @return a clone of the passed-in instance, or NULL if cloning was unsuccessful.
-     */
-    virtual UObject* cloneInstance(UObject* instance) const = 0;
-
-
-    /************************************************************************
-     * Subclassing API
-     */
-
- protected:
-
-    /**
-     * <p>Create a factory that wraps a single service object.  Called by registerInstance.</p>
-     *
-     * <p>The default implementation returns an instance of SimpleFactory.</p>
-     *
-     * @param instanceToAdopt the service instance to adopt.
-     * @param id the ID to assign to this service instance.
-     * @param visible if TRUE, the ID will be visible.
-     * @param status the error code status.
-     * @return an instance of ICUServiceFactory that maps this instance to the provided ID.
-     */
-    virtual ICUServiceFactory* createSimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status);
-
-    /**
-     * <p>Reinitialize the factory list to its default state.  After this call, isDefault()
-     * must return TRUE.</p>
-     *
-     * <p>This issues a serviceChanged notification to registered listeners.</p>
-     *
-     * <p>The default implementation clears the factory list.
-     * Subclasses can override to provide other default initialization
-     * of the factory list.  Subclasses must not call this method
-     * directly, since it must only be called while holding write
-     * access to the factory list.</p>
-     */
-    virtual void reInitializeFactories(void);
-
-    /**
-     * <p>Default handler for this service if no factory in the factory list
-     * handled the key passed to getKey.</p>
-     *
-     * <p>The default implementation returns NULL.</p>
-     *
-     * @param key the key.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
-     * @param status the error code status.
-     * @return the service instance, or NULL.
-     */
-    virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const;
-
-    /**
-     * <p>Clear caches maintained by this service.</p>
-     *
-     * <p>Subclasses can override if they implement additional caches
-     * that need to be cleared when the service changes.  Subclasses
-     * should generally not call this method directly, as it must only
-     * be called while synchronized on the factory lock.</p>
-     */
-    virtual void clearCaches(void);
-
-    /**
-     * <p>Return true if the listener is accepted.</p>
-     *
-     * <p>The default implementation accepts the listener if it is
-     * a ServiceListener.  Subclasses can override this to accept
-     * different listeners.</p>
-     *
-     * @param l the listener to test.
-     * @return TRUE if the service accepts the listener.
-     */
-    virtual UBool acceptsListener(const EventListener& l) const;
-
-    /**
-     * <p>Notify the listener of a service change.</p>
-     *
-     * <p>The default implementation assumes a ServiceListener.
-     * If acceptsListener has been overridden to accept different
-     * listeners, this should be overridden as well.</p>
-     *
-     * @param l the listener to notify.
-     */
-    virtual void notifyListener(EventListener& l) const;
-
-    /************************************************************************
-     * Utilities for subclasses.
-     */
-
-    /**
-     * <p>Clear only the service cache.</p>
-     *
-     * <p>This can be called by subclasses when a change affects the service
-     * cache but not the ID caches, e.g., when the default locale changes
-     * the resolution of IDs also changes, requiring the cache to be
-     * flushed, but not the visible IDs themselves.</p>
-     */
-    void clearServiceCache(void);
-
-    /**
-     * <p>Return a map from visible IDs to factories.
-     * This must only be called when the mutex is held.</p>
-     *
-     * @param status the error code status.
-     * @return a Hashtable containing mappings from visible
-     * IDs to factories.
-     */
-    const Hashtable* getVisibleIDMap(UErrorCode& status) const;
-
-    /**
-     * <p>Allow subclasses to read the time stamp.</p>
-     *
-     * @return the timestamp.
-     */
-    int32_t getTimestamp(void) const;
-
-    /**
-     * <p>Return the number of registered factories.</p>
-     *
-     * @return the number of factories registered at the time of the call.
-     */
-    int32_t countFactories(void) const;
-
-private:
-
-    friend class ::ICUServiceTest; // give tests access to countFactories.
-};
-
-U_NAMESPACE_END
-
-    /* UCONFIG_NO_SERVICE */
-#endif
-
-    /* ICUSERV_H */
-#endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servlk.cpp b/src/third_party/mozjs/intl/icu/source/common/servlk.cpp
deleted file mode 100644
index b620414..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servlk.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2004, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "unicode/resbund.h"
-#include "uresimp.h"
-#include "cmemory.h"
-#include "servloc.h"
-#include "ustrfmt.h"
-#include "uhash.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-#include "uassert.h"
-
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
-
-U_NAMESPACE_BEGIN
-
-LocaleKey*
-LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID,
-                                       const UnicodeString* canonicalFallbackID,
-                                       UErrorCode& status)
-{
-    return LocaleKey::createWithCanonicalFallback(primaryID, canonicalFallbackID, KIND_ANY, status);
-}
-
-LocaleKey*
-LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID,
-                                       const UnicodeString* canonicalFallbackID,
-                                       int32_t kind,
-                                       UErrorCode& status)
-{
-    if (primaryID == NULL || U_FAILURE(status)) {
-        return NULL;
-    }
-    UnicodeString canonicalPrimaryID;
-    LocaleUtility::canonicalLocaleString(primaryID, canonicalPrimaryID);
-    return new LocaleKey(*primaryID, canonicalPrimaryID, canonicalFallbackID, kind);
-}
-
-LocaleKey::LocaleKey(const UnicodeString& primaryID,
-                     const UnicodeString& canonicalPrimaryID,
-                     const UnicodeString* canonicalFallbackID,
-                     int32_t kind)
-  : ICUServiceKey(primaryID)
-  , _kind(kind)
-  , _primaryID(canonicalPrimaryID)
-  , _fallbackID()
-  , _currentID()
-{
-    _fallbackID.setToBogus();
-    if (_primaryID.length() != 0) {
-        if (canonicalFallbackID != NULL && _primaryID != *canonicalFallbackID) {
-            _fallbackID = *canonicalFallbackID;
-        }
-    }
-
-    _currentID = _primaryID;
-}
-
-LocaleKey::~LocaleKey() {}
-
-UnicodeString&
-LocaleKey::prefix(UnicodeString& result) const {
-    if (_kind != KIND_ANY) {
-        UChar buffer[64];
-        uprv_itou(buffer, 64, _kind, 10, 0);
-        UnicodeString temp(buffer);
-        result.append(temp);
-    }
-    return result;
-}
-
-int32_t
-LocaleKey::kind() const {
-    return _kind;
-}
-
-UnicodeString&
-LocaleKey::canonicalID(UnicodeString& result) const {
-    return result.append(_primaryID);
-}
-
-UnicodeString&
-LocaleKey::currentID(UnicodeString& result) const {
-    if (!_currentID.isBogus()) {
-        result.append(_currentID);
-    }
-    return result;
-}
-
-UnicodeString&
-LocaleKey::currentDescriptor(UnicodeString& result) const {
-    if (!_currentID.isBogus()) {
-        prefix(result).append(PREFIX_DELIMITER).append(_currentID);
-    } else {
-        result.setToBogus();
-    }
-    return result;
-}
-
-Locale&
-LocaleKey::canonicalLocale(Locale& result) const {
-    return LocaleUtility::initLocaleFromName(_primaryID, result);
-}
-
-Locale&
-LocaleKey::currentLocale(Locale& result) const {
-    return LocaleUtility::initLocaleFromName(_currentID, result);
-}
-
-UBool
-LocaleKey::fallback() {
-    if (!_currentID.isBogus()) {
-        int x = _currentID.lastIndexOf(UNDERSCORE_CHAR);
-        if (x != -1) {
-            _currentID.remove(x); // truncate current or fallback, whichever we're pointing to
-            return TRUE;
-        }
-
-        if (!_fallbackID.isBogus()) {
-            _currentID = _fallbackID;
-            _fallbackID.setToBogus();
-            return TRUE;
-        }
-
-        if (_currentID.length() > 0) {
-            _currentID.remove(0); // completely truncate
-            return TRUE;
-        }
-
-        _currentID.setToBogus();
-    }
-
-    return FALSE;
-}
-
-UBool
-LocaleKey::isFallbackOf(const UnicodeString& id) const {
-    UnicodeString temp(id);
-    parseSuffix(temp);
-    return temp.indexOf(_primaryID) == 0 &&
-        (temp.length() == _primaryID.length() ||
-        temp.charAt(_primaryID.length()) == UNDERSCORE_CHAR);
-}
-
-#ifdef SERVICE_DEBUG
-UnicodeString&
-LocaleKey::debug(UnicodeString& result) const
-{
-    ICUServiceKey::debug(result);
-    result.append(" kind: ");
-    result.append(_kind);
-    result.append(" primaryID: ");
-    result.append(_primaryID);
-    result.append(" fallbackID: ");
-    result.append(_fallbackID);
-    result.append(" currentID: ");
-    result.append(_currentID);
-    return result;
-}
-
-UnicodeString&
-LocaleKey::debugClass(UnicodeString& result) const
-{
-    return result.append("LocaleKey ");
-}
-#endif
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKey)
-
-U_NAMESPACE_END
-
-/* !UCONFIG_NO_SERVICE */
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servlkf.cpp b/src/third_party/mozjs/intl/icu/source/common/servlkf.cpp
deleted file mode 100644
index c455080..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servlkf.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2005, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "unicode/resbund.h"
-#include "uresimp.h"
-#include "cmemory.h"
-#include "servloc.h"
-#include "ustrfmt.h"
-#include "uhash.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-#include "uassert.h"
-
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
-
-
-U_NAMESPACE_BEGIN
-
-LocaleKeyFactory::LocaleKeyFactory(int32_t coverage)
-  : _name()
-  , _coverage(coverage)
-{
-}
-
-LocaleKeyFactory::LocaleKeyFactory(int32_t coverage, const UnicodeString& name)
-  : _name(name)
-  , _coverage(coverage)
-{
-}
-
-LocaleKeyFactory::~LocaleKeyFactory() {
-}
-
-UObject*
-LocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const {
-    if (handlesKey(key, status)) {
-        const LocaleKey& lkey = (const LocaleKey&)key;
-        int32_t kind = lkey.kind();
-        Locale loc;
-        lkey.currentLocale(loc);
-
-        return handleCreate(loc, kind, service, status);
-    }
-    return NULL;
-}
-
-UBool
-LocaleKeyFactory::handlesKey(const ICUServiceKey& key, UErrorCode& status) const {
-    const Hashtable* supported = getSupportedIDs(status);
-    if (supported) {
-        UnicodeString id;
-        key.currentID(id);
-        return supported->get(id) != NULL;
-    }
-    return FALSE;
-}
-
-void
-LocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const {
-    const Hashtable* supported = getSupportedIDs(status);
-    if (supported) {
-        UBool visible = (_coverage & 0x1) == 0;
-
-        const UHashElement* elem = NULL;
-        int32_t pos = 0;
-        while ((elem = supported->nextElement(pos)) != NULL) {
-            const UnicodeString& id = *((const UnicodeString*)elem->key.pointer);
-            if (!visible) {
-                result.remove(id);
-            } else {
-                result.put(id, (void*)this, status); // this is dummy non-void marker used for set semantics
-                if (U_FAILURE(status)) {
-                    break;
-                }
-            }
-        }
-    }
-}
-
-UnicodeString&
-LocaleKeyFactory::getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const {
-    if ((_coverage & 0x1) == 0) {
-        //UErrorCode status = U_ZERO_ERROR;
-        // assume if this is called on us, we support some fallback of this id
-        // if (isSupportedID(id, status)) {
-            Locale loc;
-            LocaleUtility::initLocaleFromName(id, loc);
-            return loc.getDisplayName(locale, result);
-        // }
-    }
-    result.setToBogus();
-    return result;
-}
-
-UObject*
-LocaleKeyFactory::handleCreate(const Locale& /* loc */, 
-                   int32_t /* kind */, 
-                   const ICUService* /* service */, 
-                   UErrorCode& /* status */) const {
-    return NULL;
-}
-
-//UBool
-//LocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& status) const {
-//    const Hashtable* ids = getSupportedIDs(status);
-//    return ids && ids->get(id);
-//}
-
-const Hashtable*
-LocaleKeyFactory::getSupportedIDs(UErrorCode& /* status */) const {
-    return NULL;
-}
-
-#ifdef SERVICE_DEBUG
-UnicodeString&
-LocaleKeyFactory::debug(UnicodeString& result) const
-{
-    debugClass(result);
-    result.append(", name: ");
-    result.append(_name);
-    result.append(", coverage: ");
-    result.append(_coverage);
-    return result;
-}
-
-UnicodeString&
-LocaleKeyFactory::debugClass(UnicodeString& result) const
-{
-  return result.append("LocaleKeyFactory");
-}
-#endif
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKeyFactory)
-
-U_NAMESPACE_END
-
-/* !UCONFIG_NO_SERVICE */
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servloc.h b/src/third_party/mozjs/intl/icu/source/common/servloc.h
deleted file mode 100644
index 1054cd9..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servloc.h
+++ /dev/null
@@ -1,549 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#ifndef ICULSERV_H
-#define ICULSERV_H
-
-#include "unicode/utypes.h"
-
-#if UCONFIG_NO_SERVICE
-
-U_NAMESPACE_BEGIN
-
-/*
- * Allow the declaration of APIs with pointers to ICUService
- * even when service is removed from the build.
- */
-class ICULocaleService;
-
-U_NAMESPACE_END
-
-#else
-
-#include "unicode/unistr.h"
-#include "unicode/locid.h"
-#include "unicode/strenum.h"
-
-#include "hash.h"
-#include "uvector.h"
-
-#include "serv.h"
-#include "locutil.h"
-
-U_NAMESPACE_BEGIN
-
-class ICULocaleService;
-
-class LocaleKey;
-class LocaleKeyFactory;
-class SimpleLocaleKeyFactory;
-class ServiceListener;
-
-/*
- ******************************************************************
- */
-
-/**
- * A subclass of Key that implements a locale fallback mechanism.
- * The first locale to search for is the locale provided by the
- * client, and the fallback locale to search for is the current
- * default locale.  If a prefix is present, the currentDescriptor
- * includes it before the locale proper, separated by "/".  This
- * is the default key instantiated by ICULocaleService.</p>
- *
- * <p>Canonicalization adjusts the locale string so that the
- * section before the first understore is in lower case, and the rest
- * is in upper case, with no trailing underscores.</p> 
- */
-
-class U_COMMON_API LocaleKey : public ICUServiceKey {
-  private: 
-    int32_t _kind;
-    UnicodeString _primaryID;
-    UnicodeString _fallbackID;
-    UnicodeString _currentID;
-
-  public:
-    enum {
-        KIND_ANY = -1
-    };
-
-    /**
-     * Create a LocaleKey with canonical primary and fallback IDs.
-     */
-    static LocaleKey* createWithCanonicalFallback(const UnicodeString* primaryID, 
-                                                  const UnicodeString* canonicalFallbackID,
-                                                  UErrorCode& status);
-
-    /**
-     * Create a LocaleKey with canonical primary and fallback IDs.
-     */
-    static LocaleKey* createWithCanonicalFallback(const UnicodeString* primaryID, 
-                                                  const UnicodeString* canonicalFallbackID, 
-                                                  int32_t kind,
-                                                  UErrorCode& status);
-
-  protected:
-    /**
-     * PrimaryID is the user's requested locale string,
-     * canonicalPrimaryID is this string in canonical form,
-     * fallbackID is the current default locale's string in
-     * canonical form.
-     */
-    LocaleKey(const UnicodeString& primaryID, 
-              const UnicodeString& canonicalPrimaryID, 
-              const UnicodeString* canonicalFallbackID, 
-              int32_t kind);
-
- public:
-    /**
-     * Append the prefix associated with the kind, or nothing if the kind is KIND_ANY.
-     */
-    virtual UnicodeString& prefix(UnicodeString& result) const;
-
-    /**
-     * Return the kind code associated with this key.
-     */
-    virtual int32_t kind() const;
-
-    /**
-     * Return the canonicalID.
-     */
-    virtual UnicodeString& canonicalID(UnicodeString& result) const;
-
-    /**
-     * Return the currentID.
-     */
-    virtual UnicodeString& currentID(UnicodeString& result) const;
-
-    /**
-     * Return the (canonical) current descriptor, or null if no current id.
-     */
-    virtual UnicodeString& currentDescriptor(UnicodeString& result) const;
-
-    /**
-     * Convenience method to return the locale corresponding to the (canonical) original ID.
-     */
-    virtual Locale& canonicalLocale(Locale& result) const;
-
-    /**
-     * Convenience method to return the locale corresponding to the (canonical) current ID.
-     */
-    virtual Locale& currentLocale(Locale& result) const;
-
-    /**
-     * If the key has a fallback, modify the key and return true,
-     * otherwise return false.</p>
-     *
-     * <p>First falls back through the primary ID, then through
-     * the fallbackID.  The final fallback is the empty string,
-     * unless the primary id was the empty string, in which case
-     * there is no fallback.  
-     */
-    virtual UBool fallback();
-
-    /**
-     * Return true if a key created from id matches, or would eventually
-     * fallback to match, the canonical ID of this key.  
-     */
-    virtual UBool isFallbackOf(const UnicodeString& id) const;
-    
- public:
-    /**
-     * UObject boilerplate.
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * Destructor.
-     */
-    virtual ~LocaleKey();
-
-#ifdef SERVICE_DEBUG
- public:
-    virtual UnicodeString& debug(UnicodeString& result) const;
-    virtual UnicodeString& debugClass(UnicodeString& result) const;
-#endif
-
-};
-
-/*
- ******************************************************************
- */
-
-/**
- * A subclass of ICUServiceFactory that uses LocaleKeys, and is able to
- * 'cover' more specific locales with more general locales that it
- * supports.  
- *
- * <p>Coverage may be either of the values VISIBLE or INVISIBLE.
- *
- * <p>'Visible' indicates that the specific locale(s) supported by
- * the factory are registered in getSupportedIDs, 'Invisible'
- * indicates that they are not.
- *
- * <p>Localization of visible ids is handled
- * by the handling factory, regardless of kind.
- */
-class U_COMMON_API LocaleKeyFactory : public ICUServiceFactory {
-protected:
-    const UnicodeString _name;
-    const int32_t _coverage;
-
-public:
-    enum {
-        /**
-         * Coverage value indicating that the factory makes
-         * its locales visible, and does not cover more specific 
-         * locales.
-         */
-        VISIBLE = 0,
-
-        /**
-         * Coverage value indicating that the factory does not make
-         * its locales visible, and does not cover more specific
-         * locales.
-         */
-        INVISIBLE = 1
-    };
-
-    /**
-     * Destructor.
-     */
-    virtual ~LocaleKeyFactory();
-
-protected:
-    /**
-     * Constructor used by subclasses.
-     */
-    LocaleKeyFactory(int32_t coverage);
-
-    /**
-     * Constructor used by subclasses.
-     */
-    LocaleKeyFactory(int32_t coverage, const UnicodeString& name);
-
-    /**
-     * Implement superclass abstract method.  This checks the currentID of
-     * the key against the supported IDs, and passes the canonicalLocale and
-     * kind off to handleCreate (which subclasses must implement).
-     */
-public:
-    virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
-
-protected:
-    virtual UBool handlesKey(const ICUServiceKey& key, UErrorCode& status) const;
-
-public:
-    /**
-     * Override of superclass method.  This adjusts the result based
-     * on the coverage rule for this factory.
-     */
-    virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
-
-    /**
-     * Return a localized name for the locale represented by id.
-     */
-    virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const;
-
-protected:
-    /**
-     * Utility method used by create(ICUServiceKey, ICUService).  Subclasses can implement
-     * this instead of create.  The default returns NULL.
-     */
-    virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* service, UErrorCode& status) const;
-
-   /**
-     * Return true if this id is one the factory supports (visible or 
-     * otherwise).
-     */
- //   virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const;
-
-   /**
-     * Return the set of ids that this factory supports (visible or 
-     * otherwise).  This can be called often and might need to be
-     * cached if it is expensive to create.
-     */
-    virtual const Hashtable* getSupportedIDs(UErrorCode& status) const;
-
-public:
-    /**
-     * UObject boilerplate.
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    virtual UClassID getDynamicClassID() const;
-
-#ifdef SERVICE_DEBUG
- public:
-    virtual UnicodeString& debug(UnicodeString& result) const;
-    virtual UnicodeString& debugClass(UnicodeString& result) const;
-#endif
-
-};
-
-/*
- ******************************************************************
- */
-
-/**
- * A LocaleKeyFactory that just returns a single object for a kind/locale.
- */
-
-class U_COMMON_API SimpleLocaleKeyFactory : public LocaleKeyFactory {
- private:
-    UObject* _obj;
-    UnicodeString _id;
-    const int32_t _kind;
-
- public:
-    SimpleLocaleKeyFactory(UObject* objToAdopt, 
-                           const UnicodeString& locale, 
-                           int32_t kind, 
-                           int32_t coverage);
-
-    SimpleLocaleKeyFactory(UObject* objToAdopt, 
-                           const Locale& locale, 
-                           int32_t kind, 
-                           int32_t coverage);
-
-    /**
-     * Destructor.
-     */
-    virtual ~SimpleLocaleKeyFactory();
-
-    /**
-     * Override of superclass method.  Returns the service object if kind/locale match.  Service is not used.
-     */
-    virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
-
-    /**
-     * Override of superclass method.  This adjusts the result based
-     * on the coverage rule for this factory.
-     */
-    virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
-
- protected:
-    /**
-     * Return true if this id is equal to the locale name.
-     */
-    //virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const;
-
-
-public:
-    /**
-     * UObject boilerplate.
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    virtual UClassID getDynamicClassID() const;
-
-#ifdef SERVICE_DEBUG
- public:
-    virtual UnicodeString& debug(UnicodeString& result) const;
-    virtual UnicodeString& debugClass(UnicodeString& result) const;
-#endif
-
-};
-
-/*
- ******************************************************************
- */
-
-/**
- * A LocaleKeyFactory that creates a service based on the ICU locale data.
- * This is a base class for most ICU factories.  Subclasses instantiate it
- * with a constructor that takes a bundle name, which determines the supported
- * IDs.  Subclasses then override handleCreate to create the actual service
- * object.  The default implementation returns a resource bundle.
- */
-class U_COMMON_API ICUResourceBundleFactory : public LocaleKeyFactory 
-{
- protected:
-    UnicodeString _bundleName;
-
- public:
-    /**
-     * Convenience constructor that uses the main ICU bundle name.
-     */
-    ICUResourceBundleFactory();
-
-    /**
-     * A service factory based on ICU resource data in resources with
-     * the given name.  This should be a 'path' that can be passed to
-     * ures_openAvailableLocales, such as U_ICUDATA or U_ICUDATA_COLL.
-     * The empty string is equivalent to U_ICUDATA.
-     */
-    ICUResourceBundleFactory(const UnicodeString& bundleName);
-
-    /**
-     * Destructor
-     */
-    virtual ~ICUResourceBundleFactory();
-
-protected:
-    /**
-     * Return the supported IDs.  This is the set of all locale names in ICULocaleData.
-     */
-    virtual const Hashtable* getSupportedIDs(UErrorCode& status) const;
-
-    /**
-     * Create the service.  The default implementation returns the resource bundle
-     * for the locale, ignoring kind, and service.
-     */
-    virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* service, UErrorCode& status) const;
-
-public:
-    /**
-     * UObject boilerplate.
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-    virtual UClassID getDynamicClassID() const;
-
-
-#ifdef SERVICE_DEBUG
- public:
-    virtual UnicodeString& debug(UnicodeString& result) const;
-    virtual UnicodeString& debugClass(UnicodeString& result) const;
-#endif
-
-};
-
-/*
- ******************************************************************
- */
-
-class U_COMMON_API ICULocaleService : public ICUService 
-{
- private:
-  Locale fallbackLocale;
-  UnicodeString fallbackLocaleName;
-
- public:
-  /**
-   * Construct an ICULocaleService.
-   */
-  ICULocaleService();
-
-  /**
-   * Construct an ICULocaleService with a name (useful for debugging).
-   */
-  ICULocaleService(const UnicodeString& name);
-
-  /**
-   * Destructor.
-   */
-  virtual ~ICULocaleService();
-
-#if 0
-  // redeclare because of overload resolution rules?
-  // no, causes ambiguities since both UnicodeString and Locale have constructors that take a const char*
-  // need some compiler flag to remove warnings 
-  UObject* get(const UnicodeString& descriptor, UErrorCode& status) const {
-    return ICUService::get(descriptor, status);
-  }
-
-  UObject* get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const {
-    return ICUService::get(descriptor, actualReturn, status);
-  }
-#endif
-
-  /**
-   * Convenience override for callers using locales.  This calls
-   * get(Locale, int, Locale[]) with KIND_ANY for kind and null for
-   * actualReturn.
-   */
-  UObject* get(const Locale& locale, UErrorCode& status) const;
-
-  /**
-   * Convenience override for callers using locales.  This calls
-   * get(Locale, int, Locale[]) with a null actualReturn.
-   */
-  UObject* get(const Locale& locale, int32_t kind, UErrorCode& status) const;
-
-  /**
-   * Convenience override for callers using locales. This calls
-   * get(Locale, String, Locale[]) with a null kind.
-   */
-  UObject* get(const Locale& locale, Locale* actualReturn, UErrorCode& status) const;
-                   
-  /**
-   * Convenience override for callers using locales.  This uses
-   * createKey(Locale.toString(), kind) to create a key, calls getKey, and then
-   * if actualReturn is not null, returns the actualResult from
-   * getKey (stripping any prefix) into a Locale.  
-   */
-  UObject* get(const Locale& locale, int32_t kind, Locale* actualReturn, UErrorCode& status) const;
-
-  /**
-   * Convenience override for callers using locales.  This calls
-   * registerObject(Object, Locale, int32_t kind, int coverage)
-   * passing KIND_ANY for the kind, and VISIBLE for the coverage.
-   */
-  virtual URegistryKey registerInstance(UObject* objToAdopt, const Locale& locale, UErrorCode& status);
-
-  /**
-   * Convenience function for callers using locales.  This calls
-   * registerObject(Object, Locale, int kind, int coverage)
-   * passing VISIBLE for the coverage.
-   */
-  virtual URegistryKey registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, UErrorCode& status);
-
-  /**
-   * Convenience function for callers using locales.  This  instantiates
-   * a SimpleLocaleKeyFactory, and registers the factory.
-   */
-  virtual URegistryKey registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, int32_t coverage, UErrorCode& status);
-
-
-  /**
-   * (Stop compiler from complaining about hidden overrides.)
-   * Since both UnicodeString and Locale have constructors that take const char*, adding a public
-   * method that takes UnicodeString causes ambiguity at call sites that use const char*.
-   * We really need a flag that is understood by all compilers that will suppress the warning about
-   * hidden overrides.
-   */
-  virtual URegistryKey registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status);
-
-  /**
-   * Convenience method for callers using locales.  This returns the standard
-   * service ID enumeration.
-   */
-  virtual StringEnumeration* getAvailableLocales(void) const;
-
- protected:
-
-  /**
-   * Return the name of the current fallback locale.  If it has changed since this was
-   * last accessed, the service cache is cleared.
-   */
-  const UnicodeString& validateFallbackLocale() const;
-
-  /**
-   * Override superclass createKey method.
-   */
-  virtual ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const;
-
-  /**
-   * Additional createKey that takes a kind.
-   */
-  virtual ICUServiceKey* createKey(const UnicodeString* id, int32_t kind, UErrorCode& status) const;
-
-  friend class ServiceEnumeration;
-};
-
-U_NAMESPACE_END
-
-    /* UCONFIG_NO_SERVICE */
-#endif
-
-    /* ICULSERV_H */
-#endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servls.cpp b/src/third_party/mozjs/intl/icu/source/common/servls.cpp
deleted file mode 100644
index 418be4a..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servls.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2012, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "unicode/resbund.h"
-#include "uresimp.h"
-#include "cmemory.h"
-#include "servloc.h"
-#include "ustrfmt.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-#include "uassert.h"
-
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
-
-U_NAMESPACE_BEGIN
-
-static UMutex llock = U_MUTEX_INITIALIZER;
-ICULocaleService::ICULocaleService()
-  : fallbackLocale(Locale::getDefault())
-{
-}
-
-ICULocaleService::ICULocaleService(const UnicodeString& dname)
-  : ICUService(dname)
-  , fallbackLocale(Locale::getDefault())
-{
-}
-
-ICULocaleService::~ICULocaleService()
-{
-}
-
-UObject*
-ICULocaleService::get(const Locale& locale, UErrorCode& status) const
-{
-    return get(locale, LocaleKey::KIND_ANY, NULL, status);
-}
-
-UObject*
-ICULocaleService::get(const Locale& locale, int32_t kind, UErrorCode& status) const
-{
-    return get(locale, kind, NULL, status);
-}
-
-UObject*
-ICULocaleService::get(const Locale& locale, Locale* actualReturn, UErrorCode& status) const
-{
-    return get(locale, LocaleKey::KIND_ANY, actualReturn, status);
-}
-
-UObject*
-ICULocaleService::get(const Locale& locale, int32_t kind, Locale* actualReturn, UErrorCode& status) const
-{
-    UObject* result = NULL;
-    if (U_FAILURE(status)) {
-        return result;
-    }
-
-    UnicodeString locName(locale.getName(), -1, US_INV);
-    if (locName.isBogus()) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-    } else {
-        ICUServiceKey* key = createKey(&locName, kind, status);
-        if (key) {
-            if (actualReturn == NULL) {
-                result = getKey(*key, status);
-            } else {
-                UnicodeString temp;
-                result = getKey(*key, &temp, status);
-
-                if (result != NULL) {
-                    key->parseSuffix(temp);
-                    LocaleUtility::initLocaleFromName(temp, *actualReturn);
-                }
-            }
-            delete key;
-        }
-    }
-    return result;
-}
-
-
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, 
-    UBool visible, UErrorCode& status)
-{
-    Locale loc;
-    LocaleUtility::initLocaleFromName(locale, loc);
-    return registerInstance(objToAdopt, loc, LocaleKey::KIND_ANY, 
-        visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE, status);
-}
-
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, UErrorCode& status)
-{
-    return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, LocaleKeyFactory::VISIBLE, status);
-}
-
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, UErrorCode& status)
-{
-    return registerInstance(objToAdopt, locale, kind, LocaleKeyFactory::VISIBLE, status);
-}
-
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, int32_t coverage, UErrorCode& status)
-{
-    ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage);
-    if (factory != NULL) {
-        return registerFactory(factory, status);
-    }
-    delete objToAdopt;
-    return NULL;
-}
-
-#if 0
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UErrorCode& status)
-{
-    return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, LocaleKeyFactory::VISIBLE, status);
-}
-
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status)
-{
-    return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY,
-                            visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE,
-                            status);
-}
-
-URegistryKey
-ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, int32_t kind, int32_t coverage, UErrorCode& status)
-{
-    ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage);
-    if (factory != NULL) {
-        return registerFactory(factory, status);
-    }
-    delete objToAdopt;
-    return NULL;
-}
-#endif
-
-class ServiceEnumeration : public StringEnumeration {
-private:
-    const ICULocaleService* _service;
-    int32_t _timestamp;
-    UVector _ids;
-    int32_t _pos;
-
-private:
-    ServiceEnumeration(const ICULocaleService* service, UErrorCode &status)
-        : _service(service)
-        , _timestamp(service->getTimestamp())
-        , _ids(uprv_deleteUObject, NULL, status)
-        , _pos(0)
-    {
-        _service->getVisibleIDs(_ids, status);
-    }
-
-    ServiceEnumeration(const ServiceEnumeration &other, UErrorCode &status)
-        : _service(other._service)
-        , _timestamp(other._timestamp)
-        , _ids(uprv_deleteUObject, NULL, status)
-        , _pos(0)
-    {
-        if(U_SUCCESS(status)) {
-            int32_t i, length;
-
-            length = other._ids.size();
-            for(i = 0; i < length; ++i) {
-                _ids.addElement(((UnicodeString *)other._ids.elementAt(i))->clone(), status);
-            }
-
-            if(U_SUCCESS(status)) {
-                _pos = other._pos;
-            }
-        }
-    }
-
-public:
-    static ServiceEnumeration* create(const ICULocaleService* service) {
-        UErrorCode status = U_ZERO_ERROR;
-        ServiceEnumeration* result = new ServiceEnumeration(service, status);
-        if (U_SUCCESS(status)) {
-            return result;
-        }
-        delete result;
-        return NULL;
-    }
-
-    virtual ~ServiceEnumeration();
-
-    virtual StringEnumeration *clone() const {
-        UErrorCode status = U_ZERO_ERROR;
-        ServiceEnumeration *cl = new ServiceEnumeration(*this, status);
-        if(U_FAILURE(status)) {
-            delete cl;
-            cl = NULL;
-        }
-        return cl;
-    }
-
-    UBool upToDate(UErrorCode& status) const {
-        if (U_SUCCESS(status)) {
-            if (_timestamp == _service->getTimestamp()) {
-                return TRUE;
-            }
-            status = U_ENUM_OUT_OF_SYNC_ERROR;
-        }
-        return FALSE;
-    }
-
-    virtual int32_t count(UErrorCode& status) const {
-        return upToDate(status) ? _ids.size() : 0;
-    }
-
-    virtual const UnicodeString* snext(UErrorCode& status) {
-        if (upToDate(status) && (_pos < _ids.size())) {
-            return (const UnicodeString*)_ids[_pos++];
-        }
-        return NULL;
-    }
-
-    virtual void reset(UErrorCode& status) {
-        if (status == U_ENUM_OUT_OF_SYNC_ERROR) {
-            status = U_ZERO_ERROR;
-        }
-        if (U_SUCCESS(status)) {
-            _timestamp = _service->getTimestamp();
-            _pos = 0;
-            _service->getVisibleIDs(_ids, status);
-        }
-    }
-
-public:
-    static UClassID U_EXPORT2 getStaticClassID(void);
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-ServiceEnumeration::~ServiceEnumeration() {}
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ServiceEnumeration)
-
-StringEnumeration*
-ICULocaleService::getAvailableLocales(void) const
-{
-    return ServiceEnumeration::create(this);
-}
-
-const UnicodeString&
-ICULocaleService::validateFallbackLocale() const
-{
-    const Locale&     loc    = Locale::getDefault();
-    ICULocaleService* ncThis = (ICULocaleService*)this;
-    {
-        Mutex mutex(&llock);
-        if (loc != fallbackLocale) {
-            ncThis->fallbackLocale = loc;
-            LocaleUtility::initNameFromLocale(loc, ncThis->fallbackLocaleName);
-            ncThis->clearServiceCache();
-        }
-    }
-    return fallbackLocaleName;
-}
-
-ICUServiceKey*
-ICULocaleService::createKey(const UnicodeString* id, UErrorCode& status) const
-{
-    return LocaleKey::createWithCanonicalFallback(id, &validateFallbackLocale(), status);
-}
-
-ICUServiceKey*
-ICULocaleService::createKey(const UnicodeString* id, int32_t kind, UErrorCode& status) const
-{
-    return LocaleKey::createWithCanonicalFallback(id, &validateFallbackLocale(), kind, status);
-}
-
-U_NAMESPACE_END
-
-/* !UCONFIG_NO_SERVICE */
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servnotf.cpp b/src/third_party/mozjs/intl/icu/source/common/servnotf.cpp
deleted file mode 100644
index dbcbe92..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servnotf.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2012, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "servnotf.h"
-#ifdef NOTIFIER_DEBUG
-#include <stdio.h>
-#endif
-
-U_NAMESPACE_BEGIN
-
-EventListener::~EventListener() {}
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(EventListener)
-
-static UMutex notifyLock = U_MUTEX_INITIALIZER;
-
-ICUNotifier::ICUNotifier(void) 
-: listeners(NULL) 
-{
-}
-
-ICUNotifier::~ICUNotifier(void) {
-    {
-        Mutex lmx(&notifyLock);
-        delete listeners;
-        listeners = NULL;
-    }
-}
-
-
-void 
-ICUNotifier::addListener(const EventListener* l, UErrorCode& status) 
-{
-    if (U_SUCCESS(status)) {
-        if (l == NULL) {
-            status = U_ILLEGAL_ARGUMENT_ERROR;
-            return;
-        }
-
-        if (acceptsListener(*l)) {
-            Mutex lmx(&notifyLock);
-            if (listeners == NULL) {
-                listeners = new UVector(5, status);
-            } else {
-                for (int i = 0, e = listeners->size(); i < e; ++i) {
-                    const EventListener* el = (const EventListener*)(listeners->elementAt(i));
-                    if (l == el) {
-                        return;
-                    }
-                }
-            }
-
-            listeners->addElement((void*)l, status); // cast away const
-        }
-#ifdef NOTIFIER_DEBUG
-        else {
-            fprintf(stderr, "Listener invalid for this notifier.");
-            exit(1);
-        }
-#endif
-    }
-}
-
-void 
-ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) 
-{
-    if (U_SUCCESS(status)) {
-        if (l == NULL) {
-            status = U_ILLEGAL_ARGUMENT_ERROR;
-            return;
-        }
-
-        {
-            Mutex lmx(&notifyLock);
-            if (listeners != NULL) {
-                // identity equality check
-                for (int i = 0, e = listeners->size(); i < e; ++i) {
-                    const EventListener* el = (const EventListener*)listeners->elementAt(i);
-                    if (l == el) {
-                        listeners->removeElementAt(i);
-                        if (listeners->size() == 0) {
-                            delete listeners;
-                            listeners = NULL;
-                        }
-                        return;
-                    }
-                }
-            }
-        }
-    }
-}
-
-void 
-ICUNotifier::notifyChanged(void) 
-{
-    if (listeners != NULL) {
-        Mutex lmx(&notifyLock);
-        if (listeners != NULL) {
-            for (int i = 0, e = listeners->size(); i < e; ++i) {
-                EventListener* el = (EventListener*)listeners->elementAt(i);
-                notifyListener(*el);
-            }
-        }
-    }
-}
-
-U_NAMESPACE_END
-
-/* UCONFIG_NO_SERVICE */
-#endif
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servnotf.h b/src/third_party/mozjs/intl/icu/source/common/servnotf.h
deleted file mode 100644
index 4fae2f3..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servnotf.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-#ifndef ICUNOTIF_H
-#define ICUNOTIF_H
-
-#include "unicode/utypes.h"
-
-#if UCONFIG_NO_SERVICE
-
-U_NAMESPACE_BEGIN
-
-/*
- * Allow the declaration of APIs with pointers to BreakIterator
- * even when break iteration is removed from the build.
- */
-class ICUNotifier;
-
-U_NAMESPACE_END
-
-#else
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-
-#include "mutex.h"
-#include "uvector.h"
-
-U_NAMESPACE_BEGIN
-
-class U_COMMON_API EventListener : public UObject {
-public: 
-    virtual ~EventListener();
-
-public:
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    virtual UClassID getDynamicClassID() const;
-
-public:
-#ifdef SERVICE_DEBUG
-    virtual UnicodeString& debug(UnicodeString& result) const {
-      return debugClass(result);
-    }
-
-    virtual UnicodeString& debugClass(UnicodeString& result) const {
-      return result.append("Key");
-    }
-#endif
-};
-
-/**
- * <p>Abstract implementation of a notification facility.  Clients add
- * EventListeners with addListener and remove them with removeListener.
- * Notifiers call notifyChanged when they wish to notify listeners.
- * This queues the listener list on the notification thread, which
- * eventually dequeues the list and calls notifyListener on each
- * listener in the list.</p>
- *
- * <p>Subclasses override acceptsListener and notifyListener 
- * to add type-safe notification.  AcceptsListener should return
- * true if the listener is of the appropriate type; ICUNotifier
- * itself will ensure the listener is non-null and that the
- * identical listener is not already registered with the Notifier.
- * NotifyListener should cast the listener to the appropriate 
- * type and call the appropriate method on the listener.
- */
-
-class U_COMMON_API ICUNotifier : public UMemory  {
-private: UVector* listeners;
-         
-public: 
-    ICUNotifier(void);
-    
-    virtual ~ICUNotifier(void);
-    
-    /**
-     * Add a listener to be notified when notifyChanged is called.
-     * The listener must not be null. AcceptsListener must return
-     * true for the listener.  Attempts to concurrently
-     * register the identical listener more than once will be
-     * silently ignored.  
-     */
-    virtual void addListener(const EventListener* l, UErrorCode& status);
-    
-    /**
-     * Stop notifying this listener.  The listener must
-     * not be null.  Attemps to remove a listener that is
-     * not registered will be silently ignored.
-     */
-    virtual void removeListener(const EventListener* l, UErrorCode& status);
-    
-    /**
-     * ICU doesn't spawn its own threads.  All listeners are notified in
-     * the thread of the caller.  Misbehaved listeners can therefore
-     * indefinitely block the calling thread.  Callers should beware of
-     * deadlock situations.  
-     */
-    virtual void notifyChanged(void);
-    
-protected: 
-    /**
-     * Subclasses implement this to return TRUE if the listener is
-     * of the appropriate type.
-     */
-    virtual UBool acceptsListener(const EventListener& l) const = 0;
-    
-    /**
-     * Subclasses implement this to notify the listener.
-     */
-    virtual void notifyListener(EventListener& l) const = 0;
-};
-
-U_NAMESPACE_END
-
-/* UCONFIG_NO_SERVICE */
-#endif
-
-/* ICUNOTIF_H */
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/servrbf.cpp b/src/third_party/mozjs/intl/icu/source/common/servrbf.cpp
deleted file mode 100644
index 3a0227f..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servrbf.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2005, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "unicode/resbund.h"
-#include "uresimp.h"
-#include "cmemory.h"
-#include "servloc.h"
-#include "ustrfmt.h"
-#include "uhash.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-#include "uassert.h"
-
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
-
-U_NAMESPACE_BEGIN
-
-ICUResourceBundleFactory::ICUResourceBundleFactory()
-  : LocaleKeyFactory(VISIBLE)
-  , _bundleName()
-{
-}
-
-ICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName)
-  : LocaleKeyFactory(VISIBLE)
-  , _bundleName(bundleName)
-{
-}
-
-ICUResourceBundleFactory::~ICUResourceBundleFactory() {}
-
-const Hashtable*
-ICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const
-{
-    if (U_SUCCESS(status)) {
-        return LocaleUtility::getAvailableLocaleNames(_bundleName);
-    }
-    return NULL;
-}
-
-UObject*
-ICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const
-{
-    if (U_SUCCESS(status)) {
-        // _bundleName is a package name
-        // and should only contain invariant characters
-                // ??? is it always true that the max length of the bundle name is 19?
-                // who made this change? -- dlf
-        char pkg[20];
-        int32_t length;
-        length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV);
-        if(length>=(int32_t)sizeof(pkg)) {
-            return NULL;
-        }
-        return new ResourceBundle(pkg, loc, status);
-    }
-    return NULL;
-}
-
-#ifdef SERVICE_DEBUG
-UnicodeString&
-ICUResourceBundleFactory::debug(UnicodeString& result) const
-{
-    LocaleKeyFactory::debug(result);
-    result.append(", bundle: ");
-    return result.append(_bundleName);
-}
-
-UnicodeString&
-ICUResourceBundleFactory::debugClass(UnicodeString& result) const
-{
-    return result.append("ICUResourceBundleFactory");
-}
-#endif
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory)
-
-U_NAMESPACE_END
-
-/* !UCONFIG_NO_SERVICE */
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/servslkf.cpp b/src/third_party/mozjs/intl/icu/source/common/servslkf.cpp
deleted file mode 100644
index b8afaaa..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/servslkf.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- *******************************************************************************
- * Copyright (C) 2001-2005, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- *
- *******************************************************************************
- */
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_SERVICE
-
-#include "unicode/resbund.h"
-#include "uresimp.h"
-#include "cmemory.h"
-#include "servloc.h"
-#include "ustrfmt.h"
-#include "uhash.h"
-#include "charstr.h"
-#include "ucln_cmn.h"
-#include "uassert.h"
-
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
-
-U_NAMESPACE_BEGIN
-
-/*
- ******************************************************************
- */
-
-SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
-                                               const UnicodeString& locale,
-                                               int32_t kind,
-                                               int32_t coverage)
-  : LocaleKeyFactory(coverage)
-  , _obj(objToAdopt)
-  , _id(locale)
-  , _kind(kind)
-{
-}
-
-SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
-                                               const Locale& locale,
-                                               int32_t kind,
-                                               int32_t coverage)
-  : LocaleKeyFactory(coverage)
-  , _obj(objToAdopt)
-  , _id()
-  , _kind(kind)
-{
-    LocaleUtility::initNameFromLocale(locale, _id);
-}
-
-SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()
-{
-  delete _obj;
-  _obj = NULL;
-}
-
-UObject*
-SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
-{
-    if (U_SUCCESS(status)) {
-        const LocaleKey& lkey = (const LocaleKey&)key;
-        if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) {
-            UnicodeString keyID;
-            lkey.currentID(keyID);
-            if (_id == keyID) {
-                return service->cloneInstance(_obj);
-            }
-        }
-    }
-    return NULL;
-}
-
-//UBool
-//SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const
-//{
-//    return id == _id;
-//}
-
-void
-SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const
-{
-    if (U_SUCCESS(status)) {
-        if (_coverage & 0x1) {
-            result.remove(_id);
-        } else {
-            result.put(_id, (void*)this, status);
-        }
-    }
-}
-
-#ifdef SERVICE_DEBUG
-UnicodeString&
-SimpleLocaleKeyFactory::debug(UnicodeString& result) const
-{
-    LocaleKeyFactory::debug(result);
-    result.append(", id: ");
-    result.append(_id);
-    result.append(", kind: ");
-    result.append(_kind);
-    return result;
-}
-
-UnicodeString&
-SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const
-{
-    return result.append("SimpleLocaleKeyFactory");
-}
-#endif
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory)
-
-U_NAMESPACE_END
-
-/* !UCONFIG_NO_SERVICE */
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/sprpimpl.h b/src/third_party/mozjs/intl/icu/source/common/sprpimpl.h
deleted file mode 100644
index 1422cc3..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/sprpimpl.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- *******************************************************************************
- *
- *   Copyright (C) 2003-2006, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  sprpimpl.h
- *   encoding:   US-ASCII
- *   tab size:   8 (not used)
- *   indentation:4
- *
- *   created on: 2003feb1
- *   created by: Ram Viswanadha
- */
-
-#ifndef SPRPIMPL_H
-#define SPRPIMPL_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_IDNA
-
-#include "unicode/ustring.h"
-#include "unicode/parseerr.h"
-#include "unicode/usprep.h"
-#include "unicode/udata.h"
-#include "utrie.h"
-#include "udataswp.h"
-#include "ubidi_props.h"
-
-#define _SPREP_DATA_TYPE "spp"
-
-enum UStringPrepType{
-    USPREP_UNASSIGNED           = 0x0000 ,
-    USPREP_MAP                  = 0x0001 ,
-    USPREP_PROHIBITED           = 0x0002 , 
-    USPREP_DELETE               = 0x0003 ,
-    USPREP_TYPE_LIMIT           = 0x0004  
-};
-
-typedef enum UStringPrepType UStringPrepType;
-
-#ifdef USPREP_TYPE_NAMES_ARRAY
-static const char* usprepTypeNames[] ={
-    "UNASSIGNED" ,          
-    "MAP" , 
-    "PROHIBITED" ,        
-    "DELETE",
-    "TYPE_LIMIT" 
-};
-#endif
-
-enum{
-    _SPREP_NORMALIZATION_ON = 0x0001,
-    _SPREP_CHECK_BIDI_ON    = 0x0002
-};
-
-enum{
-    _SPREP_TYPE_THRESHOLD       = 0xFFF0,
-    _SPREP_MAX_INDEX_VALUE      = 0x3FBF,   /*16139*/ 
-    _SPREP_MAX_INDEX_TOP_LENGTH = 0x0003
-};
-
-/* indexes[] value names */
-enum {
-    _SPREP_INDEX_TRIE_SIZE                  = 0, /* number of bytes in StringPrep trie */
-    _SPREP_INDEX_MAPPING_DATA_SIZE          = 1, /* The array that contains the mapping   */
-    _SPREP_NORM_CORRECTNS_LAST_UNI_VERSION  = 2, /* The index of Unicode version of last entry in NormalizationCorrections.txt */ 
-    _SPREP_ONE_UCHAR_MAPPING_INDEX_START    = 3, /* The starting index of 1 UChar mapping index in the mapping data array */
-    _SPREP_TWO_UCHARS_MAPPING_INDEX_START   = 4, /* The starting index of 2 UChars mapping index in the mapping data array */
-    _SPREP_THREE_UCHARS_MAPPING_INDEX_START = 5, /* The starting index of 3 UChars mapping index in the mapping data array */
-    _SPREP_FOUR_UCHARS_MAPPING_INDEX_START  = 6, /* The starting index of 4 UChars mapping index in the mapping data array */
-    _SPREP_OPTIONS                          = 7, /* Bit set of options to turn on in the profile */
-    _SPREP_INDEX_TOP=16                          /* changing this requires a new formatVersion */
-};
-
-typedef struct UStringPrepKey UStringPrepKey;
-
-
-struct UStringPrepKey{
-    char* name;
-    char* path;
-};
-
-struct UStringPrepProfile{
-    int32_t indexes[_SPREP_INDEX_TOP];
-    UTrie sprepTrie;
-    const uint16_t* mappingData;
-    UDataMemory* sprepData;
-    const UBiDiProps *bdp; /* used only if checkBiDi is set */
-    int32_t refCount;
-    UBool isDataLoaded;
-    UBool doNFKC;
-    UBool checkBiDi;
-};
-
-/**
- * Helper function for populating the UParseError struct
- * @internal
- */
-U_CAPI void U_EXPORT2
-uprv_syntaxError(const UChar* rules, 
-                 int32_t pos,
-                 int32_t rulesLen,
-                 UParseError* parseError);
-
-
-/**
- * Swap StringPrep .spp profile data. See udataswp.h.
- * @internal
- */
-U_CAPI int32_t U_EXPORT2
-usprep_swap(const UDataSwapper *ds,
-            const void *inData, int32_t length, void *outData,
-            UErrorCode *pErrorCode);
-
-#endif /* #if !UCONFIG_NO_IDNA */
-
-#endif
-
-/*
- * Hey, Emacs, please set the following:
- *
- * Local Variables:
- * indent-tabs-mode: nil
- * End:
- *
- */
diff --git a/src/third_party/mozjs/intl/icu/source/common/stringpiece.cpp b/src/third_party/mozjs/intl/icu/source/common/stringpiece.cpp
deleted file mode 100644
index d9194e3..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/stringpiece.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (C) 2009-2012, International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-// Copyright 2004 and onwards Google Inc.
-//
-// Author: wilsonh@google.com (Wilson Hsieh)
-//
-
-#include "unicode/utypes.h"
-#include "unicode/stringpiece.h"
-#include "cstring.h"
-#include "cmemory.h"
-
-U_NAMESPACE_BEGIN
-
-StringPiece::StringPiece(const char* str)
-    : ptr_(str), length_((str == NULL) ? 0 : static_cast<int32_t>(uprv_strlen(str))) { }
-
-StringPiece::StringPiece(const StringPiece& x, int32_t pos) {
-  if (pos < 0) {
-    pos = 0;
-  } else if (pos > x.length_) {
-    pos = x.length_;
-  }
-  ptr_ = x.ptr_ + pos;
-  length_ = x.length_ - pos;
-}
-
-StringPiece::StringPiece(const StringPiece& x, int32_t pos, int32_t len) {
-  if (pos < 0) {
-    pos = 0;
-  } else if (pos > x.length_) {
-    pos = x.length_;
-  }
-  if (len < 0) {
-    len = 0;
-  } else if (len > x.length_ - pos) {
-    len = x.length_ - pos;
-  }
-  ptr_ = x.ptr_ + pos;
-  length_ = len;
-}
-
-void StringPiece::set(const char* str) {
-  ptr_ = str;
-  if (str != NULL)
-    length_ = static_cast<int32_t>(uprv_strlen(str));
-  else
-    length_ = 0;
-}
-
-U_EXPORT UBool U_EXPORT2
-operator==(const StringPiece& x, const StringPiece& y) {
-  int32_t len = x.size();
-  if (len != y.size()) {
-    return false;
-  }
-  if (len == 0) {
-    return true;
-  }
-  const char* p = x.data();
-  const char* p2 = y.data();
-  // Test last byte in case strings share large common prefix
-  --len;
-  if (p[len] != p2[len]) return false;
-  // At this point we can, but don't have to, ignore the last byte.
-  return uprv_memcmp(p, p2, len) == 0;
-}
-
-
-/* Microsft Visual Studios <= 8.0 complains about redefinition of this
- * static const class variable. However, the C++ standard states that this 
- * definition is correct. Perhaps there is a bug in the Microsoft compiler. 
- * This is not an issue on any other compilers (that we know of) including 
- * Visual Studios 9.0.
- * Cygwin with MSVC 9.0 also complains here about redefinition.
- */
-#if (!defined(_MSC_VER) || (_MSC_VER >= 1500)) && !defined(CYGWINMSVC)
-const int32_t StringPiece::npos;
-#endif
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/stringtriebuilder.cpp b/src/third_party/mozjs/intl/icu/source/common/stringtriebuilder.cpp
deleted file mode 100644
index 32a9311..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/stringtriebuilder.cpp
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  stringtriebuilder.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010dec24
-*   created by: Markus W. Scherer
-*/
-
-#include "utypeinfo.h"  // for 'typeid' to work
-#include "unicode/utypes.h"
-#include "unicode/stringtriebuilder.h"
-#include "uassert.h"
-#include "uhash.h"
-
-U_CDECL_BEGIN
-
-static int32_t U_CALLCONV
-hashStringTrieNode(const UHashTok key) {
-    return icu::StringTrieBuilder::hashNode(key.pointer);
-}
-
-static UBool U_CALLCONV
-equalStringTrieNodes(const UHashTok key1, const UHashTok key2) {
-    return icu::StringTrieBuilder::equalNodes(key1.pointer, key2.pointer);
-}
-
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
-
-StringTrieBuilder::StringTrieBuilder() : nodes(NULL) {}
-
-StringTrieBuilder::~StringTrieBuilder() {
-    deleteCompactBuilder();
-}
-
-void
-StringTrieBuilder::createCompactBuilder(int32_t sizeGuess, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    nodes=uhash_openSize(hashStringTrieNode, equalStringTrieNodes, NULL,
-                         sizeGuess, &errorCode);
-    if(U_SUCCESS(errorCode)) {
-        if(nodes==NULL) {
-          errorCode=U_MEMORY_ALLOCATION_ERROR;
-        } else {
-          uhash_setKeyDeleter(nodes, uprv_deleteUObject);
-        }
-    }
-}
-
-void
-StringTrieBuilder::deleteCompactBuilder() {
-    uhash_close(nodes);
-    nodes=NULL;
-}
-
-void
-StringTrieBuilder::build(UStringTrieBuildOption buildOption, int32_t elementsLength,
-                       UErrorCode &errorCode) {
-    if(buildOption==USTRINGTRIE_BUILD_FAST) {
-        writeNode(0, elementsLength, 0);
-    } else /* USTRINGTRIE_BUILD_SMALL */ {
-        createCompactBuilder(2*elementsLength, errorCode);
-        Node *root=makeNode(0, elementsLength, 0, errorCode);
-        if(U_SUCCESS(errorCode)) {
-            root->markRightEdgesFirst(-1);
-            root->write(*this);
-        }
-        deleteCompactBuilder();
-    }
-}
-
-// Requires start<limit,
-// and all strings of the [start..limit[ elements must be sorted and
-// have a common prefix of length unitIndex.
-int32_t
-StringTrieBuilder::writeNode(int32_t start, int32_t limit, int32_t unitIndex) {
-    UBool hasValue=FALSE;
-    int32_t value=0;
-    int32_t type;
-    if(unitIndex==getElementStringLength(start)) {
-        // An intermediate or final value.
-        value=getElementValue(start++);
-        if(start==limit) {
-            return writeValueAndFinal(value, TRUE);  // final-value node
-        }
-        hasValue=TRUE;
-    }
-    // Now all [start..limit[ strings are longer than unitIndex.
-    int32_t minUnit=getElementUnit(start, unitIndex);
-    int32_t maxUnit=getElementUnit(limit-1, unitIndex);
-    if(minUnit==maxUnit) {
-        // Linear-match node: All strings have the same character at unitIndex.
-        int32_t lastUnitIndex=getLimitOfLinearMatch(start, limit-1, unitIndex);
-        writeNode(start, limit, lastUnitIndex);
-        // Break the linear-match sequence into chunks of at most kMaxLinearMatchLength.
-        int32_t length=lastUnitIndex-unitIndex;
-        int32_t maxLinearMatchLength=getMaxLinearMatchLength();
-        while(length>maxLinearMatchLength) {
-            lastUnitIndex-=maxLinearMatchLength;
-            length-=maxLinearMatchLength;
-            writeElementUnits(start, lastUnitIndex, maxLinearMatchLength);
-            write(getMinLinearMatch()+maxLinearMatchLength-1);
-        }
-        writeElementUnits(start, unitIndex, length);
-        type=getMinLinearMatch()+length-1;
-    } else {
-        // Branch node.
-        int32_t length=countElementUnits(start, limit, unitIndex);
-        // length>=2 because minUnit!=maxUnit.
-        writeBranchSubNode(start, limit, unitIndex, length);
-        if(--length<getMinLinearMatch()) {
-            type=length;
-        } else {
-            write(length);
-            type=0;
-        }
-    }
-    return writeValueAndType(hasValue, value, type);
-}
-
-// start<limit && all strings longer than unitIndex &&
-// length different units at unitIndex
-int32_t
-StringTrieBuilder::writeBranchSubNode(int32_t start, int32_t limit, int32_t unitIndex, int32_t length) {
-    UChar middleUnits[kMaxSplitBranchLevels];
-    int32_t lessThan[kMaxSplitBranchLevels];
-    int32_t ltLength=0;
-    while(length>getMaxBranchLinearSubNodeLength()) {
-        // Branch on the middle unit.
-        // First, find the middle unit.
-        int32_t i=skipElementsBySomeUnits(start, unitIndex, length/2);
-        // Encode the less-than branch first.
-        middleUnits[ltLength]=getElementUnit(i, unitIndex);  // middle unit
-        lessThan[ltLength]=writeBranchSubNode(start, i, unitIndex, length/2);
-        ++ltLength;
-        // Continue for the greater-or-equal branch.
-        start=i;
-        length=length-length/2;
-    }
-    // For each unit, find its elements array start and whether it has a final value.
-    int32_t starts[kMaxBranchLinearSubNodeLength];
-    UBool isFinal[kMaxBranchLinearSubNodeLength-1];
-    int32_t unitNumber=0;
-    do {
-        int32_t i=starts[unitNumber]=start;
-        UChar unit=getElementUnit(i++, unitIndex);
-        i=indexOfElementWithNextUnit(i, unitIndex, unit);
-        isFinal[unitNumber]= start==i-1 && unitIndex+1==getElementStringLength(start);
-        start=i;
-    } while(++unitNumber<length-1);
-    // unitNumber==length-1, and the maxUnit elements range is [start..limit[
-    starts[unitNumber]=start;
-
-    // Write the sub-nodes in reverse order: The jump lengths are deltas from
-    // after their own positions, so if we wrote the minUnit sub-node first,
-    // then its jump delta would be larger.
-    // Instead we write the minUnit sub-node last, for a shorter delta.
-    int32_t jumpTargets[kMaxBranchLinearSubNodeLength-1];
-    do {
-        --unitNumber;
-        if(!isFinal[unitNumber]) {
-            jumpTargets[unitNumber]=writeNode(starts[unitNumber], starts[unitNumber+1], unitIndex+1);
-        }
-    } while(unitNumber>0);
-    // The maxUnit sub-node is written as the very last one because we do
-    // not jump for it at all.
-    unitNumber=length-1;
-    writeNode(start, limit, unitIndex+1);
-    int32_t offset=write(getElementUnit(start, unitIndex));
-    // Write the rest of this node's unit-value pairs.
-    while(--unitNumber>=0) {
-        start=starts[unitNumber];
-        int32_t value;
-        if(isFinal[unitNumber]) {
-            // Write the final value for the one string ending with this unit.
-            value=getElementValue(start);
-        } else {
-            // Write the delta to the start position of the sub-node.
-            value=offset-jumpTargets[unitNumber];
-        }
-        writeValueAndFinal(value, isFinal[unitNumber]);
-        offset=write(getElementUnit(start, unitIndex));
-    }
-    // Write the split-branch nodes.
-    while(ltLength>0) {
-        --ltLength;
-        writeDeltaTo(lessThan[ltLength]);
-        offset=write(middleUnits[ltLength]);
-    }
-    return offset;
-}
-
-// Requires start<limit,
-// and all strings of the [start..limit[ elements must be sorted and
-// have a common prefix of length unitIndex.
-StringTrieBuilder::Node *
-StringTrieBuilder::makeNode(int32_t start, int32_t limit, int32_t unitIndex, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    UBool hasValue=FALSE;
-    int32_t value=0;
-    if(unitIndex==getElementStringLength(start)) {
-        // An intermediate or final value.
-        value=getElementValue(start++);
-        if(start==limit) {
-            return registerFinalValue(value, errorCode);
-        }
-        hasValue=TRUE;
-    }
-    Node *node;
-    // Now all [start..limit[ strings are longer than unitIndex.
-    int32_t minUnit=getElementUnit(start, unitIndex);
-    int32_t maxUnit=getElementUnit(limit-1, unitIndex);
-    if(minUnit==maxUnit) {
-        // Linear-match node: All strings have the same character at unitIndex.
-        int32_t lastUnitIndex=getLimitOfLinearMatch(start, limit-1, unitIndex);
-        Node *nextNode=makeNode(start, limit, lastUnitIndex, errorCode);
-        // Break the linear-match sequence into chunks of at most kMaxLinearMatchLength.
-        int32_t length=lastUnitIndex-unitIndex;
-        int32_t maxLinearMatchLength=getMaxLinearMatchLength();
-        while(length>maxLinearMatchLength) {
-            lastUnitIndex-=maxLinearMatchLength;
-            length-=maxLinearMatchLength;
-            node=createLinearMatchNode(start, lastUnitIndex, maxLinearMatchLength, nextNode);
-            nextNode=registerNode(node, errorCode);
-        }
-        node=createLinearMatchNode(start, unitIndex, length, nextNode);
-    } else {
-        // Branch node.
-        int32_t length=countElementUnits(start, limit, unitIndex);
-        // length>=2 because minUnit!=maxUnit.
-        Node *subNode=makeBranchSubNode(start, limit, unitIndex, length, errorCode);
-        node=new BranchHeadNode(length, subNode);
-    }
-    if(hasValue && node!=NULL) {
-        if(matchNodesCanHaveValues()) {
-            ((ValueNode *)node)->setValue(value);
-        } else {
-            node=new IntermediateValueNode(value, registerNode(node, errorCode));
-        }
-    }
-    return registerNode(node, errorCode);
-}
-
-// start<limit && all strings longer than unitIndex &&
-// length different units at unitIndex
-StringTrieBuilder::Node *
-StringTrieBuilder::makeBranchSubNode(int32_t start, int32_t limit, int32_t unitIndex,
-                                   int32_t length, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    UChar middleUnits[kMaxSplitBranchLevels];
-    Node *lessThan[kMaxSplitBranchLevels];
-    int32_t ltLength=0;
-    while(length>getMaxBranchLinearSubNodeLength()) {
-        // Branch on the middle unit.
-        // First, find the middle unit.
-        int32_t i=skipElementsBySomeUnits(start, unitIndex, length/2);
-        // Create the less-than branch.
-        middleUnits[ltLength]=getElementUnit(i, unitIndex);  // middle unit
-        lessThan[ltLength]=makeBranchSubNode(start, i, unitIndex, length/2, errorCode);
-        ++ltLength;
-        // Continue for the greater-or-equal branch.
-        start=i;
-        length=length-length/2;
-    }
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    ListBranchNode *listNode=new ListBranchNode();
-    if(listNode==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    // For each unit, find its elements array start and whether it has a final value.
-    int32_t unitNumber=0;
-    do {
-        int32_t i=start;
-        UChar unit=getElementUnit(i++, unitIndex);
-        i=indexOfElementWithNextUnit(i, unitIndex, unit);
-        if(start==i-1 && unitIndex+1==getElementStringLength(start)) {
-            listNode->add(unit, getElementValue(start));
-        } else {
-            listNode->add(unit, makeNode(start, i, unitIndex+1, errorCode));
-        }
-        start=i;
-    } while(++unitNumber<length-1);
-    // unitNumber==length-1, and the maxUnit elements range is [start..limit[
-    UChar unit=getElementUnit(start, unitIndex);
-    if(start==limit-1 && unitIndex+1==getElementStringLength(start)) {
-        listNode->add(unit, getElementValue(start));
-    } else {
-        listNode->add(unit, makeNode(start, limit, unitIndex+1, errorCode));
-    }
-    Node *node=registerNode(listNode, errorCode);
-    // Create the split-branch nodes.
-    while(ltLength>0) {
-        --ltLength;
-        node=registerNode(
-            new SplitBranchNode(middleUnits[ltLength], lessThan[ltLength], node), errorCode);
-    }
-    return node;
-}
-
-StringTrieBuilder::Node *
-StringTrieBuilder::registerNode(Node *newNode, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        delete newNode;
-        return NULL;
-    }
-    if(newNode==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    const UHashElement *old=uhash_find(nodes, newNode);
-    if(old!=NULL) {
-        delete newNode;
-        return (Node *)old->key.pointer;
-    }
-    // If uhash_puti() returns a non-zero value from an equivalent, previously
-    // registered node, then uhash_find() failed to find that and we will leak newNode.
-#if U_DEBUG
-    int32_t oldValue=  // Only in debug mode to avoid a compiler warning about unused oldValue.
-#endif
-    uhash_puti(nodes, newNode, 1, &errorCode);
-    U_ASSERT(oldValue==0);
-    if(U_FAILURE(errorCode)) {
-        delete newNode;
-        return NULL;
-    }
-    return newNode;
-}
-
-StringTrieBuilder::Node *
-StringTrieBuilder::registerFinalValue(int32_t value, UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) {
-        return NULL;
-    }
-    FinalValueNode key(value);
-    const UHashElement *old=uhash_find(nodes, &key);
-    if(old!=NULL) {
-        return (Node *)old->key.pointer;
-    }
-    Node *newNode=new FinalValueNode(value);
-    if(newNode==NULL) {
-        errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    // If uhash_puti() returns a non-zero value from an equivalent, previously
-    // registered node, then uhash_find() failed to find that and we will leak newNode.
-#if U_DEBUG
-    int32_t oldValue=  // Only in debug mode to avoid a compiler warning about unused oldValue.
-#endif
-    uhash_puti(nodes, newNode, 1, &errorCode);
-    U_ASSERT(oldValue==0);
-    if(U_FAILURE(errorCode)) {
-        delete newNode;
-        return NULL;
-    }
-    return newNode;
-}
-
-UBool
-StringTrieBuilder::hashNode(const void *node) {
-    return ((const Node *)node)->hashCode();
-}
-
-UBool
-StringTrieBuilder::equalNodes(const void *left, const void *right) {
-    return *(const Node *)left==*(const Node *)right;
-}
-
-UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(StringTrieBuilder)
-
-UBool
-StringTrieBuilder::Node::operator==(const Node &other) const {
-    return this==&other || (typeid(*this)==typeid(other) && hash==other.hash);
-}
-
-int32_t
-StringTrieBuilder::Node::markRightEdgesFirst(int32_t edgeNumber) {
-    if(offset==0) {
-        offset=edgeNumber;
-    }
-    return edgeNumber;
-}
-
-UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(StringTrieBuilder::Node)
-
-UBool
-StringTrieBuilder::FinalValueNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!Node::operator==(other)) {
-        return FALSE;
-    }
-    const FinalValueNode &o=(const FinalValueNode &)other;
-    return value==o.value;
-}
-
-void
-StringTrieBuilder::FinalValueNode::write(StringTrieBuilder &builder) {
-    offset=builder.writeValueAndFinal(value, TRUE);
-}
-
-UBool
-StringTrieBuilder::ValueNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!Node::operator==(other)) {
-        return FALSE;
-    }
-    const ValueNode &o=(const ValueNode &)other;
-    return hasValue==o.hasValue && (!hasValue || value==o.value);
-}
-
-UBool
-StringTrieBuilder::IntermediateValueNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!ValueNode::operator==(other)) {
-        return FALSE;
-    }
-    const IntermediateValueNode &o=(const IntermediateValueNode &)other;
-    return next==o.next;
-}
-
-int32_t
-StringTrieBuilder::IntermediateValueNode::markRightEdgesFirst(int32_t edgeNumber) {
-    if(offset==0) {
-        offset=edgeNumber=next->markRightEdgesFirst(edgeNumber);
-    }
-    return edgeNumber;
-}
-
-void
-StringTrieBuilder::IntermediateValueNode::write(StringTrieBuilder &builder) {
-    next->write(builder);
-    offset=builder.writeValueAndFinal(value, FALSE);
-}
-
-UBool
-StringTrieBuilder::LinearMatchNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!ValueNode::operator==(other)) {
-        return FALSE;
-    }
-    const LinearMatchNode &o=(const LinearMatchNode &)other;
-    return length==o.length && next==o.next;
-}
-
-int32_t
-StringTrieBuilder::LinearMatchNode::markRightEdgesFirst(int32_t edgeNumber) {
-    if(offset==0) {
-        offset=edgeNumber=next->markRightEdgesFirst(edgeNumber);
-    }
-    return edgeNumber;
-}
-
-UBool
-StringTrieBuilder::ListBranchNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!Node::operator==(other)) {
-        return FALSE;
-    }
-    const ListBranchNode &o=(const ListBranchNode &)other;
-    for(int32_t i=0; i<length; ++i) {
-        if(units[i]!=o.units[i] || values[i]!=o.values[i] || equal[i]!=o.equal[i]) {
-            return FALSE;
-        }
-    }
-    return TRUE;
-}
-
-int32_t
-StringTrieBuilder::ListBranchNode::markRightEdgesFirst(int32_t edgeNumber) {
-    if(offset==0) {
-        firstEdgeNumber=edgeNumber;
-        int32_t step=0;
-        int32_t i=length;
-        do {
-            Node *edge=equal[--i];
-            if(edge!=NULL) {
-                edgeNumber=edge->markRightEdgesFirst(edgeNumber-step);
-            }
-            // For all but the rightmost edge, decrement the edge number.
-            step=1;
-        } while(i>0);
-        offset=edgeNumber;
-    }
-    return edgeNumber;
-}
-
-void
-StringTrieBuilder::ListBranchNode::write(StringTrieBuilder &builder) {
-    // Write the sub-nodes in reverse order: The jump lengths are deltas from
-    // after their own positions, so if we wrote the minUnit sub-node first,
-    // then its jump delta would be larger.
-    // Instead we write the minUnit sub-node last, for a shorter delta.
-    int32_t unitNumber=length-1;
-    Node *rightEdge=equal[unitNumber];
-    int32_t rightEdgeNumber= rightEdge==NULL ? firstEdgeNumber : rightEdge->getOffset();
-    do {
-        --unitNumber;
-        if(equal[unitNumber]!=NULL) {
-            equal[unitNumber]->writeUnlessInsideRightEdge(firstEdgeNumber, rightEdgeNumber, builder);
-        }
-    } while(unitNumber>0);
-    // The maxUnit sub-node is written as the very last one because we do
-    // not jump for it at all.
-    unitNumber=length-1;
-    if(rightEdge==NULL) {
-        builder.writeValueAndFinal(values[unitNumber], TRUE);
-    } else {
-        rightEdge->write(builder);
-    }
-    offset=builder.write(units[unitNumber]);
-    // Write the rest of this node's unit-value pairs.
-    while(--unitNumber>=0) {
-        int32_t value;
-        UBool isFinal;
-        if(equal[unitNumber]==NULL) {
-            // Write the final value for the one string ending with this unit.
-            value=values[unitNumber];
-            isFinal=TRUE;
-        } else {
-            // Write the delta to the start position of the sub-node.
-            U_ASSERT(equal[unitNumber]->getOffset()>0);
-            value=offset-equal[unitNumber]->getOffset();
-            isFinal=FALSE;
-        }
-        builder.writeValueAndFinal(value, isFinal);
-        offset=builder.write(units[unitNumber]);
-    }
-}
-
-UBool
-StringTrieBuilder::SplitBranchNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!Node::operator==(other)) {
-        return FALSE;
-    }
-    const SplitBranchNode &o=(const SplitBranchNode &)other;
-    return unit==o.unit && lessThan==o.lessThan && greaterOrEqual==o.greaterOrEqual;
-}
-
-int32_t
-StringTrieBuilder::SplitBranchNode::markRightEdgesFirst(int32_t edgeNumber) {
-    if(offset==0) {
-        firstEdgeNumber=edgeNumber;
-        edgeNumber=greaterOrEqual->markRightEdgesFirst(edgeNumber);
-        offset=edgeNumber=lessThan->markRightEdgesFirst(edgeNumber-1);
-    }
-    return edgeNumber;
-}
-
-void
-StringTrieBuilder::SplitBranchNode::write(StringTrieBuilder &builder) {
-    // Encode the less-than branch first.
-    lessThan->writeUnlessInsideRightEdge(firstEdgeNumber, greaterOrEqual->getOffset(), builder);
-    // Encode the greater-or-equal branch last because we do not jump for it at all.
-    greaterOrEqual->write(builder);
-    // Write this node.
-    U_ASSERT(lessThan->getOffset()>0);
-    builder.writeDeltaTo(lessThan->getOffset());  // less-than
-    offset=builder.write(unit);
-}
-
-UBool
-StringTrieBuilder::BranchHeadNode::operator==(const Node &other) const {
-    if(this==&other) {
-        return TRUE;
-    }
-    if(!ValueNode::operator==(other)) {
-        return FALSE;
-    }
-    const BranchHeadNode &o=(const BranchHeadNode &)other;
-    return length==o.length && next==o.next;
-}
-
-int32_t
-StringTrieBuilder::BranchHeadNode::markRightEdgesFirst(int32_t edgeNumber) {
-    if(offset==0) {
-        offset=edgeNumber=next->markRightEdgesFirst(edgeNumber);
-    }
-    return edgeNumber;
-}
-
-void
-StringTrieBuilder::BranchHeadNode::write(StringTrieBuilder &builder) {
-    next->write(builder);
-    if(length<=builder.getMinLinearMatch()) {
-        offset=builder.writeValueAndType(hasValue, value, length-1);
-    } else {
-        builder.write(length-1);
-        offset=builder.writeValueAndType(hasValue, value, 0);
-    }
-}
-
-U_NAMESPACE_END
diff --git a/src/third_party/mozjs/intl/icu/source/common/uarrsort.c b/src/third_party/mozjs/intl/icu/source/common/uarrsort.c
deleted file mode 100644
index 8bc967c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/uarrsort.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2003, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  uarrsort.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2003aug04
-*   created by: Markus W. Scherer
-*
-*   Internal function for sorting arrays.
-*/
-
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "uarrsort.h"
-
-enum {
-    MIN_QSORT=9, /* from Knuth */
-    STACK_ITEM_SIZE=200
-};
-
-/* UComparator convenience implementations ---------------------------------- */
-
-U_CAPI int32_t U_EXPORT2
-uprv_uint16Comparator(const void *context, const void *left, const void *right) {
-    return (int32_t)*(const uint16_t *)left - (int32_t)*(const uint16_t *)right;
-}
-
-U_CAPI int32_t U_EXPORT2
-uprv_int32Comparator(const void *context, const void *left, const void *right) {
-    return *(const int32_t *)left - *(const int32_t *)right;
-}
-
-U_CAPI int32_t U_EXPORT2
-uprv_uint32Comparator(const void *context, const void *left, const void *right) {
-    uint32_t l=*(const uint32_t *)left, r=*(const uint32_t *)right;
-
-    /* compare directly because (l-r) would overflow the int32_t result */
-    if(l<r) {
-        return -1;
-    } else if(l==r) {
-        return 0;
-    } else /* l>r */ {
-        return 1;
-    }
-}
-
-/* Straight insertion sort from Knuth vol. III, pg. 81 ---------------------- */
-
-static void
-doInsertionSort(char *array, int32_t start, int32_t limit, int32_t itemSize,
-                UComparator *cmp, const void *context, void *pv) {
-    int32_t i, j;
-
-    for(j=start+1; j<limit; ++j) {
-        /* v=array[j] */
-        uprv_memcpy(pv, array+j*itemSize, itemSize);
-
-        for(i=j; i>start; --i) {
-            if(/* v>=array[i-1] */ cmp(context, pv, array+(i-1)*itemSize)>=0) {
-                break;
-            }
-
-            /* array[i]=array[i-1]; */
-            uprv_memcpy(array+i*itemSize, array+(i-1)*itemSize, itemSize);
-        }
-
-        if(i!=j) {
-            /* array[i]=v; */
-            uprv_memcpy(array+i*itemSize, pv, itemSize);
-        }
-    }
-}
-
-static void
-insertionSort(char *array, int32_t length, int32_t itemSize,
-              UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
-    UAlignedMemory v[STACK_ITEM_SIZE/sizeof(UAlignedMemory)+1];
-    void *pv;
-
-    /* allocate an intermediate item variable (v) */
-    if(itemSize<=STACK_ITEM_SIZE) {
-        pv=v;
-    } else {
-        pv=uprv_malloc(itemSize);
-        if(pv==NULL) {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    }
-
-    doInsertionSort(array, 0, length, itemSize, cmp, context, pv);
-
-    if(pv!=v) {
-        uprv_free(pv);
-    }
-}
-
-/* QuickSort ---------------------------------------------------------------- */
-
-/*
- * This implementation is semi-recursive:
- * It recurses for the smaller sub-array to shorten the recursion depth,
- * and loops for the larger sub-array.
- *
- * Loosely after QuickSort algorithms in
- * Niklaus Wirth
- * Algorithmen und Datenstrukturen mit Modula-2
- * B.G. Teubner Stuttgart
- * 4. Auflage 1986
- * ISBN 3-519-02260-5
- */
-static void
-subQuickSort(char *array, int32_t start, int32_t limit, int32_t itemSize,
-             UComparator *cmp, const void *context,
-             void *px, void *pw) {
-    int32_t left, right;
-
-    /* start and left are inclusive, limit and right are exclusive */
-    do {
-        if((start+MIN_QSORT)>=limit) {
-            doInsertionSort(array, start, limit, itemSize, cmp, context, px);
-            break;
-        }
-
-        left=start;
-        right=limit;
-
-        /* x=array[middle] */
-        uprv_memcpy(px, array+((start+limit)/2)*itemSize, itemSize);
-
-        do {
-            while(/* array[left]<x */
-                  cmp(context, array+left*itemSize, px)<0
-            ) {
-                ++left;
-            }
-            while(/* x<array[right-1] */
-                  cmp(context, px, array+(right-1)*itemSize)<0
-            ) {
-                --right;
-            }
-
-            /* swap array[left] and array[right-1] via w; ++left; --right */
-            if(left<right) {
-                --right;
-
-                if(left<right) {
-                    uprv_memcpy(pw, array+left*itemSize, itemSize);
-                    uprv_memcpy(array+left*itemSize, array+right*itemSize, itemSize);
-                    uprv_memcpy(array+right*itemSize, pw, itemSize);
-                }
-
-                ++left;
-            }
-        } while(left<right);
-
-        /* sort sub-arrays */
-        if((right-start)<(limit-left)) {
-            /* sort [start..right[ */
-            if(start<(right-1)) {
-                subQuickSort(array, start, right, itemSize, cmp, context, px, pw);
-            }
-
-            /* sort [left..limit[ */
-            start=left;
-        } else {
-            /* sort [left..limit[ */
-            if(left<(limit-1)) {
-                subQuickSort(array, left, limit, itemSize, cmp, context, px, pw);
-            }
-
-            /* sort [start..right[ */
-            limit=right;
-        }
-    } while(start<(limit-1));
-}
-
-static void
-quickSort(char *array, int32_t length, int32_t itemSize,
-            UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
-    UAlignedMemory xw[(2*STACK_ITEM_SIZE)/sizeof(UAlignedMemory)+1];
-    void *p;
-
-    /* allocate two intermediate item variables (x and w) */
-    if(itemSize<=STACK_ITEM_SIZE) {
-        p=xw;
-    } else {
-        p=uprv_malloc(2*itemSize);
-        if(p==NULL) {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    }
-
-    subQuickSort(array, 0, length, itemSize,
-                 cmp, context, p, (char *)p+itemSize);
-
-    if(p!=xw) {
-        uprv_free(p);
-    }
-}
-
-/* uprv_sortArray() API ----------------------------------------------------- */
-
-/*
- * Check arguments, select an appropriate implementation,
- * cast the array to char * so that array+i*itemSize works.
- */
-U_CAPI void U_EXPORT2
-uprv_sortArray(void *array, int32_t length, int32_t itemSize,
-               UComparator *cmp, const void *context,
-               UBool sortStable, UErrorCode *pErrorCode) {
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return;
-    }
-    if((length>0 && array==NULL) || length<0 || itemSize<=0 || cmp==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if(length<=1) {
-        return;
-    } else if(length<MIN_QSORT || sortStable) {
-        insertionSort((char *)array, length, itemSize, cmp, context, pErrorCode);
-        /* could add heapSort or similar for stable sorting of longer arrays */
-    } else {
-        quickSort((char *)array, length, itemSize, cmp, context, pErrorCode);
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/uarrsort.h b/src/third_party/mozjs/intl/icu/source/common/uarrsort.h
deleted file mode 100644
index b9a580c..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/uarrsort.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2003, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  uarrsort.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2003aug04
-*   created by: Markus W. Scherer
-*
-*   Internal function for sorting arrays.
-*/
-
-#ifndef __UARRSORT_H__
-#define __UARRSORT_H__
-
-#include "unicode/utypes.h"
-
-U_CDECL_BEGIN
-/**
- * Function type for comparing two items as part of sorting an array or similar.
- * Callback function for uprv_sortArray().
- *
- * @param context Application-specific pointer, passed through by uprv_sortArray().
- * @param left    Pointer to the "left" item.
- * @param right   Pointer to the "right" item.
- * @return 32-bit signed integer comparison result:
- *                <0 if left<right
- *               ==0 if left==right
- *                >0 if left>right
- *
- * @internal
- */
-typedef int32_t U_CALLCONV
-UComparator(const void *context, const void *left, const void *right);
-U_CDECL_END
-
-/**
- * Array sorting function.
- * Uses a UComparator for comparing array items to each other, and simple
- * memory copying to move items.
- *
- * @param array      The array to be sorted.
- * @param length     The number of items in the array.
- * @param itemSize   The size in bytes of each array item.
- * @param cmp        UComparator function used to compare two items each.
- * @param context    Application-specific pointer, passed through to the UComparator.
- * @param sortStable If true, a stable sorting algorithm must be used.
- * @param pErrorCode ICU in/out UErrorCode parameter.
- *
- * @internal
- */
-U_CAPI void U_EXPORT2
-uprv_sortArray(void *array, int32_t length, int32_t itemSize,
-               UComparator *cmp, const void *context,
-               UBool sortStable, UErrorCode *pErrorCode);
-
-/**
- * Convenience UComparator implementation for uint16_t arrays.
- * @internal
- */
-U_CAPI int32_t U_EXPORT2
-uprv_uint16Comparator(const void *context, const void *left, const void *right);
-
-/**
- * Convenience UComparator implementation for int32_t arrays.
- * @internal
- */
-U_CAPI int32_t U_EXPORT2
-uprv_int32Comparator(const void *context, const void *left, const void *right);
-
-/**
- * Convenience UComparator implementation for uint32_t arrays.
- * @internal
- */
-U_CAPI int32_t U_EXPORT2
-uprv_uint32Comparator(const void *context, const void *left, const void *right);
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/uassert.h b/src/third_party/mozjs/intl/icu/source/common/uassert.h
deleted file mode 100644
index 9dc29b2..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/uassert.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2002-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File uassert.h
-*
-*  Contains U_ASSERT macro
-*
-*    By default, U_ASSERT just wraps the C library assert macro.
-*    By changing the definition here, the assert behavior for ICU can be changed
-*    without affecting other non-ICU uses of the C library assert().
-*
-******************************************************************************
-*/
-
-#ifndef U_ASSERT_H
-#define U_ASSERT_H
-/* utypes.h is included to get the proper define for uint8_t */
-#include "unicode/utypes.h"
-#if U_DEBUG
-#   include <assert.h>
-#   define U_ASSERT(exp) assert(exp)
-#else
-#   define U_ASSERT(exp)
-#endif
-#endif
-
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidi.c b/src/third_party/mozjs/intl/icu/source/common/ubidi.c
deleted file mode 100644
index 4a2db2a..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidi.c
+++ /dev/null
@@ -1,2372 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  ubidi.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999jul27
-*   created by: Markus W. Scherer, updated by Matitiahu Allouche
-*/
-
-#include "cmemory.h"
-#include "unicode/utypes.h"
-#include "unicode/ustring.h"
-#include "unicode/uchar.h"
-#include "unicode/ubidi.h"
-#include "unicode/utf16.h"
-#include "ubidi_props.h"
-#include "ubidiimp.h"
-#include "uassert.h"
-
-/*
- * General implementation notes:
- *
- * Throughout the implementation, there are comments like (W2) that refer to
- * rules of the BiDi algorithm in its version 5, in this example to the second
- * rule of the resolution of weak types.
- *
- * For handling surrogate pairs, where two UChar's form one "abstract" (or UTF-32)
- * character according to UTF-16, the second UChar gets the directional property of
- * the entire character assigned, while the first one gets a BN, a boundary
- * neutral, type, which is ignored by most of the algorithm according to
- * rule (X9) and the implementation suggestions of the BiDi algorithm.
- *
- * Later, adjustWSLevels() will set the level for each BN to that of the
- * following character (UChar), which results in surrogate pairs getting the
- * same level on each of their surrogates.
- *
- * In a UTF-8 implementation, the same thing could be done: the last byte of
- * a multi-byte sequence would get the "real" property, while all previous
- * bytes of that sequence would get BN.
- *
- * It is not possible to assign all those parts of a character the same real
- * property because this would fail in the resolution of weak types with rules
- * that look at immediately surrounding types.
- *
- * As a related topic, this implementation does not remove Boundary Neutral
- * types from the input, but ignores them wherever this is relevant.
- * For example, the loop for the resolution of the weak types reads
- * types until it finds a non-BN.
- * Also, explicit embedding codes are neither changed into BN nor removed.
- * They are only treated the same way real BNs are.
- * As stated before, adjustWSLevels() takes care of them at the end.
- * For the purpose of conformance, the levels of all these codes
- * do not matter.
- *
- * Note that this implementation never modifies the dirProps
- * after the initial setup.
- *
- *
- * In this implementation, the resolution of weak types (Wn),
- * neutrals (Nn), and the assignment of the resolved level (In)
- * are all done in one single loop, in resolveImplicitLevels().
- * Changes of dirProp values are done on the fly, without writing
- * them back to the dirProps array.
- *
- *
- * This implementation contains code that allows to bypass steps of the
- * algorithm that are not needed on the specific paragraph
- * in order to speed up the most common cases considerably,
- * like text that is entirely LTR, or RTL text without numbers.
- *
- * Most of this is done by setting a bit for each directional property
- * in a flags variable and later checking for whether there are
- * any LTR characters or any RTL characters, or both, whether
- * there are any explicit embedding codes, etc.
- *
- * If the (Xn) steps are performed, then the flags are re-evaluated,
- * because they will then not contain the embedding codes any more
- * and will be adjusted for override codes, so that subsequently
- * more bypassing may be possible than what the initial flags suggested.
- *
- * If the text is not mixed-directional, then the
- * algorithm steps for the weak type resolution are not performed,
- * and all levels are set to the paragraph level.
- *
- * If there are no explicit embedding codes, then the (Xn) steps
- * are not performed.
- *
- * If embedding levels are supplied as a parameter, then all
- * explicit embedding codes are ignored, and the (Xn) steps
- * are not performed.
- *
- * White Space types could get the level of the run they belong to,
- * and are checked with a test of (flags&MASK_EMBEDDING) to
- * consider if the paragraph direction should be considered in
- * the flags variable.
- *
- * If there are no White Space types in the paragraph, then
- * (L1) is not necessary in adjustWSLevels().
- */
-
-/* to avoid some conditional statements, use tiny constant arrays */
-static const Flags flagLR[2]={ DIRPROP_FLAG(L), DIRPROP_FLAG(R) };
-static const Flags flagE[2]={ DIRPROP_FLAG(LRE), DIRPROP_FLAG(RLE) };
-static const Flags flagO[2]={ DIRPROP_FLAG(LRO), DIRPROP_FLAG(RLO) };
-
-#define DIRPROP_FLAG_LR(level) flagLR[(level)&1]
-#define DIRPROP_FLAG_E(level) flagE[(level)&1]
-#define DIRPROP_FLAG_O(level) flagO[(level)&1]
-
-/* UBiDi object management -------------------------------------------------- */
-
-U_CAPI UBiDi * U_EXPORT2
-ubidi_open(void)
-{
-    UErrorCode errorCode=U_ZERO_ERROR;
-    return ubidi_openSized(0, 0, &errorCode);
-}
-
-U_CAPI UBiDi * U_EXPORT2
-ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode) {
-    UBiDi *pBiDi;
-
-    /* check the argument values */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return NULL;
-    } else if(maxLength<0 || maxRunCount<0) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;    /* invalid arguments */
-    }
-
-    /* allocate memory for the object */
-    pBiDi=(UBiDi *)uprv_malloc(sizeof(UBiDi));
-    if(pBiDi==NULL) {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-
-    /* reset the object, all pointers NULL, all flags FALSE, all sizes 0 */
-    uprv_memset(pBiDi, 0, sizeof(UBiDi));
-
-    /* get BiDi properties */
-    pBiDi->bdp=ubidi_getSingleton();
-
-    /* allocate memory for arrays as requested */
-    if(maxLength>0) {
-        if( !getInitialDirPropsMemory(pBiDi, maxLength) ||
-            !getInitialLevelsMemory(pBiDi, maxLength)
-        ) {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        }
-    } else {
-        pBiDi->mayAllocateText=TRUE;
-    }
-
-    if(maxRunCount>0) {
-        if(maxRunCount==1) {
-            /* use simpleRuns[] */
-            pBiDi->runsSize=sizeof(Run);
-        } else if(!getInitialRunsMemory(pBiDi, maxRunCount)) {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        }
-    } else {
-        pBiDi->mayAllocateRuns=TRUE;
-    }
-
-    if(U_SUCCESS(*pErrorCode)) {
-        return pBiDi;
-    } else {
-        ubidi_close(pBiDi);
-        return NULL;
-    }
-}
-
-/*
- * We are allowed to allocate memory if memory==NULL or
- * mayAllocate==TRUE for each array that we need.
- * We also try to grow memory as needed if we
- * allocate it.
- *
- * Assume sizeNeeded>0.
- * If *pMemory!=NULL, then assume *pSize>0.
- *
- * ### this realloc() may unnecessarily copy the old data,
- * which we know we don't need any more;
- * is this the best way to do this??
- */
-U_CFUNC UBool
-ubidi_getMemory(BidiMemoryForAllocation *bidiMem, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded) {
-    void **pMemory = (void **)bidiMem;
-    /* check for existing memory */
-    if(*pMemory==NULL) {
-        /* we need to allocate memory */
-        if(mayAllocate && (*pMemory=uprv_malloc(sizeNeeded))!=NULL) {
-            *pSize=sizeNeeded;
-            return TRUE;
-        } else {
-            return FALSE;
-        }
-    } else {
-        if(sizeNeeded<=*pSize) {
-            /* there is already enough memory */
-            return TRUE;
-        }
-        else if(!mayAllocate) {
-            /* not enough memory, and we must not allocate */
-            return FALSE;
-        } else {
-            /* we try to grow */
-            void *memory;
-            /* in most cases, we do not need the copy-old-data part of
-             * realloc, but it is needed when adding runs using getRunsMemory()
-             * in setParaRunsOnly()
-             */
-            if((memory=uprv_realloc(*pMemory, sizeNeeded))!=NULL) {
-                *pMemory=memory;
-                *pSize=sizeNeeded;
-                return TRUE;
-            } else {
-                /* we failed to grow */
-                return FALSE;
-            }
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_close(UBiDi *pBiDi) {
-    if(pBiDi!=NULL) {
-        pBiDi->pParaBiDi=NULL;          /* in case one tries to reuse this block */
-        if(pBiDi->dirPropsMemory!=NULL) {
-            uprv_free(pBiDi->dirPropsMemory);
-        }
-        if(pBiDi->levelsMemory!=NULL) {
-            uprv_free(pBiDi->levelsMemory);
-        }
-        if(pBiDi->runsMemory!=NULL) {
-            uprv_free(pBiDi->runsMemory);
-        }
-        if(pBiDi->parasMemory!=NULL) {
-            uprv_free(pBiDi->parasMemory);
-        }
-        if(pBiDi->insertPoints.points!=NULL) {
-            uprv_free(pBiDi->insertPoints.points);
-        }
-
-        uprv_free(pBiDi);
-    }
-}
-
-/* set to approximate "inverse BiDi" ---------------------------------------- */
-
-U_CAPI void U_EXPORT2
-ubidi_setInverse(UBiDi *pBiDi, UBool isInverse) {
-    if(pBiDi!=NULL) {
-        pBiDi->isInverse=isInverse;
-        pBiDi->reorderingMode = isInverse ? UBIDI_REORDER_INVERSE_NUMBERS_AS_L
-                                          : UBIDI_REORDER_DEFAULT;
-    }
-}
-
-U_CAPI UBool U_EXPORT2
-ubidi_isInverse(UBiDi *pBiDi) {
-    if(pBiDi!=NULL) {
-        return pBiDi->isInverse;
-    } else {
-        return FALSE;
-    }
-}
-
-/* FOOD FOR THOUGHT: currently the reordering modes are a mixture of
- * algorithm for direct BiDi, algorithm for inverse BiDi and the bizarre
- * concept of RUNS_ONLY which is a double operation.
- * It could be advantageous to divide this into 3 concepts:
- * a) Operation: direct / inverse / RUNS_ONLY
- * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_R
- * c) Inverse algorithm: default / INVERSE_LIKE_DIRECT / NUMBERS_SPECIAL
- * This would allow combinations not possible today like RUNS_ONLY with
- * NUMBERS_SPECIAL.
- * Also allow to set INSERT_MARKS for the direct step of RUNS_ONLY and
- * REMOVE_CONTROLS for the inverse step.
- * Not all combinations would be supported, and probably not all do make sense.
- * This would need to document which ones are supported and what are the
- * fallbacks for unsupported combinations.
- */
-U_CAPI void U_EXPORT2
-ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) {
-    if ((pBiDi!=NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT)
-                        && (reorderingMode < UBIDI_REORDER_COUNT)) {
-        pBiDi->reorderingMode = reorderingMode;
-        pBiDi->isInverse = (UBool)(reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L);
-    }
-}
-
-U_CAPI UBiDiReorderingMode U_EXPORT2
-ubidi_getReorderingMode(UBiDi *pBiDi) {
-    if (pBiDi!=NULL) {
-        return pBiDi->reorderingMode;
-    } else {
-        return UBIDI_REORDER_DEFAULT;
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions) {
-    if (reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
-        reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS;
-    }
-    if (pBiDi!=NULL) {
-        pBiDi->reorderingOptions=reorderingOptions;
-    }
-}
-
-U_CAPI uint32_t U_EXPORT2
-ubidi_getReorderingOptions(UBiDi *pBiDi) {
-    if (pBiDi!=NULL) {
-        return pBiDi->reorderingOptions;
-    } else {
-        return 0;
-    }
-}
-
-U_CAPI UBiDiDirection U_EXPORT2
-ubidi_getBaseDirection(const UChar *text,
-int32_t length){
-
-    int32_t i;
-    UChar32 uchar;
-    UCharDirection dir;
-
-    if( text==NULL || length<-1 ){
-        return UBIDI_NEUTRAL;
-    }
-
-    if(length==-1) {
-        length=u_strlen(text);
-    }
-
-    for( i = 0 ; i < length; ) {
-        /* i is incremented by U16_NEXT */
-        U16_NEXT(text, i, length, uchar);
-        dir = u_charDirection(uchar);
-        if( dir == U_LEFT_TO_RIGHT )
-                return UBIDI_LTR;
-        if( dir == U_RIGHT_TO_LEFT || dir ==U_RIGHT_TO_LEFT_ARABIC )
-                return UBIDI_RTL;
-    }
-    return UBIDI_NEUTRAL;
-}
-
-/* perform (P2)..(P3) ------------------------------------------------------- */
-
-static DirProp
-firstL_R_AL(UBiDi *pBiDi) {
-    /* return first strong char after the last B in prologue if any */
-    const UChar *text=pBiDi->prologue;
-    int32_t length=pBiDi->proLength;
-    int32_t i;
-    UChar32 uchar;
-    DirProp dirProp, result=ON;
-    for(i=0; i<length; ) {
-        /* i is incremented by U16_NEXT */
-        U16_NEXT(text, i, length, uchar);
-        dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar);
-        if(result==ON) {
-            if(dirProp==L || dirProp==R || dirProp==AL) {
-                result=dirProp;
-            }
-        } else {
-            if(dirProp==B) {
-                result=ON;
-            }
-        }
-    }
-    return result;
-}
-
-/*
- * Get the directional properties for the text,
- * calculate the flags bit-set, and
- * determine the paragraph level if necessary.
- */
-static void
-getDirProps(UBiDi *pBiDi) {
-    const UChar *text=pBiDi->text;
-    DirProp *dirProps=pBiDi->dirPropsMemory;    /* pBiDi->dirProps is const */
-
-    int32_t i=0, i1, length=pBiDi->originalLength;
-    Flags flags=0;      /* collect all directionalities in the text */
-    UChar32 uchar;
-    DirProp dirProp=0, paraDirDefault=0;/* initialize to avoid compiler warnings */
-    UBool isDefaultLevel=IS_DEFAULT_LEVEL(pBiDi->paraLevel);
-    /* for inverse BiDi, the default para level is set to RTL if there is a
-       strong R or AL character at either end of the text                           */
-    UBool isDefaultLevelInverse=isDefaultLevel && (UBool)
-            (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT ||
-             pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL);
-    int32_t lastArabicPos=-1;
-    int32_t controlCount=0;
-    UBool removeBiDiControls = (UBool)(pBiDi->reorderingOptions &
-                                       UBIDI_OPTION_REMOVE_CONTROLS);
-
-    typedef enum {
-         NOT_CONTEXTUAL,                /* 0: not contextual paraLevel */
-         LOOKING_FOR_STRONG,            /* 1: looking for first strong char */
-         FOUND_STRONG_CHAR              /* 2: found first strong char       */
-    } State;
-    State state;
-    int32_t paraStart=0;                /* index of first char in paragraph */
-    DirProp paraDir;                    /* == CONTEXT_RTL within paragraphs
-                                           starting with strong R char      */
-    DirProp lastStrongDir=0;            /* for default level & inverse BiDi */
-    int32_t lastStrongLTR=0;            /* for STREAMING option             */
-
-    if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) {
-        pBiDi->length=0;
-        lastStrongLTR=0;
-    }
-    if(isDefaultLevel) {
-        DirProp lastStrong;
-        paraDirDefault=pBiDi->paraLevel&1 ? CONTEXT_RTL : 0;
-        if(pBiDi->proLength>0 &&
-           (lastStrong=firstL_R_AL(pBiDi))!=ON) {
-            paraDir=(lastStrong==L) ? 0 : CONTEXT_RTL;
-            state=FOUND_STRONG_CHAR;
-        } else {
-            paraDir=paraDirDefault;
-            state=LOOKING_FOR_STRONG;
-        }
-        lastStrongDir=paraDir;
-    } else {
-        state=NOT_CONTEXTUAL;
-        paraDir=0;
-    }
-    /* count paragraphs and determine the paragraph level (P2..P3) */
-    /*
-     * see comment in ubidi.h:
-     * the DEFAULT_XXX values are designed so that
-     * their bit 0 alone yields the intended default
-     */
-    for( /* i=0 above */ ; i<length; ) {
-        /* i is incremented by U16_NEXT */
-        U16_NEXT(text, i, length, uchar);
-        flags|=DIRPROP_FLAG(dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar));
-        dirProps[i-1]=dirProp|paraDir;
-        if(uchar>0xffff) {  /* set the lead surrogate's property to BN */
-            flags|=DIRPROP_FLAG(BN);
-            dirProps[i-2]=(DirProp)(BN|paraDir);
-        }
-        if(state==LOOKING_FOR_STRONG) {
-            if(dirProp==L) {
-                state=FOUND_STRONG_CHAR;
-                if(paraDir) {
-                    paraDir=0;
-                    for(i1=paraStart; i1<i; i1++) {
-                        dirProps[i1]&=~CONTEXT_RTL;
-                    }
-                }
-                continue;
-            }
-            if(dirProp==R || dirProp==AL) {
-                state=FOUND_STRONG_CHAR;
-                if(paraDir==0) {
-                    paraDir=CONTEXT_RTL;
-                    for(i1=paraStart; i1<i; i1++) {
-                        dirProps[i1]|=CONTEXT_RTL;
-                    }
-                }
-                continue;
-            }
-        }
-        if(dirProp==L) {
-            lastStrongDir=0;
-            lastStrongLTR=i;            /* i is index to next character */
-        }
-        else if(dirProp==R) {
-            lastStrongDir=CONTEXT_RTL;
-        }
-        else if(dirProp==AL) {
-            lastStrongDir=CONTEXT_RTL;
-            lastArabicPos=i-1;
-        }
-        else if(dirProp==B) {
-            if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) {
-                pBiDi->length=i;        /* i is index to next character */
-            }
-            if(isDefaultLevelInverse && (lastStrongDir==CONTEXT_RTL) &&(paraDir!=lastStrongDir)) {
-                for( ; paraStart<i; paraStart++) {
-                    dirProps[paraStart]|=CONTEXT_RTL;
-                }
-            }
-            if(i<length) {              /* B not last char in text */
-                if(!((uchar==CR) && (text[i]==LF))) {
-                    pBiDi->paraCount++;
-                }
-                if(isDefaultLevel) {
-                    state=LOOKING_FOR_STRONG;
-                    paraStart=i;        /* i is index to next character */
-                    paraDir=paraDirDefault;
-                    lastStrongDir=paraDirDefault;
-                }
-            }
-        }
-        if(removeBiDiControls && IS_BIDI_CONTROL_CHAR(uchar)) {
-            controlCount++;
-        }
-    }
-    if(isDefaultLevelInverse && (lastStrongDir==CONTEXT_RTL) &&(paraDir!=lastStrongDir)) {
-        for(i1=paraStart; i1<length; i1++) {
-            dirProps[i1]|=CONTEXT_RTL;
-        }
-    }
-    if(isDefaultLevel) {
-        pBiDi->paraLevel=GET_PARALEVEL(pBiDi, 0);
-    }
-    if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) {
-        if((lastStrongLTR>pBiDi->length) &&
-           (GET_PARALEVEL(pBiDi, lastStrongLTR)==0)) {
-            pBiDi->length = lastStrongLTR;
-        }
-        if(pBiDi->length<pBiDi->originalLength) {
-            pBiDi->paraCount--;
-        }
-    }
-    /* The following line does nothing new for contextual paraLevel, but is
-       needed for absolute paraLevel.                               */
-    flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel);
-
-    if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) {
-        flags|=DIRPROP_FLAG(L);
-    }
-
-    pBiDi->controlCount = controlCount;
-    pBiDi->flags=flags;
-    pBiDi->lastArabicPos=lastArabicPos;
-}
-
-/* perform (X1)..(X9) ------------------------------------------------------- */
-
-/* determine if the text is mixed-directional or single-directional */
-static UBiDiDirection
-directionFromFlags(UBiDi *pBiDi) {
-    Flags flags=pBiDi->flags;
-    /* if the text contains AN and neutrals, then some neutrals may become RTL */
-    if(!(flags&MASK_RTL || ((flags&DIRPROP_FLAG(AN)) && (flags&MASK_POSSIBLE_N)))) {
-        return UBIDI_LTR;
-    } else if(!(flags&MASK_LTR)) {
-        return UBIDI_RTL;
-    } else {
-        return UBIDI_MIXED;
-    }
-}
-
-/*
- * Resolve the explicit levels as specified by explicit embedding codes.
- * Recalculate the flags to have them reflect the real properties
- * after taking the explicit embeddings into account.
- *
- * The BiDi algorithm is designed to result in the same behavior whether embedding
- * levels are externally specified (from "styled text", supposedly the preferred
- * method) or set by explicit embedding codes (LRx, RLx, PDF) in the plain text.
- * That is why (X9) instructs to remove all explicit codes (and BN).
- * However, in a real implementation, this removal of these codes and their index
- * positions in the plain text is undesirable since it would result in
- * reallocated, reindexed text.
- * Instead, this implementation leaves the codes in there and just ignores them
- * in the subsequent processing.
- * In order to get the same reordering behavior, positions with a BN or an
- * explicit embedding code just get the same level assigned as the last "real"
- * character.
- *
- * Some implementations, not this one, then overwrite some of these
- * directionality properties at "real" same-level-run boundaries by
- * L or R codes so that the resolution of weak types can be performed on the
- * entire paragraph at once instead of having to parse it once more and
- * perform that resolution on same-level-runs.
- * This limits the scope of the implicit rules in effectively
- * the same way as the run limits.
- *
- * Instead, this implementation does not modify these codes.
- * On one hand, the paragraph has to be scanned for same-level-runs, but
- * on the other hand, this saves another loop to reset these codes,
- * or saves making and modifying a copy of dirProps[].
- *
- *
- * Note that (Pn) and (Xn) changed significantly from version 4 of the BiDi algorithm.
- *
- *
- * Handling the stack of explicit levels (Xn):
- *
- * With the BiDi stack of explicit levels,
- * as pushed with each LRE, RLE, LRO, and RLO and popped with each PDF,
- * the explicit level must never exceed UBIDI_MAX_EXPLICIT_LEVEL==61.
- *
- * In order to have a correct push-pop semantics even in the case of overflows,
- * there are two overflow counters:
- * - countOver60 is incremented with each LRx at level 60
- * - from level 60, one RLx increases the level to 61
- * - countOver61 is incremented with each LRx and RLx at level 61
- *
- * Popping levels with PDF must work in the opposite order so that level 61
- * is correct at the correct point. Underflows (too many PDFs) must be checked.
- *
- * This implementation assumes that UBIDI_MAX_EXPLICIT_LEVEL is odd.
- */
-static UBiDiDirection
-resolveExplicitLevels(UBiDi *pBiDi) {
-    const DirProp *dirProps=pBiDi->dirProps;
-    UBiDiLevel *levels=pBiDi->levels;
-    const UChar *text=pBiDi->text;
-
-    int32_t i=0, length=pBiDi->length;
-    Flags flags=pBiDi->flags;       /* collect all directionalities in the text */
-    DirProp dirProp;
-    UBiDiLevel level=GET_PARALEVEL(pBiDi, 0);
-
-    UBiDiDirection direction;
-    int32_t paraIndex=0;
-
-    /* determine if the text is mixed-directional or single-directional */
-    direction=directionFromFlags(pBiDi);
-
-    /* we may not need to resolve any explicit levels, but for multiple
-       paragraphs we want to loop on all chars to set the para boundaries */
-    if((direction!=UBIDI_MIXED) && (pBiDi->paraCount==1)) {
-        /* not mixed directionality: levels don't matter - trailingWSStart will be 0 */
-    } else if((pBiDi->paraCount==1) &&
-              (!(flags&MASK_EXPLICIT) ||
-               (pBiDi->reorderingMode > UBIDI_REORDER_LAST_LOGICAL_TO_VISUAL))) {
-        /* mixed, but all characters are at the same embedding level */
-        /* or we are in "inverse BiDi" */
-        /* and we don't have contextual multiple paragraphs with some B char */
-        /* set all levels to the paragraph level */
-        for(i=0; i<length; ++i) {
-            levels[i]=level;
-        }
-    } else {
-        /* continue to perform (Xn) */
-
-        /* (X1) level is set for all codes, embeddingLevel keeps track of the push/pop operations */
-        /* both variables may carry the UBIDI_LEVEL_OVERRIDE flag to indicate the override status */
-        UBiDiLevel embeddingLevel=level, newLevel, stackTop=0;
-
-        UBiDiLevel stack[UBIDI_MAX_EXPLICIT_LEVEL];        /* we never push anything >=UBIDI_MAX_EXPLICIT_LEVEL */
-        uint32_t countOver60=0, countOver61=0;  /* count overflows of explicit levels */
-
-        /* recalculate the flags */
-        flags=0;
-
-        for(i=0; i<length; ++i) {
-            dirProp=NO_CONTEXT_RTL(dirProps[i]);
-            switch(dirProp) {
-            case LRE:
-            case LRO:
-                /* (X3, X5) */
-                newLevel=(UBiDiLevel)((embeddingLevel+2)&~(UBIDI_LEVEL_OVERRIDE|1)); /* least greater even level */
-                if(newLevel<=UBIDI_MAX_EXPLICIT_LEVEL) {
-                    stack[stackTop]=embeddingLevel;
-                    ++stackTop;
-                    embeddingLevel=newLevel;
-                    if(dirProp==LRO) {
-                        embeddingLevel|=UBIDI_LEVEL_OVERRIDE;
-                    }
-                    /* we don't need to set UBIDI_LEVEL_OVERRIDE off for LRE
-                       since this has already been done for newLevel which is
-                       the source for embeddingLevel.
-                     */
-                } else if((embeddingLevel&~UBIDI_LEVEL_OVERRIDE)==UBIDI_MAX_EXPLICIT_LEVEL) {
-                    ++countOver61;
-                } else /* (embeddingLevel&~UBIDI_LEVEL_OVERRIDE)==UBIDI_MAX_EXPLICIT_LEVEL-1 */ {
-                    ++countOver60;
-                }
-                flags|=DIRPROP_FLAG(BN);
-                break;
-            case RLE:
-            case RLO:
-                /* (X2, X4) */
-                newLevel=(UBiDiLevel)(((embeddingLevel&~UBIDI_LEVEL_OVERRIDE)+1)|1); /* least greater odd level */
-                if(newLevel<=UBIDI_MAX_EXPLICIT_LEVEL) {
-                    stack[stackTop]=embeddingLevel;
-                    ++stackTop;
-                    embeddingLevel=newLevel;
-                    if(dirProp==RLO) {
-                        embeddingLevel|=UBIDI_LEVEL_OVERRIDE;
-                    }
-                    /* we don't need to set UBIDI_LEVEL_OVERRIDE off for RLE
-                       since this has already been done for newLevel which is
-                       the source for embeddingLevel.
-                     */
-                } else {
-                    ++countOver61;
-                }
-                flags|=DIRPROP_FLAG(BN);
-                break;
-            case PDF:
-                /* (X7) */
-                /* handle all the overflow cases first */
-                if(countOver61>0) {
-                    --countOver61;
-                } else if(countOver60>0 && (embeddingLevel&~UBIDI_LEVEL_OVERRIDE)!=UBIDI_MAX_EXPLICIT_LEVEL) {
-                    /* handle LRx overflows from level 60 */
-                    --countOver60;
-                } else if(stackTop>0) {
-                    /* this is the pop operation; it also pops level 61 while countOver60>0 */
-                    --stackTop;
-                    embeddingLevel=stack[stackTop];
-                /* } else { (underflow) */
-                }
-                flags|=DIRPROP_FLAG(BN);
-                break;
-            case B:
-                stackTop=0;
-                countOver60=countOver61=0;
-                level=GET_PARALEVEL(pBiDi, i);
-                if((i+1)<length) {
-                    embeddingLevel=GET_PARALEVEL(pBiDi, i+1);
-                    if(!((text[i]==CR) && (text[i+1]==LF))) {
-                        pBiDi->paras[paraIndex++]=i+1;
-                    }
-                }
-                flags|=DIRPROP_FLAG(B);
-                break;
-            case BN:
-                /* BN, LRE, RLE, and PDF are supposed to be removed (X9) */
-                /* they will get their levels set correctly in adjustWSLevels() */
-                flags|=DIRPROP_FLAG(BN);
-                break;
-            default:
-                /* all other types get the "real" level */
-                if(level!=embeddingLevel) {
-                    level=embeddingLevel;
-                    if(level&UBIDI_LEVEL_OVERRIDE) {
-                        flags|=DIRPROP_FLAG_O(level)|DIRPROP_FLAG_MULTI_RUNS;
-                    } else {
-                        flags|=DIRPROP_FLAG_E(level)|DIRPROP_FLAG_MULTI_RUNS;
-                    }
-                }
-                if(!(level&UBIDI_LEVEL_OVERRIDE)) {
-                    flags|=DIRPROP_FLAG(dirProp);
-                }
-                break;
-            }
-
-            /*
-             * We need to set reasonable levels even on BN codes and
-             * explicit codes because we will later look at same-level runs (X10).
-             */
-            levels[i]=level;
-        }
-        if(flags&MASK_EMBEDDING) {
-            flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel);
-        }
-        if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) {
-            flags|=DIRPROP_FLAG(L);
-        }
-
-        /* subsequently, ignore the explicit codes and BN (X9) */
-
-        /* again, determine if the text is mixed-directional or single-directional */
-        pBiDi->flags=flags;
-        direction=directionFromFlags(pBiDi);
-    }
-
-    return direction;
-}
-
-/*
- * Use a pre-specified embedding levels array:
- *
- * Adjust the directional properties for overrides (->LEVEL_OVERRIDE),
- * ignore all explicit codes (X9),
- * and check all the preset levels.
- *
- * Recalculate the flags to have them reflect the real properties
- * after taking the explicit embeddings into account.
- */
-static UBiDiDirection
-checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
-    const DirProp *dirProps=pBiDi->dirProps;
-    DirProp dirProp;
-    UBiDiLevel *levels=pBiDi->levels;
-    const UChar *text=pBiDi->text;
-
-    int32_t i, length=pBiDi->length;
-    Flags flags=0;  /* collect all directionalities in the text */
-    UBiDiLevel level;
-    uint32_t paraIndex=0;
-
-    for(i=0; i<length; ++i) {
-        level=levels[i];
-        dirProp=NO_CONTEXT_RTL(dirProps[i]);
-        if(level&UBIDI_LEVEL_OVERRIDE) {
-            /* keep the override flag in levels[i] but adjust the flags */
-            level&=~UBIDI_LEVEL_OVERRIDE;     /* make the range check below simpler */
-            flags|=DIRPROP_FLAG_O(level);
-        } else {
-            /* set the flags */
-            flags|=DIRPROP_FLAG_E(level)|DIRPROP_FLAG(dirProp);
-        }
-        if((level<GET_PARALEVEL(pBiDi, i) &&
-            !((0==level)&&(dirProp==B))) ||
-           (UBIDI_MAX_EXPLICIT_LEVEL<level)) {
-            /* level out of bounds */
-            *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-            return UBIDI_LTR;
-        }
-        if((dirProp==B) && ((i+1)<length)) {
-            if(!((text[i]==CR) && (text[i+1]==LF))) {
-                pBiDi->paras[paraIndex++]=i+1;
-            }
-        }
-    }
-    if(flags&MASK_EMBEDDING) {
-        flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel);
-    }
-
-    /* determine if the text is mixed-directional or single-directional */
-    pBiDi->flags=flags;
-    return directionFromFlags(pBiDi);
-}
-
-/******************************************************************
- The Properties state machine table
-*******************************************************************
-
- All table cells are 8 bits:
-      bits 0..4:  next state
-      bits 5..7:  action to perform (if > 0)
-
- Cells may be of format "n" where n represents the next state
- (except for the rightmost column).
- Cells may also be of format "s(x,y)" where x represents an action
- to perform and y represents the next state.
-
-*******************************************************************
- Definitions and type for properties state table
-*******************************************************************
-*/
-#define IMPTABPROPS_COLUMNS 14
-#define IMPTABPROPS_RES (IMPTABPROPS_COLUMNS - 1)
-#define GET_STATEPROPS(cell) ((cell)&0x1f)
-#define GET_ACTIONPROPS(cell) ((cell)>>5)
-#define s(action, newState) ((uint8_t)(newState+(action<<5)))
-
-static const uint8_t groupProp[] =          /* dirProp regrouped */
-{
-/*  L   R   EN  ES  ET  AN  CS  B   S   WS  ON  LRE LRO AL  RLE RLO PDF NSM BN  */
-    0,  1,  2,  7,  8,  3,  9,  6,  5,  4,  4,  10, 10, 12, 10, 10, 10, 11, 10
-};
-enum { DirProp_L=0, DirProp_R=1, DirProp_EN=2, DirProp_AN=3, DirProp_ON=4, DirProp_S=5, DirProp_B=6 }; /* reduced dirProp */
-
-/******************************************************************
-
-      PROPERTIES  STATE  TABLE
-
- In table impTabProps,
-      - the ON column regroups ON and WS
-      - the BN column regroups BN, LRE, RLE, LRO, RLO, PDF
-      - the Res column is the reduced property assigned to a run
-
- Action 1: process current run1, init new run1
-        2: init new run2
-        3: process run1, process run2, init new run1
-        4: process run1, set run1=run2, init new run2
-
- Notes:
-  1) This table is used in resolveImplicitLevels().
-  2) This table triggers actions when there is a change in the Bidi
-     property of incoming characters (action 1).
-  3) Most such property sequences are processed immediately (in
-     fact, passed to processPropertySeq().
-  4) However, numbers are assembled as one sequence. This means
-     that undefined situations (like CS following digits, until
-     it is known if the next char will be a digit) are held until
-     following chars define them.
-     Example: digits followed by CS, then comes another CS or ON;
-              the digits will be processed, then the CS assigned
-              as the start of an ON sequence (action 3).
-  5) There are cases where more than one sequence must be
-     processed, for instance digits followed by CS followed by L:
-     the digits must be processed as one sequence, and the CS
-     must be processed as an ON sequence, all this before starting
-     assembling chars for the opening L sequence.
-
-
-*/
-static const uint8_t impTabProps[][IMPTABPROPS_COLUMNS] =
-{
-/*                        L ,     R ,    EN ,    AN ,    ON ,     S ,     B ,    ES ,    ET ,    CS ,    BN ,   NSM ,    AL ,  Res */
-/* 0 Init        */ {     1 ,     2 ,     4 ,     5 ,     7 ,    15 ,    17 ,     7 ,     9 ,     7 ,     0 ,     7 ,     3 ,  DirProp_ON },
-/* 1 L           */ {     1 , s(1,2), s(1,4), s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), s(1,9), s(1,7),     1 ,     1 , s(1,3),   DirProp_L },
-/* 2 R           */ { s(1,1),     2 , s(1,4), s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), s(1,9), s(1,7),     2 ,     2 , s(1,3),   DirProp_R },
-/* 3 AL          */ { s(1,1), s(1,2), s(1,6), s(1,6), s(1,8),s(1,16),s(1,17), s(1,8), s(1,8), s(1,8),     3 ,     3 ,     3 ,   DirProp_R },
-/* 4 EN          */ { s(1,1), s(1,2),     4 , s(1,5), s(1,7),s(1,15),s(1,17),s(2,10),    11 ,s(2,10),     4 ,     4 , s(1,3),  DirProp_EN },
-/* 5 AN          */ { s(1,1), s(1,2), s(1,4),     5 , s(1,7),s(1,15),s(1,17), s(1,7), s(1,9),s(2,12),     5 ,     5 , s(1,3),  DirProp_AN },
-/* 6 AL:EN/AN    */ { s(1,1), s(1,2),     6 ,     6 , s(1,8),s(1,16),s(1,17), s(1,8), s(1,8),s(2,13),     6 ,     6 , s(1,3),  DirProp_AN },
-/* 7 ON          */ { s(1,1), s(1,2), s(1,4), s(1,5),     7 ,s(1,15),s(1,17),     7 ,s(2,14),     7 ,     7 ,     7 , s(1,3),  DirProp_ON },
-/* 8 AL:ON       */ { s(1,1), s(1,2), s(1,6), s(1,6),     8 ,s(1,16),s(1,17),     8 ,     8 ,     8 ,     8 ,     8 , s(1,3),  DirProp_ON },
-/* 9 ET          */ { s(1,1), s(1,2),     4 , s(1,5),     7 ,s(1,15),s(1,17),     7 ,     9 ,     7 ,     9 ,     9 , s(1,3),  DirProp_ON },
-/*10 EN+ES/CS    */ { s(3,1), s(3,2),     4 , s(3,5), s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7),    10 , s(4,7), s(3,3),  DirProp_EN },
-/*11 EN+ET       */ { s(1,1), s(1,2),     4 , s(1,5), s(1,7),s(1,15),s(1,17), s(1,7),    11 , s(1,7),    11 ,    11 , s(1,3),  DirProp_EN },
-/*12 AN+CS       */ { s(3,1), s(3,2), s(3,4),     5 , s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7),    12 , s(4,7), s(3,3),  DirProp_AN },
-/*13 AL:EN/AN+CS */ { s(3,1), s(3,2),     6 ,     6 , s(4,8),s(3,16),s(3,17), s(4,8), s(4,8), s(4,8),    13 , s(4,8), s(3,3),  DirProp_AN },
-/*14 ON+ET       */ { s(1,1), s(1,2), s(4,4), s(1,5),     7 ,s(1,15),s(1,17),     7 ,    14 ,     7 ,    14 ,    14 , s(1,3),  DirProp_ON },
-/*15 S           */ { s(1,1), s(1,2), s(1,4), s(1,5), s(1,7),    15 ,s(1,17), s(1,7), s(1,9), s(1,7),    15 , s(1,7), s(1,3),   DirProp_S },
-/*16 AL:S        */ { s(1,1), s(1,2), s(1,6), s(1,6), s(1,8),    16 ,s(1,17), s(1,8), s(1,8), s(1,8),    16 , s(1,8), s(1,3),   DirProp_S },
-/*17 B           */ { s(1,1), s(1,2), s(1,4), s(1,5), s(1,7),s(1,15),    17 , s(1,7), s(1,9), s(1,7),    17 , s(1,7), s(1,3),   DirProp_B }
-};
-
-/*  we must undef macro s because the levels table have a different
- *  structure (4 bits for action and 4 bits for next state.
- */
-#undef s
-
-/******************************************************************
- The levels state machine tables
-*******************************************************************
-
- All table cells are 8 bits:
-      bits 0..3:  next state
-      bits 4..7:  action to perform (if > 0)
-
- Cells may be of format "n" where n represents the next state
- (except for the rightmost column).
- Cells may also be of format "s(x,y)" where x represents an action
- to perform and y represents the next state.
-
- This format limits each table to 16 states each and to 15 actions.
-
-*******************************************************************
- Definitions and type for levels state tables
-*******************************************************************
-*/
-#define IMPTABLEVELS_COLUMNS (DirProp_B + 2)
-#define IMPTABLEVELS_RES (IMPTABLEVELS_COLUMNS - 1)
-#define GET_STATE(cell) ((cell)&0x0f)
-#define GET_ACTION(cell) ((cell)>>4)
-#define s(action, newState) ((uint8_t)(newState+(action<<4)))
-
-typedef uint8_t ImpTab[][IMPTABLEVELS_COLUMNS];
-typedef uint8_t ImpAct[];
-
-/* FOOD FOR THOUGHT: each ImpTab should have its associated ImpAct,
- * instead of having a pair of ImpTab and a pair of ImpAct.
- */
-typedef struct ImpTabPair {
-    const void * pImpTab[2];
-    const void * pImpAct[2];
-} ImpTabPair;
-
-/******************************************************************
-
-      LEVELS  STATE  TABLES
-
- In all levels state tables,
-      - state 0 is the initial state
-      - the Res column is the increment to add to the text level
-        for this property sequence.
-
- The impAct arrays for each table of a pair map the local action
- numbers of the table to the total list of actions. For instance,
- action 2 in a given table corresponds to the action number which
- appears in entry [2] of the impAct array for that table.
- The first entry of all impAct arrays must be 0.
-
- Action 1: init conditional sequence
-        2: prepend conditional sequence to current sequence
-        3: set ON sequence to new level - 1
-        4: init EN/AN/ON sequence
-        5: fix EN/AN/ON sequence followed by R
-        6: set previous level sequence to level 2
-
- Notes:
-  1) These tables are used in processPropertySeq(). The input
-     is property sequences as determined by resolveImplicitLevels.
-  2) Most such property sequences are processed immediately
-     (levels are assigned).
-  3) However, some sequences cannot be assigned a final level till
-     one or more following sequences are received. For instance,
-     ON following an R sequence within an even-level paragraph.
-     If the following sequence is R, the ON sequence will be
-     assigned basic run level+1, and so will the R sequence.
-  4) S is generally handled like ON, since its level will be fixed
-     to paragraph level in adjustWSLevels().
-
-*/
-
-static const ImpTab impTabL_DEFAULT =   /* Even paragraph level */
-/*  In this table, conditional sequences receive the higher possible level
-    until proven otherwise.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     0 ,     1 ,     0 ,     2 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : R          */ {     0 ,     1 ,     3 ,     3 , s(1,4), s(1,4),     0 ,  1 },
-/* 2 : AN         */ {     0 ,     1 ,     0 ,     2 , s(1,5), s(1,5),     0 ,  2 },
-/* 3 : R+EN/AN    */ {     0 ,     1 ,     3 ,     3 , s(1,4), s(1,4),     0 ,  2 },
-/* 4 : R+ON       */ { s(2,0),     1 ,     3 ,     3 ,     4 ,     4 , s(2,0),  1 },
-/* 5 : AN+ON      */ { s(2,0),     1 , s(2,0),     2 ,     5 ,     5 , s(2,0),  1 }
-};
-static const ImpTab impTabR_DEFAULT =   /* Odd  paragraph level */
-/*  In this table, conditional sequences receive the lower possible level
-    until proven otherwise.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     1 ,     0 ,     2 ,     2 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : L          */ {     1 ,     0 ,     1 ,     3 , s(1,4), s(1,4),     0 ,  1 },
-/* 2 : EN/AN      */ {     1 ,     0 ,     2 ,     2 ,     0 ,     0 ,     0 ,  1 },
-/* 3 : L+AN       */ {     1 ,     0 ,     1 ,     3 ,     5 ,     5 ,     0 ,  1 },
-/* 4 : L+ON       */ { s(2,1),     0 , s(2,1),     3 ,     4 ,     4 ,     0 ,  0 },
-/* 5 : L+AN+ON    */ {     1 ,     0 ,     1 ,     3 ,     5 ,     5 ,     0 ,  0 }
-};
-static const ImpAct impAct0 = {0,1,2,3,4,5,6};
-static const ImpTabPair impTab_DEFAULT = {{&impTabL_DEFAULT,
-                                           &impTabR_DEFAULT},
-                                          {&impAct0, &impAct0}};
-
-static const ImpTab impTabL_NUMBERS_SPECIAL =   /* Even paragraph level */
-/*  In this table, conditional sequences receive the higher possible level
-    until proven otherwise.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     0 ,     2 ,    1 ,      1 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : L+EN/AN    */ {     0 ,     2 ,    1 ,      1 ,     0 ,     0 ,     0 ,  2 },
-/* 2 : R          */ {     0 ,     2 ,    4 ,      4 , s(1,3),     0 ,     0 ,  1 },
-/* 3 : R+ON       */ { s(2,0),     2 ,    4 ,      4 ,     3 ,     3 , s(2,0),  1 },
-/* 4 : R+EN/AN    */ {     0 ,     2 ,    4 ,      4 , s(1,3), s(1,3),     0 ,  2 }
-  };
-static const ImpTabPair impTab_NUMBERS_SPECIAL = {{&impTabL_NUMBERS_SPECIAL,
-                                                   &impTabR_DEFAULT},
-                                                  {&impAct0, &impAct0}};
-
-static const ImpTab impTabL_GROUP_NUMBERS_WITH_R =
-/*  In this table, EN/AN+ON sequences receive levels as if associated with R
-    until proven that there is L or sor/eor on both sides. AN is handled like EN.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 init         */ {     0 ,     3 , s(1,1), s(1,1),     0 ,     0 ,     0 ,  0 },
-/* 1 EN/AN        */ { s(2,0),     3 ,     1 ,     1 ,     2 , s(2,0), s(2,0),  2 },
-/* 2 EN/AN+ON     */ { s(2,0),     3 ,     1 ,     1 ,     2 , s(2,0), s(2,0),  1 },
-/* 3 R            */ {     0 ,     3 ,     5 ,     5 , s(1,4),     0 ,     0 ,  1 },
-/* 4 R+ON         */ { s(2,0),     3 ,     5 ,     5 ,     4 , s(2,0), s(2,0),  1 },
-/* 5 R+EN/AN      */ {     0 ,     3 ,     5 ,     5 , s(1,4),     0 ,     0 ,  2 }
-};
-static const ImpTab impTabR_GROUP_NUMBERS_WITH_R =
-/*  In this table, EN/AN+ON sequences receive levels as if associated with R
-    until proven that there is L on both sides. AN is handled like EN.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 init         */ {     2 ,     0 ,     1 ,     1 ,     0 ,     0 ,     0 ,  0 },
-/* 1 EN/AN        */ {     2 ,     0 ,     1 ,     1 ,     0 ,     0 ,     0 ,  1 },
-/* 2 L            */ {     2 ,     0 , s(1,4), s(1,4), s(1,3),     0 ,     0 ,  1 },
-/* 3 L+ON         */ { s(2,2),     0 ,     4 ,     4 ,     3 ,     0 ,     0 ,  0 },
-/* 4 L+EN/AN      */ { s(2,2),     0 ,     4 ,     4 ,     3 ,     0 ,     0 ,  1 }
-};
-static const ImpTabPair impTab_GROUP_NUMBERS_WITH_R = {
-                        {&impTabL_GROUP_NUMBERS_WITH_R,
-                         &impTabR_GROUP_NUMBERS_WITH_R},
-                        {&impAct0, &impAct0}};
-
-
-static const ImpTab impTabL_INVERSE_NUMBERS_AS_L =
-/*  This table is identical to the Default LTR table except that EN and AN are
-    handled like L.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     0 ,     1 ,     0 ,     0 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : R          */ {     0 ,     1 ,     0 ,     0 , s(1,4), s(1,4),     0 ,  1 },
-/* 2 : AN         */ {     0 ,     1 ,     0 ,     0 , s(1,5), s(1,5),     0 ,  2 },
-/* 3 : R+EN/AN    */ {     0 ,     1 ,     0 ,     0 , s(1,4), s(1,4),     0 ,  2 },
-/* 4 : R+ON       */ { s(2,0),     1 , s(2,0), s(2,0),     4 ,     4 , s(2,0),  1 },
-/* 5 : AN+ON      */ { s(2,0),     1 , s(2,0), s(2,0),     5 ,     5 , s(2,0),  1 }
-};
-static const ImpTab impTabR_INVERSE_NUMBERS_AS_L =
-/*  This table is identical to the Default RTL table except that EN and AN are
-    handled like L.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     1 ,     0 ,     1 ,     1 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : L          */ {     1 ,     0 ,     1 ,     1 , s(1,4), s(1,4),     0 ,  1 },
-/* 2 : EN/AN      */ {     1 ,     0 ,     1 ,     1 ,     0 ,     0 ,     0 ,  1 },
-/* 3 : L+AN       */ {     1 ,     0 ,     1 ,     1 ,     5 ,     5 ,     0 ,  1 },
-/* 4 : L+ON       */ { s(2,1),     0 , s(2,1), s(2,1),     4 ,     4 ,     0 ,  0 },
-/* 5 : L+AN+ON    */ {     1 ,     0 ,     1 ,     1 ,     5 ,     5 ,     0 ,  0 }
-};
-static const ImpTabPair impTab_INVERSE_NUMBERS_AS_L = {
-                        {&impTabL_INVERSE_NUMBERS_AS_L,
-                         &impTabR_INVERSE_NUMBERS_AS_L},
-                        {&impAct0, &impAct0}};
-
-static const ImpTab impTabR_INVERSE_LIKE_DIRECT =   /* Odd  paragraph level */
-/*  In this table, conditional sequences receive the lower possible level
-    until proven otherwise.
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     1 ,     0 ,     2 ,     2 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : L          */ {     1 ,     0 ,     1 ,     2 , s(1,3), s(1,3),     0 ,  1 },
-/* 2 : EN/AN      */ {     1 ,     0 ,     2 ,     2 ,     0 ,     0 ,     0 ,  1 },
-/* 3 : L+ON       */ { s(2,1), s(3,0),     6 ,     4 ,     3 ,     3 , s(3,0),  0 },
-/* 4 : L+ON+AN    */ { s(2,1), s(3,0),     6 ,     4 ,     5 ,     5 , s(3,0),  3 },
-/* 5 : L+AN+ON    */ { s(2,1), s(3,0),     6 ,     4 ,     5 ,     5 , s(3,0),  2 },
-/* 6 : L+ON+EN    */ { s(2,1), s(3,0),     6 ,     4 ,     3 ,     3 , s(3,0),  1 }
-};
-static const ImpAct impAct1 = {0,1,11,12};
-/* FOOD FOR THOUGHT: in LTR table below, check case "JKL 123abc"
- */
-static const ImpTabPair impTab_INVERSE_LIKE_DIRECT = {
-                        {&impTabL_DEFAULT,
-                         &impTabR_INVERSE_LIKE_DIRECT},
-                        {&impAct0, &impAct1}};
-
-static const ImpTab impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS =
-/*  The case handled in this table is (visually):  R EN L
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     0 , s(6,3),     0 ,     1 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : L+AN       */ {     0 , s(6,3),     0 ,     1 , s(1,2), s(3,0),     0 ,  4 },
-/* 2 : L+AN+ON    */ { s(2,0), s(6,3), s(2,0),     1 ,     2 , s(3,0), s(2,0),  3 },
-/* 3 : R          */ {     0 , s(6,3), s(5,5), s(5,6), s(1,4), s(3,0),     0 ,  3 },
-/* 4 : R+ON       */ { s(3,0), s(4,3), s(5,5), s(5,6),     4 , s(3,0), s(3,0),  3 },
-/* 5 : R+EN       */ { s(3,0), s(4,3),     5 , s(5,6), s(1,4), s(3,0), s(3,0),  4 },
-/* 6 : R+AN       */ { s(3,0), s(4,3), s(5,5),     6 , s(1,4), s(3,0), s(3,0),  4 }
-};
-static const ImpTab impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS =
-/*  The cases handled in this table are (visually):  R EN L
-                                                     R L AN L
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ { s(1,3),     0 ,     1 ,     1 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : R+EN/AN    */ { s(2,3),     0 ,     1 ,     1 ,     2 , s(4,0),     0 ,  1 },
-/* 2 : R+EN/AN+ON */ { s(2,3),     0 ,     1 ,     1 ,     2 , s(4,0),     0 ,  0 },
-/* 3 : L          */ {     3 ,     0 ,     3 , s(3,6), s(1,4), s(4,0),     0 ,  1 },
-/* 4 : L+ON       */ { s(5,3), s(4,0),     5 , s(3,6),     4 , s(4,0), s(4,0),  0 },
-/* 5 : L+ON+EN    */ { s(5,3), s(4,0),     5 , s(3,6),     4 , s(4,0), s(4,0),  1 },
-/* 6 : L+AN       */ { s(5,3), s(4,0),     6 ,     6 ,     4 , s(4,0), s(4,0),  3 }
-};
-static const ImpAct impAct2 = {0,1,7,8,9,10};
-static const ImpTabPair impTab_INVERSE_LIKE_DIRECT_WITH_MARKS = {
-                        {&impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS,
-                         &impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS},
-                        {&impAct0, &impAct2}};
-
-static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL = {
-                        {&impTabL_NUMBERS_SPECIAL,
-                         &impTabR_INVERSE_LIKE_DIRECT},
-                        {&impAct0, &impAct1}};
-
-static const ImpTab impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS =
-/*  The case handled in this table is (visually):  R EN L
-*/
-{
-/*                         L ,     R ,    EN ,    AN ,    ON ,     S ,     B , Res */
-/* 0 : init       */ {     0 , s(6,2),     1 ,     1 ,     0 ,     0 ,     0 ,  0 },
-/* 1 : L+EN/AN    */ {     0 , s(6,2),     1 ,     1 ,     0 , s(3,0),     0 ,  4 },
-/* 2 : R          */ {     0 , s(6,2), s(5,4), s(5,4), s(1,3), s(3,0),     0 ,  3 },
-/* 3 : R+ON       */ { s(3,0), s(4,2), s(5,4), s(5,4),     3 , s(3,0), s(3,0),  3 },
-/* 4 : R+EN/AN    */ { s(3,0), s(4,2),     4 ,     4 , s(1,3), s(3,0), s(3,0),  4 }
-};
-static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS = {
-                        {&impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS,
-                         &impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS},
-                        {&impAct0, &impAct2}};
-
-#undef s
-
-typedef struct {
-    const ImpTab * pImpTab;             /* level table pointer          */
-    const ImpAct * pImpAct;             /* action map array             */
-    int32_t startON;                    /* start of ON sequence         */
-    int32_t startL2EN;                  /* start of level 2 sequence    */
-    int32_t lastStrongRTL;              /* index of last found R or AL  */
-    int32_t state;                      /* current state                */
-    UBiDiLevel runLevel;                /* run level before implicit solving */
-} LevState;
-
-/*------------------------------------------------------------------------*/
-
-static void
-addPoint(UBiDi *pBiDi, int32_t pos, int32_t flag)
-  /* param pos:     position where to insert
-     param flag:    one of LRM_BEFORE, LRM_AFTER, RLM_BEFORE, RLM_AFTER
-  */
-{
-#define FIRSTALLOC  10
-    Point point;
-    InsertPoints * pInsertPoints=&(pBiDi->insertPoints);
-
-    if (pInsertPoints->capacity == 0)
-    {
-        pInsertPoints->points=uprv_malloc(sizeof(Point)*FIRSTALLOC);
-        if (pInsertPoints->points == NULL)
-        {
-            pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-        pInsertPoints->capacity=FIRSTALLOC;
-    }
-    if (pInsertPoints->size >= pInsertPoints->capacity) /* no room for new point */
-    {
-        void * savePoints=pInsertPoints->points;
-        pInsertPoints->points=uprv_realloc(pInsertPoints->points,
-                                           pInsertPoints->capacity*2*sizeof(Point));
-        if (pInsertPoints->points == NULL)
-        {
-            pInsertPoints->points=savePoints;
-            pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-        else  pInsertPoints->capacity*=2;
-    }
-    point.pos=pos;
-    point.flag=flag;
-    pInsertPoints->points[pInsertPoints->size]=point;
-    pInsertPoints->size++;
-#undef FIRSTALLOC
-}
-
-/* perform rules (Wn), (Nn), and (In) on a run of the text ------------------ */
-
-/*
- * This implementation of the (Wn) rules applies all rules in one pass.
- * In order to do so, it needs a look-ahead of typically 1 character
- * (except for W5: sequences of ET) and keeps track of changes
- * in a rule Wp that affect a later Wq (p<q).
- *
- * The (Nn) and (In) rules are also performed in that same single loop,
- * but effectively one iteration behind for white space.
- *
- * Since all implicit rules are performed in one step, it is not necessary
- * to actually store the intermediate directional properties in dirProps[].
- */
-
-static void
-processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
-                   int32_t start, int32_t limit) {
-    uint8_t cell, oldStateSeq, actionSeq;
-    const ImpTab * pImpTab=pLevState->pImpTab;
-    const ImpAct * pImpAct=pLevState->pImpAct;
-    UBiDiLevel * levels=pBiDi->levels;
-    UBiDiLevel level, addLevel;
-    InsertPoints * pInsertPoints;
-    int32_t start0, k;
-
-    start0=start;                           /* save original start position */
-    oldStateSeq=(uint8_t)pLevState->state;
-    cell=(*pImpTab)[oldStateSeq][_prop];
-    pLevState->state=GET_STATE(cell);       /* isolate the new state */
-    actionSeq=(*pImpAct)[GET_ACTION(cell)]; /* isolate the action */
-    addLevel=(*pImpTab)[pLevState->state][IMPTABLEVELS_RES];
-
-    if(actionSeq) {
-        switch(actionSeq) {
-        case 1:                         /* init ON seq */
-            pLevState->startON=start0;
-            break;
-
-        case 2:                         /* prepend ON seq to current seq */
-            start=pLevState->startON;
-            break;
-
-        case 3:                         /* L or S after possible relevant EN/AN */
-            /* check if we had EN after R/AL */
-            if (pLevState->startL2EN >= 0) {
-                addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE);
-            }
-            pLevState->startL2EN=-1;  /* not within previous if since could also be -2 */
-            /* check if we had any relevant EN/AN after R/AL */
-            pInsertPoints=&(pBiDi->insertPoints);
-            if ((pInsertPoints->capacity == 0) ||
-                (pInsertPoints->size <= pInsertPoints->confirmed))
-            {
-                /* nothing, just clean up */
-                pLevState->lastStrongRTL=-1;
-                /* check if we have a pending conditional segment */
-                level=(*pImpTab)[oldStateSeq][IMPTABLEVELS_RES];
-                if ((level & 1) && (pLevState->startON > 0)) {  /* after ON */
-                    start=pLevState->startON;   /* reset to basic run level */
-                }
-                if (_prop == DirProp_S)                /* add LRM before S */
-                {
-                    addPoint(pBiDi, start0, LRM_BEFORE);
-                    pInsertPoints->confirmed=pInsertPoints->size;
-                }
-                break;
-            }
-            /* reset previous RTL cont to level for LTR text */
-            for (k=pLevState->lastStrongRTL+1; k<start0; k++)
-            {
-                /* reset odd level, leave runLevel+2 as is */
-                levels[k]=(levels[k] - 2) & ~1;
-            }
-            /* mark insert points as confirmed */
-            pInsertPoints->confirmed=pInsertPoints->size;
-            pLevState->lastStrongRTL=-1;
-            if (_prop == DirProp_S)            /* add LRM before S */
-            {
-                addPoint(pBiDi, start0, LRM_BEFORE);
-                pInsertPoints->confirmed=pInsertPoints->size;
-            }
-            break;
-
-        case 4:                         /* R/AL after possible relevant EN/AN */
-            /* just clean up */
-            pInsertPoints=&(pBiDi->insertPoints);
-            if (pInsertPoints->capacity > 0)
-                /* remove all non confirmed insert points */
-                pInsertPoints->size=pInsertPoints->confirmed;
-            pLevState->startON=-1;
-            pLevState->startL2EN=-1;
-            pLevState->lastStrongRTL=limit - 1;
-            break;
-
-        case 5:                         /* EN/AN after R/AL + possible cont */
-            /* check for real AN */
-            if ((_prop == DirProp_AN) && (NO_CONTEXT_RTL(pBiDi->dirProps[start0]) == AN) &&
-                (pBiDi->reorderingMode!=UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))
-            {
-                /* real AN */
-                if (pLevState->startL2EN == -1) /* if no relevant EN already found */
-                {
-                    /* just note the righmost digit as a strong RTL */
-                    pLevState->lastStrongRTL=limit - 1;
-                    break;
-                }
-                if (pLevState->startL2EN >= 0)  /* after EN, no AN */
-                {
-                    addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE);
-                    pLevState->startL2EN=-2;
-                }
-                /* note AN */
-                addPoint(pBiDi, start0, LRM_BEFORE);
-                break;
-            }
-            /* if first EN/AN after R/AL */
-            if (pLevState->startL2EN == -1) {
-                pLevState->startL2EN=start0;
-            }
-            break;
-
-        case 6:                         /* note location of latest R/AL */
-            pLevState->lastStrongRTL=limit - 1;
-            pLevState->startON=-1;
-            break;
-
-        case 7:                         /* L after R+ON/EN/AN */
-            /* include possible adjacent number on the left */
-            for (k=start0-1; k>=0 && !(levels[k]&1); k--);
-            if(k>=0) {
-                addPoint(pBiDi, k, RLM_BEFORE);             /* add RLM before */
-                pInsertPoints=&(pBiDi->insertPoints);
-                pInsertPoints->confirmed=pInsertPoints->size;   /* confirm it */
-            }
-            pLevState->startON=start0;
-            break;
-
-        case 8:                         /* AN after L */
-            /* AN numbers between L text on both sides may be trouble. */
-            /* tentatively bracket with LRMs; will be confirmed if followed by L */
-            addPoint(pBiDi, start0, LRM_BEFORE);    /* add LRM before */
-            addPoint(pBiDi, start0, LRM_AFTER);     /* add LRM after  */
-            break;
-
-        case 9:                         /* R after L+ON/EN/AN */
-            /* false alert, infirm LRMs around previous AN */
-            pInsertPoints=&(pBiDi->insertPoints);
-            pInsertPoints->size=pInsertPoints->confirmed;
-            if (_prop == DirProp_S)            /* add RLM before S */
-            {
-                addPoint(pBiDi, start0, RLM_BEFORE);
-                pInsertPoints->confirmed=pInsertPoints->size;
-            }
-            break;
-
-        case 10:                        /* L after L+ON/AN */
-            level=pLevState->runLevel + addLevel;
-            for(k=pLevState->startON; k<start0; k++) {
-                if (levels[k]<level)
-                    levels[k]=level;
-            }
-            pInsertPoints=&(pBiDi->insertPoints);
-            pInsertPoints->confirmed=pInsertPoints->size;   /* confirm inserts */
-            pLevState->startON=start0;
-            break;
-
-        case 11:                        /* L after L+ON+EN/AN/ON */
-            level=pLevState->runLevel;
-            for(k=start0-1; k>=pLevState->startON; k--) {
-                if(levels[k]==level+3) {
-                    while(levels[k]==level+3) {
-                        levels[k--]-=2;
-                    }
-                    while(levels[k]==level) {
-                        k--;
-                    }
-                }
-                if(levels[k]==level+2) {
-                    levels[k]=level;
-                    continue;
-                }
-                levels[k]=level+1;
-            }
-            break;
-
-        case 12:                        /* R after L+ON+EN/AN/ON */
-            level=pLevState->runLevel+1;
-            for(k=start0-1; k>=pLevState->startON; k--) {
-                if(levels[k]>level) {
-                    levels[k]-=2;
-                }
-            }
-            break;
-
-        default:                        /* we should never get here */
-            U_ASSERT(FALSE);
-            break;
-        }
-    }
-    if((addLevel) || (start < start0)) {
-        level=pLevState->runLevel + addLevel;
-        for(k=start; k<limit; k++) {
-            levels[k]=level;
-        }
-    }
-}
-
-static DirProp
-lastL_R_AL(UBiDi *pBiDi) {
-    /* return last strong char at the end of the prologue */
-    const UChar *text=pBiDi->prologue;
-    int32_t length=pBiDi->proLength;
-    int32_t i;
-    UChar32 uchar;
-    DirProp dirProp;
-    for(i=length; i>0; ) {
-        /* i is decremented by U16_PREV */
-        U16_PREV(text, 0, i, uchar);
-        dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar);
-        if(dirProp==L) {
-            return DirProp_L;
-        }
-        if(dirProp==R || dirProp==AL) {
-            return DirProp_R;
-        }
-        if(dirProp==B) {
-            return DirProp_ON;
-        }
-    }
-    return DirProp_ON;
-}
-
-static DirProp
-firstL_R_AL_EN_AN(UBiDi *pBiDi) {
-    /* return first strong char or digit in epilogue */
-    const UChar *text=pBiDi->epilogue;
-    int32_t length=pBiDi->epiLength;
-    int32_t i;
-    UChar32 uchar;
-    DirProp dirProp;
-    for(i=0; i<length; ) {
-        /* i is incremented by U16_NEXT */
-        U16_NEXT(text, i, length, uchar);
-        dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar);
-        if(dirProp==L) {
-            return DirProp_L;
-        }
-        if(dirProp==R || dirProp==AL) {
-            return DirProp_R;
-        }
-        if(dirProp==EN) {
-            return DirProp_EN;
-        }
-        if(dirProp==AN) {
-            return DirProp_AN;
-        }
-    }
-    return DirProp_ON;
-}
-
-static void
-resolveImplicitLevels(UBiDi *pBiDi,
-                      int32_t start, int32_t limit,
-                      DirProp sor, DirProp eor) {
-    const DirProp *dirProps=pBiDi->dirProps;
-
-    LevState levState;
-    int32_t i, start1, start2;
-    uint8_t oldStateImp, stateImp, actionImp;
-    uint8_t gprop, resProp, cell;
-    UBool inverseRTL;
-    DirProp nextStrongProp=R;
-    int32_t nextStrongPos=-1;
-
-    levState.startON = -1;  /* silence gcc flow analysis */
-
-    /* check for RTL inverse BiDi mode */
-    /* FOOD FOR THOUGHT: in case of RTL inverse BiDi, it would make sense to
-     * loop on the text characters from end to start.
-     * This would need a different properties state table (at least different
-     * actions) and different levels state tables (maybe very similar to the
-     * LTR corresponding ones.
-     */
-    inverseRTL=(UBool)
-        ((start<pBiDi->lastArabicPos) && (GET_PARALEVEL(pBiDi, start) & 1) &&
-         (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT  ||
-          pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL));
-    /* initialize for levels state table */
-    levState.startL2EN=-1;              /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */
-    levState.lastStrongRTL=-1;          /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */
-    levState.state=0;
-    levState.runLevel=pBiDi->levels[start];
-    levState.pImpTab=(const ImpTab*)((pBiDi->pImpTabPair)->pImpTab)[levState.runLevel&1];
-    levState.pImpAct=(const ImpAct*)((pBiDi->pImpTabPair)->pImpAct)[levState.runLevel&1];
-    if(start==0 && pBiDi->proLength>0) {
-        DirProp lastStrong=lastL_R_AL(pBiDi);
-        if(lastStrong!=DirProp_ON) {
-            sor=lastStrong;
-        }
-    }
-    processPropertySeq(pBiDi, &levState, sor, start, start);
-    /* initialize for property state table */
-    if(NO_CONTEXT_RTL(dirProps[start])==NSM) {
-        stateImp = 1 + sor;
-    } else {
-        stateImp=0;
-    }
-    start1=start;
-    start2=start;
-
-    for(i=start; i<=limit; i++) {
-        if(i>=limit) {
-            gprop=eor;
-        } else {
-            DirProp prop, prop1;
-            prop=NO_CONTEXT_RTL(dirProps[i]);
-            if(inverseRTL) {
-                if(prop==AL) {
-                    /* AL before EN does not make it AN */
-                    prop=R;
-                } else if(prop==EN) {
-                    if(nextStrongPos<=i) {
-                        /* look for next strong char (L/R/AL) */
-                        int32_t j;
-                        nextStrongProp=R;   /* set default */
-                        nextStrongPos=limit;
-                        for(j=i+1; j<limit; j++) {
-                            prop1=NO_CONTEXT_RTL(dirProps[j]);
-                            if(prop1==L || prop1==R || prop1==AL) {
-                                nextStrongProp=prop1;
-                                nextStrongPos=j;
-                                break;
-                            }
-                        }
-                    }
-                    if(nextStrongProp==AL) {
-                        prop=AN;
-                    }
-                }
-            }
-            gprop=groupProp[prop];
-        }
-        oldStateImp=stateImp;
-        cell=impTabProps[oldStateImp][gprop];
-        stateImp=GET_STATEPROPS(cell);      /* isolate the new state */
-        actionImp=GET_ACTIONPROPS(cell);    /* isolate the action */
-        if((i==limit) && (actionImp==0)) {
-            /* there is an unprocessed sequence if its property == eor   */
-            actionImp=1;                    /* process the last sequence */
-        }
-        if(actionImp) {
-            resProp=impTabProps[oldStateImp][IMPTABPROPS_RES];
-            switch(actionImp) {
-            case 1:             /* process current seq1, init new seq1 */
-                processPropertySeq(pBiDi, &levState, resProp, start1, i);
-                start1=i;
-                break;
-            case 2:             /* init new seq2 */
-                start2=i;
-                break;
-            case 3:             /* process seq1, process seq2, init new seq1 */
-                processPropertySeq(pBiDi, &levState, resProp, start1, start2);
-                processPropertySeq(pBiDi, &levState, DirProp_ON, start2, i);
-                start1=i;
-                break;
-            case 4:             /* process seq1, set seq1=seq2, init new seq2 */
-                processPropertySeq(pBiDi, &levState, resProp, start1, start2);
-                start1=start2;
-                start2=i;
-                break;
-            default:            /* we should never get here */
-                U_ASSERT(FALSE);
-                break;
-            }
-        }
-    }
-    /* flush possible pending sequence, e.g. ON */
-    if(limit==pBiDi->length && pBiDi->epiLength>0) {
-        DirProp firstStrong=firstL_R_AL_EN_AN(pBiDi);
-        if(firstStrong!=DirProp_ON) {
-            eor=firstStrong;
-        }
-    }
-    processPropertySeq(pBiDi, &levState, eor, limit, limit);
-}
-
-/* perform (L1) and (X9) ---------------------------------------------------- */
-
-/*
- * Reset the embedding levels for some non-graphic characters (L1).
- * This function also sets appropriate levels for BN, and
- * explicit embedding types that are supposed to have been removed
- * from the paragraph in (X9).
- */
-static void
-adjustWSLevels(UBiDi *pBiDi) {
-    const DirProp *dirProps=pBiDi->dirProps;
-    UBiDiLevel *levels=pBiDi->levels;
-    int32_t i;
-
-    if(pBiDi->flags&MASK_WS) {
-        UBool orderParagraphsLTR=pBiDi->orderParagraphsLTR;
-        Flags flag;
-
-        i=pBiDi->trailingWSStart;
-        while(i>0) {
-            /* reset a sequence of WS/BN before eop and B/S to the paragraph paraLevel */
-            while(i>0 && (flag=DIRPROP_FLAG_NC(dirProps[--i]))&MASK_WS) {
-                if(orderParagraphsLTR&&(flag&DIRPROP_FLAG(B))) {
-                    levels[i]=0;
-                } else {
-                    levels[i]=GET_PARALEVEL(pBiDi, i);
-                }
-            }
-
-            /* reset BN to the next character's paraLevel until B/S, which restarts above loop */
-            /* here, i+1 is guaranteed to be <length */
-            while(i>0) {
-                flag=DIRPROP_FLAG_NC(dirProps[--i]);
-                if(flag&MASK_BN_EXPLICIT) {
-                    levels[i]=levels[i+1];
-                } else if(orderParagraphsLTR&&(flag&DIRPROP_FLAG(B))) {
-                    levels[i]=0;
-                    break;
-                } else if(flag&MASK_B_S) {
-                    levels[i]=GET_PARALEVEL(pBiDi, i);
-                    break;
-                }
-            }
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_setContext(UBiDi *pBiDi,
-                 const UChar *prologue, int32_t proLength,
-                 const UChar *epilogue, int32_t epiLength,
-                 UErrorCode *pErrorCode) {
-    /* check the argument values */
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(pBiDi==NULL || proLength<-1 || epiLength<-1 ||
-       (prologue==NULL && proLength!=0) || (epilogue==NULL && epiLength!=0)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if(proLength==-1) {
-        pBiDi->proLength=u_strlen(prologue);
-    } else {
-        pBiDi->proLength=proLength;
-    }
-    if(epiLength==-1) {
-        pBiDi->epiLength=u_strlen(epilogue);
-    } else {
-        pBiDi->epiLength=epiLength;
-    }
-    pBiDi->prologue=prologue;
-    pBiDi->epilogue=epilogue;
-}
-
-static void
-setParaSuccess(UBiDi *pBiDi) {
-    pBiDi->proLength=0;                 /* forget the last context */
-    pBiDi->epiLength=0;
-    pBiDi->pParaBiDi=pBiDi;             /* mark successful setPara */
-}
-
-#define BIDI_MIN(x, y)   ((x)<(y) ? (x) : (y))
-#define BIDI_ABS(x)      ((x)>=0  ? (x) : (-(x)))
-static void
-setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
-                UBiDiLevel paraLevel, UErrorCode *pErrorCode) {
-    void *runsOnlyMemory;
-    int32_t *visualMap;
-    UChar *visualText;
-    int32_t saveLength, saveTrailingWSStart;
-    const UBiDiLevel *levels;
-    UBiDiLevel *saveLevels;
-    UBiDiDirection saveDirection;
-    UBool saveMayAllocateText;
-    Run *runs;
-    int32_t visualLength, i, j, visualStart, logicalStart,
-            runCount, runLength, addedRuns, insertRemove,
-            start, limit, step, indexOddBit, logicalPos,
-            index0, index1;
-    uint32_t saveOptions;
-
-    pBiDi->reorderingMode=UBIDI_REORDER_DEFAULT;
-    if(length==0) {
-        ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
-        goto cleanup3;
-    }
-    /* obtain memory for mapping table and visual text */
-    runsOnlyMemory=uprv_malloc(length*(sizeof(int32_t)+sizeof(UChar)+sizeof(UBiDiLevel)));
-    if(runsOnlyMemory==NULL) {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        goto cleanup3;
-    }
-    visualMap=runsOnlyMemory;
-    visualText=(UChar *)&visualMap[length];
-    saveLevels=(UBiDiLevel *)&visualText[length];
-    saveOptions=pBiDi->reorderingOptions;
-    if(saveOptions & UBIDI_OPTION_INSERT_MARKS) {
-        pBiDi->reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS;
-        pBiDi->reorderingOptions|=UBIDI_OPTION_REMOVE_CONTROLS;
-    }
-    paraLevel&=1;                       /* accept only 0 or 1 */
-    ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        goto cleanup3;
-    }
-    /* we cannot access directly pBiDi->levels since it is not yet set if
-     * direction is not MIXED
-     */
-    levels=ubidi_getLevels(pBiDi, pErrorCode);
-    uprv_memcpy(saveLevels, levels, pBiDi->length*sizeof(UBiDiLevel));
-    saveTrailingWSStart=pBiDi->trailingWSStart;
-    saveLength=pBiDi->length;
-    saveDirection=pBiDi->direction;
-
-    /* FOOD FOR THOUGHT: instead of writing the visual text, we could use
-     * the visual map and the dirProps array to drive the second call
-     * to ubidi_setPara (but must make provision for possible removal of
-     * BiDi controls.  Alternatively, only use the dirProps array via
-     * customized classifier callback.
-     */
-    visualLength=ubidi_writeReordered(pBiDi, visualText, length,
-                                      UBIDI_DO_MIRRORING, pErrorCode);
-    ubidi_getVisualMap(pBiDi, visualMap, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        goto cleanup2;
-    }
-    pBiDi->reorderingOptions=saveOptions;
-
-    pBiDi->reorderingMode=UBIDI_REORDER_INVERSE_LIKE_DIRECT;
-    paraLevel^=1;
-    /* Because what we did with reorderingOptions, visualText may be shorter
-     * than the original text. But we don't want the levels memory to be
-     * reallocated shorter than the original length, since we need to restore
-     * the levels as after the first call to ubidi_setpara() before returning.
-     * We will force mayAllocateText to FALSE before the second call to
-     * ubidi_setpara(), and will restore it afterwards.
-     */
-    saveMayAllocateText=pBiDi->mayAllocateText;
-    pBiDi->mayAllocateText=FALSE;
-    ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, NULL, pErrorCode);
-    pBiDi->mayAllocateText=saveMayAllocateText;
-    ubidi_getRuns(pBiDi, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        goto cleanup1;
-    }
-    /* check if some runs must be split, count how many splits */
-    addedRuns=0;
-    runCount=pBiDi->runCount;
-    runs=pBiDi->runs;
-    visualStart=0;
-    for(i=0; i<runCount; i++, visualStart+=runLength) {
-        runLength=runs[i].visualLimit-visualStart;
-        if(runLength<2) {
-            continue;
-        }
-        logicalStart=GET_INDEX(runs[i].logicalStart);
-        for(j=logicalStart+1; j<logicalStart+runLength; j++) {
-            index0=visualMap[j];
-            index1=visualMap[j-1];
-            if((BIDI_ABS(index0-index1)!=1) || (saveLevels[index0]!=saveLevels[index1])) {
-                addedRuns++;
-            }
-        }
-    }
-    if(addedRuns) {
-        if(getRunsMemory(pBiDi, runCount+addedRuns)) {
-            if(runCount==1) {
-                /* because we switch from UBiDi.simpleRuns to UBiDi.runs */
-                pBiDi->runsMemory[0]=runs[0];
-            }
-            runs=pBiDi->runs=pBiDi->runsMemory;
-            pBiDi->runCount+=addedRuns;
-        } else {
-            goto cleanup1;
-        }
-    }
-    /* split runs which are not consecutive in source text */
-    for(i=runCount-1; i>=0; i--) {
-        runLength= i==0 ? runs[0].visualLimit :
-                          runs[i].visualLimit-runs[i-1].visualLimit;
-        logicalStart=runs[i].logicalStart;
-        indexOddBit=GET_ODD_BIT(logicalStart);
-        logicalStart=GET_INDEX(logicalStart);
-        if(runLength<2) {
-            if(addedRuns) {
-                runs[i+addedRuns]=runs[i];
-            }
-            logicalPos=visualMap[logicalStart];
-            runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos,
-                                            saveLevels[logicalPos]^indexOddBit);
-            continue;
-        }
-        if(indexOddBit) {
-            start=logicalStart;
-            limit=logicalStart+runLength-1;
-            step=1;
-        } else {
-            start=logicalStart+runLength-1;
-            limit=logicalStart;
-            step=-1;
-        }
-        for(j=start; j!=limit; j+=step) {
-            index0=visualMap[j];
-            index1=visualMap[j+step];
-            if((BIDI_ABS(index0-index1)!=1) || (saveLevels[index0]!=saveLevels[index1])) {
-                logicalPos=BIDI_MIN(visualMap[start], index0);
-                runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos,
-                                            saveLevels[logicalPos]^indexOddBit);
-                runs[i+addedRuns].visualLimit=runs[i].visualLimit;
-                runs[i].visualLimit-=BIDI_ABS(j-start)+1;
-                insertRemove=runs[i].insertRemove&(LRM_AFTER|RLM_AFTER);
-                runs[i+addedRuns].insertRemove=insertRemove;
-                runs[i].insertRemove&=~insertRemove;
-                start=j+step;
-                addedRuns--;
-            }
-        }
-        if(addedRuns) {
-            runs[i+addedRuns]=runs[i];
-        }
-        logicalPos=BIDI_MIN(visualMap[start], visualMap[limit]);
-        runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos,
-                                            saveLevels[logicalPos]^indexOddBit);
-    }
-
-  cleanup1:
-    /* restore initial paraLevel */
-    pBiDi->paraLevel^=1;
-  cleanup2:
-    /* restore real text */
-    pBiDi->text=text;
-    pBiDi->length=saveLength;
-    pBiDi->originalLength=length;
-    pBiDi->direction=saveDirection;
-    /* the saved levels should never excess levelsSize, but we check anyway */
-    if(saveLength>pBiDi->levelsSize) {
-        saveLength=pBiDi->levelsSize;
-    }
-    uprv_memcpy(pBiDi->levels, saveLevels, saveLength*sizeof(UBiDiLevel));
-    pBiDi->trailingWSStart=saveTrailingWSStart;
-    /* free memory for mapping table and visual text */
-    uprv_free(runsOnlyMemory);
-    if(pBiDi->runCount>1) {
-        pBiDi->direction=UBIDI_MIXED;
-    }
-  cleanup3:
-    pBiDi->reorderingMode=UBIDI_REORDER_RUNS_ONLY;
-}
-
-/* ubidi_setPara ------------------------------------------------------------ */
-
-U_CAPI void U_EXPORT2
-ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
-              UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
-              UErrorCode *pErrorCode) {
-    UBiDiDirection direction;
-
-    /* check the argument values */
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(pBiDi==NULL || text==NULL || length<-1 ||
-       (paraLevel>UBIDI_MAX_EXPLICIT_LEVEL && paraLevel<UBIDI_DEFAULT_LTR)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if(length==-1) {
-        length=u_strlen(text);
-    }
-
-    /* special treatment for RUNS_ONLY mode */
-    if(pBiDi->reorderingMode==UBIDI_REORDER_RUNS_ONLY) {
-        setParaRunsOnly(pBiDi, text, length, paraLevel, pErrorCode);
-        return;
-    }
-
-    /* initialize the UBiDi structure */
-    pBiDi->pParaBiDi=NULL;          /* mark unfinished setPara */
-    pBiDi->text=text;
-    pBiDi->length=pBiDi->originalLength=pBiDi->resultLength=length;
-    pBiDi->paraLevel=paraLevel;
-    pBiDi->direction=UBIDI_LTR;
-    pBiDi->paraCount=1;
-
-    pBiDi->dirProps=NULL;
-    pBiDi->levels=NULL;
-    pBiDi->runs=NULL;
-    pBiDi->insertPoints.size=0;         /* clean up from last call */
-    pBiDi->insertPoints.confirmed=0;    /* clean up from last call */
-
-    /*
-     * Save the original paraLevel if contextual; otherwise, set to 0.
-     */
-    if(IS_DEFAULT_LEVEL(paraLevel)) {
-        pBiDi->defaultParaLevel=paraLevel;
-    } else {
-        pBiDi->defaultParaLevel=0;
-    }
-
-    if(length==0) {
-        /*
-         * For an empty paragraph, create a UBiDi object with the paraLevel and
-         * the flags and the direction set but without allocating zero-length arrays.
-         * There is nothing more to do.
-         */
-        if(IS_DEFAULT_LEVEL(paraLevel)) {
-            pBiDi->paraLevel&=1;
-            pBiDi->defaultParaLevel=0;
-        }
-        if(paraLevel&1) {
-            pBiDi->flags=DIRPROP_FLAG(R);
-            pBiDi->direction=UBIDI_RTL;
-        } else {
-            pBiDi->flags=DIRPROP_FLAG(L);
-            pBiDi->direction=UBIDI_LTR;
-        }
-
-        pBiDi->runCount=0;
-        pBiDi->paraCount=0;
-        setParaSuccess(pBiDi);          /* mark successful setPara */
-        return;
-    }
-
-    pBiDi->runCount=-1;
-
-    /*
-     * Get the directional properties,
-     * the flags bit-set, and
-     * determine the paragraph level if necessary.
-     */
-    if(getDirPropsMemory(pBiDi, length)) {
-        pBiDi->dirProps=pBiDi->dirPropsMemory;
-        getDirProps(pBiDi);
-    } else {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    /* the processed length may have changed if UBIDI_OPTION_STREAMING */
-    length= pBiDi->length;
-    pBiDi->trailingWSStart=length;  /* the levels[] will reflect the WS run */
-    /* allocate paras memory */
-    if(pBiDi->paraCount>1) {
-        if(getInitialParasMemory(pBiDi, pBiDi->paraCount)) {
-            pBiDi->paras=pBiDi->parasMemory;
-            pBiDi->paras[pBiDi->paraCount-1]=length;
-        } else {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    } else {
-        /* initialize paras for single paragraph */
-        pBiDi->paras=pBiDi->simpleParas;
-        pBiDi->simpleParas[0]=length;
-    }
-
-    /* are explicit levels specified? */
-    if(embeddingLevels==NULL) {
-        /* no: determine explicit levels according to the (Xn) rules */\
-        if(getLevelsMemory(pBiDi, length)) {
-            pBiDi->levels=pBiDi->levelsMemory;
-            direction=resolveExplicitLevels(pBiDi);
-        } else {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    } else {
-        /* set BN for all explicit codes, check that all levels are 0 or paraLevel..UBIDI_MAX_EXPLICIT_LEVEL */
-        pBiDi->levels=embeddingLevels;
-        direction=checkExplicitLevels(pBiDi, pErrorCode);
-        if(U_FAILURE(*pErrorCode)) {
-            return;
-        }
-    }
-
-    /*
-     * The steps after (X9) in the UBiDi algorithm are performed only if
-     * the paragraph text has mixed directionality!
-     */
-    pBiDi->direction=direction;
-    switch(direction) {
-    case UBIDI_LTR:
-        /* make sure paraLevel is even */
-        pBiDi->paraLevel=(UBiDiLevel)((pBiDi->paraLevel+1)&~1);
-
-        /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
-        pBiDi->trailingWSStart=0;
-        break;
-    case UBIDI_RTL:
-        /* make sure paraLevel is odd */
-        pBiDi->paraLevel|=1;
-
-        /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
-        pBiDi->trailingWSStart=0;
-        break;
-    default:
-        /*
-         *  Choose the right implicit state table
-         */
-        switch(pBiDi->reorderingMode) {
-        case UBIDI_REORDER_DEFAULT:
-            pBiDi->pImpTabPair=&impTab_DEFAULT;
-            break;
-        case UBIDI_REORDER_NUMBERS_SPECIAL:
-            pBiDi->pImpTabPair=&impTab_NUMBERS_SPECIAL;
-            break;
-        case UBIDI_REORDER_GROUP_NUMBERS_WITH_R:
-            pBiDi->pImpTabPair=&impTab_GROUP_NUMBERS_WITH_R;
-            break;
-        case UBIDI_REORDER_INVERSE_NUMBERS_AS_L:
-            pBiDi->pImpTabPair=&impTab_INVERSE_NUMBERS_AS_L;
-            break;
-        case UBIDI_REORDER_INVERSE_LIKE_DIRECT:
-            if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) {
-                pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT_WITH_MARKS;
-            } else {
-                pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT;
-            }
-            break;
-        case UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL:
-            if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) {
-                pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS;
-            } else {
-                pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL;
-            }
-            break;
-        default:
-            /* we should never get here */
-            U_ASSERT(FALSE);
-            break;
-        }
-        /*
-         * If there are no external levels specified and there
-         * are no significant explicit level codes in the text,
-         * then we can treat the entire paragraph as one run.
-         * Otherwise, we need to perform the following rules on runs of
-         * the text with the same embedding levels. (X10)
-         * "Significant" explicit level codes are ones that actually
-         * affect non-BN characters.
-         * Examples for "insignificant" ones are empty embeddings
-         * LRE-PDF, LRE-RLE-PDF-PDF, etc.
-         */
-        if(embeddingLevels==NULL && pBiDi->paraCount<=1 &&
-                                   !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) {
-            resolveImplicitLevels(pBiDi, 0, length,
-                                    GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, 0)),
-                                    GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, length-1)));
-        } else {
-            /* sor, eor: start and end types of same-level-run */
-            UBiDiLevel *levels=pBiDi->levels;
-            int32_t start, limit=0;
-            UBiDiLevel level, nextLevel;
-            DirProp sor, eor;
-
-            /* determine the first sor and set eor to it because of the loop body (sor=eor there) */
-            level=GET_PARALEVEL(pBiDi, 0);
-            nextLevel=levels[0];
-            if(level<nextLevel) {
-                eor=GET_LR_FROM_LEVEL(nextLevel);
-            } else {
-                eor=GET_LR_FROM_LEVEL(level);
-            }
-
-            do {
-                /* determine start and limit of the run (end points just behind the run) */
-
-                /* the values for this run's start are the same as for the previous run's end */
-                start=limit;
-                level=nextLevel;
-                if((start>0) && (NO_CONTEXT_RTL(pBiDi->dirProps[start-1])==B)) {
-                    /* except if this is a new paragraph, then set sor = para level */
-                    sor=GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, start));
-                } else {
-                    sor=eor;
-                }
-
-                /* search for the limit of this run */
-                while(++limit<length && levels[limit]==level) {}
-
-                /* get the correct level of the next run */
-                if(limit<length) {
-                    nextLevel=levels[limit];
-                } else {
-                    nextLevel=GET_PARALEVEL(pBiDi, length-1);
-                }
-
-                /* determine eor from max(level, nextLevel); sor is last run's eor */
-                if((level&~UBIDI_LEVEL_OVERRIDE)<(nextLevel&~UBIDI_LEVEL_OVERRIDE)) {
-                    eor=GET_LR_FROM_LEVEL(nextLevel);
-                } else {
-                    eor=GET_LR_FROM_LEVEL(level);
-                }
-
-                /* if the run consists of overridden directional types, then there
-                   are no implicit types to be resolved */
-                if(!(level&UBIDI_LEVEL_OVERRIDE)) {
-                    resolveImplicitLevels(pBiDi, start, limit, sor, eor);
-                } else {
-                    /* remove the UBIDI_LEVEL_OVERRIDE flags */
-                    do {
-                        levels[start++]&=~UBIDI_LEVEL_OVERRIDE;
-                    } while(start<limit);
-                }
-            } while(limit<length);
-        }
-        /* check if we got any memory shortage while adding insert points */
-        if (U_FAILURE(pBiDi->insertPoints.errorCode))
-        {
-            *pErrorCode=pBiDi->insertPoints.errorCode;
-            return;
-        }
-        /* reset the embedding levels for some non-graphic characters (L1), (X9) */
-        adjustWSLevels(pBiDi);
-        break;
-    }
-    /* add RLM for inverse Bidi with contextual orientation resolving
-     * to RTL which would not round-trip otherwise
-     */
-    if((pBiDi->defaultParaLevel>0) &&
-       (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) &&
-       ((pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT) ||
-        (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))) {
-        int32_t i, j, start, last;
-        DirProp dirProp;
-        for(i=0; i<pBiDi->paraCount; i++) {
-            last=pBiDi->paras[i]-1;
-            if((pBiDi->dirProps[last] & CONTEXT_RTL)==0) {
-                continue;           /* LTR paragraph */
-            }
-            start= i==0 ? 0 : pBiDi->paras[i - 1];
-            for(j=last; j>=start; j--) {
-                dirProp=NO_CONTEXT_RTL(pBiDi->dirProps[j]);
-                if(dirProp==L) {
-                    if(j<last) {
-                        while(NO_CONTEXT_RTL(pBiDi->dirProps[last])==B) {
-                            last--;
-                        }
-                    }
-                    addPoint(pBiDi, last, RLM_BEFORE);
-                    break;
-                }
-                if(DIRPROP_FLAG(dirProp) & MASK_R_AL) {
-                    break;
-                }
-            }
-        }
-    }
-
-    if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
-        pBiDi->resultLength -= pBiDi->controlCount;
-    } else {
-        pBiDi->resultLength += pBiDi->insertPoints.size;
-    }
-    setParaSuccess(pBiDi);              /* mark successful setPara */
-}
-
-U_CAPI void U_EXPORT2
-ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR) {
-    if(pBiDi!=NULL) {
-        pBiDi->orderParagraphsLTR=orderParagraphsLTR;
-    }
-}
-
-U_CAPI UBool U_EXPORT2
-ubidi_isOrderParagraphsLTR(UBiDi *pBiDi) {
-    if(pBiDi!=NULL) {
-        return pBiDi->orderParagraphsLTR;
-    } else {
-        return FALSE;
-    }
-}
-
-U_CAPI UBiDiDirection U_EXPORT2
-ubidi_getDirection(const UBiDi *pBiDi) {
-    if(IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return pBiDi->direction;
-    } else {
-        return UBIDI_LTR;
-    }
-}
-
-U_CAPI const UChar * U_EXPORT2
-ubidi_getText(const UBiDi *pBiDi) {
-    if(IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return pBiDi->text;
-    } else {
-        return NULL;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_getLength(const UBiDi *pBiDi) {
-    if(IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return pBiDi->originalLength;
-    } else {
-        return 0;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_getProcessedLength(const UBiDi *pBiDi) {
-    if(IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return pBiDi->length;
-    } else {
-        return 0;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_getResultLength(const UBiDi *pBiDi) {
-    if(IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return pBiDi->resultLength;
-    } else {
-        return 0;
-    }
-}
-
-/* paragraphs API functions ------------------------------------------------- */
-
-U_CAPI UBiDiLevel U_EXPORT2
-ubidi_getParaLevel(const UBiDi *pBiDi) {
-    if(IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return pBiDi->paraLevel;
-    } else {
-        return 0;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_countParagraphs(UBiDi *pBiDi) {
-    if(!IS_VALID_PARA_OR_LINE(pBiDi)) {
-        return 0;
-    } else {
-        return pBiDi->paraCount;
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
-                          int32_t *pParaStart, int32_t *pParaLimit,
-                          UBiDiLevel *pParaLevel, UErrorCode *pErrorCode) {
-    int32_t paraStart;
-
-    /* check the argument values */
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    RETURN_VOID_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode);
-    RETURN_VOID_IF_BAD_RANGE(paraIndex, 0, pBiDi->paraCount, *pErrorCode);
-
-    pBiDi=pBiDi->pParaBiDi;             /* get Para object if Line object */
-    if(paraIndex) {
-        paraStart=pBiDi->paras[paraIndex-1];
-    } else {
-        paraStart=0;
-    }
-    if(pParaStart!=NULL) {
-        *pParaStart=paraStart;
-    }
-    if(pParaLimit!=NULL) {
-        *pParaLimit=pBiDi->paras[paraIndex];
-    }
-    if(pParaLevel!=NULL) {
-        *pParaLevel=GET_PARALEVEL(pBiDi, paraStart);
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex,
-                          int32_t *pParaStart, int32_t *pParaLimit,
-                          UBiDiLevel *pParaLevel, UErrorCode *pErrorCode) {
-    uint32_t paraIndex;
-
-    /* check the argument values */
-    /* pErrorCode will be checked by the call to ubidi_getParagraphByIndex */
-    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
-    pBiDi=pBiDi->pParaBiDi;             /* get Para object if Line object */
-    RETURN_IF_BAD_RANGE(charIndex, 0, pBiDi->length, *pErrorCode, -1);
-
-    for(paraIndex=0; charIndex>=pBiDi->paras[paraIndex]; paraIndex++);
-    ubidi_getParagraphByIndex(pBiDi, paraIndex, pParaStart, pParaLimit, pParaLevel, pErrorCode);
-    return paraIndex;
-}
-
-U_CAPI void U_EXPORT2
-ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
-                       const void *newContext, UBiDiClassCallback **oldFn,
-                       const void **oldContext, UErrorCode *pErrorCode)
-{
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(pBiDi==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if( oldFn )
-    {
-        *oldFn = pBiDi->fnClassCallback;
-    }
-    if( oldContext )
-    {
-        *oldContext = pBiDi->coClassCallback;
-    }
-    pBiDi->fnClassCallback = newFn;
-    pBiDi->coClassCallback = newContext;
-}
-
-U_CAPI void U_EXPORT2
-ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context)
-{
-    if(pBiDi==NULL) {
-        return;
-    }
-    if( fn )
-    {
-        *fn = pBiDi->fnClassCallback;
-    }
-    if( context )
-    {
-        *context = pBiDi->coClassCallback;
-    }
-}
-
-U_CAPI UCharDirection U_EXPORT2
-ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c)
-{
-    UCharDirection dir;
-
-    if( pBiDi->fnClassCallback == NULL ||
-        (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_CLASS_DEFAULT )
-    {
-        return ubidi_getClass(pBiDi->bdp, c);
-    } else {
-        return dir;
-    }
-}
-
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidi_props.c b/src/third_party/mozjs/intl/icu/source/common/ubidi_props.c
deleted file mode 100644
index e6f1974..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidi_props.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2004-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  ubidi_props.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2004dec30
-*   created by: Markus W. Scherer
-*
-*   Low-level Unicode bidi/shaping properties access.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/uset.h"
-#include "unicode/udata.h" /* UDataInfo */
-#include "ucmndata.h" /* DataHeader */
-#include "udatamem.h"
-#include "uassert.h"
-#include "cmemory.h"
-#include "utrie2.h"
-#include "ubidi_props.h"
-#include "ucln_cmn.h"
-
-struct UBiDiProps {
-    UDataMemory *mem;
-    const int32_t *indexes;
-    const uint32_t *mirrors;
-    const uint8_t *jgArray;
-
-    UTrie2 trie;
-    uint8_t formatVersion[4];
-};
-
-/* ubidi_props_data.h is machine-generated by genbidi --csource */
-#define INCLUDED_FROM_UBIDI_PROPS_C
-#include "ubidi_props_data.h"
-
-/* UBiDiProps singleton ----------------------------------------------------- */
-
-U_CFUNC const UBiDiProps *
-ubidi_getSingleton() {
-    return &ubidi_props_singleton;
-}
-
-/* set of property starts for UnicodeSet ------------------------------------ */
-
-static UBool U_CALLCONV
-_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 end, uint32_t value) {
-    /* add the start code point to the USet */
-    const USetAdder *sa=(const USetAdder *)context;
-    sa->add(sa->set, start);
-    return TRUE;
-}
-
-U_CFUNC void
-ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode) {
-    int32_t i, length;
-    UChar32 c, start, limit;
-
-    const uint8_t *jgArray;
-    uint8_t prev, jg;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /* add the start code point of each same-value range of the trie */
-    utrie2_enum(&bdp->trie, NULL, _enumPropertyStartsRange, sa);
-
-    /* add the code points from the bidi mirroring table */
-    length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH];
-    for(i=0; i<length; ++i) {
-        c=UBIDI_GET_MIRROR_CODE_POINT(bdp->mirrors[i]);
-        sa->addRange(sa->set, c, c+1);
-    }
-
-    /* add the code points from the Joining_Group array where the value changes */
-    start=bdp->indexes[UBIDI_IX_JG_START];
-    limit=bdp->indexes[UBIDI_IX_JG_LIMIT];
-    jgArray=bdp->jgArray;
-    prev=0;
-    while(start<limit) {
-        jg=*jgArray++;
-        if(jg!=prev) {
-            sa->add(sa->set, start);
-            prev=jg;
-        }
-        ++start;
-    }
-    if(prev!=0) {
-        /* add the limit code point if the last value was not 0 (it is now start==limit) */
-        sa->add(sa->set, limit);
-    }
-
-    /* add code points with hardcoded properties, plus the ones following them */
-
-    /* (none right now) */
-}
-
-/* property access functions ------------------------------------------------ */
-
-U_CFUNC int32_t
-ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which) {
-    int32_t max;
-
-    if(bdp==NULL) {
-        return -1;
-    }
-
-    max=bdp->indexes[UBIDI_MAX_VALUES_INDEX];
-    switch(which) {
-    case UCHAR_BIDI_CLASS:
-        return (max&UBIDI_CLASS_MASK);
-    case UCHAR_JOINING_GROUP:
-        return (max&UBIDI_MAX_JG_MASK)>>UBIDI_MAX_JG_SHIFT;
-    case UCHAR_JOINING_TYPE:
-        return (max&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT;
-    default:
-        return -1; /* undefined */
-    }
-}
-
-U_CAPI UCharDirection
-ubidi_getClass(const UBiDiProps *bdp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&bdp->trie, c);
-    return (UCharDirection)UBIDI_GET_CLASS(props);
-}
-
-U_CFUNC UBool
-ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&bdp->trie, c);
-    return (UBool)UBIDI_GET_FLAG(props, UBIDI_IS_MIRRORED_SHIFT);
-}
-
-U_CFUNC UChar32
-ubidi_getMirror(const UBiDiProps *bdp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&bdp->trie, c);
-    int32_t delta=((int16_t)props)>>UBIDI_MIRROR_DELTA_SHIFT;
-    if(delta!=UBIDI_ESC_MIRROR_DELTA) {
-        return c+delta;
-    } else {
-        /* look for mirror code point in the mirrors[] table */
-        const uint32_t *mirrors;
-        uint32_t m;
-        int32_t i, length;
-        UChar32 c2;
-
-        mirrors=bdp->mirrors;
-        length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH];
-
-        /* linear search */
-        for(i=0; i<length; ++i) {
-            m=mirrors[i];
-            c2=UBIDI_GET_MIRROR_CODE_POINT(m);
-            if(c==c2) {
-                /* found c, return its mirror code point using the index in m */
-                return UBIDI_GET_MIRROR_CODE_POINT(mirrors[UBIDI_GET_MIRROR_INDEX(m)]);
-            } else if(c<c2) {
-                break;
-            }
-        }
-
-        /* c not found, return it itself */
-        return c;
-    }
-}
-
-U_CFUNC UBool
-ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&bdp->trie, c);
-    return (UBool)UBIDI_GET_FLAG(props, UBIDI_BIDI_CONTROL_SHIFT);
-}
-
-U_CFUNC UBool
-ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&bdp->trie, c);
-    return (UBool)UBIDI_GET_FLAG(props, UBIDI_JOIN_CONTROL_SHIFT);
-}
-
-U_CFUNC UJoiningType
-ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&bdp->trie, c);
-    return (UJoiningType)((props&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT);
-}
-
-U_CFUNC UJoiningGroup
-ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c) {
-    UChar32 start, limit;
-
-    start=bdp->indexes[UBIDI_IX_JG_START];
-    limit=bdp->indexes[UBIDI_IX_JG_LIMIT];
-    if(start<=c && c<limit) {
-        return (UJoiningGroup)bdp->jgArray[c-start];
-    } else {
-        return U_JG_NO_JOINING_GROUP;
-    }
-}
-
-/* public API (see uchar.h) ------------------------------------------------- */
-
-U_CFUNC UCharDirection
-u_charDirection(UChar32 c) {   
-    return ubidi_getClass(&ubidi_props_singleton, c);
-}
-
-U_CFUNC UBool
-u_isMirrored(UChar32 c) {
-    return ubidi_isMirrored(&ubidi_props_singleton, c);
-}
-
-U_CFUNC UChar32
-u_charMirror(UChar32 c) {
-    return ubidi_getMirror(&ubidi_props_singleton, c);
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidi_props.h b/src/third_party/mozjs/intl/icu/source/common/ubidi_props.h
deleted file mode 100644
index 9e28e32..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidi_props.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  ubidi_props.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2004dec30
-*   created by: Markus W. Scherer
-*
-*   Low-level Unicode bidi/shaping properties access.
-*/
-
-#ifndef __UBIDI_PROPS_H__
-#define __UBIDI_PROPS_H__
-
-#include "unicode/utypes.h"
-#include "unicode/uset.h"
-#include "uset_imp.h"
-#include "udataswp.h"
-
-U_CDECL_BEGIN
-
-/* library API -------------------------------------------------------------- */
-
-struct UBiDiProps;
-typedef struct UBiDiProps UBiDiProps;
-
-U_CFUNC const UBiDiProps *
-ubidi_getSingleton(void);
-
-U_CFUNC void
-ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode);
-
-/* property access functions */
-
-U_CFUNC int32_t
-ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which);
-
-U_CAPI UCharDirection
-ubidi_getClass(const UBiDiProps *bdp, UChar32 c);
-
-U_CFUNC UBool
-ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c);
-
-U_CFUNC UChar32
-ubidi_getMirror(const UBiDiProps *bdp, UChar32 c);
-
-U_CFUNC UBool
-ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c);
-
-U_CFUNC UBool
-ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c);
-
-U_CFUNC UJoiningType
-ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c);
-
-U_CFUNC UJoiningGroup
-ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c);
-
-/* file definitions --------------------------------------------------------- */
-
-#define UBIDI_DATA_NAME "ubidi"
-#define UBIDI_DATA_TYPE "icu"
-
-/* format "BiDi" */
-#define UBIDI_FMT_0 0x42
-#define UBIDI_FMT_1 0x69
-#define UBIDI_FMT_2 0x44
-#define UBIDI_FMT_3 0x69
-
-/* indexes into indexes[] */
-enum {
-    UBIDI_IX_INDEX_TOP,
-    UBIDI_IX_LENGTH,
-    UBIDI_IX_TRIE_SIZE,
-    UBIDI_IX_MIRROR_LENGTH,
-
-    UBIDI_IX_JG_START,
-    UBIDI_IX_JG_LIMIT,
-
-    UBIDI_MAX_VALUES_INDEX=15,
-    UBIDI_IX_TOP=16
-};
-
-/* definitions for 16-bit bidi/shaping properties word ---------------------- */
-
-enum {
- /* UBIDI_CLASS_SHIFT=0, */     /* bidi class: 5 bits (4..0) */
-    UBIDI_JT_SHIFT=5,           /* joining type: 3 bits (7..5) */
-
-    /* UBIDI__SHIFT=8, reserved: 2 bits (9..8) */
-
-    UBIDI_JOIN_CONTROL_SHIFT=10,
-    UBIDI_BIDI_CONTROL_SHIFT=11,
-
-    UBIDI_IS_MIRRORED_SHIFT=12,         /* 'is mirrored' */
-    UBIDI_MIRROR_DELTA_SHIFT=13,        /* bidi mirroring delta: 3 bits (15..13) */
-
-    UBIDI_MAX_JG_SHIFT=16               /* max JG value in indexes[UBIDI_MAX_VALUES_INDEX] bits 23..16 */
-};
-
-#define UBIDI_CLASS_MASK        0x0000001f
-#define UBIDI_JT_MASK           0x000000e0
-
-#define UBIDI_MAX_JG_MASK       0x00ff0000
-
-#define UBIDI_GET_CLASS(props) ((props)&UBIDI_CLASS_MASK)
-#define UBIDI_GET_FLAG(props, shift) (((props)>>(shift))&1)
-
-enum {
-    UBIDI_ESC_MIRROR_DELTA=-4,
-    UBIDI_MIN_MIRROR_DELTA=-3,
-    UBIDI_MAX_MIRROR_DELTA=3
-};
-
-/* definitions for 32-bit mirror table entry -------------------------------- */
-
-enum {
-    /* the source Unicode code point takes 21 bits (20..0) */
-    UBIDI_MIRROR_INDEX_SHIFT=21,
-    UBIDI_MAX_MIRROR_INDEX=0x7ff
-};
-
-#define UBIDI_GET_MIRROR_CODE_POINT(m) (UChar32)((m)&0x1fffff)
-
-#define UBIDI_GET_MIRROR_INDEX(m) ((m)>>UBIDI_MIRROR_INDEX_SHIFT)
-
-U_CDECL_END
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidi_props_data.h b/src/third_party/mozjs/intl/icu/source/common/ubidi_props_data.h
deleted file mode 100644
index e5d12b6..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidi_props_data.h
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
- * Copyright (C) 1999-2012, International Business Machines
- * Corporation and others.  All Rights Reserved.
- *
- * file name: ubidi_props_data.h
- *
- * machine-generated by: icu/tools/unicode/c/genprops/bidipropsbuilder.cpp
- */
-
-#ifndef INCLUDED_FROM_UBIDI_PROPS_C
-#   error This file must be #included from ubidi_props.c only.
-#endif
-
-static const UVersionInfo ubidi_props_dataVersion={6,2,0,0};
-
-static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x5318,0x4fe0,0x1a,0x620,0x8b0,0,0,0,0,0,0,0,0,0,0x3900b2};
-
-static const uint16_t ubidi_props_trieIndex[10216]={
-0x320,0x328,0x330,0x338,0x350,0x358,0x360,0x368,0x340,0x348,0x340,0x348,0x340,0x348,0x340,0x348,
-0x340,0x348,0x340,0x348,0x36e,0x376,0x37e,0x386,0x38e,0x396,0x392,0x39a,0x3a2,0x3aa,0x3a5,0x3ad,
-0x340,0x348,0x340,0x348,0x3b5,0x3bd,0x340,0x348,0x340,0x348,0x340,0x348,0x3c3,0x3cb,0x3d3,0x3db,
-0x3e3,0x3eb,0x3f3,0x3fb,0x401,0x409,0x411,0x419,0x421,0x429,0x42f,0x437,0x43f,0x447,0x44f,0x457,
-0x463,0x45f,0x46b,0x3d5,0x3d5,0x473,0x43f,0x47a,0x482,0x484,0x48c,0x494,0x49c,0x49d,0x4a5,0x4ad,
-0x4b5,0x49d,0x4bd,0x4c2,0x4b5,0x49d,0x4ca,0x4d2,0x49c,0x4d7,0x4df,0x494,0x4e4,0x340,0x4ec,0x4f0,
-0x340,0x4f7,0x4ff,0x507,0x340,0x50f,0x517,0x494,0x340,0x340,0x4a5,0x494,0x340,0x340,0x51d,0x340,
-0x340,0x523,0x52b,0x340,0x340,0x52f,0x537,0x340,0x53b,0x542,0x340,0x54a,0x552,0x559,0x4e3,0x340,
-0x340,0x561,0x569,0x571,0x579,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x581,0x340,0x589,0x340,0x340,0x340,
-0x591,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x599,0x340,0x340,0x340,0x5a1,0x5a1,0x4a9,0x4a9,0x340,0x5a7,0x5af,0x589,
-0x5b7,0x340,0x340,0x340,0x340,0x49a,0x340,0x340,0x340,0x5bf,0x5c7,0x340,0x340,0x340,0x5c9,0x5d1,
-0x5d9,0x340,0x5e0,0x5e8,0x340,0x340,0x340,0x340,0x5f0,0x5f3,0x4e4,0x5fb,0x3b7,0x603,0x340,0x60a,
-0x340,0x60f,0x340,0x340,0x340,0x340,0x615,0x61d,0x340,0x340,0x340,0x340,0x340,0x340,0x38e,0x625,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x62d,0x635,0x639,
-0x651,0x657,0x641,0x649,0x65f,0x667,0x66e,0x55c,0x676,0x67e,0x686,0x340,0x68e,0x5d1,0x5d1,0x5d1,
-0x69e,0x6a6,0x6ae,0x6b6,0x6bb,0x6c3,0x6cb,0x696,0x6d3,0x6db,0x340,0x6e1,0x6e8,0x5d1,0x5d1,0x5d4,
-0x5d1,0x50d,0x6ee,0x5d1,0x6f6,0x340,0x340,0x5ce,0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,
-0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,0x6fe,0x5d1,0x5d1,0x701,0x5d1,0x5d1,0x707,0x5d1,0x5d1,0x70f,0x717,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x5d1,0x5d1,0x5d1,0x5d1,0x727,0x72e,0x736,0x71f,
-0x746,0x74e,0x756,0x75d,0x765,0x76d,0x774,0x73e,0x5d1,0x5d1,0x77c,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x783,0x340,0x340,0x340,0x78b,0x340,0x340,0x340,0x38e,
-0x793,0x79b,0x340,0x340,0x7a3,0x5d1,0x5d1,0x5d4,0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,0x5d1,0x7aa,0x7b0,
-0x7c0,0x7b8,0x340,0x340,0x7c8,0x591,0x340,0x367,0x340,0x340,0x340,0x340,0x340,0x340,0x5d1,0x78a,
-0x375,0x340,0x7d0,0x7d8,0x340,0x7e0,0x7e8,0x340,0x340,0x340,0x340,0x7ec,0x340,0x340,0x5c9,0x366,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x5d1,0x5d1,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x7d0,0x5d1,0x50d,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x7f3,0x340,0x340,0x7f8,0x78b,0x340,0x340,0x53d,0x5d1,0x5c8,0x340,0x340,0x800,0x340,0x340,0x340,
-0x808,0x80f,0x340,0x816,0x340,0x340,0x81d,0x825,0x340,0x82c,0x833,0x340,0x482,0x838,0x340,0x340,
-0x340,0x840,0x848,0x340,0x340,0x84c,0x49c,0x854,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x85b,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x86f,0x863,0x867,0x43f,0x43f,0x43f,0x43f,0x43f,
-0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x877,0x43f,0x43f,0x43f,0x43f,0x87f,0x883,
-0x88b,0x893,0x897,0x89f,0x43f,0x43f,0x43f,0x8a3,0x8ab,0x330,0x8b3,0x8bb,0x340,0x340,0x340,0x8c3,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0xd00,0xd00,0xd40,0xd80,0xd00,0xd00,0xd00,0xd00,0xd00,0xd00,0xdb8,0xdf8,0xe38,0xe48,0xe88,0xe94,
-0xd00,0xd00,0xed4,0xd00,0xd00,0xd00,0xf0c,0xf4c,0xf8c,0xfcc,0x1004,0x1044,0x1084,0x10bc,0x10fc,0x113c,
-0xa40,0xa80,0xac0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xaf6,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb33,0x1a0,0x1a0,0xb73,0xbb3,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0xc2f,0xc3f,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xbef,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x8cb,0x340,0x5d1,0x5d1,0x8d3,0x340,0x340,0x495,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x8db,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x8e3,0x8e7,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x8ef,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x8f7,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x49c,0x81f,0x8ff,0x6df,0x3b7,0x907,0x340,0x340,0x482,0x90f,0x340,0x340,0x3b7,0x915,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x91d,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x923,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x92a,0x932,
-0x938,0x340,0x340,0x5d1,0x5d1,0x940,0x340,0x340,0x340,0x340,0x340,0x5d1,0x5d1,0x948,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x94e,0x340,0x955,0x340,0x951,0x340,0x958,
-0x340,0x960,0x964,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x96c,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x5d1,0x79f,0x5d1,0x5d1,0x5d4,0x97c,0x984,0x340,0x974,0x340,0x340,0x98c,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x5d1,0x994,0x5d1,0x99a,0x5d4,
-0x5d1,0x9a2,0x9aa,0x5d1,0x9b2,0x9ba,0x5d1,0x5d1,0x5d1,0x5d1,0x9bc,0x5d1,0x9c4,0x9cc,0x7d6,0x340,
-0x340,0x340,0x6e1,0x5d1,0x5d1,0x9d4,0x340,0x5d1,0x5d1,0x6df,0x340,0x5d1,0x5d1,0x5d1,0x5d4,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,
-0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x9d8,0x9e8,
-0x9e0,0x9e0,0x9e0,0x9e9,0x9e9,0x9e9,0x9e9,0x38e,0x38e,0x38e,0x38e,0x38e,0x38e,0x38e,0x9f1,0x9e9,
-0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,
-0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,
-0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,
-0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x9e9,0x31f,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,
-9,0xa,0xa,4,4,4,0xa,0xa,0x300a,0xf00a,0xa,3,6,3,6,6,
-2,2,2,2,2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0x12,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x12,0x12,0x12,0x12,0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-6,0xa,4,4,4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,
-4,4,2,2,0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0,
-0,0,0,0,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xa,0,0,0,0,4,1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,
-0xb1,0xb1,1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,
-5,0xd,0xa,0xa,0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,
-0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,5,5,5,
-5,5,5,5,5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,
-0xd,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,
-0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
-0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d,0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,5,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,
-0xb1,0xb1,0x8d,0x8d,2,2,2,2,2,2,2,2,2,2,0x4d,0x4d,
-0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xad,0x8d,0xb1,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,
-0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,
-0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,
-0x8d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
-1,1,1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
-0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
-0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-1,1,0xa,0xa,0xa,0xa,0x21,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,
-1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,
-0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,0x41,0x41,
-0x81,0x41,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,
-0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,
-0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,
-0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,
-0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,0,0,0,0,
-0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,
-0,0xb1,0x300a,0xf00a,0x300a,0xf00a,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,
-0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,
-0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
-0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x300a,
-0xf00a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0,0,0,0,0,0,0,4,0,0xb1,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,9,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,
-0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
-0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0,0xa,0xa,0xa,0xa,6,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,
-0xb2,0xb2,0xb2,0xb2,2,0,0,0,2,2,2,2,2,2,3,3,
-0xa,0x300a,0xf00a,0,9,9,9,9,9,9,9,9,9,9,9,0xb2,
-0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,4,4,4,4,
-4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,2,2,2,2,
-2,2,2,2,2,2,3,3,0xa,0x300a,0xf00a,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,
-0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,
-0,0xa,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
-0,0,0xa,0xa,0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,
-0,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,
-0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,
-0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,
-0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa,
-0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,
-0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,
-0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,
-0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0x300a,
-0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,0xa,0xa,0xa,0x100a,
-0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,
-0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x700a,0x300a,0xf00a,0xb00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,
-0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,
-0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,
-0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,
-0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,
-0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,
-0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,
-0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,
-0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xa,0xa,0x300a,0xf00a,
-0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0xa,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
-0xa,0,0,0,0,0,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,
-9,0xa,0xa,0xa,0xa,0,0,0,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa,0xa,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,
-0,0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0,0,0,0xb1,0,0,0,0,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
-0,0xb1,0,0,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
-1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1,0xb1,1,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0,
-0xa,6,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,4,0xa,0xa,3,3,
-0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4,
-4,4,0xa,0xa,0x300a,0xf00a,0xa,3,6,3,6,6,2,2,2,2,
-2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0xa,0xa,
-0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1,
-1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xa0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,
-0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,
-0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0,0,0,0
-};
-
-static const uint32_t ubidi_props_mirrors[26]={
-0x2000ab,0xbb,0x2a02215,0x1202243,0x2802298,0x2c022a6,0x30022a8,0x2e022a9,0x32022ab,0x6022cd,0x1e022f2,0x20022f3,0x22022f4,0x24022f6,0x26022f7,0x14022fa,
-0x16022fb,0x18022fc,0x1a022fd,0x1c022fe,0x8029b8,0x4029f5,0xa02ade,0xe02ae3,0xc02ae4,0x1002ae5
-};
-
-static const uint8_t ubidi_props_jgArray[656]={
-0x2d,0,3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6,
-6,0x1f,0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0xb,0xb,0x37,0x37,0x37,
-0,9,0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0x1d,
-0,3,3,3,0,3,0x2c,0x2c,0x2d,4,4,4,4,4,4,4,
-4,0xd,0xd,0xd,0xd,0xd,0xd,0xd,6,6,6,6,6,6,6,6,
-6,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x23,0x23,0x23,0x21,0x21,0x28,
-1,9,9,9,9,9,9,0x1d,0x1d,0xb,0x26,0xb,0x13,0x13,0x13,0xb,
-0xb,0xb,0xb,0xb,0xb,0x16,0x16,0x16,0x16,0x1a,0x1a,0x1a,0x1a,0x38,0x15,0xd,
-0x2a,0x11,0x11,0xe,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x37,0x2f,0x37,0x2c,
-0x2d,0x2d,0x2e,0x2e,0,0x2a,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0x1f,
-0,0,0,0,0,0,0,0,0,0,0x23,0x21,1,0,0,0x15,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,5,0xc,0xc,7,7,0xf,0x27,0x32,0x12,0x2b,0x2b,0x30,0x31,0x14,
-0x17,0x19,0x1b,0x24,0xa,8,0x1c,0x20,0x22,0x1e,7,0x25,0x29,5,0xc,7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x35,0x34,0x33,
-4,4,4,4,4,4,4,0xd,0xd,6,6,0x1f,0x23,1,1,1,
-9,9,0xb,0xb,0xb,0x18,0x18,0x1a,0x1a,0x1a,0x16,0x1f,0x1f,0x23,0xd,0xd,
-0x23,0x1f,0xd,3,3,0x37,0x37,0x2d,0x2c,0x2c,0x36,0x36,0xd,0x23,0x23,0x13,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,0,0xd,0x28,9,0x1d,0x16,0x18,0x2d,0x2d,0x1f,0x2c,0x39,0,0,0
-};
-
-static const UBiDiProps ubidi_props_singleton={
-  NULL,
-  ubidi_props_indexes,
-  ubidi_props_mirrors,
-  ubidi_props_jgArray,
-  {
-    ubidi_props_trieIndex,
-    ubidi_props_trieIndex+3200,
-    NULL,
-    3200,
-    7016,
-    0x1a0,
-    0xd00,
-    0x0,
-    0x0,
-    0x110000,
-    0x27e4,
-    NULL, 0, FALSE, FALSE, 0, NULL
-  },
-  { 2,0,0,0 }
-};
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidiimp.h b/src/third_party/mozjs/intl/icu/source/common/ubidiimp.h
deleted file mode 100644
index 4103b29..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidiimp.h
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  ubidiimp.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999aug06
-*   created by: Markus W. Scherer, updated by Matitiahu Allouche
-*/
-
-#ifndef UBIDIIMP_H
-#define UBIDIIMP_H
-
-/* set import/export definitions */
-#ifdef U_COMMON_IMPLEMENTATION
-
-#include "unicode/utypes.h"
-#include "unicode/uchar.h"
-#include "ubidi_props.h"
-
-/* miscellaneous definitions ---------------------------------------------- */
-
-typedef uint8_t DirProp;
-typedef uint32_t Flags;
-
-/*  Comparing the description of the BiDi algorithm with this implementation
-    is easier with the same names for the BiDi types in the code as there.
-    See UCharDirection in uchar.h .
-*/
-enum {
-    L=  U_LEFT_TO_RIGHT,
-    R=  U_RIGHT_TO_LEFT,
-    EN= U_EUROPEAN_NUMBER,
-    ES= U_EUROPEAN_NUMBER_SEPARATOR,
-    ET= U_EUROPEAN_NUMBER_TERMINATOR,
-    AN= U_ARABIC_NUMBER,
-    CS= U_COMMON_NUMBER_SEPARATOR,
-    B=  U_BLOCK_SEPARATOR,
-    S=  U_SEGMENT_SEPARATOR,
-    WS= U_WHITE_SPACE_NEUTRAL,
-    ON= U_OTHER_NEUTRAL,
-    LRE=U_LEFT_TO_RIGHT_EMBEDDING,
-    LRO=U_LEFT_TO_RIGHT_OVERRIDE,
-    AL= U_RIGHT_TO_LEFT_ARABIC,
-    RLE=U_RIGHT_TO_LEFT_EMBEDDING,
-    RLO=U_RIGHT_TO_LEFT_OVERRIDE,
-    PDF=U_POP_DIRECTIONAL_FORMAT,
-    NSM=U_DIR_NON_SPACING_MARK,
-    BN= U_BOUNDARY_NEUTRAL,
-    dirPropCount
-};
-
-/*
- * Sometimes, bit values are more appropriate
- * to deal with directionality properties.
- * Abbreviations in these macro names refer to names
- * used in the BiDi algorithm.
- */
-#define DIRPROP_FLAG(dir) (1UL<<(dir))
-
-/* special flag for multiple runs from explicit embedding codes */
-#define DIRPROP_FLAG_MULTI_RUNS (1UL<<31)
-
-/* are there any characters that are LTR or RTL? */
-#define MASK_LTR (DIRPROP_FLAG(L)|DIRPROP_FLAG(EN)|DIRPROP_FLAG(AN)|DIRPROP_FLAG(LRE)|DIRPROP_FLAG(LRO))
-#define MASK_RTL (DIRPROP_FLAG(R)|DIRPROP_FLAG(AL)|DIRPROP_FLAG(RLE)|DIRPROP_FLAG(RLO))
-#define MASK_R_AL (DIRPROP_FLAG(R)|DIRPROP_FLAG(AL))
-
-/* explicit embedding codes */
-#define MASK_LRX (DIRPROP_FLAG(LRE)|DIRPROP_FLAG(LRO))
-#define MASK_RLX (DIRPROP_FLAG(RLE)|DIRPROP_FLAG(RLO))
-#define MASK_OVERRIDE (DIRPROP_FLAG(LRO)|DIRPROP_FLAG(RLO))
-
-#define MASK_EXPLICIT (MASK_LRX|MASK_RLX|DIRPROP_FLAG(PDF))
-#define MASK_BN_EXPLICIT (DIRPROP_FLAG(BN)|MASK_EXPLICIT)
-
-/* paragraph and segment separators */
-#define MASK_B_S (DIRPROP_FLAG(B)|DIRPROP_FLAG(S))
-
-/* all types that are counted as White Space or Neutral in some steps */
-#define MASK_WS (MASK_B_S|DIRPROP_FLAG(WS)|MASK_BN_EXPLICIT)
-#define MASK_N (DIRPROP_FLAG(ON)|MASK_WS)
-
-/* all types that are included in a sequence of European Terminators for (W5) */
-#define MASK_ET_NSM_BN (DIRPROP_FLAG(ET)|DIRPROP_FLAG(NSM)|MASK_BN_EXPLICIT)
-
-/* types that are neutrals or could becomes neutrals in (Wn) */
-#define MASK_POSSIBLE_N (DIRPROP_FLAG(CS)|DIRPROP_FLAG(ES)|DIRPROP_FLAG(ET)|MASK_N)
-
-/*
- * These types may be changed to "e",
- * the embedding type (L or R) of the run,
- * in the BiDi algorithm (N2)
- */
-#define MASK_EMBEDDING (DIRPROP_FLAG(NSM)|MASK_POSSIBLE_N)
-
-/* the dirProp's L and R are defined to 0 and 1 values in UCharDirection */
-#define GET_LR_FROM_LEVEL(level) ((DirProp)((level)&1))
-
-#define IS_DEFAULT_LEVEL(level) ((level)>=0xfe)
-
-/*
- * The following bit is ORed to the property of characters in paragraphs
- * with contextual RTL direction when paraLevel is contextual.
- */
-#define CONTEXT_RTL 0x80
-#define NO_CONTEXT_RTL(dir) ((dir)&~CONTEXT_RTL)
-/*
- * The following is a variant of DIRPROP_FLAG which ignores the CONTEXT_RTL bit.
- */
-#define DIRPROP_FLAG_NC(dir) (1UL<<(NO_CONTEXT_RTL(dir)))
-
-#define GET_PARALEVEL(ubidi, index) \
-            (UBiDiLevel)((ubidi)->defaultParaLevel ? (ubidi)->dirProps[index]>>7 \
-                                                   : (ubidi)->paraLevel)
-
-/* Paragraph type for multiple paragraph support ---------------------------- */
-typedef int32_t Para;
-
-#define CR  0x000D
-#define LF  0x000A
-
-/* Run structure for reordering --------------------------------------------- */
-enum {
-    LRM_BEFORE=1,
-    LRM_AFTER=2,
-    RLM_BEFORE=4,
-    RLM_AFTER=8
-};
-
-typedef struct Run {
-    int32_t logicalStart,   /* first character of the run; b31 indicates even/odd level */
-            visualLimit,    /* last visual position of the run +1 */
-            insertRemove;   /* if >0, flags for inserting LRM/RLM before/after run,
-                               if <0, count of bidi controls within run            */
-} Run;
-
-/* in a Run, logicalStart will get this bit set if the run level is odd */
-#define INDEX_ODD_BIT (1UL<<31)
-
-#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((int32_t)(level)<<31))
-#define ADD_ODD_BIT_FROM_LEVEL(x, level)  ((x)|=((int32_t)(level)<<31))
-#define REMOVE_ODD_BIT(x)                 ((x)&=~INDEX_ODD_BIT)
-
-#define GET_INDEX(x)   ((x)&~INDEX_ODD_BIT)
-#define GET_ODD_BIT(x) ((uint32_t)(x)>>31)
-#define IS_ODD_RUN(x)  ((UBool)(((x)&INDEX_ODD_BIT)!=0))
-#define IS_EVEN_RUN(x) ((UBool)(((x)&INDEX_ODD_BIT)==0))
-
-U_CFUNC UBool
-ubidi_getRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
-
-/** BiDi control code points */
-enum {
-    ZWNJ_CHAR=0x200c,
-    ZWJ_CHAR,
-    LRM_CHAR,
-    RLM_CHAR,
-    LRE_CHAR=0x202a,
-    RLE_CHAR,
-    PDF_CHAR,
-    LRO_CHAR,
-    RLO_CHAR
-};
-
-#define IS_BIDI_CONTROL_CHAR(c) (((uint32_t)(c)&0xfffffffc)==ZWNJ_CHAR || (uint32_t)((c)-LRE_CHAR)<5)
-
-/* InsertPoints structure for noting where to put BiDi marks ---------------- */
-
-typedef struct Point {
-    int32_t pos;            /* position in text */
-    int32_t flag;           /* flag for LRM/RLM, before/after */
-} Point;
-
-typedef struct InsertPoints {
-    int32_t capacity;       /* number of points allocated */
-    int32_t size;           /* number of points used */
-    int32_t confirmed;      /* number of points confirmed */
-    UErrorCode errorCode;   /* for eventual memory shortage */
-    Point *points;          /* pointer to array of points */
-} InsertPoints;
-
-
-/* UBiDi structure ----------------------------------------------------------- */
-
-struct UBiDi {
-    /* pointer to parent paragraph object (pointer to self if this object is
-     * a paragraph object); set to NULL in a newly opened object; set to a
-     * real value after a successful execution of ubidi_setPara or ubidi_setLine
-     */
-    const UBiDi * pParaBiDi;
-
-    const UBiDiProps *bdp;
-
-    /* alias pointer to the current text */
-    const UChar *text;
-
-    /* length of the current text */
-    int32_t originalLength;
-
-    /* if the UBIDI_OPTION_STREAMING option is set, this is the length
-     * of text actually processed by ubidi_setPara, which may be shorter than
-     * the original length.
-     * Otherwise, it is identical to the original length.
-     */
-    int32_t length;
-
-    /* if the UBIDI_OPTION_REMOVE_CONTROLS option is set, and/or
-     * marks are allowed to be inserted in one of the reordering mode, the
-     * length of the result string may be different from the processed length.
-     */
-    int32_t resultLength;
-
-    /* memory sizes in bytes */
-    int32_t dirPropsSize, levelsSize, parasSize, runsSize;
-
-    /* allocated memory */
-    DirProp *dirPropsMemory;
-    UBiDiLevel *levelsMemory;
-    Para *parasMemory;
-    Run *runsMemory;
-
-    /* indicators for whether memory may be allocated after ubidi_open() */
-    UBool mayAllocateText, mayAllocateRuns;
-
-    /* arrays with one value per text-character */
-    const DirProp *dirProps;
-    UBiDiLevel *levels;
-
-    /* are we performing an approximation of the "inverse BiDi" algorithm? */
-    UBool isInverse;
-
-    /* are we using the basic algorithm or its variation? */
-    UBiDiReorderingMode reorderingMode;
-
-    /* UBIDI_REORDER_xxx values must be ordered so that all the regular
-     * logical to visual modes come first, and all inverse BiDi modes
-     * come last.
-     */
-    #define UBIDI_REORDER_LAST_LOGICAL_TO_VISUAL    UBIDI_REORDER_NUMBERS_SPECIAL
-
-    /* bitmask for reordering options */
-    uint32_t reorderingOptions;
-
-    /* must block separators receive level 0? */
-    UBool orderParagraphsLTR;
-
-    /* the paragraph level */
-    UBiDiLevel paraLevel;
-    /* original paraLevel when contextual */
-    /* must be one of UBIDI_DEFAULT_xxx or 0 if not contextual */
-    UBiDiLevel defaultParaLevel;
-
-    /* context data */
-    const UChar *prologue;
-    int32_t proLength;
-    const UChar *epilogue;
-    int32_t epiLength;
-
-    /* the following is set in ubidi_setPara, used in processPropertySeq */
-    const struct ImpTabPair * pImpTabPair;  /* pointer to levels state table pair */
-
-    /* the overall paragraph or line directionality - see UBiDiDirection */
-    UBiDiDirection direction;
-
-    /* flags is a bit set for which directional properties are in the text */
-    Flags flags;
-
-    /* lastArabicPos is index to the last AL in the text, -1 if none */
-    int32_t lastArabicPos;
-
-    /* characters after trailingWSStart are WS and are */
-    /* implicitly at the paraLevel (rule (L1)) - levels may not reflect that */
-    int32_t trailingWSStart;
-
-    /* fields for paragraph handling */
-    int32_t paraCount;                  /* set in getDirProps() */
-    Para *paras;                        /* limits of paragraphs, filled in
-                            ResolveExplicitLevels() or CheckExplicitLevels() */
-
-    /* for single paragraph text, we only need a tiny array of paras (no malloc()) */
-    Para simpleParas[1];
-
-    /* fields for line reordering */
-    int32_t runCount;     /* ==-1: runs not set up yet */
-    Run *runs;
-
-    /* for non-mixed text, we only need a tiny array of runs (no malloc()) */
-    Run simpleRuns[1];
-
-    /* for inverse Bidi with insertion of directional marks */
-    InsertPoints insertPoints;
-
-    /* for option UBIDI_OPTION_REMOVE_CONTROLS */
-    int32_t controlCount;
-
-    /* for Bidi class callback */
-    UBiDiClassCallback *fnClassCallback;    /* action pointer */
-    const void *coClassCallback;            /* context pointer */
-};
-
-#define IS_VALID_PARA(x) ((x) && ((x)->pParaBiDi==(x)))
-#define IS_VALID_PARA_OR_LINE(x) ((x) && ((x)->pParaBiDi==(x) || (((x)->pParaBiDi) && (x)->pParaBiDi->pParaBiDi==(x)->pParaBiDi)))
-
-typedef union {
-    DirProp *dirPropsMemory;
-    UBiDiLevel *levelsMemory;
-    Para *parasMemory;
-    Run *runsMemory;
-} BidiMemoryForAllocation;
-
-/* Macros for initial checks at function entry */
-#define RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrcode, retvalue)   \
-        if((pErrcode)==NULL || U_FAILURE(*pErrcode)) return retvalue
-#define RETURN_IF_NOT_VALID_PARA(bidi, errcode, retvalue)   \
-        if(!IS_VALID_PARA(bidi)) {  \
-            errcode=U_INVALID_STATE_ERROR;  \
-            return retvalue;                \
-        }
-#define RETURN_IF_NOT_VALID_PARA_OR_LINE(bidi, errcode, retvalue)   \
-        if(!IS_VALID_PARA_OR_LINE(bidi)) {  \
-            errcode=U_INVALID_STATE_ERROR;  \
-            return retvalue;                \
-        }
-#define RETURN_IF_BAD_RANGE(arg, start, limit, errcode, retvalue)   \
-        if((arg)<(start) || (arg)>=(limit)) {       \
-            (errcode)=U_ILLEGAL_ARGUMENT_ERROR;     \
-            return retvalue;                        \
-        }
-
-#define RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrcode)   \
-        if((pErrcode)==NULL || U_FAILURE(*pErrcode)) return
-#define RETURN_VOID_IF_NOT_VALID_PARA(bidi, errcode)   \
-        if(!IS_VALID_PARA(bidi)) {  \
-            errcode=U_INVALID_STATE_ERROR;  \
-            return;                \
-        }
-#define RETURN_VOID_IF_NOT_VALID_PARA_OR_LINE(bidi, errcode)   \
-        if(!IS_VALID_PARA_OR_LINE(bidi)) {  \
-            errcode=U_INVALID_STATE_ERROR;  \
-            return;                \
-        }
-#define RETURN_VOID_IF_BAD_RANGE(arg, start, limit, errcode)   \
-        if((arg)<(start) || (arg)>=(limit)) {       \
-            (errcode)=U_ILLEGAL_ARGUMENT_ERROR;     \
-            return;                        \
-        }
-
-/* helper function to (re)allocate memory if allowed */
-U_CFUNC UBool
-ubidi_getMemory(BidiMemoryForAllocation *pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded);
-
-/* helper macros for each allocated array in UBiDi */
-#define getDirPropsMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
-                        (pBiDi)->mayAllocateText, (length))
-
-#define getLevelsMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
-                        (pBiDi)->mayAllocateText, (length))
-
-#define getRunsMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
-                        (pBiDi)->mayAllocateRuns, (length)*sizeof(Run))
-
-/* additional macros used by ubidi_open() - always allow allocation */
-#define getInitialDirPropsMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
-                        TRUE, (length))
-
-#define getInitialLevelsMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
-                        TRUE, (length))
-
-#define getInitialParasMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->parasMemory, &(pBiDi)->parasSize, \
-                        TRUE, (length)*sizeof(Para))
-
-#define getInitialRunsMemory(pBiDi, length) \
-        ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
-                        TRUE, (length)*sizeof(Run))
-
-#endif
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidiln.c b/src/third_party/mozjs/intl/icu/source/common/ubidiln.c
deleted file mode 100644
index 518a54d..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidiln.c
+++ /dev/null
@@ -1,1351 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  ubidiln.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999aug06
-*   created by: Markus W. Scherer, updated by Matitiahu Allouche
-*/
-
-#include "cmemory.h"
-#include "unicode/utypes.h"
-#include "unicode/ustring.h"
-#include "unicode/uchar.h"
-#include "unicode/ubidi.h"
-#include "ubidiimp.h"
-#include "uassert.h"
-
-#ifndef U_COMMON_IMPLEMENTATION
-#error U_COMMON_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see http://userguide.icu-project.org/howtouseicu
-#endif
-
-/*
- * General remarks about the functions in this file:
- *
- * These functions deal with the aspects of potentially mixed-directional
- * text in a single paragraph or in a line of a single paragraph
- * which has already been processed according to
- * the Unicode 3.0 BiDi algorithm as defined in
- * http://www.unicode.org/unicode/reports/tr9/ , version 13,
- * also described in The Unicode Standard, Version 4.0.1 .
- *
- * This means that there is a UBiDi object with a levels
- * and a dirProps array.
- * paraLevel and direction are also set.
- * Only if the length of the text is zero, then levels==dirProps==NULL.
- *
- * The overall directionality of the paragraph
- * or line is used to bypass the reordering steps if possible.
- * Even purely RTL text does not need reordering there because
- * the ubidi_getLogical/VisualIndex() functions can compute the
- * index on the fly in such a case.
- *
- * The implementation of the access to same-level-runs and of the reordering
- * do attempt to provide better performance and less memory usage compared to
- * a direct implementation of especially rule (L2) with an array of
- * one (32-bit) integer per text character.
- *
- * Here, the levels array is scanned as soon as necessary, and a vector of
- * same-level-runs is created. Reordering then is done on this vector.
- * For each run of text positions that were resolved to the same level,
- * only 8 bytes are stored: the first text position of the run and the visual
- * position behind the run after reordering.
- * One sign bit is used to hold the directionality of the run.
- * This is inefficient if there are many very short runs. If the average run
- * length is <2, then this uses more memory.
- *
- * In a further attempt to save memory, the levels array is never changed
- * after all the resolution rules (Xn, Wn, Nn, In).
- * Many functions have to consider the field trailingWSStart:
- * if it is less than length, then there is an implicit trailing run
- * at the paraLevel,
- * which is not reflected in the levels array.
- * This allows a line UBiDi object to use the same levels array as
- * its paragraph parent object.
- *
- * When a UBiDi object is created for a line of a paragraph, then the
- * paragraph's levels and dirProps arrays are reused by way of setting
- * a pointer into them, not by copying. This again saves memory and forbids to
- * change the now shared levels for (L1).
- */
-
-/* handle trailing WS (L1) -------------------------------------------------- */
-
-/*
- * setTrailingWSStart() sets the start index for a trailing
- * run of WS in the line. This is necessary because we do not modify
- * the paragraph's levels array that we just point into.
- * Using trailingWSStart is another form of performing (L1).
- *
- * To make subsequent operations easier, we also include the run
- * before the WS if it is at the paraLevel - we merge the two here.
- *
- * This function is called only from ubidi_setLine(), so pBiDi->paraLevel is
- * set correctly for the line even when contextual multiple paragraphs.
- */
-static void
-setTrailingWSStart(UBiDi *pBiDi) {
-    /* pBiDi->direction!=UBIDI_MIXED */
-
-    const DirProp *dirProps=pBiDi->dirProps;
-    UBiDiLevel *levels=pBiDi->levels;
-    int32_t start=pBiDi->length;
-    UBiDiLevel paraLevel=pBiDi->paraLevel;
-
-    /* If the line is terminated by a block separator, all preceding WS etc...
-       are already set to paragraph level.
-       Setting trailingWSStart to pBidi->length will avoid changing the
-       level of B chars from 0 to paraLevel in ubidi_getLevels when
-       orderParagraphsLTR==TRUE.
-     */
-    if(NO_CONTEXT_RTL(dirProps[start-1])==B) {
-        pBiDi->trailingWSStart=start;   /* currently == pBiDi->length */
-        return;
-    }
-    /* go backwards across all WS, BN, explicit codes */
-    while(start>0 && DIRPROP_FLAG_NC(dirProps[start-1])&MASK_WS) {
-        --start;
-    }
-
-    /* if the WS run can be merged with the previous run then do so here */
-    while(start>0 && levels[start-1]==paraLevel) {
-        --start;
-    }
-
-    pBiDi->trailingWSStart=start;
-}
-
-/* ubidi_setLine ------------------------------------------------------------ */
-
-U_CAPI void U_EXPORT2
-ubidi_setLine(const UBiDi *pParaBiDi,
-              int32_t start, int32_t limit,
-              UBiDi *pLineBiDi,
-              UErrorCode *pErrorCode) {
-    int32_t length;
-
-    /* check the argument values */
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    RETURN_VOID_IF_NOT_VALID_PARA(pParaBiDi, *pErrorCode);
-    RETURN_VOID_IF_BAD_RANGE(start, 0, limit, *pErrorCode);
-    RETURN_VOID_IF_BAD_RANGE(limit, 0, pParaBiDi->length+1, *pErrorCode);
-    if(pLineBiDi==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if(ubidi_getParagraph(pParaBiDi, start, NULL, NULL, NULL, pErrorCode) !=
-       ubidi_getParagraph(pParaBiDi, limit-1, NULL, NULL, NULL, pErrorCode)) {
-        /* the line crosses a paragraph boundary */
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    /* set the values in pLineBiDi from its pParaBiDi parent */
-    pLineBiDi->pParaBiDi=NULL;          /* mark unfinished setLine */
-    pLineBiDi->text=pParaBiDi->text+start;
-    length=pLineBiDi->length=limit-start;
-    pLineBiDi->resultLength=pLineBiDi->originalLength=length;
-    pLineBiDi->paraLevel=GET_PARALEVEL(pParaBiDi, start);
-    pLineBiDi->paraCount=pParaBiDi->paraCount;
-    pLineBiDi->runs=NULL;
-    pLineBiDi->flags=0;
-    pLineBiDi->reorderingMode=pParaBiDi->reorderingMode;
-    pLineBiDi->reorderingOptions=pParaBiDi->reorderingOptions;
-    pLineBiDi->controlCount=0;
-    if(pParaBiDi->controlCount>0) {
-        int32_t j;
-        for(j=start; j<limit; j++) {
-            if(IS_BIDI_CONTROL_CHAR(pParaBiDi->text[j])) {
-                pLineBiDi->controlCount++;
-            }
-        }
-        pLineBiDi->resultLength-=pLineBiDi->controlCount;
-    }
-
-    pLineBiDi->dirProps=pParaBiDi->dirProps+start;
-    pLineBiDi->levels=pParaBiDi->levels+start;
-    pLineBiDi->runCount=-1;
-
-    if(pParaBiDi->direction!=UBIDI_MIXED) {
-        /* the parent is already trivial */
-        pLineBiDi->direction=pParaBiDi->direction;
-
-        /*
-         * The parent's levels are all either
-         * implicitly or explicitly ==paraLevel;
-         * do the same here.
-         */
-        if(pParaBiDi->trailingWSStart<=start) {
-            pLineBiDi->trailingWSStart=0;
-        } else if(pParaBiDi->trailingWSStart<limit) {
-            pLineBiDi->trailingWSStart=pParaBiDi->trailingWSStart-start;
-        } else {
-            pLineBiDi->trailingWSStart=length;
-        }
-    } else {
-        const UBiDiLevel *levels=pLineBiDi->levels;
-        int32_t i, trailingWSStart;
-        UBiDiLevel level;
-
-        setTrailingWSStart(pLineBiDi);
-        trailingWSStart=pLineBiDi->trailingWSStart;
-
-        /* recalculate pLineBiDi->direction */
-        if(trailingWSStart==0) {
-            /* all levels are at paraLevel */
-            pLineBiDi->direction=(UBiDiDirection)(pLineBiDi->paraLevel&1);
-        } else {
-            /* get the level of the first character */
-            level=(UBiDiLevel)(levels[0]&1);
-
-            /* if there is anything of a different level, then the line is mixed */
-            if(trailingWSStart<length && (pLineBiDi->paraLevel&1)!=level) {
-                /* the trailing WS is at paraLevel, which differs from levels[0] */
-                pLineBiDi->direction=UBIDI_MIXED;
-            } else {
-                /* see if levels[1..trailingWSStart-1] have the same direction as levels[0] and paraLevel */
-                i=1;
-                for(;;) {
-                    if(i==trailingWSStart) {
-                        /* the direction values match those in level */
-                        pLineBiDi->direction=(UBiDiDirection)level;
-                        break;
-                    } else if((levels[i]&1)!=level) {
-                        pLineBiDi->direction=UBIDI_MIXED;
-                        break;
-                    }
-                    ++i;
-                }
-            }
-        }
-
-        switch(pLineBiDi->direction) {
-        case UBIDI_LTR:
-            /* make sure paraLevel is even */
-            pLineBiDi->paraLevel=(UBiDiLevel)((pLineBiDi->paraLevel+1)&~1);
-
-            /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
-            pLineBiDi->trailingWSStart=0;
-            break;
-        case UBIDI_RTL:
-            /* make sure paraLevel is odd */
-            pLineBiDi->paraLevel|=1;
-
-            /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
-            pLineBiDi->trailingWSStart=0;
-            break;
-        default:
-            break;
-        }
-    }
-    pLineBiDi->pParaBiDi=pParaBiDi;     /* mark successful setLine */
-    return;
-}
-
-U_CAPI UBiDiLevel U_EXPORT2
-ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex) {
-    /* return paraLevel if in the trailing WS run, otherwise the real level */
-    if(!IS_VALID_PARA_OR_LINE(pBiDi) || charIndex<0 || pBiDi->length<=charIndex) {
-        return 0;
-    } else if(pBiDi->direction!=UBIDI_MIXED || charIndex>=pBiDi->trailingWSStart) {
-        return GET_PARALEVEL(pBiDi, charIndex);
-    } else {
-        return pBiDi->levels[charIndex];
-    }
-}
-
-U_CAPI const UBiDiLevel * U_EXPORT2
-ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
-    int32_t start, length;
-
-    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, NULL);
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, NULL);
-    if((length=pBiDi->length)<=0) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    if((start=pBiDi->trailingWSStart)==length) {
-        /* the current levels array reflects the WS run */
-        return pBiDi->levels;
-    }
-
-    /*
-     * After the previous if(), we know that the levels array
-     * has an implicit trailing WS run and therefore does not fully
-     * reflect itself all the levels.
-     * This must be a UBiDi object for a line, and
-     * we need to create a new levels array.
-     */
-    if(getLevelsMemory(pBiDi, length)) {
-        UBiDiLevel *levels=pBiDi->levelsMemory;
-
-        if(start>0 && levels!=pBiDi->levels) {
-            uprv_memcpy(levels, pBiDi->levels, start);
-        }
-        /* pBiDi->paraLevel is ok even if contextual multiple paragraphs,
-           since pBidi is a line object                                     */
-        uprv_memset(levels+start, pBiDi->paraLevel, length-start);
-
-        /* this new levels array is set for the line and reflects the WS run */
-        pBiDi->trailingWSStart=length;
-        return pBiDi->levels=levels;
-    } else {
-        /* out of memory */
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
-                    int32_t *pLogicalLimit, UBiDiLevel *pLevel) {
-    UErrorCode errorCode;
-    int32_t runCount, visualStart, logicalLimit, logicalFirst, i;
-    Run iRun;
-
-    errorCode=U_ZERO_ERROR;
-    RETURN_VOID_IF_BAD_RANGE(logicalPosition, 0, pBiDi->length, errorCode);
-    /* ubidi_countRuns will check VALID_PARA_OR_LINE */
-    runCount=ubidi_countRuns((UBiDi *)pBiDi, &errorCode);
-    if(U_FAILURE(errorCode)) {
-        return;
-    }
-    /* this is done based on runs rather than on levels since levels have
-       a special interpretation when UBIDI_REORDER_RUNS_ONLY
-     */
-    visualStart=logicalLimit=0;
-    iRun=pBiDi->runs[0];
-
-    for(i=0; i<runCount; i++) {
-        iRun = pBiDi->runs[i];
-        logicalFirst=GET_INDEX(iRun.logicalStart);
-        logicalLimit=logicalFirst+iRun.visualLimit-visualStart;
-        if((logicalPosition>=logicalFirst) &&
-           (logicalPosition<logicalLimit)) {
-            break;
-        }
-        visualStart = iRun.visualLimit;
-    }
-    if(pLogicalLimit) {
-        *pLogicalLimit=logicalLimit;
-    }
-    if(pLevel) {
-        if(pBiDi->reorderingMode==UBIDI_REORDER_RUNS_ONLY) {
-            *pLevel=(UBiDiLevel)GET_ODD_BIT(iRun.logicalStart);
-        }
-        else if(pBiDi->direction!=UBIDI_MIXED || logicalPosition>=pBiDi->trailingWSStart) {
-            *pLevel=GET_PARALEVEL(pBiDi, logicalPosition);
-        } else {
-        *pLevel=pBiDi->levels[logicalPosition];
-        }
-    }
-}
-
-/* runs API functions ------------------------------------------------------- */
-
-U_CAPI int32_t U_EXPORT2
-ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) {
-    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
-    ubidi_getRuns(pBiDi, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return -1;
-    }
-    return pBiDi->runCount;
-}
-
-U_CAPI UBiDiDirection U_EXPORT2
-ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
-                   int32_t *pLogicalStart, int32_t *pLength)
-{
-    int32_t start;
-    UErrorCode errorCode = U_ZERO_ERROR;
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, errorCode, UBIDI_LTR);
-    ubidi_getRuns(pBiDi, &errorCode);
-    if(U_FAILURE(errorCode)) {
-        return UBIDI_LTR;
-    }
-    RETURN_IF_BAD_RANGE(runIndex, 0, pBiDi->runCount, errorCode, UBIDI_LTR);
-
-    start=pBiDi->runs[runIndex].logicalStart;
-    if(pLogicalStart!=NULL) {
-        *pLogicalStart=GET_INDEX(start);
-    }
-    if(pLength!=NULL) {
-        if(runIndex>0) {
-            *pLength=pBiDi->runs[runIndex].visualLimit-
-                     pBiDi->runs[runIndex-1].visualLimit;
-        } else {
-            *pLength=pBiDi->runs[0].visualLimit;
-        }
-    }
-    return (UBiDiDirection)GET_ODD_BIT(start);
-}
-
-/* in trivial cases there is only one trivial run; called by ubidi_getRuns() */
-static void
-getSingleRun(UBiDi *pBiDi, UBiDiLevel level) {
-    /* simple, single-run case */
-    pBiDi->runs=pBiDi->simpleRuns;
-    pBiDi->runCount=1;
-
-    /* fill and reorder the single run */
-    pBiDi->runs[0].logicalStart=MAKE_INDEX_ODD_PAIR(0, level);
-    pBiDi->runs[0].visualLimit=pBiDi->length;
-    pBiDi->runs[0].insertRemove=0;
-}
-
-/* reorder the runs array (L2) ---------------------------------------------- */
-
-/*
- * Reorder the same-level runs in the runs array.
- * Here, runCount>1 and maxLevel>=minLevel>=paraLevel.
- * All the visualStart fields=logical start before reordering.
- * The "odd" bits are not set yet.
- *
- * Reordering with this data structure lends itself to some handy shortcuts:
- *
- * Since each run is moved but not modified, and since at the initial maxLevel
- * each sequence of same-level runs consists of only one run each, we
- * don't need to do anything there and can predecrement maxLevel.
- * In many simple cases, the reordering is thus done entirely in the
- * index mapping.
- * Also, reordering occurs only down to the lowest odd level that occurs,
- * which is minLevel|1. However, if the lowest level itself is odd, then
- * in the last reordering the sequence of the runs at this level or higher
- * will be all runs, and we don't need the elaborate loop to search for them.
- * This is covered by ++minLevel instead of minLevel|=1 followed
- * by an extra reorder-all after the reorder-some loop.
- * About a trailing WS run:
- * Such a run would need special treatment because its level is not
- * reflected in levels[] if this is not a paragraph object.
- * Instead, all characters from trailingWSStart on are implicitly at
- * paraLevel.
- * However, for all maxLevel>paraLevel, this run will never be reordered
- * and does not need to be taken into account. maxLevel==paraLevel is only reordered
- * if minLevel==paraLevel is odd, which is done in the extra segment.
- * This means that for the main reordering loop we don't need to consider
- * this run and can --runCount. If it is later part of the all-runs
- * reordering, then runCount is adjusted accordingly.
- */
-static void
-reorderLine(UBiDi *pBiDi, UBiDiLevel minLevel, UBiDiLevel maxLevel) {
-    Run *runs, tempRun;
-    UBiDiLevel *levels;
-    int32_t firstRun, endRun, limitRun, runCount;
-
-    /* nothing to do? */
-    if(maxLevel<=(minLevel|1)) {
-        return;
-    }
-
-    /*
-     * Reorder only down to the lowest odd level
-     * and reorder at an odd minLevel in a separate, simpler loop.
-     * See comments above for why minLevel is always incremented.
-     */
-    ++minLevel;
-
-    runs=pBiDi->runs;
-    levels=pBiDi->levels;
-    runCount=pBiDi->runCount;
-
-    /* do not include the WS run at paraLevel<=old minLevel except in the simple loop */
-    if(pBiDi->trailingWSStart<pBiDi->length) {
-        --runCount;
-    }
-
-    while(--maxLevel>=minLevel) {
-        firstRun=0;
-
-        /* loop for all sequences of runs */
-        for(;;) {
-            /* look for a sequence of runs that are all at >=maxLevel */
-            /* look for the first run of such a sequence */
-            while(firstRun<runCount && levels[runs[firstRun].logicalStart]<maxLevel) {
-                ++firstRun;
-            }
-            if(firstRun>=runCount) {
-                break;  /* no more such runs */
-            }
-
-            /* look for the limit run of such a sequence (the run behind it) */
-            for(limitRun=firstRun; ++limitRun<runCount && levels[runs[limitRun].logicalStart]>=maxLevel;) {}
-
-            /* Swap the entire sequence of runs from firstRun to limitRun-1. */
-            endRun=limitRun-1;
-            while(firstRun<endRun) {
-                tempRun = runs[firstRun];
-                runs[firstRun]=runs[endRun];
-                runs[endRun]=tempRun;
-                ++firstRun;
-                --endRun;
-            }
-
-            if(limitRun==runCount) {
-                break;  /* no more such runs */
-            } else {
-                firstRun=limitRun+1;
-            }
-        }
-    }
-
-    /* now do maxLevel==old minLevel (==odd!), see above */
-    if(!(minLevel&1)) {
-        firstRun=0;
-
-        /* include the trailing WS run in this complete reordering */
-        if(pBiDi->trailingWSStart==pBiDi->length) {
-            --runCount;
-        }
-
-        /* Swap the entire sequence of all runs. (endRun==runCount) */
-        while(firstRun<runCount) {
-            tempRun=runs[firstRun];
-            runs[firstRun]=runs[runCount];
-            runs[runCount]=tempRun;
-            ++firstRun;
-            --runCount;
-        }
-    }
-}
-
-/* compute the runs array --------------------------------------------------- */
-
-static int32_t getRunFromLogicalIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) {
-    Run *runs=pBiDi->runs;
-    int32_t runCount=pBiDi->runCount, visualStart=0, i, length, logicalStart;
-
-    for(i=0; i<runCount; i++) {
-        length=runs[i].visualLimit-visualStart;
-        logicalStart=GET_INDEX(runs[i].logicalStart);
-        if((logicalIndex>=logicalStart) && (logicalIndex<(logicalStart+length))) {
-            return i;
-        }
-        visualStart+=length;
-    }
-    /* we should never get here */
-    U_ASSERT(FALSE);
-    *pErrorCode = U_INVALID_STATE_ERROR;
-    return 0;
-}
-
-/*
- * Compute the runs array from the levels array.
- * After ubidi_getRuns() returns TRUE, runCount is guaranteed to be >0
- * and the runs are reordered.
- * Odd-level runs have visualStart on their visual right edge and
- * they progress visually to the left.
- * If option UBIDI_OPTION_INSERT_MARKS is set, insertRemove will contain the
- * sum of appropriate LRM/RLM_BEFORE/AFTER flags.
- * If option UBIDI_OPTION_REMOVE_CONTROLS is set, insertRemove will contain the
- * negative number of BiDi control characters within this run.
- */
-U_CFUNC UBool
-ubidi_getRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) {
-    /*
-     * This method returns immediately if the runs are already set. This
-     * includes the case of length==0 (handled in setPara)..
-     */
-    if (pBiDi->runCount>=0) {
-        return TRUE;
-    }
-
-    if(pBiDi->direction!=UBIDI_MIXED) {
-        /* simple, single-run case - this covers length==0 */
-        /* pBiDi->paraLevel is ok even for contextual multiple paragraphs */
-        getSingleRun(pBiDi, pBiDi->paraLevel);
-    } else /* UBIDI_MIXED, length>0 */ {
-        /* mixed directionality */
-        int32_t length=pBiDi->length, limit;
-        UBiDiLevel *levels=pBiDi->levels;
-        int32_t i, runCount;
-        UBiDiLevel level=UBIDI_DEFAULT_LTR;   /* initialize with no valid level */
-        /*
-         * If there are WS characters at the end of the line
-         * and the run preceding them has a level different from
-         * paraLevel, then they will form their own run at paraLevel (L1).
-         * Count them separately.
-         * We need some special treatment for this in order to not
-         * modify the levels array which a line UBiDi object shares
-         * with its paragraph parent and its other line siblings.
-         * In other words, for the trailing WS, it may be
-         * levels[]!=paraLevel but we have to treat it like it were so.
-         */
-        limit=pBiDi->trailingWSStart;
-        /* count the runs, there is at least one non-WS run, and limit>0 */
-        runCount=0;
-        for(i=0; i<limit; ++i) {
-            /* increment runCount at the start of each run */
-            if(levels[i]!=level) {
-                ++runCount;
-                level=levels[i];
-            }
-        }
-
-        /*
-         * We don't need to see if the last run can be merged with a trailing
-         * WS run because setTrailingWSStart() would have done that.
-         */
-        if(runCount==1 && limit==length) {
-            /* There is only one non-WS run and no trailing WS-run. */
-            getSingleRun(pBiDi, levels[0]);
-        } else /* runCount>1 || limit<length */ {
-            /* allocate and set the runs */
-            Run *runs;
-            int32_t runIndex, start;
-            UBiDiLevel minLevel=UBIDI_MAX_EXPLICIT_LEVEL+1, maxLevel=0;
-
-            /* now, count a (non-mergeable) WS run */
-            if(limit<length) {
-                ++runCount;
-            }
-
-            /* runCount>1 */
-            if(getRunsMemory(pBiDi, runCount)) {
-                runs=pBiDi->runsMemory;
-            } else {
-                return FALSE;
-            }
-
-            /* set the runs */
-            /* FOOD FOR THOUGHT: this could be optimized, e.g.:
-             * 464->444, 484->444, 575->555, 595->555
-             * However, that would take longer. Check also how it would
-             * interact with BiDi control removal and inserting Marks.
-             */
-            runIndex=0;
-
-            /* search for the run limits and initialize visualLimit values with the run lengths */
-            i=0;
-            do {
-                /* prepare this run */
-                start=i;
-                level=levels[i];
-                if(level<minLevel) {
-                    minLevel=level;
-                }
-                if(level>maxLevel) {
-                    maxLevel=level;
-                }
-
-                /* look for the run limit */
-                while(++i<limit && levels[i]==level) {}
-
-                /* i is another run limit */
-                runs[runIndex].logicalStart=start;
-                runs[runIndex].visualLimit=i-start;
-                runs[runIndex].insertRemove=0;
-                ++runIndex;
-            } while(i<limit);
-
-            if(limit<length) {
-                /* there is a separate WS run */
-                runs[runIndex].logicalStart=limit;
-                runs[runIndex].visualLimit=length-limit;
-                /* For the trailing WS run, pBiDi->paraLevel is ok even
-                   if contextual multiple paragraphs.                   */
-                if(pBiDi->paraLevel<minLevel) {
-                    minLevel=pBiDi->paraLevel;
-                }
-            }
-
-            /* set the object fields */
-            pBiDi->runs=runs;
-            pBiDi->runCount=runCount;
-
-            reorderLine(pBiDi, minLevel, maxLevel);
-
-            /* now add the direction flags and adjust the visualLimit's to be just that */
-            /* this loop will also handle the trailing WS run */
-            limit=0;
-            for(i=0; i<runCount; ++i) {
-                ADD_ODD_BIT_FROM_LEVEL(runs[i].logicalStart, levels[runs[i].logicalStart]);
-                limit+=runs[i].visualLimit;
-                runs[i].visualLimit=limit;
-            }
-
-            /* Set the "odd" bit for the trailing WS run. */
-            /* For a RTL paragraph, it will be the *first* run in visual order. */
-            /* For the trailing WS run, pBiDi->paraLevel is ok even if
-               contextual multiple paragraphs.                          */
-            if(runIndex<runCount) {
-                int32_t trailingRun = ((pBiDi->paraLevel & 1) != 0)? 0 : runIndex;
-
-                ADD_ODD_BIT_FROM_LEVEL(runs[trailingRun].logicalStart, pBiDi->paraLevel);
-            }
-        }
-    }
-
-    /* handle insert LRM/RLM BEFORE/AFTER run */
-    if(pBiDi->insertPoints.size>0) {
-        Point *point, *start=pBiDi->insertPoints.points,
-                      *limit=start+pBiDi->insertPoints.size;
-        int32_t runIndex;
-        for(point=start; point<limit; point++) {
-            runIndex=getRunFromLogicalIndex(pBiDi, point->pos, pErrorCode);
-            pBiDi->runs[runIndex].insertRemove|=point->flag;
-        }
-    }
-
-    /* handle remove BiDi control characters */
-    if(pBiDi->controlCount>0) {
-        int32_t runIndex;
-        const UChar *start=pBiDi->text, *limit=start+pBiDi->length, *pu;
-        for(pu=start; pu<limit; pu++) {
-            if(IS_BIDI_CONTROL_CHAR(*pu)) {
-                runIndex=getRunFromLogicalIndex(pBiDi, (int32_t)(pu-start), pErrorCode);
-                pBiDi->runs[runIndex].insertRemove--;
-            }
-        }
-    }
-
-    return TRUE;
-}
-
-static UBool
-prepareReorder(const UBiDiLevel *levels, int32_t length,
-               int32_t *indexMap,
-               UBiDiLevel *pMinLevel, UBiDiLevel *pMaxLevel) {
-    int32_t start;
-    UBiDiLevel level, minLevel, maxLevel;
-
-    if(levels==NULL || length<=0) {
-        return FALSE;
-    }
-
-    /* determine minLevel and maxLevel */
-    minLevel=UBIDI_MAX_EXPLICIT_LEVEL+1;
-    maxLevel=0;
-    for(start=length; start>0;) {
-        level=levels[--start];
-        if(level>UBIDI_MAX_EXPLICIT_LEVEL+1) {
-            return FALSE;
-        }
-        if(level<minLevel) {
-            minLevel=level;
-        }
-        if(level>maxLevel) {
-            maxLevel=level;
-        }
-    }
-    *pMinLevel=minLevel;
-    *pMaxLevel=maxLevel;
-
-    /* initialize the index map */
-    for(start=length; start>0;) {
-        --start;
-        indexMap[start]=start;
-    }
-
-    return TRUE;
-}
-
-/* reorder a line based on a levels array (L2) ------------------------------ */
-
-U_CAPI void U_EXPORT2
-ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) {
-    int32_t start, limit, sumOfSosEos;
-    UBiDiLevel minLevel = 0, maxLevel = 0;
-
-    if(indexMap==NULL || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) {
-        return;
-    }
-
-    /* nothing to do? */
-    if(minLevel==maxLevel && (minLevel&1)==0) {
-        return;
-    }
-
-    /* reorder only down to the lowest odd level */
-    minLevel|=1;
-
-    /* loop maxLevel..minLevel */
-    do {
-        start=0;
-
-        /* loop for all sequences of levels to reorder at the current maxLevel */
-        for(;;) {
-            /* look for a sequence of levels that are all at >=maxLevel */
-            /* look for the first index of such a sequence */
-            while(start<length && levels[start]<maxLevel) {
-                ++start;
-            }
-            if(start>=length) {
-                break;  /* no more such sequences */
-            }
-
-            /* look for the limit of such a sequence (the index behind it) */
-            for(limit=start; ++limit<length && levels[limit]>=maxLevel;) {}
-
-            /*
-             * sos=start of sequence, eos=end of sequence
-             *
-             * The closed (inclusive) interval from sos to eos includes all the logical
-             * and visual indexes within this sequence. They are logically and
-             * visually contiguous and in the same range.
-             *
-             * For each run, the new visual index=sos+eos-old visual index;
-             * we pre-add sos+eos into sumOfSosEos ->
-             * new visual index=sumOfSosEos-old visual index;
-             */
-            sumOfSosEos=start+limit-1;
-
-            /* reorder each index in the sequence */
-            do {
-                indexMap[start]=sumOfSosEos-indexMap[start];
-            } while(++start<limit);
-
-            /* start==limit */
-            if(limit==length) {
-                break;  /* no more such sequences */
-            } else {
-                start=limit+1;
-            }
-        }
-    } while(--maxLevel>=minLevel);
-}
-
-U_CAPI void U_EXPORT2
-ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) {
-    int32_t start, end, limit, temp;
-    UBiDiLevel minLevel = 0, maxLevel = 0;
-
-    if(indexMap==NULL || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) {
-        return;
-    }
-
-    /* nothing to do? */
-    if(minLevel==maxLevel && (minLevel&1)==0) {
-        return;
-    }
-
-    /* reorder only down to the lowest odd level */
-    minLevel|=1;
-
-    /* loop maxLevel..minLevel */
-    do {
-        start=0;
-
-        /* loop for all sequences of levels to reorder at the current maxLevel */
-        for(;;) {
-            /* look for a sequence of levels that are all at >=maxLevel */
-            /* look for the first index of such a sequence */
-            while(start<length && levels[start]<maxLevel) {
-                ++start;
-            }
-            if(start>=length) {
-                break;  /* no more such runs */
-            }
-
-            /* look for the limit of such a sequence (the index behind it) */
-            for(limit=start; ++limit<length && levels[limit]>=maxLevel;) {}
-
-            /*
-             * Swap the entire interval of indexes from start to limit-1.
-             * We don't need to swap the levels for the purpose of this
-             * algorithm: the sequence of levels that we look at does not
-             * move anyway.
-             */
-            end=limit-1;
-            while(start<end) {
-                temp=indexMap[start];
-                indexMap[start]=indexMap[end];
-                indexMap[end]=temp;
-
-                ++start;
-                --end;
-            }
-
-            if(limit==length) {
-                break;  /* no more such sequences */
-            } else {
-                start=limit+1;
-            }
-        }
-    } while(--maxLevel>=minLevel);
-}
-
-/* API functions for logical<->visual mapping ------------------------------- */
-
-U_CAPI int32_t U_EXPORT2
-ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) {
-    int32_t visualIndex=UBIDI_MAP_NOWHERE;
-    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
-    RETURN_IF_BAD_RANGE(logicalIndex, 0, pBiDi->length, *pErrorCode, -1);
-
-    /* we can do the trivial cases without the runs array */
-    switch(pBiDi->direction) {
-    case UBIDI_LTR:
-        visualIndex=logicalIndex;
-        break;
-    case UBIDI_RTL:
-        visualIndex=pBiDi->length-logicalIndex-1;
-        break;
-    default:
-        if(!ubidi_getRuns(pBiDi, pErrorCode)) {
-            *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-            return -1;
-        } else {
-            Run *runs=pBiDi->runs;
-            int32_t i, visualStart=0, offset, length;
-
-            /* linear search for the run, search on the visual runs */
-            for(i=0; i<pBiDi->runCount; ++i) {
-                length=runs[i].visualLimit-visualStart;
-                offset=logicalIndex-GET_INDEX(runs[i].logicalStart);
-                if(offset>=0 && offset<length) {
-                    if(IS_EVEN_RUN(runs[i].logicalStart)) {
-                        /* LTR */
-                        visualIndex=visualStart+offset;
-                    } else {
-                        /* RTL */
-                        visualIndex=visualStart+length-offset-1;
-                    }
-                    break;          /* exit for loop */
-                }
-                visualStart+=length;
-            }
-            if(i>=pBiDi->runCount) {
-                return UBIDI_MAP_NOWHERE;
-            }
-        }
-    }
-
-    if(pBiDi->insertPoints.size>0) {
-        /* add the number of added marks until the calculated visual index */
-        Run *runs=pBiDi->runs;
-        int32_t i, length, insertRemove;
-        int32_t visualStart=0, markFound=0;
-        for(i=0; ; i++, visualStart+=length) {
-            length=runs[i].visualLimit-visualStart;
-            insertRemove=runs[i].insertRemove;
-            if(insertRemove & (LRM_BEFORE|RLM_BEFORE)) {
-                markFound++;
-            }
-            /* is it the run containing the visual index? */
-            if(visualIndex<runs[i].visualLimit) {
-                return visualIndex+markFound;
-            }
-            if(insertRemove & (LRM_AFTER|RLM_AFTER)) {
-                markFound++;
-            }
-        }
-    }
-    else if(pBiDi->controlCount>0) {
-        /* subtract the number of controls until the calculated visual index */
-        Run *runs=pBiDi->runs;
-        int32_t i, j, start, limit, length, insertRemove;
-        int32_t visualStart=0, controlFound=0;
-        UChar uchar=pBiDi->text[logicalIndex];
-        /* is the logical index pointing to a control ? */
-        if(IS_BIDI_CONTROL_CHAR(uchar)) {
-            return UBIDI_MAP_NOWHERE;
-        }
-        /* loop on runs */
-        for(i=0; ; i++, visualStart+=length) {
-            length=runs[i].visualLimit-visualStart;
-            insertRemove=runs[i].insertRemove;
-            /* calculated visual index is beyond this run? */
-            if(visualIndex>=runs[i].visualLimit) {
-                controlFound-=insertRemove;
-                continue;
-            }
-            /* calculated visual index must be within current run */
-            if(insertRemove==0) {
-                return visualIndex-controlFound;
-            }
-            if(IS_EVEN_RUN(runs[i].logicalStart)) {
-                /* LTR: check from run start to logical index */
-                start=runs[i].logicalStart;
-                limit=logicalIndex;
-            } else {
-                /* RTL: check from logical index to run end */
-                start=logicalIndex+1;
-                limit=GET_INDEX(runs[i].logicalStart)+length;
-            }
-            for(j=start; j<limit; j++) {
-                uchar=pBiDi->text[j];
-                if(IS_BIDI_CONTROL_CHAR(uchar)) {
-                    controlFound++;
-                }
-            }
-            return visualIndex-controlFound;
-        }
-    }
-
-    return visualIndex;
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode) {
-    Run *runs;
-    int32_t i, runCount, start;
-    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
-    RETURN_IF_BAD_RANGE(visualIndex, 0, pBiDi->resultLength, *pErrorCode, -1);
-    /* we can do the trivial cases without the runs array */
-    if(pBiDi->insertPoints.size==0 && pBiDi->controlCount==0) {
-        if(pBiDi->direction==UBIDI_LTR) {
-            return visualIndex;
-        }
-        else if(pBiDi->direction==UBIDI_RTL) {
-            return pBiDi->length-visualIndex-1;
-        }
-    }
-    if(!ubidi_getRuns(pBiDi, pErrorCode)) {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return -1;
-    }
-
-    runs=pBiDi->runs;
-    runCount=pBiDi->runCount;
-    if(pBiDi->insertPoints.size>0) {
-        /* handle inserted LRM/RLM */
-        int32_t markFound=0, insertRemove;
-        int32_t visualStart=0, length;
-        runs=pBiDi->runs;
-        /* subtract number of marks until visual index */
-        for(i=0; ; i++, visualStart+=length) {
-            length=runs[i].visualLimit-visualStart;
-            insertRemove=runs[i].insertRemove;
-            if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) {
-                if(visualIndex<=(visualStart+markFound)) {
-                    return UBIDI_MAP_NOWHERE;
-                }
-                markFound++;
-            }
-            /* is adjusted visual index within this run? */
-            if(visualIndex<(runs[i].visualLimit+markFound)) {
-                visualIndex-=markFound;
-                break;
-            }
-            if(insertRemove&(LRM_AFTER|RLM_AFTER)) {
-                if(visualIndex==(visualStart+length+markFound)) {
-                    return UBIDI_MAP_NOWHERE;
-                }
-                markFound++;
-            }
-        }
-    }
-    else if(pBiDi->controlCount>0) {
-        /* handle removed BiDi control characters */
-        int32_t controlFound=0, insertRemove, length;
-        int32_t logicalStart, logicalEnd, visualStart=0, j, k;
-        UChar uchar;
-        UBool evenRun;
-        /* add number of controls until visual index */
-        for(i=0; ; i++, visualStart+=length) {
-            length=runs[i].visualLimit-visualStart;
-            insertRemove=runs[i].insertRemove;
-            /* is adjusted visual index beyond current run? */
-            if(visualIndex>=(runs[i].visualLimit-controlFound+insertRemove)) {
-                controlFound-=insertRemove;
-                continue;
-            }
-            /* adjusted visual index is within current run */
-            if(insertRemove==0) {
-                visualIndex+=controlFound;
-                break;
-            }
-            /* count non-control chars until visualIndex */
-            logicalStart=runs[i].logicalStart;
-            evenRun=IS_EVEN_RUN(logicalStart);
-            REMOVE_ODD_BIT(logicalStart);
-            logicalEnd=logicalStart+length-1;
-            for(j=0; j<length; j++) {
-                k= evenRun ? logicalStart+j : logicalEnd-j;
-                uchar=pBiDi->text[k];
-                if(IS_BIDI_CONTROL_CHAR(uchar)) {
-                    controlFound++;
-                }
-                if((visualIndex+controlFound)==(visualStart+j)) {
-                    break;
-                }
-            }
-            visualIndex+=controlFound;
-            break;
-        }
-    }
-    /* handle all cases */
-    if(runCount<=10) {
-        /* linear search for the run */
-        for(i=0; visualIndex>=runs[i].visualLimit; ++i) {}
-    } else {
-        /* binary search for the run */
-        int32_t begin=0, limit=runCount;
-
-        /* the middle if() is guaranteed to find the run, we don't need a loop limit */
-        for(;;) {
-            i=(begin+limit)/2;
-            if(visualIndex>=runs[i].visualLimit) {
-                begin=i+1;
-            } else if(i==0 || visualIndex>=runs[i-1].visualLimit) {
-                break;
-            } else {
-                limit=i;
-            }
-        }
-    }
-
-    start=runs[i].logicalStart;
-    if(IS_EVEN_RUN(start)) {
-        /* LTR */
-        /* the offset in runs[i] is visualIndex-runs[i-1].visualLimit */
-        if(i>0) {
-            visualIndex-=runs[i-1].visualLimit;
-        }
-        return start+visualIndex;
-    } else {
-        /* RTL */
-        return GET_INDEX(start)+runs[i].visualLimit-visualIndex-1;
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) {
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    /* ubidi_countRuns() checks for VALID_PARA_OR_LINE */
-    ubidi_countRuns(pBiDi, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        /* no op */
-    } else if(indexMap==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-    } else {
-        /* fill a logical-to-visual index map using the runs[] */
-        int32_t visualStart, visualLimit, i, j, k;
-        int32_t logicalStart, logicalLimit;
-        Run *runs=pBiDi->runs;
-        if (pBiDi->length<=0) {
-            return;
-        }
-        if (pBiDi->length>pBiDi->resultLength) {
-            uprv_memset(indexMap, 0xFF, pBiDi->length*sizeof(int32_t));
-        }
-
-        visualStart=0;
-        for(j=0; j<pBiDi->runCount; ++j) {
-            logicalStart=GET_INDEX(runs[j].logicalStart);
-            visualLimit=runs[j].visualLimit;
-            if(IS_EVEN_RUN(runs[j].logicalStart)) {
-                do { /* LTR */
-                    indexMap[logicalStart++]=visualStart++;
-                } while(visualStart<visualLimit);
-            } else {
-                logicalStart+=visualLimit-visualStart;  /* logicalLimit */
-                do { /* RTL */
-                    indexMap[--logicalStart]=visualStart++;
-                } while(visualStart<visualLimit);
-            }
-            /* visualStart==visualLimit; */
-        }
-
-        if(pBiDi->insertPoints.size>0) {
-            int32_t markFound=0, runCount=pBiDi->runCount;
-            int32_t length, insertRemove;
-            visualStart=0;
-            /* add number of marks found until each index */
-            for(i=0; i<runCount; i++, visualStart+=length) {
-                length=runs[i].visualLimit-visualStart;
-                insertRemove=runs[i].insertRemove;
-                if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) {
-                    markFound++;
-                }
-                if(markFound>0) {
-                    logicalStart=GET_INDEX(runs[i].logicalStart);
-                    logicalLimit=logicalStart+length;
-                    for(j=logicalStart; j<logicalLimit; j++) {
-                        indexMap[j]+=markFound;
-                    }
-                }
-                if(insertRemove&(LRM_AFTER|RLM_AFTER)) {
-                    markFound++;
-                }
-            }
-        }
-        else if(pBiDi->controlCount>0) {
-            int32_t controlFound=0, runCount=pBiDi->runCount;
-            int32_t length, insertRemove;
-            UBool evenRun;
-            UChar uchar;
-            visualStart=0;
-            /* subtract number of controls found until each index */
-            for(i=0; i<runCount; i++, visualStart+=length) {
-                length=runs[i].visualLimit-visualStart;
-                insertRemove=runs[i].insertRemove;
-                /* no control found within previous runs nor within this run */
-                if((controlFound-insertRemove)==0) {
-                    continue;
-                }
-                logicalStart=runs[i].logicalStart;
-                evenRun=IS_EVEN_RUN(logicalStart);
-                REMOVE_ODD_BIT(logicalStart);
-                logicalLimit=logicalStart+length;
-                /* if no control within this run */
-                if(insertRemove==0) {
-                    for(j=logicalStart; j<logicalLimit; j++) {
-                        indexMap[j]-=controlFound;
-                    }
-                    continue;
-                }
-                for(j=0; j<length; j++) {
-                    k= evenRun ? logicalStart+j : logicalLimit-j-1;
-                    uchar=pBiDi->text[k];
-                    if(IS_BIDI_CONTROL_CHAR(uchar)) {
-                        controlFound++;
-                        indexMap[k]=UBIDI_MAP_NOWHERE;
-                        continue;
-                    }
-                    indexMap[k]-=controlFound;
-                }
-            }
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) {
-    RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(indexMap==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    /* ubidi_countRuns() checks for VALID_PARA_OR_LINE */
-    ubidi_countRuns(pBiDi, pErrorCode);
-    if(U_SUCCESS(*pErrorCode)) {
-        /* fill a visual-to-logical index map using the runs[] */
-        Run *runs=pBiDi->runs, *runsLimit=runs+pBiDi->runCount;
-        int32_t logicalStart, visualStart, visualLimit, *pi=indexMap;
-
-        if (pBiDi->resultLength<=0) {
-            return;
-        }
-        visualStart=0;
-        for(; runs<runsLimit; ++runs) {
-            logicalStart=runs->logicalStart;
-            visualLimit=runs->visualLimit;
-            if(IS_EVEN_RUN(logicalStart)) {
-                do { /* LTR */
-                    *pi++ = logicalStart++;
-                } while(++visualStart<visualLimit);
-            } else {
-                REMOVE_ODD_BIT(logicalStart);
-                logicalStart+=visualLimit-visualStart;  /* logicalLimit */
-                do { /* RTL */
-                    *pi++ = --logicalStart;
-                } while(++visualStart<visualLimit);
-            }
-            /* visualStart==visualLimit; */
-        }
-
-        if(pBiDi->insertPoints.size>0) {
-            int32_t markFound=0, runCount=pBiDi->runCount;
-            int32_t insertRemove, i, j, k;
-            runs=pBiDi->runs;
-            /* count all inserted marks */
-            for(i=0; i<runCount; i++) {
-                insertRemove=runs[i].insertRemove;
-                if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) {
-                    markFound++;
-                }
-                if(insertRemove&(LRM_AFTER|RLM_AFTER)) {
-                    markFound++;
-                }
-            }
-            /* move back indexes by number of preceding marks */
-            k=pBiDi->resultLength;
-            for(i=runCount-1; i>=0 && markFound>0; i--) {
-                insertRemove=runs[i].insertRemove;
-                if(insertRemove&(LRM_AFTER|RLM_AFTER)) {
-                    indexMap[--k]= UBIDI_MAP_NOWHERE;
-                    markFound--;
-                }
-                visualStart= i>0 ? runs[i-1].visualLimit : 0;
-                for(j=runs[i].visualLimit-1; j>=visualStart && markFound>0; j--) {
-                    indexMap[--k]=indexMap[j];
-                }
-                if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) {
-                    indexMap[--k]= UBIDI_MAP_NOWHERE;
-                    markFound--;
-                }
-            }
-        }
-        else if(pBiDi->controlCount>0) {
-            int32_t runCount=pBiDi->runCount, logicalEnd;
-            int32_t insertRemove, length, i, j, k, m;
-            UChar uchar;
-            UBool evenRun;
-            runs=pBiDi->runs;
-            visualStart=0;
-            /* move forward indexes by number of preceding controls */
-            k=0;
-            for(i=0; i<runCount; i++, visualStart+=length) {
-                length=runs[i].visualLimit-visualStart;
-                insertRemove=runs[i].insertRemove;
-                /* if no control found yet, nothing to do in this run */
-                if((insertRemove==0)&&(k==visualStart)) {
-                    k+=length;
-                    continue;
-                }
-                /* if no control in this run */
-                if(insertRemove==0) {
-                    visualLimit=runs[i].visualLimit;
-                    for(j=visualStart; j<visualLimit; j++) {
-                        indexMap[k++]=indexMap[j];
-                    }
-                    continue;
-                }
-                logicalStart=runs[i].logicalStart;
-                evenRun=IS_EVEN_RUN(logicalStart);
-                REMOVE_ODD_BIT(logicalStart);
-                logicalEnd=logicalStart+length-1;
-                for(j=0; j<length; j++) {
-                    m= evenRun ? logicalStart+j : logicalEnd-j;
-                    uchar=pBiDi->text[m];
-                    if(!IS_BIDI_CONTROL_CHAR(uchar)) {
-                        indexMap[k++]=m;
-                    }
-                }
-            }
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length) {
-    if(srcMap!=NULL && destMap!=NULL && length>0) {
-        const int32_t *pi;
-        int32_t destLength=-1, count=0;
-        /* find highest value and count positive indexes in srcMap */
-        pi=srcMap+length;
-        while(pi>srcMap) {
-            if(*--pi>destLength) {
-                destLength=*pi;
-            }
-            if(*pi>=0) {
-                count++;
-            }
-        }
-        destLength++;           /* add 1 for origin 0 */
-        if(count<destLength) {
-            /* we must fill unmatched destMap entries with -1 */
-            uprv_memset(destMap, 0xFF, destLength*sizeof(int32_t));
-        }
-        pi=srcMap+length;
-        while(length>0) {
-            if(*--pi>=0) {
-                destMap[*pi]=--length;
-            } else {
-                --length;
-            }
-        }
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubidiwrt.c b/src/third_party/mozjs/intl/icu/source/common/ubidiwrt.c
deleted file mode 100644
index f554f35..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubidiwrt.c
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2000-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  ubidiwrt.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999aug06
-*   created by: Markus W. Scherer, updated by Matitiahu Allouche
-*
-* This file contains implementations for BiDi functions that use
-* the core algorithm and core API to write reordered text.
-*/
-
-/* set import/export definitions */
-#ifndef U_COMMON_IMPLEMENTATION
-#   define U_COMMON_IMPLEMENTATION
-#endif
-
-#include "unicode/utypes.h"
-#include "unicode/ustring.h"
-#include "unicode/uchar.h"
-#include "unicode/ubidi.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "ustr_imp.h"
-#include "ubidiimp.h"
-
-/*
- * The function implementations in this file are designed
- * for UTF-16 and UTF-32, not for UTF-8.
- *
- * Assumptions that are not true for UTF-8:
- * - Any code point always needs the same number of code units
- *   ("minimum-length-problem" of UTF-8)
- * - The BiDi control characters need only one code unit each
- *
- * Further assumptions for all UTFs:
- * - u_charMirror(c) needs the same number of code units as c
- */
-#if UTF_SIZE==8
-# error reimplement ubidi_writeReordered() for UTF-8, see comment above
-#endif
-
-#define IS_COMBINING(type) ((1UL<<(type))&(1UL<<U_NON_SPACING_MARK|1UL<<U_COMBINING_SPACING_MARK|1UL<<U_ENCLOSING_MARK))
-
-/*
- * When we have UBIDI_OUTPUT_REVERSE set on ubidi_writeReordered(), then we
- * semantically write RTL runs in reverse and later reverse them again.
- * Instead, we actually write them in forward order to begin with.
- * However, if the RTL run was to be mirrored, we need to mirror here now
- * since the implicit second reversal must not do it.
- * It looks strange to do mirroring in LTR output, but it is only because
- * we are writing RTL output in reverse.
- */
-static int32_t
-doWriteForward(const UChar *src, int32_t srcLength,
-               UChar *dest, int32_t destSize,
-               uint16_t options,
-               UErrorCode *pErrorCode) {
-    /* optimize for several combinations of options */
-    switch(options&(UBIDI_REMOVE_BIDI_CONTROLS|UBIDI_DO_MIRRORING)) {
-    case 0: {
-        /* simply copy the LTR run to the destination */
-        int32_t length=srcLength;
-        if(destSize<length) {
-            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-            return srcLength;
-        }
-        do {
-            *dest++=*src++;
-        } while(--length>0);
-        return srcLength;
-    }
-    case UBIDI_DO_MIRRORING: {
-        /* do mirroring */
-        int32_t i=0, j=0;
-        UChar32 c;
-
-        if(destSize<srcLength) {
-            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-            return srcLength;
-        }
-        do {
-            U16_NEXT(src, i, srcLength, c);
-            c=u_charMirror(c);
-            U16_APPEND_UNSAFE(dest, j, c);
-        } while(i<srcLength);
-        return srcLength;
-    }
-    case UBIDI_REMOVE_BIDI_CONTROLS: {
-        /* copy the LTR run and remove any BiDi control characters */
-        int32_t remaining=destSize;
-        UChar c;
-        do {
-            c=*src++;
-            if(!IS_BIDI_CONTROL_CHAR(c)) {
-                if(--remaining<0) {
-                    *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-
-                    /* preflight the length */
-                    while(--srcLength>0) {
-                        c=*src++;
-                        if(!IS_BIDI_CONTROL_CHAR(c)) {
-                            --remaining;
-                        }
-                    }
-                    return destSize-remaining;
-                }
-                *dest++=c;
-            }
-        } while(--srcLength>0);
-        return destSize-remaining;
-    }
-    default: {
-        /* remove BiDi control characters and do mirroring */
-        int32_t remaining=destSize;
-        int32_t i, j=0;
-        UChar32 c;
-        do {
-            i=0;
-            U16_NEXT(src, i, srcLength, c);
-            src+=i;
-            srcLength-=i;
-            if(!IS_BIDI_CONTROL_CHAR(c)) {
-                remaining-=i;
-                if(remaining<0) {
-                    *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-
-                    /* preflight the length */
-                    while(srcLength>0) {
-                        c=*src++;
-                        if(!IS_BIDI_CONTROL_CHAR(c)) {
-                            --remaining;
-                        }
-                        --srcLength;
-                    }
-                    return destSize-remaining;
-                }
-                c=u_charMirror(c);
-                U16_APPEND_UNSAFE(dest, j, c);
-            }
-        } while(srcLength>0);
-        return j;
-    }
-    } /* end of switch */
-}
-
-static int32_t
-doWriteReverse(const UChar *src, int32_t srcLength,
-               UChar *dest, int32_t destSize,
-               uint16_t options,
-               UErrorCode *pErrorCode) {
-    /*
-     * RTL run -
-     *
-     * RTL runs need to be copied to the destination in reverse order
-     * of code points, not code units, to keep Unicode characters intact.
-     *
-     * The general strategy for this is to read the source text
-     * in backward order, collect all code units for a code point
-     * (and optionally following combining characters, see below),
-     * and copy all these code units in ascending order
-     * to the destination for this run.
-     *
-     * Several options request whether combining characters
-     * should be kept after their base characters,
-     * whether BiDi control characters should be removed, and
-     * whether characters should be replaced by their mirror-image
-     * equivalent Unicode characters.
-     */
-    int32_t i, j;
-    UChar32 c;
-
-    /* optimize for several combinations of options */
-    switch(options&(UBIDI_REMOVE_BIDI_CONTROLS|UBIDI_DO_MIRRORING|UBIDI_KEEP_BASE_COMBINING)) {
-    case 0:
-        /*
-         * With none of the "complicated" options set, the destination
-         * run will have the same length as the source run,
-         * and there is no mirroring and no keeping combining characters
-         * with their base characters.
-         */
-        if(destSize<srcLength) {
-            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-            return srcLength;
-        }
-        destSize=srcLength;
-
-        /* preserve character integrity */
-        do {
-            /* i is always after the last code unit known to need to be kept in this segment */
-            i=srcLength;
-
-            /* collect code units for one base character */
-            U16_BACK_1(src, 0, srcLength);
-
-            /* copy this base character */
-            j=srcLength;
-            do {
-                *dest++=src[j++];
-            } while(j<i);
-        } while(srcLength>0);
-        break;
-    case UBIDI_KEEP_BASE_COMBINING:
-        /*
-         * Here, too, the destination
-         * run will have the same length as the source run,
-         * and there is no mirroring.
-         * We do need to keep combining characters with their base characters.
-         */
-        if(destSize<srcLength) {
-            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-            return srcLength;
-        }
-        destSize=srcLength;
-
-        /* preserve character integrity */
-        do {
-            /* i is always after the last code unit known to need to be kept in this segment */
-            i=srcLength;
-
-            /* collect code units and modifier letters for one base character */
-            do {
-                U16_PREV(src, 0, srcLength, c);
-            } while(srcLength>0 && IS_COMBINING(u_charType(c)));
-
-            /* copy this "user character" */
-            j=srcLength;
-            do {
-                *dest++=src[j++];
-            } while(j<i);
-        } while(srcLength>0);
-        break;
-    default:
-        /*
-         * With several "complicated" options set, this is the most
-         * general and the slowest copying of an RTL run.
-         * We will do mirroring, remove BiDi controls, and
-         * keep combining characters with their base characters
-         * as requested.
-         */
-        if(!(options&UBIDI_REMOVE_BIDI_CONTROLS)) {
-            i=srcLength;
-        } else {
-            /* we need to find out the destination length of the run,
-               which will not include the BiDi control characters */
-            int32_t length=srcLength;
-            UChar ch;
-
-            i=0;
-            do {
-                ch=*src++;
-                if(!IS_BIDI_CONTROL_CHAR(ch)) {
-                    ++i;
-                }
-            } while(--length>0);
-            src-=srcLength;
-        }
-
-        if(destSize<i) {
-            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-            return i;
-        }
-        destSize=i;
-
-        /* preserve character integrity */
-        do {
-            /* i is always after the last code unit known to need to be kept in this segment */
-            i=srcLength;
-
-            /* collect code units for one base character */
-            U16_PREV(src, 0, srcLength, c);
-            if(options&UBIDI_KEEP_BASE_COMBINING) {
-                /* collect modifier letters for this base character */
-                while(srcLength>0 && IS_COMBINING(u_charType(c))) {
-                    U16_PREV(src, 0, srcLength, c);
-                }
-            }
-
-            if(options&UBIDI_REMOVE_BIDI_CONTROLS && IS_BIDI_CONTROL_CHAR(c)) {
-                /* do not copy this BiDi control character */
-                continue;
-            }
-
-            /* copy this "user character" */
-            j=srcLength;
-            if(options&UBIDI_DO_MIRRORING) {
-                /* mirror only the base character */
-                int32_t k=0;
-                c=u_charMirror(c);
-                U16_APPEND_UNSAFE(dest, k, c);
-                dest+=k;
-                j+=k;
-            }
-            while(j<i) {
-                *dest++=src[j++];
-            }
-        } while(srcLength>0);
-        break;
-    } /* end of switch */
-
-    return destSize;
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_writeReverse(const UChar *src, int32_t srcLength,
-                   UChar *dest, int32_t destSize,
-                   uint16_t options,
-                   UErrorCode *pErrorCode) {
-    int32_t destLength;
-
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    /* more error checking */
-    if( src==NULL || srcLength<-1 ||
-        destSize<0 || (destSize>0 && dest==NULL))
-    {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    /* do input and output overlap? */
-    if( dest!=NULL &&
-        ((src>=dest && src<dest+destSize) ||
-         (dest>=src && dest<src+srcLength)))
-    {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    if(srcLength==-1) {
-        srcLength=u_strlen(src);
-    }
-    if(srcLength>0) {
-        destLength=doWriteReverse(src, srcLength, dest, destSize, options, pErrorCode);
-    } else {
-        /* nothing to do */
-        destLength=0;
-    }
-
-    return u_terminateUChars(dest, destSize, destLength, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-ubidi_writeReordered(UBiDi *pBiDi,
-                     UChar *dest, int32_t destSize,
-                     uint16_t options,
-                     UErrorCode *pErrorCode) {
-    const UChar *text;
-    UChar *saveDest;
-    int32_t length, destCapacity;
-    int32_t run, runCount, logicalStart, runLength;
-
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    /* more error checking */
-    if( pBiDi==NULL ||
-        (text=pBiDi->text)==NULL || (length=pBiDi->length)<0 ||
-        destSize<0 || (destSize>0 && dest==NULL))
-    {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    /* do input and output overlap? */
-    if( dest!=NULL &&
-        ((text>=dest && text<dest+destSize) ||
-         (dest>=text && dest<text+pBiDi->originalLength)))
-    {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    if(length==0) {
-        /* nothing to do */
-        return u_terminateUChars(dest, destSize, 0, pErrorCode);
-    }
-
-    runCount=ubidi_countRuns(pBiDi, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    /* destSize shrinks, later destination length=destCapacity-destSize */
-    saveDest=dest;
-    destCapacity=destSize;
-
-    /*
-     * Option "insert marks" implies UBIDI_INSERT_LRM_FOR_NUMERIC if the
-     * reordering mode (checked below) is appropriate.
-     */
-    if(pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) {
-        options|=UBIDI_INSERT_LRM_FOR_NUMERIC;
-        options&=~UBIDI_REMOVE_BIDI_CONTROLS;
-    }
-    /*
-     * Option "remove controls" implies UBIDI_REMOVE_BIDI_CONTROLS
-     * and cancels UBIDI_INSERT_LRM_FOR_NUMERIC.
-     */
-    if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
-        options|=UBIDI_REMOVE_BIDI_CONTROLS;
-        options&=~UBIDI_INSERT_LRM_FOR_NUMERIC;
-    }
-    /*
-     * If we do not perform the "inverse BiDi" algorithm, then we
-     * don't need to insert any LRMs, and don't need to test for it.
-     */
-    if((pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_NUMBERS_AS_L) &&
-       (pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_LIKE_DIRECT)  &&
-       (pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL) &&
-       (pBiDi->reorderingMode != UBIDI_REORDER_RUNS_ONLY)) {
-        options&=~UBIDI_INSERT_LRM_FOR_NUMERIC;
-    }
-    /*
-     * Iterate through all visual runs and copy the run text segments to
-     * the destination, according to the options.
-     *
-     * The tests for where to insert LRMs ignore the fact that there may be
-     * BN codes or non-BMP code points at the beginning and end of a run;
-     * they may insert LRMs unnecessarily but the tests are faster this way
-     * (this would have to be improved for UTF-8).
-     *
-     * Note that the only errors that are set by doWriteXY() are buffer overflow
-     * errors. Ignore them until the end, and continue for preflighting.
-     */
-    if(!(options&UBIDI_OUTPUT_REVERSE)) {
-        /* forward output */
-        if(!(options&UBIDI_INSERT_LRM_FOR_NUMERIC)) {
-            /* do not insert BiDi controls */
-            for(run=0; run<runCount; ++run) {
-                if(UBIDI_LTR==ubidi_getVisualRun(pBiDi, run, &logicalStart, &runLength)) {
-                    runLength=doWriteForward(text+logicalStart, runLength,
-                                             dest, destSize,
-                                             (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode);
-                } else {
-                    runLength=doWriteReverse(text+logicalStart, runLength,
-                                             dest, destSize,
-                                             options, pErrorCode);
-                }
-                if(dest!=NULL) {
-                  dest+=runLength;
-                }
-                destSize-=runLength;
-            }
-        } else {
-            /* insert BiDi controls for "inverse BiDi" */
-            const DirProp *dirProps=pBiDi->dirProps;
-            const UChar *src;
-            UChar uc;
-            UBiDiDirection dir;
-            int32_t markFlag;
-
-            for(run=0; run<runCount; ++run) {
-                dir=ubidi_getVisualRun(pBiDi, run, &logicalStart, &runLength);
-                src=text+logicalStart;
-                /* check if something relevant in insertPoints */
-                markFlag=pBiDi->runs[run].insertRemove;
-                if(markFlag<0) {        /* BiDi controls count */
-                    markFlag=0;
-                }
-
-                if(UBIDI_LTR==dir) {
-                    if((pBiDi->isInverse) &&
-                       (/*run>0 &&*/ dirProps[logicalStart]!=L)) {
-                        markFlag |= LRM_BEFORE;
-                    }
-                    if (markFlag & LRM_BEFORE) {
-                        uc=LRM_CHAR;
-                    }
-                    else if (markFlag & RLM_BEFORE) {
-                        uc=RLM_CHAR;
-                    }
-                    else  uc=0;
-                    if(uc) {
-                        if(destSize>0) {
-                            *dest++=uc;
-                        }
-                        --destSize;
-                    }
-
-                    runLength=doWriteForward(src, runLength,
-                                             dest, destSize,
-                                             (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode);
-                    if(dest!=NULL) {
-                      dest+=runLength;
-                    }
-                    destSize-=runLength;
-
-                    if((pBiDi->isInverse) &&
-                       (/*run<runCount-1 &&*/ dirProps[logicalStart+runLength-1]!=L)) {
-                        markFlag |= LRM_AFTER;
-                    }
-                    if (markFlag & LRM_AFTER) {
-                        uc=LRM_CHAR;
-                    }
-                    else if (markFlag & RLM_AFTER) {
-                        uc=RLM_CHAR;
-                    }
-                    else  uc=0;
-                    if(uc) {
-                        if(destSize>0) {
-                            *dest++=uc;
-                        }
-                        --destSize;
-                    }
-                } else {                /* RTL run */
-                    if((pBiDi->isInverse) &&
-                       (/*run>0 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart+runLength-1])))) {
-                        markFlag |= RLM_BEFORE;
-                    }
-                    if (markFlag & LRM_BEFORE) {
-                        uc=LRM_CHAR;
-                    }
-                    else if (markFlag & RLM_BEFORE) {
-                        uc=RLM_CHAR;
-                    }
-                    else  uc=0;
-                    if(uc) {
-                        if(destSize>0) {
-                            *dest++=uc;
-                        }
-                        --destSize;
-                    }
-
-                    runLength=doWriteReverse(src, runLength,
-                                             dest, destSize,
-                                             options, pErrorCode);
-                    if(dest!=NULL) {
-                      dest+=runLength;
-                    }
-                    destSize-=runLength;
-
-                    if((pBiDi->isInverse) &&
-                       (/*run<runCount-1 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart])))) {
-                        markFlag |= RLM_AFTER;
-                    }
-                    if (markFlag & LRM_AFTER) {
-                        uc=LRM_CHAR;
-                    }
-                    else if (markFlag & RLM_AFTER) {
-                        uc=RLM_CHAR;
-                    }
-                    else  uc=0;
-                    if(uc) {
-                        if(destSize>0) {
-                            *dest++=uc;
-                        }
-                        --destSize;
-                    }
-                }
-            }
-        }
-    } else {
-        /* reverse output */
-        if(!(options&UBIDI_INSERT_LRM_FOR_NUMERIC)) {
-            /* do not insert BiDi controls */
-            for(run=runCount; --run>=0;) {
-                if(UBIDI_LTR==ubidi_getVisualRun(pBiDi, run, &logicalStart, &runLength)) {
-                    runLength=doWriteReverse(text+logicalStart, runLength,
-                                             dest, destSize,
-                                             (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode);
-                } else {
-                    runLength=doWriteForward(text+logicalStart, runLength,
-                                             dest, destSize,
-                                             options, pErrorCode);
-                }
-                if(dest!=NULL) {
-                  dest+=runLength;
-                }
-                destSize-=runLength;
-            }
-        } else {
-            /* insert BiDi controls for "inverse BiDi" */
-            const DirProp *dirProps=pBiDi->dirProps;
-            const UChar *src;
-            UBiDiDirection dir;
-
-            for(run=runCount; --run>=0;) {
-                /* reverse output */
-                dir=ubidi_getVisualRun(pBiDi, run, &logicalStart, &runLength);
-                src=text+logicalStart;
-
-                if(UBIDI_LTR==dir) {
-                    if(/*run<runCount-1 &&*/ dirProps[logicalStart+runLength-1]!=L) {
-                        if(destSize>0) {
-                            *dest++=LRM_CHAR;
-                        }
-                        --destSize;
-                    }
-
-                    runLength=doWriteReverse(src, runLength,
-                                             dest, destSize,
-                                             (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode);
-                    if(dest!=NULL) {
-                      dest+=runLength;
-                    }
-                    destSize-=runLength;
-
-                    if(/*run>0 &&*/ dirProps[logicalStart]!=L) {
-                        if(destSize>0) {
-                            *dest++=LRM_CHAR;
-                        }
-                        --destSize;
-                    }
-                } else {
-                    if(/*run<runCount-1 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart]))) {
-                        if(destSize>0) {
-                            *dest++=RLM_CHAR;
-                        }
-                        --destSize;
-                    }
-
-                    runLength=doWriteForward(src, runLength,
-                                             dest, destSize,
-                                             options, pErrorCode);
-                    if(dest!=NULL) {
-                      dest+=runLength;
-                    }
-                    destSize-=runLength;
-
-                    if(/*run>0 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart+runLength-1]))) {
-                        if(destSize>0) {
-                            *dest++=RLM_CHAR;
-                        }
-                        --destSize;
-                    }
-                }
-            }
-        }
-    }
-
-    return u_terminateUChars(saveDest, destCapacity, destCapacity-destSize, pErrorCode);
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubrk.cpp b/src/third_party/mozjs/intl/icu/source/common/ubrk.cpp
deleted file mode 100644
index 6ae60a3..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubrk.cpp
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1996-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/ubrk.h"
-
-#include "unicode/brkiter.h"
-#include "unicode/uloc.h"
-#include "unicode/ustring.h"
-#include "unicode/uchriter.h"
-#include "unicode/rbbi.h"
-#include "rbbirb.h"
-#include "uassert.h"
-
-U_NAMESPACE_USE
-
-//------------------------------------------------------------------------------
-//
-//    ubrk_open      Create a canned type of break iterator based on type (word, line, etc.)
-//                   and locale.
-//
-//------------------------------------------------------------------------------
-U_CAPI UBreakIterator* U_EXPORT2
-ubrk_open(UBreakIteratorType type,
-      const char *locale,
-      const UChar *text,
-      int32_t textLength,
-      UErrorCode *status)
-{
-
-  if(U_FAILURE(*status)) return 0;
-
-  BreakIterator *result = 0;
-
-  switch(type) {
-
-  case UBRK_CHARACTER:
-    result = BreakIterator::createCharacterInstance(Locale(locale), *status);
-    break;
-
-  case UBRK_WORD:
-    result = BreakIterator::createWordInstance(Locale(locale), *status);
-    break;
-
-  case UBRK_LINE:
-    result = BreakIterator::createLineInstance(Locale(locale), *status);
-    break;
-
-  case UBRK_SENTENCE:
-    result = BreakIterator::createSentenceInstance(Locale(locale), *status);
-    break;
-
-  case UBRK_TITLE:
-    result = BreakIterator::createTitleInstance(Locale(locale), *status);
-    break;
-
-  default:
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-  }
-
-  // check for allocation error
-  if (U_FAILURE(*status)) {
-     return 0;
-  }
-  if(result == 0) {
-    *status = U_MEMORY_ALLOCATION_ERROR;
-    return 0;
-  }
-
-
-  UBreakIterator *uBI = (UBreakIterator *)result;
-  if (text != NULL) {
-      ubrk_setText(uBI, text, textLength, status);
-  }
-  return uBI;
-}
-
-
-
-//------------------------------------------------------------------------------
-//
-//   ubrk_openRules      open a break iterator from a set of break rules.
-//                       Invokes the rule builder.
-//
-//------------------------------------------------------------------------------
-U_CAPI UBreakIterator* U_EXPORT2
-ubrk_openRules(  const UChar        *rules,
-                       int32_t       rulesLength,
-                 const UChar        *text,
-                       int32_t       textLength,
-                       UParseError  *parseErr,
-                       UErrorCode   *status)  {
-
-    if (status == NULL || U_FAILURE(*status)){
-        return 0;
-    }
-
-    BreakIterator *result = 0;
-    UnicodeString ruleString(rules, rulesLength);
-    result = RBBIRuleBuilder::createRuleBasedBreakIterator(ruleString, parseErr, *status);
-    if(U_FAILURE(*status)) {
-        return 0;
-    }
-
-    UBreakIterator *uBI = (UBreakIterator *)result;
-    if (text != NULL) {
-        ubrk_setText(uBI, text, textLength, status);
-    }
-    return uBI;
-}
-
-
-
-
-
-U_CAPI UBreakIterator * U_EXPORT2
-ubrk_safeClone(
-          const UBreakIterator *bi,
-          void *stackBuffer,
-          int32_t *pBufferSize,
-          UErrorCode *status)
-{
-    if (status == NULL || U_FAILURE(*status)){
-        return 0;
-    }
-    if (!pBufferSize || !bi){
-       *status = U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    // Clear any incoming Safe Clone Allocated warning.
-    //  Propagating this through to our return would really
-    //  confuse our caller.
-    if (*status==U_SAFECLONE_ALLOCATED_WARNING) {
-        *status = U_ZERO_ERROR;
-    }
-    return (UBreakIterator *)(((BreakIterator*)bi)->
-        createBufferClone(stackBuffer, *pBufferSize, *status));
-}
-
-
-
-U_CAPI void U_EXPORT2
-ubrk_close(UBreakIterator *bi)
-{
-    BreakIterator *ubi = (BreakIterator*) bi;
-    if (ubi) {
-        if (ubi->isBufferClone()) {
-            ubi->~BreakIterator();
-            *(uint32_t *)ubi = 0xdeadbeef;
-        } else {
-            delete ubi;
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-ubrk_setText(UBreakIterator* bi,
-             const UChar*    text,
-             int32_t         textLength,
-             UErrorCode*     status)
-{
-    BreakIterator *brit = (BreakIterator *)bi;
-    UText  ut = UTEXT_INITIALIZER;
-    utext_openUChars(&ut, text, textLength, status);
-    brit->setText(&ut, *status);
-    // A stack allocated UText wrapping a UCHar * string
-    //   can be dumped without explicitly closing it.
-}
-
-
-
-U_CAPI void U_EXPORT2
-ubrk_setUText(UBreakIterator *bi,
-             UText          *text,
-             UErrorCode     *status)
-{
-    RuleBasedBreakIterator *brit = (RuleBasedBreakIterator *)bi;
-    brit->RuleBasedBreakIterator::setText(text, *status);
-}
-
-
-
-
-
-U_CAPI int32_t U_EXPORT2
-ubrk_current(const UBreakIterator *bi)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::current();
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_next(UBreakIterator *bi)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::next();
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_previous(UBreakIterator *bi)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::previous();
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_first(UBreakIterator *bi)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::first();
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_last(UBreakIterator *bi)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::last();
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_preceding(UBreakIterator *bi,
-           int32_t offset)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::preceding(offset);
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_following(UBreakIterator *bi,
-           int32_t offset)
-{
-
-  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::following(offset);
-}
-
-U_CAPI const char* U_EXPORT2
-ubrk_getAvailable(int32_t index)
-{
-
-  return uloc_getAvailable(index);
-}
-
-U_CAPI int32_t U_EXPORT2
-ubrk_countAvailable()
-{
-
-  return uloc_countAvailable();
-}
-
-
-U_CAPI  UBool U_EXPORT2
-ubrk_isBoundary(UBreakIterator *bi, int32_t offset)
-{
-    return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::isBoundary(offset);
-}
-
-
-U_CAPI  int32_t U_EXPORT2
-ubrk_getRuleStatus(UBreakIterator *bi)
-{
-    return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::getRuleStatus();
-}
-
-U_CAPI  int32_t U_EXPORT2
-ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status)
-{
-    return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::getRuleStatusVec(fillInVec, capacity, *status);
-}
-
-
-U_CAPI const char* U_EXPORT2
-ubrk_getLocaleByType(const UBreakIterator *bi,
-                     ULocDataLocaleType type,
-                     UErrorCode* status)
-{
-    if (bi == NULL) {
-        if (U_SUCCESS(*status)) {
-            *status = U_ILLEGAL_ARGUMENT_ERROR;
-        }
-        return NULL;
-    }
-    return ((BreakIterator*)bi)->getLocaleID(type, *status);
-}
-
-
-void ubrk_refreshUText(UBreakIterator *bi,
-                       UText          *text,
-                       UErrorCode     *status)
-{
-    BreakIterator *bii = reinterpret_cast<BreakIterator *>(bi);
-    bii->refreshInputText(text, *status);
-}
-
-
-
-#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/src/third_party/mozjs/intl/icu/source/common/ubrkimpl.h b/src/third_party/mozjs/intl/icu/source/common/ubrkimpl.h
deleted file mode 100644
index e490971..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ubrkimpl.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2006, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-
-#ifndef UBRKIMPL_H
-#define UBRKIMPL_H
-
-#define U_ICUDATA_BRKITR U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "brkitr"
-
-#endif /*UBRKIMPL_H*/
diff --git a/src/third_party/mozjs/intl/icu/source/common/ucase.cpp b/src/third_party/mozjs/intl/icu/source/common/ucase.cpp
deleted file mode 100644
index da71169..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ucase.cpp
+++ /dev/null
@@ -1,1321 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2004-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  ucase.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2004aug30
-*   created by: Markus W. Scherer
-*
-*   Low-level Unicode character/string case mapping code.
-*   Much code moved here (and modified) from uchar.c.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/unistr.h"
-#include "unicode/uset.h"
-#include "unicode/udata.h" /* UDataInfo */
-#include "unicode/utf16.h"
-#include "ucmndata.h" /* DataHeader */
-#include "udatamem.h"
-#include "umutex.h"
-#include "uassert.h"
-#include "cmemory.h"
-#include "utrie2.h"
-#include "ucase.h"
-#include "ucln_cmn.h"
-
-struct UCaseProps {
-    UDataMemory *mem;
-    const int32_t *indexes;
-    const uint16_t *exceptions;
-    const uint16_t *unfold;
-
-    UTrie2 trie;
-    uint8_t formatVersion[4];
-};
-
-/* ucase_props_data.h is machine-generated by gencase --csource */
-#define INCLUDED_FROM_UCASE_CPP
-#include "ucase_props_data.h"
-
-/* UCaseProps singleton ----------------------------------------------------- */
-
-U_CAPI const UCaseProps * U_EXPORT2
-ucase_getSingleton() {
-    return &ucase_props_singleton;
-}
-
-/* set of property starts for UnicodeSet ------------------------------------ */
-
-static UBool U_CALLCONV
-_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 /*end*/, uint32_t /*value*/) {
-    /* add the start code point to the USet */
-    const USetAdder *sa=(const USetAdder *)context;
-    sa->add(sa->set, start);
-    return TRUE;
-}
-
-U_CFUNC void U_EXPORT2
-ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /* add the start code point of each same-value range of the trie */
-    utrie2_enum(&csp->trie, NULL, _enumPropertyStartsRange, sa);
-
-    /* add code points with hardcoded properties, plus the ones following them */
-
-    /* (none right now, see comment below) */
-
-    /*
-     * Omit code points with hardcoded specialcasing properties
-     * because we do not build property UnicodeSets for them right now.
-     */
-}
-
-/* data access primitives --------------------------------------------------- */
-
-#define GET_EXCEPTIONS(csp, props) ((csp)->exceptions+((props)>>UCASE_EXC_SHIFT))
-
-#define PROPS_HAS_EXCEPTION(props) ((props)&UCASE_EXCEPTION)
-
-/* number of bits in an 8-bit integer value */
-static const uint8_t flagsOffset[256]={
-    0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
-    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
-    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
-    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
-    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
-    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
-    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
-    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
-    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
-    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
-    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
-    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
-    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
-    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
-    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
-    4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
-};
-
-#define HAS_SLOT(flags, idx) ((flags)&(1<<(idx)))
-#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
-
-/*
- * Get the value of an optional-value slot where HAS_SLOT(excWord, idx).
- *
- * @param excWord (in) initial exceptions word
- * @param idx (in) desired slot index
- * @param pExc16 (in/out) const uint16_t * after excWord=*pExc16++;
- *               moved to the last uint16_t of the value, use +1 for beginning of next slot
- * @param value (out) int32_t or uint32_t output if hasSlot, otherwise not modified
- */
-#define GET_SLOT_VALUE(excWord, idx, pExc16, value) \
-    if(((excWord)&UCASE_EXC_DOUBLE_SLOTS)==0) { \
-        (pExc16)+=SLOT_OFFSET(excWord, idx); \
-        (value)=*pExc16; \
-    } else { \
-        (pExc16)+=2*SLOT_OFFSET(excWord, idx); \
-        (value)=*pExc16++; \
-        (value)=((value)<<16)|*pExc16; \
-    }
-
-/* simple case mappings ----------------------------------------------------- */
-
-U_CAPI UChar32 U_EXPORT2
-ucase_tolower(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)>=UCASE_UPPER) {
-            c+=UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props);
-        uint16_t excWord=*pe++;
-        if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) {
-            GET_SLOT_VALUE(excWord, UCASE_EXC_LOWER, pe, c);
-        }
-    }
-    return c;
-}
-
-U_CAPI UChar32 U_EXPORT2
-ucase_toupper(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)==UCASE_LOWER) {
-            c+=UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props);
-        uint16_t excWord=*pe++;
-        if(HAS_SLOT(excWord, UCASE_EXC_UPPER)) {
-            GET_SLOT_VALUE(excWord, UCASE_EXC_UPPER, pe, c);
-        }
-    }
-    return c;
-}
-
-U_CAPI UChar32 U_EXPORT2
-ucase_totitle(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)==UCASE_LOWER) {
-            c+=UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props);
-        uint16_t excWord=*pe++;
-        int32_t idx;
-        if(HAS_SLOT(excWord, UCASE_EXC_TITLE)) {
-            idx=UCASE_EXC_TITLE;
-        } else if(HAS_SLOT(excWord, UCASE_EXC_UPPER)) {
-            idx=UCASE_EXC_UPPER;
-        } else {
-            return c;
-        }
-        GET_SLOT_VALUE(excWord, idx, pe, c);
-    }
-    return c;
-}
-
-static const UChar iDot[2] = { 0x69, 0x307 };
-static const UChar jDot[2] = { 0x6a, 0x307 };
-static const UChar iOgonekDot[3] = { 0x12f, 0x307 };
-static const UChar iDotGrave[3] = { 0x69, 0x307, 0x300 };
-static const UChar iDotAcute[3] = { 0x69, 0x307, 0x301 };
-static const UChar iDotTilde[3] = { 0x69, 0x307, 0x303 };
-
-
-U_CFUNC void U_EXPORT2
-ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) {
-    uint16_t props;
-
-    /*
-     * Hardcode the case closure of i and its relatives and ignore the
-     * data file data for these characters.
-     * The Turkic dotless i and dotted I with their case mapping conditions
-     * and case folding option make the related characters behave specially.
-     * This code matches their closure behavior to their case folding behavior.
-     */
-
-    switch(c) {
-    case 0x49:
-        /* regular i and I are in one equivalence class */
-        sa->add(sa->set, 0x69);
-        return;
-    case 0x69:
-        sa->add(sa->set, 0x49);
-        return;
-    case 0x130:
-        /* dotted I is in a class with <0069 0307> (for canonical equivalence with <0049 0307>) */
-        sa->addString(sa->set, iDot, 2);
-        return;
-    case 0x131:
-        /* dotless i is in a class by itself */
-        return;
-    default:
-        /* otherwise use the data file data */
-        break;
-    }
-
-    props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)!=UCASE_NONE) {
-            /* add the one simple case mapping, no matter what type it is */
-            int32_t delta=UCASE_GET_DELTA(props);
-            if(delta!=0) {
-                sa->add(sa->set, c+delta);
-            }
-        }
-    } else {
-        /*
-         * c has exceptions, so there may be multiple simple and/or
-         * full case mappings. Add them all.
-         */
-        const uint16_t *pe0, *pe=GET_EXCEPTIONS(csp, props);
-        const UChar *closure;
-        uint16_t excWord=*pe++;
-        int32_t idx, closureLength, fullLength, length;
-
-        pe0=pe;
-
-        /* add all simple case mappings */
-        for(idx=UCASE_EXC_LOWER; idx<=UCASE_EXC_TITLE; ++idx) {
-            if(HAS_SLOT(excWord, idx)) {
-                pe=pe0;
-                GET_SLOT_VALUE(excWord, idx, pe, c);
-                sa->add(sa->set, c);
-            }
-        }
-
-        /* get the closure string pointer & length */
-        if(HAS_SLOT(excWord, UCASE_EXC_CLOSURE)) {
-            pe=pe0;
-            GET_SLOT_VALUE(excWord, UCASE_EXC_CLOSURE, pe, closureLength);
-            closureLength&=UCASE_CLOSURE_MAX_LENGTH; /* higher bits are reserved */
-            closure=(const UChar *)pe+1; /* behind this slot, unless there are full case mappings */
-        } else {
-            closureLength=0;
-            closure=NULL;
-        }
-
-        /* add the full case folding */
-        if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
-            pe=pe0;
-            GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, fullLength);
-
-            /* start of full case mapping strings */
-            ++pe;
-
-            fullLength&=0xffff; /* bits 16 and higher are reserved */
-
-            /* skip the lowercase result string */
-            pe+=fullLength&UCASE_FULL_LOWER;
-            fullLength>>=4;
-
-            /* add the full case folding string */
-            length=fullLength&0xf;
-            if(length!=0) {
-                sa->addString(sa->set, (const UChar *)pe, length);
-                pe+=length;
-            }
-
-            /* skip the uppercase and titlecase strings */
-            fullLength>>=4;
-            pe+=fullLength&0xf;
-            fullLength>>=4;
-            pe+=fullLength;
-
-            closure=(const UChar *)pe; /* behind full case mappings */
-        }
-
-        /* add each code point in the closure string */
-        for(idx=0; idx<closureLength;) {
-            U16_NEXT_UNSAFE(closure, idx, c);
-            sa->add(sa->set, c);
-        }
-    }
-}
-
-/*
- * compare s, which has a length, with t, which has a maximum length or is NUL-terminated
- * must be length>0 and max>0 and length<=max
- */
-static inline int32_t
-strcmpMax(const UChar *s, int32_t length, const UChar *t, int32_t max) {
-    int32_t c1, c2;
-
-    max-=length; /* we require length<=max, so no need to decrement max in the loop */
-    do {
-        c1=*s++;
-        c2=*t++;
-        if(c2==0) {
-            return 1; /* reached the end of t but not of s */
-        }
-        c1-=c2;
-        if(c1!=0) {
-            return c1; /* return difference result */
-        }
-    } while(--length>0);
-    /* ends with length==0 */
-
-    if(max==0 || *t==0) {
-        return 0; /* equal to length of both strings */
-    } else {
-        return -max; /* return lengh difference */
-    }
-}
-
-U_CFUNC UBool U_EXPORT2
-ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa) {
-    int32_t i, start, limit, result, unfoldRows, unfoldRowWidth, unfoldStringWidth;
-
-    if(csp->unfold==NULL || s==NULL) {
-        return FALSE; /* no reverse case folding data, or no string */
-    }
-    if(length<=1) {
-        /* the string is too short to find any match */
-        /*
-         * more precise would be:
-         * if(!u_strHasMoreChar32Than(s, length, 1))
-         * but this does not make much practical difference because
-         * a single supplementary code point would just not be found
-         */
-        return FALSE;
-    }
-
-    const uint16_t *unfold=csp->unfold;
-    unfoldRows=unfold[UCASE_UNFOLD_ROWS];
-    unfoldRowWidth=unfold[UCASE_UNFOLD_ROW_WIDTH];
-    unfoldStringWidth=unfold[UCASE_UNFOLD_STRING_WIDTH];
-    unfold+=unfoldRowWidth;
-
-    if(length>unfoldStringWidth) {
-        /* the string is too long to find any match */
-        return FALSE;
-    }
-
-    /* do a binary search for the string */
-    start=0;
-    limit=unfoldRows;
-    while(start<limit) {
-        i=(start+limit)/2;
-        const UChar *p=reinterpret_cast<const UChar *>(unfold+(i*unfoldRowWidth));
-        result=strcmpMax(s, length, p, unfoldStringWidth);
-
-        if(result==0) {
-            /* found the string: add each code point, and its case closure */
-            UChar32 c;
-
-            for(i=unfoldStringWidth; i<unfoldRowWidth && p[i]!=0;) {
-                U16_NEXT_UNSAFE(p, i, c);
-                sa->add(sa->set, c);
-                ucase_addCaseClosure(csp, c, sa);
-            }
-            return TRUE;
-        } else if(result<0) {
-            limit=i;
-        } else /* result>0 */ {
-            start=i+1;
-        }
-    }
-
-    return FALSE; /* string not found */
-}
-
-U_NAMESPACE_BEGIN
-
-FullCaseFoldingIterator::FullCaseFoldingIterator()
-        : unfold(reinterpret_cast<const UChar *>(ucase_props_singleton.unfold)),
-          unfoldRows(unfold[UCASE_UNFOLD_ROWS]),
-          unfoldRowWidth(unfold[UCASE_UNFOLD_ROW_WIDTH]),
-          unfoldStringWidth(unfold[UCASE_UNFOLD_STRING_WIDTH]),
-          currentRow(0),
-          rowCpIndex(unfoldStringWidth) {
-    unfold+=unfoldRowWidth;
-}
-
-UChar32
-FullCaseFoldingIterator::next(UnicodeString &full) {
-    // Advance past the last-delivered code point.
-    const UChar *p=unfold+(currentRow*unfoldRowWidth);
-    if(rowCpIndex>=unfoldRowWidth || p[rowCpIndex]==0) {
-        ++currentRow;
-        p+=unfoldRowWidth;
-        rowCpIndex=unfoldStringWidth;
-    }
-    if(currentRow>=unfoldRows) { return U_SENTINEL; }
-    // Set "full" to the NUL-terminated string in the first unfold column.
-    int32_t length=unfoldStringWidth;
-    while(length>0 && p[length-1]==0) { --length; }
-    full.setTo(FALSE, p, length);
-    // Return the code point.
-    UChar32 c;
-    U16_NEXT_UNSAFE(p, rowCpIndex, c);
-    return c;
-}
-
-U_NAMESPACE_END
-
-/** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */
-U_CAPI int32_t U_EXPORT2
-ucase_getType(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    return UCASE_GET_TYPE(props);
-}
-
-/** @return same as ucase_getType() and set bit 2 if c is case-ignorable */
-U_CAPI int32_t U_EXPORT2
-ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    return UCASE_GET_TYPE_AND_IGNORABLE(props);
-}
-
-/** @return UCASE_NO_DOT, UCASE_SOFT_DOTTED, UCASE_ABOVE, UCASE_OTHER_ACCENT */
-static inline int32_t
-getDotType(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        return props&UCASE_DOT_MASK;
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props);
-        return (*pe>>UCASE_EXC_DOT_SHIFT)&UCASE_DOT_MASK;
-    }
-}
-
-U_CAPI UBool U_EXPORT2
-ucase_isSoftDotted(const UCaseProps *csp, UChar32 c) {
-    return (UBool)(getDotType(csp, c)==UCASE_SOFT_DOTTED);
-}
-
-U_CAPI UBool U_EXPORT2
-ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    return (UBool)((props&UCASE_SENSITIVE)!=0);
-}
-
-/* string casing ------------------------------------------------------------ */
-
-/*
- * These internal functions form the core of string case mappings.
- * They map single code points to result code points or strings and take
- * all necessary conditions (context, locale ID, options) into account.
- *
- * They do not iterate over the source or write to the destination
- * so that the same functions are useful for non-standard string storage,
- * such as in a Replaceable (for Transliterator) or UTF-8/32 strings etc.
- * For the same reason, the "surrounding text" context is passed in as a
- * UCaseContextIterator which does not make any assumptions about
- * the underlying storage.
- *
- * This section contains helper functions that check for conditions
- * in the input text surrounding the current code point
- * according to SpecialCasing.txt.
- *
- * Each helper function gets the index
- * - after the current code point if it looks at following text
- * - before the current code point if it looks at preceding text
- *
- * Unicode 3.2 UAX 21 "Case Mappings" defines the conditions as follows:
- *
- * Final_Sigma
- *   C is preceded by a sequence consisting of
- *     a cased letter and a case-ignorable sequence,
- *   and C is not followed by a sequence consisting of
- *     an ignorable sequence and then a cased letter.
- *
- * More_Above
- *   C is followed by one or more characters of combining class 230 (ABOVE)
- *   in the combining character sequence.
- *
- * After_Soft_Dotted
- *   The last preceding character with combining class of zero before C
- *   was Soft_Dotted,
- *   and there is no intervening combining character class 230 (ABOVE).
- *
- * Before_Dot
- *   C is followed by combining dot above (U+0307).
- *   Any sequence of characters with a combining class that is neither 0 nor 230
- *   may intervene between the current character and the combining dot above.
- *
- * The erratum from 2002-10-31 adds the condition
- *
- * After_I
- *   The last preceding base character was an uppercase I, and there is no
- *   intervening combining character class 230 (ABOVE).
- *
- *   (See Jitterbug 2344 and the comments on After_I below.)
- *
- * Helper definitions in Unicode 3.2 UAX 21:
- *
- * D1. A character C is defined to be cased
- *     if it meets any of the following criteria:
- *
- *   - The general category of C is Titlecase Letter (Lt)
- *   - In [CoreProps], C has one of the properties Uppercase, or Lowercase
- *   - Given D = NFD(C), then it is not the case that:
- *     D = UCD_lower(D) = UCD_upper(D) = UCD_title(D)
- *     (This third criterium does not add any characters to the list
- *      for Unicode 3.2. Ignored.)
- *
- * D2. A character C is defined to be case-ignorable
- *     if it meets either of the following criteria:
- *
- *   - The general category of C is
- *     Nonspacing Mark (Mn), or Enclosing Mark (Me), or Format Control (Cf), or
- *     Letter Modifier (Lm), or Symbol Modifier (Sk)
- *   - C is one of the following characters 
- *     U+0027 APOSTROPHE
- *     U+00AD SOFT HYPHEN (SHY)
- *     U+2019 RIGHT SINGLE QUOTATION MARK
- *            (the preferred character for apostrophe)
- *
- * D3. A case-ignorable sequence is a sequence of
- *     zero or more case-ignorable characters.
- */
-
-#define is_a(c) ((c)=='a' || (c)=='A')
-#define is_d(c) ((c)=='d' || (c)=='D')
-#define is_e(c) ((c)=='e' || (c)=='E')
-#define is_i(c) ((c)=='i' || (c)=='I')
-#define is_l(c) ((c)=='l' || (c)=='L')
-#define is_n(c) ((c)=='n' || (c)=='N')
-#define is_r(c) ((c)=='r' || (c)=='R')
-#define is_t(c) ((c)=='t' || (c)=='T')
-#define is_u(c) ((c)=='u' || (c)=='U')
-#define is_z(c) ((c)=='z' || (c)=='Z')
-
-/* separator? */
-#define is_sep(c) ((c)=='_' || (c)=='-' || (c)==0)
-
-/**
- * Requires non-NULL locale ID but otherwise does the equivalent of
- * checking for language codes as if uloc_getLanguage() were called:
- * Accepts both 2- and 3-letter codes and accepts case variants.
- */
-U_CFUNC int32_t
-ucase_getCaseLocale(const char *locale, int32_t *locCache) {
-    int32_t result;
-    char c;
-
-    if(locCache!=NULL && (result=*locCache)!=UCASE_LOC_UNKNOWN) {
-        return result;
-    }
-
-    result=UCASE_LOC_ROOT;
-
-    /*
-     * This function used to use uloc_getLanguage(), but the current code
-     * removes the dependency of this low-level code on uloc implementation code
-     * and is faster because not the whole locale ID has to be
-     * examined and copied/transformed.
-     *
-     * Because this code does not want to depend on uloc, the caller must
-     * pass in a non-NULL locale, i.e., may need to call uloc_getDefault().
-     */
-    c=*locale++;
-    if(is_t(c)) {
-        /* tr or tur? */
-        c=*locale++;
-        if(is_u(c)) {
-            c=*locale++;
-        }
-        if(is_r(c)) {
-            c=*locale;
-            if(is_sep(c)) {
-                result=UCASE_LOC_TURKISH;
-            }
-        }
-    } else if(is_a(c)) {
-        /* az or aze? */
-        c=*locale++;
-        if(is_z(c)) {
-            c=*locale++;
-            if(is_e(c)) {
-                c=*locale;
-            }
-            if(is_sep(c)) {
-                result=UCASE_LOC_TURKISH;
-            }
-        }
-    } else if(is_l(c)) {
-        /* lt or lit? */
-        c=*locale++;
-        if(is_i(c)) {
-            c=*locale++;
-        }
-        if(is_t(c)) {
-            c=*locale;
-            if(is_sep(c)) {
-                result=UCASE_LOC_LITHUANIAN;
-            }
-        }
-    } else if(is_n(c)) {
-        /* nl or nld? */
-        c=*locale++;
-        if(is_l(c)) {
-            c=*locale++;
-            if(is_d(c)) {
-                c=*locale;
-            }
-            if(is_sep(c)) {
-                result=UCASE_LOC_DUTCH;
-            }
-        }
-    }
-
-    if(locCache!=NULL) {
-        *locCache=result;
-    }
-    return result;
-}
-
-/*
- * Is followed by
- *   {case-ignorable}* cased
- * ?
- * (dir determines looking forward/backward)
- * If a character is case-ignorable, it is skipped regardless of whether
- * it is also cased or not.
- */
-static UBool
-isFollowedByCasedLetter(const UCaseProps *csp, UCaseContextIterator *iter, void *context, int8_t dir) {
-    UChar32 c;
-
-    if(iter==NULL) {
-        return FALSE;
-    }
-
-    for(/* dir!=0 sets direction */; (c=iter(context, dir))>=0; dir=0) {
-        int32_t type=ucase_getTypeOrIgnorable(csp, c);
-        if(type&4) {
-            /* case-ignorable, continue with the loop */
-        } else if(type!=UCASE_NONE) {
-            return TRUE; /* followed by cased letter */
-        } else {
-            return FALSE; /* uncased and not case-ignorable */
-        }
-    }
-
-    return FALSE; /* not followed by cased letter */
-}
-
-/* Is preceded by Soft_Dotted character with no intervening cc=230 ? */
-static UBool
-isPrecededBySoftDotted(const UCaseProps *csp, UCaseContextIterator *iter, void *context) {
-    UChar32 c;
-    int32_t dotType;
-    int8_t dir;
-
-    if(iter==NULL) {
-        return FALSE;
-    }
-
-    for(dir=-1; (c=iter(context, dir))>=0; dir=0) {
-        dotType=getDotType(csp, c);
-        if(dotType==UCASE_SOFT_DOTTED) {
-            return TRUE; /* preceded by TYPE_i */
-        } else if(dotType!=UCASE_OTHER_ACCENT) {
-            return FALSE; /* preceded by different base character (not TYPE_i), or intervening cc==230 */
-        }
-    }
-
-    return FALSE; /* not preceded by TYPE_i */
-}
-
-/*
- * See Jitterbug 2344:
- * The condition After_I for Turkic-lowercasing of U+0307 combining dot above
- * is checked in ICU 2.0, 2.1, 2.6 but was not in 2.2 & 2.4 because
- * we made those releases compatible with Unicode 3.2 which had not fixed
- * a related bug in SpecialCasing.txt.
- *
- * From the Jitterbug 2344 text:
- * ... this bug is listed as a Unicode erratum
- * from 2002-10-31 at http://www.unicode.org/uni2errata/UnicodeErrata.html
- * <quote>
- * There are two errors in SpecialCasing.txt.
- * 1. Missing semicolons on two lines. ... [irrelevant for ICU]
- * 2. An incorrect context definition. Correct as follows:
- * < 0307; ; 0307; 0307; tr After_Soft_Dotted; # COMBINING DOT ABOVE
- * < 0307; ; 0307; 0307; az After_Soft_Dotted; # COMBINING DOT ABOVE
- * ---
- * > 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
- * > 0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
- * where the context After_I is defined as:
- * The last preceding base character was an uppercase I, and there is no
- * intervening combining character class 230 (ABOVE).
- * </quote>
- *
- * Note that SpecialCasing.txt even in Unicode 3.2 described the condition as:
- *
- * # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
- * # This matches the behavior of the canonically equivalent I-dot_above
- *
- * See also the description in this place in older versions of uchar.c (revision 1.100).
- *
- * Markus W. Scherer 2003-feb-15
- */
-
-/* Is preceded by base character 'I' with no intervening cc=230 ? */
-static UBool
-isPrecededBy_I(const UCaseProps *csp, UCaseContextIterator *iter, void *context) {
-    UChar32 c;
-    int32_t dotType;
-    int8_t dir;
-
-    if(iter==NULL) {
-        return FALSE;
-    }
-
-    for(dir=-1; (c=iter(context, dir))>=0; dir=0) {
-        if(c==0x49) {
-            return TRUE; /* preceded by I */
-        }
-        dotType=getDotType(csp, c);
-        if(dotType!=UCASE_OTHER_ACCENT) {
-            return FALSE; /* preceded by different base character (not I), or intervening cc==230 */
-        }
-    }
-
-    return FALSE; /* not preceded by I */
-}
-
-/* Is followed by one or more cc==230 ? */
-static UBool
-isFollowedByMoreAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *context) {
-    UChar32 c;
-    int32_t dotType;
-    int8_t dir;
-
-    if(iter==NULL) {
-        return FALSE;
-    }
-
-    for(dir=1; (c=iter(context, dir))>=0; dir=0) {
-        dotType=getDotType(csp, c);
-        if(dotType==UCASE_ABOVE) {
-            return TRUE; /* at least one cc==230 following */
-        } else if(dotType!=UCASE_OTHER_ACCENT) {
-            return FALSE; /* next base character, no more cc==230 following */
-        }
-    }
-
-    return FALSE; /* no more cc==230 following */
-}
-
-/* Is followed by a dot above (without cc==230 in between) ? */
-static UBool
-isFollowedByDotAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *context) {
-    UChar32 c;
-    int32_t dotType;
-    int8_t dir;
-
-    if(iter==NULL) {
-        return FALSE;
-    }
-
-    for(dir=1; (c=iter(context, dir))>=0; dir=0) {
-        if(c==0x307) {
-            return TRUE;
-        }
-        dotType=getDotType(csp, c);
-        if(dotType!=UCASE_OTHER_ACCENT) {
-            return FALSE; /* next base character or cc==230 in between */
-        }
-    }
-
-    return FALSE; /* no dot above following */
-}
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullLower(const UCaseProps *csp, UChar32 c,
-                  UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
-                  const char *locale, int32_t *locCache)
-{
-    UChar32 result=c;
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)>=UCASE_UPPER) {
-            result=c+UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2;
-        uint16_t excWord=*pe++;
-        int32_t full;
-
-        pe2=pe;
-
-        if(excWord&UCASE_EXC_CONDITIONAL_SPECIAL) {
-            /* use hardcoded conditions and mappings */
-            int32_t loc=ucase_getCaseLocale(locale, locCache);
-
-            /*
-             * Test for conditional mappings first
-             *   (otherwise the unconditional default mappings are always taken),
-             * then test for characters that have unconditional mappings in SpecialCasing.txt,
-             * then get the UnicodeData.txt mappings.
-             */
-            if( loc==UCASE_LOC_LITHUANIAN &&
-                    /* base characters, find accents above */
-                    (((c==0x49 || c==0x4a || c==0x12e) &&
-                        isFollowedByMoreAbove(csp, iter, context)) ||
-                    /* precomposed with accent above, no need to find one */
-                    (c==0xcc || c==0xcd || c==0x128))
-            ) {
-                /*
-                    # Lithuanian
-
-                    # Lithuanian retains the dot in a lowercase i when followed by accents.
-
-                    # Introduce an explicit dot above when lowercasing capital I's and J's
-                    # whenever there are more accents above.
-                    # (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek)
-
-                    0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I
-                    004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J
-                    012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK
-                    00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE
-                    00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE
-                    0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE
-                 */
-                switch(c) {
-                case 0x49:  /* LATIN CAPITAL LETTER I */
-                    *pString=iDot;
-                    return 2;
-                case 0x4a:  /* LATIN CAPITAL LETTER J */
-                    *pString=jDot;
-                    return 2;
-                case 0x12e: /* LATIN CAPITAL LETTER I WITH OGONEK */
-                    *pString=iOgonekDot;
-                    return 2;
-                case 0xcc:  /* LATIN CAPITAL LETTER I WITH GRAVE */
-                    *pString=iDotGrave;
-                    return 3;
-                case 0xcd:  /* LATIN CAPITAL LETTER I WITH ACUTE */
-                    *pString=iDotAcute;
-                    return 3;
-                case 0x128: /* LATIN CAPITAL LETTER I WITH TILDE */
-                    *pString=iDotTilde;
-                    return 3;
-                default:
-                    return 0; /* will not occur */
-                }
-            /* # Turkish and Azeri */
-            } else if(loc==UCASE_LOC_TURKISH && c==0x130) {
-                /*
-                    # I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
-                    # The following rules handle those cases.
-
-                    0130; 0069; 0130; 0130; tr # LATIN CAPITAL LETTER I WITH DOT ABOVE
-                    0130; 0069; 0130; 0130; az # LATIN CAPITAL LETTER I WITH DOT ABOVE
-                 */
-                return 0x69;
-            } else if(loc==UCASE_LOC_TURKISH && c==0x307 && isPrecededBy_I(csp, iter, context)) {
-                /*
-                    # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
-                    # This matches the behavior of the canonically equivalent I-dot_above
-
-                    0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
-                    0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
-                 */
-                return 0; /* remove the dot (continue without output) */
-            } else if(loc==UCASE_LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(csp, iter, context)) {
-                /*
-                    # When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
-
-                    0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I
-                    0049; 0131; 0049; 0049; az Not_Before_Dot; # LATIN CAPITAL LETTER I
-                 */
-                return 0x131;
-            } else if(c==0x130) {
-                /*
-                    # Preserve canonical equivalence for I with dot. Turkic is handled below.
-
-                    0130; 0069 0307; 0130; 0130; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-                 */
-                *pString=iDot;
-                return 2;
-            } else if(  c==0x3a3 &&
-                        !isFollowedByCasedLetter(csp, iter, context, 1) &&
-                        isFollowedByCasedLetter(csp, iter, context, -1) /* -1=preceded */
-            ) {
-                /* greek capital sigma maps depending on surrounding cased letters (see SpecialCasing.txt) */
-                /*
-                    # Special case for final form of sigma
-
-                    03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA
-                 */
-                return 0x3c2; /* greek small final sigma */
-            } else {
-                /* no known conditional special case mapping, use a normal mapping */
-            }
-        } else if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
-            GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, full);
-            full&=UCASE_FULL_LOWER;
-            if(full!=0) {
-                /* set the output pointer to the lowercase mapping */
-                *pString=reinterpret_cast<const UChar *>(pe+1);
-
-                /* return the string length */
-                return full;
-            }
-        }
-
-        if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) {
-            GET_SLOT_VALUE(excWord, UCASE_EXC_LOWER, pe2, result);
-        }
-    }
-
-    return (result==c) ? ~result : result;
-}
-
-/* internal */
-static int32_t
-toUpperOrTitle(const UCaseProps *csp, UChar32 c,
-               UCaseContextIterator *iter, void *context,
-               const UChar **pString,
-               const char *locale, int32_t *locCache,
-               UBool upperNotTitle) {
-    UChar32 result=c;
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)==UCASE_LOWER) {
-            result=c+UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2;
-        uint16_t excWord=*pe++;
-        int32_t full, idx;
-
-        pe2=pe;
-
-        if(excWord&UCASE_EXC_CONDITIONAL_SPECIAL) {
-            /* use hardcoded conditions and mappings */
-            int32_t loc=ucase_getCaseLocale(locale, locCache);
-
-            if(loc==UCASE_LOC_TURKISH && c==0x69) {
-                /*
-                    # Turkish and Azeri
-
-                    # I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
-                    # The following rules handle those cases.
-
-                    # When uppercasing, i turns into a dotted capital I
-
-                    0069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I
-                    0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I
-                */
-                return 0x130;
-            } else if(loc==UCASE_LOC_LITHUANIAN && c==0x307 && isPrecededBySoftDotted(csp, iter, context)) {
-                /*
-                    # Lithuanian
-
-                    # Lithuanian retains the dot in a lowercase i when followed by accents.
-
-                    # Remove DOT ABOVE after "i" with upper or titlecase
-
-                    0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE
-                 */
-                return 0; /* remove the dot (continue without output) */
-            } else {
-                /* no known conditional special case mapping, use a normal mapping */
-            }
-        } else if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
-            GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, full);
-
-            /* start of full case mapping strings */
-            ++pe;
-
-            /* skip the lowercase and case-folding result strings */
-            pe+=full&UCASE_FULL_LOWER;
-            full>>=4;
-            pe+=full&0xf;
-            full>>=4;
-
-            if(upperNotTitle) {
-                full&=0xf;
-            } else {
-                /* skip the uppercase result string */
-                pe+=full&0xf;
-                full=(full>>4)&0xf;
-            }
-
-            if(full!=0) {
-                /* set the output pointer to the result string */
-                *pString=reinterpret_cast<const UChar *>(pe);
-
-                /* return the string length */
-                return full;
-            }
-        }
-
-        if(!upperNotTitle && HAS_SLOT(excWord, UCASE_EXC_TITLE)) {
-            idx=UCASE_EXC_TITLE;
-        } else if(HAS_SLOT(excWord, UCASE_EXC_UPPER)) {
-            /* here, titlecase is same as uppercase */
-            idx=UCASE_EXC_UPPER;
-        } else {
-            return ~c;
-        }
-        GET_SLOT_VALUE(excWord, idx, pe2, result);
-    }
-
-    return (result==c) ? ~result : result;
-}
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullUpper(const UCaseProps *csp, UChar32 c,
-                  UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
-                  const char *locale, int32_t *locCache) {
-    return toUpperOrTitle(csp, c, iter, context, pString, locale, locCache, TRUE);
-}
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullTitle(const UCaseProps *csp, UChar32 c,
-                  UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
-                  const char *locale, int32_t *locCache) {
-    return toUpperOrTitle(csp, c, iter, context, pString, locale, locCache, FALSE);
-}
-
-/* case folding ------------------------------------------------------------- */
-
-/*
- * Case folding is similar to lowercasing.
- * The result may be a simple mapping, i.e., a single code point, or
- * a full mapping, i.e., a string.
- * If the case folding for a code point is the same as its simple (1:1) lowercase mapping,
- * then only the lowercase mapping is stored.
- *
- * Some special cases are hardcoded because their conditions cannot be
- * parsed and processed from CaseFolding.txt.
- *
- * Unicode 3.2 CaseFolding.txt specifies for its status field:
-
-# C: common case folding, common mappings shared by both simple and full mappings.
-# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
-# S: simple case folding, mappings to single characters where different from F.
-# T: special case for uppercase I and dotted uppercase I
-#    - For non-Turkic languages, this mapping is normally not used.
-#    - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
-#
-# Usage:
-#  A. To do a simple case folding, use the mappings with status C + S.
-#  B. To do a full case folding, use the mappings with status C + F.
-#
-#    The mappings with status T can be used or omitted depending on the desired case-folding
-#    behavior. (The default option is to exclude them.)
-
- * Unicode 3.2 has 'T' mappings as follows:
-
-0049; T; 0131; # LATIN CAPITAL LETTER I
-0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-
- * while the default mappings for these code points are:
-
-0049; C; 0069; # LATIN CAPITAL LETTER I
-0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-
- * U+0130 has no simple case folding (simple-case-folds to itself).
- */
-
-/* return the simple case folding mapping for c */
-U_CAPI UChar32 U_EXPORT2
-ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) {
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)>=UCASE_UPPER) {
-            c+=UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props);
-        uint16_t excWord=*pe++;
-        int32_t idx;
-        if(excWord&UCASE_EXC_CONDITIONAL_FOLD) {
-            /* special case folding mappings, hardcoded */
-            if((options&_FOLD_CASE_OPTIONS_MASK)==U_FOLD_CASE_DEFAULT) {
-                /* default mappings */
-                if(c==0x49) {
-                    /* 0049; C; 0069; # LATIN CAPITAL LETTER I */
-                    return 0x69;
-                } else if(c==0x130) {
-                    /* no simple case folding for U+0130 */
-                    return c;
-                }
-            } else {
-                /* Turkic mappings */
-                if(c==0x49) {
-                    /* 0049; T; 0131; # LATIN CAPITAL LETTER I */
-                    return 0x131;
-                } else if(c==0x130) {
-                    /* 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE */
-                    return 0x69;
-                }
-            }
-        }
-        if(HAS_SLOT(excWord, UCASE_EXC_FOLD)) {
-            idx=UCASE_EXC_FOLD;
-        } else if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) {
-            idx=UCASE_EXC_LOWER;
-        } else {
-            return c;
-        }
-        GET_SLOT_VALUE(excWord, idx, pe, c);
-    }
-    return c;
-}
-
-/*
- * Issue for canonical caseless match (UAX #21):
- * Turkic casefolding (using "T" mappings in CaseFolding.txt) does not preserve
- * canonical equivalence, unlike default-option casefolding.
- * For example, I-grave and I + grave fold to strings that are not canonically
- * equivalent.
- * For more details, see the comment in unorm_compare() in unorm.cpp
- * and the intermediate prototype changes for Jitterbug 2021.
- * (For example, revision 1.104 of uchar.c and 1.4 of CaseFolding.txt.)
- *
- * This did not get fixed because it appears that it is not possible to fix
- * it for uppercase and lowercase characters (I-grave vs. i-grave)
- * together in a way that they still fold to common result strings.
- */
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullFolding(const UCaseProps *csp, UChar32 c,
-                    const UChar **pString,
-                    uint32_t options)
-{
-    UChar32 result=c;
-    uint16_t props=UTRIE2_GET16(&csp->trie, c);
-    if(!PROPS_HAS_EXCEPTION(props)) {
-        if(UCASE_GET_TYPE(props)>=UCASE_UPPER) {
-            result=c+UCASE_GET_DELTA(props);
-        }
-    } else {
-        const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2;
-        uint16_t excWord=*pe++;
-        int32_t full, idx;
-
-        pe2=pe;
-
-        if(excWord&UCASE_EXC_CONDITIONAL_FOLD) {
-            /* use hardcoded conditions and mappings */
-            if((options&_FOLD_CASE_OPTIONS_MASK)==U_FOLD_CASE_DEFAULT) {
-                /* default mappings */
-                if(c==0x49) {
-                    /* 0049; C; 0069; # LATIN CAPITAL LETTER I */
-                    return 0x69;
-                } else if(c==0x130) {
-                    /* 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE */
-                    *pString=iDot;
-                    return 2;
-                }
-            } else {
-                /* Turkic mappings */
-                if(c==0x49) {
-                    /* 0049; T; 0131; # LATIN CAPITAL LETTER I */
-                    return 0x131;
-                } else if(c==0x130) {
-                    /* 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE */
-                    return 0x69;
-                }
-            }
-        } else if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
-            GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, full);
-
-            /* start of full case mapping strings */
-            ++pe;
-
-            /* skip the lowercase result string */
-            pe+=full&UCASE_FULL_LOWER;
-            full=(full>>4)&0xf;
-
-            if(full!=0) {
-                /* set the output pointer to the result string */
-                *pString=reinterpret_cast<const UChar *>(pe);
-
-                /* return the string length */
-                return full;
-            }
-        }
-
-        if(HAS_SLOT(excWord, UCASE_EXC_FOLD)) {
-            idx=UCASE_EXC_FOLD;
-        } else if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) {
-            idx=UCASE_EXC_LOWER;
-        } else {
-            return ~c;
-        }
-        GET_SLOT_VALUE(excWord, idx, pe2, result);
-    }
-
-    return (result==c) ? ~result : result;
-}
-
-/* case mapping properties API ---------------------------------------------- */
-
-#define GET_CASE_PROPS() &ucase_props_singleton
-
-/* public API (see uchar.h) */
-
-U_CAPI UBool U_EXPORT2
-u_isULowercase(UChar32 c) {
-    return (UBool)(UCASE_LOWER==ucase_getType(GET_CASE_PROPS(), c));
-}
-
-U_CAPI UBool U_EXPORT2
-u_isUUppercase(UChar32 c) {
-    return (UBool)(UCASE_UPPER==ucase_getType(GET_CASE_PROPS(), c));
-}
-
-/* Transforms the Unicode character to its lower case equivalent.*/
-U_CAPI UChar32 U_EXPORT2
-u_tolower(UChar32 c) {
-    return ucase_tolower(GET_CASE_PROPS(), c);
-}
-    
-/* Transforms the Unicode character to its upper case equivalent.*/
-U_CAPI UChar32 U_EXPORT2
-u_toupper(UChar32 c) {
-    return ucase_toupper(GET_CASE_PROPS(), c);
-}
-
-/* Transforms the Unicode character to its title case equivalent.*/
-U_CAPI UChar32 U_EXPORT2
-u_totitle(UChar32 c) {
-    return ucase_totitle(GET_CASE_PROPS(), c);
-}
-
-/* return the simple case folding mapping for c */
-U_CAPI UChar32 U_EXPORT2
-u_foldCase(UChar32 c, uint32_t options) {
-    return ucase_fold(GET_CASE_PROPS(), c, options);
-}
-
-U_CFUNC int32_t U_EXPORT2
-ucase_hasBinaryProperty(UChar32 c, UProperty which) {
-    /* case mapping properties */
-    const UChar *resultString;
-    int32_t locCache;
-    const UCaseProps *csp=GET_CASE_PROPS();
-    if(csp==NULL) {
-        return FALSE;
-    }
-    switch(which) {
-    case UCHAR_LOWERCASE:
-        return (UBool)(UCASE_LOWER==ucase_getType(csp, c));
-    case UCHAR_UPPERCASE:
-        return (UBool)(UCASE_UPPER==ucase_getType(csp, c));
-    case UCHAR_SOFT_DOTTED:
-        return ucase_isSoftDotted(csp, c);
-    case UCHAR_CASE_SENSITIVE:
-        return ucase_isCaseSensitive(csp, c);
-    case UCHAR_CASED:
-        return (UBool)(UCASE_NONE!=ucase_getType(csp, c));
-    case UCHAR_CASE_IGNORABLE:
-        return (UBool)(ucase_getTypeOrIgnorable(csp, c)>>2);
-    /*
-     * Note: The following Changes_When_Xyz are defined as testing whether
-     * the NFD form of the input changes when Xyz-case-mapped.
-     * However, this simpler implementation of these properties,
-     * ignoring NFD, passes the tests.
-     * The implementation needs to be changed if the tests start failing.
-     * When that happens, optimizations should be used to work with the
-     * per-single-code point ucase_toFullXyz() functions unless
-     * the NFD form has more than one code point,
-     * and the property starts set needs to be the union of the
-     * start sets for normalization and case mappings.
-     */
-    case UCHAR_CHANGES_WHEN_LOWERCASED:
-        locCache=UCASE_LOC_ROOT;
-        return (UBool)(ucase_toFullLower(csp, c, NULL, NULL, &resultString, "", &locCache)>=0);
-    case UCHAR_CHANGES_WHEN_UPPERCASED:
-        locCache=UCASE_LOC_ROOT;
-        return (UBool)(ucase_toFullUpper(csp, c, NULL, NULL, &resultString, "", &locCache)>=0);
-    case UCHAR_CHANGES_WHEN_TITLECASED:
-        locCache=UCASE_LOC_ROOT;
-        return (UBool)(ucase_toFullTitle(csp, c, NULL, NULL, &resultString, "", &locCache)>=0);
-    /* case UCHAR_CHANGES_WHEN_CASEFOLDED: -- in uprops.c */
-    case UCHAR_CHANGES_WHEN_CASEMAPPED:
-        locCache=UCASE_LOC_ROOT;
-        return (UBool)(
-            ucase_toFullLower(csp, c, NULL, NULL, &resultString, "", &locCache)>=0 ||
-            ucase_toFullUpper(csp, c, NULL, NULL, &resultString, "", &locCache)>=0 ||
-            ucase_toFullTitle(csp, c, NULL, NULL, &resultString, "", &locCache)>=0);
-    default:
-        return FALSE;
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/ucase.h b/src/third_party/mozjs/intl/icu/source/common/ucase.h
deleted file mode 100644
index 8f24769..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ucase.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2004-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  ucase.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2004aug30
-*   created by: Markus W. Scherer
-*
-*   Low-level Unicode character/string case mapping code.
-*/
-
-#ifndef __UCASE_H__
-#define __UCASE_H__
-
-#include "unicode/utypes.h"
-#include "unicode/uset.h"
-#include "putilimp.h"
-#include "uset_imp.h"
-#include "udataswp.h"
-
-#ifdef __cplusplus
-U_NAMESPACE_BEGIN
-
-class UnicodeString;
-
-U_NAMESPACE_END
-#endif
-
-/* library API -------------------------------------------------------------- */
-
-U_CDECL_BEGIN
-
-struct UCaseProps;
-typedef struct UCaseProps UCaseProps;
-
-U_CDECL_END
-
-U_CAPI const UCaseProps * U_EXPORT2
-ucase_getSingleton(void);
-
-U_CFUNC void U_EXPORT2
-ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode);
-
-/**
- * Requires non-NULL locale ID but otherwise does the equivalent of
- * checking for language codes as if uloc_getLanguage() were called:
- * Accepts both 2- and 3-letter codes and accepts case variants.
- */
-U_CFUNC int32_t
-ucase_getCaseLocale(const char *locale, int32_t *locCache);
-
-/* Casing locale types for ucase_getCaseLocale */
-enum {
-    UCASE_LOC_UNKNOWN,
-    UCASE_LOC_ROOT,
-    UCASE_LOC_TURKISH,
-    UCASE_LOC_LITHUANIAN,
-    UCASE_LOC_DUTCH
-};
-
-/**
- * Bit mask for getting just the options from a string compare options word
- * that are relevant for case-insensitive string comparison.
- * See uchar.h. Also include _STRNCMP_STYLE and U_COMPARE_CODE_POINT_ORDER.
- * @internal
- */
-#define _STRCASECMP_OPTIONS_MASK 0xffff
-
-/**
- * Bit mask for getting just the options from a string compare options word
- * that are relevant for case folding (of a single string or code point).
- * See uchar.h.
- * @internal
- */
-#define _FOLD_CASE_OPTIONS_MASK 0xff
-
-/* single-code point functions */
-
-U_CAPI UChar32 U_EXPORT2
-ucase_tolower(const UCaseProps *csp, UChar32 c);
-
-U_CAPI UChar32 U_EXPORT2
-ucase_toupper(const UCaseProps *csp, UChar32 c);
-
-U_CAPI UChar32 U_EXPORT2
-ucase_totitle(const UCaseProps *csp, UChar32 c);
-
-U_CAPI UChar32 U_EXPORT2
-ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options);
-
-/**
- * Adds all simple case mappings and the full case folding for c to sa,
- * and also adds special case closure mappings.
- * c itself is not added.
- * For example, the mappings
- * - for s include long s
- * - for sharp s include ss
- * - for k include the Kelvin sign
- */
-U_CFUNC void U_EXPORT2
-ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa);
-
-/**
- * Maps the string to single code points and adds the associated case closure
- * mappings.
- * The string is mapped to code points if it is their full case folding string.
- * In other words, this performs a reverse full case folding and then
- * adds the case closure items of the resulting code points.
- * If the string is found and its closure applied, then
- * the string itself is added as well as part of its code points' closure.
- * It must be length>=0.
- *
- * @return TRUE if the string was found
- */
-U_CFUNC UBool U_EXPORT2
-ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa);
-
-#ifdef __cplusplus
-U_NAMESPACE_BEGIN
-
-/**
- * Iterator over characters with more than one code point in the full default Case_Folding.
- */
-class U_COMMON_API FullCaseFoldingIterator {
-public:
-    /** Constructor. */
-    FullCaseFoldingIterator();
-    /**
-     * Returns the next (cp, full) pair where "full" is cp's full default Case_Folding.
-     * Returns a negative cp value at the end of the iteration.
-     */
-    UChar32 next(UnicodeString &full);
-private:
-    FullCaseFoldingIterator(const FullCaseFoldingIterator &);  // no copy
-    FullCaseFoldingIterator &operator=(const FullCaseFoldingIterator &);  // no assignment
-
-    const UChar *unfold;
-    int32_t unfoldRows;
-    int32_t unfoldRowWidth;
-    int32_t unfoldStringWidth;
-    int32_t currentRow;
-    int32_t rowCpIndex;
-};
-
-U_NAMESPACE_END
-#endif
-
-/** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */
-U_CAPI int32_t U_EXPORT2
-ucase_getType(const UCaseProps *csp, UChar32 c);
-
-/** @return same as ucase_getType(), or <0 if c is case-ignorable */
-U_CAPI int32_t U_EXPORT2
-ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c);
-
-U_CAPI UBool U_EXPORT2
-ucase_isSoftDotted(const UCaseProps *csp, UChar32 c);
-
-U_CAPI UBool U_EXPORT2
-ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c);
-
-/* string case mapping functions */
-
-U_CDECL_BEGIN
-
-/**
- * Iterator function for string case mappings, which need to look at the
- * context (surrounding text) of a given character for conditional mappings.
- *
- * The iterator only needs to go backward or forward away from the
- * character in question. It does not use any indexes on this interface.
- * It does not support random access or an arbitrary change of
- * iteration direction.
- *
- * The code point being case-mapped itself is never returned by
- * this iterator.
- *
- * @param context A pointer to the iterator's working data.
- * @param dir If <0 then start iterating backward from the character;
- *            if >0 then start iterating forward from the character;
- *            if 0 then continue iterating in the current direction.
- * @return Next code point, or <0 when the iteration is done.
- */
-typedef UChar32 U_CALLCONV
-UCaseContextIterator(void *context, int8_t dir);
-
-/**
- * Sample struct which may be used by some implementations of
- * UCaseContextIterator.
- */
-struct UCaseContext {
-    void *p;
-    int32_t start, index, limit;
-    int32_t cpStart, cpLimit;
-    int8_t dir;
-    int8_t b1, b2, b3;
-};
-typedef struct UCaseContext UCaseContext;
-
-U_CDECL_END
-
-#define UCASECONTEXT_INITIALIZER { NULL,  0, 0, 0,  0, 0,  0,  0, 0, 0 }
-
-enum {
-    /**
-     * For string case mappings, a single character (a code point) is mapped
-     * either to itself (in which case in-place mapping functions do nothing),
-     * or to another single code point, or to a string.
-     * Aside from the string contents, these are indicated with a single int32_t
-     * value as follows:
-     *
-     * Mapping to self: Negative values (~self instead of -self to support U+0000)
-     *
-     * Mapping to another code point: Positive values >UCASE_MAX_STRING_LENGTH
-     *
-     * Mapping to a string: The string length (0..UCASE_MAX_STRING_LENGTH) is
-     * returned. Note that the string result may indeed have zero length.
-     */
-    UCASE_MAX_STRING_LENGTH=0x1f
-};
-
-/**
- * Get the full lowercase mapping for c.
- *
- * @param csp Case mapping properties.
- * @param c Character to be mapped.
- * @param iter Character iterator, used for context-sensitive mappings.
- *             See UCaseContextIterator for details.
- *             If iter==NULL then a context-independent result is returned.
- * @param context Pointer to be passed into iter.
- * @param pString If the mapping result is a string, then the pointer is
- *                written to *pString.
- * @param locale Locale ID for locale-dependent mappings.
- * @param locCache Initialize to 0; may be used to cache the result of parsing
- *                 the locale ID for subsequent calls.
- *                 Can be NULL.
- * @return Output code point or string length, see UCASE_MAX_STRING_LENGTH.
- *
- * @see UCaseContextIterator
- * @see UCASE_MAX_STRING_LENGTH
- * @internal
- */
-U_CAPI int32_t U_EXPORT2
-ucase_toFullLower(const UCaseProps *csp, UChar32 c,
-                  UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
-                  const char *locale, int32_t *locCache);
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullUpper(const UCaseProps *csp, UChar32 c,
-                  UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
-                  const char *locale, int32_t *locCache);
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullTitle(const UCaseProps *csp, UChar32 c,
-                  UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
-                  const char *locale, int32_t *locCache);
-
-U_CAPI int32_t U_EXPORT2
-ucase_toFullFolding(const UCaseProps *csp, UChar32 c,
-                    const UChar **pString,
-                    uint32_t options);
-
-U_CFUNC int32_t U_EXPORT2
-ucase_hasBinaryProperty(UChar32 c, UProperty which);
-
-
-U_CDECL_BEGIN
-
-/**
- * @internal
- */
-typedef int32_t U_CALLCONV
-UCaseMapFull(const UCaseProps *csp, UChar32 c,
-             UCaseContextIterator *iter, void *context,
-             const UChar **pString,
-             const char *locale, int32_t *locCache);
-
-U_CDECL_END
-
-/* file definitions --------------------------------------------------------- */
-
-#define UCASE_DATA_NAME "ucase"
-#define UCASE_DATA_TYPE "icu"
-
-/* format "cAsE" */
-#define UCASE_FMT_0 0x63
-#define UCASE_FMT_1 0x41
-#define UCASE_FMT_2 0x53
-#define UCASE_FMT_3 0x45
-
-/* indexes into indexes[] */
-enum {
-    UCASE_IX_INDEX_TOP,
-    UCASE_IX_LENGTH,
-    UCASE_IX_TRIE_SIZE,
-    UCASE_IX_EXC_LENGTH,
-    UCASE_IX_UNFOLD_LENGTH,
-
-    UCASE_IX_MAX_FULL_LENGTH=15,
-    UCASE_IX_TOP=16
-};
-
-/* definitions for 16-bit case properties word ------------------------------ */
-
-/* 2-bit constants for types of cased characters */
-#define UCASE_TYPE_MASK     3
-enum {
-    UCASE_NONE,
-    UCASE_LOWER,
-    UCASE_UPPER,
-    UCASE_TITLE
-};
-
-#define UCASE_GET_TYPE(props) ((props)&UCASE_TYPE_MASK)
-#define UCASE_GET_TYPE_AND_IGNORABLE(props) ((props)&7)
-
-#define UCASE_IGNORABLE         4
-#define UCASE_SENSITIVE         8
-#define UCASE_EXCEPTION         0x10
-
-#define UCASE_DOT_MASK      0x60
-enum {
-    UCASE_NO_DOT=0,         /* normal characters with cc=0 */
-    UCASE_SOFT_DOTTED=0x20, /* soft-dotted characters with cc=0 */
-    UCASE_ABOVE=0x40,       /* "above" accents with cc=230 */
-    UCASE_OTHER_ACCENT=0x60 /* other accent character (0<cc!=230) */
-};
-
-/* no exception: bits 15..7 are a 9-bit signed case mapping delta */
-#define UCASE_DELTA_SHIFT   7
-#define UCASE_DELTA_MASK    0xff80
-#define UCASE_MAX_DELTA     0xff
-#define UCASE_MIN_DELTA     (-UCASE_MAX_DELTA-1)
-
-#if U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC
-#   define UCASE_GET_DELTA(props) ((int16_t)(props)>>UCASE_DELTA_SHIFT)
-#else
-#   define UCASE_GET_DELTA(props) (int16_t)(((props)&0x8000) ? (((props)>>UCASE_DELTA_SHIFT)|0xfe00) : ((uint16_t)(props)>>UCASE_DELTA_SHIFT))
-#endif
-
-/* exception: bits 15..5 are an unsigned 11-bit index into the exceptions array */
-#define UCASE_EXC_SHIFT     5
-#define UCASE_EXC_MASK      0xffe0
-#define UCASE_MAX_EXCEPTIONS ((UCASE_EXC_MASK>>UCASE_EXC_SHIFT)+1)
-
-/* definitions for 16-bit main exceptions word ------------------------------ */
-
-/* first 8 bits indicate values in optional slots */
-enum {
-    UCASE_EXC_LOWER,
-    UCASE_EXC_FOLD,
-    UCASE_EXC_UPPER,
-    UCASE_EXC_TITLE,
-    UCASE_EXC_4,            /* reserved */
-    UCASE_EXC_5,            /* reserved */
-    UCASE_EXC_CLOSURE,
-    UCASE_EXC_FULL_MAPPINGS,
-    UCASE_EXC_ALL_SLOTS     /* one past the last slot */
-};
-
-/* each slot is 2 uint16_t instead of 1 */
-#define UCASE_EXC_DOUBLE_SLOTS      0x100
-
-/* reserved: exception bits 11..9 */
-
-/* UCASE_EXC_DOT_MASK=UCASE_DOT_MASK<<UCASE_EXC_DOT_SHIFT */
-#define UCASE_EXC_DOT_SHIFT     7
-
-/* normally stored in the main word, but pushed out for larger exception indexes */
-#define UCASE_EXC_DOT_MASK      0x3000
-enum {
-    UCASE_EXC_NO_DOT=0,
-    UCASE_EXC_SOFT_DOTTED=0x1000,
-    UCASE_EXC_ABOVE=0x2000,         /* "above" accents with cc=230 */
-    UCASE_EXC_OTHER_ACCENT=0x3000   /* other character (0<cc!=230) */
-};
-
-/* complex/conditional mappings */
-#define UCASE_EXC_CONDITIONAL_SPECIAL   0x4000
-#define UCASE_EXC_CONDITIONAL_FOLD      0x8000
-
-/* definitions for lengths word for full case mappings */
-#define UCASE_FULL_LOWER    0xf
-#define UCASE_FULL_FOLDING  0xf0
-#define UCASE_FULL_UPPER    0xf00
-#define UCASE_FULL_TITLE    0xf000
-
-/* maximum lengths */
-#define UCASE_FULL_MAPPINGS_MAX_LENGTH (4*0xf)
-#define UCASE_CLOSURE_MAX_LENGTH 0xf
-
-/* constants for reverse case folding ("unfold") data */
-enum {
-    UCASE_UNFOLD_ROWS,
-    UCASE_UNFOLD_ROW_WIDTH,
-    UCASE_UNFOLD_STRING_WIDTH
-};
-
-#endif
diff --git a/src/third_party/mozjs/intl/icu/source/common/ucase_props_data.h b/src/third_party/mozjs/intl/icu/source/common/ucase_props_data.h
deleted file mode 100644
index dbc3942..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ucase_props_data.h
+++ /dev/null
@@ -1,759 +0,0 @@
-/*
- * Copyright (C) 1999-2012, International Business Machines
- * Corporation and others.  All Rights Reserved.
- *
- * file name: ucase_props_data.h
- *
- * machine-generated by: icu/tools/unicode/c/genprops/casepropsbuilder.cpp
- */
-
-#ifndef INCLUDED_FROM_UCASE_CPP
-#   error This file must be #included from ucase.cpp only.
-#endif
-
-static const UVersionInfo ucase_props_dataVersion={6,2,0,0};
-
-static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x5908,0x4bb8,0x516,0x172,0,0,0,0,0,0,0,0,0,0,3};
-
-static const uint16_t ucase_props_trieIndex[9684]={
-0x2d1,0x2d9,0x2e1,0x2e9,0x2f7,0x2ff,0x307,0x30f,0x317,0x31f,0x326,0x32e,0x336,0x33e,0x346,0x34e,
-0x354,0x35c,0x364,0x36c,0x374,0x37c,0x384,0x38c,0x394,0x39c,0x3a4,0x3ac,0x3b4,0x3bc,0x3c4,0x3cc,
-0x3d4,0x3dc,0x3e0,0x3e8,0x3f0,0x3f8,0x400,0x408,0x406,0x40e,0x413,0x41b,0x422,0x42a,0x432,0x43a,
-0x442,0x44a,0x452,0x45a,0x2f0,0x2f8,0x45f,0x467,0x46c,0x474,0x47c,0x484,0x483,0x48b,0x490,0x498,
-0x49f,0x4a6,0x4aa,0x2f0,0x2f0,0x2f0,0x2f0,0x4b1,0x4b9,0x4bb,0x4c3,0x4cb,0x4cf,0x4d0,0x4d8,0x4e0,
-0x4e8,0x4d0,0x4f0,0x4f5,0x4e8,0x4d0,0x4fd,0x4e0,0x4cf,0x501,0x509,0x4e0,0x50e,0x2f0,0x516,0x2f0,
-0x2f0,0x485,0x51e,0x4e0,0x2f0,0x501,0x525,0x4e0,0x2f0,0x2f0,0x4d8,0x4e0,0x2f0,0x2f0,0x52b,0x2f0,
-0x2f0,0x531,0x538,0x2f0,0x2f0,0x53c,0x544,0x2f0,0x548,0x54f,0x2f0,0x556,0x55e,0x565,0x56d,0x2f0,
-0x2f0,0x572,0x57a,0x582,0x58a,0x592,0x59a,0x438,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x59e,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x5a6,0x5a6,0x4dc,0x4dc,0x2f0,0x5ac,0x5b4,0x2f0,
-0x5bc,0x2f0,0x5c4,0x2f0,0x2f0,0x5ca,0x2f0,0x2f0,0x2f0,0x5d2,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x5d9,0x2f0,0x5e0,0x5e8,0x2f0,0x5c3,0x2f0,0x2f0,0x5f0,0x5f3,0x5fb,0x601,0x609,0x611,0x2f0,0x618,
-0x2f0,0x61d,0x2f0,0x623,0x2f0,0x2f0,0x62b,0x633,0x63b,0x640,0x643,0x64b,0x65b,0x653,0x66b,0x663,
-0x317,0x673,0x317,0x67b,0x67e,0x317,0x686,0x317,0x68e,0x696,0x69e,0x6a6,0x6ae,0x6b6,0x6be,0x6c6,
-0x6ce,0x6d5,0x2f0,0x6dd,0x6e5,0x2f0,0x6ed,0x6f5,0x6fd,0x705,0x70d,0x715,0x71d,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x720,0x726,0x72c,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x734,0x739,0x73d,0x745,0x317,0x317,0x317,0x74d,0x755,0x75d,0x2f0,0x762,0x2f0,0x2f0,0x2f0,0x76a,
-0x2f0,0x5c1,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x4ce,0x772,0x2f0,0x2f0,0x779,0x2f0,0x2f0,0x781,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x789,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x623,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x78f,0x2f0,0x317,0x797,0x79f,0x2f0,0x2f0,0x7a7,0x7af,0x7b7,0x317,0x7bc,0x7c4,0x7cc,0x2f0,0x7cf,
-0x7d7,0x4e7,0x2f0,0x2f0,0x2f0,0x2f0,0x7de,0x7e6,0x2f0,0x7ed,0x7f4,0x2f0,0x4b9,0x7f9,0x801,0x2f0,
-0x2f0,0x807,0x80f,0x813,0x2f0,0x818,0x820,0x828,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x82f,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x837,0x2f0,0x2f0,0x2f0,0x2f0,0x83f,0x609,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x844,0x84c,0x850,0x2f0,0x2f0,0x2f0,0x2f0,0x2d3,0x2d9,0x858,0x860,0x813,0x485,0x2f0,0x2f0,0x868,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0xbc4,0xbc4,0xbdc,0xc1c,0xc5c,0xc98,0xcd8,0xd18,0xd50,0xd90,0xdd0,0xe10,0xe50,0xe90,0xed0,0xf10,
-0xf50,0xf80,0xfc0,0x1000,0x1018,0x104c,0x1088,0x10c8,0x1108,0x1148,0xbc0,0x117c,0x11b0,0x11f0,0x120c,0x1240,
-0x9e1,0xa11,0xa51,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa87,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xac4,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0xb04,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x5c5,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x870,0x876,0x87a,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x882,0x886,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x4cf,0x88e,0x895,0x2f0,0x609,0x899,0x2f0,0x2f0,0x8a1,0x8a8,0x2f0,0x2f0,0x609,0x8ae,0x8b6,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x8bc,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x8c2,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x8ca,
-0x8d2,0x8d8,0x2f0,0x2f0,0x2f0,0x2f0,0x8e0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x8e8,0x8f0,0x8f5,0x8fb,0x903,0x90b,0x913,0x8ec,0x91b,0x923,0x92b,0x932,
-0x8ed,0x8e8,0x8f0,0x8eb,0x8fb,0x8ee,0x8e9,0x93a,0x8ec,0x942,0x94a,0x952,0x959,0x945,0x94d,0x955,
-0x95c,0x948,0x964,0x2f0,0x4cf,0x7af,0x7af,0x7af,0x2f0,0x2f0,0x2f0,0x2f0,0x7af,0x7af,0x7af,0x7af,
-0x7af,0x7af,0x7af,0x96c,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,0x2f0,
-0x2f0,0x2f0,0x2f0,0x2f0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
-0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,
-0,0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x1a,0xba,0xfa,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x17a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,
-0,0,4,0,4,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x1f9,0xf029,0x299,
-0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x319,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,0,1,0,0,4,0,4,0,0,0,0,
-4,0x399,0,4,4,0,1,0,0,0,0,0,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x3fa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x47a,0x4ba,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x4f9,0xf009,0xf009,0xf009,0xf009,
-0xf009,0x639,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,
-0xf009,0xf009,0xf009,0,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x3c89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x6ba,0xff89,0x8a,0xff89,0x8a,0xff89,0x6fa,0xffa9,0x73a,0x7d9,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,
-0xff89,0x879,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0xc38a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x979,0x6189,0x690a,0x8a,0xff89,0x8a,0xff89,0x670a,0x8a,
-0xff89,0x668a,0x668a,0x8a,0xff89,1,0x278a,0x650a,0x658a,0x8a,0xff89,0x668a,0x678a,0x3089,0x698a,0x688a,
-0x8a,0xff89,0x5189,1,0x698a,0x6a8a,0x4109,0x6b0a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6d0a,0x8a,
-0xff89,0x6d0a,1,1,0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6c8a,0x6c8a,0x8a,0xff89,0x8a,0xff89,0x6d8a,
-0x8a,0xff89,1,0,0x8a,0xff89,1,0x1c09,0,0,0,0,0x9da,0xa3b,0xab9,0xb1a,
-0xb7b,0xbf9,0xc5a,0xcbb,0xd39,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,
-0xff89,0x8a,0xff89,0x8a,0xff89,0xd889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xd99,0xe9a,0xefb,0xf79,0x8a,0xff89,0xcf8a,0xe40a,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0xbf0a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,1,1,1,1,1,1,0xfda,0x8a,0xff89,0xae8a,0x101a,0x1059,
-0x1099,0x8a,0xff89,0x9e8a,0x228a,0x238a,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x10d9,0x1119,0x1159,0x9709,0x9909,1,0x9989,0x9989,1,0x9b09,1,0x9a89,1,1,1,1,
-0x9989,1,1,0x9889,1,0x1199,0x11d9,1,0x97a9,0x9689,1,0x1219,1,1,1,0x9689,
-1,0x1259,0x9589,1,1,0x9509,1,1,1,1,1,1,1,0x1299,1,1,
-0x9309,1,1,0x9309,1,1,1,1,0x9309,0xdd89,0x9389,0x9389,0xdc89,1,1,1,
-1,1,0x9289,1,0,1,1,1,1,1,1,1,1,0x21,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-5,5,0x25,5,5,5,5,5,5,4,4,4,0xc,4,0xc,4,
-5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-0x4c,0x4c,0x44,0x44,0x44,0x44,0x44,0x12dc,0x4c,0x44,0x4c,0x44,0x4c,0x44,0x44,0x44,
-0x44,0x44,0x44,0x4c,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x6c,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,
-0x44,0x44,0x4c,0x44,0x44,0x12fd,0x44,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x64,4,
-0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x64,
-0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x8a,0xff89,0x8a,0xff89,4,4,0x8a,0xff89,0,0,5,0x4109,0x4109,0x4109,0,0,
-0,0,0,0,4,4,0x130a,4,0x128a,0x128a,0x128a,0,0x200a,0,0x1f8a,0x1f8a,
-0x1399,0x100a,0x153a,0x100a,0x100a,0x15ba,0x100a,0x100a,0x163a,0x16da,0x177a,0x100a,0x17fa,0x100a,0x100a,0x100a,
-0x187a,0x18fa,0,0x197a,0x100a,0x100a,0x19fa,0x100a,0x100a,0x1a7a,0x100a,0x100a,0xed09,0xed89,0xed89,0xed89,
-0x1af9,0xf009,0x1c99,0xf009,0xf009,0x1d19,0xf009,0xf009,0x1d99,0x1e39,0x1ed9,0xf009,0x1f59,0xf009,0xf009,0xf009,
-0x1fd9,0x2059,0x20d9,0x2139,0xf009,0xf009,0x21b9,0xf009,0xf009,0x2239,0xf009,0xf009,0xe009,0xe089,0xe089,0x40a,
-0x22b9,0x2319,2,2,2,0x23b9,0x2419,0xfc09,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x2479,0x24d9,0x389,0x21,0x253a,0x25d9,0,0x8a,0xff89,0xfc8a,0x8a,0xff89,1,0xbf0a,0xbf0a,0xbf0a,
-0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,
-0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd829,0xd809,0xd829,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0,0x44,0x44,0x44,0x44,0x44,4,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x78a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xf889,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0,0,0,0,0,0,0,0,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,
-0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,
-0x180a,0x180a,0x180a,0,0,4,0,0,0,0,0,0,0,0xe809,0xe809,0xe809,
-0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,
-0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0x2639,
-0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,
-0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,
-0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x64,0x64,0x64,0x64,0x64,0,0x64,0,0x64,0x64,0,0x44,0x64,0,0x64,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x44,
-0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,0,0x44,0x44,0x44,0x44,0x64,
-0x44,4,4,0x44,0x44,0,0x64,0x44,0x44,0x64,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44,
-0x44,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,4,4,4,4,4,4,4,4,4,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x64,0x44,4,4,0,0,0,0,4,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,
-4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0x64,0x64,0,0,0,0,0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44,
-0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,
-0x44,0x44,0x44,0,4,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,0,0x64,0,0,0,0,4,4,4,
-4,4,4,4,4,0,0,0,0,0x64,0,0,0,0x44,0x64,0x44,
-0x44,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,
-0,4,4,4,4,0,0,0,0,0,0,0,0,0x64,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,4,0,0,0,0,4,4,0,0,4,4,0x64,0,0,
-0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0,
-0,0,0,0,0,4,4,4,4,4,0,4,4,0,0,0,
-0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x64,0,0,4,0,4,4,4,4,0,0,0,0,0,0,0,
-0,0x64,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,4,
-4,0,4,4,4,0x64,0,0,0,0,0,0,0,0x64,0x64,0,
-0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
-4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,4,4,
-4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0x64,0,
-0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,0,0,4,4,4,4,0x64,0x64,0,4,4,0,0,0,
-0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0,0x64,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x64,0x64,4,0x64,4,4,4,
-4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44,
-0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,
-0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,4,4,4,0,4,4,4,4,4,0x64,
-0,0x64,0x64,0,0,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,0,0,0,0,4,4,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,0,0,4,4,0,
-0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,0,0,0x273a,0x277a,0x27ba,0x27fa,0x283a,0x287a,0x28ba,0x28fa,
-0x293a,0x297a,0x29ba,0x29fa,0x2a3a,0x2a7a,0x2aba,0x2afa,0x2b3a,0x2b7a,0x2bba,0x2bfa,0x2c3a,0x2c7a,0x2cba,0x2cfa,
-0x2d3a,0x2d7a,0x2dba,0x2dfa,0x2e3a,0x2e7a,0x2eba,0x2efa,0x2f3a,0x2f7a,0x2fba,0x2ffa,0x303a,0x307a,0,0x30ba,
-0,0,0,0,0,0x30fa,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,4,0x64,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,4,4,4,4,4,4,4,0,0,
-0,0,0,0,0,0,4,0,0,4,4,4,4,4,4,4,
-4,4,0x64,4,0,0,0,4,0,0,0,0,0,0x44,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,4,
-4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
-0,0x64,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,0,4,4,4,4,4,4,4,0,
-0x64,0,4,0,0,4,4,4,4,4,4,4,4,0,0,0,
-0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0x64,
-4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x64,0,4,4,4,4,4,0,4,0,0,0,0,0,4,0,
-0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,
-0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,4,4,4,0,0,4,4,0x60,0x64,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x64,0,4,4,0,0,0,4,0,4,
-4,4,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,4,4,0,0,4,0x64,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0,
-0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0,0x64,0x64,
-0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,0,0,0,0,
-0x44,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x25,5,
-5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,
-1,1,1,1,5,0x3139,1,1,1,0x3179,1,1,5,5,5,5,
-0x25,5,5,5,0x25,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0x21,1,1,1,1,5,5,5,5,5,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x64,0x64,0x44,0x64,0x44,0x44,0x64,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x31ba,0x3239,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x32b9,0x33b9,
-0x34b9,0x35b9,0x36b9,0x37b9,1,1,0x381a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409,
-0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0,0,
-0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409,
-0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409,
-0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0,0,
-0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x38b9,0x409,0x39b9,0x409,0x3b19,0x409,0x3c79,0x409,
-0,0xfc0a,0,0xfc0a,0,0xfc0a,0,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409,
-0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x2509,0x2509,0x2b09,0x2b09,0x2b09,0x2b09,0x3209,0x3209,
-0x4009,0x4009,0x3809,0x3809,0x3f09,0x3f09,0,0,0x3dd9,0x3eb9,0x3f99,0x4079,0x4159,0x4239,0x4319,0x43f9,
-0x44db,0x45bb,0x469b,0x477b,0x485b,0x493b,0x4a1b,0x4afb,0x4bd9,0x4cb9,0x4d99,0x4e79,0x4f59,0x5039,0x5119,0x51f9,
-0x52db,0x53bb,0x549b,0x557b,0x565b,0x573b,0x581b,0x58fb,0x59d9,0x5ab9,0x5b99,0x5c79,0x5d59,0x5e39,0x5f19,0x5ff9,
-0x60db,0x61bb,0x629b,0x637b,0x645b,0x653b,0x661b,0x66fb,0x409,0x409,0x67d9,0x68d9,0x69b9,0,0x6ab9,0x6bb9,
-0xfc0a,0xfc0a,0xdb0a,0xdb0a,0x6d1b,4,0x6df9,4,4,4,0x6e99,0x6f99,0x7079,0,0x7179,0x7279,
-0xd50a,0xd50a,0xd50a,0xd50a,0x73db,4,4,4,0x409,0x409,0x74b9,0x7619,0,0,0x77b9,0x78b9,
-0xfc0a,0xfc0a,0xce0a,0xce0a,0,4,4,4,0x409,0x409,0x7a19,0x7b79,0x7d19,0x389,0x7e19,0x7f19,
-0xfc0a,0xfc0a,0xc80a,0xc80a,0xfc8a,4,4,4,0,0,0x8079,0x8179,0x8259,0,0x8359,0x8459,
-0xc00a,0xc00a,0xc10a,0xc10a,0x85bb,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,
-4,4,0,0,0,0,0,0,4,0,0,4,0,0,4,4,
-4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,4,4,4,0,0,0,0,0,4,4,
-4,4,4,4,0,0x25,0,0,0,0,0,0,0,0,0,0,
-0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x44,
-0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,0x64,0x44,0x64,0x64,
-0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,2,0,0,0,0,2,0,0,1,2,
-2,2,1,1,2,2,2,1,0,2,0,0,0,2,2,2,
-2,2,0,0,0,0,0,0,2,0,0x869a,0,2,0,0x871a,0x879a,
-2,2,0,1,2,2,0xe0a,2,1,0,0,0,0,1,0,0,
-1,1,2,2,0,0,0,0,0,2,1,1,0x21,0x21,0,0,
-0,0,0xf209,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,
-0x80a,0x80a,0x80a,0x80a,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,
-0xf809,0xf809,0xf809,0xf809,0,0,0,0x8a,0xff89,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,
-0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,
-0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,
-0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,
-0x180a,0x180a,0x180a,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,
-0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,
-0xe809,0xe809,0xe809,0,0x8a,0xff89,0x881a,0x885a,0x889a,0x88d9,0x8919,0x8a,0xff89,0x8a,0xff89,0x8a,
-0xff89,0x895a,0x899a,0x89da,0x8a1a,1,0x8a,0xff89,1,0x8a,0xff89,1,1,1,1,1,
-0x25,5,0x8a5a,0x8a9a,0x8a,0xff89,0x8a,0xff89,1,0,0,0,0,0,0,0x8a,
-0xff89,0x8a,0xff89,0x44,0x44,0x44,0x8a,0xff89,0,0,0,0,0,0,0,0,
-0,0,0,0,0x8ad9,0x8b19,0x8b59,0x8b99,0x8bd9,0x8c19,0x8c59,0x8c99,0x8cd9,0x8d19,0x8d59,0x8d99,
-0x8dd9,0x8e19,0x8e59,0x8e99,0x8ed9,0x8f19,0x8f59,0x8f99,0x8fd9,0x9019,0x9059,0x9099,0x90d9,0x9119,0x9159,0x9199,
-0x91d9,0x9219,0x9259,0x9299,0x92d9,0x9319,0x9359,0x9399,0x93d9,0x9419,0,0x9459,0,0,0,0,
-0,0x9499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
-0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4,4,4,0,0,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4,
-4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,4,4,4,0,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0,0,0,0,0,0,0,0x44,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,
-5,1,1,1,1,1,1,1,1,0x8a,0xff89,0x8a,0xff89,0x94da,0x8a,0xff89,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,4,4,4,0x8a,0xff89,0x951a,1,0,
-0x8a,0xff89,0x8a,0xff89,0,0,0,0,0,0,0,0,0,0,0,0,
-0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x955a,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,1,0,0,0,0,0,0,0,4,0,
-0,0,0x64,0,0,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,0x64,
-0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
-4,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x64,0,0,4,4,4,4,0,0,
-4,0,0,0,0x60,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,4,4,4,4,4,0,0,4,4,0,
-0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0,0x44,0x44,0x64,0,0,0x44,0x44,0,0,0,0,0,0x44,0x44,
-0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
-0,0,0,4,4,0,0x64,0,0,0,0,0,0,0,0,0,
-0,4,0,0,4,0,0,0,0,0x64,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x9599,0x9699,0x9799,0x9899,
-0x99f9,0x9b59,0x9c99,0,0,0,0,0,0,0,0,0,0,0,0,0x9dd9,
-0x9ed9,0x9fd9,0xa0d9,0xa1d9,0,0,0,0,0,0,0x64,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,0,0,4,0,0,0,0,0,0,0,0,0,0,
-0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0,0,4,0,
-4,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,
-0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
-0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,
-0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,0,4,4,0,
-0,0,0,0,4,0x64,4,0x44,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,4,4,4,4,0x64,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,0,0,0x64,0x64,0,
-0,4,0,0,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,4,0,4,4,4,
-4,4,4,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
-4,4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,
-4,4,4,4,4,4,0x60,0x64,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,0,0,0,0,0,0x60,0x60,0x64,
-0x64,0x64,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,4,4,4,4,4,
-4,4,4,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0x44,0x44,0x44,
-0x44,0x44,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,
-1,1,0x21,0x21,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,1,1,1,1,1,1,1,0,0x21,0x21,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
-1,1,1,1,1,1,0x21,0x21,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,0,2,2,0,0,2,0,
-0,2,2,0,0,2,2,2,2,0,2,2,2,2,2,2,
-2,2,1,1,1,1,0,1,0,1,0x21,0x21,1,1,1,1,
-0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
-2,2,0,2,2,2,2,0,0,2,2,2,2,2,2,2,
-2,0,2,2,2,2,2,2,2,0,1,1,1,1,1,1,
-1,1,0x21,0x21,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,0,2,2,2,2,0,2,2,2,2,
-2,0,2,0,0,0,2,2,2,2,2,2,2,0,1,1,
-1,1,1,1,1,1,0x21,0x21,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,0,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,1,1,0,1,1,1,1,1,1,2,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0
-};
-
-static const uint16_t ucase_props_exceptions[1302]={
-0xc041,0x69,2,0x130,0x131,0x4001,0x6a,0x41,0x6b,1,0x212a,0x41,0x73,1,0x17f,0x5044,
-0x49,2,0x130,0x131,0x44,0x4b,1,0x212a,0x44,0x53,1,0x17f,6,0x3bc,0x39c,0x41,
-0xe5,1,0x212b,0x4001,0xec,0x4001,0xed,0xc0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,
-0x1e9e,0x44,0xc5,1,0x212b,0x4001,0x129,0x4001,0x12f,0xc041,0x69,2,0x49,0x131,0x44,0x49,
-2,0x69,0x130,0x80,0x2220,0x2bc,0x6e,0x2bc,0x4e,0x2bc,0x4e,6,0x73,0x53,9,0x1c6,
-0x1c5,0xd,0x1c6,0x1c4,0x1c5,0xc,0x1c4,0x1c5,9,0x1c9,0x1c8,0xd,0x1c9,0x1c7,0x1c8,0xc,
-0x1c7,0x1c8,9,0x1cc,0x1cb,0xd,0x1cc,0x1ca,0x1cb,0xc,0x1ca,0x1cb,0x80,0x2220,0x6a,0x30c,
-0x4a,0x30c,0x4a,0x30c,9,0x1f3,0x1f2,0xd,0x1f3,0x1f1,0x1f2,0xc,0x1f1,0x1f2,1,0x2c65,
-1,0x2c66,4,0x2c7e,4,0x2c7f,4,0x2c6f,4,0x2c6d,4,0x2c70,4,0xa78d,4,0xa7aa,
-4,0x2c62,4,0x2c6e,4,0x2c64,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,
-0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,
-0x3f5,0x41,0x3b8,2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,
-0x3bc,1,0xb5,0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,
-0x3c6,1,0x3d5,0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,
-0x3a5,0x308,0x301,0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,
-0x3f4,0x44,0x399,2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,
-1,0x3d6,0x44,0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,
-0x3d5,0x44,0x3a9,1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,
-6,0x3c0,0x3a0,6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,
-0x395,0x80,0x2220,0x565,0x582,0x535,0x552,0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,
-0x2d03,1,0x2d04,1,0x2d05,1,0x2d06,1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,
-0x2d0b,1,0x2d0c,1,0x2d0d,1,0x2d0e,1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,
-0x2d13,1,0x2d14,1,0x2d15,1,0x2d16,1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,
-0x2d1b,1,0x2d1c,1,0x2d1d,1,0x2d1e,1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,
-0x2d23,1,0x2d24,1,0x2d25,1,0x2d27,1,0x2d2d,4,0xa77d,4,0x2c63,0x41,0x1e61,1,
-0x1e9b,0x44,0x1e60,1,0x1e9b,0x80,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x80,0x2220,0x74,
-0x308,0x54,0x308,0x54,0x308,0x80,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220,0x79,
-0x30a,0x59,0x30a,0x59,0x30a,0x80,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61,0x1e60,
-0x81,0xdf,0x20,0x73,0x73,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x80,0x3330,0x3c5,
-0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,0x3a5,0x313,0x301,
-0x3a5,0x313,0x301,0x80,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x84,0x1f88,
-0x220,0x1f00,0x3b9,0x1f08,0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,0x1f8a,0x220,0x1f02,
-0x3b9,0x1f0a,0x399,0x84,0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,0x1f04,0x3b9,0x1f0c,
-0x399,0x84,0x1f8d,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x84,
-0x1f8f,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,0x81,0x1f81,0x220,
-0x1f01,0x3b9,0x1f09,0x399,0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,0x220,0x1f03,0x3b9,
-0x1f0b,0x399,0x81,0x1f84,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,0x3b9,0x1f0d,0x399,
-0x81,0x1f86,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x84,0x1f98,
-0x220,0x1f20,0x3b9,0x1f28,0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,0x1f9a,0x220,0x1f22,
-0x3b9,0x1f2a,0x399,0x84,0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,0x1f24,0x3b9,0x1f2c,
-0x399,0x84,0x1f9d,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x84,
-0x1f9f,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,0x81,0x1f91,0x220,
-0x1f21,0x3b9,0x1f29,0x399,0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,0x220,0x1f23,0x3b9,
-0x1f2b,0x399,0x81,0x1f94,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,0x3b9,0x1f2d,0x399,
-0x81,0x1f96,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x84,0x1fa8,
-0x220,0x1f60,0x3b9,0x1f68,0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,0x1faa,0x220,0x1f62,
-0x3b9,0x1f6a,0x399,0x84,0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,0x1f64,0x3b9,0x1f6c,
-0x399,0x84,0x1fad,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x84,
-0x1faf,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,0x81,0x1fa1,0x220,
-0x1f61,0x3b9,0x1f69,0x399,0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,0x220,0x1f63,0x3b9,
-0x1f6b,0x399,0x81,0x1fa4,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,0x3b9,0x1f6d,0x399,
-0x81,0x1fa6,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x80,0x2220,
-0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,0x80,0x2220,0x3ac,
-0x3b9,0x386,0x399,0x386,0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x80,0x3330,0x3b1,
-0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,0x391,0x399,0x46,
-0x3b9,0x399,1,0x345,0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,0x1fcc,0x220,0x3b7,
-0x3b9,0x397,0x399,0x80,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,0x3b7,0x342,0x397,
-0x342,0x397,0x342,0x80,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0x81,0x1fc3,
-0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308,0x300,
-0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x80,0x2220,0x3b9,
-0x342,0x399,0x342,0x399,0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308,0x342,
-0x80,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,0x3330,0x3c5,0x308,
-0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1,0x313,
-0x80,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,0x3a5,0x308,0x342,
-0x3a5,0x308,0x342,0x80,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,0x220,0x3c9,0x3b9,
-0x3a9,0x399,0x80,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,0x342,0x3a9,0x342,
-0x3a9,0x342,0x80,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0x81,0x1ff3,0x220,
-0x3c9,0x3b9,0x3a9,0x399,0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,0xe5,1,0xc5,
-1,0x26b,1,0x1d7d,1,0x27d,4,0x23a,4,0x23e,1,0x251,1,0x271,1,0x250,
-1,0x252,1,0x23f,1,0x240,4,0x10a0,4,0x10a1,4,0x10a2,4,0x10a3,4,0x10a4,
-4,0x10a5,4,0x10a6,4,0x10a7,4,0x10a8,4,0x10a9,4,0x10aa,4,0x10ab,4,0x10ac,
-4,0x10ad,4,0x10ae,4,0x10af,4,0x10b0,4,0x10b1,4,0x10b2,4,0x10b3,4,0x10b4,
-4,0x10b5,4,0x10b6,4,0x10b7,4,0x10b8,4,0x10b9,4,0x10ba,4,0x10bb,4,0x10bc,
-4,0x10bd,4,0x10be,4,0x10bf,4,0x10c0,4,0x10c1,4,0x10c2,4,0x10c3,4,0x10c4,
-4,0x10c5,4,0x10c7,4,0x10cd,1,0x1d79,1,0x265,1,0x266,0x80,0x2220,0x66,0x66,
-0x46,0x46,0x46,0x66,0x80,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x80,0x2220,0x66,0x6c,
-0x46,0x4c,0x46,0x6c,0x80,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x80,
-0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0xc0,1,0x2220,0x73,0x74,0x53,
-0x54,0x53,0x74,0xfb06,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x80,0x2220,
-0x574,0x576,0x544,0x546,0x544,0x576,0x80,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x80,0x2220,
-0x574,0x56b,0x544,0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x80,0x2220,
-0x574,0x56d,0x544,0x53d,0x544,0x56d
-};
-
-static const uint16_t ucase_props_unfold[370]={
-0x49,5,3,0,0,0x61,0x2be,0,0x1e9a,0,0x66,0x66,0,0xfb00,0,0x66,
-0x66,0x69,0xfb03,0,0x66,0x66,0x6c,0xfb04,0,0x66,0x69,0,0xfb01,0,0x66,0x6c,
-0,0xfb02,0,0x68,0x331,0,0x1e96,0,0x69,0x307,0,0x130,0,0x6a,0x30c,0,
-0x1f0,0,0x73,0x73,0,0xdf,0x1e9e,0x73,0x74,0,0xfb05,0xfb06,0x74,0x308,0,0x1e97,
-0,0x77,0x30a,0,0x1e98,0,0x79,0x30a,0,0x1e99,0,0x2bc,0x6e,0,0x149,0,
-0x3ac,0x3b9,0,0x1fb4,0,0x3ae,0x3b9,0,0x1fc4,0,0x3b1,0x342,0,0x1fb6,0,0x3b1,
-0x342,0x3b9,0x1fb7,0,0x3b1,0x3b9,0,0x1fb3,0x1fbc,0x3b7,0x342,0,0x1fc6,0,0x3b7,0x342,
-0x3b9,0x1fc7,0,0x3b7,0x3b9,0,0x1fc3,0x1fcc,0x3b9,0x308,0x300,0x1fd2,0,0x3b9,0x308,0x301,
-0x390,0x1fd3,0x3b9,0x308,0x342,0x1fd7,0,0x3b9,0x342,0,0x1fd6,0,0x3c1,0x313,0,0x1fe4,
-0,0x3c5,0x308,0x300,0x1fe2,0,0x3c5,0x308,0x301,0x3b0,0x1fe3,0x3c5,0x308,0x342,0x1fe7,0,
-0x3c5,0x313,0,0x1f50,0,0x3c5,0x313,0x300,0x1f52,0,0x3c5,0x313,0x301,0x1f54,0,0x3c5,
-0x313,0x342,0x1f56,0,0x3c5,0x342,0,0x1fe6,0,0x3c9,0x342,0,0x1ff6,0,0x3c9,0x342,
-0x3b9,0x1ff7,0,0x3c9,0x3b9,0,0x1ff3,0x1ffc,0x3ce,0x3b9,0,0x1ff4,0,0x565,0x582,0,
-0x587,0,0x574,0x565,0,0xfb14,0,0x574,0x56b,0,0xfb15,0,0x574,0x56d,0,0xfb17,
-0,0x574,0x576,0,0xfb13,0,0x57e,0x576,0,0xfb16,0,0x1f00,0x3b9,0,0x1f80,0x1f88,
-0x1f01,0x3b9,0,0x1f81,0x1f89,0x1f02,0x3b9,0,0x1f82,0x1f8a,0x1f03,0x3b9,0,0x1f83,0x1f8b,0x1f04,
-0x3b9,0,0x1f84,0x1f8c,0x1f05,0x3b9,0,0x1f85,0x1f8d,0x1f06,0x3b9,0,0x1f86,0x1f8e,0x1f07,0x3b9,
-0,0x1f87,0x1f8f,0x1f20,0x3b9,0,0x1f90,0x1f98,0x1f21,0x3b9,0,0x1f91,0x1f99,0x1f22,0x3b9,0,
-0x1f92,0x1f9a,0x1f23,0x3b9,0,0x1f93,0x1f9b,0x1f24,0x3b9,0,0x1f94,0x1f9c,0x1f25,0x3b9,0,0x1f95,
-0x1f9d,0x1f26,0x3b9,0,0x1f96,0x1f9e,0x1f27,0x3b9,0,0x1f97,0x1f9f,0x1f60,0x3b9,0,0x1fa0,0x1fa8,
-0x1f61,0x3b9,0,0x1fa1,0x1fa9,0x1f62,0x3b9,0,0x1fa2,0x1faa,0x1f63,0x3b9,0,0x1fa3,0x1fab,0x1f64,
-0x3b9,0,0x1fa4,0x1fac,0x1f65,0x3b9,0,0x1fa5,0x1fad,0x1f66,0x3b9,0,0x1fa6,0x1fae,0x1f67,0x3b9,
-0,0x1fa7,0x1faf,0x1f70,0x3b9,0,0x1fb2,0,0x1f74,0x3b9,0,0x1fc2,0,0x1f7c,0x3b9,0,
-0x1ff2,0
-};
-
-static const UCaseProps ucase_props_singleton={
-  NULL,
-  ucase_props_indexes,
-  ucase_props_exceptions,
-  ucase_props_unfold,
-  {
-    ucase_props_trieIndex,
-    ucase_props_trieIndex+2884,
-    NULL,
-    2884,
-    6800,
-    0x188,
-    0xbc0,
-    0x0,
-    0x0,
-    0xe0800,
-    0x25d0,
-    NULL, 0, FALSE, FALSE, 0, NULL
-  },
-  { 3,0,0,0 }
-};
diff --git a/src/third_party/mozjs/intl/icu/source/common/ucasemap.cpp b/src/third_party/mozjs/intl/icu/source/common/ucasemap.cpp
deleted file mode 100644
index c43cf16..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ucasemap.cpp
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2005-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  ucasemap.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2005may06
-*   created by: Markus W. Scherer
-*
-*   Case mapping service object and functions using it.
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/brkiter.h"
-#include "unicode/ubrk.h"
-#include "unicode/uloc.h"
-#include "unicode/ustring.h"
-#include "unicode/ucasemap.h"
-#if !UCONFIG_NO_BREAK_ITERATION
-#include "unicode/utext.h"
-#endif
-#include "unicode/utf.h"
-#include "unicode/utf8.h"
-#include "unicode/utf16.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "ucase.h"
-#include "ustr_imp.h"
-
-U_NAMESPACE_USE
-
-/* UCaseMap service object -------------------------------------------------- */
-
-U_CAPI UCaseMap * U_EXPORT2
-ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode) {
-    UCaseMap *csm;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return NULL;
-    }
-
-    csm=(UCaseMap *)uprv_malloc(sizeof(UCaseMap));
-    if(csm==NULL) {
-        return NULL;
-    }
-    uprv_memset(csm, 0, sizeof(UCaseMap));
-
-    csm->csp=ucase_getSingleton();
-    ucasemap_setLocale(csm, locale, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        uprv_free(csm);
-        return NULL;
-    }
-
-    csm->options=options;
-    return csm;
-}
-
-U_CAPI void U_EXPORT2
-ucasemap_close(UCaseMap *csm) {
-    if(csm!=NULL) {
-#if !UCONFIG_NO_BREAK_ITERATION
-        // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code.
-        delete reinterpret_cast<BreakIterator *>(csm->iter);
-#endif
-        uprv_free(csm);
-    }
-}
-
-U_CAPI const char * U_EXPORT2
-ucasemap_getLocale(const UCaseMap *csm) {
-    return csm->locale;
-}
-
-U_CAPI uint32_t U_EXPORT2
-ucasemap_getOptions(const UCaseMap *csm) {
-    return csm->options;
-}
-
-U_CAPI void U_EXPORT2
-ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) {
-    int32_t length;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    length=uloc_getName(locale, csm->locale, (int32_t)sizeof(csm->locale), pErrorCode);
-    if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR || length==sizeof(csm->locale)) {
-        *pErrorCode=U_ZERO_ERROR;
-        /* we only really need the language code for case mappings */
-        length=uloc_getLanguage(locale, csm->locale, (int32_t)sizeof(csm->locale), pErrorCode);
-    }
-    if(length==sizeof(csm->locale)) {
-        *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-    }
-    csm->locCache=0;
-    if(U_SUCCESS(*pErrorCode)) {
-        ucase_getCaseLocale(csm->locale, &csm->locCache);
-    } else {
-        csm->locale[0]=0;
-    }
-}
-
-U_CAPI void U_EXPORT2
-ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode * /*pErrorCode*/) {
-    csm->options=options;
-}
-
-/* UTF-8 string case mappings ----------------------------------------------- */
-
-/* TODO(markus): Move to a new, separate utf8case.c file. */
-
-/* append a full case mapping result, see UCASE_MAX_STRING_LENGTH */
-static inline int32_t
-appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity,
-             int32_t result, const UChar *s) {
-    UChar32 c;
-    int32_t length, destLength;
-    UErrorCode errorCode;
-
-    /* decode the result */
-    if(result<0) {
-        /* (not) original code point */
-        c=~result;
-        length=-1;
-    } else if(result<=UCASE_MAX_STRING_LENGTH) {
-        c=U_SENTINEL;
-        length=result;
-    } else {
-        c=result;
-        length=-1;
-    }
-
-    if(destIndex<destCapacity) {
-        /* append the result */
-        if(length<0) {
-            /* code point */
-            UBool isError=FALSE;
-            U8_APPEND(dest, destIndex, destCapacity, c, isError);
-            if(isError) {
-                /* overflow, nothing written */
-                destIndex+=U8_LENGTH(c);
-            }
-        } else {
-            /* string */
-            errorCode=U_ZERO_ERROR;
-            u_strToUTF8(
-                (char *)(dest+destIndex), destCapacity-destIndex, &destLength,
-                s, length,
-                &errorCode);
-            destIndex+=destLength;
-            /* we might have an overflow, but we know the actual length */
-        }
-    } else {
-        /* preflight */
-        if(length<0) {
-            destIndex+=U8_LENGTH(c);
-        } else {
-            errorCode=U_ZERO_ERROR;
-            u_strToUTF8(
-                NULL, 0, &destLength,
-                s, length,
-                &errorCode);
-            destIndex+=destLength;
-        }
-    }
-    return destIndex;
-}
-
-static UChar32 U_CALLCONV
-utf8_caseContextIterator(void *context, int8_t dir) {
-    UCaseContext *csc=(UCaseContext *)context;
-    UChar32 c;
-
-    if(dir<0) {
-        /* reset for backward iteration */
-        csc->index=csc->cpStart;
-        csc->dir=dir;
-    } else if(dir>0) {
-        /* reset for forward iteration */
-        csc->index=csc->cpLimit;
-        csc->dir=dir;
-    } else {
-        /* continue current iteration direction */
-        dir=csc->dir;
-    }
-
-    if(dir<0) {
-        if(csc->start<csc->index) {
-            U8_PREV((const uint8_t *)csc->p, csc->start, csc->index, c);
-            return c;
-        }
-    } else {
-        if(csc->index<csc->limit) {
-            U8_NEXT((const uint8_t *)csc->p, csc->index, csc->limit, c);
-            return c;
-        }
-    }
-    return U_SENTINEL;
-}
-
-/*
- * Case-maps [srcStart..srcLimit[ but takes
- * context [0..srcLength[ into account.
- */
-static int32_t
-_caseMap(const UCaseMap *csm, UCaseMapFull *map,
-         uint8_t *dest, int32_t destCapacity,
-         const uint8_t *src, UCaseContext *csc,
-         int32_t srcStart, int32_t srcLimit,
-         UErrorCode *pErrorCode) {
-    const UChar *s;
-    UChar32 c, c2 = 0;
-    int32_t srcIndex, destIndex;
-    int32_t locCache;
-
-    locCache=csm->locCache;
-
-    /* case mapping loop */
-    srcIndex=srcStart;
-    destIndex=0;
-    while(srcIndex<srcLimit) {
-        csc->cpStart=srcIndex;
-        U8_NEXT(src, srcIndex, srcLimit, c);
-        csc->cpLimit=srcIndex;
-        if(c<0) {
-            int32_t i=csc->cpStart;
-            while(destIndex<destCapacity && i<srcIndex) {
-                dest[destIndex++]=src[i++];
-            }
-            continue;
-        }
-        c=map(csm->csp, c, utf8_caseContextIterator, csc, &s, csm->locale, &locCache);
-        if((destIndex<destCapacity) && (c<0 ? (c2=~c)<=0x7f : UCASE_MAX_STRING_LENGTH<c && (c2=c)<=0x7f)) {
-            /* fast path version of appendResult() for ASCII results */
-            dest[destIndex++]=(uint8_t)c2;
-        } else {
-            destIndex=appendResult(dest, destIndex, destCapacity, c, s);
-        }
-    }
-
-    if(destIndex>destCapacity) {
-        *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-    }
-    return destIndex;
-}
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-U_CFUNC int32_t U_CALLCONV
-ucasemap_internalUTF8ToTitle(const UCaseMap *csm,
-         uint8_t *dest, int32_t destCapacity,
-         const uint8_t *src, int32_t srcLength,
-         UErrorCode *pErrorCode) {
-    const UChar *s;
-    UChar32 c;
-    int32_t prev, titleStart, titleLimit, idx, destIndex, length;
-    UBool isFirstIndex;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-
-    // Use the C++ abstract base class to minimize dependencies.
-    // TODO: Change UCaseMap.iter to store a BreakIterator directly.
-    BreakIterator *bi=reinterpret_cast<BreakIterator *>(csm->iter);
-
-    /* set up local variables */
-    int32_t locCache=csm->locCache;
-    UCaseContext csc=UCASECONTEXT_INITIALIZER;
-    csc.p=(void *)src;
-    csc.limit=srcLength;
-    destIndex=0;
-    prev=0;
-    isFirstIndex=TRUE;
-
-    /* titlecasing loop */
-    while(prev<srcLength) {
-        /* find next index where to titlecase */
-        if(isFirstIndex) {
-            isFirstIndex=FALSE;
-            idx=bi->first();
-        } else {
-            idx=bi->next();
-        }
-        if(idx==UBRK_DONE || idx>srcLength) {
-            idx=srcLength;
-        }
-
-        /*
-         * Unicode 4 & 5 section 3.13 Default Case Operations:
-         *
-         * R3  toTitlecase(X): Find the word boundaries based on Unicode Standard Annex
-         * #29, "Text Boundaries." Between each pair of word boundaries, find the first
-         * cased character F. If F exists, map F to default_title(F); then map each
-         * subsequent character C to default_lower(C).
-         *
-         * In this implementation, segment [prev..index[ into 3 parts:
-         * a) uncased characters (copy as-is) [prev..titleStart[
-         * b) first case letter (titlecase)         [titleStart..titleLimit[
-         * c) subsequent characters (lowercase)                 [titleLimit..index[
-         */
-        if(prev<idx) {
-            /* find and copy uncased characters [prev..titleStart[ */
-            titleStart=titleLimit=prev;
-            U8_NEXT(src, titleLimit, idx, c);
-            if((csm->options&U_TITLECASE_NO_BREAK_ADJUSTMENT)==0 && UCASE_NONE==ucase_getType(csm->csp, c)) {
-                /* Adjust the titlecasing index (titleStart) to the next cased character. */
-                for(;;) {
-                    titleStart=titleLimit;
-                    if(titleLimit==idx) {
-                        /*
-                         * only uncased characters in [prev..index[
-                         * stop with titleStart==titleLimit==index
-                         */
-                        break;
-                    }
-                    U8_NEXT(src, titleLimit, idx, c);
-                    if(UCASE_NONE!=ucase_getType(csm->csp, c)) {
-                        break; /* cased letter at [titleStart..titleLimit[ */
-                    }
-                }
-                length=titleStart-prev;
-                if(length>0) {
-                    if((destIndex+length)<=destCapacity) {
-                        uprv_memcpy(dest+destIndex, src+prev, length);
-                    }
-                    destIndex+=length;
-                }
-            }
-
-            if(titleStart<titleLimit) {
-                /* titlecase c which is from [titleStart..titleLimit[ */
-                csc.cpStart=titleStart;
-                csc.cpLimit=titleLimit;
-                c=ucase_toFullTitle(csm->csp, c, utf8_caseContextIterator, &csc, &s, csm->locale, &locCache);
-                destIndex=appendResult(dest, destIndex, destCapacity, c, s);
-
-                /* Special case Dutch IJ titlecasing */
-                if ( titleStart+1 < idx && 
-                     ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_DUTCH &&
-                     ( src[titleStart] == 0x0049 || src[titleStart] == 0x0069 ) &&
-                     ( src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A )) { 
-                            c=0x004A;
-                            destIndex=appendResult(dest, destIndex, destCapacity, c, s);
-                            titleLimit++;
-                }
-                /* lowercase [titleLimit..index[ */
-                if(titleLimit<idx) {
-                    if((csm->options&U_TITLECASE_NO_LOWERCASE)==0) {
-                        /* Normal operation: Lowercase the rest of the word. */
-                        destIndex+=
-                            _caseMap(
-                                csm, ucase_toFullLower,
-                                dest+destIndex, destCapacity-destIndex,
-                                src, &csc,
-                                titleLimit, idx,
-                                pErrorCode);
-                    } else {
-                        /* Optionally just copy the rest of the word unchanged. */
-                        length=idx-titleLimit;
-                        if((destIndex+length)<=destCapacity) {
-                            uprv_memcpy(dest+destIndex, src+titleLimit, length);
-                        }
-                        destIndex+=length;
-                    }
-                }
-            }
-        }
-
-        prev=idx;
-    }
-
-    if(destIndex>destCapacity) {
-        *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-    }
-    return destIndex;
-}
-
-#endif
-
-static int32_t U_CALLCONV
-ucasemap_internalUTF8ToLower(const UCaseMap *csm,
-                             uint8_t *dest, int32_t destCapacity,
-                             const uint8_t *src, int32_t srcLength,
-                             UErrorCode *pErrorCode) {
-    UCaseContext csc=UCASECONTEXT_INITIALIZER;
-    csc.p=(void *)src;
-    csc.limit=srcLength;
-    return _caseMap(
-        csm, ucase_toFullLower,
-        dest, destCapacity,
-        src, &csc, 0, srcLength,
-        pErrorCode);
-}
-
-static int32_t U_CALLCONV
-ucasemap_internalUTF8ToUpper(const UCaseMap *csm,
-                             uint8_t *dest, int32_t destCapacity,
-                             const uint8_t *src, int32_t srcLength,
-                             UErrorCode *pErrorCode) {
-    UCaseContext csc=UCASECONTEXT_INITIALIZER;
-    csc.p=(void *)src;
-    csc.limit=srcLength;
-    return _caseMap(
-        csm, ucase_toFullUpper,
-        dest, destCapacity,
-        src, &csc, 0, srcLength,
-        pErrorCode);
-}
-
-static int32_t
-utf8_foldCase(const UCaseProps *csp,
-              uint8_t *dest, int32_t destCapacity,
-              const uint8_t *src, int32_t srcLength,
-              uint32_t options,
-              UErrorCode *pErrorCode) {
-    int32_t srcIndex, destIndex;
-
-    const UChar *s;
-    UChar32 c, c2;
-    int32_t start;
-
-    /* case mapping loop */
-    srcIndex=destIndex=0;
-    while(srcIndex<srcLength) {
-        start=srcIndex;
-        U8_NEXT(src, srcIndex, srcLength, c);
-        if(c<0) {
-            while(destIndex<destCapacity && start<srcIndex) {
-                dest[destIndex++]=src[start++];
-            }
-            continue;
-        }
-        c=ucase_toFullFolding(csp, c, &s, options);
-        if((destIndex<destCapacity) && (c<0 ? (c2=~c)<=0x7f : UCASE_MAX_STRING_LENGTH<c && (c2=c)<=0x7f)) {
-            /* fast path version of appendResult() for ASCII results */
-            dest[destIndex++]=(uint8_t)c2;
-        } else {
-            destIndex=appendResult(dest, destIndex, destCapacity, c, s);
-        }
-    }
-
-    if(destIndex>destCapacity) {
-        *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-    }
-    return destIndex;
-}
-
-static int32_t U_CALLCONV
-ucasemap_internalUTF8Fold(const UCaseMap *csm,
-                          uint8_t *dest, int32_t destCapacity,
-                          const uint8_t *src, int32_t srcLength,
-                          UErrorCode *pErrorCode) {
-    return utf8_foldCase(csm->csp, dest, destCapacity, src, srcLength, csm->options, pErrorCode);
-}
-
-U_CFUNC int32_t
-ucasemap_mapUTF8(const UCaseMap *csm,
-                 uint8_t *dest, int32_t destCapacity,
-                 const uint8_t *src, int32_t srcLength,
-                 UTF8CaseMapper *stringCaseMapper,
-                 UErrorCode *pErrorCode) {
-    int32_t destLength;
-
-    /* check argument values */
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if( destCapacity<0 ||
-        (dest==NULL && destCapacity>0) ||
-        src==NULL ||
-        srcLength<-1
-    ) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    /* get the string length */
-    if(srcLength==-1) {
-        srcLength=(int32_t)uprv_strlen((const char *)src);
-    }
-
-    /* check for overlapping source and destination */
-    if( dest!=NULL &&
-        ((src>=dest && src<(dest+destCapacity)) ||
-         (dest>=src && dest<(src+srcLength)))
-    ) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    destLength=stringCaseMapper(csm, dest, destCapacity, src, srcLength, pErrorCode);
-    return u_terminateChars((char *)dest, destCapacity, destLength, pErrorCode);
-}
-
-/* public API functions */
-
-U_CAPI int32_t U_EXPORT2
-ucasemap_utf8ToLower(const UCaseMap *csm,
-                     char *dest, int32_t destCapacity,
-                     const char *src, int32_t srcLength,
-                     UErrorCode *pErrorCode) {
-    return ucasemap_mapUTF8(csm,
-                   (uint8_t *)dest, destCapacity,
-                   (const uint8_t *)src, srcLength,
-                   ucasemap_internalUTF8ToLower, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-ucasemap_utf8ToUpper(const UCaseMap *csm,
-                     char *dest, int32_t destCapacity,
-                     const char *src, int32_t srcLength,
-                     UErrorCode *pErrorCode) {
-    return ucasemap_mapUTF8(csm,
-                   (uint8_t *)dest, destCapacity,
-                   (const uint8_t *)src, srcLength,
-                   ucasemap_internalUTF8ToUpper, pErrorCode);
-}
-
-U_CAPI int32_t U_EXPORT2
-ucasemap_utf8FoldCase(const UCaseMap *csm,
-                      char *dest, int32_t destCapacity,
-                      const char *src, int32_t srcLength,
-                      UErrorCode *pErrorCode) {
-    return ucasemap_mapUTF8(csm,
-                   (uint8_t *)dest, destCapacity,
-                   (const uint8_t *)src, srcLength,
-                   ucasemap_internalUTF8Fold, pErrorCode);
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/ucasemap_titlecase_brkiter.cpp b/src/third_party/mozjs/intl/icu/source/common/ucasemap_titlecase_brkiter.cpp
deleted file mode 100644
index 1698c8e..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ucasemap_titlecase_brkiter.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  ucasemap_titlecase_brkiter.cpp
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2011jun02
-*   created by: Markus W. Scherer
-*
-*   Titlecasing functions that are based on BreakIterator
-*   were moved here to break dependency cycles among parts of the common library.
-*/
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/brkiter.h"
-#include "unicode/ubrk.h"
-#include "unicode/ucasemap.h"
-#include "cmemory.h"
-#include "ucase.h"
-#include "ustr_imp.h"
-
-U_NAMESPACE_USE
-
-U_CAPI const UBreakIterator * U_EXPORT2
-ucasemap_getBreakIterator(const UCaseMap *csm) {
-    return csm->iter;
-}
-
-U_CAPI void U_EXPORT2
-ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * /*pErrorCode*/) {
-    // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code.
-    delete reinterpret_cast<BreakIterator *>(csm->iter);
-    csm->iter=iterToAdopt;
-}
-
-U_CAPI int32_t U_EXPORT2
-ucasemap_utf8ToTitle(UCaseMap *csm,
-                     char *dest, int32_t destCapacity,
-                     const char *src, int32_t srcLength,
-                     UErrorCode *pErrorCode) {
-    UText utext=UTEXT_INITIALIZER;
-    utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if(csm->iter==NULL) {
-        csm->iter=ubrk_open(UBRK_WORD, csm->locale,
-                            NULL, 0,
-                            pErrorCode);
-    }
-    ubrk_setUText(csm->iter, &utext, pErrorCode);
-    int32_t length=ucasemap_mapUTF8(csm,
-                   (uint8_t *)dest, destCapacity,
-                   (const uint8_t *)src, srcLength,
-                   ucasemap_internalUTF8ToTitle, pErrorCode);
-    utext_close(&utext);
-    return length;
-}
-
-#endif  // !UCONFIG_NO_BREAK_ITERATION
diff --git a/src/third_party/mozjs/intl/icu/source/common/ucat.c b/src/third_party/mozjs/intl/icu/source/common/ucat.c
deleted file mode 100644
index 5f6feb9..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/ucat.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2003, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: March 19 2003
-* Since: ICU 2.6
-**********************************************************************
-*/
-#include "unicode/ucat.h"
-#include "unicode/ustring.h"
-#include "cstring.h"
-#include "uassert.h"
-
-/* Separator between set_num and msg_num */
-static const char SEPARATOR = '%';
-
-/* Maximum length of a set_num/msg_num key, incl. terminating zero.
- * Longest possible key is "-2147483648%-2147483648" */
-#define MAX_KEY_LEN (24)
-
-/**
- * Fill in buffer with a set_num/msg_num key string, given the numeric
- * values. Numeric values must be >= 0. Buffer must be of length
- * MAX_KEY_LEN or more.
- */
-static char*
-_catkey(char* buffer, int32_t set_num, int32_t msg_num) {
-    int32_t i = 0;
-    i = T_CString_integerToString(buffer, set_num, 10);
-    buffer[i++] = SEPARATOR;
-    T_CString_integerToString(buffer+i, msg_num, 10);
-    return buffer;
-}
-
-U_CAPI u_nl_catd U_EXPORT2
-u_catopen(const char* name, const char* locale, UErrorCode* ec) {
-    return (u_nl_catd) ures_open(name, locale, ec);
-}
-
-U_CAPI void U_EXPORT2
-u_catclose(u_nl_catd catd) {
-    ures_close((UResourceBundle*) catd); /* may be NULL */
-}
-
-U_CAPI const UChar* U_EXPORT2
-u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num,
-          const UChar* s,
-          int32_t* len, UErrorCode* ec) {
-
-    char key[MAX_KEY_LEN];
-    const UChar* result;
-
-    if (ec == NULL || U_FAILURE(*ec)) {
-        goto ERROR;
-    }
-
-    result = ures_getStringByKey((const UResourceBundle*) catd,
-                                 _catkey(key, set_num, msg_num),
-                                 len, ec);
-    if (U_FAILURE(*ec)) {
-        goto ERROR;
-    }
-
-    return result;
-
- ERROR:
-    /* In case of any failure, return s */
-    if (len != NULL) {
-        *len = u_strlen(s);
-    }
-    return s;
-}
-
-/*eof*/
diff --git a/src/third_party/mozjs/intl/icu/source/common/uchar.c b/src/third_party/mozjs/intl/icu/source/common/uchar.c
deleted file mode 100644
index 9a285cc..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/uchar.c
+++ /dev/null
@@ -1,727 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1996-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File UCHAR.C
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   04/02/97    aliu        Creation.
-*   4/15/99     Madhu       Updated all the function definitions for C Implementation
-*   5/20/99     Madhu       Added the function u_getVersion()
-*   8/19/1999   srl         Upgraded scripts to Unicode3.0 
-*   11/11/1999  weiv        added u_isalnum(), cleaned comments
-*   01/11/2000  helena      Renamed u_getVersion to u_getUnicodeVersion.
-*   06/20/2000  helena      OS/400 port changes; mostly typecast.
-******************************************************************************
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/uchar.h"
-#include "unicode/uscript.h"
-#include "unicode/udata.h"
-#include "uassert.h"
-#include "cmemory.h"
-#include "ucln_cmn.h"
-#include "utrie2.h"
-#include "udataswp.h"
-#include "uprops.h"
-#include "ustr_imp.h"
-
-#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
-
-/* uchar_props_data.h is machine-generated by genprops --csource */
-#define INCLUDED_FROM_UCHAR_C
-#include "uchar_props_data.h"
-
-/* constants and macros for access to the data ------------------------------ */
-
-/* getting a uint32_t properties word from the data */
-#define GET_PROPS(c, result) ((result)=UTRIE2_GET16(&propsTrie, c));
-
-U_CFUNC UBool
-uprv_haveProperties(UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return FALSE;
-    }
-    return TRUE;
-}
-
-/* API functions ------------------------------------------------------------ */
-
-/* Gets the Unicode character's general category.*/
-U_CAPI int8_t U_EXPORT2
-u_charType(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (int8_t)GET_CATEGORY(props);
-}
-
-/* Enumerate all code points with their general categories. */
-struct _EnumTypeCallback {
-    UCharEnumTypeRange *enumRange;
-    const void *context;
-};
-
-static uint32_t U_CALLCONV
-_enumTypeValue(const void *context, uint32_t value) {
-    return GET_CATEGORY(value);
-}
-
-static UBool U_CALLCONV
-_enumTypeRange(const void *context, UChar32 start, UChar32 end, uint32_t value) {
-    /* just cast the value to UCharCategory */
-    return ((struct _EnumTypeCallback *)context)->
-        enumRange(((struct _EnumTypeCallback *)context)->context,
-                  start, end+1, (UCharCategory)value);
-}
-
-U_CAPI void U_EXPORT2
-u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context) {
-    struct _EnumTypeCallback callback;
-
-    if(enumRange==NULL) {
-        return;
-    }
-
-    callback.enumRange=enumRange;
-    callback.context=context;
-    utrie2_enum(&propsTrie, _enumTypeValue, _enumTypeRange, &callback);
-}
-
-/* Checks if ch is a lower case letter.*/
-U_CAPI UBool U_EXPORT2
-u_islower(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(GET_CATEGORY(props)==U_LOWERCASE_LETTER);
-}
-
-/* Checks if ch is an upper case letter.*/
-U_CAPI UBool U_EXPORT2
-u_isupper(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(GET_CATEGORY(props)==U_UPPERCASE_LETTER);
-}
-
-/* Checks if ch is a title case letter; usually upper case letters.*/
-U_CAPI UBool U_EXPORT2
-u_istitle(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(GET_CATEGORY(props)==U_TITLECASE_LETTER);
-}
-
-/* Checks if ch is a decimal digit. */
-U_CAPI UBool U_EXPORT2
-u_isdigit(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(GET_CATEGORY(props)==U_DECIMAL_DIGIT_NUMBER);
-}
-
-U_CAPI UBool U_EXPORT2
-u_isxdigit(UChar32 c) {
-    uint32_t props;
-
-    /* check ASCII and Fullwidth ASCII a-fA-F */
-    if(
-        (c<=0x66 && c>=0x41 && (c<=0x46 || c>=0x61)) ||
-        (c>=0xff21 && c<=0xff46 && (c<=0xff26 || c>=0xff41))
-    ) {
-        return TRUE;
-    }
-
-    GET_PROPS(c, props);
-    return (UBool)(GET_CATEGORY(props)==U_DECIMAL_DIGIT_NUMBER);
-}
-
-/* Checks if the Unicode character is a letter.*/
-U_CAPI UBool U_EXPORT2
-u_isalpha(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&U_GC_L_MASK)!=0);
-}
-
-U_CAPI UBool U_EXPORT2
-u_isUAlphabetic(UChar32 c) {
-    return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_ALPHABETIC))!=0;
-}
-
-/* Checks if c is a letter or a decimal digit */
-U_CAPI UBool U_EXPORT2
-u_isalnum(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_ND_MASK))!=0);
-}
-
-/**
- * Checks if c is alphabetic, or a decimal digit; implements UCHAR_POSIX_ALNUM.
- * @internal
- */
-U_CFUNC UBool
-u_isalnumPOSIX(UChar32 c) {
-    return (UBool)(u_isUAlphabetic(c) || u_isdigit(c));
-}
-
-/* Checks if ch is a unicode character with assigned character type.*/
-U_CAPI UBool U_EXPORT2
-u_isdefined(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(GET_CATEGORY(props)!=0);
-}
-
-/* Checks if the Unicode character is a base form character that can take a diacritic.*/
-U_CAPI UBool U_EXPORT2
-u_isbase(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_N_MASK|U_GC_MC_MASK|U_GC_ME_MASK))!=0);
-}
-
-/* Checks if the Unicode character is a control character.*/
-U_CAPI UBool U_EXPORT2
-u_iscntrl(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&(U_GC_CC_MASK|U_GC_CF_MASK|U_GC_ZL_MASK|U_GC_ZP_MASK))!=0);
-}
-
-U_CAPI UBool U_EXPORT2
-u_isISOControl(UChar32 c) {
-    return (uint32_t)c<=0x9f && (c<=0x1f || c>=0x7f);
-}
-
-/* Some control characters that are used as space. */
-#define IS_THAT_CONTROL_SPACE(c) \
-    (c<=0x9f && ((c>=TAB && c<=CR) || (c>=0x1c && c <=0x1f) || c==NL))
-
-/* Java has decided that U+0085 New Line is not whitespace any more. */
-#define IS_THAT_ASCII_CONTROL_SPACE(c) \
-    (c<=0x1f && c>=TAB && (c<=CR || c>=0x1c))
-
-/* Checks if the Unicode character is a space character.*/
-U_CAPI UBool U_EXPORT2
-u_isspace(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&U_GC_Z_MASK)!=0 || IS_THAT_CONTROL_SPACE(c));
-}
-
-U_CAPI UBool U_EXPORT2
-u_isJavaSpaceChar(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&U_GC_Z_MASK)!=0);
-}
-
-/* Checks if the Unicode character is a whitespace character.*/
-U_CAPI UBool U_EXPORT2
-u_isWhitespace(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(
-                ((CAT_MASK(props)&U_GC_Z_MASK)!=0 &&
-                    c!=NBSP && c!=FIGURESP && c!=NNBSP) || /* exclude no-break spaces */
-                IS_THAT_ASCII_CONTROL_SPACE(c)
-           );
-}
-
-U_CAPI UBool U_EXPORT2
-u_isblank(UChar32 c) {
-    if((uint32_t)c<=0x9f) {
-        return c==9 || c==0x20; /* TAB or SPACE */
-    } else {
-        /* Zs */
-        uint32_t props;
-        GET_PROPS(c, props);
-        return (UBool)(GET_CATEGORY(props)==U_SPACE_SEPARATOR);
-    }
-}
-
-U_CAPI UBool U_EXPORT2
-u_isUWhiteSpace(UChar32 c) {
-    return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_WHITE_SPACE))!=0;
-}
-
-/* Checks if the Unicode character is printable.*/
-U_CAPI UBool U_EXPORT2
-u_isprint(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    /* comparing ==0 returns FALSE for the categories mentioned */
-    return (UBool)((CAT_MASK(props)&U_GC_C_MASK)==0);
-}
-
-/**
- * Checks if c is in \p{graph}\p{blank} - \p{cntrl}.
- * Implements UCHAR_POSIX_PRINT.
- * @internal
- */
-U_CFUNC UBool
-u_isprintPOSIX(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    /*
-     * The only cntrl character in graph+blank is TAB (in blank).
-     * Here we implement (blank-TAB)=Zs instead of calling u_isblank().
-     */
-    return (UBool)((GET_CATEGORY(props)==U_SPACE_SEPARATOR) || u_isgraphPOSIX(c));
-}
-
-U_CAPI UBool U_EXPORT2
-u_isgraph(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    /* comparing ==0 returns FALSE for the categories mentioned */
-    return (UBool)((CAT_MASK(props)&
-                    (U_GC_CC_MASK|U_GC_CF_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK))
-                   ==0);
-}
-
-/**
- * Checks if c is in
- * [^\p{space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]
- * with space=\p{Whitespace} and Control=Cc.
- * Implements UCHAR_POSIX_GRAPH.
- * @internal
- */
-U_CFUNC UBool
-u_isgraphPOSIX(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    /* \p{space}\p{gc=Control} == \p{gc=Z}\p{Control} */
-    /* comparing ==0 returns FALSE for the categories mentioned */
-    return (UBool)((CAT_MASK(props)&
-                    (U_GC_CC_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK))
-                   ==0);
-}
-
-U_CAPI UBool U_EXPORT2
-u_ispunct(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&U_GC_P_MASK)!=0);
-}
-
-/* Checks if the Unicode character can start a Unicode identifier.*/
-U_CAPI UBool U_EXPORT2
-u_isIDStart(UChar32 c) {
-    /* same as u_isalpha() */
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_NL_MASK))!=0);
-}
-
-/* Checks if the Unicode character can be a Unicode identifier part other than starting the
- identifier.*/
-U_CAPI UBool U_EXPORT2
-u_isIDPart(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(
-           (CAT_MASK(props)&
-            (U_GC_ND_MASK|U_GC_NL_MASK|
-             U_GC_L_MASK|
-             U_GC_PC_MASK|U_GC_MC_MASK|U_GC_MN_MASK)
-           )!=0 ||
-           u_isIDIgnorable(c));
-}
-
-/*Checks if the Unicode character can be ignorable in a Java or Unicode identifier.*/
-U_CAPI UBool U_EXPORT2
-u_isIDIgnorable(UChar32 c) {
-    if(c<=0x9f) {
-        return u_isISOControl(c) && !IS_THAT_ASCII_CONTROL_SPACE(c);
-    } else {
-        uint32_t props;
-        GET_PROPS(c, props);
-        return (UBool)(GET_CATEGORY(props)==U_FORMAT_CHAR);
-    }
-}
-
-/*Checks if the Unicode character can start a Java identifier.*/
-U_CAPI UBool U_EXPORT2
-u_isJavaIDStart(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_SC_MASK|U_GC_PC_MASK))!=0);
-}
-
-/*Checks if the Unicode character can be a Java identifier part other than starting the
- * identifier.
- */
-U_CAPI UBool U_EXPORT2
-u_isJavaIDPart(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(
-           (CAT_MASK(props)&
-            (U_GC_ND_MASK|U_GC_NL_MASK|
-             U_GC_L_MASK|
-             U_GC_SC_MASK|U_GC_PC_MASK|
-             U_GC_MC_MASK|U_GC_MN_MASK)
-           )!=0 ||
-           u_isIDIgnorable(c));
-}
-
-U_CAPI int32_t U_EXPORT2
-u_charDigitValue(UChar32 c) {
-    uint32_t props;
-    int32_t value;
-    GET_PROPS(c, props);
-    value=(int32_t)GET_NUMERIC_TYPE_VALUE(props)-UPROPS_NTV_DECIMAL_START;
-    if(value<=9) {
-        return value;
-    } else {
-        return -1;
-    }
-}
-
-U_CAPI double U_EXPORT2
-u_getNumericValue(UChar32 c) {
-    uint32_t props;
-    int32_t ntv;
-    GET_PROPS(c, props);
-    ntv=(int32_t)GET_NUMERIC_TYPE_VALUE(props);
-
-    if(ntv==UPROPS_NTV_NONE) {
-        return U_NO_NUMERIC_VALUE;
-    } else if(ntv<UPROPS_NTV_DIGIT_START) {
-        /* decimal digit */
-        return ntv-UPROPS_NTV_DECIMAL_START;
-    } else if(ntv<UPROPS_NTV_NUMERIC_START) {
-        /* other digit */
-        return ntv-UPROPS_NTV_DIGIT_START;
-    } else if(ntv<UPROPS_NTV_FRACTION_START) {
-        /* small integer */
-        return ntv-UPROPS_NTV_NUMERIC_START;
-    } else if(ntv<UPROPS_NTV_LARGE_START) {
-        /* fraction */
-        int32_t numerator=(ntv>>4)-12;
-        int32_t denominator=(ntv&0xf)+1;
-        return (double)numerator/denominator;
-    } else if(ntv<UPROPS_NTV_BASE60_START) {
-        /* large, single-significant-digit integer */
-        double numValue;
-        int32_t mant=(ntv>>5)-14;
-        int32_t exp=(ntv&0x1f)+2;
-        numValue=mant;
-
-        /* multiply by 10^exp without math.h */
-        while(exp>=4) {
-            numValue*=10000.;
-            exp-=4;
-        }
-        switch(exp) {
-        case 3:
-            numValue*=1000.;
-            break;
-        case 2:
-            numValue*=100.;
-            break;
-        case 1:
-            numValue*=10.;
-            break;
-        case 0:
-        default:
-            break;
-        }
-
-        return numValue;
-    } else if(ntv<UPROPS_NTV_RESERVED_START) {
-        /* sexagesimal (base 60) integer */
-        int32_t numValue=(ntv>>2)-0xbf;
-        int32_t exp=(ntv&3)+1;
-
-        switch(exp) {
-        case 4:
-            numValue*=60*60*60*60;
-            break;
-        case 3:
-            numValue*=60*60*60;
-            break;
-        case 2:
-            numValue*=60*60;
-            break;
-        case 1:
-            numValue*=60;
-            break;
-        case 0:
-        default:
-            break;
-        }
-
-        return numValue;
-    } else {
-        /* reserved */
-        return U_NO_NUMERIC_VALUE;
-    }
-}
-
-U_CAPI int32_t U_EXPORT2
-u_digit(UChar32 ch, int8_t radix) {
-    int8_t value;
-    if((uint8_t)(radix-2)<=(36-2)) {
-        value=(int8_t)u_charDigitValue(ch);
-        if(value<0) {
-            /* ch is not a decimal digit, try latin letters */
-            if(ch>=0x61 && ch<=0x7A) {
-                value=(int8_t)(ch-0x57);  /* ch - 'a' + 10 */
-            } else if(ch>=0x41 && ch<=0x5A) {
-                value=(int8_t)(ch-0x37);  /* ch - 'A' + 10 */
-            } else if(ch>=0xFF41 && ch<=0xFF5A) {
-                value=(int8_t)(ch-0xFF37);  /* fullwidth ASCII a-z */
-            } else if(ch>=0xFF21 && ch<=0xFF3A) {
-                value=(int8_t)(ch-0xFF17);  /* fullwidth ASCII A-Z */
-            }
-        }
-    } else {
-        value=-1;   /* invalid radix */
-    }
-    return (int8_t)((value<radix) ? value : -1);
-}
-
-U_CAPI UChar32 U_EXPORT2
-u_forDigit(int32_t digit, int8_t radix) {
-    if((uint8_t)(radix-2)>(36-2) || (uint32_t)digit>=(uint32_t)radix) {
-        return 0;
-    } else if(digit<10) {
-        return (UChar32)(0x30+digit);
-    } else {
-        return (UChar32)((0x61-10)+digit);
-    }
-}
-
-/* miscellaneous, and support for uprops.cpp -------------------------------- */
-
-U_CAPI void U_EXPORT2
-u_getUnicodeVersion(UVersionInfo versionArray) {
-    if(versionArray!=NULL) {
-        uprv_memcpy(versionArray, dataVersion, U_MAX_VERSION_LENGTH);
-    }
-}
-
-U_CFUNC uint32_t
-u_getMainProperties(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return props;
-}
-
-U_CFUNC uint32_t
-u_getUnicodeProperties(UChar32 c, int32_t column) {
-    U_ASSERT(column>=0);
-    if(column>=propsVectorsColumns) {
-        return 0;
-    } else {
-        uint16_t vecIndex=UTRIE2_GET16(&propsVectorsTrie, c);
-        return propsVectors[vecIndex+column];
-    }
-}
-
-U_CFUNC int32_t
-uprv_getMaxValues(int32_t column) {
-    switch(column) {
-    case 0:
-        return indexes[UPROPS_MAX_VALUES_INDEX];
-    case 2:
-        return indexes[UPROPS_MAX_VALUES_2_INDEX];
-    default:
-        return 0;
-    }
-}
-
-U_CAPI void U_EXPORT2
-u_charAge(UChar32 c, UVersionInfo versionArray) {
-    if(versionArray!=NULL) {
-        uint32_t version=u_getUnicodeProperties(c, 0)>>UPROPS_AGE_SHIFT;
-        versionArray[0]=(uint8_t)(version>>4);
-        versionArray[1]=(uint8_t)(version&0xf);
-        versionArray[2]=versionArray[3]=0;
-    }
-}
-
-U_CAPI UScriptCode U_EXPORT2
-uscript_getScript(UChar32 c, UErrorCode *pErrorCode) {
-    uint32_t scriptX;
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return USCRIPT_INVALID_CODE;
-    }
-    if((uint32_t)c>0x10ffff) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return USCRIPT_INVALID_CODE;
-    }
-    scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
-    if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
-        return (UScriptCode)scriptX;
-    } else if(scriptX<UPROPS_SCRIPT_X_WITH_INHERITED) {
-        return USCRIPT_COMMON;
-    } else if(scriptX<UPROPS_SCRIPT_X_WITH_OTHER) {
-        return USCRIPT_INHERITED;
-    } else {
-        return (UScriptCode)scriptExtensions[scriptX&UPROPS_SCRIPT_MASK];
-    }
-}
-
-U_CAPI UBool U_EXPORT2
-uscript_hasScript(UChar32 c, UScriptCode sc) {
-    const uint16_t *scx;
-    uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
-    if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
-        return sc==(UScriptCode)scriptX;
-    }
-
-    scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK);
-    if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) {
-        scx=scriptExtensions+scx[1];
-    }
-    if(sc>=USCRIPT_CODE_LIMIT) {
-        /* Guard against bogus input that would make us go past the Script_Extensions terminator. */
-        return FALSE;
-    }
-    while(sc>*scx) {
-        ++scx;
-    }
-    return sc==(*scx&0x7fff);
-}
-
-U_CAPI int32_t U_EXPORT2
-uscript_getScriptExtensions(UChar32 c,
-                            UScriptCode *scripts, int32_t capacity,
-                            UErrorCode *pErrorCode) {
-    uint32_t scriptX;
-    int32_t length;
-    const uint16_t *scx;
-    uint16_t sx;
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return 0;
-    }
-    if(capacity<0 || (capacity>0 && scripts==NULL)) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
-    if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
-        if(capacity==0) {
-            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-        } else {
-            scripts[0]=(UScriptCode)scriptX;
-        }
-        return 1;
-    }
-
-    scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK);
-    if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) {
-        scx=scriptExtensions+scx[1];
-    }
-    length=0;
-    do {
-        sx=*scx++;
-        if(length<capacity) {
-            scripts[length]=(UScriptCode)(sx&0x7fff);
-        }
-        ++length;
-    } while(sx<0x8000);
-    if(length>capacity) {
-        *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
-    }
-    return length;
-}
-
-U_CAPI UBlockCode U_EXPORT2
-ublock_getCode(UChar32 c) {
-    return (UBlockCode)((u_getUnicodeProperties(c, 0)&UPROPS_BLOCK_MASK)>>UPROPS_BLOCK_SHIFT);
-}
-
-/* property starts for UnicodeSet ------------------------------------------- */
-
-static UBool U_CALLCONV
-_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 end, uint32_t value) {
-    /* add the start code point to the USet */
-    const USetAdder *sa=(const USetAdder *)context;
-    sa->add(sa->set, start);
-    return TRUE;
-}
-
-#define USET_ADD_CP_AND_NEXT(sa, cp) sa->add(sa->set, cp); sa->add(sa->set, cp+1)
-
-U_CFUNC void U_EXPORT2
-uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /* add the start code point of each same-value range of the main trie */
-    utrie2_enum(&propsTrie, NULL, _enumPropertyStartsRange, sa);
-
-    /* add code points with hardcoded properties, plus the ones following them */
-
-    /* add for u_isblank() */
-    USET_ADD_CP_AND_NEXT(sa, TAB);
-
-    /* add for IS_THAT_CONTROL_SPACE() */
-    sa->add(sa->set, CR+1); /* range TAB..CR */
-    sa->add(sa->set, 0x1c);
-    sa->add(sa->set, 0x1f+1);
-    USET_ADD_CP_AND_NEXT(sa, NL);
-
-    /* add for u_isIDIgnorable() what was not added above */
-    sa->add(sa->set, DEL); /* range DEL..NBSP-1, NBSP added below */
-    sa->add(sa->set, HAIRSP);
-    sa->add(sa->set, RLM+1);
-    sa->add(sa->set, INHSWAP);
-    sa->add(sa->set, NOMDIG+1);
-    USET_ADD_CP_AND_NEXT(sa, ZWNBSP);
-
-    /* add no-break spaces for u_isWhitespace() what was not added above */
-    USET_ADD_CP_AND_NEXT(sa, NBSP);
-    USET_ADD_CP_AND_NEXT(sa, FIGURESP);
-    USET_ADD_CP_AND_NEXT(sa, NNBSP);
-
-    /* add for u_digit() */
-    sa->add(sa->set, U_a);
-    sa->add(sa->set, U_z+1);
-    sa->add(sa->set, U_A);
-    sa->add(sa->set, U_Z+1);
-    sa->add(sa->set, U_FW_a);
-    sa->add(sa->set, U_FW_z+1);
-    sa->add(sa->set, U_FW_A);
-    sa->add(sa->set, U_FW_Z+1);
-
-    /* add for u_isxdigit() */
-    sa->add(sa->set, U_f+1);
-    sa->add(sa->set, U_F+1);
-    sa->add(sa->set, U_FW_f+1);
-    sa->add(sa->set, U_FW_F+1);
-
-    /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */
-    sa->add(sa->set, WJ); /* range WJ..NOMDIG */
-    sa->add(sa->set, 0xfff0);
-    sa->add(sa->set, 0xfffb+1);
-    sa->add(sa->set, 0xe0000);
-    sa->add(sa->set, 0xe0fff+1);
-
-    /* add for UCHAR_GRAPHEME_BASE and others */
-    USET_ADD_CP_AND_NEXT(sa, CGJ);
-}
-
-U_CFUNC void U_EXPORT2
-upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /* add the start code point of each same-value range of the properties vectors trie */
-    if(propsVectorsColumns>0) {
-        /* if propsVectorsColumns==0 then the properties vectors trie may not be there at all */
-        utrie2_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa);
-    }
-}
diff --git a/src/third_party/mozjs/intl/icu/source/common/uchar_props_data.h b/src/third_party/mozjs/intl/icu/source/common/uchar_props_data.h
deleted file mode 100644
index 42e024f..0000000
--- a/src/third_party/mozjs/intl/icu/source/common/uchar_props_data.h
+++ /dev/null
@@ -1,2955 +0,0 @@
-/*
- * Copyright (C) 1999-2012, International Business Machines
- * Corporation and others.  All Rights Reserved.
- *
- * file name: uchar_props_data.h
- *
- * machine-generated by: icu/tools/unicode/c/genprops/corepropsbuilder.cpp
- */
-
-#ifndef INCLUDED_FROM_UCHAR_C
-#   error This file must be #included from uchar.c only.
-#endif
-
-static const UVersionInfo dataVersion={6,2,0,0};
-
-static const uint16_t propsTrie_index[17928]={
-0x3dc,0x3e4,0x3ec,0x3f4,0x40c,0x414,0x41c,0x424,0x42c,0x434,0x43a,0x442,0x44a,0x452,0x45a,0x462,
-0x468,0x470,0x478,0x480,0x483,0x48b,0x493,0x49b,0x4a3,0x4ab,0x4a7,0x4af,0x4b7,0x4bf,0x4c4,0x4cc,
-0x4d4,0x4dc,0x4e0,0x4e8,0x4f0,0x4f8,0x500,0x508,0x506,0x50e,0x513,0x51b,0x521,0x529,0x531,0x539,
-0x541,0x549,0x551,0x559,0x55e,0x566,0x569,0x571,0x579,0x581,0x587,0x58f,0x58e,0x596,0x59e,0x5a6,
-0x5b6,0x5ae,0x5be,0x3fc,0x3fc,0x5c6,0x3fc,0x5cd,0x5dd,0x5df,0x5e7,0x5d5,0x5f7,0x5fd,0x605,0x5ef,
-0x615,0x61b,0x623,0x60d,0x633,0x639,0x641,0x62b,0x5f7,0x651,0x659,0x649,0x661,0x669,0x671,0x678,
-0x688,0x68e,0x696,0x680,0x6a6,0x6ac,0x6b4,0x69e,0x6a6,0x6c3,0x6cb,0x6bc,0x6d9,0x6e0,0x6e8,0x6d1,
-0x58a,0x6f7,0x6ff,0x3fc,0x6f0,0x707,0x70f,0x3fc,0x717,0x71f,0x727,0x72c,0x734,0x73b,0x743,0x3fc,
-0x549,0x74b,0x753,0x75b,0x763,0x4d4,0x773,0x76b,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x779,0x549,0x781,0x777,0x789,0x549,0x785,0x549,0x78f,0x797,0x79f,0x549,0x549,0x7a7,
-0x7af,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x7b4,0x7bc,0x549,0x549,0x7c4,0x7cc,0x7d4,0x7dc,0x7e4,0x549,0x7ec,0x7f4,0x7fc,
-0x80c,0x549,0x814,0x816,0x549,0x804,0x549,0x81e,0x832,0x826,0x82e,0x83a,0x549,0x842,0x84a,0x852,
-0x85a,0x549,0x86a,0x872,0x87a,0x862,0x3fc,0x3fc,0x88a,0x88d,0x895,0x882,0x8a5,0x89d,0x549,0x8ac,
-0x549,0x8bb,0x8b4,0x8c3,0x3fc,0x3fc,0x8cb,0x8d3,0x47c,0x8db,0x8de,0x8e4,0x8eb,0x8de,0x4a3,0x8f3,
-0x42c,0x42c,0x42c,0x42c,0x8fb,0x42c,0x42c,0x42c,0x90b,0x913,0x91b,0x923,0x92b,0x92f,0x937,0x903,
-0x94f,0x957,0x93f,0x947,0x95f,0x967,0x96e,0x976,0x98e,0x97e,0x986,0x996,0x99e,0x9ad,0x9b2,0x9a5,
-0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9c2,0x9ca,0x852,0x9cd,0x9d5,0x9dc,0x9e1,0x9e9,
-0x852,0x9f1,0x9f9,0xa09,0xa0c,0x852,0x852,0xa01,0x852,0x852,0x852,0x852,0x852,0xa1b,0xa23,0xa13,
-0x852,0x852,0x852,0xa28,0x852,0x852,0x852,0x852,0xa30,0x852,0x852,0xa36,0xa3e,0x852,0xa46,0xa4d,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x9ba,0x9ba,0x9ba,0x9ba,0xa55,0x9ba,0xa5c,0xa63,
-0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x852,0xa6b,0xa72,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x4d4,0xa82,0xa7a,0xa8a,0x42c,0x42c,0x42c,0xa92,0x47c,0xa9a,0x549,0xaa0,0xab0,0xaa8,0xaa8,0x4a3,
-0xab8,0xac0,0x3fc,0x3fc,0xac8,0x852,0x852,0xacf,0x852,0x852,0x852,0x852,0x852,0x852,0xad7,0xadd,
-0xaed,0xae5,0x58a,0x549,0xaf5,0x7af,0x549,0xafd,0xb05,0xb0a,0x549,0x549,0xb0f,0x535,0x852,0xb16,
-0xb1e,0xb26,0xb2c,0x852,0xb26,0xb34,0x852,0xb1e,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,
-0xb3c,0x549,0x549,0x549,0xb44,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0xb4a,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xb4f,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x81e,0x852,0x852,
-0xb57,0x549,0xb5a,0x549,0xb62,0xb68,0xb70,0xb78,0xb7d,0x549,0x549,0xb81,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xb88,0x549,0xb8f,0xb95,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xb9d,0x549,0x549,0x549,0xba5,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0xba7,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xbae,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0xbb5,0x549,0x549,0x549,0xbbc,0xbc4,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xbc9,0x549,0x549,0xbd1,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xbd5,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xbd8,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xbdb,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0xbe1,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0xbe9,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0xbee,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0xbf3,0x549,0x549,0x549,0xbf8,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0xc00,0xc07,0xc0b,0x549,0x549,0x549,0xc12,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xc18,0x3fc,
-0xc28,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0xc20,0x852,0xc30,0x8c3,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0xc35,0xc3d,0x42c,0xc4d,0xc45,0x549,0x549,0xc55,0xc5d,0xc65,0x42c,0xc6a,0xc72,0xc7a,0x3fc,0xc7d,
-0xc85,0xc8d,0x549,0xc95,0xca5,0xca8,0xc9d,0xcb0,0x59e,0xcb8,0xcbf,0x832,0x5dd,0xccf,0xcc7,0x3fc,
-0x549,0xcd7,0xcdf,0xce7,0x549,0xcef,0xcf7,0xcff,0xd07,0xd0f,0x3fc,0x3fc,0x3fc,0x3fc,0x549,0xd17,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xd1f,0xd26,0x815,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,
-0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0x549,0x549,0x549,0xd3e,0x549,0xc13,0xd45,0xd4a,
-0x549,0x549,0x549,0xd52,0x549,0x549,0xd56,0x3fc,0xd6e,0xd5e,0xd66,0x549,0x549,0xd76,0xd7e,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xd83,0x866,0x549,0xd8b,0x549,0xd91,0xd95,
-0xd9d,0xda5,0xdac,0xdb4,0x549,0x549,0x549,0xdba,0xdd2,0x3ec,0xdda,0xde2,0xde7,0xdef,0xdc2,0xdca,
-0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,
-0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,0xd2e,
-0xff0,0xff0,0x1030,0x1070,0x10b0,0x10e8,0x1128,0x1168,0x11a0,0x11e0,0x120c,0x124c,0x128c,0x129c,0x12dc,0x1310,
-0x1350,0x1380,0x13c0,0x1400,0x1418,0x144c,0x1484,0x14c4,0x1504,0x1544,0x1578,0x15a4,0x15e4,0x161c,0x1638,0x1678,
-0xa80,0xac0,0xb00,0xa40,0xb40,0xa40,0xb80,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbc0,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xc00,0xa40,0xa40,0xa40,0xc40,0xa40,0xa40,0xc80,0xcc0,0xa40,
-0xd00,0xd37,0x1db,0x1db,0xd5b,0xd8f,0x1db,0xdb7,0x1db,0x1db,0x1db,0x1db,0xde4,0x1db,0x1db,0x1db,
-0x1db,0x1db,0x1db,0x1db,0xdf8,0x1db,0xe30,0xe70,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xeb0,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xef0,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0xf30,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0xf30,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0xdf7,0xdfe,0xe06,0x3fc,0x549,0x549,0x549,0x535,0xe16,0xe0e,0xe2d,0xe1e,0xe25,0x3fc,0xe35,0xe39,
-0x3fc,0x3fc,0x3fc,0x3fc,0x832,0x549,0xe41,0x3fc,0xdef,0xe49,0xe51,0x3fc,0xe59,0x549,0xe61,0x3fc,
-0x4d4,0x4de,0xe69,0x549,0xe6d,0xe75,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0xe85,0xe7d,0xe88,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0xe90,0xe98,0x3fc,0x3fc,0x549,0xea0,0x3fc,0x3fc,
-0xeb0,0xeb7,0xea8,0xebf,0x3fc,0x3fc,0x3fc,0x3fc,0x549,0xec7,0xecf,0xed7,0x3fc,0x3fc,0x3fc,0x3fc,
-0x549,0x549,0xedf,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0xee7,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0xef7,0x57f,0xeff,0xeef,0x8a5,0xf07,0xf0f,0xf15,0xf2d,0xf1d,0xf25,0x3fc,0x8a5,0xf3d,0xf35,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x549,0xf45,0xe75,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xf4d,0x3fc,0x3fc,0x3fc,0x3fc,
-0xf5d,0xf65,0xf6d,0xf55,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0xf4d,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0xf75,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x549,0x549,0xf7a,0xf7f,0xf87,0x3fc,0x3fc,0x3fc,
-0xf8f,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0xad7,0x852,0xf97,0x852,0xf9e,0xfa6,0xfac,0xfb0,0x3fc,
-0x852,0x852,0xfb8,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x852,0x852,0xfc0,0xfc8,0x3fc,0x3fc,0x3fc,0x3fc,
-0xfd8,0xfdf,0xfe4,0xfea,0xff2,0xffa,0x1002,0xfdc,0x100a,0x1012,0x101a,0x101f,0xff1,0xfd8,0xfdf,0xfdb,
-0xfea,0x1027,0xfd9,0x102a,0xfdc,0x1032,0x103a,0x1042,0x1049,0x1035,0x103d,0x1045,0x104c,0x1038,0x1054,0xfd0,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x1064,0x106c,0x1074,0x107c,0x1084,0x108c,0x3fc,0x105c,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x852,0x1094,0x852,0x852,0xacf,0x1099,0x10a1,0x3fc,0x10a9,0x10ae,0x852,0x1094,0x10b2,0x3fc,0x3fc,0x10b9,
-0x10c1,0x10b2,0x10c7,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x852,0x10cf,0x852,0x10d5,0xacf,0x852,0x10dd,0x10e5,
-0x852,0xb1e,0x10ed,0x852,0x852,0x852,0x852,0x10ef,0x852,0xfb0,0xad3,0x10f7,0x3fc,0x3fc,0x3fc,0x10f9,
-0x852,0x852,0x1101,0x3fc,0x852,0x852,0x1109,0x3fc,0x852,0x852,0x852,0xacf,0x3fc,0x3fc,0x3fc,0x3fc,
-0x1111,0x549,0x549,0x1118,0x549,0x549,0x549,0x1120,0x549,0x1128,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0xbb9,0x549,0x549,0x1130,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x1138,0x1140,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xbf8,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x1147,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x114e,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x1155,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xab0,0x3fc,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x7a7,0x549,0x549,0x549,0x549,0x549,0x549,
-0xe6d,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x549,0x549,0x549,0x549,0x1159,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0xe6d,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x1169,0x1161,0x1161,0x1161,0x3fc,0x3fc,0x3fc,0x3fc,0x4a3,0x4a3,0x4a3,0x4a3,0x4a3,0x4a3,0x4a3,0x1171,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,
-0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0xd36,0x1179,
-0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,
-0x17,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x14,0x17,0x15,0x1a,0x16,
-0x1a,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0xf,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xc,0x17,0x19,0x19,0x19,0x19,0x1b,0x17,0x1a,0x1b,5,0x1c,0x18,0x10,0x1b,0x1a,
-0x1b,0x18,0x34b,0x38b,0x1a,2,0x17,0x17,0x1a,0x30b,5,0x1d,0x34cb,0x344b,0x3ccb,0x17,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0x18,1,1,1,1,1,1,1,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,2,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,
-2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,1,2,1,2,1,2,2,2,1,1,2,1,2,1,1,
-2,1,1,1,2,2,1,1,1,1,2,1,1,2,1,1,
-1,2,2,2,1,1,2,1,1,2,1,2,1,2,1,1,
-2,1,2,2,1,2,1,1,2,1,1,1,2,1,2,1,
-1,2,2,5,1,2,2,2,5,5,5,5,1,3,2,1,
-3,2,1,3,2,1,2,1,2,1,2,1,2,1,2,1,
-2,1,2,1,2,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,2,1,3,2,1,2,1,1,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,2,
-2,1,2,1,1,1,1,2,1,2,1,2,1,2,1,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,
-0x1a,0x1a,4,4,4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,
-4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,4,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,1,2,1,2,
-4,0x1a,1,2,0,0,4,2,2,2,0x17,0,0,0,0,0,
-0x1a,0x1a,1,0x17,1,1,1,0,1,0,1,1,2,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,
-2,2,1,1,1,2,2,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-2,2,2,2,1,2,0x18,1,2,1,1,2,2,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,0x1b,6,6,6,6,6,7,7,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0,0,4,0x17,0x17,0x17,0x17,0x17,0x17,0,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,0,0x17,0x13,0,
-0,0,0,0x19,0,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,0x13,6,0x17,6,6,0x17,6,6,0x17,6,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,0,5,5,5,0x17,0x17,0,0,0,0,0,0,0,
-0,0,0,0,0x10,0x10,0x10,0x10,0x10,0,0x18,0x18,0x18,0x17,0x17,0x19,
-0x17,0x17,0x1b,0x1b,6,6,6,6,6,6,6,6,6,6,6,0x17,
-0,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
-0x17,0x17,5,5,6,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x17,5,6,6,6,6,6,6,
-6,0x10,0x1b,6,6,6,6,6,6,4,4,6,6,0x1b,6,6,
-6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
-5,0x1b,0x1b,5,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0,0x10,5,6,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,0,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-6,6,6,6,6,6,6,6,6,5,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,6,6,6,6,6,6,6,6,6,4,4,0x1b,0x17,
-0x17,0x17,4,0,0,0,0,0,6,6,6,6,4,6,6,6,
-4,6,6,6,6,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-6,6,4,6,6,6,6,6,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,6,6,6,0,0,0x17,0,5,0,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,0,5,5,6,6,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x17,4,5,5,5,5,5,5,0,5,5,5,
-5,5,5,5,6,6,6,8,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,8,6,5,8,8,8,6,6,6,
-6,6,6,6,6,8,8,8,8,6,8,8,5,6,6,6,
-6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0x19,0x19,
-0x37cb,0x35cb,0x3fcb,0x34cb,0x3ccb,0x94b,0x1b,0x19,0,0,0,0,0,6,8,8,
-0,5,5,5,5,5,5,5,5,0,0,5,5,0,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,0,5,0,0,0,5,5,5,5,0,0,
-6,5,8,8,8,6,6,6,6,0,0,8,8,0,0,8,
-8,6,5,0,0,0,0,0,0,0,0,8,0,0,0,0,
-5,5,0,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,6,6,5,5,5,6,0,0,0,0,0,0,
-0,0,0,0,0,6,6,8,0,5,5,5,5,5,5,0,
-0,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,
-0,5,5,0,5,5,0,0,6,0,8,8,8,6,6,0,
-0,0,0,6,6,0,0,6,6,6,0,0,0,6,0,0,
-0,0,0,0,0,5,5,5,5,0,5,0,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x19,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,8,
-0,5,5,5,5,5,5,5,5,5,0,5,5,5,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0,
-6,5,8,8,8,6,6,6,6,6,0,6,6,8,0,8,
-8,6,0,0,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x1b,5,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0,
-6,5,8,6,8,6,6,6,6,0,0,8,8,0,0,8,
-8,6,0,0,0,0,0,0,0,0,6,8,0,0,0,0,
-5,5,0,5,0,0,6,5,0,5,5,5,5,5,5,0,
-0,0,5,5,5,0,5,5,5,5,0,0,0,5,5,0,
-5,0,5,5,0,0,0,5,5,0,0,0,5,5,5,0,
-0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,8,8,6,8,8,0,0,0,8,8,8,0,8,8,
-8,6,0,0,5,0,0,0,0,0,0,8,0,0,0,0,
-0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0x7cb,0x1e4b,0x784b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,
-5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0,0,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x58b,0x5cb,0x60b,0x1b,
-0,8,8,8,0,5,5,5,5,5,5,5,5,0,5,5,
-5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,5,5,5,5,5,5,5,5,5,5,0,5,5,5,
-5,5,0,0,0,5,6,6,6,8,8,8,8,0,6,6,
-6,0,6,6,6,6,0,0,0,0,0,0,0,6,6,0,
-5,5,0,0,0,0,0,0,5,5,6,6,0,0,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,5,5,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,8,8,0,5,5,5,
-5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
-5,5,5,5,0,5,5,5,5,5,0,0,6,5,8,6,
-8,8,8,8,8,0,6,8,8,0,8,8,6,6,0,0,
-0,0,0,0,0,8,8,0,0,0,0,0,0,0,5,0,
-5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0,0,0,0x1b,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,5,8,8,8,6,6,6,
-6,0,8,8,8,0,8,8,8,6,5,0,0,0,0,0,
-0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,8,8,0x17,0,0,0,0,0,0,0,
-0,0,0,0,0,0,8,8,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,5,5,5,5,5,5,5,5,5,0,5,0,0,
-5,5,5,5,5,5,5,0,0,0,6,0,0,0,0,8,
-8,8,6,6,6,0,6,0,8,8,8,8,8,8,8,8,
-0,5,5,0,5,0,0,5,5,0,5,0,0,5,0,0,
-0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,
-6,6,6,6,6,6,6,0,0,0,0,0x19,5,5,5,5,
-5,5,4,6,6,6,6,6,6,6,6,0x17,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0,0,0,0,5,5,5,
-0,5,0,5,0,0,5,5,0,5,5,5,5,6,5,5,
-6,6,6,6,6,6,0,6,6,5,0,0,5,5,5,5,
-5,0,4,0,6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,
-0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b,
-0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5,
-5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,
-6,6,6,6,6,0x17,6,6,5,5,5,5,5,6,6,6,
-6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17,
-0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,8,8,6,6,6,6,8,6,6,
-6,6,6,6,8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,
-5,5,8,8,6,6,5,5,5,5,6,6,6,5,8,8,
-8,5,5,8,8,8,8,8,8,8,5,5,5,6,6,6,
-6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,
-8,6,6,8,8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x17,4,5,5,5,1,1,1,1,
-1,1,0,1,0,0,0,0,0,1,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,0,0,5,5,5,5,5,5,5,0,5,0,5,5,
-5,5,0,0,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,
-0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0,0,0,0,0x13,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0xc,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0x14,0x15,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca,
-0xa0a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,6,6,6,0x17,0x17,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,8,6,6,6,6,6,6,6,8,8,
-8,8,8,8,8,8,6,8,8,6,6,6,6,6,6,6,
-6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,6,5,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0xc,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,0,0,0,0,0,0,6,6,6,8,8,8,8,6,
-6,8,8,8,0,0,0,0,8,8,6,8,8,8,8,8,
-8,6,6,6,0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,8,8,8,8,8,8,8,8,
-8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,
-8,8,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-6,8,8,8,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,4,
-0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,8,6,8,
-6,6,6,6,6,6,6,0,6,8,6,8,8,6,6,6,
-6,6,6,6,6,8,8,8,8,8,8,6,6,6,6,6,
-6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,6,6,6,6,8,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,6,8,6,6,6,6,6,8,
-6,8,8,8,8,8,6,8,8,5,5,5,5,5,5,5,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
-0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8,6,6,8,6,
-8,8,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
-5,5,5,5,6,6,8,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,8,6,6,8,8,8,6,8,6,
-6,6,8,8,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,5,5,5,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,
-8,8,8,8,8,8,8,8,6,6,6,6,6,6,6,6,
-8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,4,4,4,4,4,4,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,6,6,6,0x17,
-6,6,6,6,6,6,6,6,6,6,6,6,6,8,6,6,
-6,6,6,6,6,5,5,5,5,6,5,5,5,5,8,8,
-6,5,5,0,0,0,0,0,0,0,0,0,2,2,2,2,
-2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,
-2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,4,4,4,4,4,6,6,6,6,
-6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,6,6,6,6,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,
-2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a,0,0,2,2,
-2,0,2,2,1,1,1,1,3,0x1a,0x1a,0,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,0,0,1,1,1,1,1,1,0,0,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,0,0,1,1,1,1,1,1,0,0,2,2,2,2,
-2,2,2,2,0,1,0,1,0,1,0,1,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,
-2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,
-2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,
-2,0,2,2,1,1,1,1,3,0x1a,2,0x1a,0x1a,0x1a,2,2,
-2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a,2,2,2,2,
-0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17,
-0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,
-0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,
-0x10,0,0,0,0,0,0x10,0x10,0x10,0x10,0x10,0x10,0x2cb,4,0,0,
-0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4,0xc,0xc,0xc,0xc,
-0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,
-0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b,
-0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0,4,4,4,4,
-4,4,4,4,4,4,4,4,4,0,0,0,0x19,0x19,0x19,0x19,
-0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
-0x19,0x19,0x19,0x19,0x19,0x19,0x19,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,
-6,6,6,6,6,7,7,7,7,6,7,7,7,6,6,6,
-6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,
-1,0x1b,1,1,1,1,0x1b,2,1,1,1,1,2,5,5,5,
-5,2,0x1b,0x1b,2,2,1,1,0x18,0x18,0x18,0x18,0x18,1,2,2,
-2,2,0x1b,0x18,0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,
-0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,
-0x1b,0x1b,2,1,1,1,2,2,1,1,1,2,0x1b,1,0x1b,0x1b,
-0x18,1,1,1,1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,
-0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,
-0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,
-0x78ca,0x54b,0,0,0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b,
-0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,
-0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,
-0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
-0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b,
-0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
-0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,
-0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,
-0x18,0x18,0x18,0x18,0x18,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,1,
-2,1,2,1,2,1,1,1,1,2,1,2,2,1,2,2,
-2,2,2,2,4,4,1,1,1,2,1,2,2,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,1,2,1,2,6,6,6,1,2,0,0,0,0,
-0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17,2,2,2,2,2,2,0,2,
-0,0,0,0,0,2,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,4,
-0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,
-0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,
-0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,
-6,6,8,8,0x13,4,4,4,4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,
-5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17,0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,
-0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
-0x13,0x14,0x15,0x15,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a,
-0x1a,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,
-4,4,4,5,0,0,0,0,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0x1b,0x1b,0x58b,0x5cb,
-0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,
-0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,
-0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b,0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb,0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,
-5,5,5,5,5,0x685,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x705,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x585,5,5,0x705,
-5,5,5,0x7885,5,0x605,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x785,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x5c5,5,5,5,5,5,5,5,0x685,5,0x645,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7985,
-0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7845,
-5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x1e45,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x7985,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x7a85,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,0x745,
-5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x7c5,5,0x7845,0xa45,0xcc5,5,5,5,5,5,5,
-0xf45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x605,0x605,0x605,0x605,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5,
-5,0x585,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x585,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,0xa45,
-5,5,5,5,5,5,5,5,5,5,5,5,0x585,0x5c5,0x605,5,
-0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x745,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x705,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x785,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x1e45,5,5,5,5,5,5,5,0x645,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x7885,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,0x5c5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x7845,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x6c5,5,5,5,5,5,0x1e45,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x545,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-4,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,0,0,0,0,
-0,0,0,6,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,5,6,7,7,7,0x17,6,6,6,6,6,6,6,6,
-6,6,0x17,4,5,5,5,5,5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,
-0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,
-0,0,0,0,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,
-4,4,4,4,0x1a,0x1a,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,2,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,4,2,2,2,2,2,2,2,
-2,1,2,1,2,1,1,2,1,2,1,2,1,2,1,2,
-4,0x1a,0x1a,1,2,1,2,0,1,2,1,2,0,0,0,0,
-0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,
-1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,2,5,
-5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,6,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,8,8,6,6,8,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b,0x19,0x1b,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17,0,0,0,0,
-0,0,0,0,8,8,8,8,6,0,0,0,0,0,0,0,
-0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,8,8,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,5,5,5,5,5,5,0x17,0x17,0x17,5,0,0,0,0,
-5,5,5,5,5,5,6,6,6,6,6,6,6,6,0x17,0x17,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,6,6,6,6,6,6,6,6,6,6,6,8,8,
-0,0,0,0,0,0,0,0,0,0,0,0x17,8,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,4,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-8,8,6,6,6,6,8,8,6,8,8,8,5,5,5,5,
-5,5,5,5,5,6,6,6,6,6,6,8,8,6,6,8,
-8,6,6,0,0,0,0,0,0,0,0,0,5,5,5,6,
-5,5,5,5,5,5,5,5,6,8,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0x17,0x17,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,
-5,5,5,0x1b,0x1b,0x1b,5,8,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,
-6,5,5,6,6,5,5,5,5,5,6,6,5,6,5,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,5,5,4,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,8,6,6,8,8,0x17,0x17,5,4,
-4,8,6,0,0,0,0,0,0,0,0,0,0,5,5,5,
-5,5,5,0,0,5,5,5,5,5,5,0,0,5,5,5,
-5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,0,5,5,5,5,5,5,5,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,8,
-8,6,8,8,6,8,8,0x17,8,6,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,5,5,5,5,5,5,5,5,
-5,5,5,0x605,5,5,5,5,5,5,5,0x7c5,5,5,5,5,
-0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x6c5,5,0x6c5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x7c5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,0x18,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-5,5,5,5,5,0,5,0,5,5,0,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,0,
-0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,
-0,0,0,0,0,5,6,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x14,0x15,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-0x19,0x1b,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0,
-0,0,0,0,6,6,6,6,6,6,6,0,0,0,0,0,
-0,0,0,0,0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,
-0x17,0x17,0x17,0,0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,
-0x17,0x17,0x18,0x13,0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,
-5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0x10,0,0,5,5,5,5,5,5,
-0,0,5,5,5,5,5,5,0,0,5,5,5,5,5,5,
-0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0,
-0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0,0x10,0x10,0x10,0x1b,0x1b,0,0,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,
-0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,0x14,0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,
-5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
-5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,
-0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0,0,0,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0,0,0,0,0x58b,
-0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,
-0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca,
-0x11ca,0x11ca,0x1e4a,0x880a,0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b,
-0x3ccb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,
-0x980a,0x784a,0x984a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,
-0x5ca,0x5ca,0x5ca,0x68a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,6,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x1bca,5,5,5,5,5,5,5,5,0xb80a,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0x17,5,5,5,5,0,0,0,0,5,5,5,5,
-5,5,5,5,0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,0,0,0,0,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,5,5,0,0,0,
-5,0,0,5,5,5,5,5,5,5,0,0,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0x17,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,5,5,
-0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b,0,0,0,0,0,0,0,0,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,
-5,6,6,6,0,6,6,0,0,0,0,0,6,6,6,6,
-5,5,5,5,0,5,5,5,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,0,0,0,6,6,6,0,0,0,0,6,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,
-0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,
-0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0,0x144b,0x16cb,0x194b,0x1bcb,
-0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,8,6,8,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
-6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0x30b,0x34b,
-0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,
-6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17,0x17,0x17,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,5,5,5,5,5,5,5,6,6,6,6,6,
-8,6,6,6,6,6,6,6,6,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,6,6,6,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,8,5,5,5,5,0x17,0x17,0x17,0x17,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,6,
-6,6,6,8,5,5,5,5,5,5,5,5,5,5,5,6,
-8,6,8,8,6,6,6,6,6,6,8,6,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x34ca,0x354a,0x34ca,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
-0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,
-0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,
-0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,
-0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,
-0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,
-0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x2c0a,0x2c0a,0x58a,0x5ca,0x348a,0x388a,
-0x454a,0x348a,0x388a,0x35ca,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,0,0,0,0,5,8,8,8,8,8,8,8,
-8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,4,
-4,4,4,4,4,4,4,4,4,4,4,4,5,5,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,
-6,6,0x1b,0x1b,0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,6,6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,
-6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
-0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,
-0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
-2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,0,1,1,0,0,1,0,0,1,1,0,
-0,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,
-2,2,0,2,0,2,2,2,2,2,2,2,0,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,2,1,1,0,1,
-1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,
-1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,
-0,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0x18,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,0x18,2,2,2,2,2,2,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x18,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-2,2,2,0x18,2,2,2,2,2,2,1,2,0,0,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x18,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,5,5,0,5,0,0,5,0,5,5,5,5,5,5,5,
-5,5,5,0,5,5,5,5,0,5,0,5,0,0,0,0,
-0,0,5,0,0,0,0,5,0,5,0,5,0,5,5,5,
-0,5,5,0,5,0,0,5,0,5,0,5,0,5,0,5,
-0,5,5,0,5,0,0,5,5,5,5,0,5,5,5,5,
-5,5,5,0,5,5,5,5,0,5,5,5,5,0,5,0,
-5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
-0,5,5,5,0,5,5,5,5,5,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,0x705,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0xcc5,5,5,5,5,5,5,5,5,0xf45,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0xf45,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x785,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0,0x10,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0,0,0,0,0,0
-};
-
-static const UTrie2 propsTrie={
-    propsTrie_index,
-    propsTrie_index+3952,
-    NULL,
-    3952,
-    13976,
-    0xa40,
-    0xff0,
-    0x0,
-    0x0,
-    0x110000,
-    0x4604,
-    NULL, 0, FALSE, FALSE, 0, NULL
-};
-
-static const uint16_t propsVectorsTrie_index[23412]={
-0x408,0x410,0x418,0x420,0x438,0x440,0x448,0x450,0x458,0x460,0x468,0x470,0x478,0x480,0x488,0x490,
-0x497,0x49f,0x4a7,0x4af,0x4b2,0x4ba,0x4c2,0x4ca,0x4d2,0x4da,0x4e2,0x4ea,0x4f2,0x4fa,0x502,0x50a,
-0x512,0x51a,0x521,0x529,0x531,0x539,0x541,0x549,0x551,0x559,0x55e,0x566,0x56d,0x575,0x57d,0x585,
-0x58d,0x595,0x59d,0x5a5,0x5ac,0x5b4,0x5bc,0x5c4,0x5cc,0x5d4,0x5dc,0x5e4,0x5ec,0x5f4,0x5fc,0x604,
-0x15ad,0xc5f,0xd47,0x428,0x428,0xdfb,0xdff,0xe06,0xeee,0xefe,0xef6,0x674,0x67c,0x682,0x68a,0x692,
-0x69a,0x6a0,0x6a8,0x6b0,0x6b8,0x6be,0x6c6,0x6ce,0x6d6,0x6dc,0x6e4,0x6ec,0x6f4,0x6fc,0x704,0x70b,
-0x713,0x719,0x721,0x729,0x731,0x737,0x73f,0x747,0x74f,0x755,0x75d,0x765,0x76d,0x774,0x77c,0x784,
-0x78c,0x790,0x798,0x79f,0x7a7,0x7af,0x7b7,0x7bf,0x11f0,0x11f8,0x7c7,0x7cf,0x7d7,0x7df,0x7e7,0x7ee,
-0x1256,0x1246,0x124e,0x150a,0x1512,0xf0e,0x7f6,0xf06,0x113d,0x113d,0x113f,0xf22,0xf23,0xf16,0xf18,0xf1a,
-0x125e,0x1260,0x7fe,0x1260,0x806,0x80b,0x813,0x1265,0x819,0x1260,0x81f,0x827,0xb28,0x126d,0x126d,0x82f,
-0x127d,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,
-0x127e,0x127e,0x127e,0x1275,0x837,0x1286,0x1286,0x83f,0xa4f,0xa57,0xa5f,0xa67,0x1296,0x128e,0x847,0x84f,
-0x857,0x129e,0x12a6,0x85f,0x129e,0x867,0x15b5,0xc67,0xa6f,0xa77,0xa7f,0xa84,0x1485,0xb5b,0xb63,0x13ed,
-0xaf8,0x15bd,0xc6f,0xc77,0xc7f,0x60c,0x428,0x428,0x14d5,0x14da,0xb9a,0xba2,0x152e,0x1536,0x164e,0xd4f,
-0x153e,0xbeb,0xbf3,0x1546,0x428,0x428,0xe8e,0xc87,0x140d,0x13f5,0x1405,0x13fd,0x149d,0x1495,0x145d,0xb08,
-0xf2b,0xf2b,0xf2b,0xf2b,0xf2e,0xf2b,0xf2b,0xf36,0x86f,0xf3e,0x873,0x87b,0xf3e,0x883,0x88b,0x893,
-0xf4e,0xf46,0xf56,0x89b,0x8a3,0x8ab,0x8b2,0x8ba,0xf5e,0xf66,0xf6e,0xf76,0x8c2,0xf7e,0xf85,0xf8d,
-0xf95,0xf9d,0xfa5,0xfad,0xfb5,0xfbc,0xfc4,0xfcc,0xfd4,0xfdc,0xfdf,0xfe1,0x12ae,0x1383,0x1389,0x8ca,
-0xfe9,0x8d2,0x8da,0x10f2,0x10f7,0x10fa,0x1100,0xff1,0x1108,0x1108,0x1001,0xff9,0x1009,0x1011,0x1019,0x1021,
-0x1029,0x1031,0x1039,0x1041,0x1391,0x13e5,0x151a,0x1636,0x8e2,0x104f,0x1057,0x105f,0x1049,0x1067,0x1399,0x13a0,
-0x12b6,0x12b6,0x12b6,0x12b6,0x12b6,0x12b6,0x12b6,0x12b6,0x13a8,0x13a8,0x13a8,0x13a8,0x13b0,0x13b7,0x13b9,0x13c0,
-0x13c8,0x13cc,0x13cc,0x13cf,0x13cc,0x13cc,0x13d5,0x13cc,0x1415,0x14cd,0xa8c,0xa93,0xa93,0xa93,0xa93,0xa93,
-0x1475,0xb38,0xb3c,0x14e2,0x1465,0x1465,0x1465,0xb10,0x146d,0xb30,0x14b5,0xb8a,0xb18,0xb20,0xb20,0x154e,
-0x14a5,0xb73,0xb7a,0xb7a,0x8ea,0x12be,0x12be,0x8f2,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x8fa,0x610,
-0x1125,0x1147,0x902,0x114f,0x90a,0x1157,0x115f,0x1167,0x912,0x917,0x116f,0x1176,0x91c,0x924,0x14c5,0xb00,
-0x92c,0x11cd,0x11d4,0x117e,0x11dc,0x11e0,0x1186,0x934,0x119f,0x119f,0x11a1,0x118e,0x1196,0x1196,0x1197,0x11e8,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,
-0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0x12ce,0xea7,0x141d,0x141d,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11b0,0xeaf,0xeb3,
-0x12d6,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,
-0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,0x12dc,
-0x12dc,0x12dc,0x12dc,0x12dc,0x93c,0x12e4,0x944,0x15c5,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,
-0x1556,0xbfb,0x156a,0x1562,0xc03,0x15cd,0x15cd,0xc8f,0x147d,0x14ea,0x1522,0x1526,0xbaa,0xbb2,0xbb5,0xbb7,
-0x14ad,0xb82,0x14f2,0xbbf,0x1572,0x1575,0xc0b,0xc97,0x1585,0x157d,0xc13,0xc9f,0x15d5,0x15d9,0xca7,0x428,
-0x158d,0xc1b,0xc23,0xcaf,0x15e9,0x15e1,0xcb7,0xe51,0xd57,0x618,0x428,0x428,0x428,0x428,0x15f1,0xcbf,
-0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,
-0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,
-0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,
-0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,
-0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,
-0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,
-0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,
-0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,
-0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,
-0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,
-0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,
-0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,
-0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,
-0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,
-0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,
-0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,
-0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,
-0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,
-0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,
-0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,
-0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,
-0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x123e,0x1238,0x1239,0x123a,0x123b,0x123c,0x123d,0x94c,0xcc7,0xcca,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,
-0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,0x1210,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
-0x11bd,0x11c5,0x13dd,0xebb,0x14bd,0x14bd,0xebf,0xec6,0x954,0x95c,0x964,0x1087,0x108e,0x1096,0x96c,0x109e,
-0x10cf,0x10cf,0x1077,0x107f,0x10a6,0x10c6,0x10c7,0x10d7,0x10ae,0x106f,0x974,0x10b6,0x97c,0x10be,0x984,0x988,
-0xb92,0x990,0x998,0x9a0,0x10df,0x10e5,0x10ea,0x9a8,0x9b8,0x112d,0x1135,0x1118,0x111d,0x9c0,0x9c8,0x9b0,
-0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,
-0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1208,0x1208,0x1208,0x1208,
-0x10a0,0x10a0,0x10e0,0x1120,0x1160,0x11a0,0x11e0,0x1220,0x125c,0x129c,0x12c8,0x1308,0x1348,0x1388,0x13c8,0x1408,
-0x1448,0x1484,0x14c4,0x1504,0x1544,0x1578,0x15b4,0x15f4,0x1634,0x1674,0x16b0,0x16f0,0x1730,0x1770,0x17b0,0x17f0,
-0xa80,0xac0,0xb00,0xa40,0xc8c,0xa40,0xb40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xccc,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd0c,0xa40,0xa40,0xa40,0xb80,0xa40,0xa40,0xd1c,0xbc0,0xbfc,
-0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,0xf9d,
-0xf9d,0xf9d,0xf9d,0xf9d,0xd5c,0xfdd,0xe5d,0xd9c,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xddd,
-0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,
-0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xe1d,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xc3c,0xc4c,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xbfc,
-0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,
-0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xf1d,0xe9d,
-0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,
-0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xedd,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0xa9b,0xaa2,0xaaa,0xab2,0x1425,0x1425,0x1425,0xaba,0xac2,0xac5,0x1455,0x144d,0xaf0,0xc2b,0xc2f,0xc33,
-0x428,0x428,0x428,0x428,0xc3b,0x1595,0xc43,0x428,0x9d0,0x9d8,0x620,0x428,0xacd,0x148d,0xb6b,0x428,
-0x12f9,0x12ec,0x12f1,0x142d,0xad5,0x628,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0xadd,0xae0,0xcd2,0x428,0x428,0x428,0x428,0x428,0xbc7,0xc4b,0x428,0x428,0x16b8,0xe59,0xe61,0xe61,
-0xb44,0xb4b,0xb53,0x15f9,0x428,0x428,0x428,0x428,0x1601,0xcda,0xce2,0xcea,0x428,0x428,0x428,0x428,
-0x1609,0x1609,0x630,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0xcf2,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x1656,0x1658,0xd5f,0xd66,0x1619,0x1611,0xcfa,0xe86,0x16b0,0xe49,0x638,0x428,0x16c8,0x16cc,0xe7e,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x16d4,0xe96,0x640,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,
-0x1621,0x1621,0x1623,0x1621,0x162b,0x1621,0x1621,0x1621,0x1621,0x1621,0x1621,0x162e,0x1621,0x1621,0x1621,0x1621,
-0x1621,0x648,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x1301,0x1301,0x1301,0x1301,0x1301,0x1301,0x1301,0x9e0,0x1311,0x9e8,0x1312,0x1309,0x131a,0x1320,0x9f0,0x9f8,
-0x1445,0x1445,0x650,0x428,0x428,0x428,0x428,0x428,0x1435,0x1435,0xae8,0xbe3,0x428,0x428,0x428,0x428,
-0x1351,0x1358,0xa00,0x135b,0xa08,0xa10,0xa18,0x1355,0xa20,0xa28,0xa30,0x135a,0x1362,0x1351,0x1358,0x1354,
-0x135b,0x1363,0x1352,0x1359,0x1355,0xa37,0x1328,0x1330,0x1337,0x133e,0x132b,0x1333,0x133a,0x1341,0xa3f,0x1349,
-0x159d,0xc53,0x15a5,0x15a5,0xc57,0xd7f,0xd87,0xd8f,0xd02,0xd08,0x163e,0xd10,0xd18,0xd1f,0xd1f,0xd26,
-0xd2e,0xd32,0xd3a,0xd3f,0xd3f,0xd3f,0xd3f,0xd3f,0x1680,0xd97,0x1680,0xd9d,0xda5,0x1668,0xdad,0xdb5,
-0x1680,0xdbd,0xdc5,0x1680,0x1680,0x1670,0x1680,0xdc7,0x1678,0xdcf,0xdd7,0xddd,0xddf,0xddf,0xddf,0xde1,
-0x1688,0x1690,0x658,0x428,0x1698,0x1698,0xde9,0xdeb,0x16a0,0x16a0,0x16a0,0xdf3,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x65c,0xa47,0x136b,0x136b,0x136b,
-0x664,0x664,0x664,0x664,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x66c,0x664,0x664,0x664,0x664,
-0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,
-0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,
-0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,
-0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x664,0x14fa,0x14fa,0x14fa,0x14fa,
-0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,
-0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0xbcf,0xbd3,0xbd3,0xbd3,0xbd3,0x1502,0x1502,0x1502,0xbdb,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x1660,0x1660,0x1660,0x1660,
-0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0x1660,0xd6e,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x16c0,0x16c0,0xe69,0xe6e,0xe76,0x428,0x428,0x428,0xd76,0xd77,0xd77,0xd77,
-0xd77,0xd77,0xd77,0xd77,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,
-0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0xe0e,0xe16,0xe1e,0xe26,
-0xe2e,0xe36,0xe3d,0xe41,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x428,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0xece,0xe9e,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0xee6,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0x137b,0x137b,0x137b,
-0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0x137b,0xed6,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9f,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,
-0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9e,0xe9f,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0xede,0x16a8,0x16a8,0x16a8,0x16a8,0x16a8,0x16a8,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1218,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1220,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,
-0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1228,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,
-0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1373,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,
-0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x407,0x407,0x407,
-0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f8,0x201,0x1fb,0x1fb,0x1fe,0x1f5,0x1f5,
-0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,
-0x6fc,0x6f6,0x6d8,0x6c0,0x6cc,0x6c9,0x6c0,0x6db,0x6c6,0x6d2,0x6c0,0x6ed,0x6e4,0x6d5,0x6f9,0x6cf,
-0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6e1,0x6de,0x6e7,0x6e7,0x6e7,0x6f6,
-0x6c0,0x708,0x708,0x708,0x708,0x708,0x708,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,
-0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x6c6,0x6cc,0x6d2,0x6f3,0x6ba,
-0x6f0,0x705,0x705,0x705,0x705,0x705,0x705,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,
-0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6c6,0x6ea,0x6c3,0x6e7,0x1f5,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x204,0x204,0x204,0x204,0x204,0x213,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,
-0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,
-0x207,0x56d,0x711,0x714,0x573,0x714,0x70e,0x567,0x55e,0x20d,0x57c,0x210,0x717,0x555,0x56a,0x70b,
-0x570,0x579,0x55b,0x55b,0x561,0x20a,0x567,0x564,0x55e,0x55b,0x57c,0x210,0x558,0x558,0x558,0x56d,
-0x219,0x219,0x219,0x219,0x219,0x219,0x585,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,
-0x585,0x219,0x219,0x219,0x219,0x219,0x219,0x576,0x585,0x219,0x219,0x219,0x219,0x219,0x585,0x57f,
-0x582,0x582,0x216,0x216,0x216,0x216,0x57f,0x216,0x582,0x582,0x582,0x216,0x582,0x582,0x216,0x216,
-0x57f,0x216,0x582,0x582,0x216,0x216,0x216,0x576,0x57f,0x582,0x582,0x216,0x582,0x216,0x57f,0x216,
-0x225,0x58b,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,
-0x222,0x588,0x225,0x58b,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x58b,0x225,0x21c,0x225,0x21c,
-0x225,0x21c,0x225,0x21c,0x225,0x21c,0x591,0x588,0x225,0x21c,0x225,0x58b,0x225,0x21c,0x225,0x21c,
-0x225,0x588,0x594,0x58e,0x225,0x21c,0x225,0x21c,0x588,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x594,
-0x58e,0x591,0x588,0x225,0x58b,0x225,0x21c,0x225,0x58b,0x597,0x591,0x588,0x225,0x58b,0x225,0x21c,
-0x225,0x21c,0x591,0x588,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,
-0x225,0x21c,0x225,0x21c,0x225,0x21c,0x591,0x588,0x225,0x21c,0x225,0x58b,0x225,0x21c,0x225,0x21c,
-0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x225,0x225,0x21c,0x225,0x21c,0x225,0x21c,0x21f,
-0x228,0x234,0x234,0x228,0x234,0x228,0x234,0x234,0x228,0x234,0x234,0x234,0x228,0x228,0x234,0x234,
-0x234,0x234,0x228,0x234,0x234,0x228,0x234,0x234,0x234,0x228,0x228,0x228,0x234,0x234,0x228,0x234,
-0x237,0x22b,0x234,0x228,0x234,0x228,0x234,0x234,0x228,0x234,0x228,0x228,0x234,0x228,0x234,0x237,
-0x22b,0x234,0x234,0x234,0x228,0x234,0x228,0x234,0x234,0x228,0x228,0x231,0x234,0x228,0x228,0x228,
-0x231,0x231,0x231,0x231,0x23a,0x23a,0x22e,0x23a,0x23a,0x22e,0x23a,0x23a,0x22e,0x237,0x59a,0x237,
-0x59a,0x237,0x59a,0x237,0x59a,0x237,0x59a,0x237,0x59a,0x237,0x59a,0x237,0x59a,0x228,0x237,0x22b,
-0x237,0x22b,0x237,0x22b,0x234,0x228,0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,
-0x22b,0x23a,0x23a,0x22e,0x237,0x22b,0x8bb,0x8bb,0x8be,0x8b8,0x237,0x22b,0x237,0x22b,0x237,0x22b,
-0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,0x237,0x22b,
-0x237,0x22b,0x237,0x22b,0x8be,0x8b8,0x8be,0x8b8,0x8bb,0x8b5,0x8be,0x8b8,0xa71,0xb67,0x8bb,0x8b5,
-0x8bb,0x8b5,0x8be,0x8b8,0x8be,0x8b8,0x8be,0x8b8,0x8be,0x8b8,0x8be,0x8b8,0x8be,0x8b8,0x8be,0x8b8,
-0xb67,0xb67,0xb67,0xc54,0xc54,0xc54,0xc57,0xc57,0xc54,0xc57,0xc57,0xc54,0xc54,0xc57,0xd92,0xd95,
-0xd95,0xd95,0xd95,0xd92,0xd95,0xd92,0xd95,0xd92,0xd95,0xd92,0xd95,0xd92,0x23d,0x59d,0x23d,0x23d,
-0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x59d,0x23d,0x23d,
-0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,
-0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x240,0x23d,0x23d,0x23d,
-0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,
-0x23d,0x8c1,0x8c1,0x8c1,0x8c1,0x8c1,0xb6a,0xb6a,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,
-0x255,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x249,0x249,0x243,0x243,0x5a3,0x243,0x24c,0x5a6,
-0x24f,0x5a6,0x5a6,0x5a6,0x24f,0x5a6,0x24c,0x24c,0x5a9,0x252,0x243,0x243,0x243,0x243,0x243,0x243,
-0x5a0,0x5a0,0x5a0,0x5a0,0x246,0x5a0,0x243,0x9f0,0x255,0x255,0x255,0x255,0x255,0x243,0x243,0x243,
-0x243,0x243,0x8ca,0x8ca,0x8c7,0x8c4,0x8c7,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,
-0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5af,0x5af,0x83d,0x5af,0x5af,0x840,0x9f3,0x9f3,
-0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0xb22,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,
-0xd62,0xd62,0xd62,0xd62,0xd65,0xc2d,0xc2d,0xc2d,0x5b2,0x5b2,0x9f6,0xb64,0xb64,0xb64,0xb64,0xb64,
-0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xe40,0xe3d,0xe40,0xe3d,0x261,0x26a,0xe40,0xe3d,
-6,6,0x270,0xd98,0xd98,0xd98,0x258,6,6,6,6,6,0x26d,0x25b,0x27f,0x25e,
-0x27f,0x27f,0x27f,6,0x27f,6,0x27f,0x27f,0x276,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,
-0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,6,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,
-0x5b8,0x5b8,0x27f,0x27f,0x276,0x276,0x276,0x276,0x276,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,
-0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x273,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,
-0x5b5,0x5b5,0x276,0x276,0x276,0x276,0x276,0xe40,0x282,0x282,0x285,0x27f,0x27f,0x282,0x279,0x8cd,
-0xa7a,0xa77,0x27c,0x8cd,0x27c,0x8cd,0x27c,0x8cd,0x27c,0x8cd,0x267,0x264,0x267,0x264,0x267,0x264,
-0x267,0x264,0x267,0x264,0x267,0x264,0x267,0x264,0x282,0x282,0x279,0x273,0xa2c,0xa29,0xa74,0xb73,
-0xb70,0xb76,0xb73,0xb70,0xc5a,0xc5d,0xc5d,0xc5d,0x8dc,0x5c4,0x294,0x297,0x294,0x294,0x294,0x297,
-0x294,0x294,0x294,0x294,0x297,0x8dc,0x297,0x294,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,
-0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,
-0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,
-0x5bb,0x5be,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,
-0x5bb,0x5bb,0x5bb,0x5bb,0x8d6,0x5be,0x28e,0x291,0x28e,0x28e,0x28e,0x291,0x28e,0x28e,0x28e,0x28e,
-0x291,0x8d6,0x291,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,
-0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x297,0x291,0x294,0x28e,0x294,0x28e,
-0x294,0x28e,0x294,0x28e,0x294,0x28e,0x28b,0x288,0x288,0x831,0x831,0xe43,0x8d0,0x8d0,0xa80,0xa7d,
-0x8d9,0x8d3,0x8d9,0x8d3,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,
-0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,
-0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,0x294,0x28e,
-0x294,0x28e,0x294,0x28e,0x294,0x297,0x291,0x294,0x28e,0xa80,0xa7d,0x294,0x28e,0xa80,0xa7d,0x294,
-0x28e,0xa80,0xa7d,0xd9b,0x297,0x291,0x297,0x291,0x294,0x28e,0x297,0x291,0x294,0x28e,0x297,0x291,
-0x297,0x291,0x297,0x291,0x294,0x28e,0x297,0x291,0x297,0x291,0x297,0x291,0x294,0x28e,0x297,0x291,
-0x8dc,0x8d6,0x297,0x291,0x297,0x291,0x297,0x291,0x297,0x291,0xc63,0xc60,0x297,0x291,0xd9e,0xd9b,
-0xd9e,0xd9b,0xd9e,0xd9b,0xae6,0xae3,0xae6,0xae3,0xae6,0xae3,0xae6,0xae3,0xae6,0xae3,0xae6,0xae3,
-0xae6,0xae3,0xae6,0xae3,0xdcb,0xdc8,0xdcb,0xdc8,0xec4,0xec1,0xec4,0xec1,0xec4,0xec1,0xec4,0xec1,
-0xec4,0xec1,0xec4,0xec1,0xec4,0xec1,0xec4,0xec1,0x101d,0x101a,0x11ca,0x11c7,0xba,0xba,0xba,0xba,
-0xba,0xba,0xba,0xba,9,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,
-0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,9,
-9,0x2a9,0x29a,0x29a,0x2ac,0x29d,0x2ac,0x29a,9,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a3,9,0x7bf,0x8df,9,
-9,9,9,0x124b,0xc,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,
-0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0xc66,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,
-0x84f,0x84f,0x84f,0x84f,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0xda1,0x2af,
-0x2af,0x2af,0x2bb,0x2af,0x2b2,0x2af,0x2af,0x2be,0x852,0xc69,0xc6c,0xc69,0xc,0xc,0xc,0xc,
-0xc,0xc,0xc,0xc,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,
-0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0xc,
-0xc,0xc,0xc,0xc,0x2c1,0x2c1,0x2c1,0x2b8,0x2b5,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
-0xc,0xc,0xc,0xc,0xb79,0xb79,0xb79,0xb79,0x124e,0xf,0xe4c,0xe4c,0xe4c,0xe49,0xe49,0xc75,
-0x7c5,0xb88,0xb85,0xb85,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xe46,0xe46,0xe46,0xe46,0xe46,0x7c2,
-0xf,0xf,0xc72,0x7c8,0x1191,0x2dc,0x2df,0x2df,0x2df,0x2df,0x2df,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0xe4f,
-0xe4f,0xe4f,0xe4f,0xe4f,0x7cb,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x837,
-0x837,0x837,0x837,0x837,0x837,0x837,0x837,0xa26,0xa26,0xa26,0xb7c,0xb82,0xb7f,0xc6f,0xc6f,0xc6f,
-0xc6f,0xc6f,0xc6f,0x118e,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x2d6,0x2d3,
-0x2d0,0x2cd,0xa83,0xa83,0x834,0x2dc,0x2dc,0x2e8,0x2dc,0x2e2,0x2e2,0x2e2,0x2e2,0x2dc,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x8e5,0x8e5,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x8e5,
-0x2df,0x2dc,0x2df,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x8e5,
-0x2dc,0x2dc,0x2dc,0x2df,0x2eb,0x2dc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c4,0x2cd,0x2ca,
-0x2ca,0x2c7,0x2c7,0x2c7,0x2c7,0x2e5,0x2e5,0x2c7,0x2c7,0x2cd,0x2ca,0x2ca,0x2ca,0x2c7,0xb8b,0xb8b,
-0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x8e5,0x8e5,0x8e5,0x8e2,0x8e2,0xb8b,
-0x8fd,0x8fd,0x8fd,0x8f7,0x8f7,0x8f7,0x8f7,0x8f7,0x8f7,0x8f7,0x8f7,0x8f4,0x8f7,0x8f4,0x12,0x8e8,
-0x8fa,0x8eb,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,
-0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0xb8e,0xb8e,0xb8e,
-0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x12,0x12,0xb8e,0xb8e,0xb8e,
-0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,
-0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xed6,0xed6,
-0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,
-0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,
-0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,
-0x903,0x903,0x903,0x903,0x903,0x903,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,
-0x900,0xa86,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,
-0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,
-0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xdda,0xdda,0xdda,0xdda,0xdda,
-0xdda,0xdda,0xdda,0xdda,0xde9,0xde9,0xddd,0xddd,0xde0,0xdef,0xdec,0x11a,0x11a,0x11a,0x11a,0x11a,
-0x1059,0x1059,0x1059,0x1059,0x1059,0x1059,0x1059,0x1068,0x106b,0x106b,0x106b,0x106b,0x1059,0x1059,0x15f,0x15f,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa02,0xa02,0xa05,0xa05,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0x78,0x78,0x78,0x78,
-0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1a4,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1a4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xab,0xab,0xab,0xab,0xab,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xde,0xde,0xde,0xde,0xde,0xde,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x12ae,0x12ba,0x12ba,0x12ba,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x195,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xccc,0xccc,0xcc9,0xcc9,0xcc9,0xccc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x122a,0x1b6,0x1b6,0x1b6,0x1b6,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x84c,0x84c,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-0x300,0x300,0x2ee,0x2ee,0x7d1,0x7d1,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2f7,0xe55,0xe52,0x119a,0x119a,0x119a,0x119a,0x119a,0x18,0xfed,0xfed,0xda4,0xda4,0xc78,0xda4,0xda4,
-0x1b,0x306,0x318,0x318,0x1b,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x1b,0x1b,0x31e,
-0x31e,0x1b,0x1b,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,
-0x31e,0x1b,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x1b,0x31e,0x1b,0x1b,0x1b,0x31e,0x31e,
-0x31e,0x31e,0x1b,0x1b,0x309,0xb94,0x306,0x318,0x318,0x306,0x306,0x306,0x306,0x1b,0x1b,0x318,
-0x318,0x1b,0x1b,0x31b,0x31b,0x30c,0xc7b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x306,
-0x1b,0x1b,0x1b,0x1b,0x321,0x321,0x1b,0x321,0x31e,0x31e,0x306,0x306,0x1b,0x1b,0x315,0x315,
-0x315,0x315,0x315,0x315,0x315,0x315,0x315,0x315,0x31e,0x31e,0x312,0x312,0x30f,0x30f,0x30f,0x30f,
-0x30f,0x312,0x30f,0xff0,0x1b,0x1b,0x1b,0x1b,0x1e,0xb97,0x324,0xb9a,0x1e,0x333,0x333,0x333,
-0x333,0x333,0x333,0x1e,0x1e,0x1e,0x1e,0x333,0x333,0x1e,0x1e,0x333,0x333,0x333,0x333,0x333,
-0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x1e,0x333,0x333,0x333,0x333,0x333,0x333,
-0x333,0x1e,0x333,0x336,0x1e,0x333,0x336,0x1e,0x333,0x333,0x1e,0x1e,0x327,0x1e,0x330,0x330,
-0x330,0x324,0x324,0x1e,0x1e,0x1e,0x1e,0x324,0x324,0x1e,0x1e,0x324,0x324,0x32a,0x1e,0x1e,
-0x1e,0xe58,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x336,0x336,0x336,0x333,0x1e,0x336,0x1e,
-0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,
-0x324,0x324,0x333,0x333,0x333,0xe58,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
-0x21,0x339,0x339,0x345,0x21,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0xba3,0x348,0x21,0x348,
-0x348,0x348,0x21,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,
-0x348,0x21,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x21,0x348,0x348,0x21,0x348,0x348,0x348,
-0x348,0x348,0x21,0x21,0x33c,0x348,0x345,0x345,0x345,0x339,0x339,0x339,0x339,0x339,0x21,0x339,
-0x339,0x345,0x21,0x345,0x345,0x33f,0x21,0x21,0x348,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x348,0xba3,0xb9d,0xb9d,0x21,0x21,0x342,0x342,
-0x342,0x342,0x342,0x342,0x342,0x342,0x342,0x342,0x1251,0xba0,0x21,0x21,0x21,0x21,0x21,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x24,0x34b,0x35a,0x35a,0x24,0x360,0x360,0x360,
-0x360,0x360,0x360,0x360,0x360,0x24,0x24,0x360,0x360,0x24,0x24,0x360,0x360,0x360,0x360,0x360,
-0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x24,0x360,0x360,0x360,0x360,0x360,0x360,
-0x360,0x24,0x360,0x360,0x24,0xba6,0x360,0x360,0x360,0x360,0x24,0x24,0x34e,0x360,0x34b,0x34b,
-0x35a,0x34b,0x34b,0x34b,0xe5b,0x24,0x24,0x35a,0x35d,0x24,0x24,0x35d,0x35d,0x351,0x24,0x24,
-0x24,0x24,0x24,0x24,0x24,0x24,0x34b,0x34b,0x24,0x24,0x24,0x24,0x363,0x363,0x24,0x360,
-0x360,0x360,0xe5b,0xe5b,0x24,0x24,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,
-0x354,0xba6,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
-0x27,0x27,0x366,0x378,0x27,0x378,0x378,0x378,0x378,0x378,0x378,0x27,0x27,0x27,0x378,0x378,
-0x378,0x27,0x378,0x378,0x37b,0x378,0x27,0x27,0x27,0x378,0x378,0x27,0x378,0x27,0x378,0x378,
-0x27,0x27,0x27,0x378,0x378,0x27,0x27,0x27,0x378,0x378,0x378,0x27,0x27,0x27,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0xc81,0x378,0x378,0x378,0x27,0x27,0x27,0x27,0x366,0x372,
-0x366,0x372,0x372,0x27,0x27,0x27,0x372,0x372,0x372,0x27,0x375,0x375,0x375,0x369,0x27,0x27,
-0xe5e,0x27,0x27,0x27,0x27,0x27,0x27,0x366,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
-0x27,0x27,0xc7e,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36c,0x36c,0x36c,0xba9,
-0xba9,0xba9,0xba9,0xba9,0xba9,0xbac,0xba9,0x27,0x27,0x27,0x27,0x27,0x2a,0x38a,0x38a,0x38a,
-0x2a,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x2a,0x38d,0x38d,0x38d,0x2a,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x2a,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x2a,0x38d,0x38d,0x38d,0x38d,0x38d,0x2a,0x2a,
-0x2a,0xe67,0x37e,0x37e,0x37e,0x38a,0x38a,0x38a,0x38a,0x2a,0x37e,0x37e,0x381,0x2a,0x37e,0x37e,
-0x37e,0x384,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x37e,0x37e,0x2a,0xe67,0xe67,0x2a,0x2a,
-0x2a,0x2a,0x2a,0x2a,0x38d,0x38d,0xe61,0xe61,0x2a,0x2a,0x387,0x387,0x387,0x387,0x387,0x387,
-0x387,0x387,0x387,0x387,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0xe64,0xe64,0xe64,0xe64,
-0xe64,0xe64,0xe64,0xe64,0x2d,0x2d,0x399,0x399,0x2d,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
-0x39f,0x2d,0x39f,0x39f,0x39f,0x2d,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
-0x39f,0x39f,0x39f,0x39f,0x39f,0x2d,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
-0x2d,0x39f,0x39f,0x39f,0x39f,0x39f,0x2d,0x2d,0xbaf,0xbb2,0x399,0x390,0x39c,0x399,0x390,0x399,
-0x399,0x2d,0x390,0x39c,0x39c,0x2d,0x39c,0x39c,0x390,0x393,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x2d,0x390,0x390,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x39f,0x2d,0x39f,0x39f,0xda7,0xda7,
-0x2d,0x2d,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x2d,0xdaa,0xdaa,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x30,0x30,0x3ab,0x3ab,
-0x30,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x30,0x3b1,0x3b1,0x3b1,0x30,0x3b1,0x3b1,
-0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x11a0,0x3b1,0x3b1,
-0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x11a0,0x30,
-0x30,0xe73,0x3a2,0x3ab,0x3ab,0x3a2,0x3a2,0x3a2,0xe6a,0x30,0x3ab,0x3ab,0x3ab,0x30,0x3ae,0x3ae,
-0x3ae,0x3a5,0x11a0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3a2,0x30,0x30,0x30,0x30,
-0x30,0x30,0x30,0x30,0x3b1,0x3b1,0xe6a,0xe6a,0x30,0x30,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,
-0x3a8,0x3a8,0x3a8,0x3a8,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0x30,0x30,0x30,0xe70,0xe73,0xe73,
-0xe73,0xe73,0xe73,0xe73,0x33,0x33,0x90f,0x90f,0x33,0x915,0x915,0x915,0x915,0x915,0x915,0x915,
-0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x33,0x33,0x33,0x915,0x915,
-0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,
-0x915,0x915,0x33,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x33,0x915,0x33,0x33,
-0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x33,0x33,0x33,0x909,0x33,0x33,0x33,0x33,0x906,
-0x90f,0x90f,0x906,0x906,0x906,0x33,0x906,0x33,0x90f,0x90f,0x912,0x90f,0x912,0x912,0x912,0x906,
-0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
-0x33,0x33,0x90f,0x90f,0x90c,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
-0x36,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,
-0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,
-0x3cc,0x3b7,0x3cc,0x3c9,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3bd,0x36,0x36,0x36,0x36,0x3b4,
-0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3cc,0x3cf,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3b7,0x3ba,0x3c0,
-0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c3,0x3c3,0x36,0x36,0x36,0x36,
-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x3e1,0x3e1,0x39,
-0x3e1,0x39,0x39,0x3e1,0x3e1,0x39,0x3e1,0x39,0x39,0x3e1,0x39,0x39,0x39,0x39,0x39,0x39,
-0x3e1,0x3e1,0x3e1,0x3e1,0x39,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x39,0x3e1,0x3e1,0x3e1,
-0x39,0x3e1,0x39,0x3e1,0x39,0x39,0x3e1,0x3e1,0x39,0x3e1,0x3e1,0x3e1,0x3e1,0x3d5,0x3e1,0x3de,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x39,0x3d5,0x3d5,0x3e1,0x39,0x39,0x3ea,0x3ea,0x3ea,0x3ea,
-0x3ea,0x39,0x3e7,0x39,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d5,0x39,0x39,0x3db,0x3db,0x3db,0x3db,
-0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x39,0x39,0x3e4,0x3e4,0x1254,0x1254,0x39,0x39,0x39,0x39,
-0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
-0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x888,0x888,0x888,0x88b,
-0x888,0x888,0x888,0x888,0x3c,0x888,0x888,0x888,0x888,0x88b,0x888,0x888,0x888,0x888,0x88b,0x888,
-0x888,0x888,0x888,0x88b,0x888,0x888,0x888,0x888,0x88b,0x888,0x888,0x888,0x888,0x888,0x888,0x888,
-0x888,0x888,0x888,0x888,0x888,0x88b,0x924,0xe7f,0xe7f,0x3c,0x3c,0x3c,0x3c,0x855,0x855,0x858,
-0x855,0x858,0x858,0x861,0x858,0x861,0x855,0x855,0x855,0x855,0x855,0x882,0x855,0x858,0x85b,0x85b,
-0x85e,0x867,0x85b,0x85b,0x888,0x888,0x888,0x888,0x11a9,0x11a3,0x11a3,0x11a3,0x855,0x855,0x855,0x858,
-0x855,0x855,0x918,0x855,0x3c,0x855,0x855,0x855,0x855,0x858,0x855,0x855,0x855,0x855,0x858,0x855,
-0x855,0x855,0x855,0x858,0x855,0x855,0x855,0x855,0x858,0x855,0x918,0x918,0x918,0x855,0x855,0x855,
-0x855,0x855,0x855,0x855,0x918,0x858,0x918,0x918,0x918,0x3c,0x921,0x921,0x91e,0x91e,0x91e,0x91e,
-0x91e,0x91e,0x91b,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x3c,0xe76,0x91e,0xc84,0xc84,0xe79,0xe7c,
-0xe76,0xff3,0xff3,0xff3,0xff3,0x11a6,0x11a6,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f,0x125a,
-0x3f,0x3f,0x3f,0x3f,0x3f,0x125a,0x3f,0x3f,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,
-0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xc93,
-0x951,0x42,0x951,0x951,0x951,0x951,0x42,0x42,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x42,
-0x951,0x42,0x951,0x951,0x951,0x951,0x42,0x42,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xc93,
-0x951,0x42,0x951,0x951,0x951,0x951,0x42,0x42,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xc93,0x951,0x42,0x951,0x951,
-0x951,0x951,0x42,0x42,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x42,0x951,0x42,0x951,0x951,
-0x951,0x951,0x42,0x42,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xc93,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x42,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0xc93,0x951,0x42,0x951,0x951,0x951,0x951,0x42,0x42,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0xc93,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x42,0x42,0x11ac,0x11ac,0xc8d,0xc90,0x94b,0x954,0x948,
-0x948,0x948,0x948,0x954,0x954,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x945,0x945,
-0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x42,0x42,0x42,0x957,0x957,0x957,0x957,
-0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,
-0x957,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x969,0x96c,0x96c,0x96c,
-0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,
-0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x966,0x963,0x48,0x48,0x48,0x972,0x972,0x972,0x972,
-0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x96f,0x96f,0x96f,0x972,0x972,0x972,0x4b,0x4b,0x4b,
-0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x993,0x993,0x993,0x993,
-0x993,0x993,0x975,0x993,0x993,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x97b,0x978,
-0x98a,0x98a,0x98d,0x996,0x984,0x981,0x98a,0x987,0x996,0xbb5,0x4e,0x4e,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xbb8,0xbb8,0xbb8,0xbb8,
-0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x99f,0x99f,0xa1d,0xa20,
-0x9a8,0xa1a,0x9a5,0x99f,0x9ab,0x9ba,0x9ae,0x9bd,0x9bd,0x9bd,0x9a2,0x51,0x9b1,0x9b1,0x9b1,0x9b1,
-0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x51,0x51,0x51,0x51,0x51,0x51,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x99c,0xea0,0x51,0x51,0x51,0x51,0x51,0x104a,0x104a,0x104a,0x104a,
-0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x411,0x411,0x411,0x411,
-0x411,0x411,0x54,0x54,0x414,0x414,0x414,0x414,0x414,0x414,0x54,0x54,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x54,0x414,0x54,0x414,0x54,0x414,0x54,0x414,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x54,0x54,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x411,0x411,0x411,0x411,
-0x411,0x54,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x40b,0x411,0x40b,0x40b,0x408,0x411,0x411,
-0x411,0x54,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x408,0x408,0x408,0x411,0x411,0x411,0x411,
-0x54,0x54,0x411,0x411,0x414,0x414,0x414,0x414,0x54,0x408,0x408,0x408,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x408,0x408,0x408,0x54,0x54,0x411,0x411,
-0x411,0x54,0x411,0x411,0x414,0x414,0x414,0x414,0x414,0x40e,0x40b,0x54,0xa8c,0xa8f,0xa8f,0xa8f,
-0xea9,0x57,0x57,0x57,0x57,0x57,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x465,0xaa1,0x5a,0x5a,
-0x5fa,0x465,0x465,0x465,0x465,0x465,0x46b,0x47d,0x46b,0x477,0x471,0x5fd,0x462,0x5f7,0x5f7,0x5f7,
-0x5f7,0x462,0x462,0x462,0x462,0x462,0x468,0x47a,0x468,0x474,0x46e,0x5a,0xc9c,0xc9c,0xc9c,0xc9c,
-0xc9c,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x5a,0x5a,0x5a,0x483,0x483,0x483,0x483,
-0x483,0x483,0x483,0x480,0x486,0x660,0x483,0x891,0x8b2,0x9c9,0x9c9,0x9c9,0xaa4,0xaa4,0xc9f,0xc9f,
-0xc9f,0xc9f,0x100b,0x100e,0x100e,0x11b2,0x1320,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
-0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,
-0x48c,0x48c,0x48c,0x48c,0x48c,0x489,0x489,0x489,0x489,0x48c,0x9cc,0x9cc,0xaa7,0xaad,0xaad,0xaaa,
-0xaaa,0xaaa,0xaaa,0xca2,0xdad,0xdad,0xdad,0xdad,0xeac,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
-0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x4bc,0x4bc,0x4bc,0x9d5,0xdb6,0xeb2,0xeb2,0xeb2,
-0xeb2,0x1146,0x63,0x63,0x63,0x63,0x63,0x63,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,
-0x624,0x624,0x4c8,0x4c8,0x4c5,0x4c5,0x4c5,0x4c5,0xdbc,0xdbc,0xdbc,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,
-0x1014,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b8,0x11b8,0x11b8,0x11b8,0x66,0x66,0x66,0x66,
-0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x9de,0x9de,0x69,
-0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,
-0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,
-0x4e6,0x4e6,0x4e6,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
-0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6f,0x50d,0x50d,0x50d,0x50d,0x11be,0x507,0x507,
-0x50d,0x50d,0x11c1,0x11c1,0x50d,0x50d,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,
-0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
-0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
-0x9f9,0x9f9,0x72,0x9f9,0x9f9,0x9f9,0x9f9,0x9fc,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
-0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9fc,0x72,0x72,0x72,0x72,
-0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
-0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x75,0x75,
-0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x7b,0x73e,0x738,0x73e,0x738,0x73e,0x738,0x73e,
-0x738,0x73e,0x738,0x738,0x73b,0x738,0x73b,0x738,0x73b,0x738,0x73b,0x738,0x73b,0x738,0x73b,0x738,
-0x73b,0x738,0x73b,0x738,0x73b,0x738,0x73b,0x738,0x738,0x738,0x738,0x73e,0x738,0x73e,0x738,0x73e,
-0x738,0x738,0x738,0x738,0x738,0x738,0x73e,0x738,0x738,0x738,0x738,0x738,0x73b,0xb43,0xb43,0x7b,
-0x7b,0x846,0x846,0x816,0x816,0x741,0x744,0xb40,0x7e,0x7e,0x7e,0x7e,0x7e,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0xfde,0x7e,0x7e,0x81,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x81,
-0x81f,0x81f,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,
-0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,
-0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0x1239,0x1239,0x1239,0x84,0x84,0x84,0x84,0x84,
-0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,
-0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0xc3c,0xc3c,0x87,
-0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,
-0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x87,
-0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0x8a,0x8a,0x8a,
-0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,
-0xa17,0xb4c,0xa17,0xa17,0xa17,0xb4c,0xa17,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
-0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,
-0x8ac,0x8ac,0x8ac,0x8ac,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
-0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,
-0x525,0x525,0x525,0x525,0x525,0x525,0x525,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
-0x93,0x93,0x93,0x513,0x513,0x513,0x513,0x513,0x93,0x93,0x93,0x93,0x93,0x9ea,0x516,0x51c,
-0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x519,0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,
-0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,0x93,0x51c,0x51c,0x51c,0x51c,0x51c,0x93,0x51c,0x93,
-0x51c,0x51c,0x93,0x51c,0x51c,0x93,0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,0x51c,0x51f,
-0x537,0x531,0x537,0x531,0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,
-0x11c4,0x11c4,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,
-0x96,0x96,0x96,0x537,0x531,0x534,0x53a,0x537,0x531,0x537,0x531,0x537,0x531,0x537,0x537,0x531,
-0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,
-0x534,0x531,0x534,0x534,0x534,0x534,0x534,0x534,0x531,0x534,0x531,0x531,0x534,0x534,0x531,0x531,
-0x531,0x531,0x531,0x534,0x531,0x531,0x534,0x531,0x534,0x534,0x534,0x531,0x534,0x534,0x534,0x534,
-0x96,0x96,0x534,0x534,0x534,0x534,0x531,0x531,0x534,0x531,0x531,0x531,0x531,0x534,0x531,0x531,
-0x531,0x531,0x531,0x534,0x534,0x534,0x531,0x531,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,
-0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,
-0x537,0x537,0x849,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x52e,0x52e,0xadd,0xc4b,0x96,0x96,
-0x53d,0x53d,0x53d,0x53d,0xebb,0xebb,0xebb,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
-0x780,0x786,0x786,0x792,0x792,0x783,0x77a,0x783,0x77a,0x783,0x77a,0x783,0x77a,0x783,0x77a,0x783,
-0x77a,0x78c,0x789,0x78c,0x789,0xb61,0xb61,0xc48,0xc45,0x77d,0x77d,0x77d,0x77d,0x78f,0x78f,0x78f,
-0x7a7,0x7aa,0x7b9,0x9c,0x7ad,0x7b0,0x7bc,0x7bc,0x7a4,0x79b,0x795,0x79b,0x795,0x79b,0x795,0x798,
-0x798,0x7b3,0x7b3,0x7b6,0x7b3,0x7b3,0x7b3,0x9c,0x7b3,0x7a1,0x79e,0x798,0x9c,0x9c,0x9c,0x9c,
-0x543,0x54f,0x543,0xae0,0x543,0x9f,0x543,0x54f,0x543,0x54f,0x543,0x54f,0x543,0x54f,0x543,0x54f,
-0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x54c,
-0x546,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x54c,0x546,0x54c,0x546,0x54c,0x546,0x9f,0x9f,0x540,
-0x681,0x684,0x699,0x69c,0x67b,0x684,0x684,0xa5,0x663,0x666,0x666,0x666,0x666,0x663,0x663,0xa5,
-0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x9ed,0x9ed,0x9ed,0x8af,0x65d,0x552,0x552,
-0xa5,0x6ab,0x68a,0x67b,0x684,0x681,0x67b,0x68d,0x67e,0x678,0x67b,0x699,0x690,0x687,0x6a8,0x67b,
-0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x696,0x693,0x699,0x699,0x699,0x6ab,
-0x66c,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
-0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0xa5,
-0xa5,0xa5,0x669,0x669,0x669,0x669,0x669,0x669,0xa5,0xa5,0x669,0x669,0x669,0x669,0x669,0x669,
-0xa5,0xa5,0x669,0x669,0x669,0x669,0x669,0x669,0xa5,0xa5,0x669,0x669,0x669,0xa5,0xa5,0xa5,
-0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,
-0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa8,
-0xa32,0xa32,0xa32,0xa32,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
-0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,0xa38,
-0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,
-0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xb1,0xb1,0xebe,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,
-0xa50,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xb4,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa65,0xa65,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa65,0xb4,0xa65,0xa65,
-0xb4,0xb4,0xa65,0xb4,0xb4,0xa65,0xa65,0xb4,0xb4,0xa65,0xa65,0xa65,0xa65,0xb4,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa62,0xa62,0xa62,0xa62,0xb4,0xa62,0xb4,0xa62,0xa62,0xa62,
-0xa62,0xbd3,0xa62,0xa62,0xb4,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa62,0xa62,0xa62,0xa62,0xa65,0xa65,0xb4,0xa65,0xa65,0xa65,0xa65,0xb4,0xb4,0xa65,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xb4,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xb4,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa65,0xa65,0xb4,0xa65,0xa65,0xa65,0xa65,0xb4,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xb4,0xa65,0xb4,0xb4,0xb4,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa65,0xb4,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xcb4,0xcb4,0xb4,0xb4,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa62,0xa62,0xa62,0xa5c,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xdc5,0xdc2,0xb4,0xb4,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,
-0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xb7,0xa68,0xb7,0xb7,
-0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
-0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xaef,0xaef,0xaef,0xaef,
-0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xbd,0xaef,0xaef,0xaef,0xaef,0xae9,0xae9,
-0xaec,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xaf8,0xaf8,0xaf8,0xaf8,
-0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf2,0xaf2,
-0xaf5,0xb55,0xb55,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xafe,0xafe,0xafe,0xafe,
-0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafb,0xafb,
-0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xb04,0xb04,0xb04,0xb04,
-0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xc6,0xb04,0xb04,0xb04,0xc6,0xb01,0xb01,
-0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xbe5,0xbe5,0xbe5,0xbe5,
-0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,
-0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xc9,0xc9,0xc9,0xbd6,0xbd6,0xbd6,0xbe2,
-0xbe2,0xbe2,0xbe2,0xbd6,0xbd6,0xbe2,0xbe2,0xbe2,0xc9,0xc9,0xc9,0xc9,0xbe2,0xbe2,0xbd6,0xbe2,
-0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbd9,0xbd9,0xbd9,0xc9,0xc9,0xc9,0xc9,0xbdc,0xc9,0xc9,0xc9,
-0xbe8,0xbe8,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbeb,0xbeb,0xbeb,0xbeb,
-0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xcc,0xcc,
-0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
-0xed3,0xed3,0xed3,0xed3,0xed3,0xed0,0xed0,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xcf,0xcf,0xcf,
-0xed0,0xed0,0xed0,0xed0,0xed0,0x1155,0x1155,0x1155,0x1155,0x1155,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
-0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
-0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xd2,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xd2,
-0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xd2,0xc0f,0xc0f,0xd2,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xd2,0xd2,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
-0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
-0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,
-0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,
-0xc12,0xc12,0xc12,0xd5,0xd5,0xd5,0xd5,0xd5,0xc51,0xc51,0xc51,0xd8,0xd8,0xd8,0xd8,0xc4e,
-0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,
-0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xd8,0xd8,0xd8,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,
-0xc4e,0xc4e,0xc4e,0xc4e,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,
-0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,
-0xc18,0xc18,0xdb,0xc15,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
-0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
-0xc21,0xc21,0xde,0xde,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xe1,0xe1,0xc24,0xe1,0xc24,0xc24,
-0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,
-0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xe1,0xc24,0xc24,0xe1,0xe1,0xe1,0xc24,0xe1,0xe1,0xc24,
-0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,
-0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
-0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xea,0xea,0xea,0xea,0xea,
-0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0x144,0x144,0x144,0x144,
-0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,
-0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xcd8,0xcd8,0xcde,0xcde,0xcde,0xed,0xed,0xcdb,0xcdb,
-0xfe4,0xfe4,0xfe4,0xfe4,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
-0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
-0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,
-0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x11d0,0x1020,0xdd4,0xdd4,
-0xcf3,0xcf0,0xcf3,0xcf0,0xcf0,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0x1029,0x1026,0x1029,0x1026,0x1023,
-0x1023,0x1023,0x1263,0x1260,0xf6,0xf6,0xf6,0xf6,0xf6,0xced,0xcea,0xcea,0xcea,0xce7,0xced,0xcea,
-0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,
-0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
-0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xf9,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xf9,
-0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xf9,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xf9,
-0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,
-0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
-0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xff,0x1266,0xff,0xff,0xff,0xff,0xff,0x1266,0xff,0xff,
-0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0x102,
-0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,
-0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0x102,
-0xd17,0xd0b,0xd0b,0xd0b,0x105,0xd0b,0xd0b,0x105,0x105,0x105,0x105,0x105,0xd0b,0xd0b,0xd0b,0xd0b,
-0xd17,0xd17,0xd17,0xd17,0x105,0xd17,0xd17,0xd17,0x105,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,
-0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,
-0x105,0x105,0x105,0x105,0xd08,0xd08,0xd08,0x105,0x105,0x105,0x105,0xd0e,0xd11,0xd11,0xd11,0xd11,
-0xd11,0xd11,0xd11,0xd11,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xd14,0xd14,0xd14,0xd14,
-0xd14,0xd14,0xd1a,0xd1a,0xd11,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xd2c,0xd2c,0xd2c,0xd2c,
-0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0x102f,0x102f,0x108,0x108,0x108,0x108,0xd26,0xd26,0xd26,0xd26,
-0xd26,0xd29,0xd29,0xd29,0xd26,0xd26,0xd29,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd2c,0xd2c,0xd2c,
-0xd2c,0xd2c,0xd2c,0xd2c,0xd26,0xd26,0x108,0x108,0x108,0x108,0x108,0x108,0xd23,0xd23,0xd23,0xd23,
-0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0x102c,0x108,0x108,0x108,0xd20,0xd20,0xd32,0xd32,0xd32,0xd32,
-0x10b,0x10b,0x10b,0x10b,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd2f,0xd32,0xd32,0xd32,
-0xd32,0xd32,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0xef1,0xef1,0xeee,0xee8,
-0xeee,0xee8,0xeee,0xee8,0xeee,0xee8,0xee5,0xee5,0xee5,0xee5,0xefa,0xef7,0xee5,0x1032,0x1269,0x126c,
-0x126c,0x1269,0x1269,0x1269,0x1269,0x1269,0x126f,0x126f,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,
-0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,
-0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xd59,0xd59,0xd59,0xd56,0xd56,0xd4d,0xd4d,0xd56,
-0xd53,0xd53,0xd53,0xd53,0x111,0x111,0x111,0x111,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,
-0x1188,0x1185,0x168,0x168,0x168,0x168,0x168,0x168,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0x1272,0x1272,
-0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xd5f,0x11d6,0x114,0x114,0x114,0x114,0x114,0x114,0x114,
-0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x11d3,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,
-0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xd86,0xd77,0xd71,0xd83,0xd80,0xd7a,0xd7a,0xd89,
-0xd74,0xd7d,0x117,0x117,0x117,0x117,0x117,0x117,0xe07,0xe07,0xdf2,0xe07,0xe0a,0xe0d,0xe0d,0xe0d,
-0xe0d,0xe0d,0xe0d,0xe0d,0x11d,0x11d,0x11d,0x11d,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,
-0xe01,0xe01,0xe13,0xe13,0xdf8,0xdfe,0xe13,0xe13,0xdfb,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,
-0xdf8,0xdf8,0xdf8,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf8,0xdf8,0xdf8,0xdf8,
-0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0x11d,0x11d,0x11d,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,
-0xf0c,0xf09,0xf09,0xf18,0xf0f,0x11dc,0x11d9,0x120,0x11dc,0x11d9,0x1278,0x1275,0x120,0x120,0x120,0x120,
-0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x11dc,0x11d9,0x11dc,0x11d9,0x11dc,0x11d9,0x11dc,0x11d9,
-0x11dc,0x11d9,0x1278,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,
-0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,
-0x120,0x120,0x120,0x120,0x127b,0x127b,0x11d9,0xf15,0xf15,0xf15,0xf15,0xf15,0xe22,0xe22,0xe22,0xe22,
-0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,
-0xe1f,0xe1f,0xe25,0xe25,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0xe2e,0xe2e,0xe2e,0xe2e,
-0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
-0xe2e,0xe2e,0xe28,0xe28,0xe28,0xe28,0x1038,0x1038,0x126,0x126,0x126,0xe2b,0xe31,0xe31,0xe31,0xe31,
-0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0x129,0x129,0x129,0x129,0x129,
-0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
-0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0xe37,0xe37,0xe37,0x12c,
-0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0xe34,0xe34,0xe34,0xe34,
-0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0xe3a,0xe3a,0xe3a,0xe3a,
-0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0x12f,0x12f,
-0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0xf3c,0xf3c,0xf3c,0xf3c,
-0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,
-0xf39,0xf39,0xf30,0xf2d,0x132,0x132,0x132,0xf3f,0xf3f,0xf33,0xf33,0xf33,0xf36,0xf36,0xf36,0xf36,
-0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0x132,0x132,0x132,0xf3c,0xf3c,0xf3c,0xf42,0xf42,0xf42,0xf42,
-0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf57,0xf57,0xf57,0xf57,
-0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf5a,0xf5a,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
-0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0xf75,0xf6f,0xf75,0xf6f,
-0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,
-0xf75,0xf6f,0xf75,0xf6f,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x1287,0xf81,0xf81,0xf81,0xf81,
-0xf7b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xf87,0xf87,0xf7e,0xf7e,0xf7e,0xf7e,
-0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xfa8,0xfa8,0xfa8,0xfa8,
-0xfa8,0xfa8,0xfa8,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xfa2,0xfa5,
-0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0xf9f,0xfb7,0xfb7,0xfb7,0xfb7,
-0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfb4,0xfb4,0xfab,0xfab,0xfb4,
-0xfb4,0xfab,0xfab,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0xfb7,0xfb7,0xfb7,0xfab,
-0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfab,0xfb4,0x141,0x141,0xfb1,0xfb1,0xfb1,0xfb1,
-0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0x141,0x141,0xfae,0xfba,0xfba,0xfba,0x144,0x144,0x144,0x144,
-0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,
-0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0xfc0,0xfc0,0xfc0,0xfc0,
-0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,
-0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc3,0x147,0x147,0xfc6,0xfc6,0xfc6,0xfc6,
-0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,
-0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0x14a,0x14a,0x14a,0xfc9,0xfc9,0xfc9,0xfc9,
-0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0x14d,0x14d,0x14d,
-0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0xfcf,0xfcf,0xfcf,0xfcf,
-0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,
-0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0x150,0x150,0x150,0x150,0x150,0xfcc,0xfd2,0xfd2,0xfd2,0xfd2,
-0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0x153,0x153,0x153,0x153,0xfd5,0xfd5,0xfd5,0xfd5,
-0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,
-0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x103e,0x103e,0x103e,0x103e,
-0x1047,0x103e,0x103e,0x103e,0x1047,0x103e,0x103e,0x103e,0x103e,0x103b,0x159,0x159,0x1044,0x1044,0x1044,0x1044,
-0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x159,0x104a,0x104a,0x104a,0x104a,
-0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,
-0x104a,0x104a,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x1065,0x1065,0x1065,0x1065,
-0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,
-0x1065,0x1062,0x104d,0x1062,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x15f,0x1056,0x105f,0x104d,0x105f,
-0x105f,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x104d,
-0x104d,0x1053,0x1053,0x1053,0x1053,0x1053,0x1053,0x1053,0x1053,0x15f,0x15f,0x1050,0x105c,0x105c,0x105c,0x105c,
-0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x105c,0x105c,0x105c,0x105c,
-0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x118b,0x1182,0x118b,0x118b,
-0x118b,0x118b,0x118b,0x118b,0x118b,0x1071,0x1071,0x1071,0x1071,0x118b,0x1071,0x1071,0x1071,0x1071,0x117f,0x131a,
-0x131d,0x128a,0x128a,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x1086,0x1086,0x1086,0x1086,
-0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x107d,0x107d,0x1080,0x1089,
-0x1083,0x1083,0x1083,0x1089,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x108c,0x108c,0x108c,0x108c,
-0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x1092,0x1092,
-0x1092,0x1092,0x1092,0x1092,0x108f,0x108f,0x108f,0x1092,0x16b,0x16b,0x16b,0x16b,0x1170,0x1170,0x1170,0x1170,
-0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,
-0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x16e,0x16e,0x16e,0x10a7,0x109b,0x109b,0x109b,
-0x109b,0x109b,0x109b,0x109e,0x10b0,0x10b0,0x109b,0x109b,0x109b,0x109b,0x171,0x10ad,0x10a1,0x10a1,0x10a1,0x10a1,
-0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x171,0x171,0x171,0x171,0x109b,0x109b,0x10b9,0x10b9,0x10b9,0x10b9,
-0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10bc,0x10b9,0x10b9,0x10b9,
-0x10b9,0x10b9,0x10b9,0x10b3,0x10b3,0x10b3,0x10b9,0x10b6,0x174,0x174,0x174,0x174,0x10ce,0x10c2,0x10ce,0x177,
-0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,
-0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x10cb,0x10cb,0x10d1,0x10c5,0x10c8,0x10e6,0x10e6,0x10e6,0x10e0,
-0x10e0,0x10d7,0x10e0,0x10e0,0x10d7,0x10e0,0x10e0,0x10e9,0x10e3,0x10da,0x17a,0x17a,0x10dd,0x10dd,0x10dd,0x10dd,
-0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x10ef,0x10ef,0x10ef,0x10ef,
-0x10ef,0x10ef,0x10ef,0x17d,0x17d,0x17d,0x17d,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,
-0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,
-0x10ec,0x10ec,0x10ec,0x10ec,0x17d,0x17d,0x17d,0x17d,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,
-0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x180,0x10f5,
-0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,
-0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x183,0x183,
-0x183,0x1101,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,
-0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x186,0x186,
-0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
-0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x189,0x189,0x189,0x189,0x189,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,
-0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,
-0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x18f,0x1137,0x1137,0x192,0x192,0x192,0x192,0x192,0x192,
-0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,
-0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,
-0x115b,0x115b,0x115b,0x198,0x198,0x198,0x198,0x198,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,
-0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115e,0x115e,0x115e,0x1143,0x198,
-0x1236,0x1161,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1161,0x1236,0x1161,
-0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x128d,0x128d,0x198,0x198,0x198,0x198,
-0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1158,0x1233,0x1158,0x1158,0x1233,0x1233,0x1158,
-0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1158,0x1158,0x1158,0x1158,0x1233,0x1233,
-0x1161,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x198,0x198,0x198,0x198,0x198,
-0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,
-0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x11e5,0x11e5,
-0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,
-0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x1179,0x123f,0x123f,0x19b,0x19b,0x19b,0x19b,0x19b,
-0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,
-0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x1176,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,
-0x123f,0x123f,0x123f,0x19b,0x19b,0x19b,0x19b,0x19b,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,
-0x1173,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x123c,0x123c,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,
-0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,
-0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x11ee,0x11ee,0x11ee,0x11ee,
-0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
-0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11e8,0x11e8,0x11e8,0x19e,0x19e,0x11eb,0x19e,0x1200,0x1200,0x1200,0x1200,
-0x1200,0x1200,0x11f1,0x11fa,0x11f4,0x11f4,0x11fa,0x11fa,0x11fa,0x11f4,0x11fa,0x11f4,0x11f4,0x11f4,0x11fd,0x11fd,
-0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x11f7,0x11f7,0x11f7,0x11f7,0x1a4,0x1203,0x1203,0x1203,
-0x1203,0x1203,0x1203,0x1a4,0x1a4,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1a4,0x1a4,0x1203,0x1203,0x1203,
-0x1203,0x1203,0x1203,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1206,0x1206,0x1206,0x1206,
-0x1206,0x1206,0x1209,0x121b,0x121b,0x120f,0x120f,0x120f,0x120f,0x120f,0x1a7,0x1a7,0x1a7,0x1a7,0x120c,0x120c,
-0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x1212,0x1212,
-0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,
-0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
-0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
-0x121e,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1245,0x1242,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,
-0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,
-0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1221,0x1221,0x1221,0x1221,
-0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1b0,0x1b0,0x1221,0x1221,0x1221,
-0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1b0,0x1b0,0x1221,0x1221,0x1221,
-0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1b0,0x1221,0x1221,0x1221,
-0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1b0,0x1b0,0x1b0,0x1b0,
-0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,
-0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1227,0x1b3,0x1b3,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1b3,0x1b3,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1b3,0x1227,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1b3,0x1227,0x1227,0x1227,0x1227,0x1b3,0x1b3,0x1b3,0x1224,0x1224,0x1224,0x1224,
-0x1224,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1224,0x1224,
-0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1b3,0x1b3,0x1290,0x1290,0x1290,0x1290,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1b3,0x1b3,0x1b3,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,
-0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,
-0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,
-0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x129c,0x1bf,0x129c,0x129c,
-0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,
-0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,
-0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1bf,0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x1c2,0x12a2,0x1c2,0x1c2,0x12a2,
-0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x1c2,0x12a2,0x1c2,0x12a2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x12a2,0x1c2,0x1c2,0x1c2,0x1c2,0x12a2,
-0x1c2,0x12a2,0x1c2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x1c2,0x12a2,0x1c2,0x1c2,0x12a2,
-0x1c2,0x12a2,0x1c2,0x12a2,0x1c2,0x12a2,0x1c2,0x12a2,0x1c2,0x12a2,0x12a2,0x1c2,0x12a2,0x1c2,0x1c2,0x12a2,
-0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x12a2,0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x1c2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x12a2,0x12a2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x129f,0x129f,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,
-0x12b4,0x12a5,0x12a8,0x12a8,0x12a5,0x12a5,0x12a5,0x12ab,0x12ab,0x1c5,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,
-0x12b1,0x12b1,0x12b1,0x12b1,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c3,
-0x12bd,0x12bd,0x12c3,0x12c3,0x12cc,0x12cc,0x12c6,0x12c9,0x12c9,0x12c3,0x12c0,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
-0x1c8,0x1c8,0x1c8,0x1c8,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,
-0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x1cb,0x1cb,0x1cb,0x1cb,
-0x1cb,0x1cb,0x12cf,0x12cf,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,
-0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,
-0x1cb,0x1cb,0x1cb,0x1cb,0x12db,0x12db,0x12db,0x12db,0x12db,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
-0x1ce,0x1ce,0x1ce,0x1ce,0x12db,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,
-0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,
-0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
-0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x12d5,0x12d5,0x12d5,0x12d5,0x12de,0x12de,0x12de,0x12de,0x12de,
-0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12f0,0x12f3,0x12f3,0x12f3,0x12f3,0x12f6,0x12f6,0x12e4,
-0x12e7,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,
-0x12ea,0x12ea,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,
-0x12fc,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
-0x12f9,0x12f9,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,
-0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x118b,0x118b,0x118b,0x106e,0x118b,0x118b,0x118b,0x118b,
-0x118b,0x118b,0x118b,0x118b,0x118b,0x118b,0x118b,0x118b,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,
-0x1311,0x1311,0x1311,0x1302,0x130b,0x1302,0x130b,0x130b,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x130e,0x1305,
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,
-0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,
-0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x84c,0x84c,0xa0e,0xa0e,0xa0e,0xa0e,
-0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,
-0xa0e,0xa0e,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0xfe1,0xfe1,0xfe1,0xfe1,
-0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x1314,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,
-0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,
-0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0xb4f,0xb4f,0xb4f,0xb4f,
-0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0x116d,0x116d,0x116d,0x1e6,0x1e6,0xd6e,0xd6e,0xd6e,0xd6e,
-0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,
-0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
-0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
-0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,
-0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0x1e9,
-0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,
-0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,
-0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0x1ec,0x1ec,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,
-0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x1ef,0x1ef,0x1ef,
-0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,
-0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,
-0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1f2,0x1f2,0xfe7,0x2ee,0x2ee,0x2fd,0xb91,0x300,0x300,0x300,
-0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,
-0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x2fd,0x2ee,0x2ee,0x2ee,0x2ee,0x2ee,0x2ee,0x2ee,
-0x2ee,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0xfea,0x1197,0x300,0x83a,0x83a,0x2f1,0x2f1,0xfe7,0x1194,0x1194,
-0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,
-0x300,0x303,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x303,0x300,0x300,0x303,0x300,0x300,0x300,
-0x300,0x300,0x1194,0x1197,0x2f1,0x300,0x2fd,0x2fd,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,
-0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0xa89,
-0xa89,0xc87,0xc87,0x3ed,0xc8a,0x1257,0x1257,0x1257,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,
-0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,
-0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f9,0x3f9,0x3f9,0x1002,0x1002,0x1002,0x1002,0x1002,
-0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,
-0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,
-0x3f6,0x3f6,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0x3fc,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,
-0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,
-0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x405,0x3ff,0x405,0x3ff,
-0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,
-0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x3ff,0x3ff,
-0x3ff,0x3ff,0x402,0x88e,0xea3,0xea3,0xea6,0xea3,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,
-0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,0x405,0x3ff,
-0x405,0x3ff,0xea6,0xea3,0xea6,0xea3,0xea6,0xea3,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
-0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
-0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x414,0x5c7,0x5c7,0x5ca,0x42f,0x5d6,0x5d3,0x5d3,0x5d0,
-0x459,0x459,0x417,0x417,0x417,0x417,0x417,0x9c0,0x5d9,0x43b,0x5f1,0x5f4,0x450,0x5d9,0x43e,0x43e,
-0x42f,0x44a,0x44a,0x5c7,0x456,0x453,0x5cd,0x429,0x420,0x420,0x423,0x423,0x423,0x423,0x423,0x426,
-0x423,0x423,0x423,0x41a,0x45f,0x45f,0x45c,0x45c,0x5e5,0x444,0x441,0x5e2,0x5df,0x5dc,0x5ee,0x432,
-0x5eb,0x5eb,0x447,0x44a,0x5e8,0x5e8,0x447,0x44a,0x42c,0x42f,0x42f,0x42f,0x44d,0x438,0x435,0xa9e,
-0x9c6,0x9c6,0x9c3,0x9c3,0x9c3,0x9c3,0xa95,0xa95,0xa95,0xa95,0xa9b,0xbbe,0xbbb,0xc96,0xc99,0xa98,
-0xc99,0xc99,0xc99,0xc99,0xc96,0xc99,0xc99,0xa92,0x492,0x492,0x4aa,0x606,0x48f,0x600,0x492,0x4a7,
-0x48f,0x606,0x4a1,0x4aa,0x4aa,0x4aa,0x4a1,0x4a1,0x4aa,0x4aa,0x4aa,0x60c,0x48f,0x4aa,0x609,0x48f,
-0x49e,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x48f,0x48f,0x495,0x600,0x603,0x48f,0x4aa,0x48f,0x60f,0x48f,
-0x4aa,0x498,0x4b0,0x612,0x4aa,0x4aa,0x49b,0x4a1,0x4aa,0x4aa,0x4ad,0x4aa,0x4a1,0x4a4,0x4a4,0x4a4,
-0x4a4,0x9d2,0x9cf,0xbc1,0xca8,0xab9,0xabc,0xabc,0xab6,0xab3,0xab3,0xab3,0xab3,0xabc,0xab9,0xab9,
-0xab9,0xab9,0xab0,0xab3,0xca5,0xdb0,0xdb3,0xeaf,0x1011,0x1011,0x1011,0x618,0x615,0x4b3,0x4b6,0x4b6,
-0x4b6,0x4b6,0x4b6,0x615,0x618,0x618,0x615,0x4b6,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x4bf,0x4bf,0x4bf,0x4bf,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,
-0x61b,0x61b,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,
-0x4c2,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c8,0x4c2,0x4c5,0x4c5,0x4c2,0x4c2,0x4c2,0x4c2,0x4c5,0x4c5,
-0x621,0x621,0x4c2,0x4c2,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,
-0x4c5,0x4c8,0x4c8,0x4c8,0x4c5,0x4c5,0x624,0x4c5,0x624,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,
-0x4c2,0x4c5,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c5,0x4c5,0x4c2,0x621,0x4c2,0x4c2,0x4c2,0x9d8,
-0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,
-0xabf,0xabf,0xabf,0xabf,0x627,0x4cb,0x627,0x627,0x4ce,0x4cb,0x4cb,0x627,0x627,0x4ce,0x4cb,0x627,
-0x4ce,0x4cb,0x4cb,0x627,0x4cb,0x627,0x4d7,0x4d4,0x4cb,0x627,0x4cb,0x4cb,0x4cb,0x4cb,0x627,0x4cb,
-0x4cb,0x627,0x627,0x627,0x627,0x4cb,0x4cb,0x627,0x4ce,0x627,0x4ce,0x627,0x627,0x627,0x627,0x627,
-0x62d,0x4d1,0x627,0x4d1,0x4d1,0x4cb,0x4cb,0x4cb,0x627,0x627,0x627,0x627,0x4cb,0x4cb,0x4cb,0x4cb,
-0x627,0x627,0x4cb,0x4cb,0x4cb,0x4ce,0x4cb,0x4cb,0x4ce,0x4cb,0x4cb,0x4ce,0x627,0x4ce,0x4cb,0x4cb,
-0x627,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x627,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4cb,0x4cb,0x4cb,0x4cb,0x62a,0x627,0x4ce,0x4cb,0x627,0x627,0x627,0x627,0x4cb,0x4cb,0x627,0x627,
-0x4cb,0x4ce,0x62a,0x62a,0x4ce,0x4ce,0x4cb,0x4cb,0x4ce,0x4ce,0x4cb,0x4cb,0x4ce,0x4ce,0x4cb,0x4cb,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x627,0x627,0x4ce,0x4ce,0x627,0x627,0x4ce,0x4ce,0x4cb,0x4cb,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x627,0x4cb,0x4cb,0x4cb,0x627,0x4cb,0x4cb,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x627,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x627,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,
-0x4cb,0x4cb,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
-0x4da,0x9db,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4e0,0x4e0,0x4e0,0x4e0,0x4da,0x4da,0x4da,0x4da,
-0x4da,0x4da,0x630,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4dd,0x4dd,0x4da,0x4da,0x4da,0x4da,
-0x4e0,0x4e0,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x723,0x720,0x4da,0x4da,0x4da,0x4da,0x4da,
-0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,
-0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x9db,
-0xac8,0x9db,0x9db,0x9db,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,
-0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,
-0x4e3,0x4e3,0x4e3,0x4e3,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x4e9,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xc30,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,
-0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x4ec,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,
-0x4ef,0x4ef,0x4ef,0x4ef,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,
-0x4ef,0x4ef,0x4ef,0x4ef,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,
-0x63f,0x63f,0x63f,0x63f,0x642,0x642,0x642,0x642,0x642,0x642,0x642,0x642,0x642,0x642,0x642,0x642,
-0x642,0x642,0x642,0x642,0x4f2,0x4f2,0x642,0x642,0x642,0x642,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,
-0xacb,0xacb,0xacb,0xacb,0x648,0x648,0x4f5,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x4f5,0x4f5,
-0x4f5,0x4f5,0x4f8,0x4f8,0x4f8,0x4f8,0x648,0x648,0x4f8,0x4f8,0x648,0x648,0x4f5,0x4f5,0x4f5,0x4f5,
-0x648,0x648,0x4f8,0x4f8,0x648,0x648,0x4f5,0x4f5,0x4f5,0x4f5,0x648,0x648,0x645,0x4f5,0x4f8,0x648,
-0x4f5,0x4f5,0x645,0x648,0x648,0x648,0x4f8,0x4f8,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,
-0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x648,0x645,0x648,0x645,0x4f5,0x4f8,0x4f8,0x4f8,0x4f8,0x4f8,
-0x4f8,0x4f5,0x4f5,0x645,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0xace,0xace,0xace,0xace,
-0xace,0xace,0xace,0xace,0x4fe,0x4fe,0x4fe,0x4fe,0x4fb,0x651,0x651,0x4fb,0x4fb,0x64b,0x4fb,0x4fb,
-0x4fb,0x4fb,0x64b,0x64b,0x4fb,0x4fb,0x4fb,0x4fb,0xc33,0xc33,0xad1,0xad1,0xcb1,0x9e4,0x4fe,0x4fe,
-0x64e,0x4fe,0x64e,0x4fe,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,
-0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fe,0x4fe,0x4fe,
-0x4fb,0x4fb,0x4fb,0x4fb,0x651,0x4fb,0x651,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,
-0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,
-0x4fb,0x4fb,0x4fb,0x4fb,0x651,0x651,0x501,0x651,0x64b,0x64b,0x4fb,0x64b,0x64e,0x64b,0x64b,0x4fb,
-0x64b,0x651,0x501,0x651,0x9e4,0x9e4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,
-0xad4,0xad4,0xcae,0xcb1,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504,
-0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x507,0x11be,0x11be,0x11be,0x507,0x507,0x507,0x507,
-0x507,0x507,0x507,0x507,0x11be,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,
-0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x657,0x507,0x507,0x507,0x507,0x507,0x507,
-0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x11be,0x507,0x11be,0x507,0x507,0x507,0x507,0x11be,
-0x11be,0x11be,0x507,0x114f,0x507,0x507,0x507,0x510,0x510,0x510,0x510,0x11be,0x11be,0x507,0x50a,0x50a,
-0x507,0x507,0x507,0x507,0xada,0xad7,0xada,0xad7,0xada,0xad7,0xada,0xad7,0xada,0xad7,0xada,0xad7,
-0xada,0xad7,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x507,0x507,0x507,0x507,
-0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x11be,0x507,0x507,0x507,
-0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x507,0x11be,0x531,0x531,0x531,0x531,
-0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x534,0x534,0x534,0x534,0x534,0x534,0x534,
-0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x531,0x537,0x52b,0x528,0x537,0x537,0x537,0x537,
-0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,
-0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,
-0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
-0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x534,0x53a,0x537,0x531,
-0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,
-0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x537,0x531,0x537,0x531,
-0x537,0x531,0x537,0x531,0x537,0x531,0x537,0x531,0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,
-0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x537,0x531,0x534,0x53a,0x537,0x531,0x537,0x531,
-0x534,0x53a,0x537,0x531,0x534,0x53a,0x537,0x531,0x537,0x531,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,
-0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x537,0x531,0x537,0x531,0x537,0x531,0x534,0x53a,
-0x534,0x53a,0x537,0x531,0x537,0x531,0x537,0x531,0x537,0x531,0x537,0x531,0x537,0x531,0x537,0x531,
-0x534,0x537,0x531,0x534,0x537,0x531,0x534,0x53a,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
-0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x534,
-0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,
-0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
-0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x534,0x534,0x531,0x534,0x531,0x534,0x531,0x531,
-0x534,0x531,0x531,0x534,0x531,0x534,0x531,0x531,0x534,0x531,0x534,0x534,0x531,0x531,0x531,0x534,
-0x531,0x531,0x531,0x531,0x531,0x534,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
-0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x534,0x534,0x531,0x531,
-0x534,0x531,0x534,0x531,0x531,0x531,0x531,0x531,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,
-0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,
-0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x534,0x53a,0x537,0x537,0x537,0x537,
-0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,
-0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,
-0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,
-0x53a,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x54c,0x54c,0x546,0x54c,
-0x546,0x54c,0x546,0x54c,0x546,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x54c,0x546,0x549,0x54f,0x54c,
-0x546,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x54c,
-0x546,0x54c,0x546,0x54c,0x546,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,
-0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,
-0x54f,0x54c,0x546,0x549,0x54f,0x54c,0x546,0x549,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,
-0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x633,0x633,0x633,0x633,
-0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,
-0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x63c,0x63c,
-0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,
-0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,0x639,
-0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,
-0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,
-0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,
-0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,
-0xb2b,0x7e3,0x7dd,0x7da,0x7e0,0x7d7,0x66f,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,
-0x7e9,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,
-0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,
-0x66f,0x66f,0x7e6,0x7e6,0x675,0x7f8,0x7fb,0x801,0x726,0x732,0x813,0x72f,0x7ef,0x7ec,0x7ef,0x7ec,
-0x7f5,0x7f2,0x7f5,0x7f2,0x7ef,0x7ec,0x72c,0x801,0x7ef,0x7ec,0x7ef,0x7ec,0x7ef,0x7ec,0x7ef,0x7ec,
-0x807,0x80d,0x80a,0x80a,0x67b,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,
-0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x67e,
-0x699,0x678,0x69f,0x6a2,0x69c,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,
-0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x67e,
-0x699,0x678,0x699,0xb2e,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,
-0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,
-0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x1164,0x1164,0x1164,0x1164,0x1164,0x71d,0x72c,0x72f,0x72f,0x72f,
-0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x843,0x843,0x843,0x843,0x735,0x735,0x804,0x810,0x810,0x810,
-0x810,0x810,0x729,0x7fe,0xa08,0xa08,0xa08,0xb3d,0xb5b,0xb58,0xa23,0x7d4,0x73b,0x738,0x73b,0x73e,
-0x738,0x73b,0x738,0x73b,0x738,0x73b,0x738,0x738,0x738,0x738,0x738,0x738,0x73b,0x73b,0x738,0x73b,
-0x73b,0x738,0x73b,0x73b,0x738,0x73b,0x73b,0x738,0x73b,0x73b,0x738,0x738,0xb5e,0x74d,0x747,0x74d,
-0x747,0x74d,0x747,0x74d,0x747,0x74d,0x747,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,
-0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x74d,
-0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x747,0x747,0x747,0x747,0x747,0x74a,0x74a,0x747,0x74a,
-0x74a,0x747,0x74a,0x74a,0x747,0x74a,0x74a,0x747,0x74a,0x74a,0x747,0x747,0x747,0x747,0x747,0x74d,
-0x747,0x74d,0x747,0x74d,0x747,0x747,0x747,0x747,0x747,0x747,0x74d,0x747,0x747,0x747,0x747,0x747,
-0x74a,0x74d,0x74d,0x74a,0x74a,0x74a,0x74a,0x819,0x81c,0x750,0x753,0xb46,0x759,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x75c,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,
-0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,
-0x765,0x765,0x765,0x765,0xc3f,0xc3f,0xd68,0x75f,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0xc39,0xc39,0xc39,0xc39,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,
-0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,
-0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0xc42,
-0xc42,0xc42,0xc42,0x82e,0x82e,0x82e,0x82e,0x82e,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
-0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
-0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0xc42,0xc42,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x82b,0x82b,0x82b,0x82b,
-0x82b,0x82b,0x82b,0x82b,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
-0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
-0x771,0x771,0x771,0x771,0x771,0x771,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xfe1,0xfe1,0xfe1,0xfe1,
-0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,
-0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,
-0x774,0x774,0x777,0x777,0x774,0x777,0x774,0x777,0x777,0x774,0x774,0x774,0x774,0x774,0x774,0x774,
-0x774,0x774,0x774,0x777,0x774,0x777,0x774,0x777,0x777,0x774,0x774,0x777,0x777,0x777,0x774,0x774,
-0x774,0x774,0x1317,0x1317,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,
-0xb4f,0xb4f,0xb4f,0xb4f,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0x1167,0x1167,0x1167,0x1167,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,
-0xc39,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,
-0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
-0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
-0x828,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,
-0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,
-0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0xc42,
-0x888,0x86a,0x86a,0x86a,0x86a,0x864,0x86a,0x86a,0x87c,0x86a,0x86a,0x867,0x873,0x879,0x879,0x879,
-0x879,0x879,0x87c,0x864,0x870,0x864,0x864,0x864,0x85b,0x85b,0x864,0x864,0x864,0x864,0x864,0x864,
-0x87f,0x87f,0x87f,0x87f,0x87f,0x87f,0x87f,0x87f,0x87f,0x87f,0x864,0x864,0x864,0x864,0x864,0x864,
-0x864,0x864,0x864,0x864,0x867,0x85b,0x864,0x85b,0x864,0x85b,0x876,0x86d,0x876,0x86d,0x885,0x885,
-0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,
-0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,
-0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,
-0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,
-0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,
-0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,
-0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,
-0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x89d,0x89d,
-0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,
-0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a0,0x8a0,
-0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,
-0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,
-0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,
-0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,
-0x8a9,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,
-0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8a9,0x8ac,0x8ac,0x8ac,
-0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,
-0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x8ac,0x93c,0x93c,0xe9d,0x93c,0x93c,0x93c,0x93f,0x93c,
-0xe9d,0x93c,0x93c,0xe94,0x936,0x927,0x927,0x927,0x927,0x939,0x927,0xe82,0xe82,0xe82,0x927,0x92a,
-0x936,0x92d,0xe88,0xe97,0xe97,0xe82,0xe82,0xe9d,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
-0x933,0x933,0x942,0x942,0x930,0x930,0x930,0x930,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x939,0x939,
-0x927,0x927,0xe9d,0xe9d,0xe9d,0xe9d,0xe82,0xe82,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
-0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
-0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xc93,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0xc93,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,
-0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,
-0x957,0x957,0x957,0x957,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95a,0x960,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x1008,0x1008,0x1008,0x1008,0x1005,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,
-0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,
-0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x996,0x996,0x996,0x999,0x999,0x996,0x996,0x996,
-0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x97e,0x97e,0x993,0x975,
-0x975,0x975,0x975,0x975,0x975,0x975,0x993,0x993,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,
-0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,
-0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b7,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
-0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,
-0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,
-0x9db,0x9db,0x9db,0xac8,0xac8,0xac8,0xac8,0xac8,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,
-0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,
-0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
-0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
-0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
-0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
-0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,
-0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,
-0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,
-0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa14,0xa11,0xa11,
-0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,
-0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,
-0xa17,0xa17,0xb4c,0xb4c,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,
-0xa17,0xa17,0xa17,0xa17,0xb4c,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,
-0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xbd0,0xbd0,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,
-0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,
-0xa3b,0xa3b,0xbcd,0xbcd,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,
-0xc1b,0xc1b,0xc1b,0xc1b,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,
-0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,
-0xa3e,0xa3e,0xa3e,0xa3e,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,
-0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,
-0xa41,0xa41,0xa41,0xa41,0xa50,0xa50,0xa50,0xa50,0xa50,0xa47,0xa53,0xa59,0xa59,0xa59,0xa4d,0xa4d,
-0xa4d,0xa56,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa59,
-0xa59,0xa59,0xa59,0xa59,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa50,0xa50,0xa59,0xa59,0xa59,0xa4d,0xa4d,0xa59,0xa59,0xa59,
-0xa59,0xa59,0xa59,0xa59,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa59,0xa59,0xa59,0xa59,0xa4d,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa50,0xa50,0xa50,0xa50,0xa50,
-0xa65,0xa5c,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa5c,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa5c,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa5c,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa5c,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,
-0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,
-0xa5f,0xa5f,0xa5f,0xa5f,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa65,0xa65,0xa65,0xa65,0xa68,0xa68,0xa68,0xa68,
-0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
-0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa6b,0xa6b,0xa6b,0xa6b,
-0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,
-0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6e,0xa6e,0xa6e,0xa6e,
-0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,
-0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xac8,0xac8,0xac8,0xac8,
-0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,0xac8,
-0xac8,0xac8,0xac5,0xac8,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,
-0xac5,0xac5,0xac5,0xbc4,0xbc7,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,
-0xdbc,0xdbc,0xdbc,0xdbc,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xad4,0xbca,0xbca,
-0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,
-0xcae,0xeb5,0x1149,0x1149,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcbd,0xcba,0xdce,0xdce,0xdce,0xdce,0x125d,
-0xec7,0x125d,0x11cd,0x11cd,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,
-0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb34,0xb31,0xb34,0xb31,0xb34,0xb31,0xfdb,0xfd8,0xecd,0xeca,
-0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,
-0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
-0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
-0xb10,0xb10,0xb10,0xb16,0xb13,0xb3a,0xb37,0xb16,0xb13,0xb16,0xb13,0xb16,0xb13,0xb16,0xb13,0xb16,
-0xb13,0xb16,0xb13,0xb16,0xb13,0xb16,0xb13,0xb16,0xb13,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
-0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
-0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb16,0xb13,0xb16,0xb13,
-0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
-0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb16,0xb13,0xb10,0xb10,
-0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb1f,0xb19,0xb19,0xb19,
-0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,
-0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,
-0xb1f,0xb1f,0xb1f,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,
-0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,
-0xb1c,0xb19,0xb19,0xb19,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,
-0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,
-0xb4f,0xb4f,0xb4f,0xb4f,0xbca,0xbca,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,
-0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xdbf,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,
-0xeb5,0x1017,0x114c,0x114c,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,
-0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,
-0xbee,0xbee,0xbee,0xbee,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf1,
-0xc06,0xc06,0xc06,0xc00,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc00,
-0xc06,0xc06,0xc06,0xc06,0xbfa,0xbfa,0xc03,0xc03,0xc03,0xc03,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,
-0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc0,0xcc3,0xcc3,0xcc3,
-0xcc3,0xcc3,0xcc3,0xcc3,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xc06,0xc00,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xbfa,0xbfa,0xbfa,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,
-0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,
-0xbfd,0xbfd,0xbfd,0xbfd,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,
-0xc09,0xc09,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xed0,
-0xed0,0xed0,0xed0,0xed0,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,
-0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,
-0xc0c,0xc0c,0xc0c,0xc0c,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,
-0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,
-0xc12,0xc12,0xc12,0xc12,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,
-0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,
-0xc1b,0xc1b,0xc1b,0xc1b,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,
-0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,
-0xc27,0xc27,0xc27,0xc27,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,
-0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,
-0xc36,0xc36,0xc36,0xc36,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,
-0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,
-0xccc,0xccc,0xccc,0xccc,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,
-0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,
-0xccf,0xccf,0xccf,0xccf,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,
-0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,
-0xcd2,0xcd2,0xcd2,0xcd2,0xd8f,0xd8f,0xce4,0xce4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xedc,
-0xedc,0xedc,0xedc,0xedc,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,
-0xed9,0xed9,0xed9,0xed9,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,
-0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,0xcf3,0xcf0,
-0xcf3,0xcf0,0xcf3,0xcf0,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,
-0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,
-0xcff,0xcff,0xcff,0xcff,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,
-0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,
-0xd05,0xd05,0xd05,0xd05,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,
-0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xdd7,0xdd7,0xdd7,0xdd7,0xedf,
-0xedf,0xedf,0xedf,0xedf,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,
-0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,
-0xd2c,0xd2c,0xd2c,0xd2c,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,
-0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,
-0xd32,0xd32,0xd32,0xd32,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
-0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
-0xd3b,0xd3b,0xd3b,0xd35,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,
-0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd3b,
-0xd3b,0xd3b,0xd3b,0xd3b,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,
-0xd44,0xd44,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd3e,0xd47,0xeeb,0xee5,0xef4,0xee2,
-0xd44,0xd44,0xee2,0xee2,0xd59,0xd59,0xd4a,0xd59,0xd59,0xd59,0xd50,0xd59,0xd59,0xd59,0xd59,0xd4a,
-0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,
-0xd59,0xd59,0xd59,0xd59,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd5c,0xd5c,0xd5c,0xd5c,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,
-0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,
-0xd6e,0xd6e,0xd6e,0xd6e,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
-0xd8c,0xd8c,0xd8c,0xd8c,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,
-0xfe4,0xfe4,0xfe4,0xfe4,0xdd1,0xdd1,0xdd1,0xdd1,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
-0xed0,0xed0,0xed0,0xed0,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,
-0xed3,0xed3,0xed3,0xed3,0xdf2,0xdf2,0xdf2,0xdf2,0xe04,0xe0d,0xe10,0xe0d,0xe10,0xe0d,0xe10,0xe0d,
-0xe10,0xe0d,0xe10,0xe0d,0xe0d,0xe0d,0xe10,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,
-0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xdf5,0xe04,0xdf2,0xdf2,
-0xdf2,0xdf2,0xdf2,0xe07,0xdf2,0xe07,0xe04,0xe04,0xe19,0xe16,0xe19,0xe19,0xe19,0xe16,0xe16,0xe19,
-0xe16,0xe19,0xe16,0xe19,0xe16,0xf06,0xf06,0xf06,0x1035,0xefd,0xf06,0xefd,0xe16,0xe19,0xe16,0xe16,
-0xefd,0xefd,0xefd,0xefd,0xf00,0xf03,0x1035,0x1035,0xe1c,0xe1c,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,
-0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf0f,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,
-0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,
-0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,
-0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,
-0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,
-0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,
-0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,
-0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe82,0xe9d,0xe94,0xe91,0xe91,0xe9d,0xe9d,0xe94,
-0xe94,0xe91,0xe91,0xe91,0xe91,0xe91,0xe9d,0xe9d,0xe9d,0xe82,0xe82,0xe82,0xe82,0xe9d,0xe9d,0xe9d,
-0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe82,0xe94,0xe97,0xe82,0xe82,0xe9a,
-0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe85,0xe9d,0xe9a,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,
-0xe8e,0xe8e,0xffc,0xffc,0xff9,0xff6,0xe8b,0xe8b,0xeb8,0xeb8,0xeb8,0xeb8,0x114c,0x114c,0x114c,0x114c,
-0x114c,0x1149,0x1149,0x1149,0x1149,0x114c,0x11bb,0x114c,0x114c,0x114c,0x1149,0x114c,0x114c,0x1149,0x1149,0x1149,
-0x114c,0x114c,0x1149,0x1149,0x114c,0x1149,0x1149,0x114c,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,
-0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,
-0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf12,0xf0f,0xf0f,0xf0f,0xf0f,0xf0f,0xf0f,0xf0f,
-0xf0f,0xf18,0xf0f,0xf18,0xf0f,0xf18,0xf18,0xf0f,0xf1b,0xf1b,0xf21,0xf27,0xf27,0xf27,0xf27,0xf27,
-0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,
-0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf21,0xf1b,0xf1b,0xf1b,0xf1b,0xf21,0xf21,
-0xf1b,0xf1b,0xf24,0x127e,0x1281,0x1281,0xf27,0xf27,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,
-0xf1e,0xf1e,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,
-0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,
-0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,
-0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,
-0xf48,0xf48,0xf48,0xf4b,0xf48,0xf48,0xf4e,0xf4e,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,
-0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,
-0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,
-0xf5a,0xf5a,0xf5a,0xf5a,0xf5d,0xf54,0xf63,0xf60,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,
-0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,
-0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0x11e2,0x11df,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,
-0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf72,0xf69,0xf66,0xf66,0xf66,0xf6c,0x1287,0x1287,0x1287,0x1287,
-0x1287,0x1287,0x1287,0x1287,0xf69,0xf69,0xf6c,0xf78,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,
-0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,
-0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf75,0xf6f,0xf81,0xf81,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,
-0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,
-0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,
-0xf81,0xf81,0xf81,0xf81,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8d,
-0xf8d,0xf8d,0xf90,0xf99,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,
-0xfa8,0xfa8,0xfa8,0xfa8,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf96,0xf96,
-0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,
-0xf96,0xf96,0xf96,0xf96,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,
-0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,
-0xfb7,0xfb7,0xfb7,0xfb7,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,
-0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,
-0xfc9,0xfc9,0xfc9,0xfc9,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,
-0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,
-0xfd2,0xfd2,0xfd2,0xfd2,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,
-0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,
-0xfd5,0xfd5,0xfd5,0xfd5,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,
-0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x103e,0x103e,0x1041,0x1041,0x1047,0x103e,
-0x103e,0x103e,0x103e,0x103e,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,
-0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,
-0x104a,0x104a,0x104a,0x104a,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,
-0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,
-0x1065,0x1065,0x1065,0x1065,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,
-0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,
-0x1077,0x1077,0x1074,0x107a,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,
-0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,
-0x1086,0x1086,0x1086,0x1086,0x1095,0x1095,0x1095,0x10a4,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,
-0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,
-0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x1098,0x10a4,0x10a4,0x1095,0x1095,0x1095,0x1095,0x10a4,0x10a4,
-0x1095,0x10a4,0x10a4,0x10a4,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,
-0x10cb,0x10cb,0x10cb,0x10cb,0x10bf,0x10cb,0x10bf,0x10bf,0x10bf,0x10d4,0x10d4,0x10bf,0x10bf,0x10d4,0x10cb,0x10d4,
-0x10d4,0x10cb,0x10bf,0x10c2,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,
-0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,
-0x10cb,0x10cb,0x10cb,0x10cb,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,
-0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,
-0x10e6,0x10e6,0x10e6,0x10e6,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,
-0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,
-0x10fe,0x10fb,0x10fb,0x10fb,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,
-0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,
-0x1107,0x1107,0x1107,0x1107,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,
-0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,
-0x1116,0x1116,0x1116,0x1116,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1134,
-0x1131,0x1131,0x1131,0x1131,0x112e,0x112e,0x112e,0x1122,0x1122,0x1122,0x1122,0x112e,0x112e,0x1128,0x1125,0x112b,
-0x112b,0x111c,0x1137,0x1137,0x111f,0x111f,0x112e,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
-0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1134,0x1131,
-0x1134,0x1131,0x1131,0x1131,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,
-0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,
-0x113a,0x113a,0x113a,0x113a,0x1140,0x1140,0x1140,0x113d,0x113d,0x113d,0x113a,0x113a,0x113a,0x113a,0x113d,0x113a,
-0x113a,0x113a,0x1140,0x113d,0x1140,0x113d,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,
-0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,0x113a,
-0x113a,0x1140,0x113d,0x113d,0x113a,0x113a,0x113a,0x113a,0x114c,0x114c,0x11bb,0x1149,0x11bb,0x11bb,0x11bb,0x11bb,
-0x1149,0x1149,0x114c,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x114c,0x114c,0x114c,0x114c,0x114c,0x1149,0x114c,
-0x114c,0x114c,0x114c,0x1149,0x1149,0x114c,0x114c,0x114c,0x1236,0x1236,0x1161,0x1236,0x1236,0x1236,0x1161,0x1236,
-0x1236,0x1236,0x1161,0x1161,0x1161,0x1161,0x1161,0x1236,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1158,
-0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1158,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,
-0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,
-0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,
-0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,
-0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1215,0x1206,0x1215,0x1218,0x1218,0x1218,0x1218,0x1218,
-0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,
-0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,
-0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
-0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1224,0x1224,0x1227,0x1227,0x1227,0x1227,0x1227,0x1224,0x1227,0x1227,0x1227,
-0x1224,0x1227,0x1224,0x1227,0x1224,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1224,
-0x1227,0x1224,0x1224,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,
-0x1293,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,
-0x122a,0x1293,0x122a,0x122a,0x122a,0x1293,0x122a,0x1293,0x122a,0x1293,0x122a,0x1293,0x122a,0x122a,0x122a,0x1293,
-0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x1293,0x1293,0x122a,0x122a,0x122a,0x122a,0x1293,0x122a,0x1293,0x1293,
-0x122a,0x122a,0x122a,0x122a,0x1293,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,
-0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,
-0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,
-0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,
-0x12a5,0x12a5,0x12a5,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,
-0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,
-0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,
-0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,
-0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,
-0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,
-0x12e1,0x12e1,0x12ed,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,
-0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,
-0x12f3,0x12f3,0x12f3,0x12ed,0x12ed,0x12ed,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12ed,
-0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,
-0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,
-0,0,0,0
-};
-
-static const UTrie2 propsVectorsTrie={
-    propsVectorsTrie_index,
-    propsVectorsTrie_index+4128,
-    NULL,
-    4128,
-    19284,
-    0xa40,
-    0x10a0,
-    0x0,
-    0x0,
-    0x110000,
-    0x5b70,
-    NULL, 0, FALSE, FALSE, 0, NULL
-};
-
-static const uint32_t propsVectors[4899]={
-0x67,0,0,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,0,0,0xc67,
-0,0,0xd67,0,0,0xe67,0,0,0xf67,0,0,0x1067,0,0,0x1167,0,
-0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,
-0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67,
-0,0,0x1f67,0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0,
-0,0x2567,0,0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0,
-0x2b67,0,0,0x2d67,0,0,0x3067,0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3867,
-0x20000000,0,0x3a67,0,0,0x3b67,0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,
-0,0x4167,0,0,0x4367,0,0,0x4467,0,0,0x4867,0,0,0x4967,0,0,
-0x4a67,0,0,0x5067,0,0,0x5167,0,0,0x5267,0,0,0x5467,0,0,0x5567,
-0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867,0,0,0x5967,0,0,0x5b67,0,
-0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000,0x20,0x6167,0,0,0x6267,0,0,
-0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6f67,0,0,0x7067,0,0,0x7367,
-0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867,0,0,0x7a67,0,
-0,0x7b67,0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0,0,0x8167,0,0,
-0x8267,0,0,0x8367,0,0,0x8467,0,0,0x8567,0,0,0x8667,0,0,0x8767,
-0,0,0x8867,0,0,0x8967,0,0,0x8b67,0,0,0x8c67,0,0,0x8e67,0x20000000,
-0,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0,0,0x9367,0,0,
-0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0,0x9967,0,0,0x9a67,
-0,0,0x9c67,0,0,0x9f67,0,0,0xa067,0,0,0xa167,0,0,0xa367,0,
-0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0,0,
-0xa967,0,0,0xaa67,0,0,0xab67,0,0,0xac67,0,0,0xad67,0,0,0xae67,
-0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367,0,0,0xb467,0,
-0,0xb567,0,0,0xb667,0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,
-0xba67,0,0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,
-0,0,0xc167,0,0,0xc267,0,0,0xc367,0,0,0xc467,0,0,0xc667,0,
-0,0xc767,0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0,0,
-0xcc67,0,0,0xcd67,0,0,0xce67,0,0,0xcf67,0,0,0xd067,0,0,0xd267,
-0,0,0xd367,0,0,0xd467,0,0,0xd567,0,0,0xd667,0,0,0xd867,0,
-0,0xd967,0,0,0xda67,0,0,0xdb67,0,0,0xdc67,0,0,0xa0067,0,0xe00000,
-0xa4667,0,0xe00000,0xa4767,0,0xe00000,0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,
-0,0xe00000,0xad167,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,
-0xa5a040,0x11000100,0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x200000,
-0x11000200,0x24000008,0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,
-0x7c00100,0x220402,0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,
-0x220402,0x11000419,0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,
-0x11000519,0x7c00100,0x230400,0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600,
-0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010,
-0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002,
-0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e,
-0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x2802400,0x962460,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,
-0x220400,0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,
-0x11000a03,0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000a03,0xc000000,0x248000,0x11000b13,
-0x2802500,0x962460,0x11000b13,0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,
-0x200000,0x11000b13,0x7c00100,0x2630400,0x11000c00,0,0x218820,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,
-0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,
-0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,
-0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800000,0x1329800,0x11000f0a,0x6800100,0x962540,
-0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,
-0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800000,0x1329800,0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,
-0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800000,0x1329800,
-0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,
-0x2806400,0x962460,0x1100120f,0x6800000,0x1329800,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,
-0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,
-0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x4000000,0x200000,0x11001423,
-0x6800000,0x1329800,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,
-0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,
-0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,
-0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,
-0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,
-0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,
-0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,
-0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d00,0x4000000,0x200000,
-0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,
-0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,
-0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,
-0x11002800,0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,
-0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,
-0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,
-0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x1248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,
-0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,
-0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,
-0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,
-0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,
-0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,
-0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,
-0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,
-0x200001,0x11002f00,0x24000020,0x200002,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0xe00000,
-0x11003000,0x24000020,0x200000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,
-0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,
-0xe00000,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0xe00000,
-0x11003800,0x24000000,0x1710000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2630401,0x11005013,
-0x7c00100,0x2630402,0x11005013,0x7c00100,0x2630405,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,
-0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,
-0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,
-0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,
-0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x200000,0x11020200,0x24000000,0x1400000,
-0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,
-0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,
-0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,
-0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,
-0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,
-0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,
-0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,
-0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,
-0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,
-0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x10000f,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x7c00120,0x120405,0x11022c0e,
-0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,
-0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,
-0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023400,
-0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,
-0xe00000,0x11023700,0x24000020,0x100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,
-0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0x23040a,0x11045712,0x7c80100,0x23040a,0x11045716,
-0x7c00100,0x230c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0xe40011,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,
-0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,
-0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,
-0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,
-0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x1329800,
-0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,
-0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1710000,0x11080100,0x24000008,0x1712c00,0x11080100,0x24000010,
-0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,
-0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,
-0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,
-0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,
-0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,
-0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,
-0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,
-0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,
-0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,
-0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,
-0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,
-0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,
-0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,
-0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a04,
-0xc000010,0x1049400,0x11400c06,0x4000010,0xb00000,0x11400c06,0x4000010,0x1071400,0x11400c06,0xc000010,0xb48000,0x11400c09,0x7c00900,0x230400,0x11400c0e,0x6800000,
-0x1329800,0x11400f12,0xc000010,0x448000,0x11403d24,0x4000000,0xe00000,0x1144571e,0x4000004,0x120000a,0x1144571e,0x4000008,0x81000a,0x1144571e,0x4000008,0x141000a,
-0x1144571e,0x4000010,0x87000a,0x1144571e,0xc000010,0x84800a,0x11445727,0x3802500,0x126246a,0x11445727,0x7c00d00,0x2530c0a,0x114a3d1e,0x24000000,0x810000,0x114a3d1e,
-0x24000000,0x1410000,0x114a3d1e,0x24000008,0x810000,0x114a3d1e,0x24000008,0x1410000,0x114a3d1e,0x24000010,0x870000,0x114a3d1e,0x2c000010,0x848000,0x114a3d24,0x4000000,
-0xe00000,0x114a3d24,0x24000000,0xe00000,0x114a3d24,0x24000002,0xe00000,0x114a3d24,0x24000002,0x1200000,0x114a3d24,0x24000008,0x810000,0x114a3d24,0x24000008,0x1410000,
-0x114a3d27,0x7c00900,0xe30c00,0x114a3d29,0x7c00300,0xe30000,0x114a3e27,0x7000400,0x1200c02,0x114a3f1e,0x4000004,0x1200000,0x114a3f27,0x7c00d00,0x2530c00,0x114a4229,
-0x4000000,0xe00000,0x114a4229,0x4000000,0xe0000f,0x114a4424,0x4000000,0xe00002,0x114a4424,0x4000000,0xe00003,0x114a4524,0x4000000,0xe00002,0x114a4524,0x4000000,
-0xe0000d,0x11800902,0x2802400,0x962460,0x11800c0c,0x2802100,0x962460,0x11800c0c,0x2802500,0x962460,0x11800f10,0x2802400,0x962460,0x11820700,0x2802400,0x962460,
-0x11820700,0x2802500,0x962460,0x118a3d2c,0x2802400,0x962460,0x118a3e27,0x2802400,0x962460,0x11c05133,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,
-0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,
-0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,
-0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,
-0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,
-0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,
-0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,
-0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,
-0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,
-0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,
-0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218820,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,
-0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,
-0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,
-0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,
-0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,
-0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800000,0x1329800,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,
-0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,
-0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x230400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,
-0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,0x30002300,
-0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,
-0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,
-0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x2802100,0x962460,0x3000251b,
-0x4000000,0x200000,0x3000251b,0x4000001,0xc40000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,
-0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,
-0x30002800,0x4000001,0xc4000b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,
-0x4000000,0x200000,0x30002c00,0x7c00100,0x220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,
-0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2630401,0x30005600,0,0x918820,
-0x30020600,0x4000400,0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,
-0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,
-0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x3040251b,0x4000010,0x400000,0x3040251b,0x4000010,0xb70000,
-0x3040251b,0xc000010,0xb48000,0x304a3d24,0x4000000,0xe00000,0x30800c0c,0x2802100,0x962460,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,
-0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,
-0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,
-0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,
-0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,
-0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,
-0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,
-0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,
-0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,
-0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,
-0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,
-0x200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,
-0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,
-0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,
-0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,
-0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,
-0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,
-0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3d11,0x7c00100,0x1230400,
-0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,
-0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406317,0xc000000,0x448000,0x324a3d29,0x4000000,0xe00000,0x324a3d29,0x7c00100,0x1230400,0x324a3f27,0x4000002,
-0x1200c00,0x324a5324,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000,
-0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218820,0x40000c02,0x2802100,0x962460,0x40000c02,
-0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100,
-0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,
-0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,
-0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,
-0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40005a09,0x7c00100,0x220400,
-0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,
-0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,
-0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,
-0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007400,0x4000000,0x200000,0x40007531,
-0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,
-0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,
-0x40023300,0x4000000,0x200000,0x40023700,0x24000000,0xe00000,0x40027d01,0x12882000,0x962460,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,
-0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x4040510e,0x4000000,0x200000,0x40407735,0x4000000,
-0x200000,0x40407735,0x4000000,0x400000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,
-0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,
-0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x6800000,
-0x1329800,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,
-0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,
-0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,
-0x200000,0x41003700,0x24000000,0xe00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,
-0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,
-0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,
-0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,
-0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,
-0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,
-0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000000,0x448000,0x41008a00,0x4000000,0x200000,
-0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x6800100,0x1862400,0x41008b3b,0x6800100,0x1862540,0x41008b3b,0x7c00100,0x1830000,0x41008c3d,
-0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,
-0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,
-0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,
-0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,
-0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,
-0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8224,0x4000000,0xe00000,0x41808300,
-0x2802000,0x962460,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,
-0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,
-0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,
-0x24000000,0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,
-0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,
-0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,
-0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,
-0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,
-0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,
-0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,
-0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50009a00,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,
-0x5100080e,0x7c00100,0x250400,0x51000908,0x2802400,0x962460,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,
-0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,
-0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,
-0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,
-0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,
-0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,
-0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002b01,0x2802000,0x962460,0x51002c00,
-0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700,0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,
-0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,
-0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,
-0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,
-0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,
-0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,
-0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,
-0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,
-0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,
-0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,
-0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,
-0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,
-0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,
-0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,
-0x5100a24f,0x4000400,0x400000,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,
-0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,
-0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,
-0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,
-0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,
-0xe30400,0x510a4711,0x7c40300,0xe30000,0x514a8224,0x4000000,0xe00000,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,
-0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,
-0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,
-0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52003700,0x24000000,0xe00000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,
-0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,
-0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,
-0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,
-0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,
-0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200af00,0x4000400,
-0x200000,0x5200af00,0x7c00100,0x230400,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,
-0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,
-0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,
-0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0x7c00900,0x230400,
-0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,
-0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,
-0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,
-0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,
-0x7c