Merge inbound to central, a=merge
authorWes Kocher <wkocher@mozilla.com>
Fri, 22 Sep 2017 14:56:05 -0700
changeset 382550 3d72fdb0e561ea59d9e5850c3e71367dbb8a7148
parent 382511 61e58a7d800b8a84d3da7c3db977830e206428a3 (current diff)
parent 382549 6ff0f49d6e25827d4615136a0100571acf4b9eac (diff)
child 382551 aefd877abc377d44026bc39855edfbee3e4bcf32
child 382584 24a8c0952711330c79e5c85a57eebb61db075472
child 382602 bec1b493c91e58f9e26e370905e9c2d8fd1ba992
push id51904
push userkwierso@gmail.com
push dateFri, 22 Sep 2017 22:31:17 +0000
treeherderautoland@aefd877abc37 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone58.0a1
first release with
nightly linux32
3d72fdb0e561 / 58.0a1 / 20170922220129 / files
nightly linux64
3d72fdb0e561 / 58.0a1 / 20170922220129 / files
nightly mac
3d72fdb0e561 / 58.0a1 / 20170922220129 / files
nightly win32
3d72fdb0e561 / 58.0a1 / 20170922220129 / files
nightly win64
3d72fdb0e561 / 58.0a1 / 20170922220129 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to central, a=merge MozReview-Commit-ID: 2MDU9VGB9Pg
browser/app/profile/firefox.js
dom/base/crashtests/xhr_abortinprogress.html
gfx/layers/wr/WebRenderBridgeParent.cpp
intl/unicharutil/normalization_data.h
intl/unicharutil/nsUnicodeNormalizer_ICU.cpp
intl/unicharutil/tools/MUTTUCData.txt
intl/unicharutil/tools/UCDATAREADME.txt
intl/unicharutil/tools/data/case.dat
intl/unicharutil/tools/data/cmbcl.dat
intl/unicharutil/tools/data/ctype.dat
intl/unicharutil/tools/data/decomp.dat
intl/unicharutil/tools/data/num.dat
intl/unicharutil/tools/format.txt
intl/unicharutil/tools/moz.build
intl/unicharutil/tools/ucgendat.c
intl/unicharutil/ucdata.c
intl/unicharutil/ucdata.h
js/src/wasm/WasmSignalHandlers.cpp
layout/base/nsBidi_ICU.cpp
layout/base/nsBidi_ICU.h
layout/base/nsBidi_noICU.cpp
layout/base/nsBidi_noICU.h
testing/web-platform/meta/IndexedDB/keypath-special-identifiers.htm.ini
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1025,17 +1025,21 @@ pref("dom.ipc.plugins.sandbox-level.flas
 #endif
 
 #if defined(MOZ_CONTENT_SANDBOX)
 // This controls the strength of the Windows content process sandbox for testing
 // purposes. This will require a restart.
 // On windows these levels are:
 // See - security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp
 // SetSecurityLevelForContentProcess() for what the different settings mean.
+#if defined(NIGHTLY_BUILD)
 pref("security.sandbox.content.level", 4);
+#else
+pref("security.sandbox.content.level", 3);
+#endif
 
 // This controls the depth of stack trace that is logged when Windows sandbox
 // logging is turned on.  This is only currently available for the content
 // process because the only other sandbox (for GMP) has too strict a policy to
 // allow stack tracing.  This does not require a restart to take effect.
 pref("security.sandbox.windows.log.stackTraceDepth", 0);
 #endif
 
--- a/browser/base/content/sanitize.js
+++ b/browser/base/content/sanitize.js
@@ -308,17 +308,17 @@ Sanitizer.prototype = {
         let promises = [];
         await new Promise(resolve => {
           quotaManagerService.getUsage(request => {
             for (let item of request.result) {
               let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
               let uri = principal.URI;
               if (uri.scheme == "http" || uri.scheme == "https" || uri.scheme == "file") {
                 promises.push(new Promise(r => {
-                  let req = quotaManagerService.clearStoragesForPrincipal(principal, null, true);
+                  let req = quotaManagerService.clearStoragesForPrincipal(principal, null, false);
                   req.callback = () => { r(); };
                 }));
               }
             }
             resolve();
           });
         });
 
--- a/browser/components/extensions/ext-browsingData.js
+++ b/browser/components/extensions/ext-browsingData.js
@@ -88,17 +88,17 @@ const clearIndexedDB = async function(op
 
   await new Promise(resolve => {
     quotaManagerService.getUsage(request => {
       for (let item of request.result) {
         let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
         let uri = principal.URI;
         if (uri.scheme == "http" || uri.scheme == "https" || uri.scheme == "file") {
           promises.push(new Promise(r => {
-            let req = quotaManagerService.clearStoragesForPrincipal(principal, null, true);
+            let req = quotaManagerService.clearStoragesForPrincipal(principal, null, false);
             req.callback = () => { r(); };
           }));
         }
       }
 
       resolve();
     });
   });
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -1606,16 +1606,17 @@ nsDocShell::LoadURI(nsIURI* aURI,
                       referrerPolicy,
                       triggeringPrincipal,
                       principalToInherit,
                       flags,
                       target,
                       nullptr,      // No type hint
                       VoidString(), // No forced download
                       postStream,
+                      -1, // XXXbaku
                       headersStream,
                       loadType,
                       nullptr, // No SHEntry
                       aFirstParty,
                       srcdoc,
                       sourceDocShell,
                       baseURI,
                       false,
@@ -5483,19 +5484,19 @@ nsDocShell::LoadErrorPage(nsIURI* aURI, 
   nsCOMPtr<nsIURI> errorPageURI;
   nsresult rv = NS_NewURI(getter_AddRefs(errorPageURI), errorPageUrl);
   NS_ENSURE_SUCCESS(rv, rv);
 
   return InternalLoad(errorPageURI, nullptr, Nothing(), false, nullptr,
                       mozilla::net::RP_Unset,
                       nsContentUtils::GetSystemPrincipal(), nullptr,
                       INTERNAL_LOAD_FLAGS_NONE, EmptyString(),
-                      nullptr, VoidString(), nullptr, nullptr, LOAD_ERROR_PAGE,
-                      nullptr, true, VoidString(), this, nullptr, false,
-                      nullptr, nullptr);
+                      nullptr, VoidString(), nullptr, -1, nullptr,
+                      LOAD_ERROR_PAGE, nullptr, true, VoidString(), this,
+                      nullptr, false, nullptr, nullptr);
 }
 
 NS_IMETHODIMP
 nsDocShell::Reload(uint32_t aReloadFlags)
 {
   if (!IsNavigationAllowed()) {
     return NS_OK; // JS may not handle returning of an error code
   }
@@ -5586,16 +5587,17 @@ nsDocShell::Reload(uint32_t aReloadFlags
                       referrerPolicy,
                       triggeringPrincipal,
                       triggeringPrincipal,
                       flags,
                       EmptyString(),   // No window target
                       NS_LossyConvertUTF16toASCII(contentTypeHint).get(),
                       VoidString(),    // No forced download
                       nullptr,         // No post data
+                      -1,              // No post data length
                       nullptr,         // No headers data
                       loadType,        // Load type
                       nullptr,         // No SHEntry
                       true,
                       srcdoc,          // srcdoc argument for iframe
                       this,            // For reloads we are the source
                       baseURI,
                       false,
@@ -9704,16 +9706,17 @@ public:
                     Maybe<nsCOMPtr<nsIURI>> const& aResultPrincipalURI,
                     bool aLoadReplace,
                     nsIURI* aReferrer, uint32_t aReferrerPolicy,
                     nsIPrincipal* aTriggeringPrincipal,
                     nsIPrincipal* aPrincipalToInherit,
                     uint32_t aFlags,
                     const char* aTypeHint,
                     nsIInputStream* aPostData,
+                    int64_t aPostDataLength,
                     nsIInputStream* aHeadersData,
                     uint32_t aLoadType,
                     nsISHEntry* aSHEntry,
                     bool aFirstParty,
                     const nsAString& aSrcdoc,
                     nsIDocShell* aSourceDocShell,
                     nsIURI* aBaseURI,
                     bool aCheckForPrerender)
@@ -9724,16 +9727,17 @@ public:
     , mOriginalURI(aOriginalURI)
     , mResultPrincipalURI(aResultPrincipalURI)
     , mLoadReplace(aLoadReplace)
     , mReferrer(aReferrer)
     , mReferrerPolicy(aReferrerPolicy)
     , mTriggeringPrincipal(aTriggeringPrincipal)
     , mPrincipalToInherit(aPrincipalToInherit)
     , mPostData(aPostData)
+    , mPostDataLength(aPostDataLength)
     , mHeadersData(aHeadersData)
     , mSHEntry(aSHEntry)
     , mFlags(aFlags)
     , mLoadType(aLoadType)
     , mFirstParty(aFirstParty)
     , mSourceDocShell(aSourceDocShell)
     , mBaseURI(aBaseURI)
     , mCheckForPrerender(aCheckForPrerender)
@@ -9752,36 +9756,38 @@ public:
     return mDocShell->InternalLoad(mURI, mOriginalURI, mResultPrincipalURI,
                                    mLoadReplace,
                                    mReferrer,
                                    mReferrerPolicy,
                                    mTriggeringPrincipal, mPrincipalToInherit,
                                    mFlags, EmptyString(),
                                    mTypeHint.IsVoid() ? nullptr
                                                       : mTypeHint.get(),
-                                   VoidString(), mPostData, mHeadersData,
-                                   mLoadType, mSHEntry, mFirstParty,
-                                   mSrcdoc, mSourceDocShell, mBaseURI,
-                                   mCheckForPrerender, nullptr, nullptr);
+                                   VoidString(), mPostData, mPostDataLength,
+                                   mHeadersData, mLoadType, mSHEntry,
+                                   mFirstParty, mSrcdoc, mSourceDocShell,
+                                   mBaseURI, mCheckForPrerender, nullptr,
+                                   nullptr);
   }
 
 private:
   nsCString mTypeHint;
   nsString mSrcdoc;
 
   RefPtr<nsDocShell> mDocShell;
   nsCOMPtr<nsIURI> mURI;
   nsCOMPtr<nsIURI> mOriginalURI;
   Maybe<nsCOMPtr<nsIURI>> mResultPrincipalURI;
   bool mLoadReplace;
   nsCOMPtr<nsIURI> mReferrer;
   uint32_t mReferrerPolicy;
   nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
   nsCOMPtr<nsIPrincipal> mPrincipalToInherit;
   nsCOMPtr<nsIInputStream> mPostData;
+  int64_t mPostDataLength;
   nsCOMPtr<nsIInputStream> mHeadersData;
   nsCOMPtr<nsISHEntry> mSHEntry;
   uint32_t mFlags;
   uint32_t mLoadType;
   bool mFirstParty;
   nsCOMPtr<nsIDocShell> mSourceDocShell;
   nsCOMPtr<nsIURI> mBaseURI;
   bool mCheckForPrerender;
@@ -9823,16 +9829,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
                          uint32_t aReferrerPolicy,
                          nsIPrincipal* aTriggeringPrincipal,
                          nsIPrincipal* aPrincipalToInherit,
                          uint32_t aFlags,
                          const nsAString& aWindowTarget,
                          const char* aTypeHint,
                          const nsAString& aFileName,
                          nsIInputStream* aPostData,
+                         int64_t aPostDataLength,
                          nsIInputStream* aHeadersData,
                          uint32_t aLoadType,
                          nsISHEntry* aSHEntry,
                          bool aFirstParty,
                          const nsAString& aSrcdoc,
                          nsIDocShell* aSourceDocShell,
                          nsIURI* aBaseURI,
                          bool aCheckForPrerender,
@@ -10223,16 +10230,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
                                         aReferrerPolicy,
                                         aTriggeringPrincipal,
                                         principalToInherit,
                                         aFlags,
                                         EmptyString(),   // No window target
                                         aTypeHint,
                                         VoidString(),    // No forced download
                                         aPostData,
+                                        aPostDataLength,
                                         aHeadersData,
                                         aLoadType,
                                         aSHEntry,
                                         aFirstParty,
                                         aSrcdoc,
                                         aSourceDocShell,
                                         aBaseURI,
                                         aCheckForPrerender,
@@ -10314,19 +10322,19 @@ nsDocShell::InternalLoad(nsIURI* aURI,
         mLoadType = LOAD_NORMAL_REPLACE;
       }
 
       // Do this asynchronously
       nsCOMPtr<nsIRunnable> ev =
         new InternalLoadEvent(this, aURI, aOriginalURI, aResultPrincipalURI,
                               aLoadReplace, aReferrer, aReferrerPolicy,
                               aTriggeringPrincipal, principalToInherit,
-                              aFlags, aTypeHint, aPostData, aHeadersData,
-                              aLoadType, aSHEntry, aFirstParty, aSrcdoc,
-                              aSourceDocShell, aBaseURI, false);
+                              aFlags, aTypeHint, aPostData, aPostDataLength,
+                              aHeadersData, aLoadType, aSHEntry, aFirstParty,
+                              aSrcdoc, aSourceDocShell, aBaseURI, false);
       return DispatchToTabGroup(TaskCategory::Other, ev.forget());
     }
 
     // Just ignore this load attempt
     return NS_OK;
   }
 
   // If a source docshell has been passed, check to see if we are sandboxed
@@ -10700,19 +10708,19 @@ nsDocShell::InternalLoad(nsIURI* aURI,
     }
   }
 
   if (browserChrome3 && aCheckForPrerender) {
     nsCOMPtr<nsIRunnable> ev =
       new InternalLoadEvent(this, aURI, aOriginalURI, aResultPrincipalURI,
                             aLoadReplace, aReferrer, aReferrerPolicy,
                             aTriggeringPrincipal, principalToInherit,
-                            aFlags, aTypeHint, aPostData, aHeadersData,
-                            aLoadType, aSHEntry, aFirstParty, aSrcdoc,
-                            aSourceDocShell, aBaseURI, false);
+                            aFlags, aTypeHint, aPostData, aPostDataLength,
+                            aHeadersData, aLoadType, aSHEntry, aFirstParty,
+                            aSrcdoc, aSourceDocShell, aBaseURI, false);
     // We don't need any success handler since in that case
     // OnPartialSHistoryDeactive would be called, and it would ensure
     // docshell loads about:blank.
     bool shouldSwitch = false;
     rv = browserChrome3->ShouldSwitchToPrerenderedDocument(
       aURI, mCurrentURI, nullptr, ev, &shouldSwitch);
     if (NS_SUCCEEDED(rv) && shouldSwitch) {
       return NS_OK;
@@ -10853,17 +10861,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
                         nsINetworkPredictor::PREDICT_LOAD, attrs, nullptr);
 
   nsCOMPtr<nsIRequest> req;
   rv = DoURILoad(aURI, aOriginalURI, aResultPrincipalURI, aLoadReplace,
                  loadFromExternal, aReferrer,
                  !(aFlags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER),
                  aReferrerPolicy,
                  aTriggeringPrincipal, principalToInherit, aTypeHint,
-                 aFileName, aPostData, aHeadersData,
+                 aFileName, aPostData, aPostDataLength, aHeadersData,
                  aFirstParty, aDocShell, getter_AddRefs(req),
                  (aFlags & INTERNAL_LOAD_FLAGS_FIRST_LOAD) != 0,
                  (aFlags & INTERNAL_LOAD_FLAGS_BYPASS_CLASSIFIER) != 0,
                  (aFlags & INTERNAL_LOAD_FLAGS_FORCE_ALLOW_COOKIES) != 0,
                  srcdoc, aBaseURI, contentType);
   if (req && aRequest) {
     NS_ADDREF(*aRequest = req);
   }
@@ -10995,16 +11003,17 @@ nsDocShell::DoURILoad(nsIURI* aURI,
                       nsIURI* aReferrerURI,
                       bool aSendReferrer,
                       uint32_t aReferrerPolicy,
                       nsIPrincipal* aTriggeringPrincipal,
                       nsIPrincipal* aPrincipalToInherit,
                       const char* aTypeHint,
                       const nsAString& aFileName,
                       nsIInputStream* aPostData,
+                      int64_t aPostDataLength,
                       nsIInputStream* aHeadersData,
                       bool aFirstParty,
                       nsIDocShell** aDocShell,
                       nsIRequest** aRequest,
                       bool aIsNewWindowTarget,
                       bool aBypassClassifier,
                       bool aForceAllowCookies,
                       const nsAString& aSrcdoc,
@@ -11421,17 +11430,17 @@ nsDocShell::DoURILoad(nsIURI* aURI,
       nsCOMPtr<nsISeekableStream> postDataSeekable =
         do_QueryInterface(aPostData);
       if (postDataSeekable) {
         rv = postDataSeekable->Seek(nsISeekableStream::NS_SEEK_SET, 0);
         NS_ENSURE_SUCCESS(rv, rv);
       }
 
       // we really need to have a content type associated with this stream!!
-      postChannel->SetUploadStream(aPostData, EmptyCString(), -1);
+      postChannel->SetUploadStream(aPostData, EmptyCString(), aPostDataLength);
     }
 
     /* If there is a valid postdata *and* it is a History Load,
      * set up the cache key on the channel, to retrieve the
      * data *only* from the cache. If it is a normal reload, the
      * cache is free to go to the server for updated postdata.
      */
     if (cacheChannel && cacheKey) {
@@ -12881,16 +12890,17 @@ nsDocShell::LoadHistoryEntry(nsISHEntry*
                     referrerPolicy,
                     triggeringPrincipal,
                     principalToInherit,
                     flags,
                     EmptyString(),      // No window target
                     contentType.get(),  // Type hint
                     VoidString(),       // No forced file download
                     postData,           // Post data stream
+                    -1,                 // Post data stream length
                     nullptr,            // No headers stream
                     aLoadType,          // Load type
                     aEntry,             // SHEntry
                     true,
                     srcdoc,
                     nullptr,            // Source docshell, see comment above
                     baseURI,
                     false,
@@ -14170,16 +14180,17 @@ nsDocShell::SelectNone(void)
 class OnLinkClickEvent : public Runnable
 {
 public:
   OnLinkClickEvent(nsDocShell* aHandler, nsIContent* aContent,
                    nsIURI* aURI,
                    const char16_t* aTargetSpec,
                    const nsAString& aFileName,
                    nsIInputStream* aPostDataStream,
+                   int64_t aPostDataStreamLength,
                    nsIInputStream* aHeadersDataStream,
                    bool aNoOpenerImplied,
                    bool aIsTrusted,
                    nsIPrincipal* aTriggeringPrincipal);
 
   NS_IMETHOD Run() override
   {
     nsAutoPopupStatePusher popupStatePusher(mPopupState);
@@ -14188,68 +14199,72 @@ public:
     // OnLinkClickSync we'll eventually end up in nsGlobalWindow::OpenInternal
     // which only does popup blocking if !LegacyIsCallerChromeOrNativeCode().
     // So we need to fake things so that we don't look like native code as far
     // as LegacyIsCallerNativeCode() is concerned.
     AutoJSAPI jsapi;
     if (mIsTrusted || jsapi.Init(mContent->OwnerDoc()->GetScopeObject())) {
       mHandler->OnLinkClickSync(mContent, mURI,
                                 mTargetSpec.get(), mFileName,
-                                mPostDataStream, mHeadersDataStream,
-                                mNoOpenerImplied,
+                                mPostDataStream, mPostDataStreamLength,
+                                mHeadersDataStream, mNoOpenerImplied,
                                 nullptr, nullptr, mTriggeringPrincipal);
     }
     return NS_OK;
   }
 
 private:
   RefPtr<nsDocShell> mHandler;
   nsCOMPtr<nsIURI> mURI;
   nsString mTargetSpec;
   nsString mFileName;
   nsCOMPtr<nsIInputStream> mPostDataStream;
+  int64_t mPostDataStreamLength;
   nsCOMPtr<nsIInputStream> mHeadersDataStream;
   nsCOMPtr<nsIContent> mContent;
   PopupControlState mPopupState;
   bool mNoOpenerImplied;
   bool mIsTrusted;
   nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
 };
 
 OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
                                    nsIContent* aContent,
                                    nsIURI* aURI,
                                    const char16_t* aTargetSpec,
                                    const nsAString& aFileName,
                                    nsIInputStream* aPostDataStream,
+                                   int64_t aPostDataStreamLength,
                                    nsIInputStream* aHeadersDataStream,
                                    bool aNoOpenerImplied,
                                    bool aIsTrusted,
                                    nsIPrincipal* aTriggeringPrincipal)
   : mozilla::Runnable("OnLinkClickEvent")
   , mHandler(aHandler)
   , mURI(aURI)
   , mTargetSpec(aTargetSpec)
   , mFileName(aFileName)
   , mPostDataStream(aPostDataStream)
+  , mPostDataStreamLength(aPostDataStreamLength)
   , mHeadersDataStream(aHeadersDataStream)
   , mContent(aContent)
   , mPopupState(mHandler->mScriptGlobal->GetPopupControlState())
   , mNoOpenerImplied(aNoOpenerImplied)
   , mIsTrusted(aIsTrusted)
   , mTriggeringPrincipal(aTriggeringPrincipal)
 {
 }
 
 NS_IMETHODIMP
 nsDocShell::OnLinkClick(nsIContent* aContent,
                         nsIURI* aURI,
                         const char16_t* aTargetSpec,
                         const nsAString& aFileName,
                         nsIInputStream* aPostDataStream,
+                        int64_t aPostDataStreamLength,
                         nsIInputStream* aHeadersDataStream,
                         bool aIsTrusted,
                         nsIPrincipal* aTriggeringPrincipal)
 {
   NS_ASSERTION(NS_IsMainThread(), "wrong thread");
 
   if (!IsNavigationAllowed() || !IsOKToLoadURI(aURI)) {
     return NS_OK;
@@ -14285,27 +14300,29 @@ nsDocShell::OnLinkClick(nsIContent* aCon
   }
 
   if (NS_FAILED(rv)) {
     target = aTargetSpec;
   }
 
   nsCOMPtr<nsIRunnable> ev =
     new OnLinkClickEvent(this, aContent, aURI, target.get(), aFileName,
-                         aPostDataStream, aHeadersDataStream, noOpenerImplied,
+                         aPostDataStream, aPostDataStreamLength,
+                         aHeadersDataStream, noOpenerImplied,
                          aIsTrusted, aTriggeringPrincipal);
   return DispatchToTabGroup(TaskCategory::UI, ev.forget());
 }
 
 NS_IMETHODIMP
 nsDocShell::OnLinkClickSync(nsIContent* aContent,
                             nsIURI* aURI,
                             const char16_t* aTargetSpec,
                             const nsAString& aFileName,
                             nsIInputStream* aPostDataStream,
+                            int64_t aPostDataStreamLength,
                             nsIInputStream* aHeadersDataStream,
                             bool aNoOpenerImplied,
                             nsIDocShell** aDocShell,
                             nsIRequest** aRequest,
                             nsIPrincipal* aTriggeringPrincipal)
 {
   // Initialize the DocShell / Request
   if (aDocShell) {
@@ -14445,16 +14462,17 @@ nsDocShell::OnLinkClickSync(nsIContent* 
                              refererPolicy,             // Referer policy
                              triggeringPrincipal,
                              aContent->NodePrincipal(),
                              flags,
                              target,                    // Window target
                              NS_LossyConvertUTF16toASCII(typeHint).get(),
                              aFileName,                 // Download as file
                              aPostDataStream,           // Post data stream
+                             aPostDataStreamLength,     // Post data stream length
                              aHeadersDataStream,        // Headers stream
                              LOAD_LINK,                 // Load type
                              nullptr,                   // No SHEntry
                              true,                      // first party site
                              VoidString(),              // No srcdoc
                              this,                      // We are the source
                              nullptr,                   // baseURI not needed
                              true,                      // Check for prerendered doc
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -205,24 +205,26 @@ public:
   NS_FORWARD_NSISECURITYEVENTSINK(nsDocLoader::)
 
   // nsILinkHandler
   NS_IMETHOD OnLinkClick(nsIContent* aContent,
                          nsIURI* aURI,
                          const char16_t* aTargetSpec,
                          const nsAString& aFileName,
                          nsIInputStream* aPostDataStream,
+                         int64_t aPostDataStreamLength,
                          nsIInputStream* aHeadersDataStream,
                          bool aIsTrusted,
                          nsIPrincipal* aTriggeringPrincipal) override;
   NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
                              nsIURI* aURI,
                              const char16_t* aTargetSpec,
                              const nsAString& aFileName,
                              nsIInputStream* aPostDataStream = 0,
+                             int64_t aPostDataStreamLength = -1,
                              nsIInputStream* aHeadersDataStream = 0,
                              bool aNoOpenerImplied = false,
                              nsIDocShell** aDocShell = 0,
                              nsIRequest** aRequest = 0,
                              nsIPrincipal* aTriggeringPrincipal = nullptr) override;
   NS_IMETHOD OnOverLink(nsIContent* aContent,
                         nsIURI* aURI,
                         const char16_t* aTargetSpec) override;
@@ -430,16 +432,17 @@ protected:
                      nsIURI* aReferrer,
                      bool aSendReferrer,
                      uint32_t aReferrerPolicy,
                      nsIPrincipal* aTriggeringPrincipal,
                      nsIPrincipal* aPrincipalToInherit,
                      const char* aTypeHint,
                      const nsAString& aFileName,
                      nsIInputStream* aPostData,
+                     int64_t aPostDataLength,
                      nsIInputStream* aHeadersData,
                      bool aFirstParty,
                      nsIDocShell** aDocShell,
                      nsIRequest** aRequest,
                      bool aIsNewWindowTarget,
                      bool aBypassClassifier,
                      bool aForceAllowCookies,
                      const nsAString& aSrcdoc,
--- a/docshell/base/nsIDocShell.idl
+++ b/docshell/base/nsIDocShell.idl
@@ -168,16 +168,18 @@ interface nsIDocShell : nsIDocShellTreeI
    * @param aStopActiveDoc       - Flag indicating whether loading the current
    *                               document should be stopped.
    * @param aWindowTarget        - Window target for the load.
    * @param aTypeHint            - A hint as to the content-type of the resulting
    *                               data.  May be null or empty if no hint.
    * @param aFileName            - Non-null when the link should be downloaded as
                                    the given filename.
    * @param aPostDataStream      - Post data stream (if POSTing)
+   * @param aPostDataStreamLength - Post data stream length. Use -1 if the length
+                                    of the stream is unknown.
    * @param aHeadersStream       - Stream containing "extra" request headers...
    * @param aLoadFlags           - Flags to modify load behaviour. Flags are defined
    *                               in nsIWebNavigation.
    * @param aSHEntry             - Active Session History entry (if loading from SH)
    * @param aSrcdoc                When INTERNAL_LOAD_FLAGS_IS_SRCDOC is set, the
    *                               contents of this parameter will be loaded instead
    *                               of aURI.
    * @param aSourceDocShell      - The source browsing context for the navigation.
@@ -193,16 +195,17 @@ interface nsIDocShell : nsIDocShellTreeI
                               in unsigned long aReferrerPolicy,
                               in nsIPrincipal aTriggeringPrincipal,
                               in nsIPrincipal aPrincipalToInherit,
                               in uint32_t aFlags,
                               in AString aWindowTarget,
                               in string aTypeHint,
                               in AString aFileName,
                               in nsIInputStream aPostDataStream,
+                              in long long aPostDataStreamLength,
                               in nsIInputStream aHeadersStream,
                               in unsigned long aLoadFlags,
                               in nsISHEntry aSHEntry,
                               in boolean aFirstParty,
                               in AString aSrcdoc,
                               in nsIDocShell aSourceDocShell,
                               in nsIURI aBaseURI,
                               in boolean aCheckForPrerender,
--- a/docshell/base/nsILinkHandler.h
+++ b/docshell/base/nsILinkHandler.h
@@ -28,56 +28,61 @@ public:
 
   /**
    * Process a click on a link.
    *
    * @param aContent the content for the frame that generated the trigger
    * @param aURI a URI object that defines the destination for the link
    * @param aTargetSpec indicates where the link is targeted (may be an empty
    *        string)
+   * @param aFileName non-null when the link should be downloaded as the given file
    * @param aPostDataStream the POST data to send
-   * @param aFileName non-null when the link should be downloaded as the given file
+   * @param aPostDataStreamLength the POST data length. Use -1 if the length is
+   *        unknown.
    * @param aHeadersDataStream ???
    * @param aIsTrusted false if the triggerer is an untrusted DOM event.
    * @param aTriggeringPrincipal, if not passed explicitly we fall back to
    *        the document's principal.
    */
   NS_IMETHOD OnLinkClick(nsIContent* aContent,
                          nsIURI* aURI,
                          const char16_t* aTargetSpec,
                          const nsAString& aFileName,
                          nsIInputStream* aPostDataStream,
+                         int64_t aPostDataStreamLength,
                          nsIInputStream* aHeadersDataStream,
                          bool aIsTrusted,
                          nsIPrincipal* aTriggeringPrincipal) = 0;
 
   /**
    * Process a click on a link.
    *
    * Works the same as OnLinkClick() except it happens immediately rather than
    * through an event.
    *
    * @param aContent the content for the frame that generated the trigger
    * @param aURI a URI obect that defines the destination for the link
    * @param aTargetSpec indicates where the link is targeted (may be an empty
    *        string)
    * @param aFileName non-null when the link should be downloaded as the given file
    * @param aPostDataStream the POST data to send
+   * @param aPostDataStreamLength the POST data length
    * @param aHeadersDataStream ???
    * @param aNoOpenerImplied if the link implies "noopener"
    * @param aDocShell (out-param) the DocShell that the request was opened on
    * @param aRequest the request that was opened
    * @param aTriggeringPrincipal, if not passed explicitly we fall back to
    *        the document's principal.
    */
   NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
                              nsIURI* aURI,
                              const char16_t* aTargetSpec,
                              const nsAString& aFileName,
                              nsIInputStream* aPostDataStream = 0,
+                             int64_t aPostDataStreamLength = -1,
                              nsIInputStream* aHeadersDataStream = 0,
                              bool aNoOpenerImplied = false,
                              nsIDocShell** aDocShell = 0,
                              nsIRequest** aRequest = 0,
                              nsIPrincipal* aTriggeringPrincipal = nullptr) = 0;
 
   /**
    * Process a mouse-over a link.
--- a/dom/base/FormData.cpp
+++ b/dom/base/FormData.cpp
@@ -98,17 +98,18 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(
   NS_INTERFACE_MAP_ENTRY(nsIXHRSendable)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMFormData)
 NS_INTERFACE_MAP_END
 
 // -------------------------------------------------------------------------
 // HTMLFormSubmission
 nsresult
 FormData::GetEncodedSubmission(nsIURI* aURI,
-                               nsIInputStream** aPostDataStream)
+                               nsIInputStream** aPostDataStream,
+                               int64_t* aPostDataStreamLength)
 {
   NS_NOTREACHED("Shouldn't call FormData::GetEncodedSubmission");
   return NS_OK;
 }
 
 void
 FormData::Append(const nsAString& aName, const nsAString& aValue,
                  ErrorResult& aRv)
--- a/dom/base/FormData.h
+++ b/dom/base/FormData.h
@@ -108,17 +108,18 @@ public:
   uint32_t GetIterableLength() const;
 
   const nsAString& GetKeyAtIndex(uint32_t aIndex) const;
 
   const OwningBlobOrDirectoryOrUSVString& GetValueAtIndex(uint32_t aIndex) const;
 
   // HTMLFormSubmission
   virtual nsresult
-  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream) override;
+  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream,
+                       int64_t* aPostDataStreamLength) override;
 
   virtual nsresult AddNameValuePair(const nsAString& aName,
                                     const nsAString& aValue) override
   {
     FormDataTuple* data = mFormData.AppendElement();
     SetNameValuePair(data, aName, aValue);
     return NS_OK;
   }
--- a/dom/base/crashtests/crashtests.list
+++ b/dom/base/crashtests/crashtests.list
@@ -212,15 +212,14 @@ pref(dom.webcomponents.enabled,true) loa
 pref(dom.IntersectionObserver.enabled,true) load 1353529.xul
 load 1368327.html
 pref(dom.IntersectionObserver.enabled,true) load 1369363.xul
 load 1370072.html
 pref(clipboard.autocopy,true) load 1370737.html
 pref(dom.IntersectionObserver.enabled,true) load 1370968.html
 load 1377826.html
 skip-if(stylo&&isDebugBuild&&winWidget) load structured_clone_container_throws.html # Bug 1383845
-HTTP(..) load xhr_abortinprogress.html
 load xhr_empty_datauri.html
 load xhr_html_nullresponse.html
 load 1383478.html
 load 1383780.html
 pref(clipboard.autocopy,true) load 1385272-1.html
 load 1393806.html
deleted file mode 100644
--- a/dom/base/crashtests/xhr_abortinprogress.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html class="reftest-wait">
-<meta charset=UTF-8>
-<script>"use strict";
-(function(){
-  var req = new XMLHttpRequest();
-  req.open('GET', '?' + Date.now());
-  req.responseType = 'moz-blob';
-  var b = null;
-  req.onprogress = function(e) {
-    b = req.response;
-  };
-  req.onreadystatechange = function(e) {
-    if (req.readyState == 3) {
-      req.abort();
-    }
-    if (req.readyState == 4) {
-      document.documentElement.removeAttribute('class');
-    }
-  };
-  req.send();
-})();
-</script>
--- a/dom/base/domerr.msg
+++ b/dom/base/domerr.msg
@@ -156,11 +156,11 @@ DOM4_MSG_DEF(SyntaxError, "The URI is ma
 DOM4_MSG_DEF(SyntaxError, "Invalid header name.", NS_ERROR_DOM_INVALID_HEADER_NAME)
 
 /* XMLHttpRequest errors. */
 DOM4_MSG_DEF(InvalidStateError, "XMLHttpRequest has an invalid context.", NS_ERROR_DOM_INVALID_STATE_XHR_HAS_INVALID_CONTEXT)
 DOM4_MSG_DEF(InvalidStateError, "XMLHttpRequest state must be OPENED.", NS_ERROR_DOM_INVALID_STATE_XHR_MUST_BE_OPENED)
 DOM4_MSG_DEF(InvalidStateError, "XMLHttpRequest must not be sending.", NS_ERROR_DOM_INVALID_STATE_XHR_MUST_NOT_BE_SENDING)
 DOM4_MSG_DEF(InvalidStateError, "XMLHttpRequest state must not be LOADING or DONE.", NS_ERROR_DOM_INVALID_STATE_XHR_MUST_NOT_BE_LOADING_OR_DONE)
 DOM4_MSG_DEF(InvalidStateError, "responseXML is only available if responseType is '' or 'document'.", NS_ERROR_DOM_INVALID_STATE_XHR_HAS_WRONG_RESPONSETYPE_FOR_RESPONSEXML)
-DOM4_MSG_DEF(InvalidStateError, "responseText is only available if responseType is '', 'document', or 'moz-chunked-text'.", NS_ERROR_DOM_INVALID_STATE_XHR_HAS_WRONG_RESPONSETYPE_FOR_RESPONSETEXT)
-DOM4_MSG_DEF(InvalidStateError, "synchronous XMLHttpRequests do not support 'moz-chunked-text' or 'moz-chunked-arraybuffer' responseType.", NS_ERROR_DOM_INVALID_STATE_XHR_CHUNKED_RESPONSETYPES_UNSUPPORTED_FOR_SYNC)
+DOM4_MSG_DEF(InvalidStateError, "responseText is only available if responseType is '' or 'document'.", NS_ERROR_DOM_INVALID_STATE_XHR_HAS_WRONG_RESPONSETYPE_FOR_RESPONSETEXT)
+DOM4_MSG_DEF(InvalidStateError, "synchronous XMLHttpRequests do not support 'moz-chunked-arraybuffer' responseType.", NS_ERROR_DOM_INVALID_STATE_XHR_CHUNKED_RESPONSETYPES_UNSUPPORTED_FOR_SYNC)
 DOM4_MSG_DEF(InvalidAccessError, "synchronous XMLHttpRequests do not support timeout and responseType.", NS_ERROR_DOM_INVALID_ACCESS_XHR_TIMEOUT_AND_RESPONSETYPE_UNSUPPORTED_FOR_SYNC)
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -5545,17 +5545,18 @@ nsContentUtils::TriggerLink(nsIContent *
          !aContent->IsSVGElement(nsGkAtoms::a)) ||
         !aContent->GetAttr(kNameSpaceID_None, nsGkAtoms::download, fileName) ||
         NS_FAILED(aContent->NodePrincipal()->CheckMayLoad(aLinkURI, false, true))) {
       fileName.SetIsVoid(true); // No actionable download attribute was found.
     }
 
     handler->OnLinkClick(aContent, aLinkURI,
                          fileName.IsVoid() ? aTargetSpec.get() : EmptyString().get(),
-                         fileName, nullptr, nullptr, aIsTrusted, aContent->NodePrincipal());
+                         fileName, nullptr, -1, nullptr, aIsTrusted,
+                         aContent->NodePrincipal());
   }
 }
 
 /* static */
 void
 nsContentUtils::GetLinkLocation(Element* aElement, nsString& aLocationString)
 {
   nsCOMPtr<nsIURI> hrefURI = aElement->GetHrefURI();
--- a/dom/events/test/pointerevents/mochitest.ini
+++ b/dom/events/test/pointerevents/mochitest.ini
@@ -82,16 +82,18 @@ support-files =
 [test_pointerevent_releasepointercapture_invalid_pointerid-manual.html]
   support-files = pointerevent_releasepointercapture_invalid_pointerid-manual.html
 [test_pointerevent_releasepointercapture_onpointercancel_touch-manual.html]
   support-files = pointerevent_releasepointercapture_onpointercancel_touch-manual.html
 [test_pointerevent_releasepointercapture_onpointerup_mouse-manual.html]
   support-files = pointerevent_releasepointercapture_onpointerup_mouse-manual.html
 [test_pointerevent_releasepointercapture_release_right_after_capture-manual.html]
   support-files = pointerevent_releasepointercapture_release_right_after_capture-manual.html
+[test_pointerevent_sequence_at_implicit_release_on_drag-manual.html]
+  support-files = pointerevent_sequence_at_implicit_release_on_drag-manual.html
 [test_pointerevent_setpointercapture_disconnected-manual.html]
   support-files = pointerevent_setpointercapture_disconnected-manual.html
 [test_pointerevent_setpointercapture_inactive_button_mouse-manual.html]
   support-files = pointerevent_setpointercapture_inactive_button_mouse-manual.html
 [test_pointerevent_setpointercapture_invalid_pointerid-manual.html]
   support-files = pointerevent_setpointercapture_invalid_pointerid-manual.html
 [test_pointerevent_setpointercapture_override_pending_capture_element-manual.html]
   support-files = pointerevent_setpointercapture_override_pending_capture_element-manual.html
--- a/dom/events/test/pointerevents/mochitest_support_external.js
+++ b/dom/events/test/pointerevents/mochitest_support_external.js
@@ -181,16 +181,17 @@ function sendTouchEvent(int_win, elemId,
     };
 
     // Update touch state
     switch(touchEventType) {
       case "touchstart":
         TouchEventHelper.TOUCH_STATE = true; // Set touch flag.
         break;
       case "touchend":
+      case "touchcancel":
         TouchEventHelper.TOUCH_STATE = false; // Clear touch flag.
         break;
     }
 
     // Default to the center of the target element but we can still send to a
     // position outside of the target element.
     var offsetX = params && "offsetX" in params ? params.offsetX : rect.width / 2;
     var offsetY = params && "offsetY" in params ? params.offsetY : rect.height / 2;
new file mode 100644
--- /dev/null
+++ b/dom/events/test/pointerevents/test_pointerevent_sequence_at_implicit_release_on_drag-manual.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>W3C pointerevent_sequence_at_implicit_release_on_drag-manual.html in Mochitest form</title>
+    <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+    <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+    <script type="text/javascript" src="mochitest_support_external.js"></script>
+    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+    <script type="text/javascript">
+      SimpleTest.waitForExplicitFinish();
+      function startTest() {
+        runTestInNewWindow("pointerevent_sequence_at_implicit_release_on_drag-manual.html");
+      }
+      function executeTest(int_win) {
+        sendTouchEvent(int_win, "target", "touchstart");
+        sendTouchEvent(int_win, "target", "touchmove");
+        sendTouchEvent(int_win, "target", "touchmove");
+        sendTouchEvent(int_win, "target", "touchcancel");
+        sendMouseEvent(int_win, "done", "mousedown");
+        sendMouseEvent(int_win, "done", "mouseup");
+      }
+    </script>
+  </head>
+  <body>
+  </body>
+</html>
--- a/dom/file/ipc/IPCBlobInputStream.cpp
+++ b/dom/file/ipc/IPCBlobInputStream.cpp
@@ -157,31 +157,23 @@ IPCBlobInputStream::~IPCBlobInputStream(
 
 // nsIInputStream interface
 
 NS_IMETHODIMP
 IPCBlobInputStream::Available(uint64_t* aLength)
 {
   // We don't have a remoteStream yet. Let's return the full known size.
   if (mState == eInit || mState == ePending) {
-    *aLength = mLength;
+    *aLength = 0;
     return NS_OK;
   }
 
   if (mState == eRunning) {
     MOZ_ASSERT(mRemoteStream || mAsyncRemoteStream);
 
-    // This will go away eventually: an async input stream can return 0 in
-    // Available(), but this is not currently fully supported in the rest of
-    // gecko.
-    if (!mAsyncRemoteStream) {
-      *aLength = mLength;
-      return NS_OK;
-    }
-
     nsresult rv = EnsureAsyncRemoteStream();
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
 
     MOZ_ASSERT(mAsyncRemoteStream);
     return mAsyncRemoteStream->Available(aLength);
   }
--- a/dom/html/HTMLFormElement.cpp
+++ b/dom/html/HTMLFormElement.cpp
@@ -791,24 +791,27 @@ HTMLFormElement::SubmitSubmission(HTMLFo
   {
     nsAutoPopupStatePusher popupStatePusher(mSubmitPopupState);
 
     AutoHandlingUserInputStatePusher userInpStatePusher(
                                        mSubmitInitiatedFromUserInput,
                                        nullptr, doc);
 
     nsCOMPtr<nsIInputStream> postDataStream;
+    int64_t postDataStreamLength = -1;
     rv = aFormSubmission->GetEncodedSubmission(actionURI,
-                                               getter_AddRefs(postDataStream));
+                                               getter_AddRefs(postDataStream),
+                                               &postDataStreamLength);
     NS_ENSURE_SUBMIT_SUCCESS(rv);
 
     rv = linkHandler->OnLinkClickSync(this, actionURI,
                                       target.get(),
                                       VoidString(),
-                                      postDataStream, nullptr, false,
+                                      postDataStream, postDataStreamLength,
+                                      nullptr, false,
                                       getter_AddRefs(docShell),
                                       getter_AddRefs(mSubmittingRequest));
     NS_ENSURE_SUBMIT_SUCCESS(rv);
   }
 
   // Even if the submit succeeds, it's possible for there to be no docshell
   // or request; for example, if it's to a named anchor within the same page
   // the submit will not really do anything.
--- a/dom/html/HTMLFormSubmission.cpp
+++ b/dom/html/HTMLFormSubmission.cpp
@@ -107,17 +107,18 @@ public:
 
   virtual nsresult
   AddNameBlobOrNullPair(const nsAString& aName, Blob* aBlob) override;
 
   virtual nsresult
   AddNameDirectoryPair(const nsAString& aName, Directory* aDirectory) override;
 
   virtual nsresult
-  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream) override;
+  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream,
+                       int64_t* aPostDataStreamLength) override;
 
 protected:
 
   /**
    * URL encode a Unicode string by encoding it to bytes, converting linebreaks
    * properly, and then escaping many bytes as %xx.
    *
    * @param aStr the string to encode
@@ -261,21 +262,23 @@ HandleMailtoSubject(nsCString& aPath)
       return;
 
     aPath.Append(subjectStrEscaped);
   }
 }
 
 nsresult
 FSURLEncoded::GetEncodedSubmission(nsIURI* aURI,
-                                   nsIInputStream** aPostDataStream)
+                                   nsIInputStream** aPostDataStream,
+                                   int64_t* aPostDataStreamLength)
 {
   nsresult rv = NS_OK;
 
   *aPostDataStream = nullptr;
+  *aPostDataStreamLength = -1;
 
   if (mMethod == NS_FORM_METHOD_POST) {
 
     bool isMailto = false;
     aURI->SchemeIs("mailto", &isMailto);
     if (isMailto) {
 
       nsAutoCString path;
@@ -308,16 +311,18 @@ FSURLEncoded::GetEncodedSubmission(nsIUR
       NS_ENSURE_SUCCESS(rv, rv);
 
       mimeStream->AddHeader("Content-Type",
                             "application/x-www-form-urlencoded");
       mimeStream->SetData(dataStream);
 
       *aPostDataStream = mimeStream;
       NS_ADDREF(*aPostDataStream);
+
+      *aPostDataStreamLength = mQueryString.Length();
     }
 
   } else {
     // Get the full query string
     bool schemeIsJavaScript;
     rv = aURI->SchemeIs("javascript", &schemeIsJavaScript);
     NS_ENSURE_SUCCESS(rv, rv);
     if (schemeIsJavaScript) {
@@ -610,30 +615,33 @@ FSMultipartFormData::AddDataChunk(const 
   }
 
   // CRLF after file
   mPostDataChunk.AppendLiteral(CRLF);
 }
 
 nsresult
 FSMultipartFormData::GetEncodedSubmission(nsIURI* aURI,
-                                          nsIInputStream** aPostDataStream)
+                                          nsIInputStream** aPostDataStream,
+                                          int64_t* aPostDataStreamLength)
 {
   nsresult rv;
 
   // Make header
   nsCOMPtr<nsIMIMEInputStream> mimeStream
     = do_CreateInstance("@mozilla.org/network/mime-input-stream;1", &rv);
   NS_ENSURE_SUCCESS(rv, rv);
 
   nsAutoCString contentType;
   GetContentType(contentType);
   mimeStream->AddHeader("Content-Type", contentType.get());
-  uint64_t unused;
-  mimeStream->SetData(GetSubmissionBody(&unused));
+
+  uint64_t bodySize;
+  mimeStream->SetData(GetSubmissionBody(&bodySize));
+  *aPostDataStreamLength = bodySize;
 
   mimeStream.forget(aPostDataStream);
 
   return NS_OK;
 }
 
 nsresult
 FSMultipartFormData::AddPostDataStream()
@@ -672,17 +680,18 @@ public:
 
   virtual nsresult
   AddNameBlobOrNullPair(const nsAString& aName, Blob* aBlob) override;
 
   virtual nsresult
   AddNameDirectoryPair(const nsAString& aName, Directory* aDirectory) override;
 
   virtual nsresult
-  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream) override;
+  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream,
+                       int64_t* aPostDataStreaLength) override;
 
 private:
   nsString mBody;
 };
 
 nsresult
 FSTextPlain::AddNameValuePair(const nsAString& aName, const nsAString& aValue)
 {
@@ -711,20 +720,24 @@ FSTextPlain::AddNameDirectoryPair(const 
   nsAutoString dirname;
   RetrieveDirectoryName(aDirectory, dirname);
   AddNameValuePair(aName, dirname);
   return NS_OK;
 }
 
 nsresult
 FSTextPlain::GetEncodedSubmission(nsIURI* aURI,
-                                  nsIInputStream** aPostDataStream)
+                                  nsIInputStream** aPostDataStream,
+                                  int64_t* aPostDataStreamLength)
 {
   nsresult rv = NS_OK;
 
+  *aPostDataStream = nullptr;
+  *aPostDataStreamLength = -1;
+
   // XXX HACK We are using the standard URL mechanism to give the body to the
   // mailer instead of passing the post data stream to it, since that sounds
   // hard.
   bool isMailto = false;
   aURI->SchemeIs("mailto", &isMailto);
   if (isMailto) {
     nsAutoCString path;
     rv = aURI->GetPathQueryRef(path);
@@ -765,16 +778,18 @@ FSTextPlain::GetEncodedSubmission(nsIURI
     // Create mime stream with headers and such
     nsCOMPtr<nsIMIMEInputStream> mimeStream
         = do_CreateInstance("@mozilla.org/network/mime-input-stream;1", &rv);
     NS_ENSURE_SUCCESS(rv, rv);
 
     mimeStream->AddHeader("Content-Type", "text/plain");
     mimeStream->SetData(bodyStream);
     CallQueryInterface(mimeStream, aPostDataStream);
+
+    *aPostDataStreamLength = cbody.Length();
   }
 
   return rv;
 }
 
 } // anonymous namespace
 
 // --------------------------------------------------------------------------
--- a/dom/html/HTMLFormSubmission.h
+++ b/dom/html/HTMLFormSubmission.h
@@ -79,19 +79,21 @@ public:
                                         Directory* aDirectory) = 0;
 
   /**
    * Given a URI and the current submission, create the final URI and data
    * stream that will be submitted.  Subclasses *must* implement this.
    *
    * @param aURI the URI being submitted to [INOUT]
    * @param aPostDataStream a data stream for POST data [OUT]
+   * @param aPostDataStreamLength a data stream for POST data length [OUT]
    */
   virtual nsresult
-  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream) = 0;
+  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream,
+                       int64_t* aPostDataStreamLength) = 0;
 
   /**
    * Get the charset that will be used for submission.
    */
   void GetCharset(nsACString& aCharset) { mEncoding->Name(aCharset); }
 
   nsIContent* GetOriginatingElement() const
   {
@@ -160,17 +162,18 @@ public:
 
   virtual nsresult
   AddNameBlobOrNullPair(const nsAString& aName, Blob* aBlob) override;
 
   virtual nsresult
   AddNameDirectoryPair(const nsAString& aName, Directory* aDirectory) override;
 
   virtual nsresult
-  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream) override;
+  GetEncodedSubmission(nsIURI* aURI, nsIInputStream** aPostDataStream,
+                       int64_t* aPostDataStreamLength) override;
 
   void GetContentType(nsACString& aContentType)
   {
     aContentType =
       NS_LITERAL_CSTRING("multipart/form-data; boundary=") + mBoundary;
   }
 
   nsIInputStream* GetSubmissionBody(uint64_t* aContentLength);
--- a/dom/indexedDB/KeyPath.cpp
+++ b/dom/indexedDB/KeyPath.cpp
@@ -99,20 +99,20 @@ GetJSValFromKeyPathString(JSContext* aCx
     NS_ASSERTION(!token.IsEmpty(), "Should be a valid keypath");
 
     const char16_t* keyPathChars = token.BeginReading();
     const size_t keyPathLen = token.Length();
 
     bool hasProp;
     if (!targetObject) {
       // We're still walking the chain of existing objects
-      // http://w3c.github.io/IndexedDB/#dfn-evaluate-a-key-path-on-a-value
+      // http://w3c.github.io/IndexedDB/#evaluate-a-key-path-on-a-value
       // step 4 substep 1: check for .length on a String value.
       if (currentVal.isString() && !tokenizer.hasMoreTokens() &&
-          token.EqualsLiteral("length") && aOptions == DoNotCreateProperties) {
+          token.EqualsLiteral("length")) {
         aKeyJSVal->setNumber(double(JS_GetStringLength(currentVal.toString())));
         break;
       }
 
       if (!currentVal.isObject()) {
         return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
       }
       obj = &currentVal.toObject();
--- a/dom/plugins/base/nsPluginInstanceOwner.cpp
+++ b/dom/plugins/base/nsPluginInstanceOwner.cpp
@@ -487,17 +487,17 @@ NS_IMETHODIMP nsPluginInstanceOwner::Get
   nsCOMPtr<nsIPrincipal> triggeringPrincipal;
   if (!aDoCheckLoadURIChecks) {
     mozilla::OriginAttributes attrs =
       BasePrincipal::Cast(content->NodePrincipal())->OriginAttributesRef();
     triggeringPrincipal = BasePrincipal::CreateCodebasePrincipal(uri, attrs);
   }
 
   rv = lh->OnLinkClick(content, uri, unitarget.get(), VoidString(),
-                       aPostStream, headersDataStream, true, triggeringPrincipal);
+                       aPostStream, -1, headersDataStream, true, triggeringPrincipal);
 
   return rv;
 }
 
 NS_IMETHODIMP nsPluginInstanceOwner::GetDocument(nsIDocument* *aDocument)
 {
   nsCOMPtr<nsIContent> content = do_QueryReferent(mContent);
   if (!aDocument || !content) {
--- a/dom/webidl/XMLHttpRequest.webidl
+++ b/dom/webidl/XMLHttpRequest.webidl
@@ -18,19 +18,17 @@ enum XMLHttpRequestResponseType {
   "",
   "arraybuffer",
   "blob",
   "document",
   "json",
   "text",
 
   // Mozilla-specific stuff
-  "moz-chunked-text",
   "moz-chunked-arraybuffer",
-  "moz-blob"
 };
 
 /**
  * Parameters for instantiating an XMLHttpRequest. They are passed as an
  * optional argument to the constructor:
  *
  *  new XMLHttpRequest({anon: true, system: true});
  */
--- a/dom/xhr/XMLHttpRequestMainThread.cpp
+++ b/dom/xhr/XMLHttpRequestMainThread.cpp
@@ -310,17 +310,16 @@ XMLHttpRequestMainThread::InitParameters
 void
 XMLHttpRequestMainThread::ResetResponse()
 {
   mResponseXML = nullptr;
   mResponseBody.Truncate();
   TruncateResponseText();
   mResponseBlob = nullptr;
   mBlobStorage = nullptr;
-  mBlobSet = nullptr;
   mResultArrayBuffer = nullptr;
   mArrayBufferBuilder.reset();
   mResultJSON.setUndefined();
   mLoadTransferred = 0;
   mResponseBodyDecodedPos = 0;
 }
 
 void
@@ -497,18 +496,17 @@ XMLHttpRequestMainThread::GetResponseXML
 nsresult
 XMLHttpRequestMainThread::DetectCharset()
 {
   mResponseCharset = nullptr;
   mDecoder = nullptr;
 
   if (mResponseType != XMLHttpRequestResponseType::_empty &&
       mResponseType != XMLHttpRequestResponseType::Text &&
-      mResponseType != XMLHttpRequestResponseType::Json &&
-      mResponseType != XMLHttpRequestResponseType::Moz_chunked_text) {
+      mResponseType != XMLHttpRequestResponseType::Json) {
     return NS_OK;
   }
 
   nsAutoCString charsetVal;
   const Encoding* encoding;
   bool ok = mChannel &&
             NS_SUCCEEDED(mChannel->GetContentCharset(charsetVal)) &&
             (encoding = Encoding::ForLabel(charsetVal));
@@ -603,28 +601,21 @@ XMLHttpRequestMainThread::GetResponseTex
 
 void
 XMLHttpRequestMainThread::GetResponseText(XMLHttpRequestStringSnapshot& aSnapshot,
                                           ErrorResult& aRv)
 {
   aSnapshot.Reset();
 
   if (mResponseType != XMLHttpRequestResponseType::_empty &&
-      mResponseType != XMLHttpRequestResponseType::Text &&
-      mResponseType != XMLHttpRequestResponseType::Moz_chunked_text) {
+      mResponseType != XMLHttpRequestResponseType::Text) {
     aRv.Throw(NS_ERROR_DOM_INVALID_STATE_XHR_HAS_WRONG_RESPONSETYPE_FOR_RESPONSETEXT);
     return;
   }
 
-  if (mResponseType == XMLHttpRequestResponseType::Moz_chunked_text &&
-      !mInLoadProgressEvent) {
-    aSnapshot.SetVoid();
-    return;
-  }
-
   if (mState != State::loading && mState != State::done) {
     return;
   }
 
   // Main Fetch step 18 requires to ignore body for head/connect methods.
   if (mRequestMethod.EqualsLiteral("HEAD") ||
       mRequestMethod.EqualsLiteral("CONNECT")) {
     return;
@@ -677,41 +668,16 @@ XMLHttpRequestMainThread::CreateResponse
   if (!JS_ParseJSON(aCx, string.BeginReading(), string.Length(), &value)) {
     return NS_ERROR_FAILURE;
   }
 
   mResultJSON = value;
   return NS_OK;
 }
 
-void
-XMLHttpRequestMainThread::CreatePartialBlob(ErrorResult& aRv)
-{
-  // mBlobSet can be null if the request has been canceled
-  if (!mBlobSet) {
-    return;
-  }
-
-  nsAutoCString contentType;
-  if (mState == State::done) {
-    mChannel->GetContentType(contentType);
-  }
-
-  nsTArray<RefPtr<BlobImpl>> subImpls(mBlobSet->GetBlobImpls());
-  RefPtr<BlobImpl> blobImpl =
-    MultipartBlobImpl::Create(Move(subImpls),
-                              NS_ConvertASCIItoUTF16(contentType),
-                              aRv);
-  if (NS_WARN_IF(aRv.Failed())) {
-    return;
-  }
-
-  mResponseBlob = Blob::Create(GetOwner(), blobImpl);
-}
-
 NS_IMETHODIMP XMLHttpRequestMainThread::GetResponseType(nsAString& aResponseType)
 {
   MOZ_ASSERT(mResponseType < XMLHttpRequestResponseType::EndGuard_);
   const EnumEntry& entry =
     XMLHttpRequestResponseTypeValues::strings[static_cast<uint32_t>(mResponseType)];
   aResponseType.AssignASCII(entry.value, entry.length);
   return NS_OK;
 }
@@ -743,28 +709,23 @@ XMLHttpRequestMainThread::SetResponseTyp
   // sync request is not allowed setting responseType in window context
   if (HasOrHasHadOwner() && mState != State::unsent && mFlagSynchronous) {
     LogMessage("ResponseTypeSyncXHRWarning", GetOwner());
     aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_XHR_TIMEOUT_AND_RESPONSETYPE_UNSUPPORTED_FOR_SYNC);
     return;
   }
 
   if (mFlagSynchronous &&
-      (aResponseType == XMLHttpRequestResponseType::Moz_chunked_text ||
-       aResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer)) {
+      aResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
     aRv.Throw(NS_ERROR_DOM_INVALID_STATE_XHR_CHUNKED_RESPONSETYPES_UNSUPPORTED_FOR_SYNC);
     return;
   }
 
   // We want to get rid of this moz-only types. Bug 1335365.
-  if (aResponseType == XMLHttpRequestResponseType::Moz_blob) {
-    Telemetry::Accumulate(Telemetry::MOZ_BLOB_IN_XHR, 1);
-  } else if (aResponseType == XMLHttpRequestResponseType::Moz_chunked_text) {
-    Telemetry::Accumulate(Telemetry::MOZ_CHUNKED_TEXT_IN_XHR, 1);
-  } else if (aResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
+  if (aResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
     Telemetry::Accumulate(Telemetry::MOZ_CHUNKED_ARRAYBUFFER_IN_XHR, 1);
   }
 
   // Set the responseType attribute's value to the given value.
   mResponseType = aResponseType;
 }
 
 NS_IMETHODIMP
@@ -778,17 +739,16 @@ XMLHttpRequestMainThread::GetResponse(JS
 void
 XMLHttpRequestMainThread::GetResponse(JSContext* aCx,
                                       JS::MutableHandle<JS::Value> aResponse,
                                       ErrorResult& aRv)
 {
   switch (mResponseType) {
   case XMLHttpRequestResponseType::_empty:
   case XMLHttpRequestResponseType::Text:
-  case XMLHttpRequestResponseType::Moz_chunked_text:
   {
     DOMString str;
     GetResponseText(str, aRv);
     if (aRv.Failed()) {
       return;
     }
     if (!xpc::StringToJsval(aCx, str, aResponse)) {
       aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
@@ -813,27 +773,20 @@ XMLHttpRequestMainThread::GetResponse(JS
         aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
         return;
       }
     }
     aResponse.setObject(*mResultArrayBuffer);
     return;
   }
   case XMLHttpRequestResponseType::Blob:
-  case XMLHttpRequestResponseType::Moz_blob:
   {
     if (mState != State::done) {
-      if (mResponseType != XMLHttpRequestResponseType::Moz_blob) {
-        aResponse.setNull();
-        return;
-      }
-
-      if (!mResponseBlob) {
-        CreatePartialBlob(aRv);
-      }
+      aResponse.setNull();
+      return;
     }
 
     if (!mResponseBlob) {
       aResponse.setNull();
       return;
     }
 
     GetOrCreateDOMReflector(aCx, mResponseBlob, aResponse);
@@ -1426,18 +1379,17 @@ XMLHttpRequestMainThread::DispatchProgre
   event->SetTrusted(true);
 
   DispatchOrStoreEvent(aTarget, event);
 
   if (aType == ProgressEventType::progress) {
     mInLoadProgressEvent = false;
 
     // clear chunked responses after every progress event
-    if (mResponseType == XMLHttpRequestResponseType::Moz_chunked_text ||
-        mResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
+    if (mResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
       mResponseBody.Truncate();
       TruncateResponseText();
       mResultArrayBuffer = nullptr;
       mArrayBufferBuilder.reset();
     }
   }
 
   // If we're sending a load, error, timeout or abort event, then
@@ -1710,23 +1662,16 @@ XMLHttpRequestMainThread::StreamReaderFu
     return NS_ERROR_FAILURE;
   }
 
   nsresult rv = NS_OK;
 
   if (xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Blob) {
     xmlHttpRequest->MaybeCreateBlobStorage();
     rv = xmlHttpRequest->mBlobStorage->Append(fromRawSegment, count);
-  } else if (xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Moz_blob) {
-    if (!xmlHttpRequest->mBlobSet) {
-      xmlHttpRequest->mBlobSet = new BlobSet();
-    }
-    rv = xmlHttpRequest->mBlobSet->AppendVoidPtr(fromRawSegment, count);
-    // Clear the cache so that the blob size is updated.
-    xmlHttpRequest->mResponseBlob = nullptr;
   } else if ((xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Arraybuffer &&
               !xmlHttpRequest->mIsMappedArrayBuffer) ||
              xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
     // get the initial capacity to something reasonable to avoid a bunch of reallocs right
     // at the start
     if (xmlHttpRequest->mArrayBufferBuilder.capacity() == 0)
       xmlHttpRequest->mArrayBufferBuilder.setCapacity(std::max(count, XML_HTTP_REQUEST_ARRAYBUFFER_MIN_SIZE));
 
@@ -1740,18 +1685,17 @@ XMLHttpRequestMainThread::StreamReaderFu
   } else if (xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::_empty &&
              xmlHttpRequest->mResponseXML) {
     // Copy for our own use
     if (!xmlHttpRequest->mResponseBody.Append(fromRawSegment, count, fallible)) {
       return NS_ERROR_OUT_OF_MEMORY;
     }
   } else if (xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::_empty ||
              xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Text ||
-             xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Json ||
-             xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Moz_chunked_text) {
+             xmlHttpRequest->mResponseType == XMLHttpRequestResponseType::Json) {
     NS_ASSERTION(!xmlHttpRequest->mResponseXML,
                  "We shouldn't be parsing a doc here");
     rv = xmlHttpRequest->AppendToResponseText(fromRawSegment, count);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
   }
 
@@ -1880,17 +1824,16 @@ NS_IMPL_ISUPPORTS0(FileCreationHandler)
 
 void
 XMLHttpRequestMainThread::LocalFileToBlobCompleted(Blob* aBlob)
 {
   MOZ_ASSERT(mState != State::done);
 
   mResponseBlob = aBlob;
   mBlobStorage = nullptr;
-  mBlobSet = nullptr;
   NS_ASSERTION(mResponseBody.IsEmpty(), "mResponseBody should be empty");
 
   ChangeStateToDone();
 }
 
 NS_IMETHODIMP
 XMLHttpRequestMainThread::OnDataAvailable(nsIRequest *request,
                                           nsISupports *ctxt,
@@ -1903,26 +1846,24 @@ XMLHttpRequestMainThread::OnDataAvailabl
   MOZ_ASSERT(mContext.get() == ctxt,"start context different from OnDataAvailable context");
 
   mProgressSinceLastProgressEvent = true;
   XMLHttpRequestBinding::ClearCachedResponseTextValue(this);
 
   nsresult rv;
 
   nsCOMPtr<nsIFile> localFile;
-  if ((mResponseType == XMLHttpRequestResponseType::Blob ||
-       mResponseType == XMLHttpRequestResponseType::Moz_blob)) {
+  if (mResponseType == XMLHttpRequestResponseType::Blob) {
     rv = GetLocalFileFromChannel(request, getter_AddRefs(localFile));
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
 
     if (localFile) {
       mBlobStorage = nullptr;
-      mBlobSet = nullptr;
       NS_ASSERTION(mResponseBody.IsEmpty(), "mResponseBody should be empty");
 
       // The nsIStreamListener contract mandates us to read from the stream
       // before returning.
       uint32_t totalRead;
       rv =
         inStr->ReadSegments(DummyStreamReaderFunc, nullptr, count, &totalRead);
       NS_ENSURE_SUCCESS(rv, rv);
@@ -2266,18 +2207,17 @@ XMLHttpRequestMainThread::OnStopRequest(
   mContext = nullptr;
 
   bool waitingForBlobCreation = false;
 
   // If we have this error, we have to deal with a file: URL + responseType =
   // blob. We have this error because we canceled the channel. The status will
   // be set to NS_OK.
   if (status == NS_ERROR_FILE_ALREADY_EXISTS &&
-      (mResponseType == XMLHttpRequestResponseType::Blob ||
-       mResponseType == XMLHttpRequestResponseType::Moz_blob)) {
+      mResponseType == XMLHttpRequestResponseType::Blob) {
     nsCOMPtr<nsIFile> file;
     nsresult rv = GetLocalFileFromChannel(request, getter_AddRefs(file));
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
 
     if (file) {
       nsAutoCString contentType;
@@ -2303,51 +2243,28 @@ XMLHttpRequestMainThread::OnStopRequest(
       status = NS_OK;
 
       NS_ASSERTION(mResponseBody.IsEmpty(), "mResponseBody should be empty");
       NS_ASSERTION(mResponseText.IsEmpty(), "mResponseText should be empty");
     }
   }
 
   if (NS_SUCCEEDED(status) &&
-      (mResponseType == XMLHttpRequestResponseType::Blob ||
-       mResponseType == XMLHttpRequestResponseType::Moz_blob) &&
+      mResponseType == XMLHttpRequestResponseType::Blob &&
       !waitingForBlobCreation) {
     // Smaller files may be written in cache map instead of separate files.
     // Also, no-store response cannot be written in persistent cache.
     nsAutoCString contentType;
     mChannel->GetContentType(contentType);
 
-    if (mResponseType == XMLHttpRequestResponseType::Blob) {
-      // mBlobStorage can be null if the channel is non-file non-cacheable
-      // and if the response length is zero.
-      MaybeCreateBlobStorage();
-      mBlobStorage->GetBlobWhenReady(GetOwner(), contentType, this);
-      waitingForBlobCreation = true;
-    } else {
-      // mBlobSet can be null if the channel is non-file non-cacheable
-      // and if the response length is zero.
-      if (!mBlobSet) {
-        mBlobSet = new BlobSet();
-      }
-
-      ErrorResult error;
-      nsTArray<RefPtr<BlobImpl>> subImpls(mBlobSet->GetBlobImpls());
-      RefPtr<BlobImpl> blobImpl =
-        MultipartBlobImpl::Create(Move(subImpls),
-                                  NS_ConvertASCIItoUTF16(contentType),
-                                  error);
-      mBlobSet = nullptr;
-
-      if (NS_WARN_IF(error.Failed())) {
-        return error.StealNSResult();
-      }
-
-      mResponseBlob = Blob::Create(GetOwner(), blobImpl);
-    }
+    // mBlobStorage can be null if the channel is non-file non-cacheable
+    // and if the response length is zero.
+    MaybeCreateBlobStorage();
+    mBlobStorage->GetBlobWhenReady(GetOwner(), contentType, this);
+    waitingForBlobCreation = true;
 
     NS_ASSERTION(mResponseBody.IsEmpty(), "mResponseBody should be empty");
     NS_ASSERTION(mResponseText.IsEmpty(), "mResponseText should be empty");
   } else if (NS_SUCCEEDED(status) &&
              ((mResponseType == XMLHttpRequestResponseType::Arraybuffer &&
                !mIsMappedArrayBuffer) ||
               mResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer)) {
     // set the capacity down to the actual length, to realloc back
--- a/dom/xhr/XMLHttpRequestMainThread.h
+++ b/dom/xhr/XMLHttpRequestMainThread.h
@@ -521,17 +521,16 @@ protected:
   nsresult AppendToResponseText(const char * aBuffer, uint32_t aBufferLen);
   static nsresult StreamReaderFunc(nsIInputStream* in,
                                    void* closure,
                                    const char* fromRawSegment,
                                    uint32_t toOffset,
                                    uint32_t count,
                                    uint32_t *writeCount);
   nsresult CreateResponseParsedJSON(JSContext* aCx);
-  void CreatePartialBlob(ErrorResult& aRv);
   // Change the state of the object with this. The broadcast argument
   // determines if the onreadystatechange listener should be called.
   nsresult ChangeState(State aState, bool aBroadcast = true);
   already_AddRefed<nsILoadGroup> GetLoadGroup() const;
   nsIURI *GetBaseURI();
 
   already_AddRefed<nsIHttpChannel> GetCurrentHttpChannel();
   already_AddRefed<nsIJARChannel> GetCurrentJARChannel();
@@ -661,18 +660,16 @@ protected:
 
   XMLHttpRequestResponseType mResponseType;
 
   // It is either a cached blob-response from the last call to GetResponse,
   // but is also explicitly set in OnStopRequest.
   RefPtr<Blob> mResponseBlob;
   // We stream data to mBlobStorage when response type is "blob".
   RefPtr<MutableBlobStorage> mBlobStorage;
-  // We stream data to mBlobSet when response type is "moz-blob".
-  nsAutoPtr<BlobSet> mBlobSet;
 
   nsString mOverrideMimeType;
 
   /**
    * The notification callbacks the channel had when Send() was
    * called.  We want to forward things here as needed.
    */
   nsCOMPtr<nsIInterfaceRequestor> mNotificationCallbacks;
--- a/dom/xhr/tests/test_XHR.html
+++ b/dom/xhr/tests/test_XHR.html
@@ -124,30 +124,28 @@ function checkOpenThrows(xhr, method, ur
 // test if setting responseType before calling open() works
 xhr = new XMLHttpRequest();
 checkSetResponseType(xhr, "");
 checkSetResponseType(xhr, "text");
 checkSetResponseType(xhr, "document");
 checkSetResponseType(xhr, "arraybuffer");
 checkSetResponseType(xhr, "blob");
 checkSetResponseType(xhr, "json");
-checkSetResponseType(xhr, "moz-chunked-text");
 checkSetResponseType(xhr, "moz-chunked-arraybuffer");
 checkOpenThrows(xhr, "GET", "file_XHR_pass2.txt", false);
 
 // test response (sync, responseType is not changeable)
 xhr = new XMLHttpRequest();
 xhr.open("GET", 'file_XHR_pass2.txt', false); 
 checkSetResponseTypeThrows(xhr, "");
 checkSetResponseTypeThrows(xhr, "text");
 checkSetResponseTypeThrows(xhr, "document");
 checkSetResponseTypeThrows(xhr, "arraybuffer");
 checkSetResponseTypeThrows(xhr, "blob");
 checkSetResponseTypeThrows(xhr, "json");
-checkSetResponseTypeThrows(xhr, "moz-chunked-text");
 checkSetResponseTypeThrows(xhr, "moz-chunked-arraybuffer");
 xhr.send(null);
 checkSetResponseTypeThrows(xhr, "document");
 is(xhr.status, 200, "wrong status");
 is(xhr.response, "hello pass\n", "wrong response");
 
 // test response (responseType='document')
 xhr = new XMLHttpRequest();
@@ -271,102 +269,98 @@ xhr.send(null);
 xhr.onreadystatechange = continueTest;
 while (xhr.readyState != 4) {
   checkXHRStatus();
   yield undefined;
 }
 checkXHRStatus();
 
 // test response (responseType='blob')
-var responseTypes = ['blob', 'moz-blob'];
-for (var i = 0; i < responseTypes.length; i++) {
-  var t = responseTypes[i];
-  // with a simple text file
-  xhr = new XMLHttpRequest();
-  xhr.open("GET", 'file_XHR_pass2.txt'); 
-  xhr.responseType = t;
-  xhr.onloadend = continueTest;
-  xhr.send(null);
-  yield undefined;
-  is(xhr.status, 200, "wrong status");
-  checkResponseTextAccessThrows(xhr);
-  checkResponseXMLAccessThrows(xhr);
-  var b = xhr.response;
-  ok(b, "should have a non-null blob");
-  ok(b instanceof Blob, "should be a Blob");
-  ok(!(b instanceof File), "should not be a File");
-  is(b.size, "hello pass\n".length, "wrong blob size");
-
-  var fr = new FileReader();
-  fr.onload = continueTest;
-  fr.readAsBinaryString(b);
-  yield undefined;
-  ok(fr.result, "hello pass\n", "wrong values");
-
-  // with a binary file
-  xhr = new XMLHttpRequest();
-  xhr.open("GET", 'file_XHR_binary1.bin', true);
-  xhr.send(null);
-  xhr.onreadystatechange = continueTest;
-  while(xhr.readyState != 2)
-    yield undefined;
-
-  is(xhr.status, 200, "wrong status");
-  xhr.responseType = t;
+// with a simple text file
+xhr = new XMLHttpRequest();
+xhr.open("GET", 'file_XHR_pass2.txt'); 
+xhr.responseType = 'blob';
+xhr.onloadend = continueTest;
+xhr.send(null);
+yield undefined;
+is(xhr.status, 200, "wrong status");
+checkResponseTextAccessThrows(xhr);
+checkResponseXMLAccessThrows(xhr);
+var b = xhr.response;
+ok(b, "should have a non-null blob");
+ok(b instanceof Blob, "should be a Blob");
+ok(!(b instanceof File), "should not be a File");
+is(b.size, "hello pass\n".length, "wrong blob size");
 
-  while(xhr.readyState != 4)
-    yield undefined;
-  
-  xhr.onreadystatechange = null;
-
-  b = xhr.response;
-  ok(b != null, "should have a non-null blob");
-  is(b.size, 12, "wrong blob size");
-
-  fr = new FileReader();
-  fr.readAsBinaryString(b);
-  xhr = null; // kill the XHR object
-  b = null;
-  SpecialPowers.gc();
-  fr.onload = continueTest;
-  yield undefined;
-  is(fr.result, "\xaa\xee\0\x03\xff\xff\xff\xff\xbb\xbb\xbb\xbb", "wrong values");
+var fr = new FileReader();
+fr.onload = continueTest;
+fr.readAsBinaryString(b);
+yield undefined;
+ok(fr.result, "hello pass\n", "wrong values");
 
-  // with a larger binary file
-  xhr = new XMLHttpRequest();
-  xhr.open("GET", 'file_XHR_binary2.bin', true);
-  xhr.responseType = t;
-  xhr.send(null);
-  xhr.onreadystatechange = continueTest;
-
-  while (xhr.readyState != 4)
-    yield undefined;
+// with a binary file
+xhr = new XMLHttpRequest();
+xhr.open("GET", 'file_XHR_binary1.bin', true);
+xhr.send(null);
+xhr.onreadystatechange = continueTest;
+while(xhr.readyState != 2)
+  yield undefined;
 
-  xhr.onreadystatechange = null;
-
-  var b = xhr.response;
-  ok(b != null, "should have a non-null blob");
-  is(b.size, 65536, "wrong blob size");
+is(xhr.status, 200, "wrong status");
+xhr.responseType = 'blob';
 
-  fr = new FileReader();
-  fr.readAsArrayBuffer(b);
-  fr.onload = continueTest;
-  xhr = null; // kill the XHR object
-  b = null;
-  SpecialPowers.gc();
+while(xhr.readyState != 4)
   yield undefined;
 
-  var u8 = new Uint8Array(fr.result);
-  for (var i = 0; i < 65536; i++) {
-    if (u8[i] !== (i & 255)) {
-      break;
-    }
+xhr.onreadystatechange = null;
+
+b = xhr.response;
+ok(b != null, "should have a non-null blob");
+is(b.size, 12, "wrong blob size");
+
+fr = new FileReader();
+fr.readAsBinaryString(b);
+xhr = null; // kill the XHR object
+b = null;
+SpecialPowers.gc();
+fr.onload = continueTest;
+yield undefined;
+is(fr.result, "\xaa\xee\0\x03\xff\xff\xff\xff\xbb\xbb\xbb\xbb", "wrong values");
+
+// with a larger binary file
+xhr = new XMLHttpRequest();
+xhr.open("GET", 'file_XHR_binary2.bin', true);
+xhr.responseType = 'blob';
+xhr.send(null);
+xhr.onreadystatechange = continueTest;
+
+while (xhr.readyState != 4)
+  yield undefined;
+
+xhr.onreadystatechange = null;
+
+var b = xhr.response;
+ok(b != null, "should have a non-null blob");
+is(b.size, 65536, "wrong blob size");
+
+fr = new FileReader();
+fr.readAsArrayBuffer(b);
+fr.onload = continueTest;
+xhr = null; // kill the XHR object
+b = null;
+SpecialPowers.gc();
+yield undefined;
+
+var u8 = new Uint8Array(fr.result);
+for (var i = 0; i < 65536; i++) {
+  if (u8[i] !== (i & 255)) {
+    break;
   }
-  is(i, 65536, "wrong value at offset " + i);
 }
+is(i, 65536, "wrong value at offset " + i);
 
 var client = new XMLHttpRequest();
 client.open("GET", "file_XHR_pass1.xml", true);
 client.send();
 client.onreadystatechange = function() {
   if(client.readyState == 4) {
     try {
       is(client.responseXML, null, "responseXML should be null.");
--- a/dom/xhr/tests/test_html_in_xhr.html
+++ b/dom/xhr/tests/test_html_in_xhr.html
@@ -69,39 +69,24 @@ function continueAfterReport() {
 }
 
 function testNonParsingText() {
   xhr = new XMLHttpRequest();
   xhr.onreadystatechange = function() {
     if (this.readyState == 4) {
       is(this.responseText.indexOf("\u042E"), -1, "Honored meta in text mode.");
       is(this.responseText.indexOf("\uFFFD"), 29, "Honored meta in text mode 2.");
-      testChunkedText();
+      testSyncXHR();
     }
   }
   xhr.open("GET", "file_html_in_xhr2.html");
   xhr.responseType = "text";
   xhr.send();   
 }
 
-function testChunkedText() {
-  xhr = new XMLHttpRequest();
-  xhr.onprogress = function() {
-    is(this.responseText.indexOf("\u042E"), -1, "Honored meta in chunked text mode.");
-  }
-  xhr.onreadystatechange = function() {
-    if (this.readyState == 4) {
-      testSyncXHR();
-    }
-  }
-  xhr.open("GET", "file_html_in_xhr2.html");
-  xhr.responseType = "moz-chunked-text";
-  xhr.send();   
-}
-
 function testSyncXHR() {
   xhr = new XMLHttpRequest();
   xhr.open("GET", "file_html_in_xhr3.html", false);
   xhr.send();   
   is(xhr.responseText, "SUCCESS\n", "responseText should be ready by now");
   is(xhr.responseXML, null, "responseXML should be null in the sync case");
   SimpleTest.finish();
 }
--- a/dom/xhr/tests/test_xhr_progressevents.html
+++ b/dom/xhr/tests/test_xhr_progressevents.html
@@ -127,21 +127,19 @@ function bufferToString(buffer) {
 
 function* runTests() {
   var xhr = new XMLHttpRequest();
   xhr.onprogress = xhr.onload = xhr.onerror = xhr.onreadystatechange = xhr.onloadend = getEvent;
 
   var responseTypes = [{ type: "text", text: true },
                        { type: "arraybuffer", text: false, nodata: true },
                        { type: "blob", text: false, nodata: true, blob: true },
-                       { type: "moz-blob", text: false, nodata: false, blob: true },
                        { type: "document", text: true, nodata: true },
                        { type: "json", text: true, nodata: true },
                        { type: "", text: true },
-                       { type: "moz-chunked-text", text: true, chunked: true },
                        { type: "moz-chunked-arraybuffer", text: false, chunked: true },
                       ];
   var responseType;
   var fileExpectedResult = "";
   for (var i = 0; i < 65536; i++) {
     fileExpectedResult += String.fromCharCode(i & 255);
   }
   while (responseType = responseTypes.shift()) {
--- a/dom/xhr/tests/xhr2_worker.js
+++ b/dom/xhr/tests/xhr2_worker.js
@@ -91,73 +91,10 @@ onmessage = function(event) {
   xhr.open("GET", url, false);
   xhr.responseType = "document";
   xhr.send();
 
   if (xhr.responseText != refText) {
     throw new Error("'document' type not working correctly");
   }
 
-  // Make sure setting responseType before open or after send fails.
-  var exception;
-
-  xhr = new XMLHttpRequest();
-  xhr.open("GET", url);
-  xhr.responseType = "text";
-  xhr.onload = function(event) {
-    if (event.target.response != refText) {
-      throw new Error("Bad response!");
-    }
-
-    xhr = new XMLHttpRequest();
-    xhr.open("GET", url);
-    xhr.responseType = "moz-chunked-text";
-
-    var lastIndex = 0;
-    xhr.onprogress = function(event) {
-      if (refText.substr(lastIndex, xhr.response.length) != xhr.response) {
-        throw new Error("Bad chunk!");
-      }
-
-      lastIndex += xhr.response.length;
-    };
-
-    xhr.onload = function(event) {
-      if (lastIndex != refText.length) {
-        throw new Error("Didn't see all the data!");
-      }
-
-      setTimeout(function() {
-        if (xhr.response !== null) {
-          throw new Error("Should have gotten null response outside of event!");
-        }
-        postMessage("done");
-      }, 0);
-    }
-
-    xhr.send(null);
-  };
-  xhr.send();
-
-  exception = null;
-
-  try {
-    xhr.responseType = "arraybuffer";
-  }
-  catch(e) {
-    exception = e;
-  }
-
-  if (!exception) {
-    throw new Error("Failed to throw when setting responseType after " +
-                    "calling send()");
-  }
-
-  if (exception.name != "InvalidStateError") {
-    throw new Error("Unexpected error when setting responseType after " +
-                    "calling send()");
-  }
-
-  if (exception.code != DOMException.INVALID_STATE_ERR) {
-    throw new Error("Unexpected error code when setting responseType after " +
-                    "calling send()");
-  }
+  postMessage("done");
 }
--- a/gfx/2d/DrawTargetCapture.cpp
+++ b/gfx/2d/DrawTargetCapture.cpp
@@ -222,27 +222,38 @@ DrawTargetCaptureImpl::PushClipRect(cons
 void
 DrawTargetCaptureImpl::PushLayer(bool aOpaque,
                                  Float aOpacity,
                                  SourceSurface* aMask,
                                  const Matrix& aMaskTransform,
                                  const IntRect& aBounds,
                                  bool aCopyBackground)
 {
+  // Have to update mPermitSubpixelAA for this DT
+  // because some code paths query the current setting
+  // to determine subpixel AA eligibility.
+  PushedLayer layer(GetPermitSubpixelAA());
+  mPushedLayers.push_back(layer);
+  DrawTarget::SetPermitSubpixelAA(aOpaque);
+
   AppendCommand(PushLayerCommand)(aOpaque,
                                   aOpacity,
                                   aMask,
                                   aMaskTransform,
                                   aBounds,
                                   aCopyBackground);
 }
 
 void
 DrawTargetCaptureImpl::PopLayer()
 {
+  MOZ_ASSERT(mPushedLayers.size());
+  DrawTarget::SetPermitSubpixelAA(mPushedLayers.back().mOldPermitSubpixelAA);
+  mPushedLayers.pop_back();
+
   AppendCommand(PopLayerCommand)();
 }
 
 void
 DrawTargetCaptureImpl::PopClip()
 {
   AppendCommand(PopClipCommand)();
 }
--- a/gfx/2d/DrawTargetCapture.h
+++ b/gfx/2d/DrawTargetCapture.h
@@ -163,16 +163,24 @@ private:
     mDrawCommandStorage.resize(mDrawCommandStorage.size() + sizeof(T) + sizeof(uint32_t));
     uint8_t* nextDrawLocation = &mDrawCommandStorage.front() + oldSize;
     *(uint32_t*)(nextDrawLocation) = sizeof(T) + sizeof(uint32_t);
     return reinterpret_cast<T*>(nextDrawLocation + sizeof(uint32_t));
   }
   RefPtr<DrawTarget> mRefDT;
   IntSize mSize;
 
+  struct PushedLayer
+  {
+    explicit PushedLayer(bool aOldPermitSubpixelAA)
+      : mOldPermitSubpixelAA(aOldPermitSubpixelAA)
+    {}
+    bool mOldPermitSubpixelAA;
+  };
+  std::vector<PushedLayer> mPushedLayers;
   std::vector<uint8_t> mDrawCommandStorage;
 };
 
 } // namespace gfx
 
 } // namespace mozilla
 
 
--- a/gfx/thebes/gfxHarfBuzzShaper.cpp
+++ b/gfx/thebes/gfxHarfBuzzShaper.cpp
@@ -7,30 +7,24 @@
 #include "gfxContext.h"
 #include "gfxFontConstants.h"
 #include "gfxHarfBuzzShaper.h"
 #include "gfxFontUtils.h"
 #include "gfxTextRun.h"
 #include "mozilla/Sprintf.h"
 #include "nsUnicodeProperties.h"
 #include "nsUnicodeScriptCodes.h"
-#include "nsUnicodeNormalizer.h"
 
 #include "harfbuzz/hb.h"
 #include "harfbuzz/hb-ot.h"
 
-#if ENABLE_INTL_API // ICU is available: we'll use it for Unicode composition
-                    // and decomposition in preference to nsUnicodeNormalizer.
 #include "unicode/unorm.h"
 #include "unicode/utext.h"
-#define MOZ_HB_SHAPER_USE_ICU_NORMALIZATION 1
-static const UNormalizer2 * sNormalizer = nullptr;
-#else
-#undef MOZ_HB_SHAPER_USE_ICU_NORMALIZATION
-#endif
+
+static const UNormalizer2* sNormalizer = nullptr;
 
 #include <algorithm>
 
 #define FloatToFixed(f) (65536 * (f))
 #define FixedToFloat(f) ((f) * (1.0 / 65536.0))
 // Right shifts of negative (signed) integers are undefined, as are overflows
 // when converting unsigned to negative signed integers.
 // (If speed were an issue we could make some 2's complement assumptions.)
@@ -1101,34 +1095,24 @@ static const char16_t sDageshForms[0x05E
 
 static hb_bool_t
 HBUnicodeCompose(hb_unicode_funcs_t *ufuncs,
                  hb_codepoint_t      a,
                  hb_codepoint_t      b,
                  hb_codepoint_t     *ab,
                  void               *user_data)
 {
-#if MOZ_HB_SHAPER_USE_ICU_NORMALIZATION
-
     if (sNormalizer) {
         UChar32 ch = unorm2_composePair(sNormalizer, a, b);
         if (ch >= 0) {
             *ab = ch;
             return true;
         }
     }
 
-#else // no ICU available, use the old nsUnicodeNormalizer
-
-    if (nsUnicodeNormalizer::Compose(a, b, ab)) {
-        return true;
-    }
-
-#endif
-
     return false;
 }
 
 static hb_bool_t
 HBUnicodeDecompose(hb_unicode_funcs_t *ufuncs,
                    hb_codepoint_t      ab,
                    hb_codepoint_t     *a,
                    hb_codepoint_t     *b,
@@ -1139,18 +1123,16 @@ HBUnicodeDecompose(hb_unicode_funcs_t *u
     // support U+0972 by decomposing it.
     if (ab == 0x0972) {
         *a = 0x0905;
         *b = 0x0945;
         return true;
     }
 #endif
 
-#if MOZ_HB_SHAPER_USE_ICU_NORMALIZATION
-
     if (!sNormalizer) {
         return false;
     }
 
     // Canonical decompositions are never more than two characters,
     // or a maximum of 4 utf-16 code units.
     const unsigned MAX_DECOMP_LENGTH = 4;
 
@@ -1172,22 +1154,16 @@ HBUnicodeDecompose(hb_unicode_funcs_t *u
     }
     ch = UTEXT_NEXT32(&text);
     if (ch != U_SENTINEL) {
         *b = ch;
     }
     utext_close(&text);
 
     return *b != 0 || *a != ab;
-
-#else // no ICU available, use the old nsUnicodeNormalizer
-
-    return nsUnicodeNormalizer::DecomposeNonRecursively(ab, a, b);
-
-#endif
 }
 
 static void
 AddOpenTypeFeature(const uint32_t& aTag, uint32_t& aValue, void *aUserArg)
 {
     nsTArray<hb_feature_t>* features = static_cast<nsTArray<hb_feature_t>*> (aUserArg);
 
     hb_feature_t feat = { 0, 0, 0, UINT_MAX };
@@ -1260,21 +1236,19 @@ gfxHarfBuzzShaper::Initialize()
                                                   nullptr, nullptr);
         hb_unicode_funcs_set_compose_func(sHBUnicodeFuncs,
                                           HBUnicodeCompose,
                                           nullptr, nullptr);
         hb_unicode_funcs_set_decompose_func(sHBUnicodeFuncs,
                                             HBUnicodeDecompose,
                                             nullptr, nullptr);
 
-#if MOZ_HB_SHAPER_USE_ICU_NORMALIZATION
         UErrorCode error = U_ZERO_ERROR;
         sNormalizer = unorm2_getNFCInstance(&error);
-        NS_ASSERTION(U_SUCCESS(error), "failed to get ICU normalizer");
-#endif
+        MOZ_ASSERT(U_SUCCESS(error), "failed to get ICU normalizer");
     }
 
     gfxFontEntry *entry = mFont->GetFontEntry();
     if (!mUseFontGetGlyph) {
         // get the cmap table and find offset to our subtable
         mCmapTable = entry->GetFontTable(TRUETYPE_TAG('c','m','a','p'));
         if (!mCmapTable) {
             NS_WARNING("failed to load cmap, glyphs will be missing");
--- a/gfx/thebes/moz.build
+++ b/gfx/thebes/moz.build
@@ -228,22 +228,20 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wi
 if CONFIG['MOZ_ENABLE_SKIA_PDF']:
     EXPORTS.mozilla.gfx += [
         'PrintTargetSkPDF.h',
     ]
     SOURCES += [
         'PrintTargetSkPDF.cpp',
     ]
 
-# We prefer to use ICU for normalization functions, but currently it is only
-# available if we're building with the Intl API enabled:
-if CONFIG['ENABLE_INTL_API']:
-    USE_LIBS += [
-        'icu',
-    ]
+# We use ICU for normalization functions:
+USE_LIBS += [
+    'icu',
+]
 
 include('/ipc/chromium/chromium-config.mozbuild')
 
 FINAL_LIBRARY = 'xul'
 
 LOCAL_INCLUDES += [
     '/dom/base',
     '/dom/workers',
--- a/intl/unicharutil/moz.build
+++ b/intl/unicharutil/moz.build
@@ -13,21 +13,16 @@ XPIDL_SOURCES += [
 
 XPIDL_MODULE = 'unicharutil'
 
 EXPORTS += [
     'nsUGenCategory.h',
     'nsUnicodeNormalizer.h',
 ]
 
-if CONFIG['ENABLE_INTL_API']:
-    UNIFIED_SOURCES += [
-        'nsUnicodeNormalizer_ICU.cpp',
-    ]
-else:
-    UNIFIED_SOURCES += [
-        'nsUnicodeNormalizer.cpp',
-    ]
+UNIFIED_SOURCES += [
+    'nsUnicodeNormalizer.cpp',
+]
 
 FINAL_LIBRARY = 'xul'
 
 if CONFIG['GNU_CXX']:
     CXXFLAGS += ['-Wno-error=shadow']
deleted file mode 100644
--- a/intl/unicharutil/normalization_data.h
+++ /dev/null
@@ -1,5247 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* This file is modified from JPNIC's mDNKit, it is under both MPL and
- * JPNIC's license.
- */
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * 			LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- *    modified or derived work) in source and/or binary forms is permitted
- *    under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- *    appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- *    this License Terms and Conditions, in the documentation and/or other
- *    materials provided with the distribution.  For the purposes of binary
- *    distribution the "Copyright Notice" refers to the following language:
- *    "Copyright (c) 2000-2002 Japan Network Information Center.  All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- *    derived from this Software without specific prior written approval of
- *    JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- *    "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 JPNIC 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 DAMAGES.
- */
-
-/* $Id: normalization_data.h,v 1.1 2005/04/05 23:00:13 jshin%mailaps.org Exp $ */
-/* $-Id: generate_normalize_data.pl,v 1.9 2002/11/29 09:08:13 ishisone Exp -$ */
-/*
- * Do not edit this file!
- * This file is generated from UnicodeData.txt, CompositionExclusions-1.txt,
- * SpecialCasing.txt and CaseFolding.txt.
- */
-
-
-/*
- * Canonical Class
- */
-
-#define CANON_CLASS_BITS_0	9
-#define CANON_CLASS_BITS_1	7
-#define CANON_CLASS_BITS_2	5
-
-static const char16_t canon_class_imap[] = {
-	  272,   400,   528,   656,   784,   784,   784,   784,
-	  784,   784,   912,   784,   784,   784,   784,  1040,
-	 1168,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,  1296,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	    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,     2,     3,     4,     0,     0,     0,     0,
-	    0,     0,     0,     0,     5,     0,     0,     0,
-	    0,     0,     0,     0,     6,     7,     8,     0,
-	    9,     0,    10,    11,     0,     0,    12,    13,
-	   14,    15,    16,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    17,    18,     0,     0,    17,    19,     0,
-	    0,    17,    19,     0,     0,    17,    19,     0,
-	    0,    17,    19,     0,     0,     0,    19,     0,
-	    0,     0,    20,     0,     0,    17,    19,     0,
-	    0,     0,    19,     0,     0,     0,    21,     0,
-	    0,    22,    23,     0,     0,    24,    25,     0,
-	   26,    27,     0,    28,    29,     0,    30,     0,
-	    0,    31,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,    32,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	   33,    33,     0,     0,     0,     0,    34,     0,
-	    0,     0,     0,     0,     0,    35,     0,     0,
-	    0,    36,     0,     0,     0,     0,     0,     0,
-	   37,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,    38,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,    39,    40,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    41,     0,     0,    42,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	   43,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	   44,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    45,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	   46,    47,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,    48,    49,    50,     0,     0,
-	    0,     0,    51,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-};
-
-static const struct {
-	unsigned char tbl[32];
-} canon_class_table[] = {
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
-	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  232,
-	 220,  220,  220,  220,  232,  216,  220,  220,  220,  220,
-	}},
-	{{
-	 220,  202,  202,  220,  220,  220,  220,  202,  202,  220,  220,
-	 220,  220,  220,  220,  220,  220,  220,  220,  220,    1,    1,
-	   1,    1,    1,  220,  220,  220,  220,  230,  230,  230,
-	}},
-	{{
-	 230,  230,  230,  230,  230,  240,  230,  220,  220,  220,  230,
-	 230,  230,  220,  220,    0,  230,  230,  230,  220,  220,  220,
-	 220,  230,  232,  220,  220,  230,  233,  234,  234,  233,
-	}},
-	{{
-	 234,  234,  233,  230,  230,  230,  230,  230,  230,  230,  230,
-	 230,  230,  230,  230,  230,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,  230,  230,  230,  230,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,  220,  230,  230,  230,  230,
-	 220,  230,  230,  230,  222,  220,  230,  230,  230,  230,
-	}},
-	{{
-	 230,  230,  220,  220,  220,  220,  220,  220,  230,  230,  220,
-	 230,  230,  222,  228,  230,   10,   11,   12,   13,   14,   15,
-	  16,   17,   18,   19,    0,   20,   21,   22,    0,   23,
-	}},
-	{{
-	   0,   24,   25,    0,  230,  220,    0,   18,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,  230,  230,  230,  230,  230,  230,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	  27,   28,   29,   30,   31,   32,   33,   34,  230,  230,  220,
-	 220,  230,  230,  230,  230,  230,  220,  230,  230,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,   35,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	 230,  230,  230,  230,  230,  230,  230,    0,    0,  230,
-	}},
-	{{
-	 230,  230,  230,  220,  230,    0,    0,  230,  230,    0,  220,
-	 230,  230,  220,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,   36,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,  230,  220,  230,  230,  220,  230,
-	 230,  220,  220,  220,  230,  220,  220,  230,  220,  230,
-	}},
-	{{
-	 230,  230,  220,  230,  220,  230,  220,  230,  220,  230,  230,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    7,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    9,    0,    0,    0,  230,  220,  230,  230,    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,    0,    0,    0,
-	   0,    0,    9,    0,    0,    0,    0,    0,    0,    0,   84,
-	  91,    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,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,  103,  103,    9,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,  107,  107,  107,
-	 107,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,  118,  118,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,  122,  122,  122,
-	 122,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,  220,  220,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,  220,
-	   0,  220,    0,  216,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,  129,  130,    0,  132,    0,
-	   0,    0,    0,    0,  130,  130,  130,  130,    0,    0,
-	}},
-	{{
-	 130,    0,  230,  230,    9,    0,  230,  230,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,  220,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    7,    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,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,  230,
-	}},
-	{{
-	   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,    0,    0,    0,    9,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,  230,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,  228,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,  222,  230,  220,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,  230,  220,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	 230,  230,  220,  230,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,  230,  230,    1,    1,  230,  230,
-	 230,  230,    1,    1,    1,  230,  230,    0,    0,    0,
-	}},
-	{{
-	   0,  230,    0,    0,    0,    1,    1,  230,  220,  230,    1,
-	   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,    0,    0,    0,    0,    0,  218,
-	 228,  232,  222,  224,  224,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    8,    8,    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,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,   26,    0,
-	}},
-	{{
-	 230,  230,  230,  230,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,  220,    0,  230,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,  230,    1,  220,    0,    0,    0,    0,    9,
-	}},
-	{{
-	   0,    0,    0,    0,    0,  216,  216,    1,    1,    1,    0,
-	   0,    0,  226,  216,  216,  216,  216,  216,    0,    0,    0,
-	   0,    0,    0,    0,    0,  220,  220,  220,  220,  220,
-	}},
-	{{
-	 220,  220,  220,    0,    0,  230,  230,  230,  230,  230,  220,
-	 220,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,  230,
-	 230,  230,  230,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-	{{
-	   0,    0,  230,  230,  230,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-	}},
-};
-
-/*
- * Canonical Composition
- */
-
-#define CANON_COMPOSE_BITS_0	9
-#define CANON_COMPOSE_BITS_1	7
-#define CANON_COMPOSE_BITS_2	5
-
-static const char16_t compose_imap[] = {
-	  272,   400,   528,   656,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	    0,     1,     2,     3,     0,     4,     5,     6,
-	    7,     0,     8,     9,     0,    10,     0,    11,
-	    0,    12,     0,     0,    13,     0,     0,     0,
-	    0,     0,     0,     0,    14,    15,    16,     0,
-	   17,    18,    19,    20,     0,     0,    21,    22,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    23,    24,     0,     0,     0,    25,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    26,     0,     0,     0,     0,    27,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,    28,     0,    29,     0,    30,     0,
-	    0,     0,    31,     0,     0,    32,    33,     0,
-	    0,     0,    34,     0,     0,     0,    35,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    36,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    37,    38,    39,     0,    40,    41,     0,
-	   42,    43,    44,    45,     0,    46,    47,    48,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,    49,     0,    50,     0,
-	   51,    52,    53,    54,    55,    56,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,    57,    58,    59,    60,    61,    62,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-};
-
-static const struct {
-	uint32_t tbl[32];
-} compose_table[] = {
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	   65537,    65538,    65539,        0,
-	}},
-	{{
-	       0,  1048580,   196628,   327703,   393244,  1114146,    65587,
-	  458804,   458811,   983106,    65617,   327762,   393303,   196701,
-	  589920,  1048681,   131193,        0,   524411,   458883,   458890,
-	 1245329,   131236,   393382,   131244,   589998,   393399,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,  1048765,   196813,   327888,   393429,  1114331,    65772,
-	  458989,   524532,   917756,   131338,   327948,   393489,   196887,
-	  590106,  1048867,   131379,        0,   524597,   459069,   524612,
-	 1245516,   131423,   459105,   131432,   655722,   393588,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,   196986,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,   262525,        0,    65921,    65922,   131459,
-	   65925,        0,        0,   262534,        0,        0,        0,
-	       0,    65930,        0,        0,        0,        0,   262539,
-	  197007,    65938,        0,    65939,        0,        0,        0,
-	  262548,        0,        0,        0,
-	}},
-	{{
-	       0,        0,   262552,        0,    65948,    65949,   131486,
-	   65952,        0,        0,   262561,        0,        0,        0,
-	       0,    65957,        0,        0,        0,        0,   262566,
-	  197034,    65965,        0,    65966,        0,        0,        0,
-	  262575,        0,        0,        0,
-	}},
-	{{
-	       0,        0,   262579,   262583,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,   131515,   131517,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,   131519,   131521,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,    65987,    65988,
-	       0,        0,        0,        0,
-	}},
-	{{
-	   65989,    65990,        0,        0,        0,        0,        0,
-	       0,    65991,    65992,    65993,    65994,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,    65995,
-	}},
-	{{
-	  328140,   328145,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,   328150,   328155,        0,        0,        0,        0,
-	       0,        0,    66016,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,    66017,    66018,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,    66019,
-	   66020,    66021,    66022,        0,        0,        0,        0,
-	   66023,    66024,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,    66025,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,   459242,        0,        0,        0,
-	  262641,        0,   328181,        0,   459258,        0,        0,
-	       0,        0,        0,   262657,
-	}},
-	{{
-	       0,    66053,        0,        0,        0,   393734,        0,
-	       0,        0,   328204,        0,        0,    66065,        0,
-	   66066,        0,        0,   524819,        0,        0,        0,
-	  262683,        0,   393759,        0,   524837,        0,        0,
-	       0,        0,        0,   262701,
-	}},
-	{{
-	       0,   131633,        0,        0,        0,   524851,        0,
-	       0,        0,   393787,   197185,   197188,        0,        0,
-	   66119,        0,        0,        0,   131656,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,    66122,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,   131659,        0,        0,    66125,        0,
-	  197198,   131665,    66131,   262740,        0,    66136,        0,
-	       0,        0,    66137,        0,
-	}},
-	{{
-	       0,        0,        0,   262746,        0,        0,        0,
-	   66142,        0,        0,        0,    66143,        0,    66144,
-	       0,        0,   131681,        0,        0,    66147,        0,
-	  197220,   131687,    66153,   262762,        0,    66158,        0,
-	       0,        0,    66159,        0,
-	}},
-	{{
-	       0,        0,        0,   262768,        0,        0,        0,
-	   66164,        0,        0,        0,    66165,        0,    66166,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66167,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,    66168,
-	   66169,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,    66170,    66171,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66172,    66173,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	  197246,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66177,        0,    66178,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,    66179,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,    66180,        0,        0,
-	   66181,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66182,        0,        0,        0,        0,        0,
-	       0,        0,    66183,        0,        0,    66184,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	  131721,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	  197259,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,    66190,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,   131727,
-	   66193,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,    66194,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,    66195,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,   197268,
-	       0,        0,        0,    66199,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,   131736,
-	   66202,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,   197275,        0,        0,
-	   66206,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,    66207,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66208,    66209,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,    66210,    66211,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,    66212,    66213,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	  131750,   131752,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,    66218,    66219,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,    66220,    66221,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	  262830,   262834,    66230,    66231,    66232,    66233,    66234,
-	   66235,   262844,   262848,    66244,    66245,    66246,    66247,
-	   66248,    66249,   131786,   131788,        0,        0,        0,
-	       0,        0,        0,   131790,   131792,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	  262866,   262870,    66266,    66267,    66268,    66269,    66270,
-	   66271,   262880,   262884,    66280,    66281,    66282,    66283,
-	   66284,    66285,   197358,   197361,        0,        0,        0,
-	       0,        0,        0,   197364,   197367,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	  131834,   131836,        0,        0,        0,        0,        0,
-	       0,   131838,   131840,        0,        0,        0,        0,
-	       0,        0,   197378,   197381,        0,        0,        0,
-	       0,        0,        0,        0,   197384,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	  262923,   262927,    66323,    66324,    66325,    66326,    66327,
-	   66328,   262937,   262941,    66337,    66338,    66339,    66340,
-	   66341,    66342,    66343,        0,        0,        0,    66344,
-	       0,        0,        0,        0,        0,        0,        0,
-	   66345,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66346,        0,        0,        0,        0,        0,
-	       0,        0,        0,   197419,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,    66350,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66351,        0,        0,        0,        0,        0,
-	       0,        0,   197424,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,    66355,        0,    66356,        0,    66357,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,    66358,        0,    66359,        0,    66360,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,    66361,        0,        0,        0,
-	       0,    66362,        0,        0,    66363,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,    66364,        0,    66365,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	   66366,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,    66367,        0,    66368,        0,
-	       0,    66369,        0,        0,        0,        0,    66370,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,    66371,        0,        0,    66372,    66373,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,    66374,    66375,        0,
-	       0,    66376,    66377,        0,        0,    66378,    66379,
-	   66380,    66381,        0,        0,
-	}},
-	{{
-	       0,        0,    66382,    66383,        0,        0,    66384,
-	   66385,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,    66386,    66387,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,    66388,        0,        0,        0,        0,
-	       0,    66389,    66390,        0,    66391,        0,        0,
-	       0,        0,        0,        0,    66392,    66393,    66394,
-	   66395,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,    66396,
-	       0,        0,        0,        0,    66397,        0,    66398,
-	       0,    66399,        0,    66400,        0,    66401,        0,
-	   66402,        0,    66403,        0,    66404,        0,    66405,
-	       0,    66406,        0,    66407,
-	}},
-	{{
-	       0,    66408,        0,        0,    66409,        0,    66410,
-	       0,    66411,        0,        0,        0,        0,        0,
-	       0,   131948,        0,        0,   131950,        0,        0,
-	  131952,        0,        0,   131954,        0,        0,   131956,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66422,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,    66423,
-	       0,        0,        0,        0,    66424,        0,    66425,
-	       0,    66426,        0,    66427,        0,    66428,        0,
-	   66429,        0,    66430,        0,    66431,        0,    66432,
-	       0,    66433,        0,    66434,
-	}},
-	{{
-	       0,    66435,        0,        0,    66436,        0,    66437,
-	       0,    66438,        0,        0,        0,        0,        0,
-	       0,   131975,        0,        0,   131977,        0,        0,
-	  131979,        0,        0,   131981,        0,        0,   131983,
-	       0,        0,        0,        0,
-	}},
-	{{
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66449,    66450,    66451,    66452,        0,        0,
-	       0,        0,        0,        0,        0,        0,        0,
-	       0,    66453,        0,        0,
-	}},
-};
-
-static const struct composition compose_seq[] = {
-	{ 0x00000000, 0x00000000 }, { 0x00000338, 0x0000226e },
-	{ 0x00000338, 0x00002260 }, { 0x00000338, 0x0000226f },
-	{ 0x00000300, 0x000000c0 }, { 0x00000301, 0x000000c1 },
-	{ 0x00000302, 0x000000c2 }, { 0x00000303, 0x000000c3 },
-	{ 0x00000304, 0x00000100 }, { 0x00000306, 0x00000102 },
-	{ 0x00000307, 0x00000226 }, { 0x00000308, 0x000000c4 },
-	{ 0x00000309, 0x00001ea2 }, { 0x0000030a, 0x000000c5 },
-	{ 0x0000030c, 0x000001cd }, { 0x0000030f, 0x00000200 },
-	{ 0x00000311, 0x00000202 }, { 0x00000323, 0x00001ea0 },
-	{ 0x00000325, 0x00001e00 }, { 0x00000328, 0x00000104 },
-	{ 0x00000307, 0x00001e02 }, { 0x00000323, 0x00001e04 },
-	{ 0x00000331, 0x00001e06 }, { 0x00000301, 0x00000106 },
-	{ 0x00000302, 0x00000108 }, { 0x00000307, 0x0000010a },
-	{ 0x0000030c, 0x0000010c }, { 0x00000327, 0x000000c7 },
-	{ 0x00000307, 0x00001e0a }, { 0x0000030c, 0x0000010e },
-	{ 0x00000323, 0x00001e0c }, { 0x00000327, 0x00001e10 },
-	{ 0x0000032d, 0x00001e12 }, { 0x00000331, 0x00001e0e },
-	{ 0x00000300, 0x000000c8 }, { 0x00000301, 0x000000c9 },
-	{ 0x00000302, 0x000000ca }, { 0x00000303, 0x00001ebc },
-	{ 0x00000304, 0x00000112 }, { 0x00000306, 0x00000114 },
-	{ 0x00000307, 0x00000116 }, { 0x00000308, 0x000000cb },
-	{ 0x00000309, 0x00001eba }, { 0x0000030c, 0x0000011a },
-	{ 0x0000030f, 0x00000204 }, { 0x00000311, 0x00000206 },
-	{ 0x00000323, 0x00001eb8 }, { 0x00000327, 0x00000228 },
-	{ 0x00000328, 0x00000118 }, { 0x0000032d, 0x00001e18 },
-	{ 0x00000330, 0x00001e1a }, { 0x00000307, 0x00001e1e },
-	{ 0x00000301, 0x000001f4 }, { 0x00000302, 0x0000011c },
-	{ 0x00000304, 0x00001e20 }, { 0x00000306, 0x0000011e },
-	{ 0x00000307, 0x00000120 }, { 0x0000030c, 0x000001e6 },
-	{ 0x00000327, 0x00000122 }, { 0x00000302, 0x00000124 },
-	{ 0x00000307, 0x00001e22 }, { 0x00000308, 0x00001e26 },
-	{ 0x0000030c, 0x0000021e }, { 0x00000323, 0x00001e24 },
-	{ 0x00000327, 0x00001e28 }, { 0x0000032e, 0x00001e2a },
-	{ 0x00000300, 0x000000cc }, { 0x00000301, 0x000000cd },
-	{ 0x00000302, 0x000000ce }, { 0x00000303, 0x00000128 },
-	{ 0x00000304, 0x0000012a }, { 0x00000306, 0x0000012c },
-	{ 0x00000307, 0x00000130 }, { 0x00000308, 0x000000cf },
-	{ 0x00000309, 0x00001ec8 }, { 0x0000030c, 0x000001cf },
-	{ 0x0000030f, 0x00000208 }, { 0x00000311, 0x0000020a },
-	{ 0x00000323, 0x00001eca }, { 0x00000328, 0x0000012e },
-	{ 0x00000330, 0x00001e2c }, { 0x00000302, 0x00000134 },
-	{ 0x00000301, 0x00001e30 }, { 0x0000030c, 0x000001e8 },
-	{ 0x00000323, 0x00001e32 }, { 0x00000327, 0x00000136 },
-	{ 0x00000331, 0x00001e34 }, { 0x00000301, 0x00000139 },
-	{ 0x0000030c, 0x0000013d }, { 0x00000323, 0x00001e36 },
-	{ 0x00000327, 0x0000013b }, { 0x0000032d, 0x00001e3c },
-	{ 0x00000331, 0x00001e3a }, { 0x00000301, 0x00001e3e },
-	{ 0x00000307, 0x00001e40 }, { 0x00000323, 0x00001e42 },
-	{ 0x00000300, 0x000001f8 }, { 0x00000301, 0x00000143 },
-	{ 0x00000303, 0x000000d1 }, { 0x00000307, 0x00001e44 },
-	{ 0x0000030c, 0x00000147 }, { 0x00000323, 0x00001e46 },
-	{ 0x00000327, 0x00000145 }, { 0x0000032d, 0x00001e4a },
-	{ 0x00000331, 0x00001e48 }, { 0x00000300, 0x000000d2 },
-	{ 0x00000301, 0x000000d3 }, { 0x00000302, 0x000000d4 },
-	{ 0x00000303, 0x000000d5 }, { 0x00000304, 0x0000014c },
-	{ 0x00000306, 0x0000014e }, { 0x00000307, 0x0000022e },
-	{ 0x00000308, 0x000000d6 }, { 0x00000309, 0x00001ece },
-	{ 0x0000030b, 0x00000150 }, { 0x0000030c, 0x000001d1 },
-	{ 0x0000030f, 0x0000020c }, { 0x00000311, 0x0000020e },
-	{ 0x0000031b, 0x000001a0 }, { 0x00000323, 0x00001ecc },
-	{ 0x00000328, 0x000001ea }, { 0x00000301, 0x00001e54 },
-	{ 0x00000307, 0x00001e56 }, { 0x00000301, 0x00000154 },
-	{ 0x00000307, 0x00001e58 }, { 0x0000030c, 0x00000158 },
-	{ 0x0000030f, 0x00000210 }, { 0x00000311, 0x00000212 },
-	{ 0x00000323, 0x00001e5a }, { 0x00000327, 0x00000156 },
-	{ 0x00000331, 0x00001e5e }, { 0x00000301, 0x0000015a },
-	{ 0x00000302, 0x0000015c }, { 0x00000307, 0x00001e60 },
-	{ 0x0000030c, 0x00000160 }, { 0x00000323, 0x00001e62 },
-	{ 0x00000326, 0x00000218 }, { 0x00000327, 0x0000015e },
-	{ 0x00000307, 0x00001e6a }, { 0x0000030c, 0x00000164 },
-	{ 0x00000323, 0x00001e6c }, { 0x00000326, 0x0000021a },
-	{ 0x00000327, 0x00000162 }, { 0x0000032d, 0x00001e70 },
-	{ 0x00000331, 0x00001e6e }, { 0x00000300, 0x000000d9 },
-	{ 0x00000301, 0x000000da }, { 0x00000302, 0x000000db },
-	{ 0x00000303, 0x00000168 }, { 0x00000304, 0x0000016a },
-	{ 0x00000306, 0x0000016c }, { 0x00000308, 0x000000dc },
-	{ 0x00000309, 0x00001ee6 }, { 0x0000030a, 0x0000016e },
-	{ 0x0000030b, 0x00000170 }, { 0x0000030c, 0x000001d3 },
-	{ 0x0000030f, 0x00000214 }, { 0x00000311, 0x00000216 },
-	{ 0x0000031b, 0x000001af }, { 0x00000323, 0x00001ee4 },
-	{ 0x00000324, 0x00001e72 }, { 0x00000328, 0x00000172 },
-	{ 0x0000032d, 0x00001e76 }, { 0x00000330, 0x00001e74 },
-	{ 0x00000303, 0x00001e7c }, { 0x00000323, 0x00001e7e },
-	{ 0x00000300, 0x00001e80 }, { 0x00000301, 0x00001e82 },
-	{ 0x00000302, 0x00000174 }, { 0x00000307, 0x00001e86 },
-	{ 0x00000308, 0x00001e84 }, { 0x00000323, 0x00001e88 },
-	{ 0x00000307, 0x00001e8a }, { 0x00000308, 0x00001e8c },
-	{ 0x00000300, 0x00001ef2 }, { 0x00000301, 0x000000dd },
-	{ 0x00000302, 0x00000176 }, { 0x00000303, 0x00001ef8 },
-	{ 0x00000304, 0x00000232 }, { 0x00000307, 0x00001e8e },
-	{ 0x00000308, 0x00000178 }, { 0x00000309, 0x00001ef6 },
-	{ 0x00000323, 0x00001ef4 }, { 0x00000301, 0x00000179 },
-	{ 0x00000302, 0x00001e90 }, { 0x00000307, 0x0000017b },
-	{ 0x0000030c, 0x0000017d }, { 0x00000323, 0x00001e92 },
-	{ 0x00000331, 0x00001e94 }, { 0x00000300, 0x000000e0 },
-	{ 0x00000301, 0x000000e1 }, { 0x00000302, 0x000000e2 },
-	{ 0x00000303, 0x000000e3 }, { 0x00000304, 0x00000101 },
-	{ 0x00000306, 0x00000103 }, { 0x00000307, 0x00000227 },
-	{ 0x00000308, 0x000000e4 }, { 0x00000309, 0x00001ea3 },
-	{ 0x0000030a, 0x000000e5 }, { 0x0000030c, 0x000001ce },
-	{ 0x0000030f, 0x00000201 }, { 0x00000311, 0x00000203 },
-	{ 0x00000323, 0x00001ea1 }, { 0x00000325, 0x00001e01 },
-	{ 0x00000328, 0x00000105 }, { 0x00000307, 0x00001e03 },
-	{ 0x00000323, 0x00001e05 }, { 0x00000331, 0x00001e07 },
-	{ 0x00000301, 0x00000107 }, { 0x00000302, 0x00000109 },
-	{ 0x00000307, 0x0000010b }, { 0x0000030c, 0x0000010d },
-	{ 0x00000327, 0x000000e7 }, { 0x00000307, 0x00001e0b },
-	{ 0x0000030c, 0x0000010f }, { 0x00000323, 0x00001e0d },
-	{ 0x00000327, 0x00001e11 }, { 0x0000032d, 0x00001e13 },
-	{ 0x00000331, 0x00001e0f }, { 0x00000300, 0x000000e8 },
-	{ 0x00000301, 0x000000e9 }, { 0x00000302, 0x000000ea },
-	{ 0x00000303, 0x00001ebd }, { 0x00000304, 0x00000113 },
-	{ 0x00000306, 0x00000115 }, { 0x00000307, 0x00000117 },
-	{ 0x00000308, 0x000000eb }, { 0x00000309, 0x00001ebb },
-	{ 0x0000030c, 0x0000011b }, { 0x0000030f, 0x00000205 },
-	{ 0x00000311, 0x00000207 }, { 0x00000323, 0x00001eb9 },
-	{ 0x00000327, 0x00000229 }, { 0x00000328, 0x00000119 },
-	{ 0x0000032d, 0x00001e19 }, { 0x00000330, 0x00001e1b },
-	{ 0x00000307, 0x00001e1f }, { 0x00000301, 0x000001f5 },
-	{ 0x00000302, 0x0000011d }, { 0x00000304, 0x00001e21 },
-	{ 0x00000306, 0x0000011f }, { 0x00000307, 0x00000121 },
-	{ 0x0000030c, 0x000001e7 }, { 0x00000327, 0x00000123 },
-	{ 0x00000302, 0x00000125 }, { 0x00000307, 0x00001e23 },
-	{ 0x00000308, 0x00001e27 }, { 0x0000030c, 0x0000021f },
-	{ 0x00000323, 0x00001e25 }, { 0x00000327, 0x00001e29 },
-	{ 0x0000032e, 0x00001e2b }, { 0x00000331, 0x00001e96 },
-	{ 0x00000300, 0x000000ec }, { 0x00000301, 0x000000ed },
-	{ 0x00000302, 0x000000ee }, { 0x00000303, 0x00000129 },
-	{ 0x00000304, 0x0000012b }, { 0x00000306, 0x0000012d },
-	{ 0x00000308, 0x000000ef }, { 0x00000309, 0x00001ec9 },
-	{ 0x0000030c, 0x000001d0 }, { 0x0000030f, 0x00000209 },
-	{ 0x00000311, 0x0000020b }, { 0x00000323, 0x00001ecb },
-	{ 0x00000328, 0x0000012f }, { 0x00000330, 0x00001e2d },
-	{ 0x00000302, 0x00000135 }, { 0x0000030c, 0x000001f0 },
-	{ 0x00000301, 0x00001e31 }, { 0x0000030c, 0x000001e9 },
-	{ 0x00000323, 0x00001e33 }, { 0x00000327, 0x00000137 },
-	{ 0x00000331, 0x00001e35 }, { 0x00000301, 0x0000013a },
-	{ 0x0000030c, 0x0000013e }, { 0x00000323, 0x00001e37 },
-	{ 0x00000327, 0x0000013c }, { 0x0000032d, 0x00001e3d },
-	{ 0x00000331, 0x00001e3b }, { 0x00000301, 0x00001e3f },
-	{ 0x00000307, 0x00001e41 }, { 0x00000323, 0x00001e43 },
-	{ 0x00000300, 0x000001f9 }, { 0x00000301, 0x00000144 },
-	{ 0x00000303, 0x000000f1 }, { 0x00000307, 0x00001e45 },
-	{ 0x0000030c, 0x00000148 }, { 0x00000323, 0x00001e47 },
-	{ 0x00000327, 0x00000146 }, { 0x0000032d, 0x00001e4b },
-	{ 0x00000331, 0x00001e49 }, { 0x00000300, 0x000000f2 },
-	{ 0x00000301, 0x000000f3 }, { 0x00000302, 0x000000f4 },
-	{ 0x00000303, 0x000000f5 }, { 0x00000304, 0x0000014d },
-	{ 0x00000306, 0x0000014f }, { 0x00000307, 0x0000022f },
-	{ 0x00000308, 0x000000f6 }, { 0x00000309, 0x00001ecf },
-	{ 0x0000030b, 0x00000151 }, { 0x0000030c, 0x000001d2 },
-	{ 0x0000030f, 0x0000020d }, { 0x00000311, 0x0000020f },
-	{ 0x0000031b, 0x000001a1 }, { 0x00000323, 0x00001ecd },
-	{ 0x00000328, 0x000001eb }, { 0x00000301, 0x00001e55 },
-	{ 0x00000307, 0x00001e57 }, { 0x00000301, 0x00000155 },
-	{ 0x00000307, 0x00001e59 }, { 0x0000030c, 0x00000159 },
-	{ 0x0000030f, 0x00000211 }, { 0x00000311, 0x00000213 },
-	{ 0x00000323, 0x00001e5b }, { 0x00000327, 0x00000157 },
-	{ 0x00000331, 0x00001e5f }, { 0x00000301, 0x0000015b },
-	{ 0x00000302, 0x0000015d }, { 0x00000307, 0x00001e61 },
-	{ 0x0000030c, 0x00000161 }, { 0x00000323, 0x00001e63 },
-	{ 0x00000326, 0x00000219 }, { 0x00000327, 0x0000015f },
-	{ 0x00000307, 0x00001e6b }, { 0x00000308, 0x00001e97 },
-	{ 0x0000030c, 0x00000165 }, { 0x00000323, 0x00001e6d },
-	{ 0x00000326, 0x0000021b }, { 0x00000327, 0x00000163 },
-	{ 0x0000032d, 0x00001e71 }, { 0x00000331, 0x00001e6f },
-	{ 0x00000300, 0x000000f9 }, { 0x00000301, 0x000000fa },
-	{ 0x00000302, 0x000000fb }, { 0x00000303, 0x00000169 },
-	{ 0x00000304, 0x0000016b }, { 0x00000306, 0x0000016d },
-	{ 0x00000308, 0x000000fc }, { 0x00000309, 0x00001ee7 },
-	{ 0x0000030a, 0x0000016f }, { 0x0000030b, 0x00000171 },
-	{ 0x0000030c, 0x000001d4 }, { 0x0000030f, 0x00000215 },
-	{ 0x00000311, 0x00000217 }, { 0x0000031b, 0x000001b0 },
-	{ 0x00000323, 0x00001ee5 }, { 0x00000324, 0x00001e73 },
-	{ 0x00000328, 0x00000173 }, { 0x0000032d, 0x00001e77 },
-	{ 0x00000330, 0x00001e75 }, { 0x00000303, 0x00001e7d },
-	{ 0x00000323, 0x00001e7f }, { 0x00000300, 0x00001e81 },
-	{ 0x00000301, 0x00001e83 }, { 0x00000302, 0x00000175 },
-	{ 0x00000307, 0x00001e87 }, { 0x00000308, 0x00001e85 },
-	{ 0x0000030a, 0x00001e98 }, { 0x00000323, 0x00001e89 },
-	{ 0x00000307, 0x00001e8b }, { 0x00000308, 0x00001e8d },
-	{ 0x00000300, 0x00001ef3 }, { 0x00000301, 0x000000fd },
-	{ 0x00000302, 0x00000177 }, { 0x00000303, 0x00001ef9 },
-	{ 0x00000304, 0x00000233 }, { 0x00000307, 0x00001e8f },
-	{ 0x00000308, 0x000000ff }, { 0x00000309, 0x00001ef7 },
-	{ 0x0000030a, 0x00001e99 }, { 0x00000323, 0x00001ef5 },
-	{ 0x00000301, 0x0000017a }, { 0x00000302, 0x00001e91 },
-	{ 0x00000307, 0x0000017c }, { 0x0000030c, 0x0000017e },
-	{ 0x00000323, 0x00001e93 }, { 0x00000331, 0x00001e95 },
-	{ 0x00000300, 0x00001fed }, { 0x00000301, 0x00000385 },
-	{ 0x00000342, 0x00001fc1 }, { 0x00000300, 0x00001ea6 },
-	{ 0x00000301, 0x00001ea4 }, { 0x00000303, 0x00001eaa },
-	{ 0x00000309, 0x00001ea8 }, { 0x00000304, 0x000001de },
-	{ 0x00000301, 0x000001fa }, { 0x00000301, 0x000001fc },
-	{ 0x00000304, 0x000001e2 }, { 0x00000301, 0x00001e08 },
-	{ 0x00000300, 0x00001ec0 }, { 0x00000301, 0x00001ebe },
-	{ 0x00000303, 0x00001ec4 }, { 0x00000309, 0x00001ec2 },
-	{ 0x00000301, 0x00001e2e }, { 0x00000300, 0x00001ed2 },
-	{ 0x00000301, 0x00001ed0 }, { 0x00000303, 0x00001ed6 },
-	{ 0x00000309, 0x00001ed4 }, { 0x00000301, 0x00001e4c },
-	{ 0x00000304, 0x0000022c }, { 0x00000308, 0x00001e4e },
-	{ 0x00000304, 0x0000022a }, { 0x00000301, 0x000001fe },
-	{ 0x00000300, 0x000001db }, { 0x00000301, 0x000001d7 },
-	{ 0x00000304, 0x000001d5 }, { 0x0000030c, 0x000001d9 },
-	{ 0x00000300, 0x00001ea7 }, { 0x00000301, 0x00001ea5 },
-	{ 0x00000303, 0x00001eab }, { 0x00000309, 0x00001ea9 },
-	{ 0x00000304, 0x000001df }, { 0x00000301, 0x000001fb },
-	{ 0x00000301, 0x000001fd }, { 0x00000304, 0x000001e3 },
-	{ 0x00000301, 0x00001e09 }, { 0x00000300, 0x00001ec1 },
-	{ 0x00000301, 0x00001ebf }, { 0x00000303, 0x00001ec5 },
-	{ 0x00000309, 0x00001ec3 }, { 0x00000301, 0x00001e2f },
-	{ 0x00000300, 0x00001ed3 }, { 0x00000301, 0x00001ed1 },
-	{ 0x00000303, 0x00001ed7 }, { 0x00000309, 0x00001ed5 },
-	{ 0x00000301, 0x00001e4d }, { 0x00000304, 0x0000022d },
-	{ 0x00000308, 0x00001e4f }, { 0x00000304, 0x0000022b },
-	{ 0x00000301, 0x000001ff }, { 0x00000300, 0x000001dc },
-	{ 0x00000301, 0x000001d8 }, { 0x00000304, 0x000001d6 },
-	{ 0x0000030c, 0x000001da }, { 0x00000300, 0x00001eb0 },
-	{ 0x00000301, 0x00001eae }, { 0x00000303, 0x00001eb4 },
-	{ 0x00000309, 0x00001eb2 }, { 0x00000300, 0x00001eb1 },
-	{ 0x00000301, 0x00001eaf }, { 0x00000303, 0x00001eb5 },
-	{ 0x00000309, 0x00001eb3 }, { 0x00000300, 0x00001e14 },
-	{ 0x00000301, 0x00001e16 }, { 0x00000300, 0x00001e15 },
-	{ 0x00000301, 0x00001e17 }, { 0x00000300, 0x00001e50 },
-	{ 0x00000301, 0x00001e52 }, { 0x00000300, 0x00001e51 },
-	{ 0x00000301, 0x00001e53 }, { 0x00000307, 0x00001e64 },
-	{ 0x00000307, 0x00001e65 }, { 0x00000307, 0x00001e66 },
-	{ 0x00000307, 0x00001e67 }, { 0x00000301, 0x00001e78 },
-	{ 0x00000301, 0x00001e79 }, { 0x00000308, 0x00001e7a },
-	{ 0x00000308, 0x00001e7b }, { 0x00000307, 0x00001e9b },
-	{ 0x00000300, 0x00001edc }, { 0x00000301, 0x00001eda },
-	{ 0x00000303, 0x00001ee0 }, { 0x00000309, 0x00001ede },
-	{ 0x00000323, 0x00001ee2 }, { 0x00000300, 0x00001edd },
-	{ 0x00000301, 0x00001edb }, { 0x00000303, 0x00001ee1 },
-	{ 0x00000309, 0x00001edf }, { 0x00000323, 0x00001ee3 },
-	{ 0x00000300, 0x00001eea }, { 0x00000301, 0x00001ee8 },
-	{ 0x00000303, 0x00001eee }, { 0x00000309, 0x00001eec },
-	{ 0x00000323, 0x00001ef0 }, { 0x00000300, 0x00001eeb },
-	{ 0x00000301, 0x00001ee9 }, { 0x00000303, 0x00001eef },
-	{ 0x00000309, 0x00001eed }, { 0x00000323, 0x00001ef1 },
-	{ 0x0000030c, 0x000001ee }, { 0x00000304, 0x000001ec },
-	{ 0x00000304, 0x000001ed }, { 0x00000304, 0x000001e0 },
-	{ 0x00000304, 0x000001e1 }, { 0x00000306, 0x00001e1c },
-	{ 0x00000306, 0x00001e1d }, { 0x00000304, 0x00000230 },
-	{ 0x00000304, 0x00000231 }, { 0x0000030c, 0x000001ef },
-	{ 0x00000300, 0x00001fba }, { 0x00000301, 0x00000386 },
-	{ 0x00000304, 0x00001fb9 }, { 0x00000306, 0x00001fb8 },
-	{ 0x00000313, 0x00001f08 }, { 0x00000314, 0x00001f09 },
-	{ 0x00000345, 0x00001fbc }, { 0x00000300, 0x00001fc8 },
-	{ 0x00000301, 0x00000388 }, { 0x00000313, 0x00001f18 },
-	{ 0x00000314, 0x00001f19 }, { 0x00000300, 0x00001fca },
-	{ 0x00000301, 0x00000389 }, { 0x00000313, 0x00001f28 },
-	{ 0x00000314, 0x00001f29 }, { 0x00000345, 0x00001fcc },
-	{ 0x00000300, 0x00001fda }, { 0x00000301, 0x0000038a },
-	{ 0x00000304, 0x00001fd9 }, { 0x00000306, 0x00001fd8 },
-	{ 0x00000308, 0x000003aa }, { 0x00000313, 0x00001f38 },
-	{ 0x00000314, 0x00001f39 }, { 0x00000300, 0x00001ff8 },
-	{ 0x00000301, 0x0000038c }, { 0x00000313, 0x00001f48 },
-	{ 0x00000314, 0x00001f49 }, { 0x00000314, 0x00001fec },
-	{ 0x00000300, 0x00001fea }, { 0x00000301, 0x0000038e },
-	{ 0x00000304, 0x00001fe9 }, { 0x00000306, 0x00001fe8 },
-	{ 0x00000308, 0x000003ab }, { 0x00000314, 0x00001f59 },
-	{ 0x00000300, 0x00001ffa }, { 0x00000301, 0x0000038f },
-	{ 0x00000313, 0x00001f68 }, { 0x00000314, 0x00001f69 },
-	{ 0x00000345, 0x00001ffc }, { 0x00000345, 0x00001fb4 },
-	{ 0x00000345, 0x00001fc4 }, { 0x00000300, 0x00001f70 },
-	{ 0x00000301, 0x000003ac }, { 0x00000304, 0x00001fb1 },
-	{ 0x00000306, 0x00001fb0 }, { 0x00000313, 0x00001f00 },
-	{ 0x00000314, 0x00001f01 }, { 0x00000342, 0x00001fb6 },
-	{ 0x00000345, 0x00001fb3 }, { 0x00000300, 0x00001f72 },
-	{ 0x00000301, 0x000003ad }, { 0x00000313, 0x00001f10 },
-	{ 0x00000314, 0x00001f11 }, { 0x00000300, 0x00001f74 },
-	{ 0x00000301, 0x000003ae }, { 0x00000313, 0x00001f20 },
-	{ 0x00000314, 0x00001f21 }, { 0x00000342, 0x00001fc6 },
-	{ 0x00000345, 0x00001fc3 }, { 0x00000300, 0x00001f76 },
-	{ 0x00000301, 0x000003af }, { 0x00000304, 0x00001fd1 },
-	{ 0x00000306, 0x00001fd0 }, { 0x00000308, 0x000003ca },
-	{ 0x00000313, 0x00001f30 }, { 0x00000314, 0x00001f31 },
-	{ 0x00000342, 0x00001fd6 }, { 0x00000300, 0x00001f78 },
-	{ 0x00000301, 0x000003cc }, { 0x00000313, 0x00001f40 },
-	{ 0x00000314, 0x00001f41 }, { 0x00000313, 0x00001fe4 },
-	{ 0x00000314, 0x00001fe5 }, { 0x00000300, 0x00001f7a },
-	{ 0x00000301, 0x000003cd }, { 0x00000304, 0x00001fe1 },
-	{ 0x00000306, 0x00001fe0 }, { 0x00000308, 0x000003cb },
-	{ 0x00000313, 0x00001f50 }, { 0x00000314, 0x00001f51 },
-	{ 0x00000342, 0x00001fe6 }, { 0x00000300, 0x00001f7c },
-	{ 0x00000301, 0x000003ce }, { 0x00000313, 0x00001f60 },
-	{ 0x00000314, 0x00001f61 }, { 0x00000342, 0x00001ff6 },
-	{ 0x00000345, 0x00001ff3 }, { 0x00000300, 0x00001fd2 },
-	{ 0x00000301, 0x00000390 }, { 0x00000342, 0x00001fd7 },
-	{ 0x00000300, 0x00001fe2 }, { 0x00000301, 0x000003b0 },
-	{ 0x00000342, 0x00001fe7 }, { 0x00000345, 0x00001ff4 },
-	{ 0x00000301, 0x000003d3 }, { 0x00000308, 0x000003d4 },
-	{ 0x00000308, 0x00000407 }, { 0x00000306, 0x000004d0 },
-	{ 0x00000308, 0x000004d2 }, { 0x00000301, 0x00000403 },
-	{ 0x00000300, 0x00000400 }, { 0x00000306, 0x000004d6 },
-	{ 0x00000308, 0x00000401 }, { 0x00000306, 0x000004c1 },
-	{ 0x00000308, 0x000004dc }, { 0x00000308, 0x000004de },
-	{ 0x00000300, 0x0000040d }, { 0x00000304, 0x000004e2 },
-	{ 0x00000306, 0x00000419 }, { 0x00000308, 0x000004e4 },
-	{ 0x00000301, 0x0000040c }, { 0x00000308, 0x000004e6 },
-	{ 0x00000304, 0x000004ee }, { 0x00000306, 0x0000040e },
-	{ 0x00000308, 0x000004f0 }, { 0x0000030b, 0x000004f2 },
-	{ 0x00000308, 0x000004f4 }, { 0x00000308, 0x000004f8 },
-	{ 0x00000308, 0x000004ec }, { 0x00000306, 0x000004d1 },
-	{ 0x00000308, 0x000004d3 }, { 0x00000301, 0x00000453 },
-	{ 0x00000300, 0x00000450 }, { 0x00000306, 0x000004d7 },
-	{ 0x00000308, 0x00000451 }, { 0x00000306, 0x000004c2 },
-	{ 0x00000308, 0x000004dd }, { 0x00000308, 0x000004df },
-	{ 0x00000300, 0x0000045d }, { 0x00000304, 0x000004e3 },
-	{ 0x00000306, 0x00000439 }, { 0x00000308, 0x000004e5 },
-	{ 0x00000301, 0x0000045c }, { 0x00000308, 0x000004e7 },
-	{ 0x00000304, 0x000004ef }, { 0x00000306, 0x0000045e },
-	{ 0x00000308, 0x000004f1 }, { 0x0000030b, 0x000004f3 },
-	{ 0x00000308, 0x000004f5 }, { 0x00000308, 0x000004f9 },
-	{ 0x00000308, 0x000004ed }, { 0x00000308, 0x00000457 },
-	{ 0x0000030f, 0x00000476 }, { 0x0000030f, 0x00000477 },
-	{ 0x00000308, 0x000004da }, { 0x00000308, 0x000004db },
-	{ 0x00000308, 0x000004ea }, { 0x00000308, 0x000004eb },
-	{ 0x00000653, 0x00000622 }, { 0x00000654, 0x00000623 },
-	{ 0x00000655, 0x00000625 }, { 0x00000654, 0x00000624 },
-	{ 0x00000654, 0x00000626 }, { 0x00000654, 0x000006c2 },
-	{ 0x00000654, 0x000006d3 }, { 0x00000654, 0x000006c0 },
-	{ 0x0000093c, 0x00000929 }, { 0x0000093c, 0x00000931 },
-	{ 0x0000093c, 0x00000934 }, { 0x000009be, 0x000009cb },
-	{ 0x000009d7, 0x000009cc }, { 0x00000b3e, 0x00000b4b },
-	{ 0x00000b56, 0x00000b48 }, { 0x00000b57, 0x00000b4c },
-	{ 0x00000bd7, 0x00000b94 }, { 0x00000bbe, 0x00000bca },
-	{ 0x00000bd7, 0x00000bcc }, { 0x00000bbe, 0x00000bcb },
-	{ 0x00000c56, 0x00000c48 }, { 0x00000cd5, 0x00000cc0 },
-	{ 0x00000cc2, 0x00000cca }, { 0x00000cd5, 0x00000cc7 },
-	{ 0x00000cd6, 0x00000cc8 }, { 0x00000cd5, 0x00000ccb },
-	{ 0x00000d3e, 0x00000d4a }, { 0x00000d57, 0x00000d4c },
-	{ 0x00000d3e, 0x00000d4b }, { 0x00000dca, 0x00000dda },
-	{ 0x00000dcf, 0x00000ddc }, { 0x00000ddf, 0x00000dde },
-	{ 0x00000dca, 0x00000ddd }, { 0x0000102e, 0x00001026 },
-	{ 0x00000304, 0x00001e38 }, { 0x00000304, 0x00001e39 },
-	{ 0x00000304, 0x00001e5c }, { 0x00000304, 0x00001e5d },
-	{ 0x00000307, 0x00001e68 }, { 0x00000307, 0x00001e69 },
-	{ 0x00000302, 0x00001eac }, { 0x00000306, 0x00001eb6 },
-	{ 0x00000302, 0x00001ead }, { 0x00000306, 0x00001eb7 },
-	{ 0x00000302, 0x00001ec6 }, { 0x00000302, 0x00001ec7 },
-	{ 0x00000302, 0x00001ed8 }, { 0x00000302, 0x00001ed9 },
-	{ 0x00000300, 0x00001f02 }, { 0x00000301, 0x00001f04 },
-	{ 0x00000342, 0x00001f06 }, { 0x00000345, 0x00001f80 },
-	{ 0x00000300, 0x00001f03 }, { 0x00000301, 0x00001f05 },
-	{ 0x00000342, 0x00001f07 }, { 0x00000345, 0x00001f81 },
-	{ 0x00000345, 0x00001f82 }, { 0x00000345, 0x00001f83 },
-	{ 0x00000345, 0x00001f84 }, { 0x00000345, 0x00001f85 },
-	{ 0x00000345, 0x00001f86 }, { 0x00000345, 0x00001f87 },
-	{ 0x00000300, 0x00001f0a }, { 0x00000301, 0x00001f0c },
-	{ 0x00000342, 0x00001f0e }, { 0x00000345, 0x00001f88 },
-	{ 0x00000300, 0x00001f0b }, { 0x00000301, 0x00001f0d },
-	{ 0x00000342, 0x00001f0f }, { 0x00000345, 0x00001f89 },
-	{ 0x00000345, 0x00001f8a }, { 0x00000345, 0x00001f8b },
-	{ 0x00000345, 0x00001f8c }, { 0x00000345, 0x00001f8d },
-	{ 0x00000345, 0x00001f8e }, { 0x00000345, 0x00001f8f },
-	{ 0x00000300, 0x00001f12 }, { 0x00000301, 0x00001f14 },
-	{ 0x00000300, 0x00001f13 }, { 0x00000301, 0x00001f15 },
-	{ 0x00000300, 0x00001f1a }, { 0x00000301, 0x00001f1c },
-	{ 0x00000300, 0x00001f1b }, { 0x00000301, 0x00001f1d },
-	{ 0x00000300, 0x00001f22 }, { 0x00000301, 0x00001f24 },
-	{ 0x00000342, 0x00001f26 }, { 0x00000345, 0x00001f90 },
-	{ 0x00000300, 0x00001f23 }, { 0x00000301, 0x00001f25 },
-	{ 0x00000342, 0x00001f27 }, { 0x00000345, 0x00001f91 },
-	{ 0x00000345, 0x00001f92 }, { 0x00000345, 0x00001f93 },
-	{ 0x00000345, 0x00001f94 }, { 0x00000345, 0x00001f95 },
-	{ 0x00000345, 0x00001f96 }, { 0x00000345, 0x00001f97 },
-	{ 0x00000300, 0x00001f2a }, { 0x00000301, 0x00001f2c },
-	{ 0x00000342, 0x00001f2e }, { 0x00000345, 0x00001f98 },
-	{ 0x00000300, 0x00001f2b }, { 0x00000301, 0x00001f2d },
-	{ 0x00000342, 0x00001f2f }, { 0x00000345, 0x00001f99 },
-	{ 0x00000345, 0x00001f9a }, { 0x00000345, 0x00001f9b },
-	{ 0x00000345, 0x00001f9c }, { 0x00000345, 0x00001f9d },
-	{ 0x00000345, 0x00001f9e }, { 0x00000345, 0x00001f9f },
-	{ 0x00000300, 0x00001f32 }, { 0x00000301, 0x00001f34 },
-	{ 0x00000342, 0x00001f36 }, { 0x00000300, 0x00001f33 },
-	{ 0x00000301, 0x00001f35 }, { 0x00000342, 0x00001f37 },
-	{ 0x00000300, 0x00001f3a }, { 0x00000301, 0x00001f3c },
-	{ 0x00000342, 0x00001f3e }, { 0x00000300, 0x00001f3b },
-	{ 0x00000301, 0x00001f3d }, { 0x00000342, 0x00001f3f },
-	{ 0x00000300, 0x00001f42 }, { 0x00000301, 0x00001f44 },
-	{ 0x00000300, 0x00001f43 }, { 0x00000301, 0x00001f45 },
-	{ 0x00000300, 0x00001f4a }, { 0x00000301, 0x00001f4c },
-	{ 0x00000300, 0x00001f4b }, { 0x00000301, 0x00001f4d },
-	{ 0x00000300, 0x00001f52 }, { 0x00000301, 0x00001f54 },
-	{ 0x00000342, 0x00001f56 }, { 0x00000300, 0x00001f53 },
-	{ 0x00000301, 0x00001f55 }, { 0x00000342, 0x00001f57 },
-	{ 0x00000300, 0x00001f5b }, { 0x00000301, 0x00001f5d },
-	{ 0x00000342, 0x00001f5f }, { 0x00000300, 0x00001f62 },
-	{ 0x00000301, 0x00001f64 }, { 0x00000342, 0x00001f66 },
-	{ 0x00000345, 0x00001fa0 }, { 0x00000300, 0x00001f63 },
-	{ 0x00000301, 0x00001f65 }, { 0x00000342, 0x00001f67 },
-	{ 0x00000345, 0x00001fa1 }, { 0x00000345, 0x00001fa2 },
-	{ 0x00000345, 0x00001fa3 }, { 0x00000345, 0x00001fa4 },
-	{ 0x00000345, 0x00001fa5 }, { 0x00000345, 0x00001fa6 },
-	{ 0x00000345, 0x00001fa7 }, { 0x00000300, 0x00001f6a },
-	{ 0x00000301, 0x00001f6c }, { 0x00000342, 0x00001f6e },
-	{ 0x00000345, 0x00001fa8 }, { 0x00000300, 0x00001f6b },
-	{ 0x00000301, 0x00001f6d }, { 0x00000342, 0x00001f6f },
-	{ 0x00000345, 0x00001fa9 }, { 0x00000345, 0x00001faa },
-	{ 0x00000345, 0x00001fab }, { 0x00000345, 0x00001fac },
-	{ 0x00000345, 0x00001fad }, { 0x00000345, 0x00001fae },
-	{ 0x00000345, 0x00001faf }, { 0x00000345, 0x00001fb2 },
-	{ 0x00000345, 0x00001fc2 }, { 0x00000345, 0x00001ff2 },
-	{ 0x00000345, 0x00001fb7 }, { 0x00000300, 0x00001fcd },
-	{ 0x00000301, 0x00001fce }, { 0x00000342, 0x00001fcf },
-	{ 0x00000345, 0x00001fc7 }, { 0x00000345, 0x00001ff7 },
-	{ 0x00000300, 0x00001fdd }, { 0x00000301, 0x00001fde },
-	{ 0x00000342, 0x00001fdf }, { 0x00000338, 0x0000219a },
-	{ 0x00000338, 0x0000219b }, { 0x00000338, 0x000021ae },
-	{ 0x00000338, 0x000021cd }, { 0x00000338, 0x000021cf },
-	{ 0x00000338, 0x000021ce }, { 0x00000338, 0x00002204 },
-	{ 0x00000338, 0x00002209 }, { 0x00000338, 0x0000220c },
-	{ 0x00000338, 0x00002224 }, { 0x00000338, 0x00002226 },
-	{ 0x00000338, 0x00002241 }, { 0x00000338, 0x00002244 },
-	{ 0x00000338, 0x00002247 }, { 0x00000338, 0x00002249 },
-	{ 0x00000338, 0x0000226d }, { 0x00000338, 0x00002262 },
-	{ 0x00000338, 0x00002270 }, { 0x00000338, 0x00002271 },
-	{ 0x00000338, 0x00002274 }, { 0x00000338, 0x00002275 },
-	{ 0x00000338, 0x00002278 }, { 0x00000338, 0x00002279 },
-	{ 0x00000338, 0x00002280 }, { 0x00000338, 0x00002281 },
-	{ 0x00000338, 0x000022e0 }, { 0x00000338, 0x000022e1 },
-	{ 0x00000338, 0x00002284 }, { 0x00000338, 0x00002285 },
-	{ 0x00000338, 0x00002288 }, { 0x00000338, 0x00002289 },
-	{ 0x00000338, 0x000022e2 }, { 0x00000338, 0x000022e3 },
-	{ 0x00000338, 0x000022ac }, { 0x00000338, 0x000022ad },
-	{ 0x00000338, 0x000022ae }, { 0x00000338, 0x000022af },
-	{ 0x00000338, 0x000022ea }, { 0x00000338, 0x000022eb },
-	{ 0x00000338, 0x000022ec }, { 0x00000338, 0x000022ed },
-	{ 0x00003099, 0x00003094 }, { 0x00003099, 0x0000304c },
-	{ 0x00003099, 0x0000304e }, { 0x00003099, 0x00003050 },
-	{ 0x00003099, 0x00003052 }, { 0x00003099, 0x00003054 },
-	{ 0x00003099, 0x00003056 }, { 0x00003099, 0x00003058 },
-	{ 0x00003099, 0x0000305a }, { 0x00003099, 0x0000305c },
-	{ 0x00003099, 0x0000305e }, { 0x00003099, 0x00003060 },
-	{ 0x00003099, 0x00003062 }, { 0x00003099, 0x00003065 },
-	{ 0x00003099, 0x00003067 }, { 0x00003099, 0x00003069 },
-	{ 0x00003099, 0x00003070 }, { 0x0000309a, 0x00003071 },
-	{ 0x00003099, 0x00003073 }, { 0x0000309a, 0x00003074 },
-	{ 0x00003099, 0x00003076 }, { 0x0000309a, 0x00003077 },
-	{ 0x00003099, 0x00003079 }, { 0x0000309a, 0x0000307a },
-	{ 0x00003099, 0x0000307c }, { 0x0000309a, 0x0000307d },
-	{ 0x00003099, 0x0000309e }, { 0x00003099, 0x000030f4 },
-	{ 0x00003099, 0x000030ac }, { 0x00003099, 0x000030ae },
-	{ 0x00003099, 0x000030b0 }, { 0x00003099, 0x000030b2 },
-	{ 0x00003099, 0x000030b4 }, { 0x00003099, 0x000030b6 },
-	{ 0x00003099, 0x000030b8 }, { 0x00003099, 0x000030ba },
-	{ 0x00003099, 0x000030bc }, { 0x00003099, 0x000030be },
-	{ 0x00003099, 0x000030c0 }, { 0x00003099, 0x000030c2 },
-	{ 0x00003099, 0x000030c5 }, { 0x00003099, 0x000030c7 },
-	{ 0x00003099, 0x000030c9 }, { 0x00003099, 0x000030d0 },
-	{ 0x0000309a, 0x000030d1 }, { 0x00003099, 0x000030d3 },
-	{ 0x0000309a, 0x000030d4 }, { 0x00003099, 0x000030d6 },
-	{ 0x0000309a, 0x000030d7 }, { 0x00003099, 0x000030d9 },
-	{ 0x0000309a, 0x000030da }, { 0x00003099, 0x000030dc },
-	{ 0x0000309a, 0x000030dd }, { 0x00003099, 0x000030f7 },
-	{ 0x00003099, 0x000030f8 }, { 0x00003099, 0x000030f9 },
-	{ 0x00003099, 0x000030fa }, { 0x00003099, 0x000030fe },
-};
-
-
-/*
- * Canonical/Compatibility Decomposition
- */
-
-#define DECOMP_BITS_0	9
-#define DECOMP_BITS_1	7
-#define DECOMP_BITS_2	5
-#define DECOMP_COMPAT	32768
-
-static const char16_t decompose_imap[] = {
-	  272,   400,   528,   656,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   912,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,  1040,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,  1168,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	  784,   784,   784,   784,   784,   784,   784,   784,
-	    0,     0,     0,     0,     0,     1,     2,     3,
-	    4,     5,     6,     7,     0,     8,     9,    10,
-	   11,    12,     0,     0,     0,    13,    14,    15,
-	    0,     0,    16,    17,    18,    19,    20,    21,
-	   22,    23,    24,    25,     0,     0,    26,    27,
-	    0,     0,     0,     0,    28,     0,     0,     0,
-	    0,    29,     0,    30,     0,     0,    31,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    32,    33,     0,     0,     0,    34,     0,
-	    0,    35,    36,     0,     0,     0,     0,     0,
-	    0,     0,    37,     0,    38,     0,    39,     0,
-	    0,     0,    40,     0,     0,     0,    41,     0,
-	    0,     0,    42,     0,     0,     0,    43,     0,
-	    0,    44,     0,     0,     0,    45,    46,     0,
-	   47,     0,    48,    49,    50,    51,     0,     0,
-	    0,    52,     0,     0,     0,     0,     0,    53,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,    54,    55,    56,    57,    58,     0,     0,
-	   59,    60,    61,    62,    63,    64,    65,    66,
-	   67,    68,    69,    70,    71,    72,    73,    74,
-	   75,    76,    77,    78,    79,    80,     0,     0,
-	   81,    82,    83,    84,    85,    86,    87,     0,
-	   88,    89,    90,    91,    92,    93,     0,    94,
-	    0,    95,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,    96,    97,    98,    99,   100,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	  101,     0,     0,   102,     0,     0,   103,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,   104,     0,     0,     0,     0,
-	    0,     0,     0,     0,   105,     0,     0,   106,
-	  107,   108,   109,   110,   111,   112,   113,     0,
-	  114,   115,   116,   117,   118,   119,   120,   121,
-	    0,   122,   123,   124,   125,     0,     0,     0,
-	  126,   127,   128,   129,   130,   131,   132,   133,
-	  134,   135,   136,   137,   138,   139,   140,   141,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	  142,   143,   144,   145,   146,   147,   148,   149,
-	  150,   151,   152,   153,   154,   155,   156,     0,
-	  157,   158,   159,   160,   161,   162,   163,   164,
-	  165,   166,   167,   168,   169,   170,   171,   172,
-	  173,   174,   175,   176,   177,   178,   179,   180,
-	  181,   182,   183,   184,   185,   186,   187,   188,
-	  189,   190,   191,   192,   193,   194,   195,   196,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,   197,   198,     0,   199,   200,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	  201,   202,   203,   204,   205,   206,   207,   208,
-	  209,   210,   211,   212,   213,   214,   215,   216,
-	  217,   218,   219,   220,   221,   222,   223,   224,
-	  225,   226,   227,   228,   229,   230,   231,   232,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	  233,   234,   235,   236,   237,   238,   239,   240,
-	  241,   242,   243,   244,   245,   246,   247,   248,
-	  249,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-	    0,     0,     0,     0,     0,     0,     0,     0,
-};
-
-static const struct {
-	char16_t tbl[32];
-} decompose_table[] = {
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 32769,      0,      0,      0,      0,      0,      0,      0,
-	 32770,      0,  32772,      0,      0,      0,      0,  32773,
-	     0,      0,  32775,  32776,  32777,  32779,      0,      0,
-	 32780,  32782,  32783,      0,  32784,  32787,  32790,      0,
-	}},
-	{{
-	    25,     27,     29,     31,     33,     35,      0,     37,
-	    39,     41,     43,     45,     47,     49,     51,     53,
-	     0,     55,     57,     59,     61,     63,     65,      0,
-	     0,     67,     69,     71,     73,     75,      0,      0,
-	}},
-	{{
-	    77,     79,     81,     83,     85,     87,      0,     89,
-	    91,     93,     95,     97,     99,    101,    103,    105,
-	     0,    107,    109,    111,    113,    115,    117,      0,
-	     0,    119,    121,    123,    125,    127,      0,    129,
-	}},
-	{{
-	   131,    133,    135,    137,    139,    141,    143,    145,
-	   147,    149,    151,    153,    155,    157,    159,    161,
-	     0,      0,    163,    165,    167,    169,    171,    173,
-	   175,    177,    179,    181,    183,    185,    187,    189,
-	}},
-	{{
-	   191,    193,    195,    197,    199,    201,      0,      0,
-	   203,    205,    207,    209,    211,    213,    215,    217,
-	   219,      0,  32989,  32991,    225,    227,    229,    231,
-	     0,    233,    235,    237,    239,    241,    243,  33013,
-	}},
-	{{
-	 33015,      0,      0,    249,    251,    253,    255,    257,
-	   259,  33029,      0,      0,    263,    265,    267,    269,
-	   271,    273,      0,      0,    275,    277,    279,    281,
-	   283,    285,    287,    289,    291,    293,    295,    297,
-	}},
-	{{
-	   299,    301,    303,    305,    307,    309,      0,      0,
-	   311,    313,    315,    317,    319,    321,    323,    325,
-	   327,    329,    331,    333,    335,    337,    339,    341,
-	   343,    345,    347,    349,    351,    353,    355,  33125,
-	}},
-	{{
-	   358,    360,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,    362,
-	   364,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,  33134,  33136,  33138,  33140,
-	 33142,  33144,  33146,  33148,  33150,    384,    386,    388,
-	   390,    392,    394,    396,    398,    400,    402,    404,
-	   406,    408,    410,    412,    414,      0,    416,    418,
-	}},
-	{{
-	   420,    422,    424,    426,      0,      0,    428,    430,
-	   432,    434,    436,    438,    440,    442,    444,    446,
-	   448,  33218,  33220,  33222,    456,    458,      0,      0,
-	   460,    462,    464,    466,    468,    470,    472,    474,
-	}},
-	{{
-	   476,    478,    480,    482,    484,    486,    488,    490,
-	   492,    494,    496,    498,    500,    502,    504,    506,
-	   508,    510,    512,    514,    516,    518,    520,    522,
-	   524,    526,    528,    530,      0,      0,    532,    534,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,    536,    538,
-	   540,    542,    544,    546,    548,    550,    552,    554,
-	   556,    558,    560,    562,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 33332,  33333,  33334,  33335,  33336,  33337,  33338,  33339,
-	 33340,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 33341,  33343,  33345,  33347,  33349,  33351,      0,      0,
-	}},
-	{{
-	 33353,  33354,  33355,  33356,  33357,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	   590,    591,      0,    592,    593,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,    595,      0,      0,      0,
-	     0,      0,  33364,      0,      0,      0,    598,      0,
-	}},
-	{{
-	     0,      0,      0,      0,  33367,    601,    603,    605,
-	   606,    608,    610,      0,    612,      0,    614,    616,
-	   618,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,    620,    622,    624,    626,    628,    630,
-	   632,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,    634,    636,    638,    640,    642,      0,
-	 33412,  33413,  33414,    647,    649,  33419,  33420,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 33421,  33422,  33423,      0,  33424,  33425,      0,      0,
-	     0,  33426,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	   659,    661,      0,    663,      0,      0,      0,    665,
-	     0,      0,      0,      0,    667,    669,    671,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,    673,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,    675,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	   677,    679,      0,    681,      0,      0,      0,    683,
-	     0,      0,      0,      0,    685,    687,    689,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,    691,    693,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,    695,    697,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	   699,    701,    703,    705,      0,      0,    707,    709,
-	     0,      0,    711,    713,    715,    717,    719,    721,
-	}},
-	{{
-	     0,      0,    723,    725,    727,    729,    731,    733,
-	     0,      0,    735,    737,    739,    741,    743,    745,
-	   747,    749,    751,    753,    755,    757,      0,      0,
-	   759,    761,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,  33531,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,    765,    767,    769,    771,    773,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,  33543,  33545,  33547,
-	 33549,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	   783,      0,    785,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,    787,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,    789,      0,      0,      0,      0,      0,      0,
-	     0,    791,      0,      0,    793,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	   795,    797,    799,    801,    803,    805,    807,    809,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,    811,    813,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,    815,    817,      0,    819,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,    821,      0,      0,    823,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,    825,    827,    829,      0,      0,    831,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	   833,      0,      0,    835,    837,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,    839,    841,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,    843,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,    845,    847,    849,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	   851,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	   853,      0,      0,      0,      0,      0,      0,    855,
-	   857,      0,    859,    861,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,    863,    865,    867,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,    869,      0,    871,    873,    875,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  33645,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  33647,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,  33649,  33651,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,  33653,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,    886,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,    888,      0,      0,
-	     0,      0,    890,      0,      0,      0,      0,    892,
-	     0,      0,      0,      0,    894,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,    896,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,    898,      0,    900,    902,  33672,
-	   906,  33676,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,    910,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,    912,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,    914,      0,      0,
-	}},
-	{{
-	     0,      0,    916,      0,      0,      0,      0,    918,
-	     0,      0,      0,      0,    920,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,    922,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,    924,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,  33694,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,  33695,  33696,  33697,      0,
-	 33698,  33699,  33700,  33701,  33702,  33703,  33704,  33705,
-	 33706,  33707,  33708,      0,  33709,  33710,  33711,  33712,
-	}},
-	{{
-	 33713,  33714,  33715,  33716,  33717,  33718,  33719,  33720,
-	 33721,  33722,  33723,  33724,  33725,  33726,      0,  33727,
-	 33728,  33729,  33730,  33731,  33732,  33733,  33734,  33735,
-	 33736,  33737,  33738,  33739,  33740,  33741,  33742,  33743,
-	}},
-	{{
-	 33744,  33745,  33746,  33747,  33748,  33749,  33750,  33751,
-	 33752,  33753,  33754,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 33755,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  33756,  33757,  33758,  33759,  33760,
-	}},
-	{{
-	 33761,  33762,  33763,  33764,  33765,  33766,  33767,  33768,
-	 33769,  33770,  33771,  33772,  33773,  33774,  33775,  33776,
-	 33777,  33778,  33779,  33780,  33781,  33782,  33783,  33784,
-	 33785,  33786,  33787,  33788,  33789,  33790,  33791,  33792,
-	}},
-	{{
-	  1025,   1027,   1029,   1031,   1033,   1035,   1037,   1039,
-	  1041,   1043,   1045,   1047,   1049,   1051,   1053,   1055,
-	  1057,   1059,   1061,   1063,   1065,   1067,   1069,   1071,
-	  1073,   1075,   1077,   1079,   1081,   1083,   1085,   1087,
-	}},
-	{{
-	  1089,   1091,   1093,   1095,   1097,   1099,   1101,   1103,
-	  1105,   1107,   1109,   1111,   1113,   1115,   1117,   1119,
-	  1121,   1123,   1125,   1127,   1129,   1131,   1133,   1135,
-	  1137,   1139,   1141,   1143,   1145,   1147,   1149,   1151,
-	}},
-	{{
-	  1153,   1155,   1157,   1159,   1161,   1163,   1165,   1167,
-	  1169,   1171,   1173,   1175,   1177,   1179,   1181,   1183,
-	  1185,   1187,   1189,   1191,   1193,   1195,   1197,   1199,
-	  1201,   1203,   1205,   1207,   1209,   1211,   1213,   1215,
-	}},
-	{{
-	  1217,   1219,   1221,   1223,   1225,   1227,   1229,   1231,
-	  1233,   1235,   1237,   1239,   1241,   1243,   1245,   1247,
-	  1249,   1251,   1253,   1255,   1257,   1259,   1261,   1263,
-	  1265,   1267,   1269,   1271,   1273,   1275,   1277,   1279,
-	}},
-	{{
-	  1281,   1283,   1285,   1287,   1289,   1291,   1293,   1295,
-	  1297,   1299,   1301,   1303,   1305,   1307,   1309,   1311,
-	  1313,   1315,   1317,   1319,   1321,   1323,   1325,   1327,
-	  1329,   1331,  34101,   1335,      0,      0,      0,      0,
-	}},
-	{{
-	  1337,   1339,   1341,   1343,   1345,   1347,   1349,   1351,
-	  1353,   1355,   1357,   1359,   1361,   1363,   1365,   1367,
-	  1369,   1371,   1373,   1375,   1377,   1379,   1381,   1383,
-	  1385,   1387,   1389,   1391,   1393,   1395,   1397,   1399,
-	}},
-	{{
-	  1401,   1403,   1405,   1407,   1409,   1411,   1413,   1415,
-	  1417,   1419,   1421,   1423,   1425,   1427,   1429,   1431,
-	  1433,   1435,   1437,   1439,   1441,   1443,   1445,   1447,
-	  1449,   1451,   1453,   1455,   1457,   1459,   1461,   1463,
-	}},
-	{{
-	  1465,   1467,   1469,   1471,   1473,   1475,   1477,   1479,
-	  1481,   1483,   1485,   1487,   1489,   1491,   1493,   1495,
-	  1497,   1499,   1501,   1503,   1505,   1507,   1509,   1511,
-	  1513,   1515,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	  1517,   1519,   1521,   1523,   1525,   1527,   1529,   1531,
-	  1533,   1535,   1537,   1539,   1541,   1543,   1545,   1547,
-	  1549,   1551,   1553,   1555,   1557,   1559,      0,      0,
-	  1561,   1563,   1565,   1567,   1569,   1571,      0,      0,
-	}},
-	{{
-	  1573,   1575,   1577,   1579,   1581,   1583,   1585,   1587,
-	  1589,   1591,   1593,   1595,   1597,   1599,   1601,   1603,
-	  1605,   1607,   1609,   1611,   1613,   1615,   1617,   1619,
-	  1621,   1623,   1625,   1627,   1629,   1631,   1633,   1635,
-	}},
-	{{
-	  1637,   1639,   1641,   1643,   1645,   1647,      0,      0,
-	  1649,   1651,   1653,   1655,   1657,   1659,      0,      0,
-	  1661,   1663,   1665,   1667,   1669,   1671,   1673,   1675,
-	     0,   1677,      0,   1679,      0,   1681,      0,   1683,
-	}},
-	{{
-	  1685,   1687,   1689,   1691,   1693,   1695,   1697,   1699,
-	  1701,   1703,   1705,   1707,   1709,   1711,   1713,   1715,
-	  1717,   1719,   1720,   1722,   1723,   1725,   1726,   1728,
-	  1729,   1731,   1732,   1734,   1735,   1737,      0,      0,
-	}},
-	{{
-	  1738,   1740,   1742,   1744,   1746,   1748,   1750,   1752,
-	  1754,   1756,   1758,   1760,   1762,   1764,   1766,   1768,
-	  1770,   1772,   1774,   1776,   1778,   1780,   1782,   1784,
-	  1786,   1788,   1790,   1792,   1794,   1796,   1798,   1800,
-	}},
-	{{
-	  1802,   1804,   1806,   1808,   1810,   1812,   1814,   1816,
-	  1818,   1820,   1822,   1824,   1826,   1828,   1830,   1832,
-	  1834,   1836,   1838,   1840,   1842,      0,   1844,   1846,
-	  1848,   1850,   1852,   1854,   1855,  34625,   1859,  34628,
-	}},
-	{{
-	 34630,   1864,   1866,   1868,   1870,      0,   1872,   1874,
-	  1876,   1878,   1879,   1881,   1882,   1884,   1886,   1888,
-	  1890,   1892,   1894,   1896,      0,      0,   1897,   1899,
-	  1901,   1903,   1905,   1907,      0,   1908,   1910,   1912,
-	}},
-	{{
-	  1914,   1916,   1918,   1920,   1921,   1923,   1925,   1927,
-	  1929,   1931,   1933,   1935,   1936,   1938,   1940,   1941,
-	     0,      0,   1942,   1944,   1946,      0,   1948,   1950,
-	  1952,   1954,   1955,   1957,   1958,   1960,  34729,      0,
-	}},
-	{{
-	  1963,   1964,  34733,  34734,  34735,  34736,  34737,  34738,
-	 34739,  34740,  34741,      0,      0,      0,      0,      0,
-	     0,  34742,      0,      0,      0,      0,      0,  34743,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,  34745,  34746,  34748,      0,
-	     0,      0,      0,      0,      0,      0,      0,  34751,
-	     0,      0,      0,  34752,  34754,      0,  34757,  34759,
-	     0,      0,      0,      0,  34762,      0,  34764,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,  34766,
-	 34768,  34770,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,  34772,
-	     0,      0,      0,      0,      0,      0,      0,  34776,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 34777,  34778,      0,      0,  34779,  34780,  34781,  34782,
-	 34783,  34784,  34785,  34786,  34787,  34788,  34789,  34790,
-	}},
-	{{
-	 34791,  34792,  34793,  34794,  34795,  34796,  34797,  34798,
-	 34799,  34800,  34801,  34802,  34803,  34804,  34805,      0,
-	 34806,  34807,  34808,  34809,  34810,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 34811,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 34813,  34816,  34819,  34820,      0,  34822,  34825,  34828,
-	     0,  34829,  34831,  34832,  34833,  34834,  34835,  34836,
-	 34837,  34838,  34839,  34840,      0,  34841,  34842,      0,
-	     0,  34844,  34845,  34846,  34847,  34848,      0,      0,
-	}},
-	{{
-	 34849,  34851,  34854,      0,  34856,      0,   2089,      0,
-	 34858,      0,   2091,   2092,  34861,  34862,      0,  34863,
-	 34864,  34865,      0,  34866,  34867,  34868,  34869,  34870,
-	 34871,  34872,      0,  34873,  34876,  34877,  34878,  34879,
-	}},
-	{{
-	 34880,      0,      0,      0,      0,  34881,  34882,  34883,
-	 34884,  34885,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  34886,  34889,  34892,  34895,  34898,
-	 34901,  34904,  34907,  34910,  34913,  34916,  34919,  34922,
-	}},
-	{{
-	 34924,  34925,  34927,  34930,  34932,  34933,  34935,  34938,
-	 34942,  34944,  34945,  34947,  34950,  34951,  34952,  34953,
-	 34954,  34955,  34957,  34960,  34962,  34963,  34965,  34968,
-	 34972,  34974,  34975,  34977,  34980,  34981,  34982,  34983,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,   2216,   2218,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,   2220,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,   2222,   2224,   2226,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,   2228,      0,      0,      0,
-	     0,   2230,      0,      0,   2232,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,   2234,      0,   2236,      0,
-	     0,      0,      0,      0,  35006,  35008,      0,  35011,
-	 35013,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,   2248,      0,      0,   2250,      0,      0,   2252,
-	     0,   2254,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	  2256,      0,   2258,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,   2260,   2262,   2264,
-	  2266,   2268,      0,      0,   2270,   2272,      0,      0,
-	  2274,   2276,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	  2278,   2280,      0,      0,   2282,   2284,      0,      0,
-	  2286,   2288,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,   2290,   2292,   2294,   2296,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	  2298,   2300,   2302,   2304,      0,      0,      0,      0,
-	     0,      0,   2306,   2308,   2310,   2312,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,   2314,   2315,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 35084,  35085,  35086,  35087,  35088,  35089,  35090,  35091,
-	 35092,  35093,  35095,  35097,  35099,  35101,  35103,  35105,
-	 35107,  35109,  35111,  35113,  35115,  35118,  35121,  35124,
-	 35127,  35130,  35133,  35136,  35139,  35142,  35146,  35150,
-	}},
-	{{
-	 35154,  35158,  35162,  35166,  35170,  35174,  35178,  35182,
-	 35186,  35188,  35190,  35192,  35194,  35196,  35198,  35200,
-	 35202,  35204,  35207,  35210,  35213,  35216,  35219,  35222,
-	 35225,  35228,  35231,  35234,  35237,  35240,  35243,  35246,
-	}},
-	{{
-	 35249,  35252,  35255,  35258,  35261,  35264,  35267,  35270,
-	 35273,  35276,  35279,  35282,  35285,  35288,  35291,  35294,
-	 35297,  35300,  35303,  35306,  35309,  35312,  35315,  35316,
-	 35317,  35318,  35319,  35320,  35321,  35322,  35323,  35324,
-	}},
-	{{
-	 35325,  35326,  35327,  35328,  35329,  35330,  35331,  35332,
-	 35333,  35334,  35335,  35336,  35337,  35338,  35339,  35340,
-	 35341,  35342,  35343,  35344,  35345,  35346,  35347,  35348,
-	 35349,  35350,  35351,  35352,  35353,  35354,  35355,  35356,
-	}},
-	{{
-	 35357,  35358,  35359,  35360,  35361,  35362,  35363,  35364,
-	 35365,  35366,  35367,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,  35368,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,  35372,  35375,  35377,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,   2612,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,  35382,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,  35383,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  35384,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 35385,  35386,  35387,  35388,  35389,  35390,  35391,  35392,
-	 35393,  35394,  35395,  35396,  35397,  35398,  35399,  35400,
-	 35401,  35402,  35403,  35404,  35405,  35406,  35407,  35408,
-	 35409,  35410,  35411,  35412,  35413,  35414,  35415,  35416,
-	}},
-	{{
-	 35417,  35418,  35419,  35420,  35421,  35422,  35423,  35424,
-	 35425,  35426,  35427,  35428,  35429,  35430,  35431,  35432,
-	 35433,  35434,  35435,  35436,  35437,  35438,  35439,  35440,
-	 35441,  35442,  35443,  35444,  35445,  35446,  35447,  35448,
-	}},
-	{{
-	 35449,  35450,  35451,  35452,  35453,  35454,  35455,  35456,
-	 35457,  35458,  35459,  35460,  35461,  35462,  35463,  35464,
-	 35465,  35466,  35467,  35468,  35469,  35470,  35471,  35472,
-	 35473,  35474,  35475,  35476,  35477,  35478,  35479,  35480,
-	}},
-	{{
-	 35481,  35482,  35483,  35484,  35485,  35486,  35487,  35488,
-	 35489,  35490,  35491,  35492,  35493,  35494,  35495,  35496,
-	 35497,  35498,  35499,  35500,  35501,  35502,  35503,  35504,
-	 35505,  35506,  35507,  35508,  35509,  35510,  35511,  35512,
-	}},
-	{{
-	 35513,  35514,  35515,  35516,  35517,  35518,  35519,  35520,
-	 35521,  35522,  35523,  35524,  35525,  35526,  35527,  35528,
-	 35529,  35530,  35531,  35532,  35533,  35534,  35535,  35536,
-	 35537,  35538,  35539,  35540,  35541,  35542,  35543,  35544,
-	}},
-	{{
-	 35545,  35546,  35547,  35548,  35549,  35550,  35551,  35552,
-	 35553,  35554,  35555,  35556,  35557,  35558,  35559,  35560,
-	 35561,  35562,  35563,  35564,  35565,  35566,  35567,  35568,
-	 35569,  35570,  35571,  35572,  35573,  35574,  35575,  35576,
-	}},
-	{{
-	 35577,  35578,  35579,  35580,  35581,  35582,  35583,  35584,
-	 35585,  35586,  35587,  35588,  35589,  35590,  35591,  35592,
-	 35593,  35594,  35595,  35596,  35597,  35598,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 35599,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,  35600,      0,
-	 35601,  35602,  35603,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,   2836,      0,   2838,      0,
-	  2840,      0,   2842,      0,   2844,      0,   2846,      0,
-	  2848,      0,   2850,      0,   2852,      0,   2854,      0,
-	}},
-	{{
-	  2856,      0,   2858,      0,      0,   2860,      0,   2862,
-	     0,   2864,      0,      0,      0,      0,      0,      0,
-	  2866,   2868,      0,   2870,   2872,      0,   2874,   2876,
-	     0,   2878,   2880,      0,   2882,   2884,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,   2886,      0,      0,      0,
-	     0,      0,      0,  35656,  35658,      0,   2892,  35662,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,   2896,      0,   2898,      0,
-	  2900,      0,   2902,      0,   2904,      0,   2906,      0,
-	  2908,      0,   2910,      0,   2912,      0,   2914,      0,
-	}},
-	{{
-	  2916,      0,   2918,      0,      0,   2920,      0,   2922,
-	     0,   2924,      0,      0,      0,      0,      0,      0,
-	  2926,   2928,      0,   2930,   2932,      0,   2934,   2936,
-	     0,   2938,   2940,      0,   2942,   2944,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,   2946,      0,      0,   2948,
-	  2950,   2952,   2954,      0,      0,      0,   2956,  35726,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,  35728,  35729,  35730,  35731,  35732,  35733,  35734,
-	 35735,  35736,  35737,  35738,  35739,  35740,  35741,  35742,
-	}},
-	{{
-	 35743,  35744,  35745,  35746,  35747,  35748,  35749,  35750,
-	 35751,  35752,  35753,  35754,  35755,  35756,  35757,  35758,
-	 35759,  35760,  35761,  35762,  35763,  35764,  35765,  35766,
-	 35767,  35768,  35769,  35770,  35771,  35772,  35773,  35774,
-	}},
-	{{
-	 35775,  35776,  35777,  35778,  35779,  35780,  35781,  35782,
-	 35783,  35784,  35785,  35786,  35787,  35788,  35789,  35790,
-	 35791,  35792,  35793,  35794,  35795,  35796,  35797,  35798,
-	 35799,  35800,  35801,  35802,  35803,  35804,  35805,  35806,
-	}},
-	{{
-	 35807,  35808,  35809,  35810,  35811,  35812,  35813,  35814,
-	 35815,  35816,  35817,  35818,  35819,  35820,  35821,      0,
-	     0,      0,  35822,  35823,  35824,  35825,  35826,  35827,
-	 35828,  35829,  35830,  35831,  35832,  35833,  35834,  35835,
-	}},
-	{{
-	 35836,  35839,  35842,  35845,  35848,  35851,  35854,  35857,
-	 35860,  35863,  35866,  35869,  35872,  35875,  35878,  35882,
-	 35886,  35890,  35894,  35898,  35902,  35906,  35910,  35914,
-	 35918,  35922,  35926,  35930,  35934,  35938,  35945,      0,
-	}},
-	{{
-	 35951,  35954,  35957,  35960,  35963,  35966,  35969,  35972,
-	 35975,  35978,  35981,  35984,  35987,  35990,  35993,  35996,
-	 35999,  36002,  36005,  36008,  36011,  36014,  36017,  36020,
-	 36023,  36026,  36029,  36032,  36035,  36038,  36041,  36044,
-	}},
-	{{
-	 36047,  36050,  36053,  36056,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 36059,  36062,  36064,  36066,  36068,  36070,  36072,  36074,
-	 36076,  36078,  36080,  36082,  36084,  36086,  36088,  36090,
-	}},
-	{{
-	 36092,  36093,  36094,  36095,  36096,  36097,  36098,  36099,
-	 36100,  36101,  36102,  36103,  36104,  36105,  36106,  36108,
-	 36110,  36112,  36114,  36116,  36118,  36120,  36122,  36124,
-	 36126,  36128,  36130,  36132,  36134,  36139,  36143,      0,
-	}},
-	{{
-	 36145,  36146,  36147,  36148,  36149,  36150,  36151,  36152,
-	 36153,  36154,  36155,  36156,  36157,  36158,  36159,  36160,
-	 36161,  36162,  36163,  36164,  36165,  36166,  36167,  36168,
-	 36169,  36170,  36171,  36172,  36173,  36174,  36175,  36176,
-	}},
-	{{
-	 36177,  36178,  36179,  36180,  36181,  36182,  36183,  36184,
-	 36185,  36186,  36187,  36188,  36189,  36190,  36191,  36192,
-	 36193,  36194,  36196,  36198,  36200,  36202,  36204,  36206,
-	 36208,  36210,  36212,  36214,  36216,  36218,  36220,  36222,
-	}},
-	{{
-	 36224,  36226,  36228,  36230,  36232,  36234,  36236,  36238,
-	 36240,  36242,  36245,  36248,  36251,  36253,  36256,  36258,
-	 36261,  36262,  36263,  36264,  36265,  36266,  36267,  36268,
-	 36269,  36270,  36271,  36272,  36273,  36274,  36275,  36276,
-	}},
-	{{
-	 36277,  36278,  36279,  36280,  36281,  36282,  36283,  36284,
-	 36285,  36286,  36287,  36288,  36289,  36290,  36291,  36292,
-	 36293,  36294,  36295,  36296,  36297,  36298,  36299,  36300,
-	 36301,  36302,  36303,  36304,  36305,  36306,  36307,      0,
-	}},
-	{{
-	 36308,  36312,  36316,  36320,  36323,  36327,  36330,  36333,
-	 36338,  36342,  36345,  36348,  36351,  36355,  36359,  36362,
-	 36365,  36367,  36370,  36374,  36378,  36380,  36385,  36391,
-	 36396,  36399,  36404,  36409,  36413,  36416,  36419,  36422,
-	}},
-	{{
-	 36426,  36431,  36435,  36438,  36441,  36444,  36446,  36448,
-	 36450,  36452,  36455,  36458,  36463,  36466,  36470,  36475,
-	 36478,  36480,  36482,  36487,  36491,  36496,  36499,  36504,
-	 36506,  36509,  36512,  36515,  36518,  36521,  36525,  36528,
-	}},
-	{{
-	 36530,  36533,  36536,  36539,  36543,  36546,  36549,  36552,
-	 36557,  36561,  36563,  36568,  36570,  36574,  36578,  36581,
-	 36584,  36587,  36591,  36593,  36596,  36600,  36602,  36607,
-	 36610,  36612,  36614,  36616,  36618,  36620,  36622,  36624,
-	}},
-	{{
-	 36626,  36628,  36630,  36633,  36636,  36639,  36642,  36645,
-	 36648,  36651,  36654,  36657,  36660,  36663,  36666,  36669,
-	 36672,  36675,  36678,  36680,  36682,  36685,  36687,  36689,
-	 36691,  36694,  36697,  36699,  36701,  36703,  36705,  36707,
-	}},
-	{{
-	 36711,  36713,  36715,  36717,  36719,  36721,  36723,  36725,
-	 36727,  36730,  36734,  36736,  36738,  36740,  36742,  36744,
-	 36746,  36748,  36751,  36754,  36757,  36760,  36762,  36764,
-	 36766,  36768,  36770,  36772,  36774,  36776,  36778,  36780,
-	}},
-	{{
-	 36783,  36786,  36788,  36791,  36794,  36797,  36799,  36802,
-	 36805,  36809,  36811,  36814,  36817,  36820,  36823,  36828,
-	 36834,  36836,  36838,  36840,  36842,  36844,  36846,  36848,
-	 36850,  36852,  36854,  36856,  36858,  36860,  36862,  36864,
-	}},
-	{{
-	 36866,  36868,  36870,  36874,  36876,  36878,  36880,  36884,
-	 36887,  36889,  36891,  36893,  36895,  36897,  36899,  36901,
-	 36903,  36905,  36907,  36910,  36912,  36914,  36917,  36920,
-	 36922,  36926,  36929,  36931,  36933,  36935,  36937,  36940,
-	}},
-	{{
-	 36943,  36945,  36947,  36949,  36951,  36953,  36955,  36957,
-	 36959,  36961,  36964,  36967,  36970,  36973,  36976,  36979,
-	 36982,  36985,  36988,  36991,  36994,  36997,  37000,  37003,
-	 37006,  37009,  37012,  37015,  37018,  37021,  37024,  37027,
-	}},
-	{{
-	  4262,   4263,   4264,   4265,   4266,   4267,   4268,   4269,
-	  4270,   4271,   4272,   4273,   4274,   4275,   4276,   4277,
-	  4278,   4279,   4280,   4281,   4282,   4283,   4284,   4285,
-	  4286,   4287,   4288,   4289,   4290,   4291,   4292,   4293,
-	}},
-	{{
-	  4294,   4295,   4296,   4297,   4298,   4299,   4300,   4301,
-	  4302,   4303,   4304,   4305,   4306,   4307,   4308,   4309,
-	  4310,   4311,   4312,   4313,   4314,   4315,   4316,   4317,
-	  4318,   4319,   4320,   4321,   4322,   4323,   4324,   4325,
-	}},
-	{{
-	  4326,   4327,   4328,   4329,   4330,   4331,   4332,   4333,
-	  4334,   4335,   4336,   4337,   4338,   4339,   4340,   4341,
-	  4342,   4343,   4344,   4345,   4346,   4347,   4348,   4349,
-	  4350,   4351,   4352,   4353,   4354,   4355,   4356,   4357,
-	}},
-	{{
-	  4358,   4359,   4360,   4361,   4362,   4363,   4364,   4365,
-	  4366,   4367,   4368,   4369,   4370,   4371,   4372,   4373,
-	  4374,   4375,   4376,   4377,   4378,   4379,   4380,   4381,
-	  4382,   4383,   4384,   4385,   4386,   4387,   4388,   4389,
-	}},
-	{{
-	  4390,   4391,   4392,   4393,   4394,   4395,   4396,   4397,
-	  4398,   4399,   4400,   4401,   4402,   4403,   4404,   4405,
-	  4406,   4407,   4408,   4409,   4410,   4411,   4412,   4413,
-	  4414,   4415,   4416,   4417,   4418,   4419,   4420,   4421,
-	}},
-	{{
-	  4422,   4423,   4424,   4425,   4426,   4427,   4428,   4429,
-	  4430,   4431,   4432,   4433,   4434,   4435,   4436,   4437,
-	  4438,   4439,   4440,   4441,   4442,   4443,   4444,   4445,
-	  4446,   4447,   4448,   4449,   4450,   4451,   4452,   4453,
-	}},
-	{{
-	  4454,   4455,   4456,   4457,   4458,   4459,   4460,   4461,
-	  4462,   4463,   4464,   4465,   4466,   4467,   4468,   4469,
-	  4470,   4471,   4472,   4473,   4474,   4475,   4476,   4477,
-	  4478,   4479,   4480,   4481,   4482,   4483,   4484,   4485,
-	}},
-	{{
-	  4486,   4487,   4488,   4489,   4490,   4491,   4492,   4493,
-	  4494,   4495,   4496,   4497,   4498,   4499,   4500,   4501,
-	  4502,   4503,   4504,   4505,   4506,   4507,   4508,   4509,
-	  4510,   4511,   4512,   4513,   4514,   4515,   4516,   4517,
-	}},
-	{{
-	  4518,   4519,   4520,   4521,   4522,   4523,   4524,   4525,
-	  4526,   4527,   4528,   4529,   4530,   4531,      0,      0,
-	  4532,      0,   4533,      0,      0,   4534,   4535,   4536,
-	  4537,   4538,   4539,   4540,   4541,   4542,   4543,      0,
-	}},
-	{{
-	  4544,      0,   4545,      0,      0,   4546,   4547,      0,
-	     0,      0,   4548,   4549,   4550,   4551,      0,      0,
-	  4552,   4553,   4554,   4555,   4556,   4557,   4558,   4559,
-	  4560,   4561,   4562,   4563,   4564,   4565,   4566,   4567,
-	}},
-	{{
-	  4568,   4569,   4570,   4571,   4572,   4573,   4574,   4575,
-	  4576,   4577,   4578,   4579,   4580,   4581,   4582,   4583,
-	  4584,   4585,   4586,   4587,   4588,   4589,   4590,   4591,
-	  4592,   4593,   4594,   4595,   4596,   4597,   4598,   4599,
-	}},
-	{{
-	  4600,   4601,   4602,   4603,   4604,   4605,   4606,   4607,
-	  4608,   4609,   4610,      0,      0,      0,      0,      0,
-	  4611,   4612,   4613,   4614,   4615,   4616,   4617,   4618,
-	  4619,   4620,   4621,   4622,   4623,   4624,   4625,   4626,
-	}},
-	{{
-	  4627,   4628,   4629,   4630,   4631,   4632,   4633,   4634,
-	  4635,   4636,   4637,   4638,   4639,   4640,   4641,   4642,
-	  4643,   4644,   4645,   4646,   4647,   4648,   4649,   4650,
-	  4651,   4652,   4653,   4654,   4655,   4656,   4657,   4658,
-	}},
-	{{
-	  4659,   4660,   4661,   4662,   4663,   4664,   4665,   4666,
-	  4667,   4668,   4669,   4670,   4671,   4672,   4673,   4674,
-	  4675,   4676,   4677,   4678,   4679,   4680,   4681,   4682,
-	  4683,   4684,   4685,   4686,   4687,   4688,   4689,   4690,
-	}},
-	{{
-	  4691,   4692,   4693,   4694,   4695,   4696,   4697,   4698,
-	  4699,   4700,   4701,   4702,   4703,   4704,   4705,   4706,
-	  4707,   4708,   4709,   4710,   4711,   4712,   4713,   4714,
-	  4715,   4716,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 37485,  37487,  37489,  37491,  37494,  37497,  37499,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  37501,  37503,  37505,  37507,  37509,
-	     0,      0,      0,      0,      0,   4743,      0,   4745,
-	}},
-	{{
-	 37515,  37516,  37517,  37518,  37519,  37520,  37521,  37522,
-	 37523,  37524,   4757,   4759,   4761,   4763,   4765,   4767,
-	  4769,   4771,   4773,   4775,   4777,   4779,   4781,      0,
-	  4783,   4785,   4787,   4789,   4791,      0,   4793,      0,
-	}},
-	{{
-	  4795,   4797,      0,   4799,   4801,      0,   4803,   4805,
-	  4807,   4809,   4811,   4813,   4815,   4817,   4819,  37589,
-	 37591,  37592,  37593,  37594,  37595,  37596,  37597,  37598,
-	 37599,  37600,  37601,  37602,  37603,  37604,  37605,  37606,
-	}},
-	{{
-	 37607,  37608,  37609,  37610,  37611,  37612,  37613,  37614,
-	 37615,  37616,  37617,  37618,  37619,  37620,  37621,  37622,
-	 37623,  37624,  37625,  37626,  37627,  37628,  37629,  37630,
-	 37631,  37632,  37633,  37634,  37635,  37636,  37637,  37638,
-	}},
-	{{
-	 37639,  37640,  37641,  37642,  37643,  37644,  37645,  37646,
-	 37647,  37648,  37649,  37650,  37651,  37652,  37653,  37654,
-	 37655,  37656,  37657,  37658,  37659,  37660,  37661,  37662,
-	 37663,  37664,  37665,  37666,  37667,  37668,  37669,  37670,
-	}},
-	{{
-	 37671,  37672,  37673,  37674,  37675,  37676,  37677,  37678,
-	 37679,  37680,  37681,  37682,  37683,  37684,  37685,  37686,
-	 37687,  37688,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,  37689,  37690,  37691,  37692,  37693,
-	 37694,  37695,  37696,  37697,  37698,  37699,  37700,  37701,
-	}},
-	{{
-	 37702,  37703,  37704,  37705,  37706,  37707,  37708,  37709,
-	 37710,  37711,  37712,  37714,  37716,  37718,  37720,  37722,
-	 37724,  37726,  37728,  37730,  37732,  37734,  37736,  37738,
-	 37740,  37742,  37744,  37746,  37748,  37749,  37750,  37751,
-	}},
-	{{
-	 37752,  37754,  37756,  37758,  37760,  37762,  37764,  37766,
-	 37768,  37770,  37772,  37774,  37776,  37778,  37780,  37782,
-	 37784,  37786,  37788,  37790,  37792,  37794,  37796,  37798,
-	 37800,  37802,  37804,  37806,  37808,  37810,  37812,  37814,
-	}},
-	{{
-	 37816,  37818,  37820,  37822,  37824,  37826,  37828,  37830,
-	 37832,  37834,  37836,  37838,  37840,  37842,  37844,  37846,
-	 37848,  37850,  37852,  37854,  37856,  37858,  37860,  37862,
-	 37864,  37866,  37868,  37870,  37872,  37874,  37876,  37878,
-	}},
-	{{
-	 37880,  37882,  37884,  37886,  37888,  37890,  37892,  37894,
-	 37896,  37898,  37900,  37902,  37904,  37906,  37908,  37910,
-	 37912,  37914,  37916,  37918,  37920,  37922,  37924,  37926,
-	 37928,  37930,  37932,  37934,  37936,  37938,  37940,  37943,
-	}},
-	{{
-	 37946,  37949,  37952,  37955,  37958,  37960,  37962,  37964,
-	 37966,  37968,  37970,  37972,  37974,  37976,  37978,  37980,
-	 37982,  37984,  37986,  37988,  37990,  37992,  37994,  37996,
-	 37998,  38000,  38002,  38004,  38006,  38008,  38010,  38012,
-	}},
-	{{
-	 38014,  38016,  38018,  38020,  38022,  38024,  38026,  38028,
-	 38030,  38032,  38034,  38036,  38038,  38040,  38042,  38044,
-	 38046,  38048,  38050,  38052,  38054,  38056,  38058,  38060,
-	 38062,  38064,  38066,  38068,  38070,  38072,  38074,  38076,
-	}},
-	{{
-	 38078,  38080,  38082,  38084,  38086,  38088,  38090,  38092,
-	 38094,  38096,  38098,  38100,  38102,  38104,  38106,  38108,
-	 38110,  38112,  38114,  38116,  38118,  38120,  38122,  38124,
-	 38126,  38128,  38130,  38132,  38134,  38136,  38138,  38140,
-	}},
-	{{
-	 38142,  38144,  38146,  38148,  38150,  38152,  38154,  38156,
-	 38158,  38160,  38162,  38164,  38166,  38168,  38170,  38172,
-	 38174,  38176,  38178,  38180,  38182,  38184,  38186,  38188,
-	 38190,  38192,  38194,  38196,  38198,  38200,  38202,  38204,
-	}},
-	{{
-	 38206,  38208,  38210,  38212,  38214,  38216,  38218,  38220,
-	 38222,  38224,  38226,  38228,  38230,  38232,  38234,  38236,
-	 38238,  38240,  38242,  38245,  38248,  38251,  38253,  38255,
-	 38257,  38259,  38261,  38263,  38265,  38267,  38269,  38271,
-	}},
-	{{
-	 38273,  38275,  38277,  38279,  38281,  38283,  38285,  38287,
-	 38289,  38291,  38293,  38295,  38297,  38299,  38301,  38303,
-	 38305,  38307,  38309,  38311,  38313,  38315,  38317,  38319,
-	 38321,  38323,  38325,  38327,  38329,  38331,  38333,  38335,
-	}},
-	{{
-	 38337,  38339,  38341,  38343,  38345,  38347,  38349,  38351,
-	 38353,  38355,  38357,  38359,  38361,  38363,  38365,  38367,
-	 38369,  38371,  38373,  38375,  38377,  38379,  38381,  38383,
-	 38385,  38387,  38389,  38391,  38393,  38395,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 38397,  38400,  38403,  38406,  38409,  38412,  38415,  38418,
-	 38421,  38424,  38427,  38430,  38433,  38436,  38439,  38442,
-	}},
-	{{
-	 38445,  38448,  38451,  38454,  38457,  38460,  38463,  38466,
-	 38469,  38472,  38475,  38478,  38481,  38484,  38487,  38490,
-	 38493,  38496,  38499,  38502,  38505,  38508,  38511,  38514,
-	 38517,  38520,  38523,  38526,  38529,  38532,  38535,  38538,
-	}},
-	{{
-	 38541,  38544,  38547,  38550,  38553,  38556,  38559,  38562,
-	 38565,  38568,  38571,  38574,  38577,  38580,  38583,  38586,
-	     0,      0,  38589,  38592,  38595,  38598,  38601,  38604,
-	 38607,  38610,  38613,  38616,  38619,  38622,  38625,  38628,
-	}},
-	{{
-	 38631,  38634,  38637,  38640,  38643,  38646,  38649,  38652,
-	 38655,  38658,  38661,  38664,  38667,  38670,  38673,  38676,
-	 38679,  38682,  38685,  38688,  38691,  38694,  38697,  38700,
-	 38703,  38706,  38709,  38712,  38715,  38718,  38721,  38724,
-	}},
-	{{
-	 38727,  38730,  38733,  38736,  38739,  38742,  38745,  38748,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 38751,  38754,  38757,  38761,  38765,  38769,  38773,  38777,
-	 38781,  38785,  38788,  38806,  38814,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 38818,  38819,  38820,  38821,  38822,  38823,  38824,  38825,
-	 38826,  38827,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	 38828,  38829,  38830,  38831,  38832,  38833,  38834,  38835,
-	 38836,  38837,  38838,  38839,  38840,  38841,  38842,  38843,
-	}},
-	{{
-	 38844,  38845,  38846,  38847,  38848,      0,      0,  38849,
-	 38850,  38851,  38852,  38853,  38854,  38855,  38856,  38857,
-	 38858,  38859,  38860,      0,  38861,  38862,  38863,  38864,
-	 38865,  38866,  38867,  38868,  38869,  38870,  38871,  38872,
-	}},
-	{{
-	 38873,  38874,  38875,  38876,  38877,  38878,  38879,      0,
-	 38880,  38881,  38882,  38883,      0,      0,      0,      0,
-	 38884,  38886,  38888,      0,  38890,      0,  38892,  38894,
-	 38896,  38898,  38900,  38902,  38904,  38906,  38908,  38910,
-	}},
-	{{
-	 38912,  38913,  38914,  38915,  38916,  38917,  38918,  38919,
-	 38920,  38921,  38922,  38923,  38924,  38925,  38926,  38927,
-	 38928,  38929,  38930,  38931,  38932,  38933,  38934,  38935,
-	 38936,  38937,  38938,  38939,  38940,  38941,  38942,  38943,
-	}},
-	{{
-	 38944,  38945,  38946,  38947,  38948,  38949,  38950,  38951,
-	 38952,  38953,  38954,  38955,  38956,  38957,  38958,  38959,
-	 38960,  38961,  38962,  38963,  38964,  38965,  38966,  38967,
-	 38968,  38969,  38970,  38971,  38972,  38973,  38974,  38975,
-	}},
-	{{
-	 38976,  38977,  38978,  38979,  38980,  38981,  38982,  38983,
-	 38984,  38985,  38986,  38987,  38988,  38989,  38990,  38991,
-	 38992,  38993,  38994,  38995,  38996,  38997,  38998,  38999,
-	 39000,  39001,  39002,  39003,  39004,  39005,  39006,  39007,
-	}},
-	{{
-	 39008,  39009,  39010,  39011,  39012,  39013,  39014,  39015,
-	 39016,  39017,  39018,  39019,  39020,  39021,  39022,  39023,
-	 39024,  39025,  39026,  39027,  39028,  39029,  39031,  39033,
-	 39035,  39037,  39039,  39041,  39043,      0,      0,      0,
-	}},
-	{{
-	     0,  39045,  39046,  39047,  39048,  39049,  39050,  39051,
-	 39052,  39053,  39054,  39055,  39056,  39057,  39058,  39059,
-	 39060,  39061,  39062,  39063,  39064,  39065,  39066,  39067,
-	 39068,  39069,  39070,  39071,  39072,  39073,  39074,  39075,
-	}},
-	{{
-	 39076,  39077,  39078,  39079,  39080,  39081,  39082,  39083,
-	 39084,  39085,  39086,  39087,  39088,  39089,  39090,  39091,
-	 39092,  39093,  39094,  39095,  39096,  39097,  39098,  39099,
-	 39100,  39101,  39102,  39103,  39104,  39105,  39106,  39107,
-	}},
-	{{
-	 39108,  39109,  39110,  39111,  39112,  39113,  39114,  39115,
-	 39116,  39117,  39118,  39119,  39120,  39121,  39122,  39123,
-	 39124,  39125,  39126,  39127,  39128,  39129,  39130,  39131,
-	 39132,  39133,  39134,  39135,  39136,  39137,  39138,  39139,
-	}},
-	{{
-	 39140,  39141,  39142,  39143,  39144,  39145,  39146,  39147,
-	 39148,  39149,  39150,  39151,  39152,  39153,  39154,  39155,
-	 39156,  39157,  39158,  39159,  39160,  39161,  39162,  39163,
-	 39164,  39165,  39166,  39167,  39168,  39169,  39170,  39171,
-	}},
-	{{
-	 39172,  39173,  39174,  39175,  39176,  39177,  39178,  39179,
-	 39180,  39181,  39182,  39183,  39184,  39185,  39186,  39187,
-	 39188,  39189,  39190,  39191,  39192,  39193,  39194,  39195,
-	 39196,  39197,  39198,  39199,  39200,  39201,  39202,  39203,
-	}},
-	{{
-	 39204,  39205,  39206,  39207,  39208,  39209,  39210,  39211,
-	 39212,  39213,  39214,  39215,  39216,  39217,  39218,  39219,
-	 39220,  39221,  39222,  39223,  39224,  39225,  39226,  39227,
-	 39228,  39229,  39230,  39231,  39232,  39233,  39234,      0,
-	}},
-	{{
-	     0,      0,  39235,  39236,  39237,  39238,  39239,  39240,
-	     0,      0,  39241,  39242,  39243,  39244,  39245,  39246,
-	     0,      0,  39247,  39248,  39249,  39250,  39251,  39252,
-	     0,      0,  39253,  39254,  39255,      0,      0,      0,
-	}},
-	{{
-	 39256,  39257,  39258,  39259,  39260,  39261,  39262,      0,
-	 39263,  39264,  39265,  39266,  39267,  39268,  39269,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,   6502,   6504,
-	}},
-	{{
-	  6506,   6508,   6510,   6512,   6514,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,   6516,   6518,   6520,   6522,   6524,
-	}},
-	{{
-	  6526,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	     0,      0,      0,      0,      0,      0,      0,      0,
-	}},
-	{{
-	 39296,  39297,  39298,  39299,  39300,  39301,  39302,  39303,
-	 39304,  39305,  39306,  39307,  39308,  39309,  39310,  39311,
-	 39312,  39313,  39314,  39315,  39316,  39317,  39318,  39319,
-	 39320,  39321,  39322,  39323,  39324,  39325,  39326,  39327,
-	}},
-	{{
-	 39328,  39329,  39330,  39331,  39332,  39333,  39334,  39335,
-	 39336,  39337,  39338,  39339,  39340,  39341,  39342,  39343,
-	 39344,  39345,  39346,  39347,  39348,  39349,  39350,  39351,
-	 39352,  39353,  39354,  39355,  39356,  39357,  39358,  39359,
-	}},
-	{{
-	 39360,  39361,  39362,  39363,  39364,  39365,  39366,  39367,
-	 39368,  39369,  39370,  39371,  39372,  39373,  39374,  39375,
-	 39376,  39377,  39378,  39379,  39380,      0,  39381,  39382,
-	 39383,  39384,  39385,  39386,  39387,  39388,  39389,  39390,
-	}},
-	{{
-	 39391,  39392,  39393,  39394,  39395,  39396,  39397,  39398,
-	 39399,  39400,  39401,  39402,  39403,  39404,  39405,  39406,
-	 39407,  39408,  39409,  39410,  39411,  39412,  39413,  39414,
-	 39415,  39416,  39417,  39418,  39419,  39420,  39421,  39422,
-	}},
-	{{
-	 39423,  39424,  39425,  39426,  39427,  39428,  39429,  39430,
-	 39431,  39432,  39433,  39434,  39435,  39436,  39437,  39438,
-	 39439,  39440,  39441,  39442,  39443,  39444,  39445,  39446,
-	 39447,  39448,  39449,  39450,  39451,      0,  39452,  39453,
-	}},
-	{{
-	     0,      0,  39454,      0,      0,  39455,  39456,      0,
-	     0,  39457,  39458,  39459,  39460,      0,  39461,  39462,
-	 39463,  39464,  39465,  39466,  39467,  39468,  39469,  39470,
-	 39471,  39472,      0,  39473,      0,  39474,  39475,  39476,
-	}},
-	{{
-	 39477,  39478,  39479,  39480,      0,  39481,  39482,  39483,
-	 39484,  39485,  39486,  39487,  39488,  39489,  39490,  39491,
-	 39492,  39493,  39494,  39495,  39496,  39497,  39498,  39499,
-	 39500,  39501,  39502,  39503,  39504,  39505,  39506,  39507,
-	}},
-	{{
-	 39508,  39509,  39510,  39511,  39512,  39513,  39514,  39515,
-	 39516,  39517,  39518,  39519,  39520,  39521,  39522,  39523,
-	 39524,  39525,  39526,  39527,  39528,  39529,  39530,  39531,
-	 39532,  39533,  39534,  39535,  39536,  39537,  39538,  39539,
-	}},
-	{{
-	 39540,  39541,  39542,  39543,  39544,  39545,      0,  39546,
-	 39547,  39548,  39549,      0,      0,  39550,  39551,  39552,
-	 39553,  39554,  39555,  39556,  39557,      0,  39558,  39559,
-	 39560,  39561,  39562,  39563,  39564,      0,  39565,  39566,
-	}},
-	{{
-	 39567,  39568,  39569,  39570,  39571,  39572,  39573,  39574,
-	 39575,  39576,  39577,  39578,  39579,  39580,  39581,  39582,
-	 39583,  39584,  39585,  39586,  39587,  39588,  39589,  39590,
-	 39591,  39592,      0,  39593,  39594,  39595,  39596,      0,
-	}},
-	{{
-	 39597,  39598,  39599,  39600,  39601,      0,  39602,      0,
-	     0,      0,  39603,  39604,  39605,  39606,  39607,  39608,
-	 39609,      0,  39610,  39611,  39612,  39613,  39614,  39615,
-	 39616,  39617,  39618,  39619,  39620,  39621,  39622,  39623,
-	}},
-	{{
-	 39624,  39625,  39626,  39627,  39628,  39629,  39630,  39631,
-	 39632,  39633,  39634,  39635,  39636,  39637,  39638,  39639,
-	 39640,  39641,  39642,  39643,  39644,  39645,  39646,  39647,
-	 39648,  39649,  39650,  39651,  39652,  39653,  39654,  39655,
-	}},
-	{{
-	 39656,  39657,  39658,  39659,  39660,  39661,  39662,  39663,
-	 39664,  39665,  39666,  39667,  39668,  39669,  39670,  39671,
-	 39672,  39673,  39674,  39675,  39676,  39677,  39678,  39679,
-	 39680,  39681,  39682,  39683,  39684,  39685,  39686,  39687,
-	}},
-	{{
-	 39688,  39689,  39690,  39691,  39692,  39693,  39694,  39695,
-	 39696,  39697,  39698,  39699,  39700,  39701,  39702,  39703,
-	 39704,  39705,  39706,  39707,  39708,  39709,  39710,  39711,
-	 39712,  39713,  39714,  39715,  39716,  39717,  39718,  39719,
-	}},
-	{{
-	 39720,  39721,  39722,  39723,  39724,  39725,  39726,  39727,
-	 39728,  39729,  39730,  39731,  39732,  39733,  39734,  39735,
-	 39736,  39737,  39738,  39739,  39740,  39741,  39742,  39743,
-	 39744,  39745,  39746,  39747,  39748,  39749,  39750,  39751,
-	}},
-	{{
-	 39752,  39753,  39754,  39755,  39756,  39757,  39758,  39759,
-	 39760,  39761,  39762,  39763,  39764,  39765,  39766,  39767,
-	 39768,  39769,  39770,  39771,  39772,  39773,  39774,  39775,
-	 39776,  39777,  39778,  39779,  39780,  39781,  39782,  39783,
-	}},
-	{{
-	 39784,  39785,  39786,  39787,  39788,  39789,  39790,  39791,
-	 39792,  39793,  39794,  39795,  39796,  39797,  39798,  39799,
-	 39800,  39801,  39802,  39803,  39804,  39805,  39806,  39807,
-	 39808,  39809,  39810,  39811,  39812,  39813,  39814,  39815,
-	}},
-	{{
-	 39816,  39817,  39818,  39819,  39820,  39821,  39822,  39823,
-	 39824,  39825,  39826,  39827,  39828,  39829,  39830,  39831,
-	 39832,  39833,  39834,  39835,  39836,  39837,  39838,  39839,
-	 39840,  39841,  39842,  39843,  39844,  39845,  39846,  39847,
-	}},
-	{{
-	 39848,  39849,  39850,  39851,  39852,  39853,  39854,  39855,
-	 39856,  39857,  39858,  39859,  39860,  39861,  39862,  39863,
-	 39864,  39865,  39866,  39867,  39868,  39869,  39870,  39871,
-	 39872,  39873,  39874,  39875,  39876,  39877,  39878,  39879,
-	}},
-	{{
-	 39880,  39881,  39882,  39883,  39884,  39885,  39886,  39887,
-	 39888,  39889,  39890,  39891,  39892,  39893,  39894,  39895,
-	 39896,  39897,  39898,  39899,  39900,  39901,  39902,  39903,
-	 39904,  39905,  39906,  39907,  39908,  39909,  39910,  39911,
-	}},
-	{{
-	 39912,  39913,  39914,  39915,  39916,  39917,  39918,  39919,
-	 39920,  39921,  39922,  39923,  39924,  39925,  39926,  39927,
-	 39928,  39929,  39930,  39931,  39932,  39933,  39934,  39935,
-	 39936,  39937,  39938,  39939,  39940,  39941,  39942,  39943,
-	}},
-	{{
-	 39944,  39945,  39946,  39947,  39948,  39949,      0,      0,
-	 39950,  39951,  39952,  39953,  39954,  39955,  39956,  39957,
-	 39958,  39959,  39960,  39961,  39962,  39963,  39964,  39965,
-	 39966,  39967,  39968,  39969,  39970,  39971,  39972,  39973,
-	}},
-	{{
-	 39974,  39975,  39976,  39977,  39978,  39979,  39980,  39981,
-	 39982,  39983,  39984,  39985,  39986,  39987,  39988,  39989,
-	 39990,  39991,  39992,  39993,  39994,  39995,  39996,  39997,
-	 39998,  39999,  40000,  40001,  40002,  40003,  40004,  40005,
-	}},
-	{{
-	 40006,  40007,  40008,  40009,  40010,  40011,  40012,  40013,
-	 40014,  40015,  40016,  40017,  40018,  40019,  40020,  40021,
-	 40022,  40023,  40024,  40025,  40026,  40027,  40028,  40029,
-	 40030,  40031,  40032,  40033,  40034,  40035,  40036,  40037,
-	}},
-	{{
-	 40038,  40039,  40040,  40041,  40042,  40043,  40044,  40045,
-	 40046,  40047,  40048,  40049,  40050,  40051,  40052,  40053,
-	 40054,  40055,  40056,  40057,  40058,  40059,  40060,  40061,
-	 40062,  40063,  40064,  40065,  40066,  40067,  40068,  40069,
-	}},
-	{{
-	 40070,  40071,  40072,  40073,  40074,  40075,  40076,  40077,
-	 40078,  40079,  40080,  40081,  40082,  40083,  40084,  40085,
-	 40086,  40087,  40088,  40089,  40090,  40091,  40092,  40093,
-	 40094,  40095,  40096,  40097,  40098,  40099,  40100,  40101,
-	}},
-	{{
-	 40102,  40103,  40104,  40105,  40106,  40107,  40108,  40109,
-	 40110,  40111,  40112,  40113,  40114,  40115,  40116,  40117,
-	 40118,  40119,  40120,  40121,  40122,  40123,  40124,  40125,
-	 40126,  40127,  40128,  40129,  40130,  40131,  40132,  40133,
-	}},
-	{{
-	 40134,  40135,  40136,  40137,  40138,  40139,  40140,  40141,
-	 40142,  40143,  40144,  40145,  40146,  40147,  40148,  40149,
-	 40150,  40151,  40152,  40153,  40154,  40155,  40156,  40157,
-	 40158,  40159,  40160,  40161,  40162,  40163,  40164,  40165,
-	}},
-	{{
-	 40166,  40167,  40168,  40169,  40170,  40171,  40172,  40173,
-	 40174,  40175,  40176,  40177,  40178,  40179,  40180,  40181,
-	 40182,  40183,  40184,  40185,  40186,  40187,  40188,  40189,
-	 40190,  40191,  40192,  40193,  40194,  40195,  40196,  40197,
-	}},
-	{{
-	 40198,  40199,  40200,  40201,  40202,  40203,  40204,  40205,
-	 40206,  40207,  40208,  40209,  40210,  40211,  40212,  40213,
-	 40214,  40215,  40216,  40217,  40218,  40219,  40220,  40221,
-	 40222,  40223,  40224,  40225,  40226,  40227,  40228,  40229,
-	}},
-	{{
-	 40230,  40231,  40232,  40233,  40234,  40235,  40236,  40237,
-	 40238,  40239,      0,      0,      0,      0,  40240,  40241,
-	 40242,  40243,  40244,  40245,  40246,  40247,  40248,  40249,
-	 40250,  40251,  40252,  40253,  40254,  40255,  40256,  40257,
-	}},
-	{{
-	 40258,  40259,  40260,  40261,  40262,  40263,  40264,  40265,
-	 40266,  40267,  40268,  40269,  40270,  40271,  40272,  40273,
-	 40274,  40275,  40276,  40277,  40278,  40279,  40280,  40281,
-	 40282,  40283,  40284,  40285,  40286,  40287,  40288,  40289,
-	}},
-	{{
-	  7522,   7523,   7524,   7525,   7526,   7527,   7528,   7529,
-	  7530,   7531,   7532,   7533,   7534,   7535,   7536,   7537,
-	  7538,   7539,   7540,   7541,   7542,   7543,   7544,   7545,
-	  7546,   7547,   7548,   7549,   7550,   7551,   7552,   7553,
-	}},
-	{{
-	  7554,   7555,   7556,   7557,   7558,   7559,   7560,   7561,
-	  7562,   7563,   7564,   7565,   7566,   7567,   7568,   7569,
-	  7570,   7571,   7572,   7573,   7574,   7575,   7576,   7577,
-	  7578,   7579,   7580,   7581,   7582,   7583,   7584,   7585,
-	}},
-	{{
-	  7586,   7587,   7588,   7589,   7590,   7591,   7592,   7593,
-	  7594,   7595,   7596,   7597,   7598,   7599,   7600,   7601,
-	  7602,   7603,   7604,   7605,   7606,   7607,   7608,   7609,
-	  7610,   7611,   7612,   7613,   7614,   7615,   7616,   7617,
-	}},
-	{{
-	  7618,   7619,   7620,   7621,   7622,   7623,   7624,   7625,
-	  7626,   7627,   7628,   7629,   7630,   7631,   7632,   7633,
-	  7634,   7635,   7636,   7637,   7638,   7639,   7640,   7641,
-	  7642,   7643,   7644,   7645,   7646,   7647,   7648,   7649,
-	}},
-	{{
-	  7650,   7651,   7652,   7653,   7654,   7655,   7656,   7657,
-	  7658,   7659,   7660,   7661,   7662,   7663,   7664,   7665,
-	  7666,   7667,   7668,   7669,   7670,   7671,   7672,   7673,
-	  7674,   7675,   7676,   7677,   7678,   7679,   7680,   7681,
-	}},
-	{{
-	  7682,   7683,   7684,   7685,   7686,   7687,   7688,   7689,
-	  7690,   7691,   7692,   7693,   7694,   7695,   7696,   7697,
-	  7698,   7699,   7700,   7701,   7702,   7703,   7704,   7705,
-	  7706,   7707,   7708,   7709,   7710,   7711,   7712,   7713,
-	}},
-	{{
-	  7714,   7715,   7716,   7717,   7718,   7719,   7720,   7721,
-	  7722,   7723,   7724,   7725,   7726,   7727,   7728,   7729,
-	  7730,   7731,   7732,   7733,   7734,   7735,   7736,   7737,
-	  7738,   7739,   7740,   7741,   7742,   7743,   7744,   7745,
-	}},
-	{{
-	  7746,   7747,   7748,   7749,   7750,   7751,   7752,   7753,
-	  7754,   7755,   7756,   7757,   7758,   7759,   7760,   7761,
-	  7762,   7763,   7764,   7765,   7766,   7767,   7768,   7769,
-	  7770,   7771,   7772,   7773,   7774,   7775,   7776,   7777,
-	}},
-	{{
-	  7778,   7779,   7780,   7781,   7782,   7783,   7784,   7785,
-	  7786,   7787,   7788,   7789,   7790,   7791,   7792,   7793,
-	  7794,   7795,   7796,   7797,   7798,   7799,   7800,   7801,
-	  7802,   7803,   7804,   7805,   7806,   7807,   7808,   7809,
-	}},
-	{{
-	  7810,   7811,   7812,   7813,   7814,   7815,   7816,   7817,
-	  7818,   7819,   7820,   7821,   7822,   7823,   7824,   7825,
-	  7826,   7827,   7828,   7829,   7830,   7831,   7832,   7833,
-	  7834,   7835,   7836,   7837,   7838,   7839,   7840,   7841,
-	}},
-	{{
-	  7842,   7843,   7844,   7845,   7846,   7847,   7848,   7849,
-	  7850,   7851,   7852,   7853,   7854,   7855,   7856,   7857,
-	  7858,   7859,   7860,   7861,   7862,   7863,   7864,   7865,
-	  7866,   7867,   7868,   7869,   7870,   7871,   7872,   7873,
-	}},
-	{{
-	  7874,   7875,   7876,   7877,   7878,   7879,   7880,   7881,
-	  7882,   7883,   7884,   7885,   7886,   7887,   7888,   7889,
-	  7890,   7891,   7892,   7893,   7894,   7895,   7896,   7897,
-	  7898,   7899,   7900,   7901,   7902,   7903,   7904,   7905,
-	}},
-	{{
-	  7906,   7907,   7908,   7909,   7910,   7911,   7912,   7913,
-	  7914,   7915,   7916,   7917,   7918,   7919,   7920,   7921,
-	  7922,   7923,   7924,   7925,   7926,   7927,   7928,   7929,
-	  7930,   7931,   7932,   7933,   7934,   7935,   7936,   7937,
-	}},
-	{{
-	  7938,   7939,   7940,   7941,   7942,   7943,   7944,   7945,
-	  7946,   7947,   7948,   7949,   7950,   7951,   7952,   7953,
-	  7954,   7955,   7956,   7957,   7958,   7959,   7960,   7961,
-	  7962,   7963,   7964,   7965,   7966,   7967,   7968,   7969,
-	}},
-	{{
-	  7970,   7971,   7972,   7973,   7974,   7975,   7976,   7977,
-	  7978,   7979,   7980,   7981,   7982,   7983,   7984,   7985,
-	  7986,   7987,   7988,   7989,   7990,   7991,   7992,   7993,
-	  7994,   7995,   7996,   7997,   7998,   7999,   8000,   8001,
-	}},
-	{{
-	  8002,   8003,   8004,   8005,   8006,   8007,   8008,   8009,
-	  8010,   8011,   8012,   8013,   8014,   8015,   8016,   8017,
-	  8018,   8019,   8020,   8021,   8022,   8023,   8024,   8025,
-	  8026,   8027,   8028,   8029,   8030,   8031,   8032,   8033,
-	}},
-	{{
-	  8034,   8035,   8036,   8037,   8038,   8039,   8040,   8041,
-	  8042,   8043,   8044,   8045,   8046,   8047,   8048,   8049,
-	  8050,   8051,   8052,   8053,   8054,   8055,   8056,   8057,
-	  8058,   8059,   8060,   8061,   8062,   8063,      0,      0,
-	}},
-};
-static const uint32_t decompose_seq[] = {
-	0x00000000, 0x80000020, 0x00000020, 0x80000308,
-	0x80000061, 0x00000020, 0x80000304, 0x80000032,
-	0x80000033, 0x00000020, 0x80000301, 0x800003bc,
-	0x00000020, 0x80000327, 0x80000031, 0x8000006f,
-	0x00000031, 0x00002044, 0x80000034, 0x00000031,
-	0x00002044, 0x80000032, 0x00000033, 0x00002044,
-	0x80000034, 0x00000041, 0x80000300, 0x00000041,
-	0x80000301, 0x00000041, 0x80000302, 0x00000041,
-	0x80000303, 0x00000041, 0x80000308, 0x00000041,
-	0x8000030a, 0x00000043, 0x80000327, 0x00000045,
-	0x80000300, 0x00000045, 0x80000301, 0x00000045,
-	0x80000302, 0x00000045, 0x80000308, 0x00000049,
-	0x80000300, 0x00000049, 0x80000301, 0x00000049,
-	0x80000302, 0x00000049, 0x80000308, 0x0000004e,
-	0x80000303, 0x0000004f, 0x80000300, 0x0000004f,
-	0x80000301, 0x0000004f, 0x80000302, 0x0000004f,
-	0x80000303, 0x0000004f, 0x80000308, 0x00000055,
-	0x80000300, 0x00000055, 0x80000301, 0x00000055,
-	0x80000302, 0x00000055, 0x80000308, 0x00000059,
-	0x80000301, 0x00000061, 0x80000300, 0x00000061,
-	0x80000301, 0x00000061, 0x80000302, 0x00000061,
-	0x80000303, 0x00000061, 0x80000308, 0x00000061,
-	0x8000030a, 0x00000063, 0x80000327, 0x00000065,
-	0x80000300, 0x00000065, 0x80000301, 0x00000065,
-	0x80000302, 0x00000065, 0x80000308, 0x00000069,
-	0x80000300, 0x00000069, 0x80000301, 0x00000069,
-	0x80000302, 0x00000069, 0x80000308, 0x0000006e,
-	0x80000303, 0x0000006f, 0x80000300, 0x0000006f,
-	0x80000301, 0x0000006f, 0x80000302, 0x0000006f,
-	0x80000303, 0x0000006f, 0x80000308, 0x00000075,
-	0x80000300, 0x00000075, 0x80000301, 0x00000075,
-	0x80000302, 0x00000075, 0x80000308, 0x00000079,
-	0x80000301, 0x00000079, 0x80000308, 0x00000041,
-	0x80000304, 0x00000061, 0x80000304, 0x00000041,
-	0x80000306, 0x00000061, 0x80000306, 0x00000041,
-	0x80000328, 0x00000061, 0x80000328, 0x00000043,
-	0x80000301, 0x00000063, 0x80000301, 0x00000043,
-	0x80000302, 0x00000063, 0x80000302, 0x00000043,
-	0x80000307, 0x00000063, 0x80000307, 0x00000043,
-	0x8000030c, 0x00000063, 0x8000030c, 0x00000044,
-	0x8000030c, 0x00000064, 0x8000030c, 0x00000045,
-	0x80000304, 0x00000065, 0x80000304, 0x00000045,
-	0x80000306, 0x00000065, 0x80000306, 0x00000045,
-	0x80000307, 0x00000065, 0x80000307, 0x00000045,
-	0x80000328, 0x00000065, 0x80000328, 0x00000045,
-	0x8000030c, 0x00000065, 0x8000030c, 0x00000047,
-	0x80000302, 0x00000067, 0x80000302, 0x00000047,
-	0x80000306, 0x00000067, 0x80000306, 0x00000047,
-	0x80000307, 0x00000067, 0x80000307, 0x00000047,
-	0x80000327, 0x00000067, 0x80000327, 0x00000048,
-	0x80000302, 0x00000068, 0x80000302, 0x00000049,
-	0x80000303, 0x00000069, 0x80000303, 0x00000049,
-	0x80000304, 0x00000069, 0x80000304, 0x00000049,
-	0x80000306, 0x00000069, 0x80000306, 0x00000049,
-	0x80000328, 0x00000069, 0x80000328, 0x00000049,
-	0x80000307, 0x00000049, 0x8000004a, 0x00000069,
-	0x8000006a, 0x0000004a, 0x80000302, 0x0000006a,
-	0x80000302, 0x0000004b, 0x80000327, 0x0000006b,
-	0x80000327, 0x0000004c, 0x80000301, 0x0000006c,
-	0x80000301, 0x0000004c, 0x80000327, 0x0000006c,
-	0x80000327, 0x0000004c, 0x8000030c, 0x0000006c,
-	0x8000030c, 0x0000004c, 0x800000b7, 0x0000006c,
-	0x800000b7, 0x0000004e, 0x80000301, 0x0000006e,
-	0x80000301, 0x0000004e, 0x80000327, 0x0000006e,
-	0x80000327, 0x0000004e, 0x8000030c, 0x0000006e,
-	0x8000030c, 0x000002bc, 0x8000006e, 0x0000004f,
-	0x80000304, 0x0000006f, 0x80000304, 0x0000004f,
-	0x80000306, 0x0000006f, 0x80000306, 0x0000004f,
-	0x8000030b, 0x0000006f, 0x8000030b, 0x00000052,
-	0x80000301, 0x00000072, 0x80000301, 0x00000052,
-	0x80000327, 0x00000072, 0x80000327, 0x00000052,
-	0x8000030c, 0x00000072, 0x8000030c, 0x00000053,
-	0x80000301, 0x00000073, 0x80000301, 0x00000053,
-	0x80000302, 0x00000073, 0x80000302, 0x00000053,
-	0x80000327, 0x00000073, 0x80000327, 0x00000053,
-	0x8000030c, 0x00000073, 0x8000030c, 0x00000054,
-	0x80000327, 0x00000074, 0x80000327, 0x00000054,
-	0x8000030c, 0x00000074, 0x8000030c, 0x00000055,
-	0x80000303, 0x00000075, 0x80000303, 0x00000055,
-	0x80000304, 0x00000075, 0x80000304, 0x00000055,
-	0x80000306, 0x00000075, 0x80000306, 0x00000055,
-	0x8000030a, 0x00000075, 0x8000030a, 0x00000055,
-	0x8000030b, 0x00000075, 0x8000030b, 0x00000055,
-	0x80000328, 0x00000075, 0x80000328, 0x00000057,
-	0x80000302, 0x00000077, 0x80000302, 0x00000059,
-	0x80000302, 0x00000079, 0x80000302, 0x00000059,
-	0x80000308, 0x0000005a, 0x80000301, 0x0000007a,
-	0x80000301, 0x0000005a, 0x80000307, 0x0000007a,
-	0x80000307, 0x0000005a, 0x8000030c, 0x0000007a,
-	0x8000030c, 0x80000073, 0x0000004f, 0x8000031b,
-	0x0000006f, 0x8000031b, 0x00000055, 0x8000031b,
-	0x00000075, 0x8000031b, 0x00000044, 0x8000017d,
-	0x00000044, 0x8000017e, 0x00000064, 0x8000017e,
-	0x0000004c, 0x8000004a, 0x0000004c, 0x8000006a,
-	0x0000006c, 0x8000006a, 0x0000004e, 0x8000004a,
-	0x0000004e, 0x8000006a, 0x0000006e, 0x8000006a,
-	0x00000041, 0x8000030c, 0x00000061, 0x8000030c,
-	0x00000049, 0x8000030c, 0x00000069, 0x8000030c,
-	0x0000004f, 0x8000030c, 0x0000006f, 0x8000030c,
-	0x00000055, 0x8000030c, 0x00000075, 0x8000030c,
-	0x000000dc, 0x80000304, 0x000000fc, 0x80000304,
-	0x000000dc, 0x80000301, 0x000000fc, 0x80000301,
-	0x000000dc, 0x8000030c, 0x000000fc, 0x8000030c,
-	0x000000dc, 0x80000300, 0x000000fc, 0x80000300,
-	0x000000c4, 0x80000304, 0x000000e4, 0x80000304,
-	0x00000226, 0x80000304, 0x00000227, 0x80000304,
-	0x000000c6, 0x80000304, 0x000000e6, 0x80000304,
-	0x00000047, 0x8000030c, 0x00000067, 0x8000030c,
-	0x0000004b, 0x8000030c, 0x0000006b, 0x8000030c,
-	0x0000004f, 0x80000328, 0x0000006f, 0x80000328,
-	0x000001ea, 0x80000304, 0x000001eb, 0x80000304,
-	0x000001b7, 0x8000030c, 0x00000292, 0x8000030c,
-	0x0000006a, 0x8000030c, 0x00000044, 0x8000005a,
-	0x00000044, 0x8000007a, 0x00000064, 0x8000007a,
-	0x00000047, 0x80000301, 0x00000067, 0x80000301,
-	0x0000004e, 0x80000300, 0x0000006e, 0x80000300,
-	0x000000c5, 0x80000301, 0x000000e5, 0x80000301,
-	0x000000c6, 0x80000301, 0x000000e6, 0x80000301,
-	0x000000d8, 0x80000301, 0x000000f8, 0x80000301,
-	0x00000041, 0x8000030f, 0x00000061, 0x8000030f,
-	0x00000041, 0x80000311, 0x00000061, 0x80000311,
-	0x00000045, 0x8000030f, 0x00000065, 0x8000030f,
-	0x00000045, 0x80000311, 0x00000065, 0x80000311,
-	0x00000049, 0x8000030f, 0x00000069, 0x8000030f,
-	0x00000049, 0x80000311, 0x00000069, 0x80000311,
-	0x0000004f, 0x8000030f, 0x0000006f, 0x8000030f,
-	0x0000004f, 0x80000311, 0x0000006f, 0x80000311,
-	0x00000052, 0x8000030f, 0x00000072, 0x8000030f,
-	0x00000052, 0x80000311, 0x00000072, 0x80000311,
-	0x00000055, 0x8000030f, 0x00000075, 0x8000030f,
-	0x00000055, 0x80000311, 0x00000075, 0x80000311,
-	0x00000053, 0x80000326, 0x00000073, 0x80000326,
-	0x00000054, 0x80000326, 0x00000074, 0x80000326,
-	0x00000048, 0x8000030c, 0x00000068, 0x8000030c,
-	0x00000041, 0x80000307, 0x00000061, 0x80000307,
-	0x00000045, 0x80000327, 0x00000065, 0x80000327,
-	0x000000d6, 0x80000304, 0x000000f6, 0x80000304,
-	0x000000d5, 0x80000304, 0x000000f5, 0x80000304,
-	0x0000004f, 0x80000307, 0x0000006f, 0x80000307,
-	0x0000022e, 0x80000304, 0x0000022f, 0x80000304,
-	0x00000059, 0x80000304, 0x00000079, 0x80000304,
-	0x80000068, 0x80000266, 0x8000006a, 0x80000072,
-	0x80000279, 0x8000027b, 0x80000281, 0x80000077,
-	0x80000079, 0x00000020, 0x80000306, 0x00000020,
-	0x80000307, 0x00000020, 0x8000030a, 0x00000020,
-	0x80000328, 0x00000020, 0x80000303, 0x00000020,
-	0x8000030b, 0x80000263, 0x8000006c, 0x80000073,
-	0x80000078, 0x80000295, 0x80000300, 0x80000301,
-	0x80000313, 0x00000308, 0x80000301, 0x800002b9,
-	0x00000020, 0x80000345, 0x8000003b, 0x00000020,
-	0x80000301, 0x000000a8, 0x80000301, 0x00000391,
-	0x80000301, 0x800000b7, 0x00000395, 0x80000301,
-	0x00000397, 0x80000301, 0x00000399, 0x80000301,
-	0x0000039f, 0x80000301, 0x000003a5, 0x80000301,
-	0x000003a9, 0x80000301, 0x000003ca, 0x80000301,
-	0x00000399, 0x80000308, 0x000003a5, 0x80000308,
-	0x000003b1, 0x80000301, 0x000003b5, 0x80000301,
-	0x000003b7, 0x80000301, 0x000003b9, 0x80000301,
-	0x000003cb, 0x80000301, 0x000003b9, 0x80000308,
-	0x000003c5, 0x80000308, 0x000003bf, 0x80000301,
-	0x000003c5, 0x80000301, 0x000003c9, 0x80000301,
-	0x800003b2, 0x800003b8, 0x800003a5, 0x000003d2,
-	0x80000301, 0x000003d2, 0x80000308, 0x800003c6,
-	0x800003c0, 0x800003ba, 0x800003c1, 0x800003c2,
-	0x80000398, 0x800003b5, 0x800003a3, 0x00000415,
-	0x80000300, 0x00000415, 0x80000308, 0x00000413,
-	0x80000301, 0x00000406, 0x80000308, 0x0000041a,
-	0x80000301, 0x00000418, 0x80000300, 0x00000423,
-	0x80000306, 0x00000418, 0x80000306, 0x00000438,
-	0x80000306, 0x00000435, 0x80000300, 0x00000435,
-	0x80000308, 0x00000433, 0x80000301, 0x00000456,
-	0x80000308, 0x0000043a, 0x80000301, 0x00000438,
-	0x80000300, 0x00000443, 0x80000306, 0x00000474,
-	0x8000030f, 0x00000475, 0x8000030f, 0x00000416,
-	0x80000306, 0x00000436, 0x80000306, 0x00000410,
-	0x80000306, 0x00000430, 0x80000306, 0x00000410,
-	0x80000308, 0x00000430, 0x80000308, 0x00000415,
-	0x80000306, 0x00000435, 0x80000306, 0x000004d8,
-	0x80000308, 0x000004d9, 0x80000308, 0x00000416,
-	0x80000308, 0x00000436, 0x80000308, 0x00000417,
-	0x80000308, 0x00000437, 0x80000308, 0x00000418,
-	0x80000304, 0x00000438, 0x80000304, 0x00000418,
-	0x80000308, 0x00000438, 0x80000308, 0x0000041e,
-	0x80000308, 0x0000043e, 0x80000308, 0x000004e8,
-	0x80000308, 0x000004e9, 0x80000308, 0x0000042d,
-	0x80000308, 0x0000044d, 0x80000308, 0x00000423,
-	0x80000304, 0x00000443, 0x80000304, 0x00000423,
-	0x80000308, 0x00000443, 0x80000308, 0x00000423,
-	0x8000030b, 0x00000443, 0x8000030b, 0x00000427,
-	0x80000308, 0x00000447, 0x80000308, 0x0000042b,
-	0x80000308, 0x0000044b, 0x80000308, 0x00000565,
-	0x80000582, 0x00000627, 0x80000653, 0x00000627,
-	0x80000654, 0x00000648, 0x80000654, 0x00000627,
-	0x80000655, 0x0000064a, 0x80000654, 0x00000627,
-	0x80000674, 0x00000648, 0x80000674, 0x000006c7,
-	0x80000674, 0x0000064a, 0x80000674, 0x000006d5,
-	0x80000654, 0x000006c1, 0x80000654, 0x000006d2,
-	0x80000654, 0x00000928, 0x8000093c, 0x00000930,
-	0x8000093c, 0x00000933, 0x8000093c, 0x00000915,
-	0x8000093c, 0x00000916, 0x8000093c, 0x00000917,
-	0x8000093c, 0x0000091c, 0x8000093c, 0x00000921,
-	0x8000093c, 0x00000922, 0x8000093c, 0x0000092b,
-	0x8000093c, 0x0000092f, 0x8000093c, 0x000009c7,
-	0x800009be, 0x000009c7, 0x800009d7, 0x000009a1,
-	0x800009bc, 0x000009a2, 0x800009bc, 0x000009af,
-	0x800009bc, 0x00000a32, 0x80000a3c, 0x00000a38,
-	0x80000a3c, 0x00000a16, 0x80000a3c, 0x00000a17,
-	0x80000a3c, 0x00000a1c, 0x80000a3c, 0x00000a2b,
-	0x80000a3c, 0x00000b47, 0x80000b56, 0x00000b47,
-	0x80000b3e, 0x00000b47, 0x80000b57, 0x00000b21,
-	0x80000b3c, 0x00000b22, 0x80000b3c, 0x00000b92,
-	0x80000bd7, 0x00000bc6, 0x80000bbe, 0x00000bc7,
-	0x80000bbe, 0x00000bc6, 0x80000bd7, 0x00000c46,
-	0x80000c56, 0x00000cbf, 0x80000cd5, 0x00000cc6,
-	0x80000cd5, 0x00000cc6, 0x80000cd6, 0x00000cc6,
-	0x80000cc2, 0x00000cca, 0x80000cd5, 0x00000d46,
-	0x80000d3e, 0x00000d47, 0x80000d3e, 0x00000d46,
-	0x80000d57, 0x00000dd9, 0x80000dca, 0x00000dd9,
-	0x80000dcf, 0x00000ddc, 0x80000dca, 0x00000dd9,
-	0x80000ddf, 0x00000e4d, 0x80000e32, 0x00000ecd,
-	0x80000eb2, 0x00000eab, 0x80000e99, 0x00000eab,
-	0x80000ea1, 0x80000f0b, 0x00000f42, 0x80000fb7,
-	0x00000f4c, 0x80000fb7, 0x00000f51, 0x80000fb7,
-	0x00000f56, 0x80000fb7, 0x00000f5b, 0x80000fb7,
-	0x00000f40, 0x80000fb5, 0x00000f71, 0x80000f72,
-	0x00000f71, 0x80000f74, 0x00000fb2, 0x80000f80,
-	0x00000fb2, 0x80000f81, 0x00000fb3, 0x80000f80,
-	0x00000fb3, 0x80000f81, 0x00000f71, 0x80000f80,
-	0x00000f92, 0x80000fb7, 0x00000f9c, 0x80000fb7,
-	0x00000fa1, 0x80000fb7, 0x00000fa6, 0x80000fb7,
-	0x00000fab, 0x80000fb7, 0x00000f90, 0x80000fb5,
-	0x00001025, 0x8000102e, 0x800010dc, 0x80000041,
-	0x800000c6, 0x80000042, 0x80000044, 0x80000045,
-	0x8000018e, 0x80000047, 0x80000048, 0x80000049,
-	0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
-	0x8000004e, 0x8000004f, 0x80000222, 0x80000050,
-	0x80000052, 0x80000054, 0x80000055, 0x80000057,
-	0x80000061, 0x80000250, 0x80000251, 0x80001d02,
-	0x80000062, 0x80000064, 0x80000065, 0x80000259,
-	0x8000025b, 0x8000025c, 0x80000067, 0x8000006b,
-	0x8000006d, 0x8000014b, 0x8000006f, 0x80000254,
-	0x80001d16, 0x80001d17, 0x80000070, 0x80000074,
-	0x80000075, 0x80001d1d, 0x8000026f, 0x80000076,
-	0x80001d25, 0x800003b2, 0x800003b3, 0x800003b4,
-	0x800003c6, 0x800003c7, 0x80000069, 0x80000072,
-	0x80000075, 0x80000076, 0x800003b2, 0x800003b3,
-	0x800003c1, 0x800003c6, 0x800003c7, 0x8000043d,
-	0x80000252, 0x80000063, 0x80000255, 0x800000f0,
-	0x8000025c, 0x80000066, 0x8000025f, 0x80000261,
-	0x80000265, 0x80000268, 0x80000269, 0x8000026a,
-	0x80001d7b, 0x8000029d, 0x8000026d, 0x80001d85,
-	0x8000029f, 0x80000271, 0x80000270, 0x80000272,
-	0x80000273, 0x80000274, 0x80000275, 0x80000278,
-	0x80000282, 0x80000283, 0x800001ab, 0x80000289,
-	0x8000028a, 0x80001d1c, 0x8000028b, 0x8000028c,
-	0x8000007a, 0x80000290, 0x80000291, 0x80000292,
-	0x800003b8, 0x00000041, 0x80000325, 0x00000061,
-	0x80000325, 0x00000042, 0x80000307, 0x00000062,
-	0x80000307, 0x00000042, 0x80000323, 0x00000062,
-	0x80000323, 0x00000042, 0x80000331, 0x00000062,
-	0x80000331, 0x000000c7, 0x80000301, 0x000000e7,
-	0x80000301, 0x00000044, 0x80000307, 0x00000064,
-	0x80000307, 0x00000044, 0x80000323, 0x00000064,
-	0x80000323, 0x00000044, 0x80000331, 0x00000064,
-	0x80000331, 0x00000044, 0x80000327, 0x00000064,
-	0x80000327, 0x00000044, 0x8000032d, 0x00000064,
-	0x8000032d, 0x00000112, 0x80000300, 0x00000113,
-	0x80000300, 0x00000112, 0x80000301, 0x00000113,
-	0x80000301, 0x00000045, 0x8000032d, 0x00000065,
-	0x8000032d, 0x00000045, 0x80000330, 0x00000065,
-	0x80000330, 0x00000228, 0x80000306, 0x00000229,
-	0x80000306, 0x00000046, 0x80000307, 0x00000066,
-	0x80000307, 0x00000047, 0x80000304, 0x00000067,
-	0x80000304, 0x00000048, 0x80000307, 0x00000068,
-	0x80000307, 0x00000048, 0x80000323, 0x00000068,
-	0x80000323, 0x00000048, 0x80000308, 0x00000068,
-	0x80000308, 0x00000048, 0x80000327, 0x00000068,
-	0x80000327, 0x00000048, 0x8000032e, 0x00000068,
-	0x8000032e, 0x00000049, 0x80000330, 0x00000069,
-	0x80000330, 0x000000cf, 0x80000301, 0x000000ef,
-	0x80000301, 0x0000004b, 0x80000301, 0x0000006b,
-	0x80000301, 0x0000004b, 0x80000323, 0x0000006b,
-	0x80000323, 0x0000004b, 0x80000331, 0x0000006b,
-	0x80000331, 0x0000004c, 0x80000323, 0x0000006c,
-	0x80000323, 0x00001e36, 0x80000304, 0x00001e37,
-	0x80000304, 0x0000004c, 0x80000331, 0x0000006c,
-	0x80000331, 0x0000004c, 0x8000032d, 0x0000006c,
-	0x8000032d, 0x0000004d, 0x80000301, 0x0000006d,
-	0x80000301, 0x0000004d, 0x80000307, 0x0000006d,
-	0x80000307, 0x0000004d, 0x80000323, 0x0000006d,
-	0x80000323, 0x0000004e, 0x80000307, 0x0000006e,
-	0x80000307, 0x0000004e, 0x80000323, 0x0000006e,
-	0x80000323, 0x0000004e, 0x80000331, 0x0000006e,
-	0x80000331, 0x0000004e, 0x8000032d, 0x0000006e,
-	0x8000032d, 0x000000d5, 0x80000301, 0x000000f5,
-	0x80000301, 0x000000d5, 0x80000308, 0x000000f5,
-	0x80000308, 0x0000014c, 0x80000300, 0x0000014d,
-	0x80000300, 0x0000014c, 0x80000301, 0x0000014d,
-	0x80000301, 0x00000050, 0x80000301, 0x00000070,
-	0x80000301, 0x00000050, 0x80000307, 0x00000070,
-	0x80000307, 0x00000052, 0x80000307, 0x00000072,
-	0x80000307, 0x00000052, 0x80000323, 0x00000072,
-	0x80000323, 0x00001e5a, 0x80000304, 0x00001e5b,
-	0x80000304, 0x00000052, 0x80000331, 0x00000072,
-	0x80000331, 0x00000053, 0x80000307, 0x00000073,
-	0x80000307, 0x00000053, 0x80000323, 0x00000073,
-	0x80000323, 0x0000015a, 0x80000307, 0x0000015b,
-	0x80000307, 0x00000160, 0x80000307, 0x00000161,
-	0x80000307, 0x00001e62, 0x80000307, 0x00001e63,
-	0x80000307, 0x00000054, 0x80000307, 0x00000074,
-	0x80000307, 0x00000054, 0x80000323, 0x00000074,
-	0x80000323, 0x00000054, 0x80000331, 0x00000074,
-	0x80000331, 0x00000054, 0x8000032d, 0x00000074,
-	0x8000032d, 0x00000055, 0x80000324, 0x00000075,
-	0x80000324, 0x00000055, 0x80000330, 0x00000075,
-	0x80000330, 0x00000055, 0x8000032d, 0x00000075,
-	0x8000032d, 0x00000168, 0x80000301, 0x00000169,
-	0x80000301, 0x0000016a, 0x80000308, 0x0000016b,
-	0x80000308, 0x00000056, 0x80000303, 0x00000076,
-	0x80000303, 0x00000056, 0x80000323, 0x00000076,
-	0x80000323, 0x00000057, 0x80000300, 0x00000077,
-	0x80000300, 0x00000057, 0x80000301, 0x00000077,
-	0x80000301, 0x00000057, 0x80000308, 0x00000077,
-	0x80000308, 0x00000057, 0x80000307, 0x00000077,
-	0x80000307, 0x00000057, 0x80000323, 0x00000077,
-	0x80000323, 0x00000058, 0x80000307, 0x00000078,
-	0x80000307, 0x00000058, 0x80000308, 0x00000078,
-	0x80000308, 0x00000059, 0x80000307, 0x00000079,
-	0x80000307, 0x0000005a, 0x80000302, 0x0000007a,
-	0x80000302, 0x0000005a, 0x80000323, 0x0000007a,
-	0x80000323, 0x0000005a, 0x80000331, 0x0000007a,
-	0x80000331, 0x00000068, 0x80000331, 0x00000074,
-	0x80000308, 0x00000077, 0x8000030a, 0x00000079,
-	0x8000030a, 0x00000061, 0x800002be, 0x0000017f,
-	0x80000307, 0x00000041, 0x80000323, 0x00000061,
-	0x80000323, 0x00000041, 0x80000309, 0x00000061,
-	0x80000309, 0x000000c2, 0x80000301, 0x000000e2,
-	0x80000301, 0x000000c2, 0x80000300, 0x000000e2,
-	0x80000300, 0x000000c2, 0x80000309, 0x000000e2,
-	0x80000309, 0x000000c2, 0x80000303, 0x000000e2,
-	0x80000303, 0x00001ea0, 0x80000302, 0x00001ea1,
-	0x80000302, 0x00000102, 0x80000301, 0x00000103,
-	0x80000301, 0x00000102, 0x80000300, 0x00000103,
-	0x80000300, 0x00000102, 0x80000309, 0x00000103,
-	0x80000309, 0x00000102, 0x80000303, 0x00000103,
-	0x80000303, 0x00001ea0, 0x80000306, 0x00001ea1,
-	0x80000306, 0x00000045, 0x80000323, 0x00000065,
-	0x80000323, 0x00000045, 0x80000309, 0x00000065,
-	0x80000309, 0x00000045, 0x80000303, 0x00000065,
-	0x80000303, 0x000000ca, 0x80000301, 0x000000ea,
-	0x80000301, 0x000000ca, 0x80000300, 0x000000ea,
-	0x80000300, 0x000000ca, 0x80000309, 0x000000ea,
-	0x80000309, 0x000000ca, 0x80000303, 0x000000ea,
-	0x80000303, 0x00001eb8, 0x80000302, 0x00001eb9,
-	0x80000302, 0x00000049, 0x80000309, 0x00000069,
-	0x80000309, 0x00000049, 0x80000323, 0x00000069,
-	0x80000323, 0x0000004f, 0x80000323, 0x0000006f,
-	0x80000323, 0x0000004f, 0x80000309, 0x0000006f,
-	0x80000309, 0x000000d4, 0x80000301, 0x000000f4,
-	0x80000301, 0x000000d4, 0x80000300, 0x000000f4,
-	0x80000300, 0x000000d4, 0x80000309, 0x000000f4,
-	0x80000309, 0x000000d4, 0x80000303, 0x000000f4,
-	0x80000303, 0x00001ecc, 0x80000302, 0x00001ecd,
-	0x80000302, 0x000001a0, 0x80000301, 0x000001a1,
-	0x80000301, 0x000001a0, 0x80000300, 0x000001a1,
-	0x80000300, 0x000001a0, 0x80000309, 0x000001a1,
-	0x80000309, 0x000001a0, 0x80000303, 0x000001a1,
-	0x80000303, 0x000001a0, 0x80000323, 0x000001a1,
-	0x80000323, 0x00000055, 0x80000323, 0x00000075,
-	0x80000323, 0x00000055, 0x80000309, 0x00000075,
-	0x80000309, 0x000001af, 0x80000301, 0x000001b0,
-	0x80000301, 0x000001af, 0x80000300, 0x000001b0,
-	0x80000300, 0x000001af, 0x80000309, 0x000001b0,
-	0x80000309, 0x000001af, 0x80000303, 0x000001b0,
-	0x80000303, 0x000001af, 0x80000323, 0x000001b0,
-	0x80000323, 0x00000059, 0x80000300, 0x00000079,
-	0x80000300, 0x00000059, 0x80000323, 0x00000079,
-	0x80000323, 0x00000059, 0x80000309, 0x00000079,
-	0x80000309, 0x00000059, 0x80000303, 0x00000079,
-	0x80000303, 0x000003b1, 0x80000313, 0x000003b1,
-	0x80000314, 0x00001f00, 0x80000300, 0x00001f01,
-	0x80000300, 0x00001f00, 0x80000301, 0x00001f01,
-	0x80000301, 0x00001f00, 0x80000342, 0x00001f01,
-	0x80000342, 0x00000391, 0x80000313, 0x00000391,
-	0x80000314, 0x00001f08, 0x80000300, 0x00001f09,
-	0x80000300, 0x00001f08, 0x80000301, 0x00001f09,
-	0x80000301, 0x00001f08, 0x80000342, 0x00001f09,
-	0x80000342, 0x000003b5, 0x80000313, 0x000003b5,
-	0x80000314, 0x00001f10, 0x80000300, 0x00001f11,
-	0x80000300, 0x00001f10, 0x80000301, 0x00001f11,
-	0x80000301, 0x00000395, 0x80000313, 0x00000395,
-	0x80000314, 0x00001f18, 0x80000300, 0x00001f19,
-	0x80000300, 0x00001f18, 0x80000301, 0x00001f19,
-	0x80000301, 0x000003b7, 0x80000313, 0x000003b7,
-	0x80000314, 0x00001f20, 0x80000300, 0x00001f21,
-	0x80000300, 0x00001f20, 0x80000301, 0x00001f21,
-	0x80000301, 0x00001f20, 0x80000342, 0x00001f21,
-	0x80000342, 0x00000397, 0x80000313, 0x00000397,
-	0x80000314, 0x00001f28, 0x80000300, 0x00001f29,
-	0x80000300, 0x00001f28, 0x80000301, 0x00001f29,
-	0x80000301, 0x00001f28, 0x80000342, 0x00001f29,
-	0x80000342, 0x000003b9, 0x80000313, 0x000003b9,
-	0x80000314, 0x00001f30, 0x80000300, 0x00001f31,
-	0x80000300, 0x00001f30, 0x80000301, 0x00001f31,
-	0x80000301, 0x00001f30, 0x80000342, 0x00001f31,
-	0x80000342, 0x00000399, 0x80000313, 0x00000399,
-	0x80000314, 0x00001f38, 0x80000300, 0x00001f39,
-	0x80000300, 0x00001f38, 0x80000301, 0x00001f39,
-	0x80000301, 0x00001f38, 0x80000342, 0x00001f39,
-	0x80000342, 0x000003bf, 0x80000313, 0x000003bf,
-	0x80000314, 0x00001f40, 0x80000300, 0x00001f41,
-	0x80000300, 0x00001f40, 0x80000301, 0x00001f41,
-	0x80000301, 0x0000039f, 0x80000313, 0x0000039f,
-	0x80000314, 0x00001f48, 0x80000300, 0x00001f49,
-	0x80000300, 0x00001f48, 0x80000301, 0x00001f49,
-	0x80000301, 0x000003c5, 0x80000313, 0x000003c5,
-	0x80000314, 0x00001f50, 0x80000300, 0x00001f51,
-	0x80000300, 0x00001f50, 0x80000301, 0x00001f51,
-	0x80000301, 0x00001f50, 0x80000342, 0x00001f51,
-	0x80000342, 0x000003a5, 0x80000314, 0x00001f59,
-	0x80000300, 0x00001f59, 0x80000301, 0x00001f59,
-	0x80000342, 0x000003c9, 0x80000313, 0x000003c9,
-	0x80000314, 0x00001f60, 0x80000300, 0x00001f61,
-	0x80000300, 0x00001f60, 0x80000301, 0x00001f61,
-	0x80000301, 0x00001f60, 0x80000342, 0x00001f61,
-	0x80000342, 0x000003a9, 0x80000313, 0x000003a9,
-	0x80000314, 0x00001f68, 0x80000300, 0x00001f69,
-	0x80000300, 0x00001f68, 0x80000301, 0x00001f69,
-	0x80000301, 0x00001f68, 0x80000342, 0x00001f69,
-	0x80000342, 0x000003b1, 0x80000300, 0x800003ac,
-	0x000003b5, 0x80000300, 0x800003ad, 0x000003b7,
-	0x80000300, 0x800003ae, 0x000003b9, 0x80000300,
-	0x800003af, 0x000003bf, 0x80000300, 0x800003cc,
-	0x000003c5, 0x80000300, 0x800003cd, 0x000003c9,
-	0x80000300, 0x800003ce, 0x00001f00, 0x80000345,
-	0x00001f01, 0x80000345, 0x00001f02, 0x80000345,
-	0x00001f03, 0x80000345, 0x00001f04, 0x80000345,
-	0x00001f05, 0x80000345, 0x00001f06, 0x80000345,
-	0x00001f07, 0x80000345, 0x00001f08, 0x80000345,
-	0x00001f09, 0x80000345, 0x00001f0a, 0x80000345,
-	0x00001f0b, 0x80000345, 0x00001f0c, 0x80000345,
-	0x00001f0d, 0x80000345, 0x00001f0e, 0x80000345,
-	0x00001f0f, 0x80000345, 0x00001f20, 0x80000345,
-	0x00001f21, 0x80000345, 0x00001f22, 0x80000345,
-	0x00001f23, 0x80000345, 0x00001f24, 0x80000345,
-	0x00001f25, 0x80000345, 0x00001f26, 0x80000345,
-	0x00001f27, 0x80000345, 0x00001f28, 0x80000345,
-	0x00001f29, 0x80000345, 0x00001f2a, 0x80000345,
-	0x00001f2b, 0x80000345, 0x00001f2c, 0x80000345,
-	0x00001f2d, 0x80000345, 0x00001f2e, 0x80000345,
-	0x00001f2f, 0x80000345, 0x00001f60, 0x80000345,
-	0x00001f61, 0x80000345, 0x00001f62, 0x80000345,
-	0x00001f63, 0x80000345, 0x00001f64, 0x80000345,
-	0x00001f65, 0x80000345, 0x00001f66, 0x80000345,
-	0x00001f67, 0x80000345, 0x00001f68, 0x80000345,
-	0x00001f69, 0x80000345, 0x00001f6a, 0x80000345,
-	0x00001f6b, 0x80000345, 0x00001f6c, 0x80000345,
-	0x00001f6d, 0x80000345, 0x00001f6e, 0x80000345,
-	0x00001f6f, 0x80000345, 0x000003b1, 0x80000306,
-	0x000003b1, 0x80000304, 0x00001f70, 0x80000345,
-	0x000003b1, 0x80000345, 0x000003ac, 0x80000345,
-	0x000003b1, 0x80000342, 0x00001fb6, 0x80000345,
-	0x00000391, 0x80000306, 0x00000391, 0x80000304,
-	0x00000391, 0x80000300, 0x80000386, 0x00000391,
-	0x80000345, 0x00000020, 0x80000313, 0x800003b9,
-	0x00000020, 0x80000313, 0x00000020, 0x80000342,
-	0x000000a8, 0x80000342, 0x00001f74, 0x80000345,
-	0x000003b7, 0x80000345, 0x000003ae, 0x80000345,
-	0x000003b7, 0x80000342, 0x00001fc6, 0x80000345,
-	0x00000395, 0x80000300, 0x80000388, 0x00000397,
-	0x80000300, 0x80000389, 0x00000397, 0x80000345,
-	0x00001fbf, 0x80000300, 0x00001fbf, 0x80000301,
-	0x00001fbf, 0x80000342, 0x000003b9, 0x80000306,
-	0x000003b9, 0x80000304, 0x000003ca, 0x80000300,
-	0x80000390, 0x000003b9, 0x80000342, 0x000003ca,
-	0x80000342, 0x00000399, 0x80000306, 0x00000399,
-	0x80000304, 0x00000399, 0x80000300, 0x8000038a,
-	0x00001ffe, 0x80000300, 0x00001ffe, 0x80000301,
-	0x00001ffe, 0x80000342, 0x000003c5, 0x80000306,
-	0x000003c5, 0x80000304, 0x000003cb, 0x80000300,
-	0x800003b0, 0x000003c1, 0x80000313, 0x000003c1,
-	0x80000314, 0x000003c5, 0x80000342, 0x000003cb,
-	0x80000342, 0x000003a5, 0x80000306, 0x000003a5,
-	0x80000304, 0x000003a5, 0x80000300, 0x8000038e,
-	0x000003a1, 0x80000314, 0x000000a8, 0x80000300,
-	0x80000385, 0x80000060, 0x00001f7c, 0x80000345,
-	0x000003c9, 0x80000345, 0x000003ce, 0x80000345,
-	0x000003c9, 0x80000342, 0x00001ff6, 0x80000345,
-	0x0000039f, 0x80000300, 0x8000038c, 0x000003a9,
-	0x80000300, 0x8000038f, 0x000003a9, 0x80000345,
-	0x800000b4, 0x00000020, 0x80000314, 0x80002002,
-	0x80002003, 0x80000020, 0x80000020, 0x80000020,
-	0x80000020, 0x80000020, 0x80000020, 0x80000020,
-	0x80000020, 0x80000020, 0x80002010, 0x00000020,
-	0x80000333, 0x8000002e, 0x0000002e, 0x8000002e,
-	0x0000002e, 0x0000002e, 0x8000002e, 0x80000020,
-	0x00002032, 0x80002032, 0x00002032, 0x00002032,
-	0x80002032, 0x00002035, 0x80002035, 0x00002035,
-	0x00002035, 0x80002035, 0x00000021, 0x80000021,
-	0x00000020, 0x80000305, 0x0000003f, 0x8000003f,
-	0x0000003f, 0x80000021, 0x00000021, 0x8000003f,
-	0x00002032, 0x00002032, 0x00002032, 0x80002032,
-	0x80000020, 0x80000030, 0x80000069, 0x80000034,
-	0x80000035, 0x80000036, 0x80000037, 0x80000038,
-	0x80000039, 0x8000002b, 0x80002212, 0x8000003d,
-	0x80000028, 0x80000029, 0x8000006e, 0x80000030,
-	0x80000031, 0x80000032, 0x80000033, 0x80000034,
-	0x80000035, 0x80000036, 0x80000037, 0x80000038,
-	0x80000039, 0x8000002b, 0x80002212, 0x8000003d,
-	0x80000028, 0x80000029, 0x80000061, 0x80000065,
-	0x8000006f, 0x80000078, 0x80000259, 0x00000052,
-	0x80000073, 0x00000061, 0x0000002f, 0x80000063,
-	0x00000061, 0x0000002f, 0x80000073, 0x80000043,
-	0x000000b0, 0x80000043, 0x00000063, 0x0000002f,
-	0x8000006f, 0x00000063, 0x0000002f, 0x80000075,
-	0x80000190, 0x000000b0, 0x80000046, 0x80000067,
-	0x80000048, 0x80000048, 0x80000048, 0x80000068,
-	0x80000127, 0x80000049, 0x80000049, 0x8000004c,
-	0x8000006c, 0x8000004e, 0x0000004e, 0x8000006f,
-	0x80000050, 0x80000051, 0x80000052, 0x80000052,
-	0x80000052, 0x00000053, 0x8000004d, 0x00000054,
-	0x00000045, 0x8000004c, 0x00000054, 0x8000004d,
-	0x8000005a, 0x800003a9, 0x8000005a, 0x8000004b,
-	0x800000c5, 0x80000042, 0x80000043, 0x80000065,
-	0x80000045, 0x80000046, 0x8000004d, 0x8000006f,
-	0x800005d0, 0x800005d1, 0x800005d2, 0x800005d3,
-	0x80000069, 0x00000046, 0x00000041, 0x80000058,
-	0x800003c0, 0x800003b3, 0x80000393, 0x800003a0,
-	0x80002211, 0x80000044, 0x80000064, 0x80000065,
-	0x80000069, 0x8000006a, 0x00000031, 0x00002044,
-	0x80000033, 0x00000032, 0x00002044, 0x80000033,
-	0x00000031, 0x00002044, 0x80000035, 0x00000032,
-	0x00002044, 0x80000035, 0x00000033, 0x00002044,
-	0x80000035, 0x00000034, 0x00002044, 0x80000035,
-	0x00000031, 0x00002044, 0x80000036, 0x00000035,
-	0x00002044, 0x80000036, 0x00000031, 0x00002044,
-	0x80000038, 0x00000033, 0x00002044, 0x80000038,
-	0x00000035, 0x00002044, 0x80000038, 0x00000037,
-	0x00002044, 0x80000038, 0x00000031, 0x80002044,
-	0x80000049, 0x00000049, 0x80000049, 0x00000049,
-	0x00000049, 0x80000049, 0x00000049, 0x80000056,
-	0x80000056, 0x00000056, 0x80000049, 0x00000056,
-	0x00000049, 0x80000049, 0x00000056, 0x00000049,
-	0x00000049, 0x80000049, 0x00000049, 0x80000058,
-	0x80000058, 0x00000058, 0x80000049, 0x00000058,
-	0x00000049, 0x80000049, 0x8000004c, 0x80000043,
-	0x80000044, 0x8000004d, 0x80000069, 0x00000069,
-	0x80000069, 0x00000069, 0x00000069, 0x80000069,
-	0x00000069, 0x80000076, 0x80000076, 0x00000076,
-	0x80000069, 0x00000076, 0x00000069, 0x80000069,
-	0x00000076, 0x00000069, 0x00000069, 0x80000069,
-	0x00000069, 0x80000078, 0x80000078, 0x00000078,
-	0x80000069, 0x00000078, 0x00000069, 0x80000069,
-	0x8000006c, 0x80000063, 0x80000064, 0x8000006d,
-	0x00002190, 0x80000338, 0x00002192, 0x80000338,
-	0x00002194, 0x80000338, 0x000021d0, 0x80000338,
-	0x000021d4, 0x80000338, 0x000021d2, 0x80000338,
-	0x00002203, 0x80000338, 0x00002208, 0x80000338,
-	0x0000220b, 0x80000338, 0x00002223, 0x80000338,
-	0x00002225, 0x80000338, 0x0000222b, 0x8000222b,
-	0x0000222b, 0x0000222b, 0x8000222b, 0x0000222e,
-	0x8000222e, 0x0000222e, 0x0000222e, 0x8000222e,
-	0x0000223c, 0x80000338, 0x00002243, 0x80000338,
-	0x00002245, 0x80000338, 0x00002248, 0x80000338,
-	0x0000003d, 0x80000338, 0x00002261, 0x80000338,
-	0x0000224d, 0x80000338, 0x0000003c, 0x80000338,
-	0x0000003e, 0x80000338, 0x00002264, 0x80000338,
-	0x00002265, 0x80000338, 0x00002272, 0x80000338,
-	0x00002273, 0x80000338, 0x00002276, 0x80000338,
-	0x00002277, 0x80000338, 0x0000227a, 0x80000338,
-	0x0000227b, 0x80000338, 0x00002282, 0x80000338,
-	0x00002283, 0x80000338, 0x00002286, 0x80000338,
-	0x00002287, 0x80000338, 0x000022a2, 0x80000338,
-	0x000022a8, 0x80000338, 0x000022a9, 0x80000338,
-	0x000022ab, 0x80000338, 0x0000227c, 0x80000338,
-	0x0000227d, 0x80000338, 0x00002291, 0x80000338,
-	0x00002292, 0x80000338, 0x000022b2, 0x80000338,
-	0x000022b3, 0x80000338, 0x000022b4, 0x80000338,
-	0x000022b5, 0x80000338, 0x80003008, 0x80003009,
-	0x80000031, 0x80000032, 0x80000033, 0x80000034,
-	0x80000035, 0x80000036, 0x80000037, 0x80000038,
-	0x80000039, 0x00000031, 0x80000030, 0x00000031,
-	0x80000031, 0x00000031, 0x80000032, 0x00000031,
-	0x80000033, 0x00000031, 0x80000034, 0x00000031,
-	0x80000035, 0x00000031, 0x80000036, 0x00000031,
-	0x80000037, 0x00000031, 0x80000038, 0x00000031,
-	0x80000039, 0x00000032, 0x80000030, 0x00000028,
-	0x00000031, 0x80000029, 0x00000028, 0x00000032,
-	0x80000029, 0x00000028, 0x00000033, 0x80000029,
-	0x00000028, 0x00000034, 0x80000029, 0x00000028,
-	0x00000035, 0x80000029, 0x00000028, 0x00000036,
-	0x80000029, 0x00000028, 0x00000037, 0x80000029,
-	0x00000028, 0x00000038, 0x80000029, 0x00000028,
-	0x00000039, 0x80000029, 0x00000028, 0x00000031,
-	0x00000030, 0x80000029, 0x00000028, 0x00000031,
-	0x00000031, 0x80000029, 0x00000028, 0x00000031,
-	0x00000032, 0x80000029, 0x00000028, 0x00000031,
-	0x00000033, 0x80000029, 0x00000028, 0x00000031,
-	0x00000034, 0x80000029, 0x00000028, 0x00000031,
-	0x00000035, 0x80000029, 0x00000028, 0x00000031,
-	0x00000036, 0x80000029, 0x00000028, 0x00000031,
-	0x00000037, 0x80000029, 0x00000028, 0x00000031,
-	0x00000038, 0x80000029, 0x00000028, 0x00000031,
-	0x00000039, 0x80000029, 0x00000028, 0x00000032,
-	0x00000030, 0x80000029, 0x00000031, 0x8000002e,
-	0x00000032, 0x8000002e, 0x00000033, 0x8000002e,
-	0x00000034, 0x8000002e, 0x00000035, 0x8000002e,
-	0x00000036, 0x8000002e, 0x00000037, 0x8000002e,
-	0x00000038, 0x8000002e, 0x00000039, 0x8000002e,
-	0x00000031, 0x00000030, 0x8000002e, 0x00000031,
-	0x00000031, 0x8000002e, 0x00000031, 0x00000032,
-	0x8000002e, 0x00000031, 0x00000033, 0x8000002e,
-	0x00000031, 0x00000034, 0x8000002e, 0x00000031,
-	0x00000035, 0x8000002e, 0x00000031, 0x00000036,
-	0x8000002e, 0x00000031, 0x00000037, 0x8000002e,
-	0x00000031, 0x00000038, 0x8000002e, 0x00000031,
-	0x00000039, 0x8000002e, 0x00000032, 0x00000030,
-	0x8000002e, 0x00000028, 0x00000061, 0x80000029,
-	0x00000028, 0x00000062, 0x80000029, 0x00000028,
-	0x00000063, 0x80000029, 0x00000028, 0x00000064,
-	0x80000029, 0x00000028, 0x00000065, 0x80000029,
-	0x00000028, 0x00000066, 0x80000029, 0x00000028,
-	0x00000067, 0x80000029, 0x00000028, 0x00000068,
-	0x80000029, 0x00000028, 0x00000069, 0x80000029,
-	0x00000028, 0x0000006a, 0x80000029, 0x00000028,
-	0x0000006b, 0x80000029, 0x00000028, 0x0000006c,
-	0x80000029, 0x00000028, 0x0000006d, 0x80000029,
-	0x00000028, 0x0000006e, 0x80000029, 0x00000028,
-	0x0000006f, 0x80000029, 0x00000028, 0x00000070,
-	0x80000029, 0x00000028, 0x00000071, 0x80000029,
-	0x00000028, 0x00000072, 0x80000029, 0x00000028,
-	0x00000073, 0x80000029, 0x00000028, 0x00000074,
-	0x80000029, 0x00000028, 0x00000075, 0x80000029,
-	0x00000028, 0x00000076, 0x80000029, 0x00000028,
-	0x00000077, 0x80000029, 0x00000028, 0x00000078,
-	0x80000029, 0x00000028, 0x00000079, 0x80000029,
-	0x00000028, 0x0000007a, 0x80000029, 0x80000041,
-	0x80000042, 0x80000043, 0x80000044, 0x80000045,
-	0x80000046, 0x80000047, 0x80000048, 0x80000049,
-	0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
-	0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
-	0x80000052, 0x80000053, 0x80000054, 0x80000055,
-	0x80000056, 0x80000057, 0x80000058, 0x80000059,
-	0x8000005a, 0x80000061, 0x80000062, 0x80000063,
-	0x80000064, 0x80000065, 0x80000066, 0x80000067,
-	0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
-	0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
-	0x80000070, 0x80000071, 0x80000072, 0x80000073,
-	0x80000074, 0x80000075, 0x80000076, 0x80000077,
-	0x80000078, 0x80000079, 0x8000007a, 0x80000030,
-	0x0000222b, 0x0000222b, 0x0000222b, 0x8000222b,
-	0x0000003a, 0x0000003a, 0x8000003d, 0x0000003d,
-	0x8000003d, 0x0000003d, 0x0000003d, 0x8000003d,
-	0x00002add, 0x80000338, 0x80002d61, 0x80006bcd,
-	0x80009f9f, 0x80004e00, 0x80004e28, 0x80004e36,
-	0x80004e3f, 0x80004e59, 0x80004e85, 0x80004e8c,
-	0x80004ea0, 0x80004eba, 0x8000513f, 0x80005165,
-	0x8000516b, 0x80005182, 0x80005196, 0x800051ab,
-	0x800051e0, 0x800051f5, 0x80005200, 0x8000529b,
-	0x800052f9, 0x80005315, 0x8000531a, 0x80005338,
-	0x80005341, 0x8000535c, 0x80005369, 0x80005382,
-	0x800053b6, 0x800053c8, 0x800053e3, 0x800056d7,
-	0x8000571f, 0x800058eb, 0x80005902, 0x8000590a,
-	0x80005915, 0x80005927, 0x80005973, 0x80005b50,
-	0x80005b80, 0x80005bf8, 0x80005c0f, 0x80005c22,
-	0x80005c38, 0x80005c6e, 0x80005c71, 0x80005ddb,
-	0x80005de5, 0x80005df1, 0x80005dfe, 0x80005e72,
-	0x80005e7a, 0x80005e7f, 0x80005ef4, 0x80005efe,
-	0x80005f0b, 0x80005f13, 0x80005f50, 0x80005f61,
-	0x80005f73, 0x80005fc3, 0x80006208, 0x80006236,
-	0x8000624b, 0x8000652f, 0x80006534, 0x80006587,
-	0x80006597, 0x800065a4, 0x800065b9, 0x800065e0,
-	0x800065e5, 0x800066f0, 0x80006708, 0x80006728,
-	0x80006b20, 0x80006b62, 0x80006b79, 0x80006bb3,
-	0x80006bcb, 0x80006bd4, 0x80006bdb, 0x80006c0f,
-	0x80006c14, 0x80006c34, 0x8000706b, 0x8000722a,
-	0x80007236, 0x8000723b, 0x8000723f, 0x80007247,
-	0x80007259, 0x8000725b, 0x800072ac, 0x80007384,
-	0x80007389, 0x800074dc, 0x800074e6, 0x80007518,
-	0x8000751f, 0x80007528, 0x80007530, 0x8000758b,
-	0x80007592, 0x80007676, 0x8000767d, 0x800076ae,
-	0x800076bf, 0x800076ee, 0x800077db, 0x800077e2,
-	0x800077f3, 0x8000793a, 0x800079b8, 0x800079be,
-	0x80007a74, 0x80007acb, 0x80007af9, 0x80007c73,
-	0x80007cf8, 0x80007f36, 0x80007f51, 0x80007f8a,
-	0x80007fbd, 0x80008001, 0x8000800c, 0x80008012,
-	0x80008033, 0x8000807f, 0x80008089, 0x800081e3,
-	0x800081ea, 0x800081f3, 0x800081fc, 0x8000820c,
-	0x8000821b, 0x8000821f, 0x8000826e, 0x80008272,
-	0x80008278, 0x8000864d, 0x8000866b, 0x80008840,
-	0x8000884c, 0x80008863, 0x8000897e, 0x8000898b,
-	0x800089d2, 0x80008a00, 0x80008c37, 0x80008c46,
-	0x80008c55, 0x80008c78, 0x80008c9d, 0x80008d64,
-	0x80008d70, 0x80008db3, 0x80008eab, 0x80008eca,
-	0x80008f9b, 0x80008fb0, 0x80008fb5, 0x80009091,
-	0x80009149, 0x800091c6, 0x800091cc, 0x800091d1,
-	0x80009577, 0x80009580, 0x8000961c, 0x800096b6,
-	0x800096b9, 0x800096e8, 0x80009751, 0x8000975e,
-	0x80009762, 0x80009769, 0x800097cb, 0x800097ed,
-	0x800097f3, 0x80009801, 0x800098a8, 0x800098db,
-	0x800098df, 0x80009996, 0x80009999, 0x800099ac,
-	0x80009aa8, 0x80009ad8, 0x80009adf, 0x80009b25,
-	0x80009b2f, 0x80009b32, 0x80009b3c, 0x80009b5a,
-	0x80009ce5, 0x80009e75, 0x80009e7f, 0x80009ea5,
-	0x80009ebb, 0x80009ec3, 0x80009ecd, 0x80009ed1,
-	0x80009ef9, 0x80009efd, 0x80009f0e, 0x80009f13,
-	0x80009f20, 0x80009f3b, 0x80009f4a, 0x80009f52,
-	0x80009f8d, 0x80009f9c, 0x80009fa0, 0x80000020,
-	0x80003012, 0x80005341, 0x80005344, 0x80005345,
-	0x0000304b, 0x80003099, 0x0000304d, 0x80003099,
-	0x0000304f, 0x80003099, 0x00003051, 0x80003099,
-	0x00003053, 0x80003099, 0x00003055, 0x80003099,
-	0x00003057, 0x80003099, 0x00003059, 0x80003099,
-	0x0000305b, 0x80003099, 0x0000305d, 0x80003099,
-	0x0000305f, 0x80003099, 0x00003061, 0x80003099,
-	0x00003064, 0x80003099, 0x00003066, 0x80003099,
-	0x00003068, 0x80003099, 0x0000306f, 0x80003099,
-	0x0000306f, 0x8000309a, 0x00003072, 0x80003099,
-	0x00003072, 0x8000309a, 0x00003075, 0x80003099,
-	0x00003075, 0x8000309a, 0x00003078, 0x80003099,
-	0x00003078, 0x8000309a, 0x0000307b, 0x80003099,
-	0x0000307b, 0x8000309a, 0x00003046, 0x80003099,
-	0x00000020, 0x80003099, 0x00000020, 0x8000309a,
-	0x0000309d, 0x80003099, 0x00003088, 0x8000308a,
-	0x000030ab, 0x80003099, 0x000030ad, 0x80003099,
-	0x000030af, 0x80003099, 0x000030b1, 0x80003099,
-	0x000030b3, 0x80003099, 0x000030b5, 0x80003099,
-	0x000030b7, 0x80003099, 0x000030b9, 0x80003099,
-	0x000030bb, 0x80003099, 0x000030bd, 0x80003099,
-	0x000030bf, 0x80003099, 0x000030c1, 0x80003099,
-	0x000030c4, 0x80003099, 0x000030c6, 0x80003099,
-	0x000030c8, 0x80003099, 0x000030cf, 0x80003099,
-	0x000030cf, 0x8000309a, 0x000030d2, 0x80003099,
-	0x000030d2, 0x8000309a, 0x000030d5, 0x80003099,
-	0x000030d5, 0x8000309a, 0x000030d8, 0x80003099,
-	0x000030d8, 0x8000309a, 0x000030db, 0x80003099,
-	0x000030db, 0x8000309a, 0x000030a6, 0x80003099,
-	0x000030ef, 0x80003099, 0x000030f0, 0x80003099,
-	0x000030f1, 0x80003099, 0x000030f2, 0x80003099,
-	0x000030fd, 0x80003099, 0x000030b3, 0x800030c8,
-	0x80001100, 0x80001101, 0x800011aa, 0x80001102,
-	0x800011ac, 0x800011ad, 0x80001103, 0x80001104,
-	0x80001105, 0x800011b0, 0x800011b1, 0x800011b2,
-	0x800011b3, 0x800011b4, 0x800011b5, 0x8000111a,
-	0x80001106, 0x80001107, 0x80001108, 0x80001121,
-	0x80001109, 0x8000110a, 0x8000110b, 0x8000110c,
-	0x8000110d, 0x8000110e, 0x8000110f, 0x80001110,
-	0x80001111, 0x80001112, 0x80001161, 0x80001162,
-	0x80001163, 0x80001164, 0x80001165, 0x80001166,
-	0x80001167, 0x80001168, 0x80001169, 0x8000116a,
-	0x8000116b, 0x8000116c, 0x8000116d, 0x8000116e,
-	0x8000116f, 0x80001170, 0x80001171, 0x80001172,
-	0x80001173, 0x80001174, 0x80001175, 0x80001160,
-	0x80001114, 0x80001115, 0x800011c7, 0x800011c8,
-	0x800011cc, 0x800011ce, 0x800011d3, 0x800011d7,
-	0x800011d9, 0x8000111c, 0x800011dd, 0x800011df,
-	0x8000111d, 0x8000111e, 0x80001120, 0x80001122,
-	0x80001123, 0x80001127, 0x80001129, 0x8000112b,
-	0x8000112c, 0x8000112d, 0x8000112e, 0x8000112f,
-	0x80001132, 0x80001136, 0x80001140, 0x80001147,
-	0x8000114c, 0x800011f1, 0x800011f2, 0x80001157,
-	0x80001158, 0x80001159, 0x80001184, 0x80001185,
-	0x80001188, 0x80001191, 0x80001192, 0x80001194,
-	0x8000119e, 0x800011a1, 0x80004e00, 0x80004e8c,
-	0x80004e09, 0x800056db, 0x80004e0a, 0x80004e2d,
-	0x80004e0b, 0x80007532, 0x80004e59, 0x80004e19,
-	0x80004e01, 0x80005929, 0x80005730, 0x80004eba,
-	0x00000028, 0x00001100, 0x80000029, 0x00000028,
-	0x00001102, 0x80000029, 0x00000028, 0x00001103,
-	0x80000029, 0x00000028, 0x00001105, 0x80000029,
-	0x00000028, 0x00001106, 0x80000029, 0x00000028,
-	0x00001107, 0x80000029, 0x00000028, 0x00001109,
-	0x80000029, 0x00000028, 0x0000110b, 0x80000029,
-	0x00000028, 0x0000110c, 0x80000029, 0x00000028,
-	0x0000110e, 0x80000029, 0x00000028, 0x0000110f,
-	0x80000029, 0x00000028, 0x00001110, 0x80000029,
-	0x00000028, 0x00001111, 0x80000029, 0x00000028,
-	0x00001112, 0x80000029, 0x00000028, 0x00001100,
-	0x00001161, 0x80000029, 0x00000028, 0x00001102,
-	0x00001161, 0x80000029, 0x00000028, 0x00001103,
-	0x00001161, 0x80000029, 0x00000028, 0x00001105,
-	0x00001161, 0x80000029, 0x00000028, 0x00001106,
-	0x00001161, 0x80000029, 0x00000028, 0x00001107,
-	0x00001161, 0x80000029, 0x00000028, 0x00001109,
-	0x00001161, 0x80000029, 0x00000028, 0x0000110b,
-	0x00001161, 0x80000029, 0x00000028, 0x0000110c,
-	0x00001161, 0x80000029, 0x00000028, 0x0000110e,
-	0x00001161, 0x80000029, 0x00000028, 0x0000110f,
-	0x00001161, 0x80000029, 0x00000028, 0x00001110,
-	0x00001161, 0x80000029, 0x00000028, 0x00001111,
-	0x00001161, 0x80000029, 0x00000028, 0x00001112,
-	0x00001161, 0x80000029, 0x00000028, 0x0000110c,
-	0x0000116e, 0x80000029, 0x00000028, 0x0000110b,
-	0x00001169, 0x0000110c, 0x00001165, 0x000011ab,
-	0x80000029, 0x00000028, 0x0000110b, 0x00001169,
-	0x00001112, 0x0000116e, 0x80000029, 0x00000028,
-	0x00004e00, 0x80000029, 0x00000028, 0x00004e8c,
-	0x80000029, 0x00000028, 0x00004e09, 0x80000029,
-	0x00000028, 0x000056db, 0x80000029, 0x00000028,
-	0x00004e94, 0x80000029, 0x00000028, 0x0000516d,
-	0x80000029, 0x00000028, 0x00004e03, 0x80000029,
-	0x00000028, 0x0000516b, 0x80000029, 0x00000028,
-	0x00004e5d, 0x80000029, 0x00000028, 0x00005341,
-	0x80000029, 0x00000028, 0x00006708, 0x80000029,
-	0x00000028, 0x0000706b, 0x80000029, 0x00000028,
-	0x00006c34, 0x80000029, 0x00000028, 0x00006728,
-	0x80000029, 0x00000028, 0x000091d1, 0x80000029,
-	0x00000028, 0x0000571f, 0x80000029, 0x00000028,
-	0x000065e5, 0x80000029, 0x00000028, 0x0000682a,
-	0x80000029, 0x00000028, 0x00006709, 0x80000029,
-	0x00000028, 0x0000793e, 0x80000029, 0x00000028,
-	0x0000540d, 0x80000029, 0x00000028, 0x00007279,
-	0x80000029, 0x00000028, 0x00008ca1, 0x80000029,
-	0x00000028, 0x0000795d, 0x80000029, 0x00000028,
-	0x000052b4, 0x80000029, 0x00000028, 0x00004ee3,
-	0x80000029, 0x00000028, 0x0000547c, 0x80000029,
-	0x00000028, 0x00005b66, 0x80000029, 0x00000028,
-	0x000076e3, 0x80000029, 0x00000028, 0x00004f01,
-	0x80000029, 0x00000028, 0x00008cc7, 0x80000029,
-	0x00000028, 0x00005354, 0x80000029, 0x00000028,
-	0x0000796d, 0x80000029, 0x00000028, 0x00004f11,
-	0x80000029, 0x00000028, 0x000081ea, 0x80000029,
-	0x00000028, 0x000081f3, 0x80000029, 0x00000050,
-	0x00000054, 0x80000045, 0x00000032, 0x80000031,
-	0x00000032, 0x80000032, 0x00000032, 0x80000033,
-	0x00000032, 0x80000034, 0x00000032, 0x80000035,
-	0x00000032, 0x80000036, 0x00000032, 0x80000037,
-	0x00000032, 0x80000038, 0x00000032, 0x80000039,
-	0x00000033, 0x80000030, 0x00000033, 0x80000031,
-	0x00000033, 0x80000032, 0x00000033, 0x80000033,
-	0x00000033, 0x80000034, 0x00000033, 0x80000035,
-	0x80001100, 0x80001102, 0x80001103, 0x80001105,
-	0x80001106, 0x80001107, 0x80001109, 0x8000110b,
-	0x8000110c, 0x8000110e, 0x8000110f, 0x80001110,
-	0x80001111, 0x80001112, 0x00001100, 0x80001161,
-	0x00001102, 0x80001161, 0x00001103, 0x80001161,
-	0x00001105, 0x80001161, 0x00001106, 0x80001161,
-	0x00001107, 0x80001161, 0x00001109, 0x80001161,
-	0x0000110b, 0x80001161, 0x0000110c, 0x80001161,
-	0x0000110e, 0x80001161, 0x0000110f, 0x80001161,
-	0x00001110, 0x80001161, 0x00001111, 0x80001161,
-	0x00001112, 0x80001161, 0x0000110e, 0x00001161,
-	0x000011b7, 0x00001100, 0x80001169, 0x0000110c,
-	0x0000116e, 0x0000110b, 0x80001174, 0x0000110b,
-	0x8000116e, 0x80004e00, 0x80004e8c, 0x80004e09,
-	0x800056db, 0x80004e94, 0x8000516d, 0x80004e03,
-	0x8000516b, 0x80004e5d, 0x80005341, 0x80006708,
-	0x8000706b, 0x80006c34, 0x80006728, 0x800091d1,
-	0x8000571f, 0x800065e5, 0x8000682a, 0x80006709,
-	0x8000793e, 0x8000540d, 0x80007279, 0x80008ca1,
-	0x8000795d, 0x800052b4, 0x800079d8, 0x80007537,
-	0x80005973, 0x80009069, 0x8000512a, 0x80005370,
-	0x80006ce8, 0x80009805, 0x80004f11, 0x80005199,
-	0x80006b63, 0x80004e0a, 0x80004e2d, 0x80004e0b,
-	0x80005de6, 0x800053f3, 0x8000533b, 0x80005b97,
-	0x80005b66, 0x800076e3, 0x80004f01, 0x80008cc7,
-	0x80005354, 0x8000591c, 0x00000033, 0x80000036,
-	0x00000033, 0x80000037, 0x00000033, 0x80000038,
-	0x00000033, 0x80000039, 0x00000034, 0x80000030,
-	0x00000034, 0x80000031, 0x00000034, 0x80000032,
-	0x00000034, 0x80000033, 0x00000034, 0x80000034,
-	0x00000034, 0x80000035, 0x00000034, 0x80000036,
-	0x00000034, 0x80000037, 0x00000034, 0x80000038,
-	0x00000034, 0x80000039, 0x00000035, 0x80000030,
-	0x00000031, 0x80006708, 0x00000032, 0x80006708,
-	0x00000033, 0x80006708, 0x00000034, 0x80006708,
-	0x00000035, 0x80006708, 0x00000036, 0x80006708,
-	0x00000037, 0x80006708, 0x00000038, 0x80006708,
-	0x00000039, 0x80006708, 0x00000031, 0x00000030,
-	0x80006708, 0x00000031, 0x00000031, 0x80006708,
-	0x00000031, 0x00000032, 0x80006708, 0x00000048,
-	0x80000067, 0x00000065, 0x00000072, 0x80000067,
-	0x00000065, 0x80000056, 0x0000004c, 0x00000054,
-	0x80000044, 0x800030a2, 0x800030a4, 0x800030a6,
-	0x800030a8, 0x800030aa, 0x800030ab, 0x800030ad,
-	0x800030af, 0x800030b1, 0x800030b3, 0x800030b5,
-	0x800030b7, 0x800030b9, 0x800030bb, 0x800030bd,
-	0x800030bf, 0x800030c1, 0x800030c4, 0x800030c6,
-	0x800030c8, 0x800030ca, 0x800030cb, 0x800030cc,
-	0x800030cd, 0x800030ce, 0x800030cf, 0x800030d2,
-	0x800030d5, 0x800030d8, 0x800030db, 0x800030de,
-	0x800030df, 0x800030e0, 0x800030e1, 0x800030e2,
-	0x800030e4, 0x800030e6, 0x800030e8, 0x800030e9,
-	0x800030ea, 0x800030eb, 0x800030ec, 0x800030ed,
-	0x800030ef, 0x800030f0, 0x800030f1, 0x800030f2,
-	0x000030a2, 0x000030d1, 0x000030fc, 0x800030c8,
-	0x000030a2, 0x000030eb, 0x000030d5, 0x800030a1,
-	0x000030a2, 0x000030f3, 0x000030da, 0x800030a2,
-	0x000030a2, 0x000030fc, 0x800030eb, 0x000030a4,
-	0x000030cb, 0x000030f3, 0x800030b0, 0x000030a4,
-	0x000030f3, 0x800030c1, 0x000030a6, 0x000030a9,
-	0x800030f3, 0x000030a8, 0x000030b9, 0x000030af,
-	0x000030fc, 0x800030c9, 0x000030a8, 0x000030fc,
-	0x000030ab, 0x800030fc, 0x000030aa, 0x000030f3,
-	0x800030b9, 0x000030aa, 0x000030fc, 0x800030e0,
-	0x000030ab, 0x000030a4, 0x800030ea, 0x000030ab,
-	0x000030e9, 0x000030c3, 0x800030c8, 0x000030ab,
-	0x000030ed, 0x000030ea, 0x800030fc, 0x000030ac,
-	0x000030ed, 0x800030f3, 0x000030ac, 0x000030f3,
-	0x800030de, 0x000030ae, 0x800030ac, 0x000030ae,
-	0x000030cb, 0x800030fc, 0x000030ad, 0x000030e5,
-	0x000030ea, 0x800030fc, 0x000030ae, 0x000030eb,
-	0x000030c0, 0x800030fc, 0x000030ad, 0x800030ed,
-	0x000030ad, 0x000030ed, 0x000030b0, 0x000030e9,
-	0x800030e0, 0x000030ad, 0x000030ed, 0x000030e1,
-	0x000030fc, 0x000030c8, 0x800030eb, 0x000030ad,
-	0x000030ed, 0x000030ef, 0x000030c3, 0x800030c8,
-	0x000030b0, 0x000030e9, 0x800030e0, 0x000030b0,
-	0x000030e9, 0x000030e0, 0x000030c8, 0x800030f3,
-	0x000030af, 0x000030eb, 0x000030bc, 0x000030a4,
-	0x800030ed, 0x000030af, 0x000030ed, 0x000030fc,
-	0x800030cd, 0x000030b1, 0x000030fc, 0x800030b9,
-	0x000030b3, 0x000030eb, 0x800030ca, 0x000030b3,
-	0x000030fc, 0x800030dd, 0x000030b5, 0x000030a4,
-	0x000030af, 0x800030eb, 0x000030b5, 0x000030f3,
-	0x000030c1, 0x000030fc, 0x800030e0, 0x000030b7,
-	0x000030ea, 0x000030f3, 0x800030b0, 0x000030bb,
-	0x000030f3, 0x800030c1, 0x000030bb, 0x000030f3,
-	0x800030c8, 0x000030c0, 0x000030fc, 0x800030b9,
-	0x000030c7, 0x800030b7, 0x000030c9, 0x800030eb,
-	0x000030c8, 0x800030f3, 0x000030ca, 0x800030ce,
-	0x000030ce, 0x000030c3, 0x800030c8, 0x000030cf,
-	0x000030a4, 0x800030c4, 0x000030d1, 0x000030fc,
-	0x000030bb, 0x000030f3, 0x800030c8, 0x000030d1,
-	0x000030fc, 0x800030c4, 0x000030d0, 0x000030fc,
-	0x000030ec, 0x800030eb, 0x000030d4, 0x000030a2,
-	0x000030b9, 0x000030c8, 0x800030eb, 0x000030d4,
-	0x000030af, 0x800030eb, 0x000030d4, 0x800030b3,
-	0x000030d3, 0x800030eb, 0x000030d5, 0x000030a1,
-	0x000030e9, 0x000030c3, 0x800030c9, 0x000030d5,
-	0x000030a3, 0x000030fc, 0x800030c8, 0x000030d6,
-	0x000030c3, 0x000030b7, 0x000030a7, 0x800030eb,
-	0x000030d5, 0x000030e9, 0x800030f3, 0x000030d8,
-	0x000030af, 0x000030bf, 0x000030fc, 0x800030eb,
-	0x000030da, 0x800030bd, 0x000030da, 0x000030cb,
-	0x800030d2, 0x000030d8, 0x000030eb, 0x800030c4,
-	0x000030da, 0x000030f3, 0x800030b9, 0x000030da,
-	0x000030fc, 0x800030b8, 0x000030d9, 0x000030fc,
-	0x800030bf, 0x000030dd, 0x000030a4, 0x000030f3,
-	0x800030c8, 0x000030dc, 0x000030eb, 0x800030c8,
-	0x000030db, 0x800030f3, 0x000030dd, 0x000030f3,
-	0x800030c9, 0x000030db, 0x000030fc, 0x800030eb,
-	0x000030db, 0x000030fc, 0x800030f3, 0x000030de,
-	0x000030a4, 0x000030af, 0x800030ed, 0x000030de,
-	0x000030a4, 0x800030eb, 0x000030de, 0x000030c3,
-	0x800030cf, 0x000030de, 0x000030eb, 0x800030af,
-	0x000030de, 0x000030f3, 0x000030b7, 0x000030e7,
-	0x800030f3, 0x000030df, 0x000030af, 0x000030ed,
-	0x800030f3, 0x000030df, 0x800030ea, 0x000030df,
-	0x000030ea, 0x000030d0, 0x000030fc, 0x800030eb,
-	0x000030e1, 0x800030ac, 0x000030e1, 0x000030ac,
-	0x000030c8, 0x800030f3, 0x000030e1, 0x000030fc,
-	0x000030c8, 0x800030eb, 0x000030e4, 0x000030fc,
-	0x800030c9, 0x000030e4, 0x000030fc, 0x800030eb,
-	0x000030e6, 0x000030a2, 0x800030f3, 0x000030ea,
-	0x000030c3, 0x000030c8, 0x800030eb, 0x000030ea,
-	0x800030e9, 0x000030eb, 0x000030d4, 0x800030fc,
-	0x000030eb, 0x000030fc, 0x000030d6, 0x800030eb,
-	0x000030ec, 0x800030e0, 0x000030ec, 0x000030f3,
-	0x000030c8, 0x000030b2, 0x800030f3, 0x000030ef,
-	0x000030c3, 0x800030c8, 0x00000030, 0x800070b9,
-	0x00000031, 0x800070b9, 0x00000032, 0x800070b9,
-	0x00000033, 0x800070b9, 0x00000034, 0x800070b9,
-	0x00000035, 0x800070b9, 0x00000036, 0x800070b9,
-	0x00000037, 0x800070b9, 0x00000038, 0x800070b9,
-	0x00000039, 0x800070b9, 0x00000031, 0x00000030,
-	0x800070b9, 0x00000031, 0x00000031, 0x800070b9,
-	0x00000031, 0x00000032, 0x800070b9, 0x00000031,
-	0x00000033, 0x800070b9, 0x00000031, 0x00000034,
-	0x800070b9, 0x00000031, 0x00000035, 0x800070b9,
-	0x00000031, 0x00000036, 0x800070b9, 0x00000031,
-	0x00000037, 0x800070b9, 0x00000031, 0x00000038,
-	0x800070b9, 0x00000031, 0x00000039, 0x800070b9,
-	0x00000032, 0x00000030, 0x800070b9, 0x00000032,
-	0x00000031, 0x800070b9, 0x00000032, 0x00000032,
-	0x800070b9, 0x00000032, 0x00000033, 0x800070b9,
-	0x00000032, 0x00000034, 0x800070b9, 0x00000068,
-	0x00000050, 0x80000061, 0x00000064, 0x80000061,
-	0x00000041, 0x80000055, 0x00000062, 0x00000061,
-	0x80000072, 0x0000006f, 0x80000056, 0x00000070,
-	0x80000063, 0x00000064, 0x8000006d, 0x00000064,
-	0x0000006d, 0x800000b2, 0x00000064, 0x0000006d,
-	0x800000b3, 0x00000049, 0x80000055, 0x00005e73,
-	0x80006210, 0x0000662d, 0x8000548c, 0x00005927,
-	0x80006b63, 0x0000660e, 0x80006cbb, 0x0000682a,
-	0x00005f0f, 0x00004f1a, 0x8000793e, 0x00000070,
-	0x80000041, 0x0000006e, 0x80000041, 0x000003bc,
-	0x80000041, 0x0000006d, 0x80000041, 0x0000006b,
-	0x80000041, 0x0000004b, 0x80000042, 0x0000004d,
-	0x80000042, 0x00000047, 0x80000042, 0x00000063,
-	0x00000061, 0x8000006c, 0x0000006b, 0x00000063,
-	0x00000061, 0x8000006c, 0x00000070, 0x80000046,
-	0x0000006e, 0x80000046, 0x000003bc, 0x80000046,
-	0x000003bc, 0x80000067, 0x0000006d, 0x80000067,
-	0x0000006b, 0x80000067, 0x00000048, 0x8000007a,
-	0x0000006b, 0x00000048, 0x8000007a, 0x0000004d,
-	0x00000048, 0x8000007a, 0x00000047, 0x00000048,
-	0x8000007a, 0x00000054, 0x00000048, 0x8000007a,
-	0x000003bc, 0x80002113, 0x0000006d, 0x80002113,
-	0x00000064, 0x80002113, 0x0000006b, 0x80002113,
-	0x00000066, 0x8000006d, 0x0000006e, 0x8000006d,
-	0x000003bc, 0x8000006d, 0x0000006d, 0x8000006d,
-	0x00000063, 0x8000006d, 0x0000006b, 0x8000006d,
-	0x0000006d, 0x0000006d, 0x800000b2, 0x00000063,
-	0x0000006d, 0x800000b2, 0x0000006d, 0x800000b2,
-	0x0000006b, 0x0000006d, 0x800000b2, 0x0000006d,
-	0x0000006d, 0x800000b3, 0x00000063, 0x0000006d,
-	0x800000b3, 0x0000006d, 0x800000b3, 0x0000006b,
-	0x0000006d, 0x800000b3, 0x0000006d, 0x00002215,
-	0x80000073, 0x0000006d, 0x00002215, 0x00000073,
-	0x800000b2, 0x00000050, 0x80000061, 0x0000006b,
-	0x00000050, 0x80000061, 0x0000004d, 0x00000050,
-	0x80000061, 0x00000047, 0x00000050, 0x80000061,
-	0x00000072, 0x00000061, 0x80000064, 0x00000072,
-	0x00000061, 0x00000064, 0x00002215, 0x80000073,
-	0x00000072, 0x00000061, 0x00000064, 0x00002215,
-	0x00000073, 0x800000b2, 0x00000070, 0x80000073,
-	0x0000006e, 0x80000073, 0x000003bc, 0x80000073,
-	0x0000006d, 0x80000073, 0x00000070, 0x80000056,
-	0x0000006e, 0x80000056, 0x000003bc, 0x80000056,
-	0x0000006d, 0x80000056, 0x0000006b, 0x80000056,
-	0x0000004d, 0x80000056, 0x00000070, 0x80000057,
-	0x0000006e, 0x80000057, 0x000003bc, 0x80000057,
-	0x0000006d, 0x80000057, 0x0000006b, 0x80000057,
-	0x0000004d, 0x80000057, 0x0000006b, 0x800003a9,
-	0x0000004d, 0x800003a9, 0x00000061, 0x0000002e,
-	0x0000006d, 0x8000002e, 0x00000042, 0x80000071,
-	0x00000063, 0x80000063, 0x00000063, 0x80000064,
-	0x00000043, 0x00002215, 0x0000006b, 0x80000067,
-	0x00000043, 0x0000006f, 0x8000002e, 0x00000064,
-	0x80000042, 0x00000047, 0x80000079, 0x00000068,
-	0x80000061, 0x00000048, 0x80000050, 0x00000069,
-	0x8000006e, 0x0000004b, 0x8000004b, 0x0000004b,
-	0x8000004d, 0x0000006b, 0x80000074, 0x0000006c,
-	0x8000006d, 0x0000006c, 0x8000006e, 0x0000006c,
-	0x0000006f, 0x80000067, 0x0000006c, 0x80000078,
-	0x0000006d, 0x80000062, 0x0000006d, 0x00000069,
-	0x8000006c, 0x0000006d, 0x0000006f, 0x8000006c,
-	0x00000050, 0x80000048, 0x00000070, 0x0000002e,
-	0x0000006d, 0x8000002e, 0x00000050, 0x00000050,
-	0x8000004d, 0x00000050, 0x80000052, 0x00000073,
-	0x80000072, 0x00000053, 0x80000076, 0x00000057,
-	0x80000062, 0x00000056, 0x00002215, 0x8000006d,
-	0x00000041, 0x00002215, 0x8000006d, 0x00000031,
-	0x800065e5, 0x00000032, 0x800065e5, 0x00000033,
-	0x800065e5, 0x00000034, 0x800065e5, 0x00000035,
-	0x800065e5, 0x00000036, 0x800065e5, 0x00000037,
-	0x800065e5, 0x00000038, 0x800065e5, 0x00000039,
-	0x800065e5, 0x00000031, 0x00000030, 0x800065e5,
-	0x00000031, 0x00000031, 0x800065e5, 0x00000031,
-	0x00000032, 0x800065e5, 0x00000031, 0x00000033,
-	0x800065e5, 0x00000031, 0x00000034, 0x800065e5,
-	0x00000031, 0x00000035, 0x800065e5, 0x00000031,
-	0x00000036, 0x800065e5, 0x00000031, 0x00000037,
-	0x800065e5, 0x00000031, 0x00000038, 0x800065e5,
-	0x00000031, 0x00000039, 0x800065e5, 0x00000032,
-	0x00000030, 0x800065e5, 0x00000032, 0x00000031,
-	0x800065e5, 0x00000032, 0x00000032, 0x800065e5,
-	0x00000032, 0x00000033, 0x800065e5, 0x00000032,
-	0x00000034, 0x800065e5, 0x00000032, 0x00000035,
-	0x800065e5, 0x00000032, 0x00000036, 0x800065e5,
-	0x00000032, 0x00000037, 0x800065e5, 0x00000032,
-	0x00000038, 0x800065e5, 0x00000032, 0x00000039,
-	0x800065e5, 0x00000033, 0x00000030, 0x800065e5,
-	0x00000033, 0x00000031, 0x800065e5, 0x00000067,
-	0x00000061, 0x8000006c, 0x80008c48, 0x800066f4,
-	0x80008eca, 0x80008cc8, 0x80006ed1, 0x80004e32,
-	0x800053e5, 0x80009f9c, 0x80009f9c, 0x80005951,
-	0x800091d1, 0x80005587, 0x80005948, 0x800061f6,
-	0x80007669, 0x80007f85, 0x8000863f, 0x800087ba,
-	0x800088f8, 0x8000908f, 0x80006a02, 0x80006d1b,
-	0x800070d9, 0x800073de, 0x8000843d, 0x8000916a,
-	0x800099f1, 0x80004e82, 0x80005375, 0x80006b04,
-	0x8000721b, 0x8000862d, 0x80009e1e, 0x80005d50,
-	0x80006feb, 0x800085cd, 0x80008964, 0x800062c9,
-	0x800081d8, 0x8000881f, 0x80005eca, 0x80006717,
-	0x80006d6a, 0x800072fc, 0x800090ce, 0x80004f86,
-	0x800051b7, 0x800052de, 0x800064c4, 0x80006ad3,
-	0x80007210, 0x800076e7, 0x80008001, 0x80008606,
-	0x8000865c, 0x80008def, 0x80009732, 0x80009b6f,
-	0x80009dfa, 0x8000788c, 0x8000797f, 0x80007da0,
-	0x800083c9, 0x80009304, 0x80009e7f, 0x80008ad6,
-	0x800058df, 0x80005f04, 0x80007c60, 0x8000807e,
-	0x80007262, 0x800078ca, 0x80008cc2, 0x800096f7,
-	0x800058d8, 0x80005c62, 0x80006a13, 0x80006dda,
-	0x80006f0f, 0x80007d2f, 0x80007e37, 0x8000964b,
-	0x800052d2, 0x8000808b, 0x800051dc, 0x800051cc,
-	0x80007a1c, 0x80007dbe, 0x800083f1, 0x80009675,
-	0x80008b80, 0x800062cf, 0x80006a02, 0x80008afe,
-	0x80004e39, 0x80005be7, 0x80006012, 0x80007387,
-	0x80007570, 0x80005317, 0x800078fb, 0x80004fbf,
-	0x80005fa9, 0x80004e0d, 0x80006ccc, 0x80006578,
-	0x80007d22, 0x800053c3, 0x8000585e, 0x80007701,
-	0x80008449, 0x80008aaa, 0x80006bba, 0x80008fb0,
-	0x80006c88, 0x800062fe, 0x800082e5, 0x800063a0,
-	0x80007565, 0x80004eae, 0x80005169, 0x800051c9,
-	0x80006881, 0x80007ce7, 0x8000826f, 0x80008ad2,
-	0x800091cf, 0x800052f5, 0x80005442, 0x80005973,
-	0x80005eec, 0x800065c5, 0x80006ffe, 0x8000792a,
-	0x800095ad, 0x80009a6a, 0x80009e97, 0x80009ece,
-	0x8000529b, 0x800066c6, 0x80006b77, 0x80008f62,
-	0x80005e74, 0x80006190, 0x80006200, 0x8000649a,
-	0x80006f23, 0x80007149, 0x80007489, 0x800079ca,
-	0x80007df4, 0x8000806f, 0x80008f26, 0x800084ee,
-	0x80009023, 0x8000934a, 0x80005217, 0x800052a3,
-	0x800054bd, 0x800070c8, 0x800088c2, 0x80008aaa,
-	0x80005ec9, 0x80005ff5, 0x8000637b, 0x80006bae,
-	0x80007c3e, 0x80007375, 0x80004ee4, 0x800056f9,
-	0x80005be7, 0x80005dba, 0x8000601c, 0x800073b2,
-	0x80007469, 0x80007f9a, 0x80008046, 0x80009234,
-	0x800096f6, 0x80009748, 0x80009818, 0x80004f8b,
-	0x800079ae, 0x800091b4, 0x800096b8, 0x800060e1,
-	0x80004e86, 0x800050da, 0x80005bee, 0x80005c3f,
-	0x80006599, 0x80006a02, 0x800071ce, 0x80007642,
-	0x800084fc, 0x8000907c, 0x80009f8d, 0x80006688,
-	0x8000962e, 0x80005289, 0x8000677b, 0x800067f3,
-	0x80006d41, 0x80006e9c, 0x80007409, 0x80007559,
-	0x8000786b, 0x80007d10, 0x8000985e, 0x8000516d,
-	0x8000622e, 0x80009678, 0x8000502b, 0x80005d19,
-	0x80006dea, 0x80008f2a, 0x80005f8b, 0x80006144,
-	0x80006817, 0x80007387, 0x80009686, 0x80005229,
-	0x8000540f, 0x80005c65, 0x80006613, 0x8000674e,
-	0x800068a8, 0x80006ce5, 0x80007406, 0x800075e2,
-	0x80007f79, 0x800088cf, 0x800088e1, 0x800091cc,
-	0x800096e2, 0x8000533f, 0x80006eba, 0x8000541d,
-	0x800071d0, 0x80007498, 0x800085fa, 0x800096a3,
-	0x80009c57, 0x80009e9f, 0x80006797, 0x80006dcb,
-	0x800081e8, 0x80007acb, 0x80007b20, 0x80007c92,
-	0x800072c0, 0x80007099, 0x80008b58, 0x80004ec0,
-	0x80008336, 0x8000523a, 0x80005207, 0x80005ea6,
-	0x800062d3, 0x80007cd6, 0x80005b85, 0x80006d1e,
-	0x800066b4, 0x80008f3b, 0x8000884c, 0x8000964d,
-	0x8000898b, 0x80005ed3, 0x80005140, 0x800055c0,
-	0x8000585a, 0x80006674, 0x800051de, 0x8000732a,
-	0x800076ca, 0x8000793c, 0x8000795e, 0x80007965,
-	0x8000798f, 0x80009756, 0x80007cbe, 0x80007fbd,
-	0x80008612, 0x80008af8, 0x80009038, 0x800090fd,
-	0x800098ef, 0x800098fc, 0x80009928, 0x80009db4,
-	0x80004fae, 0x800050e7, 0x8000514d, 0x800052c9,
-	0x800052e4, 0x80005351, 0x8000559d, 0x80005606,
-	0x80005668, 0x80005840, 0x800058a8, 0x80005c64,
-	0x80005c6e, 0x80006094, 0x80006168, 0x8000618e,
-	0x800061f2, 0x8000654f, 0x800065e2, 0x80006691,
-	0x80006885, 0x80006d77, 0x80006e1a, 0x80006f22,
-	0x8000716e, 0x8000722b, 0x80007422, 0x80007891,
-	0x8000793e, 0x80007949, 0x80007948, 0x80007950,
-	0x80007956, 0x8000795d, 0x8000798d, 0x8000798e,
-	0x80007a40, 0x80007a81, 0x80007bc0, 0x80007df4,
-	0x80007e09, 0x80007e41, 0x80007f72, 0x80008005,
-	0x800081ed, 0x80008279, 0x80008279, 0x80008457,
-	0x80008910, 0x80008996, 0x80008b01, 0x80008b39,
-	0x80008cd3, 0x80008d08, 0x80008fb6, 0x80009038,
-	0x800096e3, 0x800097ff, 0x8000983b, 0x80004e26,
-	0x800051b5, 0x80005168, 0x80004f80, 0x80005145,
-	0x80005180, 0x800052c7, 0x800052fa, 0x8000559d,
-	0x80005555, 0x80005599, 0x800055e2, 0x8000585a,
-	0x800058b3, 0x80005944, 0x80005954, 0x80005a62,
-	0x80005b28, 0x80005ed2, 0x80005ed9, 0x80005f69,
-	0x80005fad, 0x800060d8, 0x8000614e, 0x80006108,
-	0x8000618e, 0x80006160, 0x800061f2, 0x80006234,
-	0x800063c4, 0x8000641c, 0x80006452, 0x80006556,
-	0x80006674, 0x80006717, 0x8000671b, 0x80006756,
-	0x80006b79, 0x80006bba, 0x80006d41, 0x80006edb,
-	0x80006ecb, 0x80006f22, 0x8000701e, 0x8000716e,
-	0x800077a7, 0x80007235, 0x800072af, 0x8000732a,
-	0x80007471, 0x80007506, 0x8000753b, 0x8000761d,
-	0x8000761f, 0x800076ca, 0x800076db, 0x800076f4,
-	0x8000774a, 0x80007740, 0x800078cc, 0x80007ab1,
-	0x80007bc0, 0x80007c7b, 0x80007d5b, 0x80007df4,
-	0x80007f3e, 0x80008005, 0x80008352, 0x800083ef,
-	0x80008779, 0x80008941, 0x80008986, 0x80008996,
-	0x80008abf, 0x80008af8, 0x80008acb, 0x80008b01,
-	0x80008afe, 0x80008aed, 0x80008b39, 0x80008b8a,
-	0x80008d08, 0x80008f38, 0x80009072, 0x80009199,
-	0x80009276, 0x8000967c, 0x800096e3, 0x80009756,
-	0x800097db, 0x800097ff, 0x8000980b, 0x8000983b,
-	0x80009b12, 0x80009f9c, 0x8002284a, 0x80022844,
-	0x800233d5, 0x80003b9d, 0x80004018, 0x80004039,
-	0x80025249, 0x80025cd0, 0x80027ed3, 0x80009f43,
-	0x80009f8e, 0x00000066, 0x80000066, 0x00000066,
-	0x80000069, 0x00000066, 0x8000006c, 0x00000066,
-	0x00000066, 0x80000069, 0x00000066, 0x00000066,
-	0x8000006c, 0x0000017f, 0x80000074, 0x00000073,
-	0x80000074, 0x00000574, 0x80000576, 0x00000574,
-	0x80000565, 0x00000574, 0x8000056b, 0x0000057e,
-	0x80000576, 0x00000574, 0x8000056d, 0x000005d9,
-	0x800005b4, 0x000005f2, 0x800005b7, 0x800005e2,
-	0x800005d0, 0x800005d3, 0x800005d4, 0x800005db,
-	0x800005dc, 0x800005dd, 0x800005e8, 0x800005ea,
-	0x8000002b, 0x000005e9, 0x800005c1, 0x000005e9,
-	0x800005c2, 0x0000fb49, 0x800005c1, 0x0000fb49,
-	0x800005c2, 0x000005d0, 0x800005b7, 0x000005d0,
-	0x800005b8, 0x000005d0, 0x800005bc, 0x000005d1,
-	0x800005bc, 0x000005d2, 0x800005bc, 0x000005d3,
-	0x800005bc, 0x000005d4, 0x800005bc, 0x000005d5,
-	0x800005bc, 0x000005d6, 0x800005bc, 0x000005d8,
-	0x800005bc, 0x000005d9, 0x800005bc, 0x000005da,
-	0x800005bc, 0x000005db, 0x800005bc, 0x000005dc,
-	0x800005bc, 0x000005de, 0x800005bc, 0x000005e0,
-	0x800005bc, 0x000005e1, 0x800005bc, 0x000005e3,
-	0x800005bc, 0x000005e4, 0x800005bc, 0x000005e6,
-	0x800005bc, 0x000005e7, 0x800005bc, 0x000005e8,
-	0x800005bc, 0x000005e9, 0x800005bc, 0x000005ea,
-	0x800005bc, 0x000005d5, 0x800005b9, 0x000005d1,
-	0x800005bf, 0x000005db, 0x800005bf, 0x000005e4,
-	0x800005bf, 0x000005d0, 0x800005dc, 0x80000671,
-	0x80000671, 0x8000067b, 0x8000067b, 0x8000067b,
-	0x8000067b, 0x8000067e, 0x8000067e, 0x8000067e,
-	0x8000067e, 0x80000680, 0x80000680, 0x80000680,
-	0x80000680, 0x8000067a, 0x8000067a, 0x8000067a,
-	0x8000067a, 0x8000067f, 0x8000067f, 0x8000067f,
-	0x8000067f, 0x80000679, 0x80000679, 0x80000679,
-	0x80000679, 0x800006a4, 0x800006a4, 0x800006a4,
-	0x800006a4, 0x800006a6, 0x800006a6, 0x800006a6,
-	0x800006a6, 0x80000684, 0x80000684, 0x80000684,
-	0x80000684, 0x80000683, 0x80000683, 0x80000683,
-	0x80000683, 0x80000686, 0x80000686, 0x80000686,
-	0x80000686, 0x80000687, 0x80000687, 0x80000687,
-	0x80000687, 0x8000068d, 0x8000068d, 0x8000068c,
-	0x8000068c, 0x8000068e, 0x8000068e, 0x80000688,
-	0x80000688, 0x80000698, 0x80000698, 0x80000691,
-	0x80000691, 0x800006a9, 0x800006a9, 0x800006a9,
-	0x800006a9, 0x800006af, 0x800006af, 0x800006af,
-	0x800006af, 0x800006b3, 0x800006b3, 0x800006b3,
-	0x800006b3, 0x800006b1, 0x800006b1, 0x800006b1,
-	0x800006b1, 0x800006ba, 0x800006ba, 0x800006bb,
-	0x800006bb, 0x800006bb, 0x800006bb, 0x800006c0,
-	0x800006c0, 0x800006c1, 0x800006c1, 0x800006c1,
-	0x800006c1, 0x800006be, 0x800006be, 0x800006be,
-	0x800006be, 0x800006d2, 0x800006d2, 0x800006d3,
-	0x800006d3, 0x800006ad, 0x800006ad, 0x800006ad,
-	0x800006ad, 0x800006c7, 0x800006c7, 0x800006c6,
-	0x800006c6, 0x800006c8, 0x800006c8, 0x80000677,
-	0x800006cb, 0x800006cb, 0x800006c5, 0x800006c5,
-	0x800006c9, 0x800006c9, 0x800006d0, 0x800006d0,
-	0x800006d0, 0x800006d0, 0x80000649, 0x80000649,
-	0x00000626, 0x80000627, 0x00000626, 0x80000627,
-	0x00000626, 0x800006d5, 0x00000626, 0x800006d5,
-	0x00000626, 0x80000648, 0x00000626, 0x80000648,
-	0x00000626, 0x800006c7, 0x00000626, 0x800006c7,
-	0x00000626, 0x800006c6, 0x00000626, 0x800006c6,
-	0x00000626, 0x800006c8, 0x00000626, 0x800006c8,
-	0x00000626, 0x800006d0, 0x00000626, 0x800006d0,
-	0x00000626, 0x800006d0, 0x00000626, 0x80000649,
-	0x00000626, 0x80000649, 0x00000626, 0x80000649,
-	0x800006cc, 0x800006cc, 0x800006cc, 0x800006cc,
-	0x00000626, 0x8000062c, 0x00000626, 0x8000062d,
-	0x00000626, 0x80000645, 0x00000626, 0x80000649,
-	0x00000626, 0x8000064a, 0x00000628, 0x8000062c,
-	0x00000628, 0x8000062d, 0x00000628, 0x8000062e,
-	0x00000628, 0x80000645, 0x00000628, 0x80000649,
-	0x00000628, 0x8000064a, 0x0000062a, 0x8000062c,
-	0x0000062a, 0x8000062d, 0x0000062a, 0x8000062e,
-	0x0000062a, 0x80000645, 0x0000062a, 0x80000649,
-	0x0000062a, 0x8000064a, 0x0000062b, 0x8000062c,
-	0x0000062b, 0x80000645, 0x0000062b, 0x80000649,
-	0x0000062b, 0x8000064a, 0x0000062c, 0x8000062d,
-	0x0000062c, 0x80000645, 0x0000062d, 0x8000062c,
-	0x0000062d, 0x80000645, 0x0000062e, 0x8000062c,
-	0x0000062e, 0x8000062d, 0x0000062e, 0x80000645,
-	0x00000633, 0x8000062c, 0x00000633, 0x8000062d,
-	0x00000633, 0x8000062e, 0x00000633, 0x80000645,
-	0x00000635, 0x8000062d, 0x00000635, 0x80000645,
-	0x00000636, 0x8000062c, 0x00000636, 0x8000062d,
-	0x00000636, 0x8000062e, 0x00000636, 0x80000645,
-	0x00000637, 0x8000062d, 0x00000637, 0x80000645,
-	0x00000638, 0x80000645, 0x00000639, 0x8000062c,
-	0x00000639, 0x80000645, 0x0000063a, 0x8000062c,
-	0x0000063a, 0x80000645, 0x00000641, 0x8000062c,
-	0x00000641, 0x8000062d, 0x00000641, 0x8000062e,
-	0x00000641, 0x80000645, 0x00000641, 0x80000649,
-	0x00000641, 0x8000064a, 0x00000642, 0x8000062d,
-	0x00000642, 0x80000645, 0x00000642, 0x80000649,
-	0x00000642, 0x8000064a, 0x00000643, 0x80000627,
-	0x00000643, 0x8000062c, 0x00000643, 0x8000062d,
-	0x00000643, 0x8000062e, 0x00000643, 0x80000644,
-	0x00000643, 0x80000645, 0x00000643, 0x80000649,
-	0x00000643, 0x8000064a, 0x00000644, 0x8000062c,
-	0x00000644, 0x8000062d, 0x00000644, 0x8000062e,
-	0x00000644, 0x80000645, 0x00000644, 0x80000649,
-	0x00000644, 0x8000064a, 0x00000645, 0x8000062c,
-	0x00000645, 0x8000062d, 0x00000645, 0x8000062e,
-	0x00000645, 0x80000645, 0x00000645, 0x80000649,
-	0x00000645, 0x8000064a, 0x00000646, 0x8000062c,
-	0x00000646, 0x8000062d, 0x00000646, 0x8000062e,
-	0x00000646, 0x80000645, 0x00000646, 0x80000649,
-	0x00000646, 0x8000064a, 0x00000647, 0x8000062c,
-	0x00000647, 0x80000645, 0x00000647, 0x80000649,
-	0x00000647, 0x8000064a, 0x0000064a, 0x8000062c,
-	0x0000064a, 0x8000062d, 0x0000064a, 0x8000062e,
-	0x0000064a, 0x80000645, 0x0000064a, 0x80000649,
-	0x0000064a, 0x8000064a, 0x00000630, 0x80000670,
-	0x00000631, 0x80000670, 0x00000649, 0x80000670,
-	0x00000020, 0x0000064c, 0x80000651, 0x00000020,
-	0x0000064d, 0x80000651, 0x00000020, 0x0000064e,
-	0x80000651, 0x00000020, 0x0000064f, 0x80000651,
-	0x00000020, 0x00000650, 0x80000651, 0x00000020,
-	0x00000651, 0x80000670, 0x00000626, 0x80000631,
-	0x00000626, 0x80000632, 0x00000626, 0x80000645,
-	0x00000626, 0x80000646, 0x00000626, 0x80000649,
-	0x00000626, 0x8000064a, 0x00000628, 0x80000631,
-	0x00000628, 0x80000632, 0x00000628, 0x80000645,
-	0x00000628, 0x80000646, 0x00000628, 0x80000649,
-	0x00000628, 0x8000064a, 0x0000062a, 0x80000631,
-	0x0000062a, 0x80000632, 0x0000062a, 0x80000645,
-	0x0000062a, 0x80000646, 0x0000062a, 0x80000649,
-	0x0000062a, 0x8000064a, 0x0000062b, 0x80000631,
-	0x0000062b, 0x80000632, 0x0000062b, 0x80000645,
-	0x0000062b, 0x80000646, 0x0000062b, 0x80000649,
-	0x0000062b, 0x8000064a, 0x00000641, 0x80000649,
-	0x00000641, 0x8000064a, 0x00000642, 0x80000649,
-	0x00000642, 0x8000064a, 0x00000643, 0x80000627,
-	0x00000643, 0x80000644, 0x00000643, 0x80000645,
-	0x00000643, 0x80000649, 0x00000643, 0x8000064a,
-	0x00000644, 0x80000645, 0x00000644, 0x80000649,
-	0x00000644, 0x8000064a, 0x00000645, 0x80000627,
-	0x00000645, 0x80000645, 0x00000646, 0x80000631,
-	0x00000646, 0x80000632, 0x00000646, 0x80000645,
-	0x00000646, 0x80000646, 0x00000646, 0x80000649,
-	0x00000646, 0x8000064a, 0x00000649, 0x80000670,
-	0x0000064a, 0x80000631, 0x0000064a, 0x80000632,
-	0x0000064a, 0x80000645, 0x0000064a, 0x80000646,
-	0x0000064a, 0x80000649, 0x0000064a, 0x8000064a,
-	0x00000626, 0x8000062c, 0x00000626, 0x8000062d,
-	0x00000626, 0x8000062e, 0x00000626, 0x80000645,
-	0x00000626, 0x80000647, 0x00000628, 0x8000062c,
-	0x00000628, 0x8000062d, 0x00000628, 0x8000062e,
-	0x00000628, 0x80000645, 0x00000628, 0x80000647,
-	0x0000062a, 0x8000062c, 0x0000062a, 0x8000062d,
-	0x0000062a, 0x8000062e, 0x0000062a, 0x80000645,
-	0x0000062a, 0x80000647, 0x0000062b, 0x80000645,
-	0x0000062c, 0x8000062d, 0x0000062c, 0x80000645,
-	0x0000062d, 0x8000062c, 0x0000062d, 0x80000645,
-	0x0000062e, 0x8000062c, 0x0000062e, 0x80000645,
-	0x00000633, 0x8000062c, 0x00000633, 0x8000062d,
-	0x00000633, 0x8000062e, 0x00000633, 0x80000645,
-	0x00000635, 0x8000062d, 0x00000635, 0x8000062e,
-	0x00000635, 0x80000645, 0x00000636, 0x8000062c,
-	0x00000636, 0x8000062d, 0x00000636, 0x8000062e,
-	0x00000636, 0x80000645, 0x00000637, 0x8000062d,
-	0x00000638, 0x80000645, 0x00000639, 0x8000062c,
-	0x00000639, 0x80000645, 0x0000063a, 0x8000062c,
-	0x0000063a, 0x80000645, 0x00000641, 0x8000062c,
-	0x00000641, 0x8000062d, 0x00000641, 0x8000062e,
-	0x00000641, 0x80000645, 0x00000642, 0x8000062d,
-	0x00000642, 0x80000645, 0x00000643, 0x8000062c,
-	0x00000643, 0x8000062d, 0x00000643, 0x8000062e,
-	0x00000643, 0x80000644, 0x00000643, 0x80000645,
-	0x00000644, 0x8000062c, 0x00000644, 0x8000062d,
-	0x00000644, 0x8000062e, 0x00000644, 0x80000645,
-	0x00000644, 0x80000647, 0x00000645, 0x8000062c,
-	0x00000645, 0x8000062d, 0x00000645, 0x8000062e,
-	0x00000645, 0x80000645, 0x00000646, 0x8000062c,
-	0x00000646, 0x8000062d, 0x00000646, 0x8000062e,
-	0x00000646, 0x80000645, 0x00000646, 0x80000647,
-	0x00000647, 0x8000062c, 0x00000647, 0x80000645,
-	0x00000647, 0x80000670, 0x0000064a, 0x8000062c,
-	0x0000064a, 0x8000062d, 0x0000064a, 0x8000062e,
-	0x0000064a, 0x80000645, 0x0000064a, 0x80000647,
-	0x00000626, 0x80000645, 0x00000626, 0x80000647,
-	0x00000628, 0x80000645, 0x00000628, 0x80000647,
-	0x0000062a, 0x80000645, 0x0000062a, 0x80000647,
-	0x0000062b, 0x80000645, 0x0000062b, 0x80000647,
-	0x00000633, 0x80000645, 0x00000633, 0x80000647,
-	0x00000634, 0x80000645, 0x00000634, 0x80000647,
-	0x00000643, 0x80000644, 0x00000643, 0x80000645,
-	0x00000644, 0x80000645, 0x00000646, 0x80000645,
-	0x00000646, 0x80000647, 0x0000064a, 0x80000645,
-	0x0000064a, 0x80000647, 0x00000640, 0x0000064e,
-	0x80000651, 0x00000640, 0x0000064f, 0x80000651,
-	0x00000640, 0x00000650, 0x80000651, 0x00000637,
-	0x80000649, 0x00000637, 0x8000064a, 0x00000639,
-	0x80000649, 0x00000639, 0x8000064a, 0x0000063a,
-	0x80000649, 0x0000063a, 0x8000064a, 0x00000633,
-	0x80000649, 0x00000633, 0x8000064a, 0x00000634,
-	0x80000649, 0x00000634, 0x8000064a, 0x0000062d,
-	0x80000649, 0x0000062d, 0x8000064a, 0x0000062c,
-	0x80000649, 0x0000062c, 0x8000064a, 0x0000062e,
-	0x80000649, 0x0000062e, 0x8000064a, 0x00000635,
-	0x80000649, 0x00000635, 0x8000064a, 0x00000636,
-	0x80000649, 0x00000636, 0x8000064a, 0x00000634,
-	0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
-	0x8000062e, 0x00000634, 0x80000645, 0x00000634,
-	0x80000631, 0x00000633, 0x80000631, 0x00000635,
-	0x80000631, 0x00000636, 0x80000631, 0x00000637,
-	0x80000649, 0x00000637, 0x8000064a, 0x00000639,
-	0x80000649, 0x00000639, 0x8000064a, 0x0000063a,
-	0x80000649, 0x0000063a, 0x8000064a, 0x00000633,
-	0x80000649, 0x00000633, 0x8000064a, 0x00000634,
-	0x80000649, 0x00000634, 0x8000064a, 0x0000062d,
-	0x80000649, 0x0000062d, 0x8000064a, 0x0000062c,
-	0x80000649, 0x0000062c, 0x8000064a, 0x0000062e,
-	0x80000649, 0x0000062e, 0x8000064a, 0x00000635,
-	0x80000649, 0x00000635, 0x8000064a, 0x00000636,
-	0x80000649, 0x00000636, 0x8000064a, 0x00000634,
-	0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
-	0x8000062e, 0x00000634, 0x80000645, 0x00000634,
-	0x80000631, 0x00000633, 0x80000631, 0x00000635,
-	0x80000631, 0x00000636, 0x80000631, 0x00000634,
-	0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
-	0x8000062e, 0x00000634, 0x80000645, 0x00000633,
-	0x80000647, 0x00000634, 0x80000647, 0x00000637,
-	0x80000645, 0x00000633, 0x8000062c, 0x00000633,
-	0x8000062d, 0x00000633, 0x8000062e, 0x00000634,
-	0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
-	0x8000062e, 0x00000637, 0x80000645, 0x00000638,
-	0x80000645, 0x00000627, 0x8000064b, 0x00000627,
-	0x8000064b, 0x0000062a, 0x0000062c, 0x80000645,
-	0x0000062a, 0x0000062d, 0x8000062c, 0x0000062a,
-	0x0000062d, 0x8000062c, 0x0000062a, 0x0000062d,
-	0x80000645, 0x0000062a, 0x0000062e, 0x80000645,
-	0x0000062a, 0x00000645, 0x8000062c, 0x0000062a,
-	0x00000645, 0x8000062d, 0x0000062a, 0x00000645,
-	0x8000062e, 0x0000062c, 0x00000645, 0x8000062d,
-	0x0000062c, 0x00000645, 0x8000062d, 0x0000062d,
-	0x00000645, 0x8000064a, 0x0000062d, 0x00000645,
-	0x80000649, 0x00000633, 0x0000062d, 0x8000062c,
-	0x00000633, 0x0000062c, 0x8000062d, 0x00000633,
-	0x0000062c, 0x80000649, 0x00000633, 0x00000645,
-	0x8000062d, 0x00000633, 0x00000645, 0x8000062d,
-	0x00000633, 0x00000645, 0x8000062c, 0x00000633,
-	0x00000645, 0x80000645, 0x00000633, 0x00000645,
-	0x80000645, 0x00000635, 0x0000062d, 0x8000062d,
-	0x00000635, 0x0000062d, 0x8000062d, 0x00000635,
-	0x00000645, 0x80000645, 0x00000634, 0x0000062d,
-	0x80000645, 0x00000634, 0x0000062d, 0x80000645,
-	0x00000634, 0x0000062c, 0x8000064a, 0x00000634,
-	0x00000645, 0x8000062e, 0x00000634, 0x00000645,
-	0x8000062e, 0x00000634, 0x00000645, 0x80000645,
-	0x00000634, 0x00000645, 0x80000645, 0x00000636,
-	0x0000062d, 0x80000649, 0x00000636, 0x0000062e,
-	0x80000645, 0x00000636, 0x0000062e, 0x80000645,
-	0x00000637, 0x00000645, 0x8000062d, 0x00000637,
-	0x00000645, 0x8000062d, 0x00000637, 0x00000645,
-	0x80000645, 0x00000637, 0x00000645, 0x8000064a,
-	0x00000639, 0x0000062c, 0x80000645, 0x00000639,
-	0x00000645, 0x80000645, 0x00000639, 0x00000645,
-	0x80000645, 0x00000639, 0x00000645, 0x80000649,
-	0x0000063a, 0x00000645, 0x80000645, 0x0000063a,
-	0x00000645, 0x8000064a, 0x0000063a, 0x00000645,
-	0x80000649, 0x00000641, 0x0000062e, 0x80000645,
-	0x00000641, 0x0000062e, 0x80000645, 0x00000642,
-	0x00000645, 0x8000062d, 0x00000642, 0x00000645,
-	0x80000645, 0x00000644, 0x0000062d, 0x80000645,
-	0x00000644, 0x0000062d, 0x8000064a, 0x00000644,
-	0x0000062d, 0x80000649, 0x00000644, 0x0000062c,
-	0x8000062c, 0x00000644, 0x0000062c, 0x8000062c,
-	0x00000644, 0x0000062e, 0x80000645, 0x00000644,
-	0x0000062e, 0x80000645, 0x00000644, 0x00000645,
-	0x8000062d, 0x00000644, 0x00000645, 0x8000062d,
-	0x00000645, 0x0000062d, 0x8000062c, 0x00000645,
-	0x0000062d, 0x80000645, 0x00000645, 0x0000062d,
-	0x8000064a, 0x00000645, 0x0000062c, 0x8000062d,
-	0x00000645, 0x0000062c, 0x80000645, 0x00000645,
-	0x0000062e, 0x8000062c, 0x00000645, 0x0000062e,
-	0x80000645, 0x00000645, 0x0000062c, 0x8000062e,
-	0x00000647, 0x00000645, 0x8000062c, 0x00000647,
-	0x00000645, 0x80000645, 0x00000646, 0x0000062d,
-	0x80000645, 0x00000646, 0x0000062d, 0x80000649,
-	0x00000646, 0x0000062c, 0x80000645, 0x00000646,
-	0x0000062c, 0x80000645, 0x00000646, 0x0000062c,
-	0x80000649, 0x00000646, 0x00000645, 0x8000064a,
-	0x00000646, 0x00000645, 0x80000649, 0x0000064a,
-	0x00000645, 0x80000645, 0x0000064a, 0x00000645,
-	0x80000645, 0x00000628, 0x0000062e, 0x8000064a,
-	0x0000062a, 0x0000062c, 0x8000064a, 0x0000062a,
-	0x0000062c, 0x80000649, 0x0000062a, 0x0000062e,
-	0x8000064a, 0x0000062a, 0x0000062e, 0x80000649,
-	0x0000062a, 0x00000645, 0x8000064a, 0x0000062a,
-	0x00000645, 0x80000649, 0x0000062c, 0x00000645,
-	0x8000064a, 0x0000062c, 0x0000062d, 0x80000649,
-	0x0000062c, 0x00000645, 0x80000649, 0x00000633,
-	0x0000062e, 0x80000649, 0x00000635, 0x0000062d,
-	0x8000064a, 0x00000634, 0x0000062d, 0x8000064a,
-	0x00000636, 0x0000062d, 0x8000064a, 0x00000644,
-	0x0000062c, 0x8000064a, 0x00000644, 0x00000645,
-	0x8000064a, 0x0000064a, 0x0000062d, 0x8000064a,
-	0x0000064a, 0x0000062c, 0x8000064a, 0x0000064a,
-	0x00000645, 0x8000064a, 0x00000645, 0x00000645,
-	0x8000064a, 0x00000642, 0x00000645, 0x8000064a,
-	0x00000646, 0x0000062d, 0x8000064a, 0x00000642,
-	0x00000645, 0x8000062d, 0x00000644, 0x0000062d,
-	0x80000645, 0x00000639, 0x00000645, 0x8000064a,
-	0x00000643, 0x00000645, 0x8000064a, 0x00000646,
-	0x0000062c, 0x8000062d, 0x00000645, 0x0000062e,
-	0x8000064a, 0x00000644, 0x0000062c, 0x80000645,
-	0x00000643, 0x00000645, 0x80000645, 0x00000644,
-	0x0000062c, 0x80000645, 0x00000646, 0x0000062c,
-	0x8000062d, 0x0000062c, 0x0000062d, 0x8000064a,
-	0x0000062d, 0x0000062c, 0x8000064a, 0x00000645,
-	0x0000062c, 0x8000064a, 0x00000641, 0x00000645,
-	0x8000064a, 0x00000628, 0x0000062d, 0x8000064a,
-	0x00000643, 0x00000645, 0x80000645, 0x00000639,
-	0x0000062c, 0x80000645, 0x00000635, 0x00000645,
-	0x80000645, 0x00000633, 0x0000062e, 0x8000064a,
-	0x00000646, 0x0000062c, 0x8000064a, 0x00000635,
-	0x00000644, 0x800006d2, 0x00000642, 0x00000644,
-	0x800006d2, 0x00000627, 0x00000644, 0x00000644,
-	0x80000647, 0x00000627, 0x00000643, 0x00000628,
-	0x80000631, 0x00000645, 0x0000062d, 0x00000645,
-	0x8000062f, 0x00000635, 0x00000644, 0x00000639,
-	0x80000645, 0x00000631, 0x00000633, 0x00000648,
-	0x80000644, 0x00000639, 0x00000644, 0x0000064a,
-	0x80000647, 0x00000648, 0x00000633, 0x00000644,
-	0x80000645, 0x00000635, 0x00000644, 0x80000649,
-	0x00000635, 0x00000644, 0x00000649, 0x00000020,
-	0x00000627, 0x00000644, 0x00000644, 0x00000647,
-	0x00000020, 0x00000639, 0x00000644, 0x0000064a,
-	0x00000647, 0x00000020, 0x00000648, 0x00000633,
-	0x00000644, 0x80000645, 0x0000062c, 0x00000644,
-	0x00000020, 0x0000062c, 0x00000644, 0x00000627,
-	0x00000644, 0x80000647, 0x00000631, 0x000006cc,
-	0x00000627, 0x80000644, 0x8000002c, 0x80003001,
-	0x80003002, 0x8000003a, 0x8000003b, 0x80000021,
-	0x8000003f, 0x80003016, 0x80003017, 0x80002026,
-	0x80002025, 0x80002014, 0x80002013, 0x8000005f,
-	0x8000005f, 0x80000028, 0x80000029, 0x8000007b,
-	0x8000007d, 0x80003014, 0x80003015, 0x80003010,
-	0x80003011, 0x8000300a, 0x8000300b, 0x80003008,
-	0x80003009, 0x8000300c, 0x8000300d, 0x8000300e,
-	0x8000300f, 0x8000005b, 0x8000005d, 0x8000203e,
-	0x8000203e, 0x8000203e, 0x8000203e, 0x8000005f,
-	0x8000005f, 0x8000005f, 0x8000002c, 0x80003001,
-	0x8000002e, 0x8000003b, 0x8000003a, 0x8000003f,
-	0x80000021, 0x80002014, 0x80000028, 0x80000029,
-	0x8000007b, 0x8000007d, 0x80003014, 0x80003015,
-	0x80000023, 0x80000026, 0x8000002a, 0x8000002b,
-	0x8000002d, 0x8000003c, 0x8000003e, 0x8000003d,
-	0x8000005c, 0x80000024, 0x80000025, 0x80000040,
-	0x00000020, 0x8000064b, 0x00000640, 0x8000064b,
-	0x00000020, 0x8000064c, 0x00000020, 0x8000064d,
-	0x00000020, 0x8000064e, 0x00000640, 0x8000064e,
-	0x00000020, 0x8000064f, 0x00000640, 0x8000064f,
-	0x00000020, 0x80000650, 0x00000640, 0x80000650,
-	0x00000020, 0x80000651, 0x00000640, 0x80000651,
-	0x00000020, 0x80000652, 0x00000640, 0x80000652,
-	0x80000621, 0x80000622, 0x80000622, 0x80000623,
-	0x80000623, 0x80000624, 0x80000624, 0x80000625,
-	0x80000625, 0x80000626, 0x80000626, 0x80000626,
-	0x80000626, 0x80000627, 0x80000627, 0x80000628,
-	0x80000628, 0x80000628, 0x80000628, 0x80000629,
-	0x80000629, 0x8000062a, 0x8000062a, 0x8000062a,
-	0x8000062a, 0x8000062b, 0x8000062b, 0x8000062b,
-	0x8000062b, 0x8000062c, 0x8000062c, 0x8000062c,
-	0x8000062c, 0x8000062d, 0x8000062d, 0x8000062d,
-	0x8000062d, 0x8000062e, 0x8000062e, 0x8000062e,
-	0x8000062e, 0x8000062f, 0x8000062f, 0x80000630,
-	0x80000630, 0x80000631, 0x80000631, 0x80000632,
-	0x80000632, 0x80000633, 0x80000633, 0x80000633,
-	0x80000633, 0x80000634, 0x80000634, 0x80000634,
-	0x80000634, 0x80000635, 0x80000635, 0x80000635,
-	0x80000635, 0x80000636, 0x80000636, 0x80000636,
-	0x80000636, 0x80000637, 0x80000637, 0x80000637,
-	0x80000637, 0x80000638, 0x80000638, 0x80000638,
-	0x80000638, 0x80000639, 0x80000639, 0x80000639,
-	0x80000639, 0x8000063a, 0x8000063a, 0x8000063a,
-	0x8000063a, 0x80000641, 0x80000641, 0x80000641,
-	0x80000641, 0x80000642, 0x80000642, 0x80000642,
-	0x80000642, 0x80000643, 0x80000643, 0x80000643,
-	0x80000643, 0x80000644, 0x80000644, 0x80000644,
-	0x80000644, 0x80000645, 0x80000645, 0x80000645,
-	0x80000645, 0x80000646, 0x80000646, 0x80000646,
-	0x80000646, 0x80000647, 0x80000647, 0x80000647,
-	0x80000647, 0x80000648, 0x80000648, 0x80000649,
-	0x80000649, 0x8000064a, 0x8000064a, 0x8000064a,
-	0x8000064a, 0x00000644, 0x80000622, 0x00000644,
-	0x80000622, 0x00000644, 0x80000623, 0x00000644,
-	0x80000623, 0x00000644, 0x80000625, 0x00000644,
-	0x80000625, 0x00000644, 0x80000627, 0x00000644,
-	0x80000627, 0x80000021, 0x80000022, 0x80000023,
-	0x80000024, 0x80000025, 0x80000026, 0x80000027,
-	0x80000028, 0x80000029, 0x8000002a, 0x8000002b,
-	0x8000002c, 0x8000002d, 0x8000002e, 0x8000002f,
-	0x80000030, 0x80000031, 0x80000032, 0x80000033,
-	0x80000034, 0x80000035, 0x80000036, 0x80000037,
-	0x80000038, 0x80000039, 0x8000003a, 0x8000003b,
-	0x8000003c, 0x8000003d, 0x8000003e, 0x8000003f,
-	0x80000040, 0x80000041, 0x80000042, 0x80000043,
-	0x80000044, 0x80000045, 0x80000046, 0x80000047,
-	0x80000048, 0x80000049, 0x8000004a, 0x8000004b,
-	0x8000004c, 0x8000004d, 0x8000004e, 0x8000004f,
-	0x80000050, 0x80000051, 0x80000052, 0x80000053,
-	0x80000054, 0x80000055, 0x80000056, 0x80000057,
-	0x80000058, 0x80000059, 0x8000005a, 0x8000005b,
-	0x8000005c, 0x8000005d, 0x8000005e, 0x8000005f,
-	0x80000060, 0x80000061, 0x80000062, 0x80000063,
-	0x80000064, 0x80000065, 0x80000066, 0x80000067,
-	0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
-	0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
-	0x80000070, 0x80000071, 0x80000072, 0x80000073,
-	0x80000074, 0x80000075, 0x80000076, 0x80000077,
-	0x80000078, 0x80000079, 0x8000007a, 0x8000007b,
-	0x8000007c, 0x8000007d, 0x8000007e, 0x80002985,
-	0x80002986, 0x80003002, 0x8000300c, 0x8000300d,
-	0x80003001, 0x800030fb, 0x800030f2, 0x800030a1,
-	0x800030a3, 0x800030a5, 0x800030a7, 0x800030a9,
-	0x800030e3, 0x800030e5, 0x800030e7, 0x800030c3,
-	0x800030fc, 0x800030a2, 0x800030a4, 0x800030a6,
-	0x800030a8, 0x800030aa, 0x800030ab, 0x800030ad,
-	0x800030af, 0x800030b1, 0x800030b3, 0x800030b5,
-	0x800030b7, 0x800030b9, 0x800030bb, 0x800030bd,
-	0x800030bf, 0x800030c1, 0x800030c4, 0x800030c6,
-	0x800030c8, 0x800030ca, 0x800030cb, 0x800030cc,
-	0x800030cd, 0x800030ce, 0x800030cf, 0x800030d2,
-	0x800030d5, 0x800030d8, 0x800030db, 0x800030de,
-	0x800030df, 0x800030e0, 0x800030e1, 0x800030e2,
-	0x800030e4, 0x800030e6, 0x800030e8, 0x800030e9,
-	0x800030ea, 0x800030eb, 0x800030ec, 0x800030ed,
-	0x800030ef, 0x800030f3, 0x80003099, 0x8000309a,
-	0x80003164, 0x80003131, 0x80003132, 0x80003133,
-	0x80003134, 0x80003135, 0x80003136, 0x80003137,
-	0x80003138, 0x80003139, 0x8000313a, 0x8000313b,
-	0x8000313c, 0x8000313d, 0x8000313e, 0x8000313f,
-	0x80003140, 0x80003141, 0x80003142, 0x80003143,
-	0x80003144, 0x80003145, 0x80003146, 0x80003147,
-	0x80003148, 0x80003149, 0x8000314a, 0x8000314b,
-	0x8000314c, 0x8000314d, 0x8000314e, 0x8000314f,
-	0x80003150, 0x80003151, 0x80003152, 0x80003153,
-	0x80003154, 0x80003155, 0x80003156, 0x80003157,
-	0x80003158, 0x80003159, 0x8000315a, 0x8000315b,
-	0x8000315c, 0x8000315d, 0x8000315e, 0x8000315f,
-	0x80003160, 0x80003161, 0x80003162, 0x80003163,
-	0x800000a2, 0x800000a3, 0x800000ac, 0x800000af,
-	0x800000a6, 0x800000a5, 0x800020a9, 0x80002502,
-	0x80002190, 0x80002191, 0x80002192, 0x80002193,
-	0x800025a0, 0x800025cb, 0x0001d157, 0x8001d165,
-	0x0001d158, 0x8001d165, 0x0001d15f, 0x8001d16e,
-	0x0001d15f, 0x8001d16f, 0x0001d15f, 0x8001d170,
-	0x0001d15f, 0x8001d171, 0x0001d15f, 0x8001d172,
-	0x0001d1b9, 0x8001d165, 0x0001d1ba, 0x8001d165,
-	0x0001d1bb, 0x8001d16e, 0x0001d1bc, 0x8001d16e,
-	0x0001d1bb, 0x8001d16f, 0x0001d1bc, 0x8001d16f,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000069, 0x8000006a, 0x8000006b,
-	0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
-	0x80000070, 0x80000071, 0x80000072, 0x80000073,
-	0x80000074, 0x80000075, 0x80000076, 0x80000077,
-	0x80000078, 0x80000079, 0x8000007a, 0x80000041,
-	0x80000042, 0x80000043, 0x80000044, 0x80000045,
-	0x80000046, 0x80000047, 0x80000048, 0x80000049,
-	0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
-	0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
-	0x80000052, 0x80000053, 0x80000054, 0x80000055,
-	0x80000056, 0x80000057, 0x80000058, 0x80000059,
-	0x8000005a, 0x80000061, 0x80000062, 0x80000063,
-	0x80000064, 0x80000065, 0x80000066, 0x80000067,
-	0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
-	0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
-	0x80000070, 0x80000071, 0x80000072, 0x80000073,
-	0x80000074, 0x80000075, 0x80000076, 0x80000077,
-	0x80000078, 0x80000079, 0x8000007a, 0x80000041,
-	0x80000043, 0x80000044, 0x80000047, 0x8000004a,
-	0x8000004b, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000053, 0x80000054, 0x80000055,
-	0x80000056, 0x80000057, 0x80000058, 0x80000059,
-	0x8000005a, 0x80000061, 0x80000062, 0x80000063,
-	0x80000064, 0x80000066, 0x80000068, 0x80000069,
-	0x8000006a, 0x8000006b, 0x8000006c, 0x8000006d,
-	0x8000006e, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000044, 0x80000045,
-	0x80000046, 0x80000047, 0x8000004a, 0x8000004b,
-	0x8000004c, 0x8000004d, 0x8000004e, 0x8000004f,
-	0x80000050, 0x80000051, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x80000061, 0x80000062, 0x80000063,
-	0x80000064, 0x80000065, 0x80000066, 0x80000067,
-	0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
-	0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
-	0x80000070, 0x80000071, 0x80000072, 0x80000073,
-	0x80000074, 0x80000075, 0x80000076, 0x80000077,
-	0x80000078, 0x80000079, 0x8000007a, 0x80000041,
-	0x80000042, 0x80000044, 0x80000045, 0x80000046,
-	0x80000047, 0x80000049, 0x8000004a, 0x8000004b,
-	0x8000004c, 0x8000004d, 0x8000004f, 0x80000053,
-	0x80000054, 0x80000055, 0x80000056, 0x80000057,
-	0x80000058, 0x80000059, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000041, 0x80000042, 0x80000043, 0x80000044,
-	0x80000045, 0x80000046, 0x80000047, 0x80000048,
-	0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
-	0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
-	0x80000051, 0x80000052, 0x80000053, 0x80000054,
-	0x80000055, 0x80000056, 0x80000057, 0x80000058,
-	0x80000059, 0x8000005a, 0x80000061, 0x80000062,
-	0x80000063, 0x80000064, 0x80000065, 0x80000066,
-	0x80000067, 0x80000068, 0x80000069, 0x8000006a,
-	0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
-	0x8000006f, 0x80000070, 0x80000071, 0x80000072,
-	0x80000073, 0x80000074, 0x80000075, 0x80000076,
-	0x80000077, 0x80000078, 0x80000079, 0x8000007a,
-	0x80000131, 0x80000237, 0x80000391, 0x80000392,
-	0x80000393, 0x80000394, 0x80000395, 0x80000396,
-	0x80000397, 0x80000398, 0x80000399, 0x8000039a,
-	0x8000039b, 0x8000039c, 0x8000039d, 0x8000039e,
-	0x8000039f, 0x800003a0, 0x800003a1, 0x800003f4,
-	0x800003a3, 0x800003a4, 0x800003a5, 0x800003a6,
-	0x800003a7, 0x800003a8, 0x800003a9, 0x80002207,
-	0x800003b1, 0x800003b2, 0x800003b3, 0x800003b4,
-	0x800003b5, 0x800003b6, 0x800003b7, 0x800003b8,
-	0x800003b9, 0x800003ba, 0x800003bb, 0x800003bc,
-	0x800003bd, 0x800003be, 0x800003bf, 0x800003c0,
-	0x800003c1, 0x800003c2, 0x800003c3, 0x800003c4,
-	0x800003c5, 0x800003c6, 0x800003c7, 0x800003c8,
-	0x800003c9, 0x80002202, 0x800003f5, 0x800003d1,
-	0x800003f0, 0x800003d5, 0x800003f1, 0x800003d6,
-	0x80000391, 0x80000392, 0x80000393, 0x80000394,
-	0x80000395, 0x80000396, 0x80000397, 0x80000398,
-	0x80000399, 0x8000039a, 0x8000039b, 0x8000039c,
-	0x8000039d, 0x8000039e, 0x8000039f, 0x800003a0,
-	0x800003a1, 0x800003f4, 0x800003a3, 0x800003a4,
-	0x800003a5, 0x800003a6, 0x800003a7, 0x800003a8,
-	0x800003a9, 0x80002207, 0x800003b1, 0x800003b2,
-	0x800003b3, 0x800003b4, 0x800003b5, 0x800003b6,
-	0x800003b7, 0x800003b8, 0x800003b9, 0x800003ba,
-	0x800003bb, 0x800003bc, 0x800003bd, 0x800003be,
-	0x800003bf, 0x800003c0, 0x800003c1, 0x800003c2,
-	0x800003c3, 0x800003c4, 0x800003c5, 0x800003c6,
-	0x800003c7, 0x800003c8, 0x800003c9, 0x80002202,
-	0x800003f5, 0x800003d1, 0x800003f0, 0x800003d5,
-	0x800003f1, 0x800003d6, 0x80000391, 0x80000392,
-	0x80000393, 0x80000394, 0x80000395, 0x80000396,
-	0x80000397, 0x80000398, 0x80000399, 0x8000039a,
-	0x8000039b, 0x8000039c, 0x8000039d, 0x8000039e,
-	0x8000039f, 0x800003a0, 0x800003a1, 0x800003f4,
-	0x800003a3, 0x800003a4, 0x800003a5, 0x800003a6,
-	0x800003a7, 0x800003a8, 0x800003a9, 0x80002207,
-	0x800003b1, 0x800003b2, 0x800003b3, 0x800003b4,
-	0x800003b5, 0x800003b6, 0x800003b7, 0x800003b8,
-	0x800003b9, 0x800003ba, 0x800003bb, 0x800003bc,
-	0x800003bd, 0x800003be, 0x800003bf, 0x800003c0,
-	0x800003c1, 0x800003c2, 0x800003c3, 0x800003c4,
-	0x800003c5, 0x800003c6, 0x800003c7, 0x800003c8,
-	0x800003c9, 0x80002202, 0x800003f5, 0x800003d1,
-	0x800003f0, 0x800003d5, 0x800003f1, 0x800003d6,
-	0x80000391, 0x80000392, 0x80000393, 0x80000394,
-	0x80000395, 0x80000396, 0x80000397, 0x80000398,
-	0x80000399, 0x8000039a, 0x8000039b, 0x8000039c,
-	0x8000039d, 0x8000039e, 0x8000039f, 0x800003a0,
-	0x800003a1, 0x800003f4, 0x800003a3, 0x800003a4,
-	0x800003a5, 0x800003a6, 0x800003a7, 0x800003a8,
-	0x800003a9, 0x80002207, 0x800003b1, 0x800003b2,
-	0x800003b3, 0x800003b4, 0x800003b5, 0x800003b6,
-	0x800003b7, 0x800003b8, 0x800003b9, 0x800003ba,
-	0x800003bb, 0x800003bc, 0x800003bd, 0x800003be,
-	0x800003bf, 0x800003c0, 0x800003c1, 0x800003c2,
-	0x800003c3, 0x800003c4, 0x800003c5, 0x800003c6,
-	0x800003c7, 0x800003c8, 0x800003c9, 0x80002202,
-	0x800003f5, 0x800003d1, 0x800003f0, 0x800003d5,
-	0x800003f1, 0x800003d6, 0x80000391, 0x80000392,
-	0x80000393, 0x80000394, 0x80000395, 0x80000396,
-	0x80000397, 0x80000398, 0x80000399, 0x8000039a,
-	0x8000039b, 0x8000039c, 0x8000039d, 0x8000039e,
-	0x8000039f, 0x800003a0, 0x800003a1, 0x800003f4,
-	0x800003a3, 0x800003a4, 0x800003a5, 0x800003a6,
-	0x800003a7, 0x800003a8, 0x800003a9, 0x80002207,
-	0x800003b1, 0x800003b2, 0x800003b3, 0x800003b4,
-	0x800003b5, 0x800003b6, 0x800003b7, 0x800003b8,
-	0x800003b9, 0x800003ba, 0x800003bb, 0x800003bc,
-	0x800003bd, 0x800003be, 0x800003bf, 0x800003c0,
-	0x800003c1, 0x800003c2, 0x800003c3, 0x800003c4,
-	0x800003c5, 0x800003c6, 0x800003c7, 0x800003c8,
-	0x800003c9, 0x80002202, 0x800003f5, 0x800003d1,
-	0x800003f0, 0x800003d5, 0x800003f1, 0x800003d6,
-	0x80000030, 0x80000031, 0x80000032, 0x80000033,
-	0x80000034, 0x80000035, 0x80000036, 0x80000037,
-	0x80000038, 0x80000039, 0x80000030, 0x80000031,
-	0x80000032, 0x80000033, 0x80000034, 0x80000035,
-	0x80000036, 0x80000037, 0x80000038, 0x80000039,
-	0x80000030, 0x80000031, 0x80000032, 0x80000033,
-	0x80000034, 0x80000035, 0x80000036, 0x80000037,
-	0x80000038, 0x80000039, 0x80000030, 0x80000031,
-	0x80000032, 0x80000033, 0x80000034, 0x80000035,
-	0x80000036, 0x80000037, 0x80000038, 0x80000039,
-	0x80000030, 0x80000031, 0x80000032, 0x80000033,
-	0x80000034, 0x80000035, 0x80000036, 0x80000037,
-	0x80000038, 0x80000039, 0x80004e3d, 0x80004e38,
-	0x80004e41, 0x80020122, 0x80004f60, 0x80004fae,
-	0x80004fbb, 0x80005002, 0x8000507a, 0x80005099,
-	0x800050e7, 0x800050cf, 0x8000349e, 0x8002063a,
-	0x8000514d, 0x80005154, 0x80005164, 0x80005177,
-	0x8002051c, 0x800034b9, 0x80005167, 0x8000518d,
-	0x8002054b, 0x80005197, 0x800051a4, 0x80004ecc,
-	0x800051ac, 0x800051b5, 0x800291df, 0x800051f5,
-	0x80005203, 0x800034df, 0x8000523b, 0x80005246,
-	0x80005272, 0x80005277, 0x80003515, 0x800052c7,
-	0x800052c9, 0x800052e4, 0x800052fa, 0x80005305,
-	0x80005306, 0x80005317, 0x80005349, 0x80005351,
-	0x8000535a, 0x80005373, 0x8000537d, 0x8000537f,
-	0x8000537f, 0x8000537f, 0x80020a2c, 0x80007070,
-	0x800053ca, 0x800053df, 0x80020b63, 0x800053eb,
-	0x800053f1, 0x80005406, 0x8000549e, 0x80005438,
-	0x80005448, 0x80005468, 0x800054a2, 0x800054f6,
-	0x80005510, 0x80005553, 0x80005563, 0x80005584,
-	0x80005584, 0x80005599, 0x800055ab, 0x800055b3,
-	0x800055c2, 0x80005716, 0x80005606, 0x80005717,
-	0x80005651, 0x80005674, 0x80005207, 0x800058ee,
-	0x800057ce, 0x800057f4, 0x8000580d, 0x8000578b,
-	0x80005832, 0x80005831, 0x800058ac, 0x800214e4,
-	0x800058f2, 0x800058f7, 0x80005906, 0x8000591a,
-	0x80005922, 0x80005962, 0x800216a8, 0x800216ea,
-	0x800059ec, 0x80005a1b, 0x80005a27, 0x800059d8,
-	0x80005a66, 0x800036ee, 0x800036fc, 0x80005b08,
-	0x80005b3e, 0x80005b3e, 0x800219c8, 0x80005bc3,
-	0x80005bd8, 0x80005be7, 0x80005bf3, 0x80021b18,
-	0x80005bff, 0x80005c06, 0x80005f53, 0x80005c22,
-	0x80003781, 0x80005c60, 0x80005c6e, 0x80005cc0,
-	0x80005c8d, 0x80021de4, 0x80005d43, 0x80021de6,
-	0x80005d6e, 0x80005d6b, 0x80005d7c, 0x80005de1,
-	0x80005de2, 0x8000382f, 0x80005dfd, 0x80005e28,
-	0x80005e3d, 0x80005e69, 0x80003862, 0x80022183,
-	0x8000387c, 0x80005eb0, 0x80005eb3, 0x80005eb6,
-	0x80005eca, 0x8002a392, 0x80005efe, 0x80022331,
-	0x80022331, 0x80008201, 0x80005f22, 0x80005f22,
-	0x800038c7, 0x800232b8, 0x800261da, 0x80005f62,
-	0x80005f6b, 0x800038e3, 0x80005f9a, 0x80005fcd,
-	0x80005fd7, 0x80005ff9, 0x80006081, 0x8000393a,
-	0x8000391c, 0x80006094, 0x800226d4, 0x800060c7,
-	0x80006148, 0x8000614c, 0x8000614e, 0x8000614c,
-	0x8000617a, 0x8000618e, 0x800061b2, 0x800061a4,
-	0x800061af, 0x800061de, 0x800061f2, 0x800061f6,
-	0x80006210, 0x8000621b, 0x8000625d, 0x800062b1,
-	0x800062d4, 0x80006350, 0x80022b0c, 0x8000633d,
-	0x800062fc, 0x80006368, 0x80006383, 0x800063e4,
-	0x80022bf1, 0x80006422, 0x800063c5, 0x800063a9,
-	0x80003a2e, 0x80006469, 0x8000647e, 0x8000649d,
-	0x80006477, 0x80003a6c, 0x8000654f, 0x8000656c,
-	0x8002300a, 0x800065e3, 0x800066f8, 0x80006649,
-	0x80003b19, 0x80006691, 0x80003b08, 0x80003ae4,
-	0x80005192, 0x80005195, 0x80006700, 0x8000669c,
-	0x800080ad, 0x800043d9, 0x80006717, 0x8000671b,
-	0x80006721, 0x8000675e, 0x80006753, 0x800233c3,
-	0x80003b49, 0x800067fa, 0x80006785, 0x80006852,
-	0x80006885, 0x8002346d, 0x8000688e, 0x8000681f,
-	0x80006914, 0x80003b9d, 0x80006942, 0x800069a3,
-	0x800069ea, 0x80006aa8, 0x800236a3, 0x80006adb,
-	0x80003c18, 0x80006b21, 0x800238a7, 0x80006b54,
-	0x80003c4e, 0x80006b72, 0x80006b9f, 0x80006bba,
-	0x80006bbb, 0x80023a8d, 0x80021d0b, 0x80023afa,
-	0x80006c4e, 0x80023cbc, 0x80006cbf, 0x80006ccd,
-	0x80006c67, 0x80006d16, 0x80006d3e, 0x80006d77,
-	0x80006d41, 0x80006d69, 0x80006d78, 0x80006d85,
-	0x80023d1e, 0x80006d34, 0x80006e2f, 0x80006e6e,
-	0x80003d33, 0x80006ecb, 0x80006ec7, 0x80023ed1,
-	0x80006df9, 0x80006f6e, 0x80023f5e, 0x80023f8e,
-	0x80006fc6, 0x80007039, 0x8000701e, 0x8000701b,
-	0x80003d96, 0x8000704a, 0x8000707d, 0x80007077,
-	0x800070ad, 0x80020525, 0x80007145, 0x80024263,
-	0x8000719c, 0x800243ab, 0x80007228, 0x80007235,
-	0x80007250, 0x80024608, 0x80007280, 0x80007295,
-	0x80024735, 0x80024814, 0x8000737a, 0x8000738b,
-	0x80003eac, 0x800073a5, 0x80003eb8, 0x80003eb8,
-	0x80007447, 0x8000745c, 0x80007471, 0x80007485,
-	0x800074ca, 0x80003f1b, 0x80007524, 0x80024c36,
-	0x8000753e, 0x80024c92, 0x80007570, 0x8002219f,
-	0x80007610, 0x80024fa1, 0x80024fb8, 0x80025044,
-	0x80003ffc, 0x80004008, 0x800076f4, 0x800250f3,
-	0x800250f2, 0x80025119, 0x80025133, 0x8000771e,
-	0x8000771f, 0x8000771f, 0x8000774a, 0x80004039,
-	0x8000778b, 0x80004046, 0x80004096, 0x8002541d,
-	0x8000784e, 0x8000788c, 0x800078cc, 0x800040e3,
-	0x80025626, 0x80007956, 0x8002569a, 0x800256c5,
-	0x8000798f, 0x800079eb, 0x8000412f, 0x80007a40,
-	0x80007a4a, 0x80007a4f, 0x8002597c, 0x80025aa7,
-	0x80025aa7, 0x80007aee, 0x80004202, 0x80025bab,
-	0x80007bc6, 0x80007bc9, 0x80004227, 0x80025c80,
-	0x80007cd2, 0x800042a0, 0x80007ce8, 0x80007ce3,
-	0x80007d00, 0x80025f86, 0x80007d63, 0x80004301,
-	0x80007dc7, 0x80007e02, 0x80007e45, 0x80004334,
-	0x80026228, 0x80026247, 0x80004359, 0x800262d9,
-	0x80007f7a, 0x8002633e, 0x80007f95, 0x80007ffa,
-	0x80008005, 0x800264da, 0x80026523, 0x80008060,
-	0x800265a8, 0x80008070, 0x8002335f, 0x800043d5,
-	0x800080b2, 0x80008103, 0x8000440b, 0x8000813e,
-	0x80005ab5, 0x800267a7, 0x800267b5, 0x80023393,
-	0x8002339c, 0x80008201, 0x80008204, 0x80008f9e,
-	0x8000446b, 0x80008291, 0x8000828b, 0x8000829d,
-	0x800052b3, 0x800082b1, 0x800082b3, 0x800082bd,
-	0x800082e6, 0x80026b3c, 0x800082e5, 0x8000831d,
-	0x80008363, 0x800083ad, 0x80008323, 0x800083bd,
-	0x800083e7, 0x80008457, 0x80008353, 0x800083ca,
-	0x800083cc, 0x800083dc, 0x80026c36, 0x80026d6b,
-	0x80026cd5, 0x8000452b, 0x800084f1, 0x800084f3,
-	0x80008516, 0x800273ca, 0x80008564, 0x80026f2c,
-	0x8000455d, 0x80004561, 0x80026fb1, 0x800270d2,
-	0x8000456b, 0x80008650, 0x8000865c, 0x80008667,
-	0x80008669, 0x800086a9, 0x80008688, 0x8000870e,
-	0x800086e2, 0x80008779, 0x80008728, 0x8000876b,
-	0x80008786, 0x800045d7, 0x800087e1, 0x80008801,
-	0x800045f9, 0x80008860, 0x80008863, 0x80027667,
-	0x800088d7, 0x800088de, 0x80004635, 0x800088fa,
-	0x800034bb, 0x800278ae, 0x80027966, 0x800046be,
-	0x800046c7, 0x80008aa0, 0x80008aed, 0x80008b8a,
-	0x80008c55, 0x80027ca8, 0x80008cab, 0x80008cc1,
-	0x80008d1b, 0x80008d77, 0x80027f2f, 0x80020804,
-	0x80008dcb, 0x80008dbc, 0x80008df0, 0x800208de,
-	0x80008ed4, 0x80008f38, 0x800285d2, 0x800285ed,
-	0x80009094, 0x800090f1, 0x80009111, 0x8002872e,
-	0x8000911b, 0x80009238, 0x800092d7, 0x800092d8,
-	0x8000927c, 0x800093f9, 0x80009415, 0x80028bfa,
-	0x8000958b, 0x80004995, 0x800095b7, 0x80028d77,
-	0x800049e6, 0x800096c3, 0x80005db2, 0x80009723,
-	0x80029145, 0x8002921a, 0x80004a6e, 0x80004a76,
-	0x800097e0, 0x8002940a, 0x80004ab2, 0x80029496,
-	0x8000980b, 0x8000980b, 0x80009829, 0x800295b6,
-	0x800098e2, 0x80004b33, 0x80009929, 0x800099a7,
-	0x800099c2, 0x800099fe, 0x80004bce, 0x80029b30,
-	0x80009b12, 0x80009c40, 0x80009cfd, 0x80004cce,
-	0x80004ced, 0x80009d67, 0x8002a0ce, 0x80004cf8,
-	0x8002a105, 0x8002a20e, 0x8002a291, 0x80009ebb,
-	0x80004d56, 0x80009ef9, 0x80009efe, 0x80009f05,
-	0x80009f0f, 0x80009f16, 0x80009f3b, 0x8002a600,
-};
-
--- a/intl/unicharutil/nsUnicodeNormalizer.cpp
+++ b/intl/unicharutil/nsUnicodeNormalizer.cpp
@@ -1,704 +1,91 @@
 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 
-/* This file is modified from JPNIC's mDNKit, it is under both MPL and
- * JPNIC's license.
- */
-
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * 			LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- *    modified or derived work) in source and/or binary forms is permitted
- *    under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- *    appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- *    this License Terms and Conditions, in the documentation and/or other
- *    materials provided with the distribution.  For the purposes of binary
- *    distribution the "Copyright Notice" refers to the following language:
- *    "Copyright (c) 2000-2002 Japan Network Information Center.  All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- *    derived from this Software without specific prior written approval of
- *    JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- *    "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 JPNIC 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 DAMAGES.
- */
-
-#include <string.h>
-
-#include "nsMemory.h"
 #include "nsUnicodeNormalizer.h"
-#include "nsString.h"
-#include "mozilla/BinarySearch.h"
+#include "ICUUtils.h"
+#include "unicode/unorm2.h"
+#include "unicode/utext.h"
 
 NS_IMPL_ISUPPORTS(nsUnicodeNormalizer, nsIUnicodeNormalizer)
 
-
-nsUnicodeNormalizer::nsUnicodeNormalizer()
-{
-}
-
-nsUnicodeNormalizer::~nsUnicodeNormalizer()
-{
-}
-
-
-
-#define END_BIT		0x80000000
-
-
-/*
- * Some constants for Hangul decomposition/composition.
- * These things were taken from unicode book.
- */
-#define SBase		0xac00
-#define LBase		0x1100
-#define VBase		0x1161
-#define TBase		0x11a7
-#define LCount		19
-#define VCount		21
-#define TCount		28
-#define SLast		(SBase + LCount * VCount * TCount)
-
-struct composition {
-	uint32_t c2;	/* 2nd character */
-	uint32_t comp;	/* composed character */
-};
-
-
-#include "normalization_data.h"
-
-/*
- * Macro for multi-level index table.
- */
-#define LOOKUPTBL(vprefix, mprefix, v) \
-	DMAP(vprefix)[\
-		IMAP(vprefix)[\
-			IMAP(vprefix)[IDX0(mprefix, v)] + IDX1(mprefix, v)\
-		]\
-	].tbl[IDX2(mprefix, v)]
-
-#define IDX0(mprefix, v) IDX_0(v, BITS1(mprefix), BITS2(mprefix))
-#define IDX1(mprefix, v) IDX_1(v, BITS1(mprefix), BITS2(mprefix))
-#define IDX2(mprefix, v) IDX_2(v, BITS1(mprefix), BITS2(mprefix))
-
-#define IDX_0(v, bits1, bits2)	((v) >> ((bits1) + (bits2)))
-#define IDX_1(v, bits1, bits2)	(((v) >> (bits2)) & ((1 << (bits1)) - 1))
-#define IDX_2(v, bits1, bits2)	((v) & ((1 << (bits2)) - 1))
-
-#define BITS1(mprefix)	mprefix ## _BITS_1
-#define BITS2(mprefix)	mprefix ## _BITS_2
-
-#define IMAP(vprefix)	vprefix ## _imap
-#define DMAP(vprefix)	vprefix ## _table
-#define SEQ(vprefix)	vprefix ## _seq
-
-static int32_t
-canonclass(uint32_t c) {
-	/* Look up canonicalclass table. */
-	return (LOOKUPTBL(canon_class, CANON_CLASS, c));
-}
-
-static int32_t
-decompose_char(uint32_t c, const uint32_t **seqp)
-{
-	/* Look up decomposition table. */
-	int32_t seqidx = LOOKUPTBL(decompose, DECOMP, c);
-	*seqp = SEQ(decompose) + (seqidx & ~DECOMP_COMPAT);
-	return (seqidx);
-}
-
-static int32_t
-compose_char(uint32_t c,
-				const struct composition **compp)
-{
-	/* Look up composition table. */
-	int32_t seqidx = LOOKUPTBL(compose, CANON_COMPOSE, c);
-	*compp = SEQ(compose) + (seqidx & 0xffff);
-	return (seqidx >> 16);
-}
-
 static nsresult
-mdn__unicode_decompose(int32_t compat, uint32_t *v, size_t vlen,
-		       uint32_t c, int32_t *decomp_lenp)
-{
-	uint32_t *vorg = v;
-	int32_t seqidx;
-	const uint32_t *seq;
-
-	//assert(v != nullptr && vlen >= 0 && decomp_lenp != nullptr);
-
-	/*
-	 * First, check for Hangul.
-	 */
-	if (SBase <= c && c < SLast) {
-		int32_t idx, t_offset, v_offset, l_offset;
-
-		idx = c - SBase;
-		t_offset = idx % TCount;
-		idx /= TCount;
-		v_offset = idx % VCount;
-		l_offset = idx / VCount;
-		if ((t_offset == 0 && vlen < 2) || (t_offset > 0 && vlen < 3))
-			return (NS_ERROR_UNORM_MOREOUTPUT);
-		*v++ = LBase + l_offset;
-		*v++ = VBase + v_offset;
-		if (t_offset > 0)
-			*v++ = TBase + t_offset;
-		*decomp_lenp = v - vorg;
-		return (NS_OK);
-	}
-
-	/*
-	 * Look up decomposition table.  If no decomposition is defined
-	 * or if it is a compatibility decomosition when canonical
-	 * decomposition requested, return 'NS_SUCCESS_UNORM_NOTFOUND'.
-	 */
-	seqidx = decompose_char(c, &seq);
-	if (seqidx == 0 || (compat == 0 && (seqidx & DECOMP_COMPAT) != 0))
-		return (NS_SUCCESS_UNORM_NOTFOUND);
-
-	/*
-	 * Copy the decomposed sequence.  The end of the sequence are
-	 * marked with END_BIT.
-	 */
-	do {
-		uint32_t c;
-		int32_t dlen;
-		nsresult r;
-
-		c = *seq & ~END_BIT;
-
-		/* Decompose recursively. */
-		r = mdn__unicode_decompose(compat, v, vlen, c, &dlen);
-		if (r == NS_OK) {
-			v += dlen;
-			vlen -= dlen;
-		} else if (r == NS_SUCCESS_UNORM_NOTFOUND) {
-			if (vlen < 1)
-				return (NS_ERROR_UNORM_MOREOUTPUT);
-			*v++ = c;
-			vlen--;
-		} else {
-			return (r);
-		}
-
-	} while ((*seq++ & END_BIT) == 0);
-
-	*decomp_lenp = v - vorg;
-
-	return (NS_OK);
-}
-
-static int32_t
-mdn__unicode_iscompositecandidate(uint32_t c)
-{
-	const struct composition *dummy;
-
-	/* Check for Hangul */
-	if ((LBase <= c && c < LBase + LCount) || (SBase <= c && c < SLast))
-		return (1);
-
-	/*
-	 * Look up composition table.  If there are no composition
-	 * that begins with the given character, it is not a
-	 * composition candidate.
-	 */
-	if (compose_char(c, &dummy) == 0)
-		return (0);
-	else
-		return (1);
-}
-
-namespace {
-
-struct SequenceAdaptor
-{
-	const composition* const mSequence;
-	explicit SequenceAdaptor(const composition* aSequence) : mSequence(aSequence) {}
-	uint32_t operator[](size_t aIdx) const {
-		return mSequence[aIdx].c2;
-	}
-};
-
-} // namespace
-
-static nsresult
-mdn__unicode_compose(uint32_t c1, uint32_t c2, uint32_t *compp)
-{
-	int32_t n;
-	const struct composition *cseq;
-
-	//assert(compp != nullptr);
-
-	/*
-	 * Check for Hangul.
-	 */
-	if (LBase <= c1 && c1 < LBase + LCount &&
-	    VBase <= c2 && c2 < VBase + VCount) {
-		/*
-		 * Hangul L and V.
-		 */
-		*compp = SBase +
-			((c1 - LBase) * VCount + (c2 - VBase)) * TCount;
-		return (NS_OK);
-	} else if (SBase <= c1 && c1 < SLast &&
-		   TBase <= c2 && c2 < TBase + TCount &&
-		   (c1 - SBase) % TCount == 0) {
-		/*
-		 * Hangul LV and T.
-		 */
-		*compp = c1 + (c2 - TBase);
-		return (NS_OK);
-	}
-
-	/*
-	 * Look up composition table.  If the result is 0, no composition
-	 * is defined.  Otherwise, upper 16bits of the result contains
-	 * the number of composition that begins with 'c1', and the lower
-	 * 16bits is the offset in 'compose_seq'.
-	 */
-	if ((n = compose_char(c1, &cseq)) == 0)
-		return (NS_SUCCESS_UNORM_NOTFOUND);
-
-	/*
-	 * The composite sequences are sorted by the 2nd character 'c2'.
-	 * So we can use binary search.
-	 */
-	size_t idx;
-	if (mozilla::BinarySearch(SequenceAdaptor(cseq), 0, n, c2, &idx)) {
-		*compp = cseq[idx].comp;
-		return (NS_OK);
-	}
-
-	return (NS_SUCCESS_UNORM_NOTFOUND);
-}
-
-
-#define WORKBUF_SIZE		128
-#define WORKBUF_SIZE_MAX	10000
-
-typedef struct {
-	int32_t cur;		/* pointing now processing character */
-	int32_t last;		/* pointing just after the last character */
-	int32_t size;		/* size of UCS and CLASS array */
-	uint32_t *ucs;	/* UCS-4 characters */
-	int32_t *cclass;		/* and their canonical classes */
-	uint32_t ucs_buf[WORKBUF_SIZE];	/* local buffer */
-	int32_t class_buf[WORKBUF_SIZE];		/* ditto */
-} workbuf_t;
-
-static nsresult	decompose(workbuf_t *wb, uint32_t c, int32_t compat);
-static void		get_class(workbuf_t *wb);
-static void		reorder(workbuf_t *wb);
-static void		compose(workbuf_t *wb);
-static nsresult flush_before_cur(workbuf_t *wb, nsAString& aToStr);
-static void		workbuf_init(workbuf_t *wb);
-static void		workbuf_free(workbuf_t *wb);
-static nsresult	workbuf_extend(workbuf_t *wb);
-static nsresult	workbuf_append(workbuf_t *wb, uint32_t c);
-static void		workbuf_shift(workbuf_t *wb, int32_t shift);
-static void		workbuf_removevoid(workbuf_t *wb);
-
-
-static nsresult
-mdn_normalize(bool do_composition, bool compat,
-	  const nsAString& aSrcStr, nsAString& aToStr)
+DoNormalization(const UNormalizer2* aNorm, const nsAString& aSrc,
+                nsAString& aDest)
 {
-	workbuf_t wb;
-	nsresult r = NS_OK;
-	/*
-	 * Initialize working buffer.
-	 */
-	workbuf_init(&wb);
-
-	nsAString::const_iterator start, end;
-	aSrcStr.BeginReading(start);
-	aSrcStr.EndReading(end);
-
-	while (start != end) {
-		uint32_t c;
-		char16_t curChar;
-
-		//assert(wb.cur == wb.last);
-
-		/*
-		 * Get one character from 'from'.
-		 */
-		curChar= *start++;
-
-		if (NS_IS_HIGH_SURROGATE(curChar) && start != end && NS_IS_LOW_SURROGATE(*(start)) ) {
-			c = SURROGATE_TO_UCS4(curChar, *start);
-			++start;
-		} else {
-			c = curChar;
-		}
-
-		/*
-		 * Decompose it.
-		 */
-		if ((r = decompose(&wb, c, compat)) != NS_OK)
-			break;
-
-		/*
-		 * Get canonical class.
-		 */
-		get_class(&wb);
-
-		/*
-		 * Reorder & compose.
-		 */
-		for (; wb.cur < wb.last; wb.cur++) {
-			if (wb.cur == 0) {
-				continue;
-			} else if (wb.cclass[wb.cur] > 0) {
-				/*
-				 * This is not a starter. Try reordering.
-				 * Note that characters up to it are
-				 * already in canonical order.
-				 */
-				reorder(&wb);
-				continue;
-			}
-
-			/*
-			 * This is a starter character, and there are
-			 * some characters before it.  Those characters
-			 * have been reordered properly, and
-			 * ready for composition.
-			 */
-			if (do_composition && wb.cclass[0] == 0)
-				compose(&wb);
-
-			/*
-			 * If CUR points to a starter character,
-			 * then process of characters before CUR are
-			 * already finished, because any further
-			 * reordering/composition for them are blocked
-			 * by the starter CUR points.
-			 */
-			if (wb.cur > 0 && wb.cclass[wb.cur] == 0) {
-				/* Flush everything before CUR. */
-				r = flush_before_cur(&wb, aToStr);
-				if (r != NS_OK)
-					break;
-			}
-		}
-	}
-
-	if (r == NS_OK) {
-		if (do_composition && wb.cur > 0 && wb.cclass[0] == 0) {
-			/*
-			 * There is some characters left in WB.
-			 * They are ordered, but not composed yet.
-			 * Now CUR points just after the last character in WB,
-			 * and since compose() tries to compose characters
-			 * between top and CUR inclusive, we must make CUR
-			 * one character back during compose().
-			 */
-			wb.cur--;
-			compose(&wb);
-			wb.cur++;
-		}
-		/*
-		 * Call this even when WB.CUR == 0, to make TO
-		 * NUL-terminated.
-		 */
-		r = flush_before_cur(&wb, aToStr);
-	}
-
-	workbuf_free(&wb);
-
-	return (r);
-}
-
-static nsresult
-decompose(workbuf_t *wb, uint32_t c, int32_t compat) {
-	nsresult r;
-	int32_t dec_len;
-
-again:
-	r = mdn__unicode_decompose(compat, wb->ucs + wb->last,
-				   wb->size - wb->last, c, &dec_len);
-	switch (r) {
-	case NS_OK:
-		wb->last += dec_len;
-		return (NS_OK);
-	case NS_SUCCESS_UNORM_NOTFOUND:
-		return (workbuf_append(wb, c));
-	case NS_ERROR_UNORM_MOREOUTPUT:
-		if ((r = workbuf_extend(wb)) != NS_OK)
-			return (r);
-		if (wb->size > WORKBUF_SIZE_MAX) {
-			// "mdn__unormalize_form*: " "working buffer too large\n"
-			return (NS_ERROR_FAILURE);
-		}
-		goto again;
-	default:
-		return (r);
-	}
-	/* NOTREACHED */
-}
-
-static void
-get_class(workbuf_t *wb) {
-	int32_t i;
-
-	for (i = wb->cur; i < wb->last; i++)
-		wb->cclass[i] = canonclass(wb->ucs[i]);
-}
-
-static void
-reorder(workbuf_t *wb) {
-	uint32_t c;
-	int32_t i;
-	int32_t cclass;
-
-	//assert(wb != nullptr);
-
-	i = wb->cur;
-	c = wb->ucs[i];
-	cclass = wb->cclass[i];
-
-	while (i > 0 && wb->cclass[i - 1] > cclass) {
-		wb->ucs[i] = wb->ucs[i - 1];
-		wb->cclass[i] =wb->cclass[i - 1];
-		i--;
-		wb->ucs[i] = c;
-		wb->cclass[i] = cclass;
-	}
-}
-
-static void
-compose(workbuf_t *wb) {
-	int32_t cur;
-	uint32_t *ucs;
-	int32_t *cclass;
-	int32_t last_class;
-	int32_t nvoids;
-	int32_t i;
-
-	//assert(wb != nullptr && wb->cclass[0] == 0);
-
-	cur = wb->cur;
-	ucs = wb->ucs;
-	cclass = wb->cclass;
-
-	/*
-	 * If there are no decomposition sequence that begins with
-	 * the top character, composition is impossible.
-	 */
-	if (!mdn__unicode_iscompositecandidate(ucs[0]))
-		return;
-
-	last_class = 0;
-	nvoids = 0;
-	for (i = 1; i <= cur; i++) {
-		uint32_t c;
-		int32_t cl = cclass[i];
-
-		if ((last_class < cl || cl == 0) &&
-		    mdn__unicode_compose(ucs[0], ucs[i],
-					 &c) == NS_OK) {
-			/*
-			 * Replace the top character with the composed one.
-			 */
-			ucs[0] = c;
-			cclass[0] = canonclass(c);
-
-			cclass[i] = -1;	/* void this character */
-			nvoids++;
-		} else {
-			last_class = cl;
-		}
-	}
-
-	/* Purge void characters, if any. */
-	if (nvoids > 0)
-		workbuf_removevoid(wb);
-}
-
-static nsresult
-flush_before_cur(workbuf_t *wb, nsAString& aToStr)
-{
-	int32_t i;
-
-	for (i = 0; i < wb->cur; i++) {
-		if (!IS_IN_BMP(wb->ucs[i])) {
-			aToStr.Append((char16_t)H_SURROGATE(wb->ucs[i]));
-			aToStr.Append((char16_t)L_SURROGATE(wb->ucs[i]));
-		} else {
-			aToStr.Append((char16_t)(wb->ucs[i]));
-		}
-	}
-
-	workbuf_shift(wb, wb->cur);
-
-	return (NS_OK);
-}
-
-static void
-workbuf_init(workbuf_t *wb) {
-	wb->cur = 0;
-	wb->last = 0;
-	wb->size = WORKBUF_SIZE;
-	wb->ucs = wb->ucs_buf;
-	wb->cclass = wb->class_buf;
-}
-
-static void
-workbuf_free(workbuf_t *wb) {
-	if (wb->ucs != wb->ucs_buf) {
-		free(wb->ucs);
-		free(wb->cclass);
-	}
-}
-
-static nsresult
-workbuf_extend(workbuf_t *wb) {
-	int32_t newsize = wb->size * 3;
-
-	if (wb->ucs == wb->ucs_buf) {
-		wb->ucs = (uint32_t*)moz_xmalloc(sizeof(wb->ucs[0]) * newsize);
-		if (!wb->ucs)
-			return NS_ERROR_OUT_OF_MEMORY;
-		wb->cclass = (int32_t*)moz_xmalloc(sizeof(wb->cclass[0]) * newsize);
-		if (!wb->cclass) {
-			free(wb->ucs);
-			wb->ucs = nullptr;
-			return NS_ERROR_OUT_OF_MEMORY;
-		}
-	} else {
-		void* buf = moz_xrealloc(wb->ucs, sizeof(wb->ucs[0]) * newsize);
-		if (!buf)
-			return NS_ERROR_OUT_OF_MEMORY;
-		wb->ucs = (uint32_t*)buf;
-		buf = moz_xrealloc(wb->cclass, sizeof(wb->cclass[0]) * newsize);
-		if (!buf)
-			return NS_ERROR_OUT_OF_MEMORY;
-		wb->cclass = (int32_t*)buf;
-	}
-	return (NS_OK);
-}
-
-static nsresult
-workbuf_append(workbuf_t *wb, uint32_t c) {
-	nsresult r;
-
-	if (wb->last >= wb->size && (r = workbuf_extend(wb)) != NS_OK)
-		return (r);
-	wb->ucs[wb->last++] = c;
-	return (NS_OK);
-}
-
-static void
-workbuf_shift(workbuf_t *wb, int32_t shift) {
-	int32_t nmove;
-
-	//assert(wb != nullptr && wb->cur >= shift);
-
-	nmove = wb->last - shift;
-	memmove(&wb->ucs[0], &wb->ucs[shift],
-		      nmove * sizeof(wb->ucs[0]));
-	memmove(&wb->cclass[0], &wb->cclass[shift],
-		      nmove * sizeof(wb->cclass[0]));
-	wb->cur -= shift;
-	wb->last -= shift;
-}
-
-static void
-workbuf_removevoid(workbuf_t *wb) {
-	int32_t i, j;
-	int32_t last = wb->last;
-
-	for (i = j = 0; i < last; i++) {
-		if (wb->cclass[i] >= 0) {
-			if (j < i) {
-				wb->ucs[j] = wb->ucs[i];
-				wb->cclass[j] = wb->cclass[i];
-			}
-			j++;
-		}
-	}
-	wb->cur -= last - j;
-	wb->last = j;
+  UErrorCode errorCode = U_ZERO_ERROR;
+  const int32_t length = aSrc.Length();
+  const UChar* src = reinterpret_cast<const UChar*>(aSrc.BeginReading());
+  // Initial guess for a capacity that is likely to be enough for most cases.
+  int32_t capacity = length + (length >> 8) + 8;
+  while (true) {
+    aDest.SetLength(capacity);
+    UChar* dest = reinterpret_cast<UChar*>(aDest.BeginWriting());
+    int32_t len = unorm2_normalize(aNorm, src, aSrc.Length(), dest, capacity,
+                                   &errorCode);
+    if (U_SUCCESS(errorCode)) {
+      aDest.SetLength(len);
+      break;
+    }
+    if (errorCode != U_BUFFER_OVERFLOW_ERROR) {
+      // Some other error that we don't handle
+      break;
+    }
+    // Buffer wasn't big enough; adjust to the reported size and try again.
+    capacity = len;
+    errorCode = U_ZERO_ERROR;
+  }
+  return ICUUtils::UErrorToNsResult(errorCode);
 }
 
 nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFD( const nsAString& aSrc, nsAString& aDest)
-{
-  return mdn_normalize(false, false, aSrc, aDest);
-}
-
-nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFC( const nsAString& aSrc, nsAString& aDest)
+nsUnicodeNormalizer::NormalizeUnicodeNFD(const nsAString& aSrc,
+                                         nsAString& aDest)
 {
-  return mdn_normalize(true, false, aSrc, aDest);
-}
-
-nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFKD( const nsAString& aSrc, nsAString& aDest)
-{
-  return mdn_normalize(false, true, aSrc, aDest);
+  // The unorm2_getNF*Instance functions return static singletons that should
+  // not be deleted, so we just get them once on first use.
+  static UErrorCode errorCode = U_ZERO_ERROR;
+  static const UNormalizer2* norm = unorm2_getNFDInstance(&errorCode);
+  if (U_SUCCESS(errorCode)) {
+    return DoNormalization(norm, aSrc, aDest);
+  }
+  return ICUUtils::UErrorToNsResult(errorCode);
 }
 
 nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFKC( const nsAString& aSrc, nsAString& aDest)
+nsUnicodeNormalizer::NormalizeUnicodeNFC(const nsAString& aSrc,
+                                         nsAString& aDest)
 {
-  return mdn_normalize(true, true, aSrc, aDest);
-}
-
-bool
-nsUnicodeNormalizer::Compose(uint32_t a, uint32_t b, uint32_t *ab)
-{
-  return mdn__unicode_compose(a, b, ab) == NS_OK;
+  static UErrorCode errorCode = U_ZERO_ERROR;
+  static const UNormalizer2* norm = unorm2_getNFCInstance(&errorCode);
+  if (U_SUCCESS(errorCode)) {
+    return DoNormalization(norm, aSrc, aDest);
+  }
+  return ICUUtils::UErrorToNsResult(errorCode);
 }
 
-bool
-nsUnicodeNormalizer::DecomposeNonRecursively(uint32_t c, uint32_t *c1, uint32_t *c2)
+nsresult
+nsUnicodeNormalizer::NormalizeUnicodeNFKD(const nsAString& aSrc,
+                                          nsAString& aDest)
 {
-  // We can't use mdn__unicode_decompose here, because that does a recursive
-  // decomposition that may yield more than two characters, but the harfbuzz
-  // callback wants just a single-step decomp that is guaranteed to produce
-  // no more than two characters. So we do a low-level lookup in the table
-  // of decomp sequences.
-  const uint32_t *seq;
-  uint32_t seqidx = decompose_char(c, &seq);
-  if (seqidx == 0 || ((seqidx & DECOMP_COMPAT) != 0)) {
-    return false;
+  static UErrorCode errorCode = U_ZERO_ERROR;
+  static const UNormalizer2* norm = unorm2_getNFKDInstance(&errorCode);
+  if (U_SUCCESS(errorCode)) {
+    return DoNormalization(norm, aSrc, aDest);
   }
-  *c1 = *seq & ~END_BIT;
-  if (*seq & END_BIT) {
-    *c2 = 0;
-  } else {
-    *c2 = *++seq & ~END_BIT;
+  return ICUUtils::UErrorToNsResult(errorCode);
+}
+
+nsresult
+nsUnicodeNormalizer::NormalizeUnicodeNFKC(const nsAString& aSrc,
+                                          nsAString& aDest)
+{
+  static UErrorCode errorCode = U_ZERO_ERROR;
+  static const UNormalizer2* norm = unorm2_getNFKCInstance(&errorCode);
+  if (U_SUCCESS(errorCode)) {
+    return DoNormalization(norm, aSrc, aDest);
   }
-  return true;
+  return ICUUtils::UErrorToNsResult(errorCode);
 }
--- a/intl/unicharutil/nsUnicodeNormalizer.h
+++ b/intl/unicharutil/nsUnicodeNormalizer.h
@@ -11,30 +11,23 @@
 
 #include "nsIUnicodeNormalizer.h"
 
 nsresult NS_NewUnicodeNormalizer(nsISupports** oResult);
 
 
 class nsUnicodeNormalizer : public nsIUnicodeNormalizer {
 public:
-   nsUnicodeNormalizer();
+   nsUnicodeNormalizer() { }
 
    NS_DECL_ISUPPORTS
 
    NS_IMETHOD NormalizeUnicodeNFD( const nsAString& aSrc, nsAString& aDest) override;
    NS_IMETHOD NormalizeUnicodeNFC( const nsAString& aSrc, nsAString& aDest) override;
    NS_IMETHOD NormalizeUnicodeNFKD( const nsAString& aSrc, nsAString& aDest) override;
    NS_IMETHOD NormalizeUnicodeNFKC( const nsAString& aSrc, nsAString& aDest) override;
 
-#if !ENABLE_INTL_API
-   // Low-level access to the composition data needed for HarfBuzz callbacks;
-   // only required when ICU is not available in the build.
-   static bool Compose(uint32_t a, uint32_t b, uint32_t *ab);
-   static bool DecomposeNonRecursively(uint32_t comp, uint32_t *c1, uint32_t *c2);
-#endif
-
 private:
-   virtual ~nsUnicodeNormalizer();
+   virtual ~nsUnicodeNormalizer() { }
 };
 
 #endif //nsUnicodeNormalizer_h__
 
deleted file mode 100644
--- a/intl/unicharutil/nsUnicodeNormalizer_ICU.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsUnicodeNormalizer.h"
-#include "ICUUtils.h"
-#include "unicode/unorm2.h"
-#include "unicode/utext.h"
-
-NS_IMPL_ISUPPORTS(nsUnicodeNormalizer, nsIUnicodeNormalizer)
-
-nsUnicodeNormalizer::nsUnicodeNormalizer()
-{
-}
-
-nsUnicodeNormalizer::~nsUnicodeNormalizer()
-{
-}
-
-static nsresult
-DoNormalization(const UNormalizer2* aNorm, const nsAString& aSrc,
-                nsAString& aDest)
-{
-  UErrorCode errorCode = U_ZERO_ERROR;
-  const int32_t length = aSrc.Length();
-  const UChar* src = reinterpret_cast<const UChar*>(aSrc.BeginReading());
-  // Initial guess for a capacity that is likely to be enough for most cases.
-  int32_t capacity = length + (length >> 8) + 8;
-  while (true) {
-    aDest.SetLength(capacity);
-    UChar* dest = reinterpret_cast<UChar*>(aDest.BeginWriting());
-    int32_t len = unorm2_normalize(aNorm, src, aSrc.Length(), dest, capacity,
-                                   &errorCode);
-    if (U_SUCCESS(errorCode)) {
-      aDest.SetLength(len);
-      break;
-    }
-    if (errorCode != U_BUFFER_OVERFLOW_ERROR) {
-      // Some other error that we don't handle
-      break;
-    }
-    // Buffer wasn't big enough; adjust to the reported size and try again.
-    capacity = len;
-    errorCode = U_ZERO_ERROR;
-  }
-  return ICUUtils::UErrorToNsResult(errorCode);
-}
-
-nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFD(const nsAString& aSrc,
-                                         nsAString& aDest)
-{
-  // The unorm2_getNF*Instance functions return static singletons that should
-  // not be deleted, so we just get them once on first use.
-  static UErrorCode errorCode = U_ZERO_ERROR;
-  static const UNormalizer2* norm = unorm2_getNFDInstance(&errorCode);
-  if (U_SUCCESS(errorCode)) {
-    return DoNormalization(norm, aSrc, aDest);
-  }
-  return ICUUtils::UErrorToNsResult(errorCode);
-}
-
-nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFC(const nsAString& aSrc,
-                                         nsAString& aDest)
-{
-  static UErrorCode errorCode = U_ZERO_ERROR;
-  static const UNormalizer2* norm = unorm2_getNFCInstance(&errorCode);
-  if (U_SUCCESS(errorCode)) {
-    return DoNormalization(norm, aSrc, aDest);
-  }
-  return ICUUtils::UErrorToNsResult(errorCode);
-}
-
-nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFKD(const nsAString& aSrc,
-                                          nsAString& aDest)
-{
-  static UErrorCode errorCode = U_ZERO_ERROR;
-  static const UNormalizer2* norm = unorm2_getNFKDInstance(&errorCode);
-  if (U_SUCCESS(errorCode)) {
-    return DoNormalization(norm, aSrc, aDest);
-  }
-  return ICUUtils::UErrorToNsResult(errorCode);
-}
-
-nsresult
-nsUnicodeNormalizer::NormalizeUnicodeNFKC(const nsAString& aSrc,
-                                          nsAString& aDest)
-{
-  static UErrorCode errorCode = U_ZERO_ERROR;
-  static const UNormalizer2* norm = unorm2_getNFKCInstance(&errorCode);
-  if (U_SUCCESS(errorCode)) {
-    return DoNormalization(norm, aSrc, aDest);
-  }
-  return ICUUtils::UErrorToNsResult(errorCode);
-}
deleted file mode 100644
--- a/intl/unicharutil/tools/MUTTUCData.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-#
-# $Id: MUTTUCData.txt,v 1.1 1999/01/08 00:19:19 ftang%netscape.com Exp $
-#
-# Copyright 1996, 1997, 1998 Computing Research Labs,
-# New Mexico State University
-#
-# 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, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# 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.  IN NO EVENT SHALL
-# THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-# THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-#
-# Implementation specific character properties.
-#
-#
-# Space, other.
-#
-0009;;Ss;;;;;;;;;;;;
-000A;;Ss;;;;;;;;;;;;
-000B;;Ss;;;;;;;;;;;;
-000C;;Ss;;;;;;;;;;;;
-000D;;Ss;;;;;;;;;;;;
-#
-# Non-breaking.
-#
-00A0;;Nb;;;;;;;;;;;;
-2007;;Nb;;;;;;;;;;;;
-2011;;Nb;;;;;;;;;;;;
-FEFF;;Nb;;;;;;;;;;;;
-#
-# Symmetric.
-#
-0028;;Sy;;;;;;;;;;;;
-0029;;Sy;;;;;;;;;;;;
-005B;;Sy;;;;;;;;;;;;
-005D;;Sy;;;;;;;;;;;;
-007B;;Sy;;;;;;;;;;;;
-007D;;Sy;;;;;;;;;;;;
-00AB;;Sy;;;;;;;;;;;;
-00BB;;Sy;;;;;;;;;;;;
-0F3A;;Sy;;;;;;;;;;;;
-0F3B;;Sy;;;;;;;;;;;;
-0F3C;;Sy;;;;;;;;;;;;
-0F3D;;Sy;;;;;;;;;;;;
-0F3E;;Sy;;;;;;;;;;;;
-0F3F;;Sy;;;;;;;;;;;;
-2018;;Sy;;;;;;;;;;;;
-2019;;Sy;;;;;;;;;;;;
-201A;;Sy;;;;;;;;;;;;
-201B;;Sy;;;;;;;;;;;;
-201C;;Sy;;;;;;;;;;;;
-201D;;Sy;;;;;;;;;;;;
-201E;;Sy;;;;;;;;;;;;
-201F;;Sy;;;;;;;;;;;;
-2039;;Sy;;;;;;;;;;;;
-203A;;Sy;;;;;;;;;;;;
-2045;;Sy;;;;;;;;;;;;
-2046;;Sy;;;;;;;;;;;;
-207D;;Sy;;;;;;;;;;;;
-207E;;Sy;;;;;;;;;;;;
-208D;;Sy;;;;;;;;;;;;
-208E;;Sy;;;;;;;;;;;;
-2329;;Sy;;;;;;;;;;;;
-232A;;Sy;;;;;;;;;;;;
-3008;;Sy;;;;;;;;;;;;
-3009;;Sy;;;;;;;;;;;;
-300A;;Sy;;;;;;;;;;;;
-300B;;Sy;;;;;;;;;;;;
-300C;;Sy;;;;;;;;;;;;
-300D;;Sy;;;;;;;;;;;;
-300E;;Sy;;;;;;;;;;;;
-300F;;Sy;;;;;;;;;;;;
-3010;;Sy;;;;;;;;;;;;
-3011;;Sy;;;;;;;;;;;;
-3014;;Sy;;;;;;;;;;;;
-3015;;Sy;;;;;;;;;;;;
-3016;;Sy;;;;;;;;;;;;
-3017;;Sy;;;;;;;;;;;;
-3018;;Sy;;;;;;;;;;;;
-3019;;Sy;;;;;;;;;;;;
-301A;;Sy;;;;;;;;;;;;
-301B;;Sy;;;;;;;;;;;;
-301D;;Sy;;;;;;;;;;;;
-301E;;Sy;;;;;;;;;;;;
-FD3E;;Sy;;;;;;;;;;;;
-FD3F;;Sy;;;;;;;;;;;;
-FE35;;Sy;;;;;;;;;;;;
-FE36;;Sy;;;;;;;;;;;;
-FE37;;Sy;;;;;;;;;;;;
-FE38;;Sy;;;;;;;;;;;;
-FE39;;Sy;;;;;;;;;;;;
-FE3A;;Sy;;;;;;;;;;;;
-FE3B;;Sy;;;;;;;;;;;;
-FE3C;;Sy;;;;;;;;;;;;
-FE3D;;Sy;;;;;;;;;;;;
-FE3E;;Sy;;;;;;;;;;;;
-FE3F;;Sy;;;;;;;;;;;;
-FE40;;Sy;;;;;;;;;;;;
-FE41;;Sy;;;;;;;;;;;;
-FE42;;Sy;;;;;;;;;;;;
-FE43;;Sy;;;;;;;;;;;;
-FE44;;Sy;;;;;;;;;;;;
-FE59;;Sy;;;;;;;;;;;;
-FE5A;;Sy;;;;;;;;;;;;
-FE5B;;Sy;;;;;;;;;;;;
-FE5C;;Sy;;;;;;;;;;;;
-FE5D;;Sy;;;;;;;;;;;;
-FE5E;;Sy;;;;;;;;;;;;
-FF08;;Sy;;;;;;;;;;;;
-FF09;;Sy;;;;;;;;;;;;
-FF3B;;Sy;;;;;;;;;;;;
-FF3D;;Sy;;;;;;;;;;;;
-FF5B;;Sy;;;;;;;;;;;;
-FF5D;;Sy;;;;;;;;;;;;
-FF62;;Sy;;;;;;;;;;;;
-FF63;;Sy;;;;;;;;;;;;
-#
-# Hex digit.
-#
-0030;;Hd;;;;;;;;;;;;
-0031;;Hd;;;;;;;;;;;;
-0032;;Hd;;;;;;;;;;;;
-0033;;Hd;;;;;;;;;;;;
-0034;;Hd;;;;;;;;;;;;
-0035;;Hd;;;;;;;;;;;;
-0036;;Hd;;;;;;;;;;;;
-0037;;Hd;;;;;;;;;;;;
-0038;;Hd;;;;;;;;;;;;
-0039;;Hd;;;;;;;;;;;;
-0041;;Hd;;;;;;;;;;;;
-0042;;Hd;;;;;;;;;;;;
-0043;;Hd;;;;;;;;;;;;
-0044;;Hd;;;;;;;;;;;;
-0045;;Hd;;;;;;;;;;;;
-0046;;Hd;;;;;;;;;;;;
-0061;;Hd;;;;;;;;;;;;
-0062;;Hd;;;;;;;;;;;;
-0063;;Hd;;;;;;;;;;;;
-0064;;Hd;;;;;;;;;;;;
-0065;;Hd;;;;;;;;;;;;
-0066;;Hd;;;;;;;;;;;;
-FF10;;Hd;;;;;;;;;;;;
-FF11;;Hd;;;;;;;;;;;;
-FF12;;Hd;;;;;;;;;;;;
-FF13;;Hd;;;;;;;;;;;;
-FF14;;Hd;;;;;;;;;;;;
-FF15;;Hd;;;;;;;;;;;;
-FF16;;Hd;;;;;;;;;;;;
-FF17;;Hd;;;;;;;;;;;;
-FF18;;Hd;;;;;;;;;;;;
-FF19;;Hd;;;;;;;;;;;;
-FF21;;Hd;;;;;;;;;;;;
-FF22;;Hd;;;;;;;;;;;;
-FF23;;Hd;;;;;;;;;;;;
-FF24;;Hd;;;;;;;;;;;;
-FF25;;Hd;;;;;;;;;;;;
-FF26;;Hd;;;;;;;;;;;;
-FF41;;Hd;;;;;;;;;;;;
-FF42;;Hd;;;;;;;;;;;;
-FF43;;Hd;;;;;;;;;;;;
-FF44;;Hd;;;;;;;;;;;;
-FF45;;Hd;;;;;;;;;;;;
-FF46;;Hd;;;;;;;;;;;;
-#
-# Quote marks.
-#
-0022;;Qm;;;;;;;;;;;;
-0027;;Qm;;;;;;;;;;;;
-00AB;;Qm;;;;;;;;;;;;
-00BB;;Qm;;;;;;;;;;;;
-2018;;Qm;;;;;;;;;;;;
-2019;;Qm;;;;;;;;;;;;
-201A;;Qm;;;;;;;;;;;;
-201B;;Qm;;;;;;;;;;;;
-201C;;Qm;;;;;;;;;;;;
-201D;;Qm;;;;;;;;;;;;
-201E;;Qm;;;;;;;;;;;;
-201F;;Qm;;;;;;;;;;;;
-2039;;Qm;;;;;;;;;;;;
-203A;;Qm;;;;;;;;;;;;
-300C;;Qm;;;;;;;;;;;;
-300D;;Qm;;;;;;;;;;;;
-300E;;Qm;;;;;;;;;;;;
-300F;;Qm;;;;;;;;;;;;
-301D;;Qm;;;;;;;;;;;;
-301E;;Qm;;;;;;;;;;;;
-301F;;Qm;;;;;;;;;;;;
-FE41;;Qm;;;;;;;;;;;;
-FE42;;Qm;;;;;;;;;;;;
-FE43;;Qm;;;;;;;;;;;;
-FE44;;Qm;;;;;;;;;;;;
-FF02;;Qm;;;;;;;;;;;;
-FF07;;Qm;;;;;;;;;;;;
-FF62;;Qm;;;;;;;;;;;;
-FF63;;Qm;;;;;;;;;;;;
deleted file mode 100644
--- a/intl/unicharutil/tools/UCDATAREADME.txt
+++ /dev/null
@@ -1,207 +0,0 @@
-#
-# $Id: UCDATAREADME.txt,v 1.1 1999/01/08 00:19:20 ftang%netscape.com Exp $
-#
-
-                           MUTT UCData Package 1.9
-                           -----------------------
-
-This is a package that supports ctype-like operations for Unicode UCS-2 text
-(and surrogates), case mapping, and decomposition lookup.  To use it, you will
-need to get the "UnicodeData-2.0.14.txt" (or later) file from the Unicode Web
-or FTP site.
-
-This package consists of two parts:
-
-  1. A program called "ucgendat" which generates five data files from the
-     UnicodeData-2.*.txt file.  The files are:
-
-     A. case.dat   - the case mappings.
-     B. ctype.dat  - the character property tables.
-     C. decomp.dat - the character decompositions.
-     D. cmbcl.dat  - the non-zero combining classes.
-     E. num.dat    - the codes representing numbers.
-
-  2. The "ucdata.[ch]" files which implement the functions needed to
-     check to see if a character matches groups of properties, to map between
-     upper, lower, and title case, to look up the decomposition of a
-     character, look up the combining class of a character, and get the number
-     value of a character.
-
-A short reference to the functions available is in the "api.txt" file.
-
-Techie Details
-==============
-
-The "ucgendat" program parses files from the command line which are all in the
-Unicode Character Database (UCDB) format.  An additional properties file,
-"MUTTUCData.txt", provides some extra properties for some characters.
-
-The program looks for the two character properties fields (2 and 4), the
-combining class field (3), the decomposition field (5), the numeric value
-field (8), and the case mapping fields (12, 13, and 14).  The decompositions
-are recursively expanded before being written out.
-
-The decomposition table contains all the canonical decompositions.  This means
-all decompositions that do not have tags such as "<compat>" or "<font>".
-
-The data is almost all stored as unsigned longs (32-bits assumed) and the
-routines that load the data take care of endian swaps when necessary.  This
-also means that surrogates (>= 0x10000) can be placed in the data files the
-"ucgendat" program parses.
-
-The data is written as external files and broken into five parts so it can be
-selectively updated at runtime if necessary.
-
-The data files currently generated from the "ucgendat" program total about 56K
-in size all together.
-
-The format of the binary data files is documented in the "format.txt" file.
-
-Mark Leisher <mleisher@crl.nmsu.edu>
-13 December 1998
-
-CHANGES
-=======
-
-Version 1.9
------------
-1. Fixed a problem with an incorrect amount of storage being allocated for the
-   combining class nodes.
-
-2. Fixed an invalid initialization in the number code.
-
-3. Changed the Java template file formatting a bit.
-
-4. Added tables and function for getting decompositions in the Java class.
-
-Version 1.8
------------
-1. Fixed a problem with adding certain ranges.
-
-2. Added two more macros for testing for identifiers.
-
-3. Tested with the UnicodeData-2.1.5.txt file.
-
-Version 1.7
------------
-1. Fixed a problem with looking up decompositions in "ucgendat."
-
-Version 1.6
------------
-1. Added two new properties introduced with UnicodeData-2.1.4.txt.
-
-2. Changed the "ucgendat.c" program a little to automatically align the
-   property data on a 4-byte boundary when new properties are added.
-
-3. Changed the "ucgendat.c" programs to only generate canonical
-   decompositions.
-
-4. Added two new macros ucisinitialpunct() and ucisfinalpunct() to check for
-   initial and final punctuation characters.
-
-5. Minor additions and changes to the documentation.
-
-Version 1.5
------------
-1. Changed all file open calls to include binary mode with "b" for DOS/WIN
-   platforms.
-
-2. Wrapped the unistd.h include so it won't be included when compiled under
-   Win32.
-
-3. Fixed a bad range check for hex digits in ucgendat.c.
-
-4. Fixed a bad endian swap for combining classes.
-
-5. Added code to make a number table and associated lookup functions.
-   Functions added are ucnumber(), ucdigit(), and ucgetnumber().  The last
-   function is to maintain compatibility with John Cowan's "uctype" package.
-
-Version 1.4
------------
-1. Fixed a bug with adding a range.
-
-2. Fixed a bug with inserting a range in order.
-
-3. Fixed incorrectly specified ucisdefined() and ucisundefined() macros.
-
-4. Added the missing unload for the combining class data.
-
-5. Fixed a bad macro placement in ucisweak().
-
-Version 1.3
------------
-1. Bug with case mapping calculations fixed.
-
-2. Bug with empty character property entries fixed.
-
-3. Bug with incorrect type in the combining class lookup fixed.
-
-4. Some corrections done to api.txt.
-
-5. Bug in certain character property lookups fixed.
-
-6. Added a character property table that records the defined characters.
-
-7. Replaced ucisunknown() with ucisdefined() and ucisundefined().
-
-Version 1.2
------------
-1. Added code to ucgendat to generate a combining class table.
-
-2. Fixed an endian problem with the byte count of decompositions.
-
-3. Fixed some minor problems in the "format.txt" file.
-
-4. Removed some bogus "Ss" values from MUTTUCData.txt file.
-
-5. Added API function to get combining class.
-
-6. Changed the open mode to "rb" so binary data files will be opened correctly
-   on DOS/WIN as well as other platforms.
-
-7. Added the "api.txt" file.
-
-Version 1.1
------------
-1. Added ucisxdigit() which I overlooked.
-
-2. Added UC_LT to the ucisalpha() macro which I overlooked.
-
-3. Change uciscntrl() to include UC_CF.
-
-4. Added ucisocntrl() and ucfntcntrl() macros.
-
-5. Added a ucisblank() which I overlooked.
-
-6. Added missing properties to ucissymbol() and ucisnumber().
-
-7. Added ucisgraph() and ucisprint().
-
-8. Changed the "Mr" property to "Sy" to mark this subset of mirroring
-   characters as symmetric to avoid trampling the Unicode/ISO10646 sense of
-   mirroring.
-
-9. Added another property called "Ss" which includes control characters
-   traditionally seen as spaces in the isspace() macro.
-
-10. Added a bunch of macros to be API compatible with John Cowan's package.
-
-ACKNOWLEDGEMENTS
-================
-
-Thanks go to John Cowan <cowan@locke.ccil.org> for pointing out lots of
-missing things and giving me stuff, particularly a bunch of new macros.
-
-Thanks go to Bob Verbrugge <bob_verbrugge@nl.compuware.com> for pointing out
-various bugs.
-
-Thanks go to Christophe Pierret <cpierret@businessobjects.com> for pointing
-out that file modes need to have "b" for DOS/WIN machines, pointing out
-unistd.h is not a Win 32 header, and pointing out a problem with ucisalnum().
-
-Thanks go to Kent Johnson <kent@pondview.mv.com> for finding a bug that caused
-incomplete decompositions to be generated by the "ucgendat" program.
-
-Thanks go to Valeriy E. Ushakov <uwe@ptc.spbu.ru> for spotting an allocation
-error and an initialization error.
deleted file mode 100644
index 3bf7f2c932e30fd5fc02265e230f03e915853bbb..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9a7513d8f8ce72a9de6782941977cba3437b6800..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 95e2c405b7791c05bb30cd9d93597fcbdc58c109..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 29e3948e3f31b10602053ec688a70bfe9911521c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 52498ece068300424fe9f8afd02fc212dab5a18f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/intl/unicharutil/tools/format.txt
+++ /dev/null
@@ -1,243 +0,0 @@
-#
-# $Id: format.txt,v 1.1 1999/01/08 00:19:20 ftang%netscape.com Exp $
-#
-
-CHARACTER DATA
-==============
-
-This package generates some data files that contain character properties useful
-for text processing.
-
-CHARACTER PROPERTIES
-====================
-
-The first data file is called "ctype.dat" and contains a compressed form of
-the character properties found in the Unicode Character Database (UCDB).
-Additional properties can be specified in limited UCDB format in another file
-to avoid modifying the original UCDB.
-
-The following is a property name and code table to be used with the character
-data:
-
-NAME CODE DESCRIPTION
----------------------
-Mn   0    Mark, Non-Spacing
-Mc   1    Mark, Spacing Combining
-Me   2    Mark, Enclosing
-Nd   3    Number, Decimal Digit
-Nl   4    Number, Letter
-No   5    Number, Other
-Zs   6    Separator, Space
-Zl   7    Separator, Line
-Zp   8    Separator, Paragraph
-Cc   9    Other, Control
-Cf   10   Other, Format
-Cs   11   Other, Surrogate
-Co   12   Other, Private Use
-Cn   13   Other, Not Assigned
-Lu   14   Letter, Uppercase
-Ll   15   Letter, Lowercase
-Lt   16   Letter, Titlecase
-Lm   17   Letter, Modifier
-Lo   18   Letter, Other
-Pc   19   Punctuation, Connector
-Pd   20   Punctuation, Dash
-Ps   21   Punctuation, Open
-Pe   22   Punctuation, Close
-Po   23   Punctuation, Other
-Sm   24   Symbol, Math
-Sc   25   Symbol, Currency
-Sk   26   Symbol, Modifier
-So   27   Symbol, Other
-L    28   Left-To-Right
-R    29   Right-To-Left
-EN   30   European Number
-ES   31   European Number Separator
-ET   32   European Number Terminator
-AN   33   Arabic Number
-CS   34   Common Number Separator
-B    35   Block Separator
-S    36   Segment Separator
-WS   37   Whitespace
-ON   38   Other Neutrals
-Pi   47   Punctuation, Initial
-Pf   48   Punctuation, Final
-#
-# Implementation specific properties.
-#
-Cm   39   Composite
-Nb   40   Non-Breaking
-Sy   41   Symmetric (characters which are part of open/close pairs)
-Hd   42   Hex Digit
-Qm   43   Quote Mark
-Mr   44   Mirroring
-Ss   45   Space, Other (controls viewed as spaces in ctype isspace())
-Cp   46   Defined character
-
-The actual binary data is formatted as follows:
-
-  Assumptions: unsigned short is at least 16-bits in size and unsigned long
-               is at least 32-bits in size.
-
-    unsigned short ByteOrderMark
-    unsigned short OffsetArraySize
-    unsigned long  Bytes
-    unsigned short Offsets[OffsetArraySize + 1]
-    unsigned long  Ranges[N], N = value of Offsets[OffsetArraySize]
-
-  The Bytes field provides the total byte count used for the Offsets[] and
-  Ranges[] arrays.  The Offsets[] array is aligned on a 4-byte boundary and
-  there is always one extra node on the end to hold the final index of the
-  Ranges[] array.  The Ranges[] array contains pairs of 4-byte values
-  representing a range of Unicode characters.  The pairs are arranged in
-  increasing order by the first character code in the range.
-
-  Determining if a particular character is in the property list requires a
-  simple binary search to determine if a character is in any of the ranges
-  for the property.
-
-  If the ByteOrderMark is equal to 0xFFFE, then the data was generated on a
-  machine with a different endian order and the values must be byte-swapped.
-
-  To swap a 16-bit value:
-     c = (c >> 8) | ((c & 0xff) << 8)
-
-  To swap a 32-bit value:
-     c = ((c & 0xff) << 24) | (((c >> 8) & 0xff) << 16) |
-         (((c >> 16) & 0xff) << 8) | (c >> 24)
-
-CASE MAPPINGS
-=============
-
-The next data file is called "case.dat" and contains three case mapping tables
-in the following order: upper, lower, and title case.  Each table is in
-increasing order by character code and each mapping contains 3 unsigned longs
-which represent the possible mappings.
-
-The format for the binary form of these tables is:
-
-  unsigned short ByteOrderMark
-  unsigned short NumMappingNodes, count of all mapping nodes
-  unsigned short CaseTableSizes[2], upper and lower mapping node counts
-  unsigned long  CaseTables[NumMappingNodes]
-
-  The starting indexes of the case tables are calculated as following:
-
-    UpperIndex = 0;
-    LowerIndex = CaseTableSizes[0] * 3;
-    TitleIndex = LowerIndex + CaseTableSizes[1] * 3;
-
-  The order of the fields for the three tables are:
-
-    Upper case
-    ----------
-    unsigned long upper;
-    unsigned long lower;
-    unsigned long title;
-
-    Lower case
-    ----------
-    unsigned long lower;
-    unsigned long upper;
-    unsigned long title;
-
-    Title case
-    ----------
-    unsigned long title;
-    unsigned long upper;
-    unsigned long lower;
-
-  If the ByteOrderMark is equal to 0xFFFE, endian swapping is required in the
-  same way as described in the CHARACTER PROPERTIES section.
-
-  Because the tables are in increasing order by character code, locating a
-  mapping requires a simple binary search on one of the 3 codes that make up
-  each node.
-
-  It is important to note that there can only be 65536 mapping nodes which
-  divided into 3 portions allows 21845 nodes for each case mapping table.  The
-  distribution of mappings may be more or less than 21845 per table, but only
-  65536 are allowed.
-
-DECOMPOSITIONS
-==============
-
-The next data file is called "decomp.dat" and contains the decomposition data
-for all characters with decompositions containing more than one character and
-are *not* compatibility decompositions.  Compatibility decompositions are
-signaled in the UCDB format by the use of the <compat> tag in the
-decomposition field.  Each list of character codes represents a full
-decomposition of a composite character.  The nodes are arranged in increasing
-order by character code.
-
-The format for the binary form of this table is:
-
-  unsigned short ByteOrderMark
-  unsigned short NumDecompNodes, count of all decomposition nodes
-  unsigned long  Bytes
-  unsigned long  DecompNodes[(NumDecompNodes * 2) + 1]
-  unsigned long  Decomp[N], N = sum of all counts in DecompNodes[]
-
-  If the ByteOrderMark is equal to 0xFFFE, endian swapping is required in the
-  same way as described in the CHARACTER PROPERTIES section.
-
-  The DecompNodes[] array consists of pairs of unsigned longs, the first of
-  which is the character code and the second is the initial index of the list
-  of character codes representing the decomposition.
-
-  Locating the decomposition of a composite character requires a binary search
-  for a character code in the DecompNodes[] array and using its index to
-  locate the start of the decomposition.  The length of the decomposition list
-  is the index in the following element in DecompNode[] minus the current
-  index.
-
-COMBINING CLASSES
-=================
-
-The fourth data file is called "cmbcl.dat" and contains the characters with
-non-zero combining classes.
-
-The format for the binary form of this table is:
-
-  unsigned short ByteOrderMark
-  unsigned short NumCCLNodes
-  unsigned long  Bytes
-  unsigned long  CCLNodes[NumCCLNodes * 3]
-
-  If the ByteOrderMark is equal to 0xFFFE, endian swapping is required in the
-  same way as described in the CHARACTER PROPERTIES section.
-
-  The CCLNodes[] array consists of groups of three unsigned longs.  The first
-  and second are the beginning and ending of a range and the third is the
-  combining class of that range.
-
-  If a character is not found in this table, then the combining class is
-  assumed to be 0.
-
-  It is important to note that only 65536 distinct ranges plus combining class
-  can be specified because the NumCCLNodes is usually a 16-bit number.
-
-NUMBER TABLE
-============
-
-The final data file is called "num.dat" and contains the characters that have
-a numeric value associated with them.
-
-The format for the binary form of the table is:
-
-  unsigned short ByteOrderMark
-  unsigned short NumNumberNodes
-  unsigned long  Bytes
-  unsigned long  NumberNodes[NumNumberNodes]
-  unsigned short ValueNodes[(Bytes - (NumNumberNodes * sizeof(unsigned long)))
-                            / sizeof(short)]
-
-  If the ByteOrderMark is equal to 0xFFFE, endian swapping is required in the
-  same way as described in the CHARACTER PROPERTIES section.
-
-  The NumberNodes array contains pairs of values, the first of which is the
-  character code and the second an index into the ValueNodes array.  The
-  ValueNodes array contains pairs of integers which represent the numerator
-  and denominator of the numeric value of the character.  If the character
-  happens to map to an integer, both the values in ValueNodes will be the
-  same.
deleted file mode 100644
--- a/intl/unicharutil/tools/moz.build
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-Program('ucgendat')
-
-SOURCES += [
-    'ucgendat.c',
-]
-
deleted file mode 100644
--- a/intl/unicharutil/tools/ucgendat.c
+++ /dev/null
@@ -1,1457 +0,0 @@
-/*
- * Copyright 1996, 1997, 1998 Computing Research Labs,
- * New Mexico State University
- *
- * 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, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * 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.  IN NO EVENT SHALL
- * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
- * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#ifndef lint
-#ifdef __GNUC__
-static char rcsid[] __attribute__ ((unused)) = "$Id: ucgendat.c,v 1.1 1999/01/08 00:19:21 ftang%netscape.com Exp $";
-#else
-static char rcsid[] = "$Id: ucgendat.c,v 1.1 1999/01/08 00:19:21 ftang%netscape.com Exp $";
-#endif
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#ifndef WIN32
-#include <unistd.h>
-#endif
-
-#define ishdigit(cc) (((cc) >= '0' && (cc) <= '9') ||\
-                      ((cc) >= 'A' && (cc) <= 'F') ||\
-                      ((cc) >= 'a' && (cc) <= 'f'))
-
-/*
- * A header written to the output file with the byte-order-mark and the number
- * of property nodes.
- */
<