You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opennlp.apache.org by rz...@apache.org on 2026/10/01 18:56:45 UTC

(opennlp) branch main updated: OPENNLP-1974: Normalize complete Unicode emoji sequences (#1313)

This is an automated email from the ASF dual-hosted git repository.

rzo1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opennlp.git


The following commit(s) were added to refs/heads/main by this push:
     new ceb2bd880 OPENNLP-1974: Normalize complete Unicode emoji sequences (#1313)
ceb2bd880 is described below

commit ceb2bd880b3cd0a8a1dac8dd5de42c42ed4f57fd
Author: Richard Zowalla <13...@users.noreply.github.com>
AuthorDate: Thu Oct 1 20:56:40 2026 +0200

    OPENNLP-1974: Normalize complete Unicode emoji sequences (#1313)
    
    * OPENNLP-1974: Normalize complete Unicode emoji sequences
    
    Use a code-point matcher and pinned Unicode Emoji 18 data. Preserve non-emoji text and malformed candidates. Document training and inference implications.
    
    Red: 6 of 8 intended-behavior checks failed on the former implementation; 11 Emoji 18 cases failed with the Emoji 17 inventory. Green: 50 focused tests pass, including all 3963 bundled sequences.
    
    * OPENNLP-1974: Include Unicode emoji license in runtime JAR
    
    Append the Unicode V3 license and Emoji 18 source attribution to the runtime artifact metadata. Include the data license when the runtime JAR is distributed separately.
    
    * OPENNLP-1974: Fix Unicode Emoji version in LanguageDetectorFactory Javadoc
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <no...@anthropic.com>
    
    * OPENNLP-1974: Use Emoji 17.0 data for removal and preserve LEGACY output
    
    Use Unicode Emoji 17.0 data for emoji removal: 3,944 sequences and 10
    component ranges. Pin the release, source checksums and sequence count
    in the generator. Load the data lazily and reject malformed entries.
    
    Keep emoji next to stray joiners, modifiers, selectors, flag letters or
    tags, and remove other complete emoji in the same run. Remove one extra
    U+FE0F after a complete emoji with that emoji. Skip non-emoji text before
    the trie lookup.
    
    Preserve the old output under opennlp.compat.mode=LEGACY with a cursor
    scan instead of regex. Compare it with the old pattern over 5,000
    randomized inputs, and test the normalizer chain in both compatibility
    modes.
    
    Remove the class deprecation and use it in the default normalizer chain.
    Document the behavior in Javadoc and the language detector chapter, and
    update the runtime jar LICENSE and NOTICE for the bundled Unicode data.
    
    Assisted-by: Claude Code 2.1.281
    Co-authored-by: Kristian Rickert <kr...@apache.org>
    Co-authored-by: Claude <no...@anthropic.com>
    Reviewed-by: Kristian Rickert <kr...@apache.org>
    Signed-off-by: Kristian Rickert <kr...@apache.org>
    
    * OPENNLP-1974: Address review findings in the emoji normalizer
    
    - Trie nodes keep sorted primitive arrays instead of HashMap<Integer, Node>,
      so a lookup does not box.
    - Lazy loading uses a holder class instead of double-checked locking.
    - The normalizer checks the candidate start set before decoding a second time.
    - Javadoc names the pre-3.0.0 regex once instead of "the former pattern".
    - HexCodePoints no longer claims to be shared by the other data loaders.
    - The generator reads each source file once and accepts a bare output name.
    - The characterization tests are parameterized so a failing input is named.
    - The docbook entry keeps two sentences in the table and moves the LEGACY note
      below it.
    
    * OPENNLP-1974: Parse hex code points of all normalizer data files with HexCodePoints
    
    Confusables and EmojiAnnotations used their own Integer.parseInt(..., 16)
    loops. They now use HexCodePoints like UnicodeEmojiSequences, so an out of
    range code point fails with the line number instead of a bare exception
    from appendCodePoint.
    
    * OPENNLP-1974: Remove minimally-qualified emoji sequences as well
    
    emoji-test.txt lists 1,029 minimally-qualified sequences, mostly gendered and
    skin tone ZWJ sequences written without U+FE0F after a later element, such as
    U+1F64B U+1F3FF U+200D U+2640. They were kept whole as malformed candidates.
    The generator now keeps them next to the fully-qualified ones, so the
    inventory holds 4,973 sequences. Unqualified sequences, whose first code
    point lacks a needed U+FE0F, are still kept as text.
    
    * OPENNLP-1974: Drop static from helpers that do not need it
    
    - UnicodeEmojiSequences: adding a sequence is an instance method of the trie
      node instead of a static helper taking the root.
    - UnicodeEmojiSequenceGenerator: main creates an instance; the helpers are
      instance methods.
    - Tests: helpers called only from test methods are instance methods.
    
    Factories (getInstance, load, parse), the HexCodePoints utility, JUnit
    method sources and the helpers they call stay static.
    
    * OPENNLP-1974: Test that hex code point sequences accept whitespace runs
    
    The normalizer data loaders read code point sequences separated by any whitespace run,
    with leading and trailing whitespace ignored, instead of single spaces only.
    
    * OPENNLP-1974: Split hex code point sequences on whitespace runs
    
    HexCodePoints tokenizes a sequence with StringUtil.splitOnUnicodeWhitespace, so the
    confusables and annotation loaders and the emoji trie accept tabs and repeated spaces between
    code points and ignore surrounding whitespace. The single space separator constant is gone.
    The getInstance Javadoc of UnicodeEmojiSequences names the error the holder idiom produces.
    
    ---------
    
    Signed-off-by: Kristian Rickert <kr...@apache.org>
    Co-authored-by: Kristian Rickert <kr...@apache.org>
    Co-authored-by: Claude Opus 5.5 (1M context) <no...@anthropic.com>
---
 LICENSE                                            |    2 +-
 NOTICE                                             |   17 +-
 dev/README-unicode-emoji-sequences.md              |   49 +
 dev/UnicodeEmojiSequenceGenerator.java             |  294 ++
 .../src/main/appended-resources/META-INF/LICENSE   |   50 +
 .../src/main/appended-resources/META-INF/NOTICE    |   28 +
 .../tools/langdetect/LanguageDetectorFactory.java  |    4 +-
 .../opennlp/tools/util/normalizer/Confusables.java |   24 +-
 .../tools/util/normalizer/EmojiAnnotations.java    |   14 +-
 .../normalizer/EmojiCharSequenceNormalizer.java    |  150 +-
 .../tools/util/normalizer/HexCodePoints.java       |  141 +
 .../util/normalizer/UnicodeEmojiSequences.java     |  428 ++
 .../tools/util/normalizer/EmojiSequences.txt       | 4994 ++++++++++++++++++++
 ...efaultLanguageDetectorContextGeneratorTest.java |   60 +
 .../util/normalizer/ConfusablesParseTest.java      |   19 +
 .../util/normalizer/EmojiAnnotationsTest.java      |    1 +
 ...CharSequenceNormalizerCharacterizationTest.java |  206 +
 .../EmojiCharSequenceNormalizerTest.java           |  327 ++
 .../tools/util/normalizer/HexCodePointsTest.java   |   83 +
 .../normalizer/UnicodeEmojiSequencesParseTest.java |  103 +
 opennlp-distr/src/main/readme/LICENSE              |    1 +
 opennlp-distr/src/main/readme/NOTICE               |   17 +-
 opennlp-docs/src/docbkx/langdetect.xml             |   13 +-
 .../EmojiCharSequenceNormalizerTest.java           |   43 -
 rat-excludes                                       |    1 +
 src/license/NOTICE.template                        |   19 +-
 26 files changed, 6976 insertions(+), 112 deletions(-)

diff --git a/LICENSE b/LICENSE
index e77ddad5f..8c18490f6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -375,7 +375,7 @@ The following license applies to the bundled Unicode data files in
 opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/tokenize/uax29
 (WordBreakProperty.txt, ExtendedPictographic.txt),
 opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer
-(confusables.txt, CaseFolding.txt),
+(confusables.txt, CaseFolding.txt, EmojiSequences.txt),
 opennlp-core/opennlp-runtime/src/test/resources/opennlp/tools/tokenize/uax29
 (WordBreakTest.txt), and to the Unicode-derived values (the CLDR short names
 and the emoji-test.txt group/subgroup classifications) in the otherwise
diff --git a/NOTICE b/NOTICE
index 7e836ac50..38af7f654 100644
--- a/NOTICE
+++ b/NOTICE
@@ -94,9 +94,9 @@ SOFTWARE.
 
 ============================================================================
 
-This product bundles data files from the Unicode Character Database (UCD)
-and the Unicode Security Mechanisms, version 17.0.0, published by Unicode,
-Inc. (https://www.unicode.org/Public/).
+This product bundles Unicode Character Database (UCD), Unicode Security
+Mechanisms and Unicode Emoji data in the versions listed below, published
+by Unicode, Inc. (https://www.unicode.org/Public/).
 
   * opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/tokenize/uax29/WordBreakProperty.txt
     is the upstream WordBreakProperty-17.0.0.txt, unmodified except for the
@@ -117,11 +117,16 @@ Inc. (https://www.unicode.org/Public/).
     filtered subset; the upstream file additionally carries the Emoji,
     Emoji_Presentation, Emoji_Modifier, Emoji_Modifier_Base, and
     Emoji_Component properties, which are not retained.
+  * opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
+    is a generated inventory of fully-qualified and minimally-qualified emoji
+    sequences from emoji-test.txt and Emoji_Component ranges from
+    emoji-data.txt, both Unicode Emoji version 17.0.
 
 The original Unicode copyright and license header is preserved verbatim at the
-top of each bundled file. These files are distributed under the Unicode License
-V3, the full text of which is reproduced in the LICENSE file accompanying this
-distribution.
+top of each copied or filtered data file. Generated inventories identify their
+Unicode sources and license in their headers. These files and derived values are
+distributed under the Unicode License V3, the full text of which is reproduced
+in the LICENSE file accompanying this distribution.
 
 The project-authored annotation table
 opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/emoji-annotations.txt
diff --git a/dev/README-unicode-emoji-sequences.md b/dev/README-unicode-emoji-sequences.md
new file mode 100644
index 000000000..3f09c6706
--- /dev/null
+++ b/dev/README-unicode-emoji-sequences.md
@@ -0,0 +1,49 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+# Unicode emoji sequence data
+
+`UnicodeEmojiSequenceGenerator.java` derives the bundled
+`opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt`
+from these official Unicode Emoji 17.0 files:
+
+* `https://www.unicode.org/Public/17.0.0/emoji/emoji-test.txt`
+  (`1d8a944f88d7952f7ef7c5167fef3c67995bcae24543949710231b03a201acda`)
+* `https://www.unicode.org/Public/17.0.0/ucd/emoji/emoji-data.txt`
+  (`2cb2bb9455cda83e8481541ecf5b6dfda66a3bb89efa3fa7c5297eccf607b72b`)
+
+The generator verifies both SHA-256 checksums and both `# Version:` headers against the release
+pinned in its `RELEASE` table, so a version bump changes that table, the data file and the NOTICE
+files. It keeps the exact `fully-qualified` and `minimally-qualified` sequences from
+`emoji-test.txt` (the `S;` records) and the `Emoji_Component` ranges from `emoji-data.txt` (the `C;` records). The component ranges only
+tell the normalizer which stray joiners, modifiers, selectors and tags belong to a neighboring
+emoji; a component on its own is never treated as an emoji.
+
+Run the generator from the repository root:
+
+```shell
+mkdir -p target/unicode-emoji-generator
+javac -d target/unicode-emoji-generator dev/UnicodeEmojiSequenceGenerator.java
+java -cp target/unicode-emoji-generator UnicodeEmojiSequenceGenerator \
+  /path/to/emoji-test.txt /path/to/emoji-data.txt \
+  opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
+```
+
+The generated inventory and its sources are covered by Unicode License V3, reproduced in the
+project `LICENSE`. Attribution is recorded in `NOTICE`. The generator is Apache License 2.0.
+The runtime module's `src/main/appended-resources/META-INF/LICENSE` and `NOTICE` also carry
+the data license and attribution into the standalone runtime JAR.
diff --git a/dev/UnicodeEmojiSequenceGenerator.java b/dev/UnicodeEmojiSequenceGenerator.java
new file mode 100644
index 000000000..54f39c4fc
--- /dev/null
+++ b/dev/UnicodeEmojiSequenceGenerator.java
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HexFormat;
+import java.util.List;
+
+/**
+ * Generates the bundled {@code EmojiSequences.txt} from the Unicode Emoji {@code emoji-test.txt}
+ * and {@code emoji-data.txt} of one release. The release, the SHA-256 of both source files and
+ * the expected number of qualified sequences are pinned in {@link #RELEASE}, so a version
+ * bump is a change of that one table.
+ *
+ * <p>Usage: {@code UnicodeEmojiSequenceGenerator emoji-test.txt emoji-data.txt output.txt}.</p>
+ */
+public final class UnicodeEmojiSequenceGenerator {
+
+  /** Unicode Emoji 17.0, the version of the other bundled Unicode data files. */
+  private static final Release RELEASE = new Release("17.0", "2025",
+      "1d8a944f88d7952f7ef7c5167fef3c67995bcae24543949710231b03a201acda",
+      "2cb2bb9455cda83e8481541ecf5b6dfda66a3bb89efa3fa7c5297eccf607b72b",
+      4973);
+
+  private static final String OUTPUT_NAME = "EmojiSequences.txt";
+  private static final String VERSION_LINE = "# Version: ";
+  private static final String FULLY_QUALIFIED = "fully-qualified";
+  private static final String MINIMALLY_QUALIFIED = "minimally-qualified";
+  private static final String EMOJI_COMPONENT = "Emoji_Component";
+  private static final String SEQUENCE_RECORD = "S;";
+  private static final String COMPONENT_RECORD = "C;";
+  private static final String RANGE_SEPARATOR = "..";
+  private static final char CODE_POINT_SEPARATOR = ' ';
+  private static final char FIELD_SEPARATOR = ';';
+  private static final char COMMENT = '#';
+
+  private UnicodeEmojiSequenceGenerator() {
+  }
+
+  /**
+   * Verifies the two source files against {@link #RELEASE} and writes the inventory.
+   *
+   * @param args The paths of {@code emoji-test.txt}, {@code emoji-data.txt} and the output file.
+   * @throws IOException Thrown if a source file cannot be read, has the wrong checksum or
+   *     version, or has unexpected content.
+   */
+  public static void main(String[] args) throws IOException {
+    if (args.length != 3) {
+      throw new IllegalArgumentException(
+          "usage: UnicodeEmojiSequenceGenerator emoji-test.txt emoji-data.txt output.txt");
+    }
+    new UnicodeEmojiSequenceGenerator().generate(Path.of(args[0]), Path.of(args[1]),
+        Path.of(args[2]));
+  }
+
+  /**
+   * Verifies the two source files against {@link #RELEASE} and writes the inventory.
+   *
+   * @param emojiTestFile The {@code emoji-test.txt} file.
+   * @param emojiDataFile The {@code emoji-data.txt} file.
+   * @param target The output file.
+   * @throws IOException Thrown if a source file cannot be read, has the wrong checksum or
+   *     version, or has unexpected content, or the output cannot be written.
+   */
+  private void generate(Path emojiTestFile, Path emojiDataFile, Path target) throws IOException {
+    List<String> emojiTest = readSource(emojiTestFile, RELEASE.emojiTestSha256());
+    List<String> emojiData = readSource(emojiDataFile, RELEASE.emojiDataSha256());
+
+    List<String> sequences = readQualifiedSequences(emojiTest);
+    List<String> components = readComponentRanges(emojiData);
+    List<String> output = new ArrayList<>(sequences.size() + components.size() + 11);
+    output.add("# " + OUTPUT_NAME);
+    output.add("# Copyright (c) 1991-" + RELEASE.copyrightYear() + " Unicode, Inc.");
+    output.add("# For terms of use and license, see https://www.unicode.org/license.txt");
+    output.add("#");
+    output.add("# Unicode Emoji fully-qualified and minimally-qualified sequences, derived from");
+    output.add("# emoji-test.txt and emoji-data.txt under Unicode License V3.");
+    output.add(VERSION_LINE + RELEASE.version());
+    output.add("# emoji-test.txt SHA-256: " + RELEASE.emojiTestSha256());
+    output.add("# emoji-data.txt SHA-256: " + RELEASE.emojiDataSha256());
+    output.add("# S records are exact sequences; C records are Emoji_Component ranges.");
+    output.add("# Generated by dev/UnicodeEmojiSequenceGenerator.java; do not edit.");
+    for (String sequence : sequences) {
+      output.add(SEQUENCE_RECORD + sequence);
+    }
+    for (String component : components) {
+      output.add(COMPONENT_RECORD + component);
+    }
+    if (target.getParent() != null) {
+      Files.createDirectories(target.getParent());
+    }
+    Files.write(target, output, StandardCharsets.US_ASCII);
+    System.out.printf("wrote %d sequences and %d component ranges%n",
+        sequences.size(), components.size());
+  }
+
+  /**
+   * Reads the code point sequences that {@code emoji-test.txt} marks {@code fully-qualified} or
+   * {@code minimally-qualified}, in file order. Unqualified sequences, whose first code point
+   * lacks a needed U+FE0F, are left out: they start with a symbol in text presentation.
+   *
+   * @param lines The lines of {@code emoji-test.txt}.
+   * @return The sequences, each as upper case hex code points separated by one space.
+   * @throws IOException Thrown if a line holds a malformed code point, or the file does not
+   *     hold exactly the number of sequences pinned in {@link #RELEASE}.
+   */
+  private List<String> readQualifiedSequences(List<String> lines) throws IOException {
+    List<String> result = new ArrayList<>();
+    for (String line : lines) {
+      int semicolon = line.indexOf(FIELD_SEPARATOR);
+      int comment = line.indexOf(COMMENT, semicolon + 1);
+      if (semicolon < 0 || comment < 0) {
+        continue;
+      }
+      String status = line.substring(semicolon + 1, comment).trim();
+      if (status.equals(FULLY_QUALIFIED) || status.equals(MINIMALLY_QUALIFIED)) {
+        result.add(normalizeCodePoints(line.substring(0, semicolon)));
+      }
+    }
+    if (result.size() != RELEASE.sequenceCount()) {
+      throw new IOException("expected " + RELEASE.sequenceCount()
+          + " qualified sequences, found " + result.size());
+    }
+    return result;
+  }
+
+  /**
+   * Reads the code point ranges that {@code emoji-data.txt} assigns the {@code Emoji_Component}
+   * property, in file order.
+   *
+   * @param lines The lines of {@code emoji-data.txt}.
+   * @return The ranges, each as {@code XXXX..YYYY} or a single code point.
+   * @throws IOException Thrown if a line holds a malformed code point, or the file has no
+   *     {@code Emoji_Component} line.
+   */
+  private List<String> readComponentRanges(List<String> lines) throws IOException {
+    List<String> result = new ArrayList<>();
+    for (String line : lines) {
+      int semicolon = line.indexOf(FIELD_SEPARATOR);
+      int comment = line.indexOf(COMMENT, semicolon + 1);
+      if (semicolon < 0 || comment < 0) {
+        continue;
+      }
+      if (line.substring(semicolon + 1, comment).trim().equals(EMOJI_COMPONENT)) {
+        result.add(normalizeRange(line.substring(0, semicolon)));
+      }
+    }
+    if (result.isEmpty()) {
+      throw new IOException("emoji-data.txt has no Emoji_Component ranges");
+    }
+    return result;
+  }
+
+  /**
+   * Rewrites a whitespace separated list of hex code points as four or more upper case hex
+   * digits each, separated by one space.
+   *
+   * @param value The code point column of an {@code emoji-test.txt} line.
+   * @return The normalized sequence.
+   * @throws IOException Thrown if the column is empty or holds a malformed code point.
+   */
+  private String normalizeCodePoints(String value) throws IOException {
+    StringBuilder normalized = new StringBuilder();
+    int start = -1;
+    for (int i = 0; i <= value.length(); i++) {
+      if (i == value.length() || Character.isWhitespace(value.charAt(i))) {
+        if (start >= 0) {
+          if (normalized.length() > 0) {
+            normalized.append(CODE_POINT_SEPARATOR);
+          }
+          normalized.append(formatCodePoint(parseHex(value.substring(start, i))));
+          start = -1;
+        }
+      } else if (start < 0) {
+        start = i;
+      }
+    }
+    if (normalized.length() == 0) {
+      throw new IOException("empty code point sequence");
+    }
+    return normalized.toString();
+  }
+
+  /**
+   * Rewrites a code point or a {@code XXXX..YYYY} range with four or more upper case hex digits
+   * per code point.
+   *
+   * @param value The code point column of an {@code emoji-data.txt} line.
+   * @return The normalized range.
+   * @throws IOException Thrown if a code point is malformed.
+   */
+  private String normalizeRange(String value) throws IOException {
+    String trimmed = value.trim();
+    int dots = trimmed.indexOf(RANGE_SEPARATOR);
+    if (dots < 0) {
+      return formatCodePoint(parseHex(trimmed));
+    }
+    return formatCodePoint(parseHex(trimmed.substring(0, dots))) + RANGE_SEPARATOR
+        + formatCodePoint(parseHex(trimmed.substring(dots + RANGE_SEPARATOR.length())));
+  }
+
+  /**
+   * Parses one hex code point.
+   *
+   * @param value The hex digits.
+   * @return The code point.
+   * @throws IOException Thrown if the digits are not hex or not a Unicode code point.
+   */
+  private int parseHex(String value) throws IOException {
+    try {
+      int codePoint = Integer.parseInt(value, 16);
+      if (!Character.isValidCodePoint(codePoint)) {
+        throw new IOException("invalid code point: " + value);
+      }
+      return codePoint;
+    } catch (NumberFormatException e) {
+      throw new IOException("invalid hexadecimal code point: " + value, e);
+    }
+  }
+
+  /**
+   * Formats a code point as at least four upper case hex digits, the way the Unicode data files
+   * do.
+   *
+   * @param codePoint The code point.
+   * @return The hex digits.
+   */
+  private String formatCodePoint(int codePoint) {
+    return String.format("%04X", codePoint);
+  }
+
+  /**
+   * Reads a source file once and checks its SHA-256 and its {@code # Version:} header line
+   * against {@link #RELEASE}. Both emoji files use the two part form, for example
+   * {@code # Version: 17.0}.
+   *
+   * @param source The file to read.
+   * @param expectedSha256 The expected SHA-256 as lower case hex.
+   * @return The lines of the file.
+   * @throws IOException Thrown if the file cannot be read, its checksum differs, or it is of
+   *     another version.
+   */
+  private List<String> readSource(Path source, String expectedSha256) throws IOException {
+    byte[] bytes = Files.readAllBytes(source);
+    String actual;
+    try {
+      actual = HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256").digest(bytes));
+    } catch (NoSuchAlgorithmException e) {
+      throw new IllegalStateException("SHA-256 is unavailable", e);
+    }
+    if (!actual.equals(expectedSha256)) {
+      throw new IOException(source + " SHA-256 mismatch: expected " + expectedSha256
+          + ", found " + actual);
+    }
+    List<String> lines = new String(bytes, StandardCharsets.UTF_8).lines().toList();
+    if (!lines.contains(VERSION_LINE + RELEASE.version())) {
+      throw new IOException(source + " is not Unicode Emoji version " + RELEASE.version());
+    }
+    return lines;
+  }
+
+  /**
+   * The pinned Unicode Emoji release.
+   *
+   * @param version The version as it appears in the {@code # Version:} header of both files.
+   * @param copyrightYear The last year of the Unicode copyright line of that release.
+   * @param emojiTestSha256 The SHA-256 of {@code emoji-test.txt}.
+   * @param emojiDataSha256 The SHA-256 of {@code emoji-data.txt}.
+   * @param sequenceCount The number of fully-qualified and minimally-qualified sequences in
+   *     {@code emoji-test.txt}.
+   */
+  private record Release(String version, String copyrightYear, String emojiTestSha256,
+                         String emojiDataSha256, int sequenceCount) {
+  }
+}
diff --git a/opennlp-core/opennlp-runtime/src/main/appended-resources/META-INF/LICENSE b/opennlp-core/opennlp-runtime/src/main/appended-resources/META-INF/LICENSE
new file mode 100644
index 000000000..0d943f6c3
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/main/appended-resources/META-INF/LICENSE
@@ -0,0 +1,50 @@
+
+The following license applies to the Unicode data files bundled inside this
+jar (opennlp/tools/util/normalizer/confusables.txt,
+opennlp/tools/util/normalizer/CaseFolding.txt,
+opennlp/tools/util/normalizer/EmojiSequences.txt,
+opennlp/tools/tokenize/uax29/WordBreakProperty.txt, and
+opennlp/tools/tokenize/uax29/ExtendedPictographic.txt), and to the
+Unicode-derived values (the CLDR short names and the emoji-test.txt
+group/subgroup classifications) in the otherwise project-authored
+opennlp/tools/util/normalizer/emoji-annotations.txt (see NOTICE):
+
+UNICODE LICENSE V3
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1991-2025 Unicode, Inc.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY
+DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
+SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
+DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of data files and any associated documentation (the "Data Files") or
+software and any associated documentation (the "Software") to deal in the
+Data Files or Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, and/or sell
+copies of the Data Files or Software, and to permit persons to whom the
+Data Files or Software are furnished to do so, provided that either (a)
+this copyright and permission notice appear with all copies of the Data
+Files or Software, or (b) this copyright and permission notice appear in
+associated Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+THIRD PARTY RIGHTS.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
+BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
+FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in these Data Files or Software without prior written
+authorization of the copyright holder.
diff --git a/opennlp-core/opennlp-runtime/src/main/appended-resources/META-INF/NOTICE b/opennlp-core/opennlp-runtime/src/main/appended-resources/META-INF/NOTICE
new file mode 100644
index 000000000..52a7fdf85
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/main/appended-resources/META-INF/NOTICE
@@ -0,0 +1,28 @@
+This product bundles Unicode Character Database (UCD), Unicode Security
+Mechanisms and Unicode Emoji data, version 17.0, published by Unicode, Inc.
+(https://www.unicode.org/Public/):
+
+  * opennlp/tools/tokenize/uax29/WordBreakProperty.txt is the upstream
+    WordBreakProperty-17.0.0.txt, unmodified except for the file name.
+  * opennlp/tools/util/normalizer/confusables.txt is the upstream
+    confusables.txt from the Unicode Security Mechanisms (UTS #39), unmodified.
+  * opennlp/tools/util/normalizer/CaseFolding.txt is the upstream
+    CaseFolding.txt (version 17.0.0) from the UCD, unmodified.
+  * opennlp/tools/tokenize/uax29/ExtendedPictographic.txt keeps only the
+    Extended_Pictographic lines of the upstream emoji-data.txt (Emoji Data for
+    UTS #51, version 17.0).
+  * opennlp/tools/util/normalizer/EmojiSequences.txt is a generated inventory
+    of the fully-qualified and minimally-qualified emoji sequences from
+    emoji-test.txt and the Emoji_Component ranges from emoji-data.txt, both
+    Unicode Emoji 17.0:
+    https://www.unicode.org/Public/17.0.0/emoji/emoji-test.txt
+    https://www.unicode.org/Public/17.0.0/ucd/emoji/emoji-data.txt
+
+The project-authored annotation table
+opennlp/tools/util/normalizer/emoji-annotations.txt is licensed under the
+Apache License 2.0, but its name values (the CLDR short names) and its
+entity-type/category derivations are transcribed from the upstream
+emoji-test.txt (version 17.0).
+
+Copyright (c) 1991-2025 Unicode, Inc. All rights reserved.
+Distributed under the Unicode License V3 reproduced in LICENSE.
diff --git a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/langdetect/LanguageDetectorFactory.java b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/langdetect/LanguageDetectorFactory.java
index 873643177..206dad789 100644
--- a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/langdetect/LanguageDetectorFactory.java
+++ b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/langdetect/LanguageDetectorFactory.java
@@ -40,10 +40,8 @@ import opennlp.tools.util.normalizer.UrlCharSequenceNormalizer;
 public class LanguageDetectorFactory extends BaseToolFactory {
 
   /**
-   * @return Retrieves a {@link LanguageDetectorContextGenerator}. The deprecated emoji
-   *     normalizer stays in this chain because existing models were trained with it.
+   * @return Retrieves a {@link LanguageDetectorContextGenerator}.
    */
-  @SuppressWarnings("deprecation")
   public LanguageDetectorContextGenerator getContextGenerator() {
     return new DefaultLanguageDetectorContextGenerator(1, 3,
         EmojiCharSequenceNormalizer.getInstance(),
diff --git a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/Confusables.java b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/Confusables.java
index 4e252761a..f0c5d2eb9 100644
--- a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/Confusables.java
+++ b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/Confusables.java
@@ -111,27 +111,11 @@ public final class Confusables {
               + lineNumber + ": " + content);
         }
         try {
-          final int source = Integer.parseInt(content.substring(0, firstSemicolon).strip(), 16);
+          final int source =
+              HexCodePoints.parseCodePoint(content.substring(0, firstSemicolon).strip());
           final String target = content.substring(firstSemicolon + 1, secondSemicolon).strip();
-          final StringBuilder prototype = new StringBuilder();
-          // Scan the whitespace-delimited hex tokens by hand, with no regular expression.
-          final int targetLength = target.length();
-          int pos = 0;
-          while (pos < targetLength) {
-            while (pos < targetLength && target.charAt(pos) <= ' ') {
-              pos++;
-            }
-            int end = pos;
-            while (end < targetLength && target.charAt(end) > ' ') {
-              end++;
-            }
-            if (end > pos) {
-              prototype.appendCodePoint(Integer.parseInt(target.substring(pos, end), 16));
-            }
-            pos = end;
-          }
-          map.put(source, prototype.toString());
-        } catch (NumberFormatException e) {
+          map.put(source, HexCodePoints.decodeSequence(target));
+        } catch (IllegalArgumentException e) {
           throw new IllegalArgumentException("Malformed confusables data in " + RESOURCE + " at line "
               + lineNumber + ": " + content, e);
         }
diff --git a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiAnnotations.java b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiAnnotations.java
index 941026848..0ff1246c7 100644
--- a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiAnnotations.java
+++ b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiAnnotations.java
@@ -61,12 +61,6 @@ public final class EmojiAnnotations {
    */
   private static final char FIELD_SEPARATOR = ';';
 
-  /**
-   * Separates hex code points inside the code point field. The bundled table format uses ASCII
-   * space ({@code U+0020}), not a general whitespace class.
-   */
-  private static final char MAPPING_CODE_POINT_SEPARATOR = ' ';
-
   // The records keyed by code point sequence, loaded once when this class initializes.
   private static final Map<String, EmojiAnnotation> ANNOTATIONS = load();
 
@@ -245,12 +239,8 @@ public final class EmojiAnnotations {
           + " at line " + lineNumber + ": empty code point sequence in: " + content);
     }
     try {
-      final StringBuilder decoded = new StringBuilder();
-      for (final String hex : StringUtil.split(stripped, MAPPING_CODE_POINT_SEPARATOR)) {
-        decoded.appendCodePoint(Integer.parseInt(hex, 16));
-      }
-      return decoded.toString();
-    } catch (NumberFormatException e) {
+      return HexCodePoints.decodeSequence(stripped);
+    } catch (IllegalArgumentException e) {
       throw new IllegalArgumentException("Malformed emoji annotation data in " + RESOURCE
           + " at line " + lineNumber + ": " + content, e);
     }
diff --git a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizer.java b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizer.java
index d2b75335a..06959b4cb 100644
--- a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizer.java
+++ b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizer.java
@@ -16,35 +16,159 @@
  */
 package opennlp.tools.util.normalizer;
 
-import java.util.regex.Pattern;
+import opennlp.tools.util.CompatibilityMode;
 
 /**
- * A {@link EmojiCharSequenceNormalizer} implementation that normalizes text
- * in terms of emojis. Every encounter will be replaced by a whitespace.
+ * A {@link CharSequenceNormalizer} implementation that replaces each run of complete emoji with
+ * one space.
  *
- * @deprecated Replaces every supplementary-plane code point with a space, not only emoji. Use
- *     {@link EmojiToEmoticonCharSequenceNormalizer} instead.
+ * <p>An emoji is a fully-qualified or minimally-qualified sequence of Unicode Emoji 17.0 in the
+ * sense of <a href="https://www.unicode.org/reports/tr51/">UTS #51</a>: a single emoji, an emoji
+ * with U+FE0F, a flag, a keycap, a skin tone modifier sequence, a ZWJ sequence or a tag
+ * sequence, as listed in {@code emoji-test.txt}. A minimally-qualified ZWJ sequence lacks U+FE0F
+ * after a later element only, such as a woman raising hand written without U+FE0F after
+ * U+2640. Adjacent emoji form one run and become one space; one redundant U+FE0F right after an
+ * emoji is removed with it. Everything else is kept: a symbol with text presentation such as
+ * U+2764 without U+FE0F, an unqualified sequence starting with such a symbol, letters and
+ * ideographs from other planes,
+ * private use characters, unpaired surrogates, and an emoji with a stray joiner, modifier,
+ * selector, flag letter or tag next to it, which is kept as a whole instead of leaving a
+ * fragment behind.</p>
+ *
+ * <p>Since 3.0.0 only complete emoji sequences are removed. Under
+ * {@link CompatibilityMode#LEGACY} the earlier output is produced for language detector models
+ * trained with it: each maximal run of ASCII hyphens, characters from U+E000 to U+FFFF (private
+ * use characters, CJK compatibility ideographs, Arabic and Hebrew presentation forms, fullwidth
+ * and halfwidth forms, variation selectors), supplementary characters up to U+10FC00 whether
+ * they are emoji or not, and unpaired surrogates from U+D83C on becomes one space, while emoji
+ * in the Basic Multilingual Plane such as U+231A are kept.</p>
  */
-@Deprecated(since = "3.0.0", forRemoval = true)
 public class EmojiCharSequenceNormalizer implements CharSequenceNormalizer {
 
-  private static final long serialVersionUID = 4553401197981667914L;
-  
+  private static final long serialVersionUID = -723015318244958736L;
+
+  /**
+   * The first code point of the range removed under {@link CompatibilityMode#LEGACY}: the high
+   * surrogate U+D83C. Before 3.0.0 this class used the regex
+   * {@code [\uD83C-\uDBFF\uDC00-\uDFFF]+}, whose character class Java reads as U+D83C to
+   * U+10FC00 (the adjacent escapes {@code \uDBFF\uDC00} form one supplementary code point),
+   * plus a literal hyphen and U+DFFF.
+   */
+  private static final int LEGACY_RANGE_FIRST = 0xD83C;
+
+  /** The last code point of the range removed under {@link CompatibilityMode#LEGACY}. */
+  private static final int LEGACY_RANGE_LAST = 0x10FC00;
+
+  /** The hyphen removed under {@link CompatibilityMode#LEGACY}. */
+  private static final int HYPHEN = '-';
+
   private static final EmojiCharSequenceNormalizer INSTANCE = new EmojiCharSequenceNormalizer();
 
+  /** {@return the shared, stateless instance} */
   public static EmojiCharSequenceNormalizer getInstance() {
     return INSTANCE;
   }
 
-  private static final Pattern EMOJI_REGEX =
-      Pattern.compile("[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+");
-
   /** {@inheritDoc} */
   @Override
-  public CharSequence normalize (CharSequence text) {
+  public CharSequence normalize(CharSequence text) {
     if (text == null) {
       throw new IllegalArgumentException("The text must not be null.");
     }
-    return EMOJI_REGEX.matcher(text).replaceAll(" ");
+    if (CompatibilityMode.current() == CompatibilityMode.LEGACY) {
+      return removeLegacyRuns(text);
+    }
+    UnicodeEmojiSequences sequences = UnicodeEmojiSequences.getInstance();
+    StringBuilder normalized = null;
+    int copiedThrough = 0;
+    for (int i = 0; i < text.length();) {
+      final int codePoint = Character.codePointAt(text, i);
+      if (!sequences.isCandidateStart(codePoint)) {
+        i += Character.charCount(codePoint);
+        continue;
+      }
+      UnicodeEmojiSequences.Candidate candidate = sequences.candidateAt(text, i);
+      if (candidate == null) {
+        i += Character.charCount(codePoint);
+      } else if (candidate.valid()) {
+        if (normalized == null) {
+          normalized = new StringBuilder(text.length());
+        }
+        normalized.append(text, copiedThrough, i).append(' ');
+        i = candidate.end();
+        copiedThrough = i;
+      } else {
+        i = candidate.end();
+      }
+    }
+    if (normalized == null) {
+      return text;
+    }
+    return normalized.append(text, copiedThrough, text.length()).toString();
+  }
+
+  /**
+   * Replaces each maximal run of code points of the legacy set with one space.
+   *
+   * @param text The text to scan; never null.
+   * @return The input itself when nothing matched, otherwise the normalized copy.
+   */
+  private CharSequence removeLegacyRuns(CharSequence text) {
+    final int length = text.length();
+    StringBuilder out = null;
+    int i = 0;
+    while (i < length) {
+      final int codePoint = Character.codePointAt(text, i);
+      final int next = i + Character.charCount(codePoint);
+      if (isLegacyMember(codePoint)) {
+        if (out == null) {
+          out = new StringBuilder(length).append(text, 0, i);
+        }
+        out.append(' ');
+        i = legacyRunEnd(text, next);
+      } else {
+        if (out != null) {
+          out.append(text, i, next);
+        }
+        i = next;
+      }
+    }
+    return out == null ? text : out.toString();
+  }
+
+  /**
+   * {@return the exclusive end of the run of legacy set members that starts at {@code from}}
+   *
+   * @param text The text to scan; never null.
+   * @param from The index to scan from.
+   */
+  private int legacyRunEnd(CharSequence text, int from) {
+    final int length = text.length();
+    int i = from;
+    while (i < length) {
+      final int codePoint = Character.codePointAt(text, i);
+      if (!isLegacyMember(codePoint)) {
+        break;
+      }
+      i += Character.charCount(codePoint);
+    }
+    return i;
+  }
+
+  /**
+   * {@return whether {@code codePoint} is removed under {@link CompatibilityMode#LEGACY}} An
+   * unpaired surrogate is passed as its own value, the way
+   * {@link Character#codePointAt(CharSequence, int)} reads it.
+   *
+   * @param codePoint The code point to test.
+   */
+  private boolean isLegacyMember(int codePoint) {
+    return codePoint == HYPHEN
+        || (codePoint >= LEGACY_RANGE_FIRST && codePoint <= LEGACY_RANGE_LAST);
+  }
+
+  /** {@return the shared instance, so deserialization keeps the singleton} */
+  private Object readResolve() {
+    return INSTANCE;
   }
 }
diff --git a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/HexCodePoints.java b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/HexCodePoints.java
new file mode 100644
index 000000000..878160de2
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/HexCodePoints.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package opennlp.tools.util.normalizer;
+
+import opennlp.tools.util.StringUtil;
+
+/**
+ * Reads the hex code point notation of the Unicode data files bundled in this package: one code
+ * point as hex digits ({@code 1F600}), a sequence as hex digits separated by whitespace
+ * ({@code 1F468 200D 1F469}), and an inclusive range as two code points joined by two dots
+ * ({@code 1F3FB..1F3FF}). Used by all Unicode data loaders of this package.
+ */
+final class HexCodePoints {
+
+  /** The separator between the first and the last code point of a range. */
+  static final String RANGE_SEPARATOR = "..";
+
+  private static final int RADIX = 16;
+
+  private HexCodePoints() {
+  }
+
+  /**
+   * Parses the hex digits between two indexes as one code point.
+   *
+   * @param hex The text holding the digits. Must not be {@code null}.
+   * @param start The index of the first digit.
+   * @param end The index after the last digit.
+   * @return The code point.
+   * @throws IllegalArgumentException Thrown if the region is empty, holds a character that is
+   *     not a hex digit, or names a value outside {@code [0, U+10FFFF]}.
+   */
+  static int parseCodePoint(CharSequence hex, int start, int end) {
+    if (end <= start) {
+      throw new IllegalArgumentException("Empty code point in: " + hex);
+    }
+    final int codePoint;
+    try {
+      codePoint = Integer.parseInt(hex, start, end, RADIX);
+    } catch (NumberFormatException e) {
+      throw new IllegalArgumentException("Invalid hex code point '"
+          + hex.subSequence(start, end) + "' in: " + hex, e);
+    }
+    if (codePoint < 0 || codePoint > Character.MAX_CODE_POINT) {
+      throw new IllegalArgumentException("Code point out of range '"
+          + hex.subSequence(start, end) + "' in: " + hex);
+    }
+    return codePoint;
+  }
+
+  /**
+   * Parses hex digits as one code point.
+   *
+   * @param hex The digits. Must not be {@code null}.
+   * @return The code point.
+   * @throws IllegalArgumentException Thrown if {@code hex} is empty, holds a character that is
+   *     not a hex digit, or names a value outside {@code [0, U+10FFFF]}.
+   */
+  static int parseCodePoint(CharSequence hex) {
+    return parseCodePoint(hex, 0, hex.length());
+  }
+
+  /**
+   * Decodes a sequence of hex code points separated by runs of Unicode whitespace into the
+   * characters they name. Leading and trailing whitespace is ignored.
+   *
+   * @param hex The sequence. Must not be {@code null}.
+   * @return The decoded characters, in order.
+   * @throws IllegalArgumentException Thrown if the sequence holds no code point or one of its
+   *     code points is malformed.
+   */
+  static String decodeSequence(CharSequence hex) {
+    final StringBuilder decoded = new StringBuilder();
+    for (String token : codePointTokens(hex)) {
+      decoded.appendCodePoint(parseCodePoint(token));
+    }
+    return decoded.toString();
+  }
+
+  /**
+   * Splits a sequence into its hex code point tokens.
+   *
+   * @param hex The sequence. Must not be {@code null}.
+   * @return The tokens in order, at least one.
+   * @throws IllegalArgumentException Thrown if the sequence holds no token.
+   */
+  static String[] codePointTokens(CharSequence hex) {
+    final String[] tokens = StringUtil.splitOnUnicodeWhitespace(hex);
+    if (tokens.length == 0) {
+      throw new IllegalArgumentException("Empty code point sequence: \"" + hex + "\"");
+    }
+    return tokens;
+  }
+
+  /**
+   * Parses one code point or an inclusive {@code XXXX..YYYY} range.
+   *
+   * @param hex The code point or range. Must not be {@code null}.
+   * @return The first and the last code point of the range; both the same for one code point.
+   * @throws IllegalArgumentException Thrown if a code point is malformed or the range ends
+   *     before it starts.
+   */
+  static int[] parseRange(CharSequence hex) {
+    final int dots = indexOfRangeSeparator(hex);
+    if (dots < 0) {
+      final int codePoint = parseCodePoint(hex);
+      return new int[] {codePoint, codePoint};
+    }
+    final int first = parseCodePoint(hex, 0, dots);
+    final int last = parseCodePoint(hex, dots + RANGE_SEPARATOR.length(), hex.length());
+    if (first > last) {
+      throw new IllegalArgumentException("Descending code point range: " + hex);
+    }
+    return new int[] {first, last};
+  }
+
+  private static int indexOfRangeSeparator(CharSequence hex) {
+    final int last = hex.length() - RANGE_SEPARATOR.length();
+    for (int i = 0; i <= last; i++) {
+      if (hex.charAt(i) == RANGE_SEPARATOR.charAt(0)
+          && hex.charAt(i + 1) == RANGE_SEPARATOR.charAt(1)) {
+        return i;
+      }
+    }
+    return -1;
+  }
+}
diff --git a/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/UnicodeEmojiSequences.java b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/UnicodeEmojiSequences.java
new file mode 100644
index 000000000..c625b2058
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/main/java/opennlp/tools/util/normalizer/UnicodeEmojiSequences.java
@@ -0,0 +1,428 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package opennlp.tools.util.normalizer;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UncheckedIOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.List;
+
+/**
+ * Finds complete emoji at a position of a text, from the bundled inventory of Unicode Emoji 17.0
+ * sequences.
+ *
+ * <p>A sequence is <em>fully-qualified</em> in the sense of
+ * <a href="https://www.unicode.org/reports/tr51/">UTS #51</a> when every code point that needs
+ * an emoji presentation selector has one, and <em>minimally-qualified</em> when only its first
+ * code point has it. The inventory holds the {@code fully-qualified} and
+ * {@code minimally-qualified} lines of {@code emoji-test.txt}, which cover single emoji, emoji
+ * with U+FE0F, flags, keycaps, skin tone modifier sequences, ZWJ sequences and tag sequences, in
+ * a trie, plus the {@code Emoji_Component} ranges of {@code emoji-data.txt}: the joiners,
+ * modifiers, selectors, flag letters and tags that occur inside sequences. A component on its
+ * own is never an emoji, but a stray one next to an emoji marks a malformed candidate that is
+ * kept as it is.</p>
+ */
+final class UnicodeEmojiSequences {
+
+  private static final String RESOURCE = "EmojiSequences.txt";
+
+  /** Prefix of a record holding one qualified sequence. */
+  private static final String SEQUENCE_RECORD = "S;";
+
+  /** Prefix of a record holding one {@code Emoji_Component} code point range. */
+  private static final String COMPONENT_RECORD = "C;";
+
+  /** First character of a comment line of the data file. */
+  private static final char COMMENT = '#';
+
+  /**
+   * U+FE0E asks for text presentation. It has no {@code Emoji_Component} property but it binds
+   * to the symbol before it the same way U+FE0F does, so it counts as a structural component.
+   */
+  private static final int VARIATION_SELECTOR_TEXT = 0xFE0E;
+
+  /** U+FE0F asks for emoji presentation. */
+  private static final int VARIATION_SELECTOR_EMOJI = 0xFE0F;
+
+  /**
+   * The bases of the keycap sequences: {@code #}, {@code *} and the ASCII digits. They have the
+   * {@code Emoji_Component} property, but as ordinary text characters they must never make a
+   * neighboring emoji a malformed candidate, so they are excluded from the structural
+   * components.
+   */
+  private static final CodePointSet KEYCAP_BASES =
+      CodePointSet.of('#', '*').union(CodePointSet.ofRange('0', '9'));
+
+  private final Node root;
+  private final int[][] componentRanges;
+  private final int sequenceCount;
+
+  /**
+   * Every code point a candidate can start with: the first code point of a sequence or a
+   * structural component. One bit test rejects nearly every position of ordinary text before
+   * the trie is touched.
+   */
+  private final BitSet candidateStarts;
+
+  private UnicodeEmojiSequences(Node root, int[][] componentRanges, int sequenceCount) {
+    this.root = root;
+    this.componentRanges = componentRanges;
+    this.sequenceCount = sequenceCount;
+    this.candidateStarts = new BitSet();
+    for (int i = 0; i < root.size; i++) {
+      candidateStarts.set(root.keys[i]);
+    }
+    for (int[] range : componentRanges) {
+      candidateStarts.set(range[0], range[1] + 1);
+    }
+    candidateStarts.set(VARIATION_SELECTOR_TEXT);
+  }
+
+  /**
+   * {@return the matcher built from the bundled data, loaded on first use}
+   *
+   * @throws ExceptionInInitializerError Thrown on the first call if the bundled data resource
+   *     is missing, cannot be read, or is malformed; the cause names the problem. Later calls
+   *     throw {@link NoClassDefFoundError}.
+   */
+  static UnicodeEmojiSequences getInstance() {
+    return Holder.INSTANCE;
+  }
+
+  /**
+   * {@return whether a code point can start a candidate} A cheap pre-check for callers that
+   * scan text, so the trie is only touched at positions that can hold an emoji.
+   *
+   * @param codePoint The code point to test.
+   */
+  boolean isCandidateStart(int codePoint) {
+    return candidateStarts.get(codePoint);
+  }
+
+  /** {@return the number of sequence records that were loaded} */
+  int sequenceCount() {
+    return sequenceCount;
+  }
+
+  /**
+   * Finds the emoji candidate that starts at a position.
+   *
+   * <p>The candidate is a run of complete sequences, or a malformed one: an emoji with a stray
+   * component such as a trailing joiner or an extra modifier, a leading component connected to
+   * an emoji, or a prefix of a sequence that continues with a component. A stray component
+   * connects only to the complete sequence right before it and to the one right after it;
+   * complete sequences that merely touch the malformed part are not included, so the caller
+   * removes them and sees the malformed candidate at a later call. One U+FE0F right after a
+   * complete sequence is part of it.</p>
+   *
+   * @param text The text to look into. Must not be {@code null}.
+   * @param start The index the candidate must start at.
+   * @return {@code null} if no candidate starts at {@code start}; otherwise a candidate that is
+   *     {@linkplain Candidate#valid() valid} when it consists of complete sequences only, and
+   *     invalid when it holds a stray component or an incomplete sequence, with
+   *     {@link Candidate#end()} as the index after it in both cases.
+   */
+  Candidate candidateAt(CharSequence text, int start) {
+    int first = Character.codePointAt(text, start);
+    if (!candidateStarts.get(first)) {
+      return null;
+    }
+    Walk walk = walk(text, start);
+    int end = walk.matchEnd();
+    boolean valid = end >= 0;
+    if (!valid) {
+      int prefixEnd = walk.prefixEnd();
+      if (!KEYCAP_BASES.contains(first) && prefixEnd > start && prefixEnd < text.length()
+          && isStructuralComponent(Character.codePointAt(text, prefixEnd))) {
+        end = prefixEnd;
+      } else if (isStructuralComponent(first)) {
+        end = start + Character.charCount(first);
+      } else {
+        return null;
+      }
+    }
+    // The start of the most recent complete sequence of the run, and whether the item before
+    // the current position is a stray component. A component connects only to the complete
+    // sequence right before it and to the one right after it.
+    int lastSequenceStart = start;
+    boolean afterComponent = !valid;
+    int position = end;
+    while (position < text.length()) {
+      int next = match(text, position);
+      if (next >= 0) {
+        if (!valid && !afterComponent) {
+          break;
+        }
+        lastSequenceStart = position;
+        position = next;
+        afterComponent = false;
+        continue;
+      }
+      int codePoint = Character.codePointAt(text, position);
+      if (!isStructuralComponent(codePoint)) {
+        break;
+      }
+      if (valid && lastSequenceStart > start) {
+        // Only the last complete sequence is connected to the stray component: the run ends
+        // before it, and the next call at that sequence yields the malformed candidate.
+        return new Candidate(lastSequenceStart, true);
+      }
+      valid = false;
+      afterComponent = true;
+      position += Character.charCount(codePoint);
+    }
+    return new Candidate(position, valid);
+  }
+
+  /**
+   * {@return the index after the longest complete sequence starting at {@code start}, or
+   * {@code -1} if none starts there}
+   *
+   * @param text The text to look into. Must not be {@code null}.
+   * @param start The index the sequence must start at.
+   */
+  private int match(CharSequence text, int start) {
+    return walk(text, start).matchEnd();
+  }
+
+  /**
+   * Walks the trie along the text from a position.
+   *
+   * @param text The text to look into. Must not be {@code null}.
+   * @param start The index the walk starts at.
+   * @return The index after the longest complete sequence, or {@code -1} if none, and the
+   *     index after the longest prefix of any sequence, which is {@code start} if none.
+   */
+  private Walk walk(CharSequence text, int start) {
+    Node node = root;
+    int longest = -1;
+    int i = start;
+    while (i < text.length()) {
+      int codePoint = Character.codePointAt(text, i);
+      Node child = node.child(codePoint);
+      if (child == null) {
+        break;
+      }
+      node = child;
+      i += Character.charCount(codePoint);
+      if (node.terminal) {
+        longest = i;
+      }
+    }
+    if (longest >= 0 && longest < text.length()
+        && Character.codePointAt(text, longest) == VARIATION_SELECTOR_EMOJI) {
+      // One redundant emoji presentation selector after a complete sequence belongs to it.
+      longest++;
+    }
+    return new Walk(longest, i);
+  }
+
+  /**
+   * {@return whether a code point is a joiner, modifier, selector, flag letter or tag that
+   * occurs inside sequences} These are the {@code Emoji_Component} ranges plus U+FE0E, without
+   * the keycap bases.
+   *
+   * @param codePoint The code point to test.
+   */
+  private boolean isStructuralComponent(int codePoint) {
+    if (KEYCAP_BASES.contains(codePoint)) {
+      return false;
+    }
+    if (codePoint == VARIATION_SELECTOR_TEXT) {
+      return true;
+    }
+    int low = 0;
+    int high = componentRanges.length - 1;
+    while (low <= high) {
+      int middle = (low + high) >>> 1;
+      int[] range = componentRanges[middle];
+      if (codePoint < range[0]) {
+        high = middle - 1;
+      } else if (codePoint > range[1]) {
+        low = middle + 1;
+      } else {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Loads the bundled data resource.
+   *
+   * @return The matcher.
+   * @throws IllegalStateException Thrown if the bundled data resource is missing.
+   * @throws UncheckedIOException Thrown if the bundled data resource cannot be read.
+   * @throws IllegalArgumentException Thrown if the bundled data is malformed.
+   */
+  private static UnicodeEmojiSequences load() {
+    try (InputStream in = UnicodeEmojiSequences.class.getResourceAsStream(RESOURCE)) {
+      if (in == null) {
+        throw new IllegalStateException("Missing emoji sequence data resource: " + RESOURCE);
+      }
+      return parse(in);
+    } catch (IOException e) {
+      throw new UncheckedIOException("Unable to read emoji sequence data resource " + RESOURCE, e);
+    }
+  }
+
+  /**
+   * Parses {@code S;} sequence and {@code C;} component range records into a matcher.
+   * Package-visible so the malformed-data handling can be exercised without the bundled
+   * resource.
+   *
+   * @param in The records to read, one per line; {@code #} lines are comments.
+   * @return The matcher.
+   * @throws IOException Thrown if reading {@code in} fails.
+   * @throws IllegalArgumentException Thrown if a record is malformed.
+   */
+  static UnicodeEmojiSequences parse(InputStream in) throws IOException {
+    Node root = new Node();
+    int sequences = 0;
+    List<int[]> ranges = new ArrayList<>();
+    try (BufferedReader reader = new BufferedReader(
+        new InputStreamReader(in, StandardCharsets.US_ASCII))) {
+      String line;
+      int lineNumber = 0;
+      while ((line = reader.readLine()) != null) {
+        lineNumber++;
+        if (line.isBlank() || line.charAt(0) == COMMENT) {
+          continue;
+        }
+        try {
+          if (line.startsWith(SEQUENCE_RECORD)) {
+            root.addSequence(line.substring(SEQUENCE_RECORD.length()));
+            sequences++;
+          } else if (line.startsWith(COMPONENT_RECORD)) {
+            ranges.add(HexCodePoints.parseRange(line.substring(COMPONENT_RECORD.length())));
+          } else {
+            throw new IllegalArgumentException("neither a comment nor a record");
+          }
+        } catch (IllegalArgumentException e) {
+          // Fail loud naming the bad line, the same way the sibling loaders do.
+          throw new IllegalArgumentException("Malformed emoji sequence data in " + RESOURCE
+              + " at line " + lineNumber + ": " + line, e);
+        }
+      }
+    }
+    if (sequences == 0) {
+      throw new IllegalArgumentException("No " + SEQUENCE_RECORD + " sequence record in "
+          + RESOURCE);
+    }
+    if (ranges.isEmpty()) {
+      throw new IllegalArgumentException("No " + COMPONENT_RECORD + " component range record in "
+          + RESOURCE);
+    }
+    return new UnicodeEmojiSequences(root, ranges.toArray(int[][]::new), sequences);
+  }
+
+  /**
+   * What {@link #candidateAt(CharSequence, int)} found at a position.
+   *
+   * @param end The index after the candidate.
+   * @param valid {@code true} if the candidate consists of complete sequences only and is to be
+   *     replaced; {@code false} if it holds a stray component or an incomplete sequence and is
+   *     to be kept as it is.
+   */
+  record Candidate(int end, boolean valid) {
+  }
+
+  /**
+   * The result of one trie walk.
+   *
+   * @param matchEnd The index after the longest complete sequence, or {@code -1} if none.
+   * @param prefixEnd The index after the longest prefix of any sequence.
+   */
+  private record Walk(int matchEnd, int prefixEnd) {
+  }
+
+  /**
+   * A trie node: the code points that may follow, and whether a sequence ends here. The
+   * children are kept as parallel arrays sorted by code point, so a lookup is a binary search
+   * over primitives without boxing.
+   */
+  private static final class Node {
+    private static final int[] NO_KEYS = new int[0];
+    private static final Node[] NO_CHILDREN = new Node[0];
+
+    private int[] keys = NO_KEYS;
+    private Node[] children = NO_CHILDREN;
+    private int size;
+    private boolean terminal;
+
+    /**
+     * {@return the child for a code point, or {@code null} if none}
+     *
+     * @param codePoint The code point to look up.
+     */
+    private Node child(int codePoint) {
+      final int index = Arrays.binarySearch(keys, 0, size, codePoint);
+      return index < 0 ? null : children[index];
+    }
+
+    /**
+     * Adds one sequence below this node, which is the root of the trie.
+     *
+     * @param sequence The hex code points of the sequence, separated by whitespace.
+     * @throws IllegalArgumentException Thrown if the sequence is empty or a code point is
+     *     malformed.
+     */
+    private void addSequence(String sequence) {
+      Node node = this;
+      for (String token : HexCodePoints.codePointTokens(sequence)) {
+        node = node.childOrAdd(HexCodePoints.parseCodePoint(token));
+      }
+      node.terminal = true;
+    }
+
+    /**
+     * {@return the child for a code point, added if it did not exist}
+     *
+     * @param codePoint The code point to look up or add.
+     */
+    private Node childOrAdd(int codePoint) {
+      int index = Arrays.binarySearch(keys, 0, size, codePoint);
+      if (index >= 0) {
+        return children[index];
+      }
+      index = -index - 1;
+      if (size == keys.length) {
+        final int capacity = Math.max(4, size * 2);
+        keys = Arrays.copyOf(keys, capacity);
+        children = Arrays.copyOf(children, capacity);
+      }
+      System.arraycopy(keys, index, keys, index + 1, size - index);
+      System.arraycopy(children, index, children, index + 1, size - index);
+      final Node child = new Node();
+      keys[index] = codePoint;
+      children[index] = child;
+      size++;
+      return child;
+    }
+  }
+
+  /** Loads the bundled data on first use of {@link #getInstance()}. */
+  private static final class Holder {
+    private static final UnicodeEmojiSequences INSTANCE = load();
+  }
+}
diff --git a/opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt b/opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
new file mode 100644
index 000000000..f91667437
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
@@ -0,0 +1,4994 @@
+# EmojiSequences.txt
+# Copyright (c) 1991-2025 Unicode, Inc.
+# For terms of use and license, see https://www.unicode.org/license.txt
+#
+# Unicode Emoji fully-qualified and minimally-qualified sequences, derived from
+# emoji-test.txt and emoji-data.txt under Unicode License V3.
+# Version: 17.0
+# emoji-test.txt SHA-256: 1d8a944f88d7952f7ef7c5167fef3c67995bcae24543949710231b03a201acda
+# emoji-data.txt SHA-256: 2cb2bb9455cda83e8481541ecf5b6dfda66a3bb89efa3fa7c5297eccf607b72b
+# S records are exact sequences; C records are Emoji_Component ranges.
+# Generated by dev/UnicodeEmojiSequenceGenerator.java; do not edit.
+S;1F600
+S;1F603
+S;1F604
+S;1F601
+S;1F606
+S;1F605
+S;1F923
+S;1F602
+S;1F642
+S;1F643
+S;1FAE0
+S;1F609
+S;1F60A
+S;1F607
+S;1F970
+S;1F60D
+S;1F929
+S;1F618
+S;1F617
+S;263A FE0F
+S;1F61A
+S;1F619
+S;1F972
+S;1F60B
+S;1F61B
+S;1F61C
+S;1F92A
+S;1F61D
+S;1F911
+S;1F917
+S;1F92D
+S;1FAE2
+S;1FAE3
+S;1F92B
+S;1F914
+S;1FAE1
+S;1F910
+S;1F928
+S;1F610
+S;1F611
+S;1F636
+S;1FAE5
+S;1F636 200D 1F32B FE0F
+S;1F636 200D 1F32B
+S;1F60F
+S;1F612
+S;1F644
+S;1F62C
+S;1F62E 200D 1F4A8
+S;1F925
+S;1FAE8
+S;1F642 200D 2194 FE0F
+S;1F642 200D 2194
+S;1F642 200D 2195 FE0F
+S;1F642 200D 2195
+S;1F60C
+S;1F614
+S;1F62A
+S;1F924
+S;1F634
+S;1FAE9
+S;1F637
+S;1F912
+S;1F915
+S;1F922
+S;1F92E
+S;1F927
+S;1F975
+S;1F976
+S;1F974
+S;1F635
+S;1F635 200D 1F4AB
+S;1F92F
+S;1F920
+S;1F973
+S;1F978
+S;1F60E
+S;1F913
+S;1F9D0
+S;1F615
+S;1FAE4
+S;1F61F
+S;1F641
+S;2639 FE0F
+S;1F62E
+S;1F62F
+S;1F632
+S;1F633
+S;1FAEA
+S;1F97A
+S;1F979
+S;1F626
+S;1F627
+S;1F628
+S;1F630
+S;1F625
+S;1F622
+S;1F62D
+S;1F631
+S;1F616
+S;1F623
+S;1F61E
+S;1F613
+S;1F629
+S;1F62B
+S;1F971
+S;1F624
+S;1F621
+S;1F620
+S;1F92C
+S;1F608
+S;1F47F
+S;1F480
+S;2620 FE0F
+S;1F4A9
+S;1F921
+S;1F479
+S;1F47A
+S;1F47B
+S;1F47D
+S;1F47E
+S;1F916
+S;1F63A
+S;1F638
+S;1F639
+S;1F63B
+S;1F63C
+S;1F63D
+S;1F640
+S;1F63F
+S;1F63E
+S;1F648
+S;1F649
+S;1F64A
+S;1F48C
+S;1F498
+S;1F49D
+S;1F496
+S;1F497
+S;1F493
+S;1F49E
+S;1F495
+S;1F49F
+S;2763 FE0F
+S;1F494
+S;2764 FE0F 200D 1F525
+S;2764 FE0F 200D 1FA79
+S;2764 FE0F
+S;1FA77
+S;1F9E1
+S;1F49B
+S;1F49A
+S;1F499
+S;1FA75
+S;1F49C
+S;1F90E
+S;1F5A4
+S;1FA76
+S;1F90D
+S;1F48B
+S;1F4AF
+S;1F4A2
+S;1FAEF
+S;1F4A5
+S;1F4AB
+S;1F4A6
+S;1F4A8
+S;1F573 FE0F
+S;1F4AC
+S;1F441 FE0F 200D 1F5E8 FE0F
+S;1F441 FE0F 200D 1F5E8
+S;1F5E8 FE0F
+S;1F5EF FE0F
+S;1F4AD
+S;1F4A4
+S;1F44B
+S;1F44B 1F3FB
+S;1F44B 1F3FC
+S;1F44B 1F3FD
+S;1F44B 1F3FE
+S;1F44B 1F3FF
+S;1F91A
+S;1F91A 1F3FB
+S;1F91A 1F3FC
+S;1F91A 1F3FD
+S;1F91A 1F3FE
+S;1F91A 1F3FF
+S;1F590 FE0F
+S;1F590 1F3FB
+S;1F590 1F3FC
+S;1F590 1F3FD
+S;1F590 1F3FE
+S;1F590 1F3FF
+S;270B
+S;270B 1F3FB
+S;270B 1F3FC
+S;270B 1F3FD
+S;270B 1F3FE
+S;270B 1F3FF
+S;1F596
+S;1F596 1F3FB
+S;1F596 1F3FC
+S;1F596 1F3FD
+S;1F596 1F3FE
+S;1F596 1F3FF
+S;1FAF1
+S;1FAF1 1F3FB
+S;1FAF1 1F3FC
+S;1FAF1 1F3FD
+S;1FAF1 1F3FE
+S;1FAF1 1F3FF
+S;1FAF2
+S;1FAF2 1F3FB
+S;1FAF2 1F3FC
+S;1FAF2 1F3FD
+S;1FAF2 1F3FE
+S;1FAF2 1F3FF
+S;1FAF3
+S;1FAF3 1F3FB
+S;1FAF3 1F3FC
+S;1FAF3 1F3FD
+S;1FAF3 1F3FE
+S;1FAF3 1F3FF
+S;1FAF4
+S;1FAF4 1F3FB
+S;1FAF4 1F3FC
+S;1FAF4 1F3FD
+S;1FAF4 1F3FE
+S;1FAF4 1F3FF
+S;1FAF7
+S;1FAF7 1F3FB
+S;1FAF7 1F3FC
+S;1FAF7 1F3FD
+S;1FAF7 1F3FE
+S;1FAF7 1F3FF
+S;1FAF8
+S;1FAF8 1F3FB
+S;1FAF8 1F3FC
+S;1FAF8 1F3FD
+S;1FAF8 1F3FE
+S;1FAF8 1F3FF
+S;1F44C
+S;1F44C 1F3FB
+S;1F44C 1F3FC
+S;1F44C 1F3FD
+S;1F44C 1F3FE
+S;1F44C 1F3FF
+S;1F90C
+S;1F90C 1F3FB
+S;1F90C 1F3FC
+S;1F90C 1F3FD
+S;1F90C 1F3FE
+S;1F90C 1F3FF
+S;1F90F
+S;1F90F 1F3FB
+S;1F90F 1F3FC
+S;1F90F 1F3FD
+S;1F90F 1F3FE
+S;1F90F 1F3FF
+S;270C FE0F
+S;270C 1F3FB
+S;270C 1F3FC
+S;270C 1F3FD
+S;270C 1F3FE
+S;270C 1F3FF
+S;1F91E
+S;1F91E 1F3FB
+S;1F91E 1F3FC
+S;1F91E 1F3FD
+S;1F91E 1F3FE
+S;1F91E 1F3FF
+S;1FAF0
+S;1FAF0 1F3FB
+S;1FAF0 1F3FC
+S;1FAF0 1F3FD
+S;1FAF0 1F3FE
+S;1FAF0 1F3FF
+S;1F91F
+S;1F91F 1F3FB
+S;1F91F 1F3FC
+S;1F91F 1F3FD
+S;1F91F 1F3FE
+S;1F91F 1F3FF
+S;1F918
+S;1F918 1F3FB
+S;1F918 1F3FC
+S;1F918 1F3FD
+S;1F918 1F3FE
+S;1F918 1F3FF
+S;1F919
+S;1F919 1F3FB
+S;1F919 1F3FC
+S;1F919 1F3FD
+S;1F919 1F3FE
+S;1F919 1F3FF
+S;1F448
+S;1F448 1F3FB
+S;1F448 1F3FC
+S;1F448 1F3FD
+S;1F448 1F3FE
+S;1F448 1F3FF
+S;1F449
+S;1F449 1F3FB
+S;1F449 1F3FC
+S;1F449 1F3FD
+S;1F449 1F3FE
+S;1F449 1F3FF
+S;1F446
+S;1F446 1F3FB
+S;1F446 1F3FC
+S;1F446 1F3FD
+S;1F446 1F3FE
+S;1F446 1F3FF
+S;1F595
+S;1F595 1F3FB
+S;1F595 1F3FC
+S;1F595 1F3FD
+S;1F595 1F3FE
+S;1F595 1F3FF
+S;1F447
+S;1F447 1F3FB
+S;1F447 1F3FC
+S;1F447 1F3FD
+S;1F447 1F3FE
+S;1F447 1F3FF
+S;261D FE0F
+S;261D 1F3FB
+S;261D 1F3FC
+S;261D 1F3FD
+S;261D 1F3FE
+S;261D 1F3FF
+S;1FAF5
+S;1FAF5 1F3FB
+S;1FAF5 1F3FC
+S;1FAF5 1F3FD
+S;1FAF5 1F3FE
+S;1FAF5 1F3FF
+S;1F44D
+S;1F44D 1F3FB
+S;1F44D 1F3FC
+S;1F44D 1F3FD
+S;1F44D 1F3FE
+S;1F44D 1F3FF
+S;1F44E
+S;1F44E 1F3FB
+S;1F44E 1F3FC
+S;1F44E 1F3FD
+S;1F44E 1F3FE
+S;1F44E 1F3FF
+S;270A
+S;270A 1F3FB
+S;270A 1F3FC
+S;270A 1F3FD
+S;270A 1F3FE
+S;270A 1F3FF
+S;1F44A
+S;1F44A 1F3FB
+S;1F44A 1F3FC
+S;1F44A 1F3FD
+S;1F44A 1F3FE
+S;1F44A 1F3FF
+S;1F91B
+S;1F91B 1F3FB
+S;1F91B 1F3FC
+S;1F91B 1F3FD
+S;1F91B 1F3FE
+S;1F91B 1F3FF
+S;1F91C
+S;1F91C 1F3FB
+S;1F91C 1F3FC
+S;1F91C 1F3FD
+S;1F91C 1F3FE
+S;1F91C 1F3FF
+S;1F44F
+S;1F44F 1F3FB
+S;1F44F 1F3FC
+S;1F44F 1F3FD
+S;1F44F 1F3FE
+S;1F44F 1F3FF
+S;1F64C
+S;1F64C 1F3FB
+S;1F64C 1F3FC
+S;1F64C 1F3FD
+S;1F64C 1F3FE
+S;1F64C 1F3FF
+S;1FAF6
+S;1FAF6 1F3FB
+S;1FAF6 1F3FC
+S;1FAF6 1F3FD
+S;1FAF6 1F3FE
+S;1FAF6 1F3FF
+S;1F450
+S;1F450 1F3FB
+S;1F450 1F3FC
+S;1F450 1F3FD
+S;1F450 1F3FE
+S;1F450 1F3FF
+S;1F932
+S;1F932 1F3FB
+S;1F932 1F3FC
+S;1F932 1F3FD
+S;1F932 1F3FE
+S;1F932 1F3FF
+S;1F91D
+S;1F91D 1F3FB
+S;1F91D 1F3FC
+S;1F91D 1F3FD
+S;1F91D 1F3FE
+S;1F91D 1F3FF
+S;1FAF1 1F3FB 200D 1FAF2 1F3FC
+S;1FAF1 1F3FB 200D 1FAF2 1F3FD
+S;1FAF1 1F3FB 200D 1FAF2 1F3FE
+S;1FAF1 1F3FB 200D 1FAF2 1F3FF
+S;1FAF1 1F3FC 200D 1FAF2 1F3FB
+S;1FAF1 1F3FC 200D 1FAF2 1F3FD
+S;1FAF1 1F3FC 200D 1FAF2 1F3FE
+S;1FAF1 1F3FC 200D 1FAF2 1F3FF
+S;1FAF1 1F3FD 200D 1FAF2 1F3FB
+S;1FAF1 1F3FD 200D 1FAF2 1F3FC
+S;1FAF1 1F3FD 200D 1FAF2 1F3FE
+S;1FAF1 1F3FD 200D 1FAF2 1F3FF
+S;1FAF1 1F3FE 200D 1FAF2 1F3FB
+S;1FAF1 1F3FE 200D 1FAF2 1F3FC
+S;1FAF1 1F3FE 200D 1FAF2 1F3FD
+S;1FAF1 1F3FE 200D 1FAF2 1F3FF
+S;1FAF1 1F3FF 200D 1FAF2 1F3FB
+S;1FAF1 1F3FF 200D 1FAF2 1F3FC
+S;1FAF1 1F3FF 200D 1FAF2 1F3FD
+S;1FAF1 1F3FF 200D 1FAF2 1F3FE
+S;1F64F
+S;1F64F 1F3FB
+S;1F64F 1F3FC
+S;1F64F 1F3FD
+S;1F64F 1F3FE
+S;1F64F 1F3FF
+S;270D FE0F
+S;270D 1F3FB
+S;270D 1F3FC
+S;270D 1F3FD
+S;270D 1F3FE
+S;270D 1F3FF
+S;1F485
+S;1F485 1F3FB
+S;1F485 1F3FC
+S;1F485 1F3FD
+S;1F485 1F3FE
+S;1F485 1F3FF
+S;1F933
+S;1F933 1F3FB
+S;1F933 1F3FC
+S;1F933 1F3FD
+S;1F933 1F3FE
+S;1F933 1F3FF
+S;1F4AA
+S;1F4AA 1F3FB
+S;1F4AA 1F3FC
+S;1F4AA 1F3FD
+S;1F4AA 1F3FE
+S;1F4AA 1F3FF
+S;1F9BE
+S;1F9BF
+S;1F9B5
+S;1F9B5 1F3FB
+S;1F9B5 1F3FC
+S;1F9B5 1F3FD
+S;1F9B5 1F3FE
+S;1F9B5 1F3FF
+S;1F9B6
+S;1F9B6 1F3FB
+S;1F9B6 1F3FC
+S;1F9B6 1F3FD
+S;1F9B6 1F3FE
+S;1F9B6 1F3FF
+S;1F442
+S;1F442 1F3FB
+S;1F442 1F3FC
+S;1F442 1F3FD
+S;1F442 1F3FE
+S;1F442 1F3FF
+S;1F9BB
+S;1F9BB 1F3FB
+S;1F9BB 1F3FC
+S;1F9BB 1F3FD
+S;1F9BB 1F3FE
+S;1F9BB 1F3FF
+S;1F443
+S;1F443 1F3FB
+S;1F443 1F3FC
+S;1F443 1F3FD
+S;1F443 1F3FE
+S;1F443 1F3FF
+S;1F9E0
+S;1FAC0
+S;1FAC1
+S;1F9B7
+S;1F9B4
+S;1F440
+S;1F441 FE0F
+S;1F445
+S;1F444
+S;1FAE6
+S;1F476
+S;1F476 1F3FB
+S;1F476 1F3FC
+S;1F476 1F3FD
+S;1F476 1F3FE
+S;1F476 1F3FF
+S;1F9D2
+S;1F9D2 1F3FB
+S;1F9D2 1F3FC
+S;1F9D2 1F3FD
+S;1F9D2 1F3FE
+S;1F9D2 1F3FF
+S;1F466
+S;1F466 1F3FB
+S;1F466 1F3FC
+S;1F466 1F3FD
+S;1F466 1F3FE
+S;1F466 1F3FF
+S;1F467
+S;1F467 1F3FB
+S;1F467 1F3FC
+S;1F467 1F3FD
+S;1F467 1F3FE
+S;1F467 1F3FF
+S;1F9D1
+S;1F9D1 1F3FB
+S;1F9D1 1F3FC
+S;1F9D1 1F3FD
+S;1F9D1 1F3FE
+S;1F9D1 1F3FF
+S;1F471
+S;1F471 1F3FB
+S;1F471 1F3FC
+S;1F471 1F3FD
+S;1F471 1F3FE
+S;1F471 1F3FF
+S;1F468
+S;1F468 1F3FB
+S;1F468 1F3FC
+S;1F468 1F3FD
+S;1F468 1F3FE
+S;1F468 1F3FF
+S;1F9D4
+S;1F9D4 1F3FB
+S;1F9D4 1F3FC
+S;1F9D4 1F3FD
+S;1F9D4 1F3FE
+S;1F9D4 1F3FF
+S;1F9D4 200D 2642 FE0F
+S;1F9D4 200D 2642
+S;1F9D4 1F3FB 200D 2642 FE0F
+S;1F9D4 1F3FB 200D 2642
+S;1F9D4 1F3FC 200D 2642 FE0F
+S;1F9D4 1F3FC 200D 2642
+S;1F9D4 1F3FD 200D 2642 FE0F
+S;1F9D4 1F3FD 200D 2642
+S;1F9D4 1F3FE 200D 2642 FE0F
+S;1F9D4 1F3FE 200D 2642
+S;1F9D4 1F3FF 200D 2642 FE0F
+S;1F9D4 1F3FF 200D 2642
+S;1F9D4 200D 2640 FE0F
+S;1F9D4 200D 2640
+S;1F9D4 1F3FB 200D 2640 FE0F
+S;1F9D4 1F3FB 200D 2640
+S;1F9D4 1F3FC 200D 2640 FE0F
+S;1F9D4 1F3FC 200D 2640
+S;1F9D4 1F3FD 200D 2640 FE0F
+S;1F9D4 1F3FD 200D 2640
+S;1F9D4 1F3FE 200D 2640 FE0F
+S;1F9D4 1F3FE 200D 2640
+S;1F9D4 1F3FF 200D 2640 FE0F
+S;1F9D4 1F3FF 200D 2640
+S;1F468 200D 1F9B0
+S;1F468 1F3FB 200D 1F9B0
+S;1F468 1F3FC 200D 1F9B0
+S;1F468 1F3FD 200D 1F9B0
+S;1F468 1F3FE 200D 1F9B0
+S;1F468 1F3FF 200D 1F9B0
+S;1F468 200D 1F9B1
+S;1F468 1F3FB 200D 1F9B1
+S;1F468 1F3FC 200D 1F9B1
+S;1F468 1F3FD 200D 1F9B1
+S;1F468 1F3FE 200D 1F9B1
+S;1F468 1F3FF 200D 1F9B1
+S;1F468 200D 1F9B3
+S;1F468 1F3FB 200D 1F9B3
+S;1F468 1F3FC 200D 1F9B3
+S;1F468 1F3FD 200D 1F9B3
+S;1F468 1F3FE 200D 1F9B3
+S;1F468 1F3FF 200D 1F9B3
+S;1F468 200D 1F9B2
+S;1F468 1F3FB 200D 1F9B2
+S;1F468 1F3FC 200D 1F9B2
+S;1F468 1F3FD 200D 1F9B2
+S;1F468 1F3FE 200D 1F9B2
+S;1F468 1F3FF 200D 1F9B2
+S;1F469
+S;1F469 1F3FB
+S;1F469 1F3FC
+S;1F469 1F3FD
+S;1F469 1F3FE
+S;1F469 1F3FF
+S;1F469 200D 1F9B0
+S;1F469 1F3FB 200D 1F9B0
+S;1F469 1F3FC 200D 1F9B0
+S;1F469 1F3FD 200D 1F9B0
+S;1F469 1F3FE 200D 1F9B0
+S;1F469 1F3FF 200D 1F9B0
+S;1F9D1 200D 1F9B0
+S;1F9D1 1F3FB 200D 1F9B0
+S;1F9D1 1F3FC 200D 1F9B0
+S;1F9D1 1F3FD 200D 1F9B0
+S;1F9D1 1F3FE 200D 1F9B0
+S;1F9D1 1F3FF 200D 1F9B0
+S;1F469 200D 1F9B1
+S;1F469 1F3FB 200D 1F9B1
+S;1F469 1F3FC 200D 1F9B1
+S;1F469 1F3FD 200D 1F9B1
+S;1F469 1F3FE 200D 1F9B1
+S;1F469 1F3FF 200D 1F9B1
+S;1F9D1 200D 1F9B1
+S;1F9D1 1F3FB 200D 1F9B1
+S;1F9D1 1F3FC 200D 1F9B1
+S;1F9D1 1F3FD 200D 1F9B1
+S;1F9D1 1F3FE 200D 1F9B1
+S;1F9D1 1F3FF 200D 1F9B1
+S;1F469 200D 1F9B3
+S;1F469 1F3FB 200D 1F9B3
+S;1F469 1F3FC 200D 1F9B3
+S;1F469 1F3FD 200D 1F9B3
+S;1F469 1F3FE 200D 1F9B3
+S;1F469 1F3FF 200D 1F9B3
+S;1F9D1 200D 1F9B3
+S;1F9D1 1F3FB 200D 1F9B3
+S;1F9D1 1F3FC 200D 1F9B3
+S;1F9D1 1F3FD 200D 1F9B3
+S;1F9D1 1F3FE 200D 1F9B3
+S;1F9D1 1F3FF 200D 1F9B3
+S;1F469 200D 1F9B2
+S;1F469 1F3FB 200D 1F9B2
+S;1F469 1F3FC 200D 1F9B2
+S;1F469 1F3FD 200D 1F9B2
+S;1F469 1F3FE 200D 1F9B2
+S;1F469 1F3FF 200D 1F9B2
+S;1F9D1 200D 1F9B2
+S;1F9D1 1F3FB 200D 1F9B2
+S;1F9D1 1F3FC 200D 1F9B2
+S;1F9D1 1F3FD 200D 1F9B2
+S;1F9D1 1F3FE 200D 1F9B2
+S;1F9D1 1F3FF 200D 1F9B2
+S;1F471 200D 2640 FE0F
+S;1F471 200D 2640
+S;1F471 1F3FB 200D 2640 FE0F
+S;1F471 1F3FB 200D 2640
+S;1F471 1F3FC 200D 2640 FE0F
+S;1F471 1F3FC 200D 2640
+S;1F471 1F3FD 200D 2640 FE0F
+S;1F471 1F3FD 200D 2640
+S;1F471 1F3FE 200D 2640 FE0F
+S;1F471 1F3FE 200D 2640
+S;1F471 1F3FF 200D 2640 FE0F
+S;1F471 1F3FF 200D 2640
+S;1F471 200D 2642 FE0F
+S;1F471 200D 2642
+S;1F471 1F3FB 200D 2642 FE0F
+S;1F471 1F3FB 200D 2642
+S;1F471 1F3FC 200D 2642 FE0F
+S;1F471 1F3FC 200D 2642
+S;1F471 1F3FD 200D 2642 FE0F
+S;1F471 1F3FD 200D 2642
+S;1F471 1F3FE 200D 2642 FE0F
+S;1F471 1F3FE 200D 2642
+S;1F471 1F3FF 200D 2642 FE0F
+S;1F471 1F3FF 200D 2642
+S;1F9D3
+S;1F9D3 1F3FB
+S;1F9D3 1F3FC
+S;1F9D3 1F3FD
+S;1F9D3 1F3FE
+S;1F9D3 1F3FF
+S;1F474
+S;1F474 1F3FB
+S;1F474 1F3FC
+S;1F474 1F3FD
+S;1F474 1F3FE
+S;1F474 1F3FF
+S;1F475
+S;1F475 1F3FB
+S;1F475 1F3FC
+S;1F475 1F3FD
+S;1F475 1F3FE
+S;1F475 1F3FF
+S;1F64D
+S;1F64D 1F3FB
+S;1F64D 1F3FC
+S;1F64D 1F3FD
+S;1F64D 1F3FE
+S;1F64D 1F3FF
+S;1F64D 200D 2642 FE0F
+S;1F64D 200D 2642
+S;1F64D 1F3FB 200D 2642 FE0F
+S;1F64D 1F3FB 200D 2642
+S;1F64D 1F3FC 200D 2642 FE0F
+S;1F64D 1F3FC 200D 2642
+S;1F64D 1F3FD 200D 2642 FE0F
+S;1F64D 1F3FD 200D 2642
+S;1F64D 1F3FE 200D 2642 FE0F
+S;1F64D 1F3FE 200D 2642
+S;1F64D 1F3FF 200D 2642 FE0F
+S;1F64D 1F3FF 200D 2642
+S;1F64D 200D 2640 FE0F
+S;1F64D 200D 2640
+S;1F64D 1F3FB 200D 2640 FE0F
+S;1F64D 1F3FB 200D 2640
+S;1F64D 1F3FC 200D 2640 FE0F
+S;1F64D 1F3FC 200D 2640
+S;1F64D 1F3FD 200D 2640 FE0F
+S;1F64D 1F3FD 200D 2640
+S;1F64D 1F3FE 200D 2640 FE0F
+S;1F64D 1F3FE 200D 2640
+S;1F64D 1F3FF 200D 2640 FE0F
+S;1F64D 1F3FF 200D 2640
+S;1F64E
+S;1F64E 1F3FB
+S;1F64E 1F3FC
+S;1F64E 1F3FD
+S;1F64E 1F3FE
+S;1F64E 1F3FF
+S;1F64E 200D 2642 FE0F
+S;1F64E 200D 2642
+S;1F64E 1F3FB 200D 2642 FE0F
+S;1F64E 1F3FB 200D 2642
+S;1F64E 1F3FC 200D 2642 FE0F
+S;1F64E 1F3FC 200D 2642
+S;1F64E 1F3FD 200D 2642 FE0F
+S;1F64E 1F3FD 200D 2642
+S;1F64E 1F3FE 200D 2642 FE0F
+S;1F64E 1F3FE 200D 2642
+S;1F64E 1F3FF 200D 2642 FE0F
+S;1F64E 1F3FF 200D 2642
+S;1F64E 200D 2640 FE0F
+S;1F64E 200D 2640
+S;1F64E 1F3FB 200D 2640 FE0F
+S;1F64E 1F3FB 200D 2640
+S;1F64E 1F3FC 200D 2640 FE0F
+S;1F64E 1F3FC 200D 2640
+S;1F64E 1F3FD 200D 2640 FE0F
+S;1F64E 1F3FD 200D 2640
+S;1F64E 1F3FE 200D 2640 FE0F
+S;1F64E 1F3FE 200D 2640
+S;1F64E 1F3FF 200D 2640 FE0F
+S;1F64E 1F3FF 200D 2640
+S;1F645
+S;1F645 1F3FB
+S;1F645 1F3FC
+S;1F645 1F3FD
+S;1F645 1F3FE
+S;1F645 1F3FF
+S;1F645 200D 2642 FE0F
+S;1F645 200D 2642
+S;1F645 1F3FB 200D 2642 FE0F
+S;1F645 1F3FB 200D 2642
+S;1F645 1F3FC 200D 2642 FE0F
+S;1F645 1F3FC 200D 2642
+S;1F645 1F3FD 200D 2642 FE0F
+S;1F645 1F3FD 200D 2642
+S;1F645 1F3FE 200D 2642 FE0F
+S;1F645 1F3FE 200D 2642
+S;1F645 1F3FF 200D 2642 FE0F
+S;1F645 1F3FF 200D 2642
+S;1F645 200D 2640 FE0F
+S;1F645 200D 2640
+S;1F645 1F3FB 200D 2640 FE0F
+S;1F645 1F3FB 200D 2640
+S;1F645 1F3FC 200D 2640 FE0F
+S;1F645 1F3FC 200D 2640
+S;1F645 1F3FD 200D 2640 FE0F
+S;1F645 1F3FD 200D 2640
+S;1F645 1F3FE 200D 2640 FE0F
+S;1F645 1F3FE 200D 2640
+S;1F645 1F3FF 200D 2640 FE0F
+S;1F645 1F3FF 200D 2640
+S;1F646
+S;1F646 1F3FB
+S;1F646 1F3FC
+S;1F646 1F3FD
+S;1F646 1F3FE
+S;1F646 1F3FF
+S;1F646 200D 2642 FE0F
+S;1F646 200D 2642
+S;1F646 1F3FB 200D 2642 FE0F
+S;1F646 1F3FB 200D 2642
+S;1F646 1F3FC 200D 2642 FE0F
+S;1F646 1F3FC 200D 2642
+S;1F646 1F3FD 200D 2642 FE0F
+S;1F646 1F3FD 200D 2642
+S;1F646 1F3FE 200D 2642 FE0F
+S;1F646 1F3FE 200D 2642
+S;1F646 1F3FF 200D 2642 FE0F
+S;1F646 1F3FF 200D 2642
+S;1F646 200D 2640 FE0F
+S;1F646 200D 2640
+S;1F646 1F3FB 200D 2640 FE0F
+S;1F646 1F3FB 200D 2640
+S;1F646 1F3FC 200D 2640 FE0F
+S;1F646 1F3FC 200D 2640
+S;1F646 1F3FD 200D 2640 FE0F
+S;1F646 1F3FD 200D 2640
+S;1F646 1F3FE 200D 2640 FE0F
+S;1F646 1F3FE 200D 2640
+S;1F646 1F3FF 200D 2640 FE0F
+S;1F646 1F3FF 200D 2640
+S;1F481
+S;1F481 1F3FB
+S;1F481 1F3FC
+S;1F481 1F3FD
+S;1F481 1F3FE
+S;1F481 1F3FF
+S;1F481 200D 2642 FE0F
+S;1F481 200D 2642
+S;1F481 1F3FB 200D 2642 FE0F
+S;1F481 1F3FB 200D 2642
+S;1F481 1F3FC 200D 2642 FE0F
+S;1F481 1F3FC 200D 2642
+S;1F481 1F3FD 200D 2642 FE0F
+S;1F481 1F3FD 200D 2642
+S;1F481 1F3FE 200D 2642 FE0F
+S;1F481 1F3FE 200D 2642
+S;1F481 1F3FF 200D 2642 FE0F
+S;1F481 1F3FF 200D 2642
+S;1F481 200D 2640 FE0F
+S;1F481 200D 2640
+S;1F481 1F3FB 200D 2640 FE0F
+S;1F481 1F3FB 200D 2640
+S;1F481 1F3FC 200D 2640 FE0F
+S;1F481 1F3FC 200D 2640
+S;1F481 1F3FD 200D 2640 FE0F
+S;1F481 1F3FD 200D 2640
+S;1F481 1F3FE 200D 2640 FE0F
+S;1F481 1F3FE 200D 2640
+S;1F481 1F3FF 200D 2640 FE0F
+S;1F481 1F3FF 200D 2640
+S;1F64B
+S;1F64B 1F3FB
+S;1F64B 1F3FC
+S;1F64B 1F3FD
+S;1F64B 1F3FE
+S;1F64B 1F3FF
+S;1F64B 200D 2642 FE0F
+S;1F64B 200D 2642
+S;1F64B 1F3FB 200D 2642 FE0F
+S;1F64B 1F3FB 200D 2642
+S;1F64B 1F3FC 200D 2642 FE0F
+S;1F64B 1F3FC 200D 2642
+S;1F64B 1F3FD 200D 2642 FE0F
+S;1F64B 1F3FD 200D 2642
+S;1F64B 1F3FE 200D 2642 FE0F
+S;1F64B 1F3FE 200D 2642
+S;1F64B 1F3FF 200D 2642 FE0F
+S;1F64B 1F3FF 200D 2642
+S;1F64B 200D 2640 FE0F
+S;1F64B 200D 2640
+S;1F64B 1F3FB 200D 2640 FE0F
+S;1F64B 1F3FB 200D 2640
+S;1F64B 1F3FC 200D 2640 FE0F
+S;1F64B 1F3FC 200D 2640
+S;1F64B 1F3FD 200D 2640 FE0F
+S;1F64B 1F3FD 200D 2640
+S;1F64B 1F3FE 200D 2640 FE0F
+S;1F64B 1F3FE 200D 2640
+S;1F64B 1F3FF 200D 2640 FE0F
+S;1F64B 1F3FF 200D 2640
+S;1F9CF
+S;1F9CF 1F3FB
+S;1F9CF 1F3FC
+S;1F9CF 1F3FD
+S;1F9CF 1F3FE
+S;1F9CF 1F3FF
+S;1F9CF 200D 2642 FE0F
+S;1F9CF 200D 2642
+S;1F9CF 1F3FB 200D 2642 FE0F
+S;1F9CF 1F3FB 200D 2642
+S;1F9CF 1F3FC 200D 2642 FE0F
+S;1F9CF 1F3FC 200D 2642
+S;1F9CF 1F3FD 200D 2642 FE0F
+S;1F9CF 1F3FD 200D 2642
+S;1F9CF 1F3FE 200D 2642 FE0F
+S;1F9CF 1F3FE 200D 2642
+S;1F9CF 1F3FF 200D 2642 FE0F
+S;1F9CF 1F3FF 200D 2642
+S;1F9CF 200D 2640 FE0F
+S;1F9CF 200D 2640
+S;1F9CF 1F3FB 200D 2640 FE0F
+S;1F9CF 1F3FB 200D 2640
+S;1F9CF 1F3FC 200D 2640 FE0F
+S;1F9CF 1F3FC 200D 2640
+S;1F9CF 1F3FD 200D 2640 FE0F
+S;1F9CF 1F3FD 200D 2640
+S;1F9CF 1F3FE 200D 2640 FE0F
+S;1F9CF 1F3FE 200D 2640
+S;1F9CF 1F3FF 200D 2640 FE0F
+S;1F9CF 1F3FF 200D 2640
+S;1F647
+S;1F647 1F3FB
+S;1F647 1F3FC
+S;1F647 1F3FD
+S;1F647 1F3FE
+S;1F647 1F3FF
+S;1F647 200D 2642 FE0F
+S;1F647 200D 2642
+S;1F647 1F3FB 200D 2642 FE0F
+S;1F647 1F3FB 200D 2642
+S;1F647 1F3FC 200D 2642 FE0F
+S;1F647 1F3FC 200D 2642
+S;1F647 1F3FD 200D 2642 FE0F
+S;1F647 1F3FD 200D 2642
+S;1F647 1F3FE 200D 2642 FE0F
+S;1F647 1F3FE 200D 2642
+S;1F647 1F3FF 200D 2642 FE0F
+S;1F647 1F3FF 200D 2642
+S;1F647 200D 2640 FE0F
+S;1F647 200D 2640
+S;1F647 1F3FB 200D 2640 FE0F
+S;1F647 1F3FB 200D 2640
+S;1F647 1F3FC 200D 2640 FE0F
+S;1F647 1F3FC 200D 2640
+S;1F647 1F3FD 200D 2640 FE0F
+S;1F647 1F3FD 200D 2640
+S;1F647 1F3FE 200D 2640 FE0F
+S;1F647 1F3FE 200D 2640
+S;1F647 1F3FF 200D 2640 FE0F
+S;1F647 1F3FF 200D 2640
+S;1F926
+S;1F926 1F3FB
+S;1F926 1F3FC
+S;1F926 1F3FD
+S;1F926 1F3FE
+S;1F926 1F3FF
+S;1F926 200D 2642 FE0F
+S;1F926 200D 2642
+S;1F926 1F3FB 200D 2642 FE0F
+S;1F926 1F3FB 200D 2642
+S;1F926 1F3FC 200D 2642 FE0F
+S;1F926 1F3FC 200D 2642
+S;1F926 1F3FD 200D 2642 FE0F
+S;1F926 1F3FD 200D 2642
+S;1F926 1F3FE 200D 2642 FE0F
+S;1F926 1F3FE 200D 2642
+S;1F926 1F3FF 200D 2642 FE0F
+S;1F926 1F3FF 200D 2642
+S;1F926 200D 2640 FE0F
+S;1F926 200D 2640
+S;1F926 1F3FB 200D 2640 FE0F
+S;1F926 1F3FB 200D 2640
+S;1F926 1F3FC 200D 2640 FE0F
+S;1F926 1F3FC 200D 2640
+S;1F926 1F3FD 200D 2640 FE0F
+S;1F926 1F3FD 200D 2640
+S;1F926 1F3FE 200D 2640 FE0F
+S;1F926 1F3FE 200D 2640
+S;1F926 1F3FF 200D 2640 FE0F
+S;1F926 1F3FF 200D 2640
+S;1F937
+S;1F937 1F3FB
+S;1F937 1F3FC
+S;1F937 1F3FD
+S;1F937 1F3FE
+S;1F937 1F3FF
+S;1F937 200D 2642 FE0F
+S;1F937 200D 2642
+S;1F937 1F3FB 200D 2642 FE0F
+S;1F937 1F3FB 200D 2642
+S;1F937 1F3FC 200D 2642 FE0F
+S;1F937 1F3FC 200D 2642
+S;1F937 1F3FD 200D 2642 FE0F
+S;1F937 1F3FD 200D 2642
+S;1F937 1F3FE 200D 2642 FE0F
+S;1F937 1F3FE 200D 2642
+S;1F937 1F3FF 200D 2642 FE0F
+S;1F937 1F3FF 200D 2642
+S;1F937 200D 2640 FE0F
+S;1F937 200D 2640
+S;1F937 1F3FB 200D 2640 FE0F
+S;1F937 1F3FB 200D 2640
+S;1F937 1F3FC 200D 2640 FE0F
+S;1F937 1F3FC 200D 2640
+S;1F937 1F3FD 200D 2640 FE0F
+S;1F937 1F3FD 200D 2640
+S;1F937 1F3FE 200D 2640 FE0F
+S;1F937 1F3FE 200D 2640
+S;1F937 1F3FF 200D 2640 FE0F
+S;1F937 1F3FF 200D 2640
+S;1F9D1 200D 2695 FE0F
+S;1F9D1 200D 2695
+S;1F9D1 1F3FB 200D 2695 FE0F
+S;1F9D1 1F3FB 200D 2695
+S;1F9D1 1F3FC 200D 2695 FE0F
+S;1F9D1 1F3FC 200D 2695
+S;1F9D1 1F3FD 200D 2695 FE0F
+S;1F9D1 1F3FD 200D 2695
+S;1F9D1 1F3FE 200D 2695 FE0F
+S;1F9D1 1F3FE 200D 2695
+S;1F9D1 1F3FF 200D 2695 FE0F
+S;1F9D1 1F3FF 200D 2695
+S;1F468 200D 2695 FE0F
+S;1F468 200D 2695
+S;1F468 1F3FB 200D 2695 FE0F
+S;1F468 1F3FB 200D 2695
+S;1F468 1F3FC 200D 2695 FE0F
+S;1F468 1F3FC 200D 2695
+S;1F468 1F3FD 200D 2695 FE0F
+S;1F468 1F3FD 200D 2695
+S;1F468 1F3FE 200D 2695 FE0F
+S;1F468 1F3FE 200D 2695
+S;1F468 1F3FF 200D 2695 FE0F
+S;1F468 1F3FF 200D 2695
+S;1F469 200D 2695 FE0F
+S;1F469 200D 2695
+S;1F469 1F3FB 200D 2695 FE0F
+S;1F469 1F3FB 200D 2695
+S;1F469 1F3FC 200D 2695 FE0F
+S;1F469 1F3FC 200D 2695
+S;1F469 1F3FD 200D 2695 FE0F
+S;1F469 1F3FD 200D 2695
+S;1F469 1F3FE 200D 2695 FE0F
+S;1F469 1F3FE 200D 2695
+S;1F469 1F3FF 200D 2695 FE0F
+S;1F469 1F3FF 200D 2695
+S;1F9D1 200D 1F393
+S;1F9D1 1F3FB 200D 1F393
+S;1F9D1 1F3FC 200D 1F393
+S;1F9D1 1F3FD 200D 1F393
+S;1F9D1 1F3FE 200D 1F393
+S;1F9D1 1F3FF 200D 1F393
+S;1F468 200D 1F393
+S;1F468 1F3FB 200D 1F393
+S;1F468 1F3FC 200D 1F393
+S;1F468 1F3FD 200D 1F393
+S;1F468 1F3FE 200D 1F393
+S;1F468 1F3FF 200D 1F393
+S;1F469 200D 1F393
+S;1F469 1F3FB 200D 1F393
+S;1F469 1F3FC 200D 1F393
+S;1F469 1F3FD 200D 1F393
+S;1F469 1F3FE 200D 1F393
+S;1F469 1F3FF 200D 1F393
+S;1F9D1 200D 1F3EB
+S;1F9D1 1F3FB 200D 1F3EB
+S;1F9D1 1F3FC 200D 1F3EB
+S;1F9D1 1F3FD 200D 1F3EB
+S;1F9D1 1F3FE 200D 1F3EB
+S;1F9D1 1F3FF 200D 1F3EB
+S;1F468 200D 1F3EB
+S;1F468 1F3FB 200D 1F3EB
+S;1F468 1F3FC 200D 1F3EB
+S;1F468 1F3FD 200D 1F3EB
+S;1F468 1F3FE 200D 1F3EB
+S;1F468 1F3FF 200D 1F3EB
+S;1F469 200D 1F3EB
+S;1F469 1F3FB 200D 1F3EB
+S;1F469 1F3FC 200D 1F3EB
+S;1F469 1F3FD 200D 1F3EB
+S;1F469 1F3FE 200D 1F3EB
+S;1F469 1F3FF 200D 1F3EB
+S;1F9D1 200D 2696 FE0F
+S;1F9D1 200D 2696
+S;1F9D1 1F3FB 200D 2696 FE0F
+S;1F9D1 1F3FB 200D 2696
+S;1F9D1 1F3FC 200D 2696 FE0F
+S;1F9D1 1F3FC 200D 2696
+S;1F9D1 1F3FD 200D 2696 FE0F
+S;1F9D1 1F3FD 200D 2696
+S;1F9D1 1F3FE 200D 2696 FE0F
+S;1F9D1 1F3FE 200D 2696
+S;1F9D1 1F3FF 200D 2696 FE0F
+S;1F9D1 1F3FF 200D 2696
+S;1F468 200D 2696 FE0F
+S;1F468 200D 2696
+S;1F468 1F3FB 200D 2696 FE0F
+S;1F468 1F3FB 200D 2696
+S;1F468 1F3FC 200D 2696 FE0F
+S;1F468 1F3FC 200D 2696
+S;1F468 1F3FD 200D 2696 FE0F
+S;1F468 1F3FD 200D 2696
+S;1F468 1F3FE 200D 2696 FE0F
+S;1F468 1F3FE 200D 2696
+S;1F468 1F3FF 200D 2696 FE0F
+S;1F468 1F3FF 200D 2696
+S;1F469 200D 2696 FE0F
+S;1F469 200D 2696
+S;1F469 1F3FB 200D 2696 FE0F
+S;1F469 1F3FB 200D 2696
+S;1F469 1F3FC 200D 2696 FE0F
+S;1F469 1F3FC 200D 2696
+S;1F469 1F3FD 200D 2696 FE0F
+S;1F469 1F3FD 200D 2696
+S;1F469 1F3FE 200D 2696 FE0F
+S;1F469 1F3FE 200D 2696
+S;1F469 1F3FF 200D 2696 FE0F
+S;1F469 1F3FF 200D 2696
+S;1F9D1 200D 1F33E
+S;1F9D1 1F3FB 200D 1F33E
+S;1F9D1 1F3FC 200D 1F33E
+S;1F9D1 1F3FD 200D 1F33E
+S;1F9D1 1F3FE 200D 1F33E
+S;1F9D1 1F3FF 200D 1F33E
+S;1F468 200D 1F33E
+S;1F468 1F3FB 200D 1F33E
+S;1F468 1F3FC 200D 1F33E
+S;1F468 1F3FD 200D 1F33E
+S;1F468 1F3FE 200D 1F33E
+S;1F468 1F3FF 200D 1F33E
+S;1F469 200D 1F33E
+S;1F469 1F3FB 200D 1F33E
+S;1F469 1F3FC 200D 1F33E
+S;1F469 1F3FD 200D 1F33E
+S;1F469 1F3FE 200D 1F33E
+S;1F469 1F3FF 200D 1F33E
+S;1F9D1 200D 1F373
+S;1F9D1 1F3FB 200D 1F373
+S;1F9D1 1F3FC 200D 1F373
+S;1F9D1 1F3FD 200D 1F373
+S;1F9D1 1F3FE 200D 1F373
+S;1F9D1 1F3FF 200D 1F373
+S;1F468 200D 1F373
+S;1F468 1F3FB 200D 1F373
+S;1F468 1F3FC 200D 1F373
+S;1F468 1F3FD 200D 1F373
+S;1F468 1F3FE 200D 1F373
+S;1F468 1F3FF 200D 1F373
+S;1F469 200D 1F373
+S;1F469 1F3FB 200D 1F373
+S;1F469 1F3FC 200D 1F373
+S;1F469 1F3FD 200D 1F373
+S;1F469 1F3FE 200D 1F373
+S;1F469 1F3FF 200D 1F373
+S;1F9D1 200D 1F527
+S;1F9D1 1F3FB 200D 1F527
+S;1F9D1 1F3FC 200D 1F527
+S;1F9D1 1F3FD 200D 1F527
+S;1F9D1 1F3FE 200D 1F527
+S;1F9D1 1F3FF 200D 1F527
+S;1F468 200D 1F527
+S;1F468 1F3FB 200D 1F527
+S;1F468 1F3FC 200D 1F527
+S;1F468 1F3FD 200D 1F527
+S;1F468 1F3FE 200D 1F527
+S;1F468 1F3FF 200D 1F527
+S;1F469 200D 1F527
+S;1F469 1F3FB 200D 1F527
+S;1F469 1F3FC 200D 1F527
+S;1F469 1F3FD 200D 1F527
+S;1F469 1F3FE 200D 1F527
+S;1F469 1F3FF 200D 1F527
+S;1F9D1 200D 1F3ED
+S;1F9D1 1F3FB 200D 1F3ED
+S;1F9D1 1F3FC 200D 1F3ED
+S;1F9D1 1F3FD 200D 1F3ED
+S;1F9D1 1F3FE 200D 1F3ED
+S;1F9D1 1F3FF 200D 1F3ED
+S;1F468 200D 1F3ED
+S;1F468 1F3FB 200D 1F3ED
+S;1F468 1F3FC 200D 1F3ED
+S;1F468 1F3FD 200D 1F3ED
+S;1F468 1F3FE 200D 1F3ED
+S;1F468 1F3FF 200D 1F3ED
+S;1F469 200D 1F3ED
+S;1F469 1F3FB 200D 1F3ED
+S;1F469 1F3FC 200D 1F3ED
+S;1F469 1F3FD 200D 1F3ED
+S;1F469 1F3FE 200D 1F3ED
+S;1F469 1F3FF 200D 1F3ED
+S;1F9D1 200D 1F4BC
+S;1F9D1 1F3FB 200D 1F4BC
+S;1F9D1 1F3FC 200D 1F4BC
+S;1F9D1 1F3FD 200D 1F4BC
+S;1F9D1 1F3FE 200D 1F4BC
+S;1F9D1 1F3FF 200D 1F4BC
+S;1F468 200D 1F4BC
+S;1F468 1F3FB 200D 1F4BC
+S;1F468 1F3FC 200D 1F4BC
+S;1F468 1F3FD 200D 1F4BC
+S;1F468 1F3FE 200D 1F4BC
+S;1F468 1F3FF 200D 1F4BC
+S;1F469 200D 1F4BC
+S;1F469 1F3FB 200D 1F4BC
+S;1F469 1F3FC 200D 1F4BC
+S;1F469 1F3FD 200D 1F4BC
+S;1F469 1F3FE 200D 1F4BC
+S;1F469 1F3FF 200D 1F4BC
+S;1F9D1 200D 1F52C
+S;1F9D1 1F3FB 200D 1F52C
+S;1F9D1 1F3FC 200D 1F52C
+S;1F9D1 1F3FD 200D 1F52C
+S;1F9D1 1F3FE 200D 1F52C
+S;1F9D1 1F3FF 200D 1F52C
+S;1F468 200D 1F52C
+S;1F468 1F3FB 200D 1F52C
+S;1F468 1F3FC 200D 1F52C
+S;1F468 1F3FD 200D 1F52C
+S;1F468 1F3FE 200D 1F52C
+S;1F468 1F3FF 200D 1F52C
+S;1F469 200D 1F52C
+S;1F469 1F3FB 200D 1F52C
+S;1F469 1F3FC 200D 1F52C
+S;1F469 1F3FD 200D 1F52C
+S;1F469 1F3FE 200D 1F52C
+S;1F469 1F3FF 200D 1F52C
+S;1F9D1 200D 1F4BB
+S;1F9D1 1F3FB 200D 1F4BB
+S;1F9D1 1F3FC 200D 1F4BB
+S;1F9D1 1F3FD 200D 1F4BB
+S;1F9D1 1F3FE 200D 1F4BB
+S;1F9D1 1F3FF 200D 1F4BB
+S;1F468 200D 1F4BB
+S;1F468 1F3FB 200D 1F4BB
+S;1F468 1F3FC 200D 1F4BB
+S;1F468 1F3FD 200D 1F4BB
+S;1F468 1F3FE 200D 1F4BB
+S;1F468 1F3FF 200D 1F4BB
+S;1F469 200D 1F4BB
+S;1F469 1F3FB 200D 1F4BB
+S;1F469 1F3FC 200D 1F4BB
+S;1F469 1F3FD 200D 1F4BB
+S;1F469 1F3FE 200D 1F4BB
+S;1F469 1F3FF 200D 1F4BB
+S;1F9D1 200D 1F3A4
+S;1F9D1 1F3FB 200D 1F3A4
+S;1F9D1 1F3FC 200D 1F3A4
+S;1F9D1 1F3FD 200D 1F3A4
+S;1F9D1 1F3FE 200D 1F3A4
+S;1F9D1 1F3FF 200D 1F3A4
+S;1F468 200D 1F3A4
+S;1F468 1F3FB 200D 1F3A4
+S;1F468 1F3FC 200D 1F3A4
+S;1F468 1F3FD 200D 1F3A4
+S;1F468 1F3FE 200D 1F3A4
+S;1F468 1F3FF 200D 1F3A4
+S;1F469 200D 1F3A4
+S;1F469 1F3FB 200D 1F3A4
+S;1F469 1F3FC 200D 1F3A4
+S;1F469 1F3FD 200D 1F3A4
+S;1F469 1F3FE 200D 1F3A4
+S;1F469 1F3FF 200D 1F3A4
+S;1F9D1 200D 1F3A8
+S;1F9D1 1F3FB 200D 1F3A8
+S;1F9D1 1F3FC 200D 1F3A8
+S;1F9D1 1F3FD 200D 1F3A8
+S;1F9D1 1F3FE 200D 1F3A8
+S;1F9D1 1F3FF 200D 1F3A8
+S;1F468 200D 1F3A8
+S;1F468 1F3FB 200D 1F3A8
+S;1F468 1F3FC 200D 1F3A8
+S;1F468 1F3FD 200D 1F3A8
+S;1F468 1F3FE 200D 1F3A8
+S;1F468 1F3FF 200D 1F3A8
+S;1F469 200D 1F3A8
+S;1F469 1F3FB 200D 1F3A8
+S;1F469 1F3FC 200D 1F3A8
+S;1F469 1F3FD 200D 1F3A8
+S;1F469 1F3FE 200D 1F3A8
+S;1F469 1F3FF 200D 1F3A8
+S;1F9D1 200D 2708 FE0F
+S;1F9D1 200D 2708
+S;1F9D1 1F3FB 200D 2708 FE0F
+S;1F9D1 1F3FB 200D 2708
+S;1F9D1 1F3FC 200D 2708 FE0F
+S;1F9D1 1F3FC 200D 2708
+S;1F9D1 1F3FD 200D 2708 FE0F
+S;1F9D1 1F3FD 200D 2708
+S;1F9D1 1F3FE 200D 2708 FE0F
+S;1F9D1 1F3FE 200D 2708
+S;1F9D1 1F3FF 200D 2708 FE0F
+S;1F9D1 1F3FF 200D 2708
+S;1F468 200D 2708 FE0F
+S;1F468 200D 2708
+S;1F468 1F3FB 200D 2708 FE0F
+S;1F468 1F3FB 200D 2708
+S;1F468 1F3FC 200D 2708 FE0F
+S;1F468 1F3FC 200D 2708
+S;1F468 1F3FD 200D 2708 FE0F
+S;1F468 1F3FD 200D 2708
+S;1F468 1F3FE 200D 2708 FE0F
+S;1F468 1F3FE 200D 2708
+S;1F468 1F3FF 200D 2708 FE0F
+S;1F468 1F3FF 200D 2708
+S;1F469 200D 2708 FE0F
+S;1F469 200D 2708
+S;1F469 1F3FB 200D 2708 FE0F
+S;1F469 1F3FB 200D 2708
+S;1F469 1F3FC 200D 2708 FE0F
+S;1F469 1F3FC 200D 2708
+S;1F469 1F3FD 200D 2708 FE0F
+S;1F469 1F3FD 200D 2708
+S;1F469 1F3FE 200D 2708 FE0F
+S;1F469 1F3FE 200D 2708
+S;1F469 1F3FF 200D 2708 FE0F
+S;1F469 1F3FF 200D 2708
+S;1F9D1 200D 1F680
+S;1F9D1 1F3FB 200D 1F680
+S;1F9D1 1F3FC 200D 1F680
+S;1F9D1 1F3FD 200D 1F680
+S;1F9D1 1F3FE 200D 1F680
+S;1F9D1 1F3FF 200D 1F680
+S;1F468 200D 1F680
+S;1F468 1F3FB 200D 1F680
+S;1F468 1F3FC 200D 1F680
+S;1F468 1F3FD 200D 1F680
+S;1F468 1F3FE 200D 1F680
+S;1F468 1F3FF 200D 1F680
+S;1F469 200D 1F680
+S;1F469 1F3FB 200D 1F680
+S;1F469 1F3FC 200D 1F680
+S;1F469 1F3FD 200D 1F680
+S;1F469 1F3FE 200D 1F680
+S;1F469 1F3FF 200D 1F680
+S;1F9D1 200D 1F692
+S;1F9D1 1F3FB 200D 1F692
+S;1F9D1 1F3FC 200D 1F692
+S;1F9D1 1F3FD 200D 1F692
+S;1F9D1 1F3FE 200D 1F692
+S;1F9D1 1F3FF 200D 1F692
+S;1F468 200D 1F692
+S;1F468 1F3FB 200D 1F692
+S;1F468 1F3FC 200D 1F692
+S;1F468 1F3FD 200D 1F692
+S;1F468 1F3FE 200D 1F692
+S;1F468 1F3FF 200D 1F692
+S;1F469 200D 1F692
+S;1F469 1F3FB 200D 1F692
+S;1F469 1F3FC 200D 1F692
+S;1F469 1F3FD 200D 1F692
+S;1F469 1F3FE 200D 1F692
+S;1F469 1F3FF 200D 1F692
+S;1F46E
+S;1F46E 1F3FB
+S;1F46E 1F3FC
+S;1F46E 1F3FD
+S;1F46E 1F3FE
+S;1F46E 1F3FF
+S;1F46E 200D 2642 FE0F
+S;1F46E 200D 2642
+S;1F46E 1F3FB 200D 2642 FE0F
+S;1F46E 1F3FB 200D 2642
+S;1F46E 1F3FC 200D 2642 FE0F
+S;1F46E 1F3FC 200D 2642
+S;1F46E 1F3FD 200D 2642 FE0F
+S;1F46E 1F3FD 200D 2642
+S;1F46E 1F3FE 200D 2642 FE0F
+S;1F46E 1F3FE 200D 2642
+S;1F46E 1F3FF 200D 2642 FE0F
+S;1F46E 1F3FF 200D 2642
+S;1F46E 200D 2640 FE0F
+S;1F46E 200D 2640
+S;1F46E 1F3FB 200D 2640 FE0F
+S;1F46E 1F3FB 200D 2640
+S;1F46E 1F3FC 200D 2640 FE0F
+S;1F46E 1F3FC 200D 2640
+S;1F46E 1F3FD 200D 2640 FE0F
+S;1F46E 1F3FD 200D 2640
+S;1F46E 1F3FE 200D 2640 FE0F
+S;1F46E 1F3FE 200D 2640
+S;1F46E 1F3FF 200D 2640 FE0F
+S;1F46E 1F3FF 200D 2640
+S;1F575 FE0F
+S;1F575 1F3FB
+S;1F575 1F3FC
+S;1F575 1F3FD
+S;1F575 1F3FE
+S;1F575 1F3FF
+S;1F575 FE0F 200D 2642 FE0F
+S;1F575 FE0F 200D 2642
+S;1F575 1F3FB 200D 2642 FE0F
+S;1F575 1F3FB 200D 2642
+S;1F575 1F3FC 200D 2642 FE0F
+S;1F575 1F3FC 200D 2642
+S;1F575 1F3FD 200D 2642 FE0F
+S;1F575 1F3FD 200D 2642
+S;1F575 1F3FE 200D 2642 FE0F
+S;1F575 1F3FE 200D 2642
+S;1F575 1F3FF 200D 2642 FE0F
+S;1F575 1F3FF 200D 2642
+S;1F575 FE0F 200D 2640 FE0F
+S;1F575 FE0F 200D 2640
+S;1F575 1F3FB 200D 2640 FE0F
+S;1F575 1F3FB 200D 2640
+S;1F575 1F3FC 200D 2640 FE0F
+S;1F575 1F3FC 200D 2640
+S;1F575 1F3FD 200D 2640 FE0F
+S;1F575 1F3FD 200D 2640
+S;1F575 1F3FE 200D 2640 FE0F
+S;1F575 1F3FE 200D 2640
+S;1F575 1F3FF 200D 2640 FE0F
+S;1F575 1F3FF 200D 2640
+S;1F482
+S;1F482 1F3FB
+S;1F482 1F3FC
+S;1F482 1F3FD
+S;1F482 1F3FE
+S;1F482 1F3FF
+S;1F482 200D 2642 FE0F
+S;1F482 200D 2642
+S;1F482 1F3FB 200D 2642 FE0F
+S;1F482 1F3FB 200D 2642
+S;1F482 1F3FC 200D 2642 FE0F
+S;1F482 1F3FC 200D 2642
+S;1F482 1F3FD 200D 2642 FE0F
+S;1F482 1F3FD 200D 2642
+S;1F482 1F3FE 200D 2642 FE0F
+S;1F482 1F3FE 200D 2642
+S;1F482 1F3FF 200D 2642 FE0F
+S;1F482 1F3FF 200D 2642
+S;1F482 200D 2640 FE0F
+S;1F482 200D 2640
+S;1F482 1F3FB 200D 2640 FE0F
+S;1F482 1F3FB 200D 2640
+S;1F482 1F3FC 200D 2640 FE0F
+S;1F482 1F3FC 200D 2640
+S;1F482 1F3FD 200D 2640 FE0F
+S;1F482 1F3FD 200D 2640
+S;1F482 1F3FE 200D 2640 FE0F
+S;1F482 1F3FE 200D 2640
+S;1F482 1F3FF 200D 2640 FE0F
+S;1F482 1F3FF 200D 2640
+S;1F977
+S;1F977 1F3FB
+S;1F977 1F3FC
+S;1F977 1F3FD
+S;1F977 1F3FE
+S;1F977 1F3FF
+S;1F477
+S;1F477 1F3FB
+S;1F477 1F3FC
+S;1F477 1F3FD
+S;1F477 1F3FE
+S;1F477 1F3FF
+S;1F477 200D 2642 FE0F
+S;1F477 200D 2642
+S;1F477 1F3FB 200D 2642 FE0F
+S;1F477 1F3FB 200D 2642
+S;1F477 1F3FC 200D 2642 FE0F
+S;1F477 1F3FC 200D 2642
+S;1F477 1F3FD 200D 2642 FE0F
+S;1F477 1F3FD 200D 2642
+S;1F477 1F3FE 200D 2642 FE0F
+S;1F477 1F3FE 200D 2642
+S;1F477 1F3FF 200D 2642 FE0F
+S;1F477 1F3FF 200D 2642
+S;1F477 200D 2640 FE0F
+S;1F477 200D 2640
+S;1F477 1F3FB 200D 2640 FE0F
+S;1F477 1F3FB 200D 2640
+S;1F477 1F3FC 200D 2640 FE0F
+S;1F477 1F3FC 200D 2640
+S;1F477 1F3FD 200D 2640 FE0F
+S;1F477 1F3FD 200D 2640
+S;1F477 1F3FE 200D 2640 FE0F
+S;1F477 1F3FE 200D 2640
+S;1F477 1F3FF 200D 2640 FE0F
+S;1F477 1F3FF 200D 2640
+S;1FAC5
+S;1FAC5 1F3FB
+S;1FAC5 1F3FC
+S;1FAC5 1F3FD
+S;1FAC5 1F3FE
+S;1FAC5 1F3FF
+S;1F934
+S;1F934 1F3FB
+S;1F934 1F3FC
+S;1F934 1F3FD
+S;1F934 1F3FE
+S;1F934 1F3FF
+S;1F478
+S;1F478 1F3FB
+S;1F478 1F3FC
+S;1F478 1F3FD
+S;1F478 1F3FE
+S;1F478 1F3FF
+S;1F473
+S;1F473 1F3FB
+S;1F473 1F3FC
+S;1F473 1F3FD
+S;1F473 1F3FE
+S;1F473 1F3FF
+S;1F473 200D 2642 FE0F
+S;1F473 200D 2642
+S;1F473 1F3FB 200D 2642 FE0F
+S;1F473 1F3FB 200D 2642
+S;1F473 1F3FC 200D 2642 FE0F
+S;1F473 1F3FC 200D 2642
+S;1F473 1F3FD 200D 2642 FE0F
+S;1F473 1F3FD 200D 2642
+S;1F473 1F3FE 200D 2642 FE0F
+S;1F473 1F3FE 200D 2642
+S;1F473 1F3FF 200D 2642 FE0F
+S;1F473 1F3FF 200D 2642
+S;1F473 200D 2640 FE0F
+S;1F473 200D 2640
+S;1F473 1F3FB 200D 2640 FE0F
+S;1F473 1F3FB 200D 2640
+S;1F473 1F3FC 200D 2640 FE0F
+S;1F473 1F3FC 200D 2640
+S;1F473 1F3FD 200D 2640 FE0F
+S;1F473 1F3FD 200D 2640
+S;1F473 1F3FE 200D 2640 FE0F
+S;1F473 1F3FE 200D 2640
+S;1F473 1F3FF 200D 2640 FE0F
+S;1F473 1F3FF 200D 2640
+S;1F472
+S;1F472 1F3FB
+S;1F472 1F3FC
+S;1F472 1F3FD
+S;1F472 1F3FE
+S;1F472 1F3FF
+S;1F9D5
+S;1F9D5 1F3FB
+S;1F9D5 1F3FC
+S;1F9D5 1F3FD
+S;1F9D5 1F3FE
+S;1F9D5 1F3FF
+S;1F935
+S;1F935 1F3FB
+S;1F935 1F3FC
+S;1F935 1F3FD
+S;1F935 1F3FE
+S;1F935 1F3FF
+S;1F935 200D 2642 FE0F
+S;1F935 200D 2642
+S;1F935 1F3FB 200D 2642 FE0F
+S;1F935 1F3FB 200D 2642
+S;1F935 1F3FC 200D 2642 FE0F
+S;1F935 1F3FC 200D 2642
+S;1F935 1F3FD 200D 2642 FE0F
+S;1F935 1F3FD 200D 2642
+S;1F935 1F3FE 200D 2642 FE0F
+S;1F935 1F3FE 200D 2642
+S;1F935 1F3FF 200D 2642 FE0F
+S;1F935 1F3FF 200D 2642
+S;1F935 200D 2640 FE0F
+S;1F935 200D 2640
+S;1F935 1F3FB 200D 2640 FE0F
+S;1F935 1F3FB 200D 2640
+S;1F935 1F3FC 200D 2640 FE0F
+S;1F935 1F3FC 200D 2640
+S;1F935 1F3FD 200D 2640 FE0F
+S;1F935 1F3FD 200D 2640
+S;1F935 1F3FE 200D 2640 FE0F
+S;1F935 1F3FE 200D 2640
+S;1F935 1F3FF 200D 2640 FE0F
+S;1F935 1F3FF 200D 2640
+S;1F470
+S;1F470 1F3FB
+S;1F470 1F3FC
+S;1F470 1F3FD
+S;1F470 1F3FE
+S;1F470 1F3FF
+S;1F470 200D 2642 FE0F
+S;1F470 200D 2642
+S;1F470 1F3FB 200D 2642 FE0F
+S;1F470 1F3FB 200D 2642
+S;1F470 1F3FC 200D 2642 FE0F
+S;1F470 1F3FC 200D 2642
+S;1F470 1F3FD 200D 2642 FE0F
+S;1F470 1F3FD 200D 2642
+S;1F470 1F3FE 200D 2642 FE0F
+S;1F470 1F3FE 200D 2642
+S;1F470 1F3FF 200D 2642 FE0F
+S;1F470 1F3FF 200D 2642
+S;1F470 200D 2640 FE0F
+S;1F470 200D 2640
+S;1F470 1F3FB 200D 2640 FE0F
+S;1F470 1F3FB 200D 2640
+S;1F470 1F3FC 200D 2640 FE0F
+S;1F470 1F3FC 200D 2640
+S;1F470 1F3FD 200D 2640 FE0F
+S;1F470 1F3FD 200D 2640
+S;1F470 1F3FE 200D 2640 FE0F
+S;1F470 1F3FE 200D 2640
+S;1F470 1F3FF 200D 2640 FE0F
+S;1F470 1F3FF 200D 2640
+S;1F930
+S;1F930 1F3FB
+S;1F930 1F3FC
+S;1F930 1F3FD
+S;1F930 1F3FE
+S;1F930 1F3FF
+S;1FAC3
+S;1FAC3 1F3FB
+S;1FAC3 1F3FC
+S;1FAC3 1F3FD
+S;1FAC3 1F3FE
+S;1FAC3 1F3FF
+S;1FAC4
+S;1FAC4 1F3FB
+S;1FAC4 1F3FC
+S;1FAC4 1F3FD
+S;1FAC4 1F3FE
+S;1FAC4 1F3FF
+S;1F931
+S;1F931 1F3FB
+S;1F931 1F3FC
+S;1F931 1F3FD
+S;1F931 1F3FE
+S;1F931 1F3FF
+S;1F469 200D 1F37C
+S;1F469 1F3FB 200D 1F37C
+S;1F469 1F3FC 200D 1F37C
+S;1F469 1F3FD 200D 1F37C
+S;1F469 1F3FE 200D 1F37C
+S;1F469 1F3FF 200D 1F37C
+S;1F468 200D 1F37C
+S;1F468 1F3FB 200D 1F37C
+S;1F468 1F3FC 200D 1F37C
+S;1F468 1F3FD 200D 1F37C
+S;1F468 1F3FE 200D 1F37C
+S;1F468 1F3FF 200D 1F37C
+S;1F9D1 200D 1F37C
+S;1F9D1 1F3FB 200D 1F37C
+S;1F9D1 1F3FC 200D 1F37C
+S;1F9D1 1F3FD 200D 1F37C
+S;1F9D1 1F3FE 200D 1F37C
+S;1F9D1 1F3FF 200D 1F37C
+S;1F47C
+S;1F47C 1F3FB
+S;1F47C 1F3FC
+S;1F47C 1F3FD
+S;1F47C 1F3FE
+S;1F47C 1F3FF
+S;1F385
+S;1F385 1F3FB
+S;1F385 1F3FC
+S;1F385 1F3FD
+S;1F385 1F3FE
+S;1F385 1F3FF
+S;1F936
+S;1F936 1F3FB
+S;1F936 1F3FC
+S;1F936 1F3FD
+S;1F936 1F3FE
+S;1F936 1F3FF
+S;1F9D1 200D 1F384
+S;1F9D1 1F3FB 200D 1F384
+S;1F9D1 1F3FC 200D 1F384
+S;1F9D1 1F3FD 200D 1F384
+S;1F9D1 1F3FE 200D 1F384
+S;1F9D1 1F3FF 200D 1F384
+S;1F9B8
+S;1F9B8 1F3FB
+S;1F9B8 1F3FC
+S;1F9B8 1F3FD
+S;1F9B8 1F3FE
+S;1F9B8 1F3FF
+S;1F9B8 200D 2642 FE0F
+S;1F9B8 200D 2642
+S;1F9B8 1F3FB 200D 2642 FE0F
+S;1F9B8 1F3FB 200D 2642
+S;1F9B8 1F3FC 200D 2642 FE0F
+S;1F9B8 1F3FC 200D 2642
+S;1F9B8 1F3FD 200D 2642 FE0F
+S;1F9B8 1F3FD 200D 2642
+S;1F9B8 1F3FE 200D 2642 FE0F
+S;1F9B8 1F3FE 200D 2642
+S;1F9B8 1F3FF 200D 2642 FE0F
+S;1F9B8 1F3FF 200D 2642
+S;1F9B8 200D 2640 FE0F
+S;1F9B8 200D 2640
+S;1F9B8 1F3FB 200D 2640 FE0F
+S;1F9B8 1F3FB 200D 2640
+S;1F9B8 1F3FC 200D 2640 FE0F
+S;1F9B8 1F3FC 200D 2640
+S;1F9B8 1F3FD 200D 2640 FE0F
+S;1F9B8 1F3FD 200D 2640
+S;1F9B8 1F3FE 200D 2640 FE0F
+S;1F9B8 1F3FE 200D 2640
+S;1F9B8 1F3FF 200D 2640 FE0F
+S;1F9B8 1F3FF 200D 2640
+S;1F9B9
+S;1F9B9 1F3FB
+S;1F9B9 1F3FC
+S;1F9B9 1F3FD
+S;1F9B9 1F3FE
+S;1F9B9 1F3FF
+S;1F9B9 200D 2642 FE0F
+S;1F9B9 200D 2642
+S;1F9B9 1F3FB 200D 2642 FE0F
+S;1F9B9 1F3FB 200D 2642
+S;1F9B9 1F3FC 200D 2642 FE0F
+S;1F9B9 1F3FC 200D 2642
+S;1F9B9 1F3FD 200D 2642 FE0F
+S;1F9B9 1F3FD 200D 2642
+S;1F9B9 1F3FE 200D 2642 FE0F
+S;1F9B9 1F3FE 200D 2642
+S;1F9B9 1F3FF 200D 2642 FE0F
+S;1F9B9 1F3FF 200D 2642
+S;1F9B9 200D 2640 FE0F
+S;1F9B9 200D 2640
+S;1F9B9 1F3FB 200D 2640 FE0F
+S;1F9B9 1F3FB 200D 2640
+S;1F9B9 1F3FC 200D 2640 FE0F
+S;1F9B9 1F3FC 200D 2640
+S;1F9B9 1F3FD 200D 2640 FE0F
+S;1F9B9 1F3FD 200D 2640
+S;1F9B9 1F3FE 200D 2640 FE0F
+S;1F9B9 1F3FE 200D 2640
+S;1F9B9 1F3FF 200D 2640 FE0F
+S;1F9B9 1F3FF 200D 2640
+S;1F9D9
+S;1F9D9 1F3FB
+S;1F9D9 1F3FC
+S;1F9D9 1F3FD
+S;1F9D9 1F3FE
+S;1F9D9 1F3FF
+S;1F9D9 200D 2642 FE0F
+S;1F9D9 200D 2642
+S;1F9D9 1F3FB 200D 2642 FE0F
+S;1F9D9 1F3FB 200D 2642
+S;1F9D9 1F3FC 200D 2642 FE0F
+S;1F9D9 1F3FC 200D 2642
+S;1F9D9 1F3FD 200D 2642 FE0F
+S;1F9D9 1F3FD 200D 2642
+S;1F9D9 1F3FE 200D 2642 FE0F
+S;1F9D9 1F3FE 200D 2642
+S;1F9D9 1F3FF 200D 2642 FE0F
+S;1F9D9 1F3FF 200D 2642
+S;1F9D9 200D 2640 FE0F
+S;1F9D9 200D 2640
+S;1F9D9 1F3FB 200D 2640 FE0F
+S;1F9D9 1F3FB 200D 2640
+S;1F9D9 1F3FC 200D 2640 FE0F
+S;1F9D9 1F3FC 200D 2640
+S;1F9D9 1F3FD 200D 2640 FE0F
+S;1F9D9 1F3FD 200D 2640
+S;1F9D9 1F3FE 200D 2640 FE0F
+S;1F9D9 1F3FE 200D 2640
+S;1F9D9 1F3FF 200D 2640 FE0F
+S;1F9D9 1F3FF 200D 2640
+S;1F9DA
+S;1F9DA 1F3FB
+S;1F9DA 1F3FC
+S;1F9DA 1F3FD
+S;1F9DA 1F3FE
+S;1F9DA 1F3FF
+S;1F9DA 200D 2642 FE0F
+S;1F9DA 200D 2642
+S;1F9DA 1F3FB 200D 2642 FE0F
+S;1F9DA 1F3FB 200D 2642
+S;1F9DA 1F3FC 200D 2642 FE0F
+S;1F9DA 1F3FC 200D 2642
+S;1F9DA 1F3FD 200D 2642 FE0F
+S;1F9DA 1F3FD 200D 2642
+S;1F9DA 1F3FE 200D 2642 FE0F
+S;1F9DA 1F3FE 200D 2642
+S;1F9DA 1F3FF 200D 2642 FE0F
+S;1F9DA 1F3FF 200D 2642
+S;1F9DA 200D 2640 FE0F
+S;1F9DA 200D 2640
+S;1F9DA 1F3FB 200D 2640 FE0F
+S;1F9DA 1F3FB 200D 2640
+S;1F9DA 1F3FC 200D 2640 FE0F
+S;1F9DA 1F3FC 200D 2640
+S;1F9DA 1F3FD 200D 2640 FE0F
+S;1F9DA 1F3FD 200D 2640
+S;1F9DA 1F3FE 200D 2640 FE0F
+S;1F9DA 1F3FE 200D 2640
+S;1F9DA 1F3FF 200D 2640 FE0F
+S;1F9DA 1F3FF 200D 2640
+S;1F9DB
+S;1F9DB 1F3FB
+S;1F9DB 1F3FC
+S;1F9DB 1F3FD
+S;1F9DB 1F3FE
+S;1F9DB 1F3FF
+S;1F9DB 200D 2642 FE0F
+S;1F9DB 200D 2642
+S;1F9DB 1F3FB 200D 2642 FE0F
+S;1F9DB 1F3FB 200D 2642
+S;1F9DB 1F3FC 200D 2642 FE0F
+S;1F9DB 1F3FC 200D 2642
+S;1F9DB 1F3FD 200D 2642 FE0F
+S;1F9DB 1F3FD 200D 2642
+S;1F9DB 1F3FE 200D 2642 FE0F
+S;1F9DB 1F3FE 200D 2642
+S;1F9DB 1F3FF 200D 2642 FE0F
+S;1F9DB 1F3FF 200D 2642
+S;1F9DB 200D 2640 FE0F
+S;1F9DB 200D 2640
+S;1F9DB 1F3FB 200D 2640 FE0F
+S;1F9DB 1F3FB 200D 2640
+S;1F9DB 1F3FC 200D 2640 FE0F
+S;1F9DB 1F3FC 200D 2640
+S;1F9DB 1F3FD 200D 2640 FE0F
+S;1F9DB 1F3FD 200D 2640
+S;1F9DB 1F3FE 200D 2640 FE0F
+S;1F9DB 1F3FE 200D 2640
+S;1F9DB 1F3FF 200D 2640 FE0F
+S;1F9DB 1F3FF 200D 2640
+S;1F9DC
+S;1F9DC 1F3FB
+S;1F9DC 1F3FC
+S;1F9DC 1F3FD
+S;1F9DC 1F3FE
+S;1F9DC 1F3FF
+S;1F9DC 200D 2642 FE0F
+S;1F9DC 200D 2642
+S;1F9DC 1F3FB 200D 2642 FE0F
+S;1F9DC 1F3FB 200D 2642
+S;1F9DC 1F3FC 200D 2642 FE0F
+S;1F9DC 1F3FC 200D 2642
+S;1F9DC 1F3FD 200D 2642 FE0F
+S;1F9DC 1F3FD 200D 2642
+S;1F9DC 1F3FE 200D 2642 FE0F
+S;1F9DC 1F3FE 200D 2642
+S;1F9DC 1F3FF 200D 2642 FE0F
+S;1F9DC 1F3FF 200D 2642
+S;1F9DC 200D 2640 FE0F
+S;1F9DC 200D 2640
+S;1F9DC 1F3FB 200D 2640 FE0F
+S;1F9DC 1F3FB 200D 2640
+S;1F9DC 1F3FC 200D 2640 FE0F
+S;1F9DC 1F3FC 200D 2640
+S;1F9DC 1F3FD 200D 2640 FE0F
+S;1F9DC 1F3FD 200D 2640
+S;1F9DC 1F3FE 200D 2640 FE0F
+S;1F9DC 1F3FE 200D 2640
+S;1F9DC 1F3FF 200D 2640 FE0F
+S;1F9DC 1F3FF 200D 2640
+S;1F9DD
+S;1F9DD 1F3FB
+S;1F9DD 1F3FC
+S;1F9DD 1F3FD
+S;1F9DD 1F3FE
+S;1F9DD 1F3FF
+S;1F9DD 200D 2642 FE0F
+S;1F9DD 200D 2642
+S;1F9DD 1F3FB 200D 2642 FE0F
+S;1F9DD 1F3FB 200D 2642
+S;1F9DD 1F3FC 200D 2642 FE0F
+S;1F9DD 1F3FC 200D 2642
+S;1F9DD 1F3FD 200D 2642 FE0F
+S;1F9DD 1F3FD 200D 2642
+S;1F9DD 1F3FE 200D 2642 FE0F
+S;1F9DD 1F3FE 200D 2642
+S;1F9DD 1F3FF 200D 2642 FE0F
+S;1F9DD 1F3FF 200D 2642
+S;1F9DD 200D 2640 FE0F
+S;1F9DD 200D 2640
+S;1F9DD 1F3FB 200D 2640 FE0F
+S;1F9DD 1F3FB 200D 2640
+S;1F9DD 1F3FC 200D 2640 FE0F
+S;1F9DD 1F3FC 200D 2640
+S;1F9DD 1F3FD 200D 2640 FE0F
+S;1F9DD 1F3FD 200D 2640
+S;1F9DD 1F3FE 200D 2640 FE0F
+S;1F9DD 1F3FE 200D 2640
+S;1F9DD 1F3FF 200D 2640 FE0F
+S;1F9DD 1F3FF 200D 2640
+S;1F9DE
+S;1F9DE 200D 2642 FE0F
+S;1F9DE 200D 2642
+S;1F9DE 200D 2640 FE0F
+S;1F9DE 200D 2640
+S;1F9DF
+S;1F9DF 200D 2642 FE0F
+S;1F9DF 200D 2642
+S;1F9DF 200D 2640 FE0F
+S;1F9DF 200D 2640
+S;1F9CC
+S;1FAC8
+S;1F486
+S;1F486 1F3FB
+S;1F486 1F3FC
+S;1F486 1F3FD
+S;1F486 1F3FE
+S;1F486 1F3FF
+S;1F486 200D 2642 FE0F
+S;1F486 200D 2642
+S;1F486 1F3FB 200D 2642 FE0F
+S;1F486 1F3FB 200D 2642
+S;1F486 1F3FC 200D 2642 FE0F
+S;1F486 1F3FC 200D 2642
+S;1F486 1F3FD 200D 2642 FE0F
+S;1F486 1F3FD 200D 2642
+S;1F486 1F3FE 200D 2642 FE0F
+S;1F486 1F3FE 200D 2642
+S;1F486 1F3FF 200D 2642 FE0F
+S;1F486 1F3FF 200D 2642
+S;1F486 200D 2640 FE0F
+S;1F486 200D 2640
+S;1F486 1F3FB 200D 2640 FE0F
+S;1F486 1F3FB 200D 2640
+S;1F486 1F3FC 200D 2640 FE0F
+S;1F486 1F3FC 200D 2640
+S;1F486 1F3FD 200D 2640 FE0F
+S;1F486 1F3FD 200D 2640
+S;1F486 1F3FE 200D 2640 FE0F
+S;1F486 1F3FE 200D 2640
+S;1F486 1F3FF 200D 2640 FE0F
+S;1F486 1F3FF 200D 2640
+S;1F487
+S;1F487 1F3FB
+S;1F487 1F3FC
+S;1F487 1F3FD
+S;1F487 1F3FE
+S;1F487 1F3FF
+S;1F487 200D 2642 FE0F
+S;1F487 200D 2642
+S;1F487 1F3FB 200D 2642 FE0F
+S;1F487 1F3FB 200D 2642
+S;1F487 1F3FC 200D 2642 FE0F
+S;1F487 1F3FC 200D 2642
+S;1F487 1F3FD 200D 2642 FE0F
+S;1F487 1F3FD 200D 2642
+S;1F487 1F3FE 200D 2642 FE0F
+S;1F487 1F3FE 200D 2642
+S;1F487 1F3FF 200D 2642 FE0F
+S;1F487 1F3FF 200D 2642
+S;1F487 200D 2640 FE0F
+S;1F487 200D 2640
+S;1F487 1F3FB 200D 2640 FE0F
+S;1F487 1F3FB 200D 2640
+S;1F487 1F3FC 200D 2640 FE0F
+S;1F487 1F3FC 200D 2640
+S;1F487 1F3FD 200D 2640 FE0F
+S;1F487 1F3FD 200D 2640
+S;1F487 1F3FE 200D 2640 FE0F
+S;1F487 1F3FE 200D 2640
+S;1F487 1F3FF 200D 2640 FE0F
+S;1F487 1F3FF 200D 2640
+S;1F6B6
+S;1F6B6 1F3FB
+S;1F6B6 1F3FC
+S;1F6B6 1F3FD
+S;1F6B6 1F3FE
+S;1F6B6 1F3FF
+S;1F6B6 200D 2642 FE0F
+S;1F6B6 200D 2642
+S;1F6B6 1F3FB 200D 2642 FE0F
+S;1F6B6 1F3FB 200D 2642
+S;1F6B6 1F3FC 200D 2642 FE0F
+S;1F6B6 1F3FC 200D 2642
+S;1F6B6 1F3FD 200D 2642 FE0F
+S;1F6B6 1F3FD 200D 2642
+S;1F6B6 1F3FE 200D 2642 FE0F
+S;1F6B6 1F3FE 200D 2642
+S;1F6B6 1F3FF 200D 2642 FE0F
+S;1F6B6 1F3FF 200D 2642
+S;1F6B6 200D 2640 FE0F
+S;1F6B6 200D 2640
+S;1F6B6 1F3FB 200D 2640 FE0F
+S;1F6B6 1F3FB 200D 2640
+S;1F6B6 1F3FC 200D 2640 FE0F
+S;1F6B6 1F3FC 200D 2640
+S;1F6B6 1F3FD 200D 2640 FE0F
+S;1F6B6 1F3FD 200D 2640
+S;1F6B6 1F3FE 200D 2640 FE0F
+S;1F6B6 1F3FE 200D 2640
+S;1F6B6 1F3FF 200D 2640 FE0F
+S;1F6B6 1F3FF 200D 2640
+S;1F6B6 200D 27A1 FE0F
+S;1F6B6 200D 27A1
+S;1F6B6 1F3FB 200D 27A1 FE0F
+S;1F6B6 1F3FB 200D 27A1
+S;1F6B6 1F3FC 200D 27A1 FE0F
+S;1F6B6 1F3FC 200D 27A1
+S;1F6B6 1F3FD 200D 27A1 FE0F
+S;1F6B6 1F3FD 200D 27A1
+S;1F6B6 1F3FE 200D 27A1 FE0F
+S;1F6B6 1F3FE 200D 27A1
+S;1F6B6 1F3FF 200D 27A1 FE0F
+S;1F6B6 1F3FF 200D 27A1
+S;1F6B6 200D 2640 FE0F 200D 27A1 FE0F
+S;1F6B6 200D 2640 200D 27A1 FE0F
+S;1F6B6 200D 2640 FE0F 200D 27A1
+S;1F6B6 200D 2640 200D 27A1
+S;1F6B6 1F3FB 200D 2640 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FB 200D 2640 200D 27A1 FE0F
+S;1F6B6 1F3FB 200D 2640 FE0F 200D 27A1
+S;1F6B6 1F3FB 200D 2640 200D 27A1
+S;1F6B6 1F3FC 200D 2640 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FC 200D 2640 200D 27A1 FE0F
+S;1F6B6 1F3FC 200D 2640 FE0F 200D 27A1
+S;1F6B6 1F3FC 200D 2640 200D 27A1
+S;1F6B6 1F3FD 200D 2640 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FD 200D 2640 200D 27A1 FE0F
+S;1F6B6 1F3FD 200D 2640 FE0F 200D 27A1
+S;1F6B6 1F3FD 200D 2640 200D 27A1
+S;1F6B6 1F3FE 200D 2640 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FE 200D 2640 200D 27A1 FE0F
+S;1F6B6 1F3FE 200D 2640 FE0F 200D 27A1
+S;1F6B6 1F3FE 200D 2640 200D 27A1
+S;1F6B6 1F3FF 200D 2640 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FF 200D 2640 200D 27A1 FE0F
+S;1F6B6 1F3FF 200D 2640 FE0F 200D 27A1
+S;1F6B6 1F3FF 200D 2640 200D 27A1
+S;1F6B6 200D 2642 FE0F 200D 27A1 FE0F
+S;1F6B6 200D 2642 200D 27A1 FE0F
+S;1F6B6 200D 2642 FE0F 200D 27A1
+S;1F6B6 200D 2642 200D 27A1
+S;1F6B6 1F3FB 200D 2642 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FB 200D 2642 200D 27A1 FE0F
+S;1F6B6 1F3FB 200D 2642 FE0F 200D 27A1
+S;1F6B6 1F3FB 200D 2642 200D 27A1
+S;1F6B6 1F3FC 200D 2642 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FC 200D 2642 200D 27A1 FE0F
+S;1F6B6 1F3FC 200D 2642 FE0F 200D 27A1
+S;1F6B6 1F3FC 200D 2642 200D 27A1
+S;1F6B6 1F3FD 200D 2642 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FD 200D 2642 200D 27A1 FE0F
+S;1F6B6 1F3FD 200D 2642 FE0F 200D 27A1
+S;1F6B6 1F3FD 200D 2642 200D 27A1
+S;1F6B6 1F3FE 200D 2642 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FE 200D 2642 200D 27A1 FE0F
+S;1F6B6 1F3FE 200D 2642 FE0F 200D 27A1
+S;1F6B6 1F3FE 200D 2642 200D 27A1
+S;1F6B6 1F3FF 200D 2642 FE0F 200D 27A1 FE0F
+S;1F6B6 1F3FF 200D 2642 200D 27A1 FE0F
+S;1F6B6 1F3FF 200D 2642 FE0F 200D 27A1
+S;1F6B6 1F3FF 200D 2642 200D 27A1
+S;1F9CD
+S;1F9CD 1F3FB
+S;1F9CD 1F3FC
+S;1F9CD 1F3FD
+S;1F9CD 1F3FE
+S;1F9CD 1F3FF
+S;1F9CD 200D 2642 FE0F
+S;1F9CD 200D 2642
+S;1F9CD 1F3FB 200D 2642 FE0F
+S;1F9CD 1F3FB 200D 2642
+S;1F9CD 1F3FC 200D 2642 FE0F
+S;1F9CD 1F3FC 200D 2642
+S;1F9CD 1F3FD 200D 2642 FE0F
+S;1F9CD 1F3FD 200D 2642
+S;1F9CD 1F3FE 200D 2642 FE0F
+S;1F9CD 1F3FE 200D 2642
+S;1F9CD 1F3FF 200D 2642 FE0F
+S;1F9CD 1F3FF 200D 2642
+S;1F9CD 200D 2640 FE0F
+S;1F9CD 200D 2640
+S;1F9CD 1F3FB 200D 2640 FE0F
+S;1F9CD 1F3FB 200D 2640
+S;1F9CD 1F3FC 200D 2640 FE0F
+S;1F9CD 1F3FC 200D 2640
+S;1F9CD 1F3FD 200D 2640 FE0F
+S;1F9CD 1F3FD 200D 2640
+S;1F9CD 1F3FE 200D 2640 FE0F
+S;1F9CD 1F3FE 200D 2640
+S;1F9CD 1F3FF 200D 2640 FE0F
+S;1F9CD 1F3FF 200D 2640
+S;1F9CE
+S;1F9CE 1F3FB
+S;1F9CE 1F3FC
+S;1F9CE 1F3FD
+S;1F9CE 1F3FE
+S;1F9CE 1F3FF
+S;1F9CE 200D 2642 FE0F
+S;1F9CE 200D 2642
+S;1F9CE 1F3FB 200D 2642 FE0F
+S;1F9CE 1F3FB 200D 2642
+S;1F9CE 1F3FC 200D 2642 FE0F
+S;1F9CE 1F3FC 200D 2642
+S;1F9CE 1F3FD 200D 2642 FE0F
+S;1F9CE 1F3FD 200D 2642
+S;1F9CE 1F3FE 200D 2642 FE0F
+S;1F9CE 1F3FE 200D 2642
+S;1F9CE 1F3FF 200D 2642 FE0F
+S;1F9CE 1F3FF 200D 2642
+S;1F9CE 200D 2640 FE0F
+S;1F9CE 200D 2640
+S;1F9CE 1F3FB 200D 2640 FE0F
+S;1F9CE 1F3FB 200D 2640
+S;1F9CE 1F3FC 200D 2640 FE0F
+S;1F9CE 1F3FC 200D 2640
+S;1F9CE 1F3FD 200D 2640 FE0F
+S;1F9CE 1F3FD 200D 2640
+S;1F9CE 1F3FE 200D 2640 FE0F
+S;1F9CE 1F3FE 200D 2640
+S;1F9CE 1F3FF 200D 2640 FE0F
+S;1F9CE 1F3FF 200D 2640
+S;1F9CE 200D 27A1 FE0F
+S;1F9CE 200D 27A1
+S;1F9CE 1F3FB 200D 27A1 FE0F
+S;1F9CE 1F3FB 200D 27A1
+S;1F9CE 1F3FC 200D 27A1 FE0F
+S;1F9CE 1F3FC 200D 27A1
+S;1F9CE 1F3FD 200D 27A1 FE0F
+S;1F9CE 1F3FD 200D 27A1
+S;1F9CE 1F3FE 200D 27A1 FE0F
+S;1F9CE 1F3FE 200D 27A1
+S;1F9CE 1F3FF 200D 27A1 FE0F
+S;1F9CE 1F3FF 200D 27A1
+S;1F9CE 200D 2640 FE0F 200D 27A1 FE0F
+S;1F9CE 200D 2640 200D 27A1 FE0F
+S;1F9CE 200D 2640 FE0F 200D 27A1
+S;1F9CE 200D 2640 200D 27A1
+S;1F9CE 1F3FB 200D 2640 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FB 200D 2640 200D 27A1 FE0F
+S;1F9CE 1F3FB 200D 2640 FE0F 200D 27A1
+S;1F9CE 1F3FB 200D 2640 200D 27A1
+S;1F9CE 1F3FC 200D 2640 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FC 200D 2640 200D 27A1 FE0F
+S;1F9CE 1F3FC 200D 2640 FE0F 200D 27A1
+S;1F9CE 1F3FC 200D 2640 200D 27A1
+S;1F9CE 1F3FD 200D 2640 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FD 200D 2640 200D 27A1 FE0F
+S;1F9CE 1F3FD 200D 2640 FE0F 200D 27A1
+S;1F9CE 1F3FD 200D 2640 200D 27A1
+S;1F9CE 1F3FE 200D 2640 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FE 200D 2640 200D 27A1 FE0F
+S;1F9CE 1F3FE 200D 2640 FE0F 200D 27A1
+S;1F9CE 1F3FE 200D 2640 200D 27A1
+S;1F9CE 1F3FF 200D 2640 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FF 200D 2640 200D 27A1 FE0F
+S;1F9CE 1F3FF 200D 2640 FE0F 200D 27A1
+S;1F9CE 1F3FF 200D 2640 200D 27A1
+S;1F9CE 200D 2642 FE0F 200D 27A1 FE0F
+S;1F9CE 200D 2642 200D 27A1 FE0F
+S;1F9CE 200D 2642 FE0F 200D 27A1
+S;1F9CE 200D 2642 200D 27A1
+S;1F9CE 1F3FB 200D 2642 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FB 200D 2642 200D 27A1 FE0F
+S;1F9CE 1F3FB 200D 2642 FE0F 200D 27A1
+S;1F9CE 1F3FB 200D 2642 200D 27A1
+S;1F9CE 1F3FC 200D 2642 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FC 200D 2642 200D 27A1 FE0F
+S;1F9CE 1F3FC 200D 2642 FE0F 200D 27A1
+S;1F9CE 1F3FC 200D 2642 200D 27A1
+S;1F9CE 1F3FD 200D 2642 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FD 200D 2642 200D 27A1 FE0F
+S;1F9CE 1F3FD 200D 2642 FE0F 200D 27A1
+S;1F9CE 1F3FD 200D 2642 200D 27A1
+S;1F9CE 1F3FE 200D 2642 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FE 200D 2642 200D 27A1 FE0F
+S;1F9CE 1F3FE 200D 2642 FE0F 200D 27A1
+S;1F9CE 1F3FE 200D 2642 200D 27A1
+S;1F9CE 1F3FF 200D 2642 FE0F 200D 27A1 FE0F
+S;1F9CE 1F3FF 200D 2642 200D 27A1 FE0F
+S;1F9CE 1F3FF 200D 2642 FE0F 200D 27A1
+S;1F9CE 1F3FF 200D 2642 200D 27A1
+S;1F9D1 200D 1F9AF
+S;1F9D1 1F3FB 200D 1F9AF
+S;1F9D1 1F3FC 200D 1F9AF
+S;1F9D1 1F3FD 200D 1F9AF
+S;1F9D1 1F3FE 200D 1F9AF
+S;1F9D1 1F3FF 200D 1F9AF
+S;1F9D1 200D 1F9AF 200D 27A1 FE0F
+S;1F9D1 200D 1F9AF 200D 27A1
+S;1F9D1 1F3FB 200D 1F9AF 200D 27A1 FE0F
+S;1F9D1 1F3FB 200D 1F9AF 200D 27A1
+S;1F9D1 1F3FC 200D 1F9AF 200D 27A1 FE0F
+S;1F9D1 1F3FC 200D 1F9AF 200D 27A1
+S;1F9D1 1F3FD 200D 1F9AF 200D 27A1 FE0F
+S;1F9D1 1F3FD 200D 1F9AF 200D 27A1
+S;1F9D1 1F3FE 200D 1F9AF 200D 27A1 FE0F
+S;1F9D1 1F3FE 200D 1F9AF 200D 27A1
+S;1F9D1 1F3FF 200D 1F9AF 200D 27A1 FE0F
+S;1F9D1 1F3FF 200D 1F9AF 200D 27A1
+S;1F468 200D 1F9AF
+S;1F468 1F3FB 200D 1F9AF
+S;1F468 1F3FC 200D 1F9AF
+S;1F468 1F3FD 200D 1F9AF
+S;1F468 1F3FE 200D 1F9AF
+S;1F468 1F3FF 200D 1F9AF
+S;1F468 200D 1F9AF 200D 27A1 FE0F
+S;1F468 200D 1F9AF 200D 27A1
+S;1F468 1F3FB 200D 1F9AF 200D 27A1 FE0F
+S;1F468 1F3FB 200D 1F9AF 200D 27A1
+S;1F468 1F3FC 200D 1F9AF 200D 27A1 FE0F
+S;1F468 1F3FC 200D 1F9AF 200D 27A1
+S;1F468 1F3FD 200D 1F9AF 200D 27A1 FE0F
+S;1F468 1F3FD 200D 1F9AF 200D 27A1
+S;1F468 1F3FE 200D 1F9AF 200D 27A1 FE0F
+S;1F468 1F3FE 200D 1F9AF 200D 27A1
+S;1F468 1F3FF 200D 1F9AF 200D 27A1 FE0F
+S;1F468 1F3FF 200D 1F9AF 200D 27A1
+S;1F469 200D 1F9AF
+S;1F469 1F3FB 200D 1F9AF
+S;1F469 1F3FC 200D 1F9AF
+S;1F469 1F3FD 200D 1F9AF
+S;1F469 1F3FE 200D 1F9AF
+S;1F469 1F3FF 200D 1F9AF
+S;1F469 200D 1F9AF 200D 27A1 FE0F
+S;1F469 200D 1F9AF 200D 27A1
+S;1F469 1F3FB 200D 1F9AF 200D 27A1 FE0F
+S;1F469 1F3FB 200D 1F9AF 200D 27A1
+S;1F469 1F3FC 200D 1F9AF 200D 27A1 FE0F
+S;1F469 1F3FC 200D 1F9AF 200D 27A1
+S;1F469 1F3FD 200D 1F9AF 200D 27A1 FE0F
+S;1F469 1F3FD 200D 1F9AF 200D 27A1
+S;1F469 1F3FE 200D 1F9AF 200D 27A1 FE0F
+S;1F469 1F3FE 200D 1F9AF 200D 27A1
+S;1F469 1F3FF 200D 1F9AF 200D 27A1 FE0F
+S;1F469 1F3FF 200D 1F9AF 200D 27A1
+S;1F9D1 200D 1F9BC
+S;1F9D1 1F3FB 200D 1F9BC
+S;1F9D1 1F3FC 200D 1F9BC
+S;1F9D1 1F3FD 200D 1F9BC
+S;1F9D1 1F3FE 200D 1F9BC
+S;1F9D1 1F3FF 200D 1F9BC
+S;1F9D1 200D 1F9BC 200D 27A1 FE0F
+S;1F9D1 200D 1F9BC 200D 27A1
+S;1F9D1 1F3FB 200D 1F9BC 200D 27A1 FE0F
+S;1F9D1 1F3FB 200D 1F9BC 200D 27A1
+S;1F9D1 1F3FC 200D 1F9BC 200D 27A1 FE0F
+S;1F9D1 1F3FC 200D 1F9BC 200D 27A1
+S;1F9D1 1F3FD 200D 1F9BC 200D 27A1 FE0F
+S;1F9D1 1F3FD 200D 1F9BC 200D 27A1
+S;1F9D1 1F3FE 200D 1F9BC 200D 27A1 FE0F
+S;1F9D1 1F3FE 200D 1F9BC 200D 27A1
+S;1F9D1 1F3FF 200D 1F9BC 200D 27A1 FE0F
+S;1F9D1 1F3FF 200D 1F9BC 200D 27A1
+S;1F468 200D 1F9BC
+S;1F468 1F3FB 200D 1F9BC
+S;1F468 1F3FC 200D 1F9BC
+S;1F468 1F3FD 200D 1F9BC
+S;1F468 1F3FE 200D 1F9BC
+S;1F468 1F3FF 200D 1F9BC
+S;1F468 200D 1F9BC 200D 27A1 FE0F
+S;1F468 200D 1F9BC 200D 27A1
+S;1F468 1F3FB 200D 1F9BC 200D 27A1 FE0F
+S;1F468 1F3FB 200D 1F9BC 200D 27A1
+S;1F468 1F3FC 200D 1F9BC 200D 27A1 FE0F
+S;1F468 1F3FC 200D 1F9BC 200D 27A1
+S;1F468 1F3FD 200D 1F9BC 200D 27A1 FE0F
+S;1F468 1F3FD 200D 1F9BC 200D 27A1
+S;1F468 1F3FE 200D 1F9BC 200D 27A1 FE0F
+S;1F468 1F3FE 200D 1F9BC 200D 27A1
+S;1F468 1F3FF 200D 1F9BC 200D 27A1 FE0F
+S;1F468 1F3FF 200D 1F9BC 200D 27A1
+S;1F469 200D 1F9BC
+S;1F469 1F3FB 200D 1F9BC
+S;1F469 1F3FC 200D 1F9BC
+S;1F469 1F3FD 200D 1F9BC
+S;1F469 1F3FE 200D 1F9BC
+S;1F469 1F3FF 200D 1F9BC
+S;1F469 200D 1F9BC 200D 27A1 FE0F
+S;1F469 200D 1F9BC 200D 27A1
+S;1F469 1F3FB 200D 1F9BC 200D 27A1 FE0F
+S;1F469 1F3FB 200D 1F9BC 200D 27A1
+S;1F469 1F3FC 200D 1F9BC 200D 27A1 FE0F
+S;1F469 1F3FC 200D 1F9BC 200D 27A1
+S;1F469 1F3FD 200D 1F9BC 200D 27A1 FE0F
+S;1F469 1F3FD 200D 1F9BC 200D 27A1
+S;1F469 1F3FE 200D 1F9BC 200D 27A1 FE0F
+S;1F469 1F3FE 200D 1F9BC 200D 27A1
+S;1F469 1F3FF 200D 1F9BC 200D 27A1 FE0F
+S;1F469 1F3FF 200D 1F9BC 200D 27A1
+S;1F9D1 200D 1F9BD
+S;1F9D1 1F3FB 200D 1F9BD
+S;1F9D1 1F3FC 200D 1F9BD
+S;1F9D1 1F3FD 200D 1F9BD
+S;1F9D1 1F3FE 200D 1F9BD
+S;1F9D1 1F3FF 200D 1F9BD
+S;1F9D1 200D 1F9BD 200D 27A1 FE0F
+S;1F9D1 200D 1F9BD 200D 27A1
+S;1F9D1 1F3FB 200D 1F9BD 200D 27A1 FE0F
+S;1F9D1 1F3FB 200D 1F9BD 200D 27A1
+S;1F9D1 1F3FC 200D 1F9BD 200D 27A1 FE0F
+S;1F9D1 1F3FC 200D 1F9BD 200D 27A1
+S;1F9D1 1F3FD 200D 1F9BD 200D 27A1 FE0F
+S;1F9D1 1F3FD 200D 1F9BD 200D 27A1
+S;1F9D1 1F3FE 200D 1F9BD 200D 27A1 FE0F
+S;1F9D1 1F3FE 200D 1F9BD 200D 27A1
+S;1F9D1 1F3FF 200D 1F9BD 200D 27A1 FE0F
+S;1F9D1 1F3FF 200D 1F9BD 200D 27A1
+S;1F468 200D 1F9BD
+S;1F468 1F3FB 200D 1F9BD
+S;1F468 1F3FC 200D 1F9BD
+S;1F468 1F3FD 200D 1F9BD
+S;1F468 1F3FE 200D 1F9BD
+S;1F468 1F3FF 200D 1F9BD
+S;1F468 200D 1F9BD 200D 27A1 FE0F
+S;1F468 200D 1F9BD 200D 27A1
+S;1F468 1F3FB 200D 1F9BD 200D 27A1 FE0F
+S;1F468 1F3FB 200D 1F9BD 200D 27A1
+S;1F468 1F3FC 200D 1F9BD 200D 27A1 FE0F
+S;1F468 1F3FC 200D 1F9BD 200D 27A1
+S;1F468 1F3FD 200D 1F9BD 200D 27A1 FE0F
+S;1F468 1F3FD 200D 1F9BD 200D 27A1
+S;1F468 1F3FE 200D 1F9BD 200D 27A1 FE0F
+S;1F468 1F3FE 200D 1F9BD 200D 27A1
+S;1F468 1F3FF 200D 1F9BD 200D 27A1 FE0F
+S;1F468 1F3FF 200D 1F9BD 200D 27A1
+S;1F469 200D 1F9BD
+S;1F469 1F3FB 200D 1F9BD
+S;1F469 1F3FC 200D 1F9BD
+S;1F469 1F3FD 200D 1F9BD
+S;1F469 1F3FE 200D 1F9BD
+S;1F469 1F3FF 200D 1F9BD
+S;1F469 200D 1F9BD 200D 27A1 FE0F
+S;1F469 200D 1F9BD 200D 27A1
+S;1F469 1F3FB 200D 1F9BD 200D 27A1 FE0F
+S;1F469 1F3FB 200D 1F9BD 200D 27A1
+S;1F469 1F3FC 200D 1F9BD 200D 27A1 FE0F
+S;1F469 1F3FC 200D 1F9BD 200D 27A1
+S;1F469 1F3FD 200D 1F9BD 200D 27A1 FE0F
+S;1F469 1F3FD 200D 1F9BD 200D 27A1
+S;1F469 1F3FE 200D 1F9BD 200D 27A1 FE0F
+S;1F469 1F3FE 200D 1F9BD 200D 27A1
+S;1F469 1F3FF 200D 1F9BD 200D 27A1 FE0F
+S;1F469 1F3FF 200D 1F9BD 200D 27A1
+S;1F3C3
+S;1F3C3 1F3FB
+S;1F3C3 1F3FC
+S;1F3C3 1F3FD
+S;1F3C3 1F3FE
+S;1F3C3 1F3FF
+S;1F3C3 200D 2642 FE0F
+S;1F3C3 200D 2642
+S;1F3C3 1F3FB 200D 2642 FE0F
+S;1F3C3 1F3FB 200D 2642
+S;1F3C3 1F3FC 200D 2642 FE0F
+S;1F3C3 1F3FC 200D 2642
+S;1F3C3 1F3FD 200D 2642 FE0F
+S;1F3C3 1F3FD 200D 2642
+S;1F3C3 1F3FE 200D 2642 FE0F
+S;1F3C3 1F3FE 200D 2642
+S;1F3C3 1F3FF 200D 2642 FE0F
+S;1F3C3 1F3FF 200D 2642
+S;1F3C3 200D 2640 FE0F
+S;1F3C3 200D 2640
+S;1F3C3 1F3FB 200D 2640 FE0F
+S;1F3C3 1F3FB 200D 2640
+S;1F3C3 1F3FC 200D 2640 FE0F
+S;1F3C3 1F3FC 200D 2640
+S;1F3C3 1F3FD 200D 2640 FE0F
+S;1F3C3 1F3FD 200D 2640
+S;1F3C3 1F3FE 200D 2640 FE0F
+S;1F3C3 1F3FE 200D 2640
+S;1F3C3 1F3FF 200D 2640 FE0F
+S;1F3C3 1F3FF 200D 2640
+S;1F3C3 200D 27A1 FE0F
+S;1F3C3 200D 27A1
+S;1F3C3 1F3FB 200D 27A1 FE0F
+S;1F3C3 1F3FB 200D 27A1
+S;1F3C3 1F3FC 200D 27A1 FE0F
+S;1F3C3 1F3FC 200D 27A1
+S;1F3C3 1F3FD 200D 27A1 FE0F
+S;1F3C3 1F3FD 200D 27A1
+S;1F3C3 1F3FE 200D 27A1 FE0F
+S;1F3C3 1F3FE 200D 27A1
+S;1F3C3 1F3FF 200D 27A1 FE0F
+S;1F3C3 1F3FF 200D 27A1
+S;1F3C3 200D 2640 FE0F 200D 27A1 FE0F
+S;1F3C3 200D 2640 200D 27A1 FE0F
+S;1F3C3 200D 2640 FE0F 200D 27A1
+S;1F3C3 200D 2640 200D 27A1
+S;1F3C3 1F3FB 200D 2640 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FB 200D 2640 200D 27A1 FE0F
+S;1F3C3 1F3FB 200D 2640 FE0F 200D 27A1
+S;1F3C3 1F3FB 200D 2640 200D 27A1
+S;1F3C3 1F3FC 200D 2640 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FC 200D 2640 200D 27A1 FE0F
+S;1F3C3 1F3FC 200D 2640 FE0F 200D 27A1
+S;1F3C3 1F3FC 200D 2640 200D 27A1
+S;1F3C3 1F3FD 200D 2640 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FD 200D 2640 200D 27A1 FE0F
+S;1F3C3 1F3FD 200D 2640 FE0F 200D 27A1
+S;1F3C3 1F3FD 200D 2640 200D 27A1
+S;1F3C3 1F3FE 200D 2640 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FE 200D 2640 200D 27A1 FE0F
+S;1F3C3 1F3FE 200D 2640 FE0F 200D 27A1
+S;1F3C3 1F3FE 200D 2640 200D 27A1
+S;1F3C3 1F3FF 200D 2640 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FF 200D 2640 200D 27A1 FE0F
+S;1F3C3 1F3FF 200D 2640 FE0F 200D 27A1
+S;1F3C3 1F3FF 200D 2640 200D 27A1
+S;1F3C3 200D 2642 FE0F 200D 27A1 FE0F
+S;1F3C3 200D 2642 200D 27A1 FE0F
+S;1F3C3 200D 2642 FE0F 200D 27A1
+S;1F3C3 200D 2642 200D 27A1
+S;1F3C3 1F3FB 200D 2642 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FB 200D 2642 200D 27A1 FE0F
+S;1F3C3 1F3FB 200D 2642 FE0F 200D 27A1
+S;1F3C3 1F3FB 200D 2642 200D 27A1
+S;1F3C3 1F3FC 200D 2642 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FC 200D 2642 200D 27A1 FE0F
+S;1F3C3 1F3FC 200D 2642 FE0F 200D 27A1
+S;1F3C3 1F3FC 200D 2642 200D 27A1
+S;1F3C3 1F3FD 200D 2642 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FD 200D 2642 200D 27A1 FE0F
+S;1F3C3 1F3FD 200D 2642 FE0F 200D 27A1
+S;1F3C3 1F3FD 200D 2642 200D 27A1
+S;1F3C3 1F3FE 200D 2642 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FE 200D 2642 200D 27A1 FE0F
+S;1F3C3 1F3FE 200D 2642 FE0F 200D 27A1
+S;1F3C3 1F3FE 200D 2642 200D 27A1
+S;1F3C3 1F3FF 200D 2642 FE0F 200D 27A1 FE0F
+S;1F3C3 1F3FF 200D 2642 200D 27A1 FE0F
+S;1F3C3 1F3FF 200D 2642 FE0F 200D 27A1
+S;1F3C3 1F3FF 200D 2642 200D 27A1
+S;1F9D1 200D 1FA70
+S;1F9D1 1F3FB 200D 1FA70
+S;1F9D1 1F3FC 200D 1FA70
+S;1F9D1 1F3FD 200D 1FA70
+S;1F9D1 1F3FE 200D 1FA70
+S;1F9D1 1F3FF 200D 1FA70
+S;1F483
+S;1F483 1F3FB
+S;1F483 1F3FC
+S;1F483 1F3FD
+S;1F483 1F3FE
+S;1F483 1F3FF
+S;1F57A
+S;1F57A 1F3FB
+S;1F57A 1F3FC
+S;1F57A 1F3FD
+S;1F57A 1F3FE
+S;1F57A 1F3FF
+S;1F574 FE0F
+S;1F574 1F3FB
+S;1F574 1F3FC
+S;1F574 1F3FD
+S;1F574 1F3FE
+S;1F574 1F3FF
+S;1F46F
+S;1F46F 1F3FB
+S;1F46F 1F3FC
+S;1F46F 1F3FD
+S;1F46F 1F3FE
+S;1F46F 1F3FF
+S;1F46F 200D 2642 FE0F
+S;1F46F 200D 2642
+S;1F46F 1F3FB 200D 2642 FE0F
+S;1F46F 1F3FB 200D 2642
+S;1F46F 1F3FC 200D 2642 FE0F
+S;1F46F 1F3FC 200D 2642
+S;1F46F 1F3FD 200D 2642 FE0F
+S;1F46F 1F3FD 200D 2642
+S;1F46F 1F3FE 200D 2642 FE0F
+S;1F46F 1F3FE 200D 2642
+S;1F46F 1F3FF 200D 2642 FE0F
+S;1F46F 1F3FF 200D 2642
+S;1F46F 200D 2640 FE0F
+S;1F46F 200D 2640
+S;1F46F 1F3FB 200D 2640 FE0F
+S;1F46F 1F3FB 200D 2640
+S;1F46F 1F3FC 200D 2640 FE0F
+S;1F46F 1F3FC 200D 2640
+S;1F46F 1F3FD 200D 2640 FE0F
+S;1F46F 1F3FD 200D 2640
+S;1F46F 1F3FE 200D 2640 FE0F
+S;1F46F 1F3FE 200D 2640
+S;1F46F 1F3FF 200D 2640 FE0F
+S;1F46F 1F3FF 200D 2640
+S;1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FF
+S;1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FE
+S;1F468 1F3FB 200D 1F430 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 1F430 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 1F430 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 1F430 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 1F430 200D 1F468 1F3FB
+S;1F468 1F3FC 200D 1F430 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 1F430 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 1F430 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 1F430 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 1F430 200D 1F468 1F3FC
+S;1F468 1F3FD 200D 1F430 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 1F430 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 1F430 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 1F430 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 1F430 200D 1F468 1F3FD
+S;1F468 1F3FE 200D 1F430 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 1F430 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 1F430 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 1F430 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 1F430 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 1F430 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 1F430 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 1F430 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 1F430 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 1F430 200D 1F469 1F3FB
+S;1F469 1F3FC 200D 1F430 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 1F430 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 1F430 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 1F430 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 1F430 200D 1F469 1F3FC
+S;1F469 1F3FD 200D 1F430 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 1F430 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 1F430 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 1F430 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 1F430 200D 1F469 1F3FD
+S;1F469 1F3FE 200D 1F430 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 1F430 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 1F430 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 1F430 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 1F430 200D 1F469 1F3FE
+S;1F9D6
+S;1F9D6 1F3FB
+S;1F9D6 1F3FC
+S;1F9D6 1F3FD
+S;1F9D6 1F3FE
+S;1F9D6 1F3FF
+S;1F9D6 200D 2642 FE0F
+S;1F9D6 200D 2642
+S;1F9D6 1F3FB 200D 2642 FE0F
+S;1F9D6 1F3FB 200D 2642
+S;1F9D6 1F3FC 200D 2642 FE0F
+S;1F9D6 1F3FC 200D 2642
+S;1F9D6 1F3FD 200D 2642 FE0F
+S;1F9D6 1F3FD 200D 2642
+S;1F9D6 1F3FE 200D 2642 FE0F
+S;1F9D6 1F3FE 200D 2642
+S;1F9D6 1F3FF 200D 2642 FE0F
+S;1F9D6 1F3FF 200D 2642
+S;1F9D6 200D 2640 FE0F
+S;1F9D6 200D 2640
+S;1F9D6 1F3FB 200D 2640 FE0F
+S;1F9D6 1F3FB 200D 2640
+S;1F9D6 1F3FC 200D 2640 FE0F
+S;1F9D6 1F3FC 200D 2640
+S;1F9D6 1F3FD 200D 2640 FE0F
+S;1F9D6 1F3FD 200D 2640
+S;1F9D6 1F3FE 200D 2640 FE0F
+S;1F9D6 1F3FE 200D 2640
+S;1F9D6 1F3FF 200D 2640 FE0F
+S;1F9D6 1F3FF 200D 2640
+S;1F9D7
+S;1F9D7 1F3FB
+S;1F9D7 1F3FC
+S;1F9D7 1F3FD
+S;1F9D7 1F3FE
+S;1F9D7 1F3FF
+S;1F9D7 200D 2642 FE0F
+S;1F9D7 200D 2642
+S;1F9D7 1F3FB 200D 2642 FE0F
+S;1F9D7 1F3FB 200D 2642
+S;1F9D7 1F3FC 200D 2642 FE0F
+S;1F9D7 1F3FC 200D 2642
+S;1F9D7 1F3FD 200D 2642 FE0F
+S;1F9D7 1F3FD 200D 2642
+S;1F9D7 1F3FE 200D 2642 FE0F
+S;1F9D7 1F3FE 200D 2642
+S;1F9D7 1F3FF 200D 2642 FE0F
+S;1F9D7 1F3FF 200D 2642
+S;1F9D7 200D 2640 FE0F
+S;1F9D7 200D 2640
+S;1F9D7 1F3FB 200D 2640 FE0F
+S;1F9D7 1F3FB 200D 2640
+S;1F9D7 1F3FC 200D 2640 FE0F
+S;1F9D7 1F3FC 200D 2640
+S;1F9D7 1F3FD 200D 2640 FE0F
+S;1F9D7 1F3FD 200D 2640
+S;1F9D7 1F3FE 200D 2640 FE0F
+S;1F9D7 1F3FE 200D 2640
+S;1F9D7 1F3FF 200D 2640 FE0F
+S;1F9D7 1F3FF 200D 2640
+S;1F93A
+S;1F3C7
+S;1F3C7 1F3FB
+S;1F3C7 1F3FC
+S;1F3C7 1F3FD
+S;1F3C7 1F3FE
+S;1F3C7 1F3FF
+S;26F7 FE0F
+S;1F3C2
+S;1F3C2 1F3FB
+S;1F3C2 1F3FC
+S;1F3C2 1F3FD
+S;1F3C2 1F3FE
+S;1F3C2 1F3FF
+S;1F3CC FE0F
+S;1F3CC 1F3FB
+S;1F3CC 1F3FC
+S;1F3CC 1F3FD
+S;1F3CC 1F3FE
+S;1F3CC 1F3FF
+S;1F3CC FE0F 200D 2642 FE0F
+S;1F3CC FE0F 200D 2642
+S;1F3CC 1F3FB 200D 2642 FE0F
+S;1F3CC 1F3FB 200D 2642
+S;1F3CC 1F3FC 200D 2642 FE0F
+S;1F3CC 1F3FC 200D 2642
+S;1F3CC 1F3FD 200D 2642 FE0F
+S;1F3CC 1F3FD 200D 2642
+S;1F3CC 1F3FE 200D 2642 FE0F
+S;1F3CC 1F3FE 200D 2642
+S;1F3CC 1F3FF 200D 2642 FE0F
+S;1F3CC 1F3FF 200D 2642
+S;1F3CC FE0F 200D 2640 FE0F
+S;1F3CC FE0F 200D 2640
+S;1F3CC 1F3FB 200D 2640 FE0F
+S;1F3CC 1F3FB 200D 2640
+S;1F3CC 1F3FC 200D 2640 FE0F
+S;1F3CC 1F3FC 200D 2640
+S;1F3CC 1F3FD 200D 2640 FE0F
+S;1F3CC 1F3FD 200D 2640
+S;1F3CC 1F3FE 200D 2640 FE0F
+S;1F3CC 1F3FE 200D 2640
+S;1F3CC 1F3FF 200D 2640 FE0F
+S;1F3CC 1F3FF 200D 2640
+S;1F3C4
+S;1F3C4 1F3FB
+S;1F3C4 1F3FC
+S;1F3C4 1F3FD
+S;1F3C4 1F3FE
+S;1F3C4 1F3FF
+S;1F3C4 200D 2642 FE0F
+S;1F3C4 200D 2642
+S;1F3C4 1F3FB 200D 2642 FE0F
+S;1F3C4 1F3FB 200D 2642
+S;1F3C4 1F3FC 200D 2642 FE0F
+S;1F3C4 1F3FC 200D 2642
+S;1F3C4 1F3FD 200D 2642 FE0F
+S;1F3C4 1F3FD 200D 2642
+S;1F3C4 1F3FE 200D 2642 FE0F
+S;1F3C4 1F3FE 200D 2642
+S;1F3C4 1F3FF 200D 2642 FE0F
+S;1F3C4 1F3FF 200D 2642
+S;1F3C4 200D 2640 FE0F
+S;1F3C4 200D 2640
+S;1F3C4 1F3FB 200D 2640 FE0F
+S;1F3C4 1F3FB 200D 2640
+S;1F3C4 1F3FC 200D 2640 FE0F
+S;1F3C4 1F3FC 200D 2640
+S;1F3C4 1F3FD 200D 2640 FE0F
+S;1F3C4 1F3FD 200D 2640
+S;1F3C4 1F3FE 200D 2640 FE0F
+S;1F3C4 1F3FE 200D 2640
+S;1F3C4 1F3FF 200D 2640 FE0F
+S;1F3C4 1F3FF 200D 2640
+S;1F6A3
+S;1F6A3 1F3FB
+S;1F6A3 1F3FC
+S;1F6A3 1F3FD
+S;1F6A3 1F3FE
+S;1F6A3 1F3FF
+S;1F6A3 200D 2642 FE0F
+S;1F6A3 200D 2642
+S;1F6A3 1F3FB 200D 2642 FE0F
+S;1F6A3 1F3FB 200D 2642
+S;1F6A3 1F3FC 200D 2642 FE0F
+S;1F6A3 1F3FC 200D 2642
+S;1F6A3 1F3FD 200D 2642 FE0F
+S;1F6A3 1F3FD 200D 2642
+S;1F6A3 1F3FE 200D 2642 FE0F
+S;1F6A3 1F3FE 200D 2642
+S;1F6A3 1F3FF 200D 2642 FE0F
+S;1F6A3 1F3FF 200D 2642
+S;1F6A3 200D 2640 FE0F
+S;1F6A3 200D 2640
+S;1F6A3 1F3FB 200D 2640 FE0F
+S;1F6A3 1F3FB 200D 2640
+S;1F6A3 1F3FC 200D 2640 FE0F
+S;1F6A3 1F3FC 200D 2640
+S;1F6A3 1F3FD 200D 2640 FE0F
+S;1F6A3 1F3FD 200D 2640
+S;1F6A3 1F3FE 200D 2640 FE0F
+S;1F6A3 1F3FE 200D 2640
+S;1F6A3 1F3FF 200D 2640 FE0F
+S;1F6A3 1F3FF 200D 2640
+S;1F3CA
+S;1F3CA 1F3FB
+S;1F3CA 1F3FC
+S;1F3CA 1F3FD
+S;1F3CA 1F3FE
+S;1F3CA 1F3FF
+S;1F3CA 200D 2642 FE0F
+S;1F3CA 200D 2642
+S;1F3CA 1F3FB 200D 2642 FE0F
+S;1F3CA 1F3FB 200D 2642
+S;1F3CA 1F3FC 200D 2642 FE0F
+S;1F3CA 1F3FC 200D 2642
+S;1F3CA 1F3FD 200D 2642 FE0F
+S;1F3CA 1F3FD 200D 2642
+S;1F3CA 1F3FE 200D 2642 FE0F
+S;1F3CA 1F3FE 200D 2642
+S;1F3CA 1F3FF 200D 2642 FE0F
+S;1F3CA 1F3FF 200D 2642
+S;1F3CA 200D 2640 FE0F
+S;1F3CA 200D 2640
+S;1F3CA 1F3FB 200D 2640 FE0F
+S;1F3CA 1F3FB 200D 2640
+S;1F3CA 1F3FC 200D 2640 FE0F
+S;1F3CA 1F3FC 200D 2640
+S;1F3CA 1F3FD 200D 2640 FE0F
+S;1F3CA 1F3FD 200D 2640
+S;1F3CA 1F3FE 200D 2640 FE0F
+S;1F3CA 1F3FE 200D 2640
+S;1F3CA 1F3FF 200D 2640 FE0F
+S;1F3CA 1F3FF 200D 2640
+S;26F9 FE0F
+S;26F9 1F3FB
+S;26F9 1F3FC
+S;26F9 1F3FD
+S;26F9 1F3FE
+S;26F9 1F3FF
+S;26F9 FE0F 200D 2642 FE0F
+S;26F9 FE0F 200D 2642
+S;26F9 1F3FB 200D 2642 FE0F
+S;26F9 1F3FB 200D 2642
+S;26F9 1F3FC 200D 2642 FE0F
+S;26F9 1F3FC 200D 2642
+S;26F9 1F3FD 200D 2642 FE0F
+S;26F9 1F3FD 200D 2642
+S;26F9 1F3FE 200D 2642 FE0F
+S;26F9 1F3FE 200D 2642
+S;26F9 1F3FF 200D 2642 FE0F
+S;26F9 1F3FF 200D 2642
+S;26F9 FE0F 200D 2640 FE0F
+S;26F9 FE0F 200D 2640
+S;26F9 1F3FB 200D 2640 FE0F
+S;26F9 1F3FB 200D 2640
+S;26F9 1F3FC 200D 2640 FE0F
+S;26F9 1F3FC 200D 2640
+S;26F9 1F3FD 200D 2640 FE0F
+S;26F9 1F3FD 200D 2640
+S;26F9 1F3FE 200D 2640 FE0F
+S;26F9 1F3FE 200D 2640
+S;26F9 1F3FF 200D 2640 FE0F
+S;26F9 1F3FF 200D 2640
+S;1F3CB FE0F
+S;1F3CB 1F3FB
+S;1F3CB 1F3FC
+S;1F3CB 1F3FD
+S;1F3CB 1F3FE
+S;1F3CB 1F3FF
+S;1F3CB FE0F 200D 2642 FE0F
+S;1F3CB FE0F 200D 2642
+S;1F3CB 1F3FB 200D 2642 FE0F
+S;1F3CB 1F3FB 200D 2642
+S;1F3CB 1F3FC 200D 2642 FE0F
+S;1F3CB 1F3FC 200D 2642
+S;1F3CB 1F3FD 200D 2642 FE0F
+S;1F3CB 1F3FD 200D 2642
+S;1F3CB 1F3FE 200D 2642 FE0F
+S;1F3CB 1F3FE 200D 2642
+S;1F3CB 1F3FF 200D 2642 FE0F
+S;1F3CB 1F3FF 200D 2642
+S;1F3CB FE0F 200D 2640 FE0F
+S;1F3CB FE0F 200D 2640
+S;1F3CB 1F3FB 200D 2640 FE0F
+S;1F3CB 1F3FB 200D 2640
+S;1F3CB 1F3FC 200D 2640 FE0F
+S;1F3CB 1F3FC 200D 2640
+S;1F3CB 1F3FD 200D 2640 FE0F
+S;1F3CB 1F3FD 200D 2640
+S;1F3CB 1F3FE 200D 2640 FE0F
+S;1F3CB 1F3FE 200D 2640
+S;1F3CB 1F3FF 200D 2640 FE0F
+S;1F3CB 1F3FF 200D 2640
+S;1F6B4
+S;1F6B4 1F3FB
+S;1F6B4 1F3FC
+S;1F6B4 1F3FD
+S;1F6B4 1F3FE
+S;1F6B4 1F3FF
+S;1F6B4 200D 2642 FE0F
+S;1F6B4 200D 2642
+S;1F6B4 1F3FB 200D 2642 FE0F
+S;1F6B4 1F3FB 200D 2642
+S;1F6B4 1F3FC 200D 2642 FE0F
+S;1F6B4 1F3FC 200D 2642
+S;1F6B4 1F3FD 200D 2642 FE0F
+S;1F6B4 1F3FD 200D 2642
+S;1F6B4 1F3FE 200D 2642 FE0F
+S;1F6B4 1F3FE 200D 2642
+S;1F6B4 1F3FF 200D 2642 FE0F
+S;1F6B4 1F3FF 200D 2642
+S;1F6B4 200D 2640 FE0F
+S;1F6B4 200D 2640
+S;1F6B4 1F3FB 200D 2640 FE0F
+S;1F6B4 1F3FB 200D 2640
+S;1F6B4 1F3FC 200D 2640 FE0F
+S;1F6B4 1F3FC 200D 2640
+S;1F6B4 1F3FD 200D 2640 FE0F
+S;1F6B4 1F3FD 200D 2640
+S;1F6B4 1F3FE 200D 2640 FE0F
+S;1F6B4 1F3FE 200D 2640
+S;1F6B4 1F3FF 200D 2640 FE0F
+S;1F6B4 1F3FF 200D 2640
+S;1F6B5
+S;1F6B5 1F3FB
+S;1F6B5 1F3FC
+S;1F6B5 1F3FD
+S;1F6B5 1F3FE
+S;1F6B5 1F3FF
+S;1F6B5 200D 2642 FE0F
+S;1F6B5 200D 2642
+S;1F6B5 1F3FB 200D 2642 FE0F
+S;1F6B5 1F3FB 200D 2642
+S;1F6B5 1F3FC 200D 2642 FE0F
+S;1F6B5 1F3FC 200D 2642
+S;1F6B5 1F3FD 200D 2642 FE0F
+S;1F6B5 1F3FD 200D 2642
+S;1F6B5 1F3FE 200D 2642 FE0F
+S;1F6B5 1F3FE 200D 2642
+S;1F6B5 1F3FF 200D 2642 FE0F
+S;1F6B5 1F3FF 200D 2642
+S;1F6B5 200D 2640 FE0F
+S;1F6B5 200D 2640
+S;1F6B5 1F3FB 200D 2640 FE0F
+S;1F6B5 1F3FB 200D 2640
+S;1F6B5 1F3FC 200D 2640 FE0F
+S;1F6B5 1F3FC 200D 2640
+S;1F6B5 1F3FD 200D 2640 FE0F
+S;1F6B5 1F3FD 200D 2640
+S;1F6B5 1F3FE 200D 2640 FE0F
+S;1F6B5 1F3FE 200D 2640
+S;1F6B5 1F3FF 200D 2640 FE0F
+S;1F6B5 1F3FF 200D 2640
+S;1F938
+S;1F938 1F3FB
+S;1F938 1F3FC
+S;1F938 1F3FD
+S;1F938 1F3FE
+S;1F938 1F3FF
+S;1F938 200D 2642 FE0F
+S;1F938 200D 2642
+S;1F938 1F3FB 200D 2642 FE0F
+S;1F938 1F3FB 200D 2642
+S;1F938 1F3FC 200D 2642 FE0F
+S;1F938 1F3FC 200D 2642
+S;1F938 1F3FD 200D 2642 FE0F
+S;1F938 1F3FD 200D 2642
+S;1F938 1F3FE 200D 2642 FE0F
+S;1F938 1F3FE 200D 2642
+S;1F938 1F3FF 200D 2642 FE0F
+S;1F938 1F3FF 200D 2642
+S;1F938 200D 2640 FE0F
+S;1F938 200D 2640
+S;1F938 1F3FB 200D 2640 FE0F
+S;1F938 1F3FB 200D 2640
+S;1F938 1F3FC 200D 2640 FE0F
+S;1F938 1F3FC 200D 2640
+S;1F938 1F3FD 200D 2640 FE0F
+S;1F938 1F3FD 200D 2640
+S;1F938 1F3FE 200D 2640 FE0F
+S;1F938 1F3FE 200D 2640
+S;1F938 1F3FF 200D 2640 FE0F
+S;1F938 1F3FF 200D 2640
+S;1F93C
+S;1F93C 1F3FB
+S;1F93C 1F3FC
+S;1F93C 1F3FD
+S;1F93C 1F3FE
+S;1F93C 1F3FF
+S;1F93C 200D 2642 FE0F
+S;1F93C 200D 2642
+S;1F93C 1F3FB 200D 2642 FE0F
+S;1F93C 1F3FB 200D 2642
+S;1F93C 1F3FC 200D 2642 FE0F
+S;1F93C 1F3FC 200D 2642
+S;1F93C 1F3FD 200D 2642 FE0F
+S;1F93C 1F3FD 200D 2642
+S;1F93C 1F3FE 200D 2642 FE0F
+S;1F93C 1F3FE 200D 2642
+S;1F93C 1F3FF 200D 2642 FE0F
+S;1F93C 1F3FF 200D 2642
+S;1F93C 200D 2640 FE0F
+S;1F93C 200D 2640
+S;1F93C 1F3FB 200D 2640 FE0F
+S;1F93C 1F3FB 200D 2640
+S;1F93C 1F3FC 200D 2640 FE0F
+S;1F93C 1F3FC 200D 2640
+S;1F93C 1F3FD 200D 2640 FE0F
+S;1F93C 1F3FD 200D 2640
+S;1F93C 1F3FE 200D 2640 FE0F
+S;1F93C 1F3FE 200D 2640
+S;1F93C 1F3FF 200D 2640 FE0F
+S;1F93C 1F3FF 200D 2640
+S;1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FF
+S;1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FE
+S;1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FB
+S;1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FC
+S;1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FD
+S;1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FB
+S;1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FC
+S;1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FD
+S;1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FE
+S;1F93D
+S;1F93D 1F3FB
+S;1F93D 1F3FC
+S;1F93D 1F3FD
+S;1F93D 1F3FE
+S;1F93D 1F3FF
+S;1F93D 200D 2642 FE0F
+S;1F93D 200D 2642
+S;1F93D 1F3FB 200D 2642 FE0F
+S;1F93D 1F3FB 200D 2642
+S;1F93D 1F3FC 200D 2642 FE0F
+S;1F93D 1F3FC 200D 2642
+S;1F93D 1F3FD 200D 2642 FE0F
+S;1F93D 1F3FD 200D 2642
+S;1F93D 1F3FE 200D 2642 FE0F
+S;1F93D 1F3FE 200D 2642
+S;1F93D 1F3FF 200D 2642 FE0F
+S;1F93D 1F3FF 200D 2642
+S;1F93D 200D 2640 FE0F
+S;1F93D 200D 2640
+S;1F93D 1F3FB 200D 2640 FE0F
+S;1F93D 1F3FB 200D 2640
+S;1F93D 1F3FC 200D 2640 FE0F
+S;1F93D 1F3FC 200D 2640
+S;1F93D 1F3FD 200D 2640 FE0F
+S;1F93D 1F3FD 200D 2640
+S;1F93D 1F3FE 200D 2640 FE0F
+S;1F93D 1F3FE 200D 2640
+S;1F93D 1F3FF 200D 2640 FE0F
+S;1F93D 1F3FF 200D 2640
+S;1F93E
+S;1F93E 1F3FB
+S;1F93E 1F3FC
+S;1F93E 1F3FD
+S;1F93E 1F3FE
+S;1F93E 1F3FF
+S;1F93E 200D 2642 FE0F
+S;1F93E 200D 2642
+S;1F93E 1F3FB 200D 2642 FE0F
+S;1F93E 1F3FB 200D 2642
+S;1F93E 1F3FC 200D 2642 FE0F
+S;1F93E 1F3FC 200D 2642
+S;1F93E 1F3FD 200D 2642 FE0F
+S;1F93E 1F3FD 200D 2642
+S;1F93E 1F3FE 200D 2642 FE0F
+S;1F93E 1F3FE 200D 2642
+S;1F93E 1F3FF 200D 2642 FE0F
+S;1F93E 1F3FF 200D 2642
+S;1F93E 200D 2640 FE0F
+S;1F93E 200D 2640
+S;1F93E 1F3FB 200D 2640 FE0F
+S;1F93E 1F3FB 200D 2640
+S;1F93E 1F3FC 200D 2640 FE0F
+S;1F93E 1F3FC 200D 2640
+S;1F93E 1F3FD 200D 2640 FE0F
+S;1F93E 1F3FD 200D 2640
+S;1F93E 1F3FE 200D 2640 FE0F
+S;1F93E 1F3FE 200D 2640
+S;1F93E 1F3FF 200D 2640 FE0F
+S;1F93E 1F3FF 200D 2640
+S;1F939
+S;1F939 1F3FB
+S;1F939 1F3FC
+S;1F939 1F3FD
+S;1F939 1F3FE
+S;1F939 1F3FF
+S;1F939 200D 2642 FE0F
+S;1F939 200D 2642
+S;1F939 1F3FB 200D 2642 FE0F
+S;1F939 1F3FB 200D 2642
+S;1F939 1F3FC 200D 2642 FE0F
+S;1F939 1F3FC 200D 2642
+S;1F939 1F3FD 200D 2642 FE0F
+S;1F939 1F3FD 200D 2642
+S;1F939 1F3FE 200D 2642 FE0F
+S;1F939 1F3FE 200D 2642
+S;1F939 1F3FF 200D 2642 FE0F
+S;1F939 1F3FF 200D 2642
+S;1F939 200D 2640 FE0F
+S;1F939 200D 2640
+S;1F939 1F3FB 200D 2640 FE0F
+S;1F939 1F3FB 200D 2640
+S;1F939 1F3FC 200D 2640 FE0F
+S;1F939 1F3FC 200D 2640
+S;1F939 1F3FD 200D 2640 FE0F
+S;1F939 1F3FD 200D 2640
+S;1F939 1F3FE 200D 2640 FE0F
+S;1F939 1F3FE 200D 2640
+S;1F939 1F3FF 200D 2640 FE0F
+S;1F939 1F3FF 200D 2640
+S;1F9D8
+S;1F9D8 1F3FB
+S;1F9D8 1F3FC
+S;1F9D8 1F3FD
+S;1F9D8 1F3FE
+S;1F9D8 1F3FF
+S;1F9D8 200D 2642 FE0F
+S;1F9D8 200D 2642
+S;1F9D8 1F3FB 200D 2642 FE0F
+S;1F9D8 1F3FB 200D 2642
+S;1F9D8 1F3FC 200D 2642 FE0F
+S;1F9D8 1F3FC 200D 2642
+S;1F9D8 1F3FD 200D 2642 FE0F
+S;1F9D8 1F3FD 200D 2642
+S;1F9D8 1F3FE 200D 2642 FE0F
+S;1F9D8 1F3FE 200D 2642
+S;1F9D8 1F3FF 200D 2642 FE0F
+S;1F9D8 1F3FF 200D 2642
+S;1F9D8 200D 2640 FE0F
+S;1F9D8 200D 2640
+S;1F9D8 1F3FB 200D 2640 FE0F
+S;1F9D8 1F3FB 200D 2640
+S;1F9D8 1F3FC 200D 2640 FE0F
+S;1F9D8 1F3FC 200D 2640
+S;1F9D8 1F3FD 200D 2640 FE0F
+S;1F9D8 1F3FD 200D 2640
+S;1F9D8 1F3FE 200D 2640 FE0F
+S;1F9D8 1F3FE 200D 2640
+S;1F9D8 1F3FF 200D 2640 FE0F
+S;1F9D8 1F3FF 200D 2640
+S;1F6C0
+S;1F6C0 1F3FB
+S;1F6C0 1F3FC
+S;1F6C0 1F3FD
+S;1F6C0 1F3FE
+S;1F6C0 1F3FF
+S;1F6CC
+S;1F6CC 1F3FB
+S;1F6CC 1F3FC
+S;1F6CC 1F3FD
+S;1F6CC 1F3FE
+S;1F6CC 1F3FF
+S;1F9D1 200D 1F91D 200D 1F9D1
+S;1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB
+S;1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC
+S;1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD
+S;1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE
+S;1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF
+S;1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE
+S;1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF
+S;1F46D
+S;1F46D 1F3FB
+S;1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB
+S;1F46D 1F3FC
+S;1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC
+S;1F46D 1F3FD
+S;1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD
+S;1F46D 1F3FE
+S;1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE
+S;1F46D 1F3FF
+S;1F46B
+S;1F46B 1F3FB
+S;1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC
+S;1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD
+S;1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF
+S;1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB
+S;1F46B 1F3FC
+S;1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD
+S;1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE
+S;1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF
+S;1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB
+S;1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC
+S;1F46B 1F3FD
+S;1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE
+S;1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF
+S;1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB
+S;1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC
+S;1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD
+S;1F46B 1F3FE
+S;1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF
+S;1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB
+S;1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC
+S;1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD
+S;1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE
+S;1F46B 1F3FF
+S;1F46C
+S;1F46C 1F3FB
+S;1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB
+S;1F46C 1F3FC
+S;1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC
+S;1F46C 1F3FD
+S;1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD
+S;1F46C 1F3FE
+S;1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE
+S;1F46C 1F3FF
+S;1F48F
+S;1F48F 1F3FB
+S;1F48F 1F3FC
+S;1F48F 1F3FD
+S;1F48F 1F3FE
+S;1F48F 1F3FF
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+S;1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+S;1F469 200D 2764 FE0F 200D 1F48B 200D 1F468
+S;1F469 200D 2764 200D 1F48B 200D 1F468
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F468 200D 2764 FE0F 200D 1F48B 200D 1F468
+S;1F468 200D 2764 200D 1F48B 200D 1F468
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF
+S;1F469 200D 2764 FE0F 200D 1F48B 200D 1F469
+S;1F469 200D 2764 200D 1F48B 200D 1F469
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF
+S;1F491
+S;1F491 1F3FB
+S;1F491 1F3FC
+S;1F491 1F3FD
+S;1F491 1F3FE
+S;1F491 1F3FF
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE
+S;1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF
+S;1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE
+S;1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF
+S;1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE
+S;1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF
+S;1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD
+S;1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF
+S;1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD
+S;1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE
+S;1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE
+S;1F469 200D 2764 FE0F 200D 1F468
+S;1F469 200D 2764 200D 1F468
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F469 1F3FB 200D 2764 200D 1F468 1F3FB
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F469 1F3FB 200D 2764 200D 1F468 1F3FC
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F469 1F3FB 200D 2764 200D 1F468 1F3FD
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 2764 200D 1F468 1F3FE
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F469 1F3FB 200D 2764 200D 1F468 1F3FF
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F469 1F3FC 200D 2764 200D 1F468 1F3FB
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F469 1F3FC 200D 2764 200D 1F468 1F3FC
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F469 1F3FC 200D 2764 200D 1F468 1F3FD
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F469 1F3FC 200D 2764 200D 1F468 1F3FE
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F469 1F3FC 200D 2764 200D 1F468 1F3FF
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F469 1F3FD 200D 2764 200D 1F468 1F3FB
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F469 1F3FD 200D 2764 200D 1F468 1F3FC
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F469 1F3FD 200D 2764 200D 1F468 1F3FD
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F469 1F3FD 200D 2764 200D 1F468 1F3FE
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F469 1F3FD 200D 2764 200D 1F468 1F3FF
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F469 1F3FE 200D 2764 200D 1F468 1F3FB
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F469 1F3FE 200D 2764 200D 1F468 1F3FC
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F469 1F3FE 200D 2764 200D 1F468 1F3FD
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F469 1F3FE 200D 2764 200D 1F468 1F3FE
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F469 1F3FE 200D 2764 200D 1F468 1F3FF
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F469 1F3FF 200D 2764 200D 1F468 1F3FB
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F469 1F3FF 200D 2764 200D 1F468 1F3FC
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F469 1F3FF 200D 2764 200D 1F468 1F3FD
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F469 1F3FF 200D 2764 200D 1F468 1F3FE
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F469 1F3FF 200D 2764 200D 1F468 1F3FF
+S;1F468 200D 2764 FE0F 200D 1F468
+S;1F468 200D 2764 200D 1F468
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F468 1F3FB 200D 2764 200D 1F468 1F3FB
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 2764 200D 1F468 1F3FC
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 2764 200D 1F468 1F3FD
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 2764 200D 1F468 1F3FE
+S;1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F468 1F3FB 200D 2764 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F468 1F3FC 200D 2764 200D 1F468 1F3FB
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F468 1F3FC 200D 2764 200D 1F468 1F3FC
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 2764 200D 1F468 1F3FD
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 2764 200D 1F468 1F3FE
+S;1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F468 1F3FC 200D 2764 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 2764 200D 1F468 1F3FB
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F468 1F3FD 200D 2764 200D 1F468 1F3FC
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F468 1F3FD 200D 2764 200D 1F468 1F3FD
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 2764 200D 1F468 1F3FE
+S;1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F468 1F3FD 200D 2764 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 2764 200D 1F468 1F3FB
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 2764 200D 1F468 1F3FC
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F468 1F3FE 200D 2764 200D 1F468 1F3FD
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F468 1F3FE 200D 2764 200D 1F468 1F3FE
+S;1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F468 1F3FE 200D 2764 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 2764 200D 1F468 1F3FB
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 2764 200D 1F468 1F3FC
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 2764 200D 1F468 1F3FD
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE
+S;1F468 1F3FF 200D 2764 200D 1F468 1F3FE
+S;1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF
+S;1F468 1F3FF 200D 2764 200D 1F468 1F3FF
+S;1F469 200D 2764 FE0F 200D 1F469
+S;1F469 200D 2764 200D 1F469
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB
+S;1F469 1F3FB 200D 2764 200D 1F469 1F3FB
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 2764 200D 1F469 1F3FC
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 2764 200D 1F469 1F3FD
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 2764 200D 1F469 1F3FE
+S;1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF
+S;1F469 1F3FB 200D 2764 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB
+S;1F469 1F3FC 200D 2764 200D 1F469 1F3FB
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC
+S;1F469 1F3FC 200D 2764 200D 1F469 1F3FC
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 2764 200D 1F469 1F3FD
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 2764 200D 1F469 1F3FE
+S;1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF
+S;1F469 1F3FC 200D 2764 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 2764 200D 1F469 1F3FB
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC
+S;1F469 1F3FD 200D 2764 200D 1F469 1F3FC
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD
+S;1F469 1F3FD 200D 2764 200D 1F469 1F3FD
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 2764 200D 1F469 1F3FE
+S;1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF
+S;1F469 1F3FD 200D 2764 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 2764 200D 1F469 1F3FB
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 2764 200D 1F469 1F3FC
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD
+S;1F469 1F3FE 200D 2764 200D 1F469 1F3FD
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE
+S;1F469 1F3FE 200D 2764 200D 1F469 1F3FE
+S;1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF
+S;1F469 1F3FE 200D 2764 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 2764 200D 1F469 1F3FB
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 2764 200D 1F469 1F3FC
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 2764 200D 1F469 1F3FD
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE
+S;1F469 1F3FF 200D 2764 200D 1F469 1F3FE
+S;1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF
+S;1F469 1F3FF 200D 2764 200D 1F469 1F3FF
+S;1F468 200D 1F469 200D 1F466
+S;1F468 200D 1F469 200D 1F467
+S;1F468 200D 1F469 200D 1F467 200D 1F466
+S;1F468 200D 1F469 200D 1F466 200D 1F466
+S;1F468 200D 1F469 200D 1F467 200D 1F467
+S;1F468 200D 1F468 200D 1F466
+S;1F468 200D 1F468 200D 1F467
+S;1F468 200D 1F468 200D 1F467 200D 1F466
+S;1F468 200D 1F468 200D 1F466 200D 1F466
+S;1F468 200D 1F468 200D 1F467 200D 1F467
+S;1F469 200D 1F469 200D 1F466
+S;1F469 200D 1F469 200D 1F467
+S;1F469 200D 1F469 200D 1F467 200D 1F466
+S;1F469 200D 1F469 200D 1F466 200D 1F466
+S;1F469 200D 1F469 200D 1F467 200D 1F467
+S;1F468 200D 1F466
+S;1F468 200D 1F466 200D 1F466
+S;1F468 200D 1F467
+S;1F468 200D 1F467 200D 1F466
+S;1F468 200D 1F467 200D 1F467
+S;1F469 200D 1F466
+S;1F469 200D 1F466 200D 1F466
+S;1F469 200D 1F467
+S;1F469 200D 1F467 200D 1F466
+S;1F469 200D 1F467 200D 1F467
+S;1F5E3 FE0F
+S;1F464
+S;1F465
+S;1FAC2
+S;1F46A
+S;1F9D1 200D 1F9D1 200D 1F9D2
+S;1F9D1 200D 1F9D1 200D 1F9D2 200D 1F9D2
+S;1F9D1 200D 1F9D2
+S;1F9D1 200D 1F9D2 200D 1F9D2
+S;1F463
+S;1FAC6
+S;1F435
+S;1F412
+S;1F98D
+S;1F9A7
+S;1F436
+S;1F415
+S;1F9AE
+S;1F415 200D 1F9BA
+S;1F429
+S;1F43A
+S;1F98A
+S;1F99D
+S;1F431
+S;1F408
+S;1F408 200D 2B1B
+S;1F981
+S;1F42F
+S;1F405
+S;1F406
+S;1F434
+S;1FACE
+S;1FACF
+S;1F40E
+S;1F984
+S;1F993
+S;1F98C
+S;1F9AC
+S;1F42E
+S;1F402
+S;1F403
+S;1F404
+S;1F437
+S;1F416
+S;1F417
+S;1F43D
+S;1F40F
+S;1F411
+S;1F410
+S;1F42A
+S;1F42B
+S;1F999
+S;1F992
+S;1F418
+S;1F9A3
+S;1F98F
+S;1F99B
+S;1F42D
+S;1F401
+S;1F400
+S;1F439
+S;1F430
+S;1F407
+S;1F43F FE0F
+S;1F9AB
+S;1F994
+S;1F987
+S;1F43B
+S;1F43B 200D 2744 FE0F
+S;1F43B 200D 2744
+S;1F428
+S;1F43C
+S;1F9A5
+S;1F9A6
+S;1F9A8
+S;1F998
+S;1F9A1
+S;1F43E
+S;1F983
+S;1F414
+S;1F413
+S;1F423
+S;1F424
+S;1F425
+S;1F426
+S;1F427
+S;1F54A FE0F
+S;1F985
+S;1F986
+S;1F9A2
+S;1F989
+S;1F9A4
+S;1FAB6
+S;1F9A9
+S;1F99A
+S;1F99C
+S;1FABD
+S;1F426 200D 2B1B
+S;1FABF
+S;1F426 200D 1F525
+S;1F438
+S;1F40A
+S;1F422
+S;1F98E
+S;1F40D
+S;1F432
+S;1F409
+S;1F995
+S;1F996
+S;1F433
+S;1F40B
+S;1F42C
+S;1FACD
+S;1F9AD
+S;1F41F
+S;1F420
+S;1F421
+S;1F988
+S;1F419
+S;1F41A
+S;1FAB8
+S;1FABC
+S;1F980
+S;1F99E
+S;1F990
+S;1F991
+S;1F9AA
+S;1F40C
+S;1F98B
+S;1F41B
+S;1F41C
+S;1F41D
+S;1FAB2
+S;1F41E
+S;1F997
+S;1FAB3
+S;1F577 FE0F
+S;1F578 FE0F
+S;1F982
+S;1F99F
+S;1FAB0
+S;1FAB1
+S;1F9A0
+S;1F490
+S;1F338
+S;1F4AE
+S;1FAB7
+S;1F3F5 FE0F
+S;1F339
+S;1F940
+S;1F33A
+S;1F33B
+S;1F33C
+S;1F337
+S;1FABB
+S;1F331
+S;1FAB4
+S;1F332
+S;1F333
+S;1F334
+S;1F335
+S;1F33E
+S;1F33F
+S;2618 FE0F
+S;1F340
+S;1F341
+S;1F342
+S;1F343
+S;1FAB9
+S;1FABA
+S;1F344
+S;1FABE
+S;1F347
+S;1F348
+S;1F349
+S;1F34A
+S;1F34B
+S;1F34B 200D 1F7E9
+S;1F34C
+S;1F34D
+S;1F96D
+S;1F34E
+S;1F34F
+S;1F350
+S;1F351
+S;1F352
+S;1F353
+S;1FAD0
+S;1F95D
+S;1F345
+S;1FAD2
+S;1F965
+S;1F951
+S;1F346
+S;1F954
+S;1F955
+S;1F33D
+S;1F336 FE0F
+S;1FAD1
+S;1F952
+S;1F96C
+S;1F966
+S;1F9C4
+S;1F9C5
+S;1F95C
+S;1FAD8
+S;1F330
+S;1FADA
+S;1FADB
+S;1F344 200D 1F7EB
+S;1FADC
+S;1F35E
+S;1F950
+S;1F956
+S;1FAD3
+S;1F968
+S;1F96F
+S;1F95E
+S;1F9C7
+S;1F9C0
+S;1F356
+S;1F357
+S;1F969
+S;1F953
+S;1F354
+S;1F35F
+S;1F355
+S;1F32D
+S;1F96A
+S;1F32E
+S;1F32F
+S;1FAD4
+S;1F959
+S;1F9C6
+S;1F95A
+S;1F373
+S;1F958
+S;1F372
+S;1FAD5
+S;1F963
+S;1F957
+S;1F37F
+S;1F9C8
+S;1F9C2
+S;1F96B
+S;1F371
+S;1F358
+S;1F359
+S;1F35A
+S;1F35B
+S;1F35C
+S;1F35D
+S;1F360
+S;1F362
+S;1F363
+S;1F364
+S;1F365
+S;1F96E
+S;1F361
+S;1F95F
+S;1F960
+S;1F961
+S;1F366
+S;1F367
+S;1F368
+S;1F369
+S;1F36A
+S;1F382
+S;1F370
+S;1F9C1
+S;1F967
+S;1F36B
+S;1F36C
+S;1F36D
+S;1F36E
+S;1F36F
+S;1F37C
+S;1F95B
+S;2615
+S;1FAD6
+S;1F375
+S;1F376
+S;1F37E
+S;1F377
+S;1F378
+S;1F379
+S;1F37A
+S;1F37B
+S;1F942
+S;1F943
+S;1FAD7
+S;1F964
+S;1F9CB
+S;1F9C3
+S;1F9C9
+S;1F9CA
+S;1F962
+S;1F37D FE0F
+S;1F374
+S;1F944
+S;1F52A
+S;1FAD9
+S;1F3FA
+S;1F30D
+S;1F30E
+S;1F30F
+S;1F310
+S;1F5FA FE0F
+S;1F5FE
+S;1F9ED
+S;1F3D4 FE0F
+S;26F0 FE0F
+S;1F6D8
+S;1F30B
+S;1F5FB
+S;1F3D5 FE0F
+S;1F3D6 FE0F
+S;1F3DC FE0F
+S;1F3DD FE0F
+S;1F3DE FE0F
+S;1F3DF FE0F
+S;1F3DB FE0F
+S;1F3D7 FE0F
+S;1F9F1
+S;1FAA8
+S;1FAB5
+S;1F6D6
+S;1F3D8 FE0F
+S;1F3DA FE0F
+S;1F3E0
+S;1F3E1
+S;1F3E2
+S;1F3E3
+S;1F3E4
+S;1F3E5
+S;1F3E6
+S;1F3E8
+S;1F3E9
+S;1F3EA
+S;1F3EB
+S;1F3EC
+S;1F3ED
+S;1F3EF
+S;1F3F0
+S;1F492
+S;1F5FC
+S;1F5FD
+S;26EA
+S;1F54C
+S;1F6D5
+S;1F54D
+S;26E9 FE0F
+S;1F54B
+S;26F2
+S;26FA
+S;1F301
+S;1F303
+S;1F3D9 FE0F
+S;1F304
+S;1F305
+S;1F306
+S;1F307
+S;1F309
+S;2668 FE0F
+S;1F3A0
+S;1F6DD
+S;1F3A1
+S;1F3A2
+S;1F488
+S;1F3AA
+S;1F682
+S;1F683
+S;1F684
+S;1F685
+S;1F686
+S;1F687
+S;1F688
+S;1F689
+S;1F68A
+S;1F69D
+S;1F69E
+S;1F68B
+S;1F68C
+S;1F68D
+S;1F68E
+S;1F690
+S;1F691
+S;1F692
+S;1F693
+S;1F694
+S;1F695
+S;1F696
+S;1F697
+S;1F698
+S;1F699
+S;1F6FB
+S;1F69A
+S;1F69B
+S;1F69C
+S;1F3CE FE0F
+S;1F3CD FE0F
+S;1F6F5
+S;1F9BD
+S;1F9BC
+S;1F6FA
+S;1F6B2
+S;1F6F4
+S;1F6F9
+S;1F6FC
+S;1F68F
+S;1F6E3 FE0F
+S;1F6E4 FE0F
+S;1F6E2 FE0F
+S;26FD
+S;1F6DE
+S;1F6A8
+S;1F6A5
+S;1F6A6
+S;1F6D1
+S;1F6A7
+S;2693
+S;1F6DF
+S;26F5
+S;1F6F6
+S;1F6A4
+S;1F6F3 FE0F
+S;26F4 FE0F
+S;1F6E5 FE0F
+S;1F6A2
+S;2708 FE0F
+S;1F6E9 FE0F
+S;1F6EB
+S;1F6EC
+S;1FA82
+S;1F4BA
+S;1F681
+S;1F69F
+S;1F6A0
+S;1F6A1
+S;1F6F0 FE0F
+S;1F680
+S;1F6F8
+S;1F6CE FE0F
+S;1F9F3
+S;231B
+S;23F3
+S;231A
+S;23F0
+S;23F1 FE0F
+S;23F2 FE0F
+S;1F570 FE0F
+S;1F55B
+S;1F567
+S;1F550
+S;1F55C
+S;1F551
+S;1F55D
+S;1F552
+S;1F55E
+S;1F553
+S;1F55F
+S;1F554
+S;1F560
+S;1F555
+S;1F561
+S;1F556
+S;1F562
+S;1F557
+S;1F563
+S;1F558
+S;1F564
+S;1F559
+S;1F565
+S;1F55A
+S;1F566
+S;1F311
+S;1F312
+S;1F313
+S;1F314
+S;1F315
+S;1F316
+S;1F317
+S;1F318
+S;1F319
+S;1F31A
+S;1F31B
+S;1F31C
+S;1F321 FE0F
+S;2600 FE0F
+S;1F31D
+S;1F31E
+S;1FA90
+S;2B50
+S;1F31F
+S;1F320
+S;1F30C
+S;2601 FE0F
+S;26C5
+S;26C8 FE0F
+S;1F324 FE0F
+S;1F325 FE0F
+S;1F326 FE0F
+S;1F327 FE0F
+S;1F328 FE0F
+S;1F329 FE0F
+S;1F32A FE0F
+S;1F32B FE0F
+S;1F32C FE0F
+S;1F300
+S;1F308
+S;1F302
+S;2602 FE0F
+S;2614
+S;26F1 FE0F
+S;26A1
+S;2744 FE0F
+S;2603 FE0F
+S;26C4
+S;2604 FE0F
+S;1F525
+S;1F4A7
+S;1F30A
+S;1F383
+S;1F384
+S;1F386
+S;1F387
+S;1F9E8
+S;2728
+S;1F388
+S;1F389
+S;1F38A
+S;1F38B
+S;1F38D
+S;1F38E
+S;1F38F
+S;1F390
+S;1F391
+S;1F9E7
+S;1F380
+S;1F381
+S;1F397 FE0F
+S;1F39F FE0F
+S;1F3AB
+S;1F396 FE0F
+S;1F3C6
+S;1F3C5
+S;1F947
+S;1F948
+S;1F949
+S;26BD
+S;26BE
+S;1F94E
+S;1F3C0
+S;1F3D0
+S;1F3C8
+S;1F3C9
+S;1F3BE
+S;1F94F
+S;1F3B3
+S;1F3CF
+S;1F3D1
+S;1F3D2
+S;1F94D
+S;1F3D3
+S;1F3F8
+S;1F94A
+S;1F94B
+S;1F945
+S;26F3
+S;26F8 FE0F
+S;1F3A3
+S;1F93F
+S;1F3BD
+S;1F3BF
+S;1F6F7
+S;1F94C
+S;1F3AF
+S;1FA80
+S;1FA81
+S;1F52B
+S;1F3B1
+S;1F52E
+S;1FA84
+S;1F3AE
+S;1F579 FE0F
+S;1F3B0
+S;1F3B2
+S;1F9E9
+S;1F9F8
+S;1FA85
+S;1FAA9
+S;1FA86
+S;2660 FE0F
+S;2665 FE0F
+S;2666 FE0F
+S;2663 FE0F
+S;265F FE0F
+S;1F0CF
+S;1F004
+S;1F3B4
+S;1F3AD
+S;1F5BC FE0F
+S;1F3A8
+S;1F9F5
+S;1FAA1
+S;1F9F6
+S;1FAA2
+S;1F453
+S;1F576 FE0F
+S;1F97D
+S;1F97C
+S;1F9BA
+S;1F454
+S;1F455
+S;1F456
+S;1F9E3
+S;1F9E4
+S;1F9E5
+S;1F9E6
+S;1F457
+S;1F458
+S;1F97B
+S;1FA71
+S;1FA72
+S;1FA73
+S;1F459
+S;1F45A
+S;1FAAD
+S;1F45B
+S;1F45C
+S;1F45D
+S;1F6CD FE0F
+S;1F392
+S;1FA74
+S;1F45E
+S;1F45F
+S;1F97E
+S;1F97F
+S;1F460
+S;1F461
+S;1FA70
+S;1F462
+S;1FAAE
+S;1F451
+S;1F452
+S;1F3A9
+S;1F393
+S;1F9E2
+S;1FA96
+S;26D1 FE0F
+S;1F4FF
+S;1F484
+S;1F48D
+S;1F48E
+S;1F507
+S;1F508
+S;1F509
+S;1F50A
+S;1F4E2
+S;1F4E3
+S;1F4EF
+S;1F514
+S;1F515
+S;1F3BC
+S;1F3B5
+S;1F3B6
+S;1F399 FE0F
+S;1F39A FE0F
+S;1F39B FE0F
+S;1F3A4
+S;1F3A7
+S;1F4FB
+S;1F3B7
+S;1F3BA
+S;1FA8A
+S;1FA97
+S;1F3B8
+S;1F3B9
+S;1F3BB
+S;1FA95
+S;1F941
+S;1FA98
+S;1FA87
+S;1FA88
+S;1FA89
+S;1F4F1
+S;1F4F2
+S;260E FE0F
+S;1F4DE
+S;1F4DF
+S;1F4E0
+S;1F50B
+S;1FAAB
+S;1F50C
+S;1F4BB
+S;1F5A5 FE0F
+S;1F5A8 FE0F
+S;2328 FE0F
+S;1F5B1 FE0F
+S;1F5B2 FE0F
+S;1F4BD
+S;1F4BE
+S;1F4BF
+S;1F4C0
+S;1F9EE
+S;1F3A5
+S;1F39E FE0F
+S;1F4FD FE0F
+S;1F3AC
+S;1F4FA
+S;1F4F7
+S;1F4F8
+S;1F4F9
+S;1F4FC
+S;1F50D
+S;1F50E
+S;1F56F FE0F
+S;1F4A1
+S;1F526
+S;1F3EE
+S;1FA94
+S;1F4D4
+S;1F4D5
+S;1F4D6
+S;1F4D7
+S;1F4D8
+S;1F4D9
+S;1F4DA
+S;1F4D3
+S;1F4D2
+S;1F4C3
+S;1F4DC
+S;1F4C4
+S;1F4F0
+S;1F5DE FE0F
+S;1F4D1
+S;1F516
+S;1F3F7 FE0F
+S;1FA99
+S;1F4B0
+S;1FA8E
+S;1F4B4
+S;1F4B5
+S;1F4B6
+S;1F4B7
+S;1F4B8
+S;1F4B3
+S;1F9FE
+S;1F4B9
+S;2709 FE0F
+S;1F4E7
+S;1F4E8
+S;1F4E9
+S;1F4E4
+S;1F4E5
+S;1F4E6
+S;1F4EB
+S;1F4EA
+S;1F4EC
+S;1F4ED
+S;1F4EE
+S;1F5F3 FE0F
+S;270F FE0F
+S;2712 FE0F
+S;1F58B FE0F
+S;1F58A FE0F
+S;1F58C FE0F
+S;1F58D FE0F
+S;1F4DD
+S;1F4BC
+S;1F4C1
+S;1F4C2
+S;1F5C2 FE0F
+S;1F4C5
+S;1F4C6
+S;1F5D2 FE0F
+S;1F5D3 FE0F
+S;1F4C7
+S;1F4C8
+S;1F4C9
+S;1F4CA
+S;1F4CB
+S;1F4CC
+S;1F4CD
+S;1F4CE
+S;1F587 FE0F
+S;1F4CF
+S;1F4D0
+S;2702 FE0F
+S;1F5C3 FE0F
+S;1F5C4 FE0F
+S;1F5D1 FE0F
+S;1F512
+S;1F513
+S;1F50F
+S;1F510
+S;1F511
+S;1F5DD FE0F
+S;1F528
+S;1FA93
+S;26CF FE0F
+S;2692 FE0F
+S;1F6E0 FE0F
+S;1F5E1 FE0F
+S;2694 FE0F
+S;1F4A3
+S;1FA83
+S;1F3F9
+S;1F6E1 FE0F
+S;1FA9A
+S;1F527
+S;1FA9B
+S;1F529
+S;2699 FE0F
+S;1F5DC FE0F
+S;2696 FE0F
+S;1F9AF
+S;1F517
+S;26D3 FE0F 200D 1F4A5
+S;26D3 FE0F
+S;1FA9D
+S;1F9F0
+S;1F9F2
+S;1FA9C
+S;1FA8F
+S;2697 FE0F
+S;1F9EA
+S;1F9EB
+S;1F9EC
+S;1F52C
+S;1F52D
+S;1F4E1
+S;1F489
+S;1FA78
+S;1F48A
+S;1FA79
+S;1FA7C
+S;1FA7A
+S;1FA7B
+S;1F6AA
+S;1F6D7
+S;1FA9E
+S;1FA9F
+S;1F6CF FE0F
+S;1F6CB FE0F
+S;1FA91
+S;1F6BD
+S;1FAA0
+S;1F6BF
+S;1F6C1
+S;1FAA4
+S;1FA92
+S;1F9F4
+S;1F9F7
+S;1F9F9
+S;1F9FA
+S;1F9FB
+S;1FAA3
+S;1F9FC
+S;1FAE7
+S;1FAA5
+S;1F9FD
+S;1F9EF
+S;1F6D2
+S;1F6AC
+S;26B0 FE0F
+S;1FAA6
+S;26B1 FE0F
+S;1F9FF
+S;1FAAC
+S;1F5FF
+S;1FAA7
+S;1FAAA
+S;1F3E7
+S;1F6AE
+S;1F6B0
+S;267F
+S;1F6B9
+S;1F6BA
+S;1F6BB
+S;1F6BC
+S;1F6BE
+S;1F6C2
+S;1F6C3
+S;1F6C4
+S;1F6C5
+S;26A0 FE0F
+S;1F6B8
+S;26D4
+S;1F6AB
+S;1F6B3
+S;1F6AD
+S;1F6AF
+S;1F6B1
+S;1F6B7
+S;1F4F5
+S;1F51E
+S;2622 FE0F
+S;2623 FE0F
+S;2B06 FE0F
+S;2197 FE0F
+S;27A1 FE0F
+S;2198 FE0F
+S;2B07 FE0F
+S;2199 FE0F
+S;2B05 FE0F
+S;2196 FE0F
+S;2195 FE0F
+S;2194 FE0F
+S;21A9 FE0F
+S;21AA FE0F
+S;2934 FE0F
+S;2935 FE0F
+S;1F503
+S;1F504
+S;1F519
+S;1F51A
+S;1F51B
+S;1F51C
+S;1F51D
+S;1F6D0
+S;269B FE0F
+S;1F549 FE0F
+S;2721 FE0F
+S;2638 FE0F
+S;262F FE0F
+S;271D FE0F
+S;2626 FE0F
+S;262A FE0F
+S;262E FE0F
+S;1F54E
+S;1F52F
+S;1FAAF
+S;2648
+S;2649
+S;264A
+S;264B
+S;264C
+S;264D
+S;264E
+S;264F
+S;2650
+S;2651
+S;2652
+S;2653
+S;26CE
+S;1F500
+S;1F501
+S;1F502
+S;25B6 FE0F
+S;23E9
+S;23ED FE0F
+S;23EF FE0F
+S;25C0 FE0F
+S;23EA
+S;23EE FE0F
+S;1F53C
+S;23EB
+S;1F53D
+S;23EC
+S;23F8 FE0F
+S;23F9 FE0F
+S;23FA FE0F
+S;23CF FE0F
+S;1F3A6
+S;1F505
+S;1F506
+S;1F4F6
+S;1F6DC
+S;1F4F3
+S;1F4F4
+S;2640 FE0F
+S;2642 FE0F
+S;26A7 FE0F
+S;2716 FE0F
+S;2795
+S;2796
+S;2797
+S;1F7F0
+S;267E FE0F
+S;203C FE0F
+S;2049 FE0F
+S;2753
+S;2754
+S;2755
+S;2757
+S;3030 FE0F
+S;1F4B1
+S;1F4B2
+S;2695 FE0F
+S;267B FE0F
+S;269C FE0F
+S;1F531
+S;1F4DB
+S;1F530
+S;2B55
+S;2705
+S;2611 FE0F
+S;2714 FE0F
+S;274C
+S;274E
+S;27B0
+S;27BF
+S;303D FE0F
+S;2733 FE0F
+S;2734 FE0F
+S;2747 FE0F
+S;00A9 FE0F
+S;00AE FE0F
+S;2122 FE0F
+S;1FADF
+S;0023 FE0F 20E3
+S;002A FE0F 20E3
+S;0030 FE0F 20E3
+S;0031 FE0F 20E3
+S;0032 FE0F 20E3
+S;0033 FE0F 20E3
+S;0034 FE0F 20E3
+S;0035 FE0F 20E3
+S;0036 FE0F 20E3
+S;0037 FE0F 20E3
+S;0038 FE0F 20E3
+S;0039 FE0F 20E3
+S;1F51F
+S;1F520
+S;1F521
+S;1F522
+S;1F523
+S;1F524
+S;1F170 FE0F
+S;1F18E
+S;1F171 FE0F
+S;1F191
+S;1F192
+S;1F193
+S;2139 FE0F
+S;1F194
+S;24C2 FE0F
+S;1F195
+S;1F196
+S;1F17E FE0F
+S;1F197
+S;1F17F FE0F
+S;1F198
+S;1F199
+S;1F19A
+S;1F201
+S;1F202 FE0F
+S;1F237 FE0F
+S;1F236
+S;1F22F
+S;1F250
+S;1F239
+S;1F21A
+S;1F232
+S;1F251
+S;1F238
+S;1F234
+S;1F233
+S;3297 FE0F
+S;3299 FE0F
+S;1F23A
+S;1F235
+S;1F534
+S;1F7E0
+S;1F7E1
+S;1F7E2
+S;1F535
+S;1F7E3
+S;1F7E4
+S;26AB
+S;26AA
+S;1F7E5
+S;1F7E7
+S;1F7E8
+S;1F7E9
+S;1F7E6
+S;1F7EA
+S;1F7EB
+S;2B1B
+S;2B1C
+S;25FC FE0F
+S;25FB FE0F
+S;25FE
+S;25FD
+S;25AA FE0F
+S;25AB FE0F
+S;1F536
+S;1F537
+S;1F538
+S;1F539
+S;1F53A
+S;1F53B
+S;1F4A0
+S;1F518
+S;1F533
+S;1F532
+S;1F3C1
+S;1F6A9
+S;1F38C
+S;1F3F4
+S;1F3F3 FE0F
+S;1F3F3 FE0F 200D 1F308
+S;1F3F3 FE0F 200D 26A7 FE0F
+S;1F3F3 FE0F 200D 26A7
+S;1F3F4 200D 2620 FE0F
+S;1F3F4 200D 2620
+S;1F1E6 1F1E8
+S;1F1E6 1F1E9
+S;1F1E6 1F1EA
+S;1F1E6 1F1EB
+S;1F1E6 1F1EC
+S;1F1E6 1F1EE
+S;1F1E6 1F1F1
+S;1F1E6 1F1F2
+S;1F1E6 1F1F4
+S;1F1E6 1F1F6
+S;1F1E6 1F1F7
+S;1F1E6 1F1F8
+S;1F1E6 1F1F9
+S;1F1E6 1F1FA
+S;1F1E6 1F1FC
+S;1F1E6 1F1FD
+S;1F1E6 1F1FF
+S;1F1E7 1F1E6
+S;1F1E7 1F1E7
+S;1F1E7 1F1E9
+S;1F1E7 1F1EA
+S;1F1E7 1F1EB
+S;1F1E7 1F1EC
+S;1F1E7 1F1ED
+S;1F1E7 1F1EE
+S;1F1E7 1F1EF
+S;1F1E7 1F1F1
+S;1F1E7 1F1F2
+S;1F1E7 1F1F3
+S;1F1E7 1F1F4
+S;1F1E7 1F1F6
+S;1F1E7 1F1F7
+S;1F1E7 1F1F8
+S;1F1E7 1F1F9
+S;1F1E7 1F1FB
+S;1F1E7 1F1FC
+S;1F1E7 1F1FE
+S;1F1E7 1F1FF
+S;1F1E8 1F1E6
+S;1F1E8 1F1E8
+S;1F1E8 1F1E9
+S;1F1E8 1F1EB
+S;1F1E8 1F1EC
+S;1F1E8 1F1ED
+S;1F1E8 1F1EE
+S;1F1E8 1F1F0
+S;1F1E8 1F1F1
+S;1F1E8 1F1F2
+S;1F1E8 1F1F3
+S;1F1E8 1F1F4
+S;1F1E8 1F1F5
+S;1F1E8 1F1F6
+S;1F1E8 1F1F7
+S;1F1E8 1F1FA
+S;1F1E8 1F1FB
+S;1F1E8 1F1FC
+S;1F1E8 1F1FD
+S;1F1E8 1F1FE
+S;1F1E8 1F1FF
+S;1F1E9 1F1EA
+S;1F1E9 1F1EC
+S;1F1E9 1F1EF
+S;1F1E9 1F1F0
+S;1F1E9 1F1F2
+S;1F1E9 1F1F4
+S;1F1E9 1F1FF
+S;1F1EA 1F1E6
+S;1F1EA 1F1E8
+S;1F1EA 1F1EA
+S;1F1EA 1F1EC
+S;1F1EA 1F1ED
+S;1F1EA 1F1F7
+S;1F1EA 1F1F8
+S;1F1EA 1F1F9
+S;1F1EA 1F1FA
+S;1F1EB 1F1EE
+S;1F1EB 1F1EF
+S;1F1EB 1F1F0
+S;1F1EB 1F1F2
+S;1F1EB 1F1F4
+S;1F1EB 1F1F7
+S;1F1EC 1F1E6
+S;1F1EC 1F1E7
+S;1F1EC 1F1E9
+S;1F1EC 1F1EA
+S;1F1EC 1F1EB
+S;1F1EC 1F1EC
+S;1F1EC 1F1ED
+S;1F1EC 1F1EE
+S;1F1EC 1F1F1
+S;1F1EC 1F1F2
+S;1F1EC 1F1F3
+S;1F1EC 1F1F5
+S;1F1EC 1F1F6
+S;1F1EC 1F1F7
+S;1F1EC 1F1F8
+S;1F1EC 1F1F9
+S;1F1EC 1F1FA
+S;1F1EC 1F1FC
+S;1F1EC 1F1FE
+S;1F1ED 1F1F0
+S;1F1ED 1F1F2
+S;1F1ED 1F1F3
+S;1F1ED 1F1F7
+S;1F1ED 1F1F9
+S;1F1ED 1F1FA
+S;1F1EE 1F1E8
+S;1F1EE 1F1E9
+S;1F1EE 1F1EA
+S;1F1EE 1F1F1
+S;1F1EE 1F1F2
+S;1F1EE 1F1F3
+S;1F1EE 1F1F4
+S;1F1EE 1F1F6
+S;1F1EE 1F1F7
+S;1F1EE 1F1F8
+S;1F1EE 1F1F9
+S;1F1EF 1F1EA
+S;1F1EF 1F1F2
+S;1F1EF 1F1F4
+S;1F1EF 1F1F5
+S;1F1F0 1F1EA
+S;1F1F0 1F1EC
+S;1F1F0 1F1ED
+S;1F1F0 1F1EE
+S;1F1F0 1F1F2
+S;1F1F0 1F1F3
+S;1F1F0 1F1F5
+S;1F1F0 1F1F7
+S;1F1F0 1F1FC
+S;1F1F0 1F1FE
+S;1F1F0 1F1FF
+S;1F1F1 1F1E6
+S;1F1F1 1F1E7
+S;1F1F1 1F1E8
+S;1F1F1 1F1EE
+S;1F1F1 1F1F0
+S;1F1F1 1F1F7
+S;1F1F1 1F1F8
+S;1F1F1 1F1F9
+S;1F1F1 1F1FA
+S;1F1F1 1F1FB
+S;1F1F1 1F1FE
+S;1F1F2 1F1E6
+S;1F1F2 1F1E8
+S;1F1F2 1F1E9
+S;1F1F2 1F1EA
+S;1F1F2 1F1EB
+S;1F1F2 1F1EC
+S;1F1F2 1F1ED
+S;1F1F2 1F1F0
+S;1F1F2 1F1F1
+S;1F1F2 1F1F2
+S;1F1F2 1F1F3
+S;1F1F2 1F1F4
+S;1F1F2 1F1F5
+S;1F1F2 1F1F6
+S;1F1F2 1F1F7
+S;1F1F2 1F1F8
+S;1F1F2 1F1F9
+S;1F1F2 1F1FA
+S;1F1F2 1F1FB
+S;1F1F2 1F1FC
+S;1F1F2 1F1FD
+S;1F1F2 1F1FE
+S;1F1F2 1F1FF
+S;1F1F3 1F1E6
+S;1F1F3 1F1E8
+S;1F1F3 1F1EA
+S;1F1F3 1F1EB
+S;1F1F3 1F1EC
+S;1F1F3 1F1EE
+S;1F1F3 1F1F1
+S;1F1F3 1F1F4
+S;1F1F3 1F1F5
+S;1F1F3 1F1F7
+S;1F1F3 1F1FA
+S;1F1F3 1F1FF
+S;1F1F4 1F1F2
+S;1F1F5 1F1E6
+S;1F1F5 1F1EA
+S;1F1F5 1F1EB
+S;1F1F5 1F1EC
+S;1F1F5 1F1ED
+S;1F1F5 1F1F0
+S;1F1F5 1F1F1
+S;1F1F5 1F1F2
+S;1F1F5 1F1F3
+S;1F1F5 1F1F7
+S;1F1F5 1F1F8
+S;1F1F5 1F1F9
+S;1F1F5 1F1FC
+S;1F1F5 1F1FE
+S;1F1F6 1F1E6
+S;1F1F7 1F1EA
+S;1F1F7 1F1F4
+S;1F1F7 1F1F8
+S;1F1F7 1F1FA
+S;1F1F7 1F1FC
+S;1F1F8 1F1E6
+S;1F1F8 1F1E7
+S;1F1F8 1F1E8
+S;1F1F8 1F1E9
+S;1F1F8 1F1EA
+S;1F1F8 1F1EC
+S;1F1F8 1F1ED
+S;1F1F8 1F1EE
+S;1F1F8 1F1EF
+S;1F1F8 1F1F0
+S;1F1F8 1F1F1
+S;1F1F8 1F1F2
+S;1F1F8 1F1F3
+S;1F1F8 1F1F4
+S;1F1F8 1F1F7
+S;1F1F8 1F1F8
+S;1F1F8 1F1F9
+S;1F1F8 1F1FB
+S;1F1F8 1F1FD
+S;1F1F8 1F1FE
+S;1F1F8 1F1FF
+S;1F1F9 1F1E6
+S;1F1F9 1F1E8
+S;1F1F9 1F1E9
+S;1F1F9 1F1EB
+S;1F1F9 1F1EC
+S;1F1F9 1F1ED
+S;1F1F9 1F1EF
+S;1F1F9 1F1F0
+S;1F1F9 1F1F1
+S;1F1F9 1F1F2
+S;1F1F9 1F1F3
+S;1F1F9 1F1F4
+S;1F1F9 1F1F7
+S;1F1F9 1F1F9
+S;1F1F9 1F1FB
+S;1F1F9 1F1FC
+S;1F1F9 1F1FF
+S;1F1FA 1F1E6
+S;1F1FA 1F1EC
+S;1F1FA 1F1F2
+S;1F1FA 1F1F3
+S;1F1FA 1F1F8
+S;1F1FA 1F1FE
+S;1F1FA 1F1FF
+S;1F1FB 1F1E6
+S;1F1FB 1F1E8
+S;1F1FB 1F1EA
+S;1F1FB 1F1EC
+S;1F1FB 1F1EE
+S;1F1FB 1F1F3
+S;1F1FB 1F1FA
+S;1F1FC 1F1EB
+S;1F1FC 1F1F8
+S;1F1FD 1F1F0
+S;1F1FE 1F1EA
+S;1F1FE 1F1F9
+S;1F1FF 1F1E6
+S;1F1FF 1F1F2
+S;1F1FF 1F1FC
+S;1F3F4 E0067 E0062 E0065 E006E E0067 E007F
+S;1F3F4 E0067 E0062 E0073 E0063 E0074 E007F
+S;1F3F4 E0067 E0062 E0077 E006C E0073 E007F
+C;0023
+C;002A
+C;0030..0039
+C;200D
+C;20E3
+C;FE0F
+C;1F1E6..1F1FF
+C;1F3FB..1F3FF
+C;1F9B0..1F9B3
+C;E0020..E007F
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/langdetect/DefaultLanguageDetectorContextGeneratorTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/langdetect/DefaultLanguageDetectorContextGeneratorTest.java
index 06a59ea84..cd796ddf0 100644
--- a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/langdetect/DefaultLanguageDetectorContextGeneratorTest.java
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/langdetect/DefaultLanguageDetectorContextGeneratorTest.java
@@ -20,13 +20,32 @@ package opennlp.tools.langdetect;
 import java.nio.CharBuffer;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import opennlp.tools.util.CompatibilityMode;
+
 
 public class DefaultLanguageDetectorContextGeneratorTest {
 
+  @AfterEach
+  void resetMode() {
+    CompatibilityMode.reset();
+  }
+
+  private Set<String> defaultChainFeatures(String doc) {
+    LanguageDetectorContextGenerator cg = new LanguageDetectorFactory().getContextGenerator();
+    Set<String> features = new HashSet<>();
+    for (CharSequence feature : cg.getContext(doc)) {
+      features.add(feature.toString());
+    }
+    return features;
+  }
+
   @Test
   void extractContext() {
     String doc = "abcde fghijk";
@@ -41,4 +60,45 @@ public class DefaultLanguageDetectorContextGeneratorTest {
     Assertions.assertTrue(features.contains(CharBuffer.wrap("e f")));
     Assertions.assertTrue(features.contains(CharBuffer.wrap(" fg")));
   }
+
+  /**
+   * The default chain removes complete emoji only: hyphens, fullwidth letters and a symbol
+   * with text presentation reach the n-grams, and a BMP emoji such as U+231A does not.
+   */
+  @Test
+  void defaultChainKeepsHyphensAndFullwidthTextAndRemovesEmoji() {
+    CompatibilityMode.setActive(CompatibilityMode.CURRENT);
+    Set<String> features = defaultChainFeatures(
+        "well-known \uD83D\uDE00\uD83D\uDE00 x\uFF21y a\u231Ab \u2764 caf\u00E9");
+
+    Assertions.assertTrue(features.contains("l-k"));
+    Assertions.assertTrue(features.contains("n x"));
+    Assertions.assertTrue(features.contains("x\uFF41y"));
+    Assertions.assertTrue(features.contains("a b"));
+    Assertions.assertTrue(features.contains(" \u2764 "));
+    Assertions.assertTrue(features.contains("caf"));
+    Assertions.assertFalse(features.contains("l k"));
+    Assertions.assertFalse(features.contains("\uD83D\uDE00"));
+  }
+
+  /**
+   * Under LEGACY the chain produces the features of the 1.x/2.x releases: hyphens, everything
+   * from U+E000 to U+FFFF and supplementary characters are gone, and U+231A stays.
+   */
+  @Test
+  void defaultChainReproducesLegacyFeaturesInLegacyMode() {
+    CompatibilityMode.setActive(CompatibilityMode.LEGACY);
+    Set<String> features = defaultChainFeatures(
+        "well-known \uD83D\uDE00\uD83D\uDE00 x\uFF21y a\u231Ab \u2764 caf\u00E9");
+
+    Assertions.assertTrue(features.contains("l k"));
+    Assertions.assertTrue(features.contains("n x"));
+    Assertions.assertTrue(features.contains("x y"));
+    Assertions.assertTrue(features.contains("a\u231Ab"));
+    Assertions.assertTrue(features.contains(" \u2764 "));
+    Assertions.assertTrue(features.contains("caf"));
+    Assertions.assertFalse(features.contains("l-k"));
+    Assertions.assertFalse(features.contains("x\uFF41y"));
+    Assertions.assertFalse(features.contains("\uD83D\uDE00"));
+  }
 }
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/ConfusablesParseTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/ConfusablesParseTest.java
index 70fd62b41..4c7bd74fd 100644
--- a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/ConfusablesParseTest.java
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/ConfusablesParseTest.java
@@ -22,6 +22,8 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -39,6 +41,13 @@ class ConfusablesParseTest {
     assertEquals("B", map.get(0x41)); // A -> prototype B
   }
 
+  @ParameterizedTest
+  @ValueSource(strings = {"0041 ;\t0042 0043 ;\tMA\n", "0041 ;\t0042\t0043 ;\tMA\n",
+      "0041 ;\t  0042   0043  ;\tMA\n"})
+  void parseAcceptsWhitespaceRunsBetweenTargetCodePoints(String data) throws Exception {
+    assertEquals("BC", Confusables.parse(in(data)).get(0x41));
+  }
+
   @Test
   void parseFailsLoudOnStructurallyMalformedLine() {
     // A non-comment data line with fewer than two ';' is structurally malformed. It must fail loud
@@ -50,4 +59,14 @@ class ConfusablesParseTest {
         () -> Confusables.parse(in(data)));
     assertTrue(ex.getMessage().contains("line 2"), ex.getMessage());
   }
+
+  @ParameterizedTest
+  @ValueSource(strings = {"0041 ;\t0042 ;\tMA\n0043 ;\t110000 ;\tMA\n",
+      "0041 ;\t0042 ;\tMA\n110000 ;\t0042 ;\tMA\n",
+      "0041 ;\t0042 ;\tMA\n0043 ;\t004G ;\tMA\n"})
+  void parseFailsLoudOnMalformedCodePoint(String data) {
+    final IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
+        () -> Confusables.parse(in(data)));
+    assertTrue(ex.getMessage().contains("line 2"), ex.getMessage());
+  }
 }
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiAnnotationsTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiAnnotationsTest.java
index 4cf2080bf..51beda7e6 100644
--- a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiAnnotationsTest.java
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiAnnotationsTest.java
@@ -196,6 +196,7 @@ public class EmojiAnnotationsTest {
         "1F642 ; name ; slightly smiling face ; CLDR:annotation\n",
         "1F642 ; shortName ; slightly smiling face ; CLDR:annotation ; n\n",
         "1F64X ; name ; slightly smiling face ; CLDR:annotation ; n\n",
+        "110000 ; name ; slightly smiling face ; CLDR:annotation ; n\n",
         " ; name ; slightly smiling face ; CLDR:annotation ; n\n",
         "1F642 ; name ; ; CLDR:annotation ; n\n",
         "1F642 ; name ; slightly smiling face ; ; n\n",
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerCharacterizationTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerCharacterizationTest.java
new file mode 100644
index 000000000..ec06f406d
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerCharacterizationTest.java
@@ -0,0 +1,206 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package opennlp.tools.util.normalizer;
+
+import java.util.Random;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import opennlp.tools.util.CompatibilityMode;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+/**
+ * Characterization tests for the output of {@link EmojiCharSequenceNormalizer} under
+ * {@link CompatibilityMode#LEGACY}.
+ *
+ * <p>The fixed expectations below were probed against the regex implementation
+ * ({@code "[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+"} to a space) and pin its output byte for byte.
+ * Java reads the adjacent escapes {@code \\uDBFF\\uDC00} inside the class as the one code point
+ * U+10FC00, so the class is {@code [U+D83C..U+10FC00]} plus a literal {@code -} plus U+DFFF.
+ * Sharp edges kept visible:</p>
+ * <ul>
+ *   <li>every ASCII hyphen is removed, so {@code "well-known"} becomes {@code "well known"};</li>
+ *   <li>everything from U+E000 to U+FFFF is removed: private use characters, CJK compatibility
+ *       ideographs, Arabic and Hebrew presentation forms, fullwidth and halfwidth forms, and the
+ *       variation selector U+FE0F on its own;</li>
+ *   <li>every supplementary character up to U+10FC00 is removed, emoji or not, while
+ *       U+10FC01..U+10FFFF are kept;</li>
+ *   <li>a BMP emoji such as U+231A is kept, because it is below U+D83C;</li>
+ *   <li>an unpaired surrogate from U+D83C on is removed, one below it is kept.</li>
+ * </ul>
+ */
+public class EmojiCharSequenceNormalizerCharacterizationTest {
+
+  private static final EmojiCharSequenceNormalizer NORMALIZER =
+      EmojiCharSequenceNormalizer.getInstance();
+
+  /** Former emoji regex used for differential characterization. */
+  private static final Pattern FORMER_EMOJI_REGEX =
+      Pattern.compile("[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+");
+
+  @BeforeEach
+  void selectLegacyMode() {
+    CompatibilityMode.setActive(CompatibilityMode.LEGACY);
+  }
+
+  @AfterEach
+  void resetMode() {
+    CompatibilityMode.reset();
+  }
+
+  private static String cp(int... codePoints) {
+    return new String(codePoints, 0, codePoints.length);
+  }
+
+  static Stream<Arguments> emojiRuns() {
+    return Stream.of(
+        Arguments.of("", ""),
+        Arguments.of("Any funny text goes here " + cp(0x1F606, 0x1F606, 0x1F606) + " "
+            + cp(0x1F61B), "Any funny text goes here    "),
+        Arguments.of("a" + cp(0x1F600) + "b", "a b"),
+        Arguments.of("a" + cp(0x1F600) + " " + cp(0x1F603) + "b", "a   b"),
+        Arguments.of(cp(0x1F468) + "\u200D" + cp(0x1F469), " \u200D "),
+        Arguments.of(cp(0x1F1E9, 0x1F1EA), " "));
+  }
+
+  @ParameterizedTest
+  @MethodSource("emojiRuns")
+  void emojiRunsBecomeASingleSpace(String input, String expected) {
+    check(input, expected);
+  }
+
+  @ParameterizedTest
+  @CsvSource(quoteCharacter = '"', value = {
+      "well-known, well known",
+      "a-b, a b",
+      "\"--\", \" \"",
+      "-\uD83D\uDE00-, \" \""})
+  void hyphensAreRemoved(String input, String expected) {
+    check(input, expected);
+  }
+
+  @ParameterizedTest
+  @CsvSource(quoteCharacter = '"', value = {
+      "x\uE000y, x y",
+      "x\uF8FFy, x y",
+      "x\uF900y, x y",
+      "x\uFB01y, x y",
+      "x\uFB50y, x y",
+      "x\uFE70y, x y",
+      "x\uFF01y, x y",
+      "x\uFF21\uFF22y, x y",
+      "x\uFF71y, x y",
+      "x\uFFFDy, x y",
+      "x\uFFFFy, x y",
+      "x\u2764\uFE0Fy, x\u2764 y"})
+  void everythingFromPrivateUseToTheEndOfTheBasicPlaneIsRemoved(String input, String expected) {
+    check(input, expected);
+  }
+
+  static Stream<Arguments> supplementaryCharacters() {
+    return Stream.of(
+        Arguments.of("a" + cp(0x10412) + "b", "a b"),
+        Arguments.of("a" + cp(0x20000) + "b", "a b"),
+        Arguments.of("a" + cp(0x10FC00) + "b", "a b"),
+        Arguments.of("a" + cp(0x10FC01) + "b", "a" + cp(0x10FC01) + "b"),
+        Arguments.of("a" + cp(0x10FFFF) + "b", "a" + cp(0x10FFFF) + "b"));
+  }
+
+  @ParameterizedTest
+  @MethodSource("supplementaryCharacters")
+  void supplementaryCharactersAreRemovedUpToTheRegexBoundary(String input, String expected) {
+    check(input, expected);
+  }
+
+  @ParameterizedTest
+  @CsvSource(quoteCharacter = '"', value = {
+      "a\u231Ab, a\u231Ab",
+      "a\u2764b, a\u2764b",
+      "x\uDFFEy, x y",
+      "x\uDFFFy, x y",
+      "x\uD83Bx, x\uD83Bx",
+      "x\uD83Cx, x x",
+      "x\uD800y, x\uD800y",
+      "x\uDC00y, x y",
+      "\"123 #*\", \"123 #*\""})
+  void charactersBelowTheRegexBoundaryAreKept(String input, String expected) {
+    check(input, expected);
+  }
+
+  private void check(String input, String expected) {
+    assertEquals(expected, NORMALIZER.normalize(input).toString(),
+        () -> "Input: " + CharacterizationInputs.escape(input));
+  }
+  @Test
+  void nullTextIsRejected() {
+    assertThrows(IllegalArgumentException.class, () -> NORMALIZER.normalize(null));
+  }
+
+  @Test
+  void noMatchInputIsReturnedUncopied() {
+    final String plain = "no emoji in this sentence at all";
+    Assertions.assertSame(plain, NORMALIZER.normalize(plain));
+  }
+
+  @Test
+  void matchesTheFormerRegexOnRandomizedInputs() {
+    final String[] pool = {"a", "Z", "1", " ", "-", "#", "*", "é", "م", "⌚",
+        "❤", "︎", "️", "‍", "⃣", "퟿", "", "", "豈",
+        "ﭐ", "ﹰ", "A", "ア", "�", "￿", "\uD800", "\uD83B", "\uD83C",
+        "\uDBFF", "\uDC00", "\uDFFF", "😀", "🇩", "𐐒",
+        "𠀀", "󰀀", cp(0x10FC00), cp(0x10FC01), cp(0x10FFFF)};
+    final Random random = new Random(42);
+    for (int i = 0; i < 5000; i++) {
+      final String input = CharacterizationInputs.randomInput(random, pool);
+      final String expected = FORMER_EMOJI_REGEX.matcher(input).replaceAll(" ");
+      assertEquals(expected, NORMALIZER.normalize(input).toString(),
+          () -> "Input: " + CharacterizationInputs.escape(input));
+    }
+  }
+
+  static Stream<String> mixedScripts() {
+    return Stream.of(
+        "well-known e-mail re-entry",
+        "ABC fullwidth and アイ halfwidth",
+        "ﭐﭑ Arabic and יִ Hebrew presentation forms",
+        "豈更 compatibility ideographs",
+        " private use",
+        "go" + cp(0x1F600) + "❤️now",
+        cp(0x1F3F4, 0xE0067, 0xE0062, 0xE0065, 0xE006E, 0xE0067, 0xE007F),
+        "7️⃣",
+        "a\uD83Cb\uDC00c\uD83C" + cp(0x1F600) + "\uDC00d",
+        cp(0x20000, 0x1D400, 0x10330));
+  }
+
+  @ParameterizedTest
+  @MethodSource("mixedScripts")
+  void mixedScriptsMatchTheFormerRegexExactly(String input) {
+    assertEquals(FORMER_EMOJI_REGEX.matcher(input).replaceAll(" "),
+        NORMALIZER.normalize(input).toString(), CharacterizationInputs.escape(input));
+  }
+}
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java
new file mode 100644
index 000000000..981da786e
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java
@@ -0,0 +1,327 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package opennlp.tools.util.normalizer;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.nio.CharBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+public class EmojiCharSequenceNormalizerTest {
+  private static final EmojiCharSequenceNormalizer NORMALIZER =
+      EmojiCharSequenceNormalizer.getInstance();
+
+  /**
+   * The number of fully-qualified and minimally-qualified sequences in the Emoji 17.0
+   * emoji-test.txt, the same number dev/UnicodeEmojiSequenceGenerator.java pins for that release.
+   */
+  private static final int EMOJI_17_SEQUENCE_COUNT = 4973;
+
+  private static String cp(int... codePoints) {
+    return new String(codePoints, 0, codePoints.length);
+  }
+
+  private static Stream<Arguments> emojiSequences() {
+    return Stream.of(
+        Arguments.of(cp(0x1F600), "supplementary singleton"),
+        Arguments.of("\u231A", "BMP default presentation"),
+        Arguments.of("\u2764\uFE0F", "BMP explicit presentation"),
+        Arguments.of(cp(0x1F44D, 0x1F3FD), "modifier sequence"),
+        Arguments.of(cp(0x1F1E9, 0x1F1EA), "flag sequence"),
+        Arguments.of("7\uFE0F\u20E3", "keycap sequence"),
+        Arguments.of(cp(0x1F468) + "\u200D" + cp(0x1F469) + "\u200D" + cp(0x1F467),
+            "ZWJ sequence"),
+        Arguments.of(cp(0x1F3F4, 0xE0067, 0xE0062, 0xE0065, 0xE006E, 0xE0067, 0xE007F),
+            "tag sequence"));
+  }
+
+  @ParameterizedTest(name = "{1}")
+  @MethodSource("emojiSequences")
+  void normalizeRemovesCompleteEmoji(String emoji, String description) {
+    Assertions.assertEquals("a b", NORMALIZER.normalize("a" + emoji + "b"));
+  }
+
+  /**
+   * The nine code points and ten modifier sequences that Emoji 18.0 added on top of 17.0. The
+   * bundled inventory is Emoji 17.0, the same version as the other bundled Unicode data, so
+   * these are not emoji to this normalizer yet.
+   */
+  private static Stream<String> emoji18OnlySequences() {
+    return Stream.of(cp(0x1FAEB), cp(0x1FACC), cp(0x1FADD), cp(0x1F6D9), cp(0x1FA8B),
+        cp(0x1FA8C), cp(0x1FA8D), cp(0x1FAF9), cp(0x1FAFA),
+        cp(0x1FAF9, 0x1F3FB), cp(0x1FAF9, 0x1F3FC), cp(0x1FAF9, 0x1F3FD),
+        cp(0x1FAF9, 0x1F3FE), cp(0x1FAF9, 0x1F3FF),
+        cp(0x1FAFA, 0x1F3FB), cp(0x1FAFA, 0x1F3FC), cp(0x1FAFA, 0x1F3FD),
+        cp(0x1FAFA, 0x1F3FE), cp(0x1FAFA, 0x1F3FF));
+  }
+
+  @ParameterizedTest
+  @MethodSource("emoji18OnlySequences")
+  void normalizeKeepsSequencesAddedAfterEmoji17(String sequence) {
+    Assertions.assertEquals("a" + sequence + "b", NORMALIZER.normalize("a" + sequence + "b"));
+  }
+
+  @Test
+  void normalizeCollapsesAdjacentCompleteEmojiOnly() {
+    String adjacent = cp(0x1F600) + "\u2764\uFE0F" + cp(0x1F1E9, 0x1F1EA);
+    Assertions.assertEquals("a b", NORMALIZER.normalize("a" + adjacent + "b"));
+    Assertions.assertEquals("a   b",
+        NORMALIZER.normalize("a" + cp(0x1F600) + " " + cp(0x1F603) + "b"));
+  }
+
+  @ParameterizedTest
+  @ValueSource(strings = {"", "plain text", "a-b", "well-known", "\uD801\uDC12",
+      "\uD840\uDC00", "\uDB80\uDC00", "\uE000", "\uFFFF", "\u2764", "123", "#", "*"})
+  void normalizePreservesNonEmojiText(String text) {
+    Assertions.assertEquals(text, NORMALIZER.normalize(text));
+  }
+
+  @Test
+  void normalizeDoesNotTreatKeycapBasesAsCandidateByProximity() {
+    Assertions.assertEquals("123 abc", NORMALIZER.normalize("123" + cp(0x1F600) + "abc"));
+    Assertions.assertEquals(" 1", NORMALIZER.normalize(cp(0x1F600) + "1"));
+    Assertions.assertEquals("x# ", NORMALIZER.normalize("x#" + cp(0x1F600)));
+  }
+
+  @Test
+  void normalizeTextPresentationSymbolDoesNotPoisonAdjacentEmoji() {
+    Assertions.assertEquals("\u2764 ", NORMALIZER.normalize("\u2764" + cp(0x1F600)));
+    Assertions.assertEquals(" \u2764", NORMALIZER.normalize(cp(0x1F600) + "\u2764"));
+    Assertions.assertEquals("a\u231A\uFE0Eb",
+        NORMALIZER.normalize("a\u231A\uFE0Eb"));
+  }
+
+  /**
+   * Minimally-qualified sequences, which lack U+FE0F after a later element only, are complete
+   * emoji. The fully-qualified forms add U+FE0F after U+1F32B, U+2640 and U+2764.
+   */
+  private static Stream<Arguments> minimallyQualifiedSequences() {
+    return Stream.of(
+        Arguments.of(cp(0x1F636, 0x200D, 0x1F32B), "face in clouds"),
+        Arguments.of(cp(0x1F64B, 0x1F3FF, 0x200D, 0x2640), "woman raising hand, dark skin tone"),
+        Arguments.of(cp(0x1F441, 0xFE0F, 0x200D, 0x1F5E8), "eye in speech bubble"),
+        Arguments.of(cp(0x1F468, 0x1F3FF, 0x200D, 0x2764, 0x200D, 0x1F468, 0x1F3FF),
+            "couple with heart, dark skin tone"));
+  }
+
+  @ParameterizedTest(name = "{1}")
+  @MethodSource("minimallyQualifiedSequences")
+  void normalizeRemovesMinimallyQualifiedSequences(String emoji, String description) {
+    Assertions.assertEquals("a b", NORMALIZER.normalize("a" + emoji + "b"));
+    Assertions.assertEquals("a b", NORMALIZER.normalize("a" + emoji + "\uFE0Fb"));
+  }
+
+  @Test
+  void normalizePreservesConnectedUnqualifiedZwjCandidate() {
+    // Unqualified: the first code point U+2764 lacks the U+FE0F it needs.
+    String heartOnFire = "\u2764\u200D" + cp(0x1F525);
+    Assertions.assertEquals("a" + heartOnFire + "b",
+        NORMALIZER.normalize("a" + heartOnFire + "b"));
+
+    String textSymbolConnection = "\u2764\u200D" + cp(0x1F600);
+    Assertions.assertEquals("a" + textSymbolConnection + "b",
+        NORMALIZER.normalize("a" + textSymbolConnection + "b"));
+  }
+
+  @Test
+  void normalizePreservesLeadingOrphanComponentConnectedToEmoji() {
+    String connected = "\u200D" + cp(0x1F600);
+    Assertions.assertEquals("a" + connected + "b", NORMALIZER.normalize("a" + connected + "b"));
+  }
+
+  private static Stream<String> malformedConnectedCandidates() {
+    return Stream.of(cp(0x1F600) + "\u200D", cp(0x1F600, 0x1F3FD),
+        cp(0x1F1E9, 0x1F1EA, 0x1F1EB), "7\uFE0F", "7\u20E3",
+        cp(0x1F3F4, 0xE0067, 0xE0062), cp(0x1F600) + "\u200D" + cp(0x1F600));
+  }
+
+  @ParameterizedTest
+  @MethodSource("malformedConnectedCandidates")
+  void normalizePreservesConnectedMalformedCandidateAtomically(String malformed) {
+    Assertions.assertEquals("a" + malformed + "b", NORMALIZER.normalize("a" + malformed + "b"));
+  }
+
+  /**
+   * A stray joiner, modifier, selector, flag letter or tag connects only to the complete
+   * sequence right before it and to the one right after it. Complete sequences that merely
+   * touch that malformed part are removed as usual.
+   */
+  private static Stream<Arguments> malformedTails() {
+    return Stream.of(
+        Arguments.of(cp(0x1F600, 0x1F600, 0x1F600) + "\u200D", " " + cp(0x1F600) + "\u200D"),
+        Arguments.of(cp(0x1F600, 0x1F600, 0x1F1E9), " " + cp(0x1F600, 0x1F1E9)),
+        Arguments.of(cp(0x1F1E9, 0x1F1EA, 0x1F1EB, 0x1F1F7, 0x1F1EE),
+            " " + cp(0x1F1EB, 0x1F1F7, 0x1F1EE)),
+        Arguments.of(cp(0x1F600) + "\u200D" + cp(0x1F600, 0x1F600),
+            cp(0x1F600) + "\u200D" + cp(0x1F600) + " "),
+        Arguments.of(cp(0x1F600, 0x1F600) + "\u200D" + cp(0x1F600, 0x1F600),
+            " " + cp(0x1F600) + "\u200D" + cp(0x1F600) + " "),
+        Arguments.of(cp(0x1F600, 0x1F600, 0x1F3FD, 0x1F600, 0x1F600),
+            " " + cp(0x1F600, 0x1F3FD, 0x1F600) + " "));
+  }
+
+  @ParameterizedTest
+  @MethodSource("malformedTails")
+  void normalizeEndsRunAtTheLastCompleteSequenceBeforeAMalformedTail(String text,
+                                                                     String expected) {
+    Assertions.assertEquals("a" + expected + "b", NORMALIZER.normalize("a" + text + "b"));
+  }
+
+  /**
+   * Keyboards and older text often add U+FE0F after an emoji that already has emoji
+   * presentation. One such selector right after a complete sequence is removed with it; a
+   * second one is a stray component like any other.
+   */
+  private static Stream<Arguments> redundantEmojiPresentationSelectors() {
+    return Stream.of(
+        Arguments.of(cp(0x1F600) + "\uFE0F", " "),
+        Arguments.of(cp(0x1F44D) + "\uFE0F", " "),
+        Arguments.of("\u231A\uFE0F", " "),
+        Arguments.of("\u2764\uFE0F\uFE0F", " "),
+        Arguments.of(cp(0x1F44D, 0x1F3FD) + "\uFE0F", " "),
+        Arguments.of(cp(0x1F600) + "\uFE0F" + cp(0x1F603), " "),
+        Arguments.of(cp(0x1F600) + "\uFE0F\uFE0F", cp(0x1F600) + "\uFE0F\uFE0F"),
+        Arguments.of(cp(0x1F600) + "\uFE0F\u200D", cp(0x1F600) + "\uFE0F\u200D"));
+  }
+
+  @ParameterizedTest
+  @MethodSource("redundantEmojiPresentationSelectors")
+  void normalizeRemovesOneRedundantEmojiPresentationSelectorWithTheEmoji(String text,
+                                                                         String expected) {
+    Assertions.assertEquals("a" + expected + "b", NORMALIZER.normalize("a" + text + "b"));
+  }
+
+  @Test
+  void normalizePreservesOrphanComponents() {
+    String text = "a\u200D\uFE0F\u20E3" + cp(0x1F3FD, 0xE0067, 0xE007F) + "b";
+    Assertions.assertEquals(text, NORMALIZER.normalize(text));
+  }
+
+  @Test
+  void normalizePreservesMalformedUtf16() {
+    String text = "a\uD83Cb\uDC00c\uD83C" + cp(0x1F600) + "\uDC00d";
+    Assertions.assertEquals("a\uD83Cb\uDC00c\uD83C \uDC00d", NORMALIZER.normalize(text));
+  }
+
+  @Test
+  void normalizeRejectsNull() {
+    Assertions.assertThrows(IllegalArgumentException.class, () -> NORMALIZER.normalize(null));
+  }
+
+  @Test
+  void normalizeAcceptsAnyCharSequenceAndIsIdempotent() {
+    String text = "a" + cp(0x1F600) + "b";
+    Assertions.assertEquals("a b", NORMALIZER.normalize(new StringBuilder(text)));
+    Assertions.assertEquals("a b", NORMALIZER.normalize(CharBuffer.wrap(text.toCharArray())));
+    CharSequence once = NORMALIZER.normalize(text);
+    Assertions.assertEquals(once.toString(), NORMALIZER.normalize(once).toString());
+  }
+
+  /**
+   * Known Emoji 17.0 sequences, one or two per emoji-test.txt group, written down from the
+   * published list rather than read from the bundled file, so a wrong or truncated inventory
+   * fails here. The last seven are new in 17.0.
+   */
+  private static Stream<Arguments> knownEmoji17Sequences() {
+    return Stream.of(
+        Arguments.of(cp(0x1F600), "Smileys & Emotion: grinning face"),
+        Arguments.of(cp(0x1F636, 0x200D, 0x1F32B, 0xFE0F), "Smileys & Emotion: face in clouds"),
+        Arguments.of(cp(0x1F44D, 0x1F3FD), "People & Body: thumbs up, medium skin tone"),
+        Arguments.of(cp(0x1F9D1, 0x200D, 0x1F4BB), "People & Body: technologist"),
+        Arguments.of(cp(0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FF),
+            "People & Body: handshake, two skin tones"),
+        Arguments.of(cp(0x1F436), "Animals & Nature: dog face"),
+        Arguments.of(cp(0x1F415, 0x200D, 0x1F9BA), "Animals & Nature: service dog"),
+        Arguments.of(cp(0x1F34E), "Food & Drink: red apple"),
+        Arguments.of(cp(0x1F697), "Travel & Places: automobile"),
+        Arguments.of(cp(0x26BD), "Activities: soccer ball"),
+        Arguments.of(cp(0x1F4F1), "Objects: mobile phone"),
+        Arguments.of(cp(0x2764, 0xFE0F), "Symbols: red heart"),
+        Arguments.of(cp(0x2764, 0xFE0F, 0x200D, 0x1F525), "Symbols: heart on fire"),
+        Arguments.of(cp(0x0023, 0xFE0F, 0x20E3), "Symbols: keycap number sign"),
+        Arguments.of(cp(0x1F51F), "Symbols: keycap 10"),
+        Arguments.of(cp(0x1F1FA, 0x1F1F8), "Flags: United States"),
+        Arguments.of(cp(0x1F3F3, 0xFE0F, 0x200D, 0x1F308), "Flags: rainbow flag"),
+        Arguments.of(cp(0x1F3F4, 0xE0067, 0xE0062, 0xE0073, 0xE0063, 0xE0074, 0xE007F),
+            "Flags: Scotland"),
+        Arguments.of(cp(0x1FAEA), "Emoji 17.0: distorted face"),
+        Arguments.of(cp(0x1FAC8), "Emoji 17.0: hairy creature"),
+        Arguments.of(cp(0x1FACD), "Emoji 17.0: orca"),
+        Arguments.of(cp(0x1FAEF), "Emoji 17.0: fight cloud"),
+        Arguments.of(cp(0x1F6D8), "Emoji 17.0: landslide"),
+        Arguments.of(cp(0x1FA8A), "Emoji 17.0: trombone"),
+        Arguments.of(cp(0x1FA8E), "Emoji 17.0: treasure chest"));
+  }
+
+  @ParameterizedTest(name = "{1}")
+  @MethodSource("knownEmoji17Sequences")
+  void normalizeRemovesKnownEmoji17Sequences(String emoji, String description) {
+    Assertions.assertEquals("a b", NORMALIZER.normalize("a" + emoji + "b"));
+  }
+
+  @Test
+  void bundledInventoryHoldsTheEmoji17SequenceCount() {
+    Assertions.assertEquals(EMOJI_17_SEQUENCE_COUNT,
+        UnicodeEmojiSequences.getInstance().sequenceCount());
+  }
+
+  @Test
+  void normalizeRemovesEverySequenceInBundledInventory() throws Exception {
+    int count = 0;
+    InputStream input = getClass().getResourceAsStream(
+        "/opennlp/tools/util/normalizer/EmojiSequences.txt");
+    Assertions.assertNotNull(input);
+    try (BufferedReader reader = new BufferedReader(
+        new InputStreamReader(input, StandardCharsets.US_ASCII))) {
+      String line;
+      while ((line = reader.readLine()) != null) {
+        if (!line.startsWith("S;")) {
+          continue;
+        }
+        String emoji = HexCodePoints.decodeSequence(line.substring(2));
+        Assertions.assertEquals(" ", NORMALIZER.normalize(emoji), line);
+        count++;
+      }
+    }
+    Assertions.assertEquals(EMOJI_17_SEQUENCE_COUNT, count);
+  }
+
+  @Test
+  void serializationKeepsSingleton() throws Exception {
+    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+    try (ObjectOutputStream out = new ObjectOutputStream(bytes)) {
+      out.writeObject(NORMALIZER);
+    }
+    try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray()))) {
+      Assertions.assertSame(NORMALIZER, in.readObject());
+    }
+  }
+}
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/HexCodePointsTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/HexCodePointsTest.java
new file mode 100644
index 000000000..b7f263822
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/HexCodePointsTest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package opennlp.tools.util.normalizer;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class HexCodePointsTest {
+
+  @Test
+  void parseCodePointReadsHexDigits() {
+    assertEquals(0x41, HexCodePoints.parseCodePoint("41"));
+    assertEquals(0x1F600, HexCodePoints.parseCodePoint("1F600"));
+    assertEquals(0x1f600, HexCodePoints.parseCodePoint("1f600"));
+    assertEquals(0x10FFFF, HexCodePoints.parseCodePoint("10FFFF"));
+    assertEquals(0, HexCodePoints.parseCodePoint("0000"));
+    assertEquals(0x200D, HexCodePoints.parseCodePoint("x 200D y", 2, 6));
+  }
+
+  @ParameterizedTest
+  @ValueSource(strings = {"", "G", "1F60G", "110000", "-1", "U+1F600", " 41"})
+  void parseCodePointRejectsMalformedDigits(String hex) {
+    final IllegalArgumentException e = assertThrows(IllegalArgumentException.class,
+        () -> HexCodePoints.parseCodePoint(hex));
+    assertTrue(e.getMessage().contains(hex), e.getMessage());
+  }
+
+  @Test
+  void decodeSequenceReadsSpaceSeparatedCodePoints() {
+    assertEquals("A", HexCodePoints.decodeSequence("41"));
+    assertEquals(new String(Character.toChars(0x1F600)), HexCodePoints.decodeSequence("1F600"));
+    assertEquals(new String(new int[] {0x1F468, 0x200D, 0x1F469}, 0, 3),
+        HexCodePoints.decodeSequence("1F468 200D 1F469"));
+  }
+
+  @ParameterizedTest
+  @ValueSource(strings = {"1F468 200D 1F469", "1F468\t200D\t1F469", "1F468  200D   1F469",
+      " 1F468 200D 1F469 ", "\t1F468\u00A0200D\n1F469\r\n"})
+  void decodeSequenceAcceptsWhitespaceRunsAroundCodePoints(String hex) {
+    assertEquals(new String(new int[] {0x1F468, 0x200D, 0x1F469}, 0, 3),
+        HexCodePoints.decodeSequence(hex));
+  }
+
+  @ParameterizedTest
+  @ValueSource(strings = {"", " ", "\t", " \n ", "1F600 ZZ", "1F600,200D"})
+  void decodeSequenceRejectsMalformedSequences(String hex) {
+    assertThrows(IllegalArgumentException.class, () -> HexCodePoints.decodeSequence(hex));
+  }
+
+  @Test
+  void parseRangeReadsSingleCodePointsAndRanges() {
+    assertArrayEquals(new int[] {0x23, 0x23}, HexCodePoints.parseRange("23"));
+    assertArrayEquals(new int[] {0x1F3FB, 0x1F3FF}, HexCodePoints.parseRange("1F3FB..1F3FF"));
+    assertArrayEquals(new int[] {0xE0020, 0xE007F}, HexCodePoints.parseRange("E0020..E007F"));
+  }
+
+  @ParameterizedTest
+  @ValueSource(strings = {"", "..", "1F3FB..", "..1F3FF", "1F3FF..1F3FB", "1F3FB.1F3FF",
+      "1F3FB..1F3FF..1F3FF"})
+  void parseRangeRejectsMalformedRanges(String hex) {
+    assertThrows(IllegalArgumentException.class, () -> HexCodePoints.parseRange(hex));
+  }
+}
diff --git a/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/UnicodeEmojiSequencesParseTest.java b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/UnicodeEmojiSequencesParseTest.java
new file mode 100644
index 000000000..d7cfd5c25
--- /dev/null
+++ b/opennlp-core/opennlp-runtime/src/test/java/opennlp/tools/util/normalizer/UnicodeEmojiSequencesParseTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package opennlp.tools.util.normalizer;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class UnicodeEmojiSequencesParseTest {
+
+  private static final String WELL_FORMED = "# EmojiSequences.txt\n"
+      + "# Version: 17.0\n"
+      + "S;1F600\n"
+      + "S;1F44D 1F3FD\n"
+      + "\n"
+      + "C;1F3FB..1F3FF\n"
+      + "C;200D\n";
+
+  private InputStream in(String data) {
+    return new ByteArrayInputStream(data.getBytes(StandardCharsets.US_ASCII));
+  }
+
+  private String cp(int... codePoints) {
+    return new String(codePoints, 0, codePoints.length);
+  }
+
+  @Test
+  void parseReadsWellFormedRecords() throws Exception {
+    final UnicodeEmojiSequences sequences = UnicodeEmojiSequences.parse(in(WELL_FORMED));
+    final String text = "a" + cp(0x1F600) + cp(0x1F44D, 0x1F3FD) + "b";
+    final UnicodeEmojiSequences.Candidate candidate = sequences.candidateAt(text, 1);
+    assertNotNull(candidate);
+    assertTrue(candidate.valid());
+    assertEquals(text.length() - 1, candidate.end());
+    assertNull(sequences.candidateAt(text, 0));
+    // The component range makes a stray modifier after a sequence a malformed candidate.
+    final UnicodeEmojiSequences.Candidate malformed =
+        sequences.candidateAt(cp(0x1F600, 0x1F3FB), 0);
+    assertNotNull(malformed);
+    assertFalse(malformed.valid());
+  }
+
+  @Test
+  void parseFailsLoudOnMalformedCodePoint() {
+    final String data = "S;1F600\nS;1F60G\nC;200D\n";
+    final IllegalArgumentException e = assertThrows(IllegalArgumentException.class,
+        () -> UnicodeEmojiSequences.parse(in(data)));
+    assertTrue(e.getMessage().contains("line 2"), e.getMessage());
+  }
+
+  @Test
+  void parseFailsLoudOnMalformedRange() {
+    final String data = "S;1F600\nC;1F3FB..\n";
+    final IllegalArgumentException e = assertThrows(IllegalArgumentException.class,
+        () -> UnicodeEmojiSequences.parse(in(data)));
+    assertTrue(e.getMessage().contains("line 2"), e.getMessage());
+  }
+
+  @Test
+  void parseFailsLoudOnUnknownRecord() {
+    // A non-comment, non-blank line with another prefix is a wrong or corrupted file. It must
+    // not be skipped silently, which would give a quietly incomplete matcher.
+    final String data = "S;1F600\nX;1F601\nC;200D\n";
+    final IllegalArgumentException e = assertThrows(IllegalArgumentException.class,
+        () -> UnicodeEmojiSequences.parse(in(data)));
+    assertTrue(e.getMessage().contains("line 2"), e.getMessage());
+  }
+
+  @Test
+  void parseRejectsDataWithoutSequences() {
+    final String data = "# header only\nC;200D\n";
+    assertThrows(IllegalArgumentException.class, () -> UnicodeEmojiSequences.parse(in(data)));
+  }
+
+  @Test
+  void parseRejectsDataWithoutComponentRanges() {
+    final String data = "# header only\nS;1F600\n";
+    assertThrows(IllegalArgumentException.class, () -> UnicodeEmojiSequences.parse(in(data)));
+  }
+}
diff --git a/opennlp-distr/src/main/readme/LICENSE b/opennlp-distr/src/main/readme/LICENSE
index 478cb9b9e..e1783ae8f 100644
--- a/opennlp-distr/src/main/readme/LICENSE
+++ b/opennlp-distr/src/main/readme/LICENSE
@@ -614,6 +614,7 @@ POSSIBILITY OF SUCH DAMAGE.
 The following license applies to the Unicode data files bundled inside the
 opennlp-runtime jar (opennlp/tools/util/normalizer/confusables.txt,
 opennlp/tools/util/normalizer/CaseFolding.txt,
+opennlp/tools/util/normalizer/EmojiSequences.txt,
 opennlp/tools/tokenize/uax29/WordBreakProperty.txt, and
 opennlp/tools/tokenize/uax29/ExtendedPictographic.txt), and to the
 Unicode-derived values (the CLDR short names and the emoji-test.txt
diff --git a/opennlp-distr/src/main/readme/NOTICE b/opennlp-distr/src/main/readme/NOTICE
index 7e836ac50..38af7f654 100644
--- a/opennlp-distr/src/main/readme/NOTICE
+++ b/opennlp-distr/src/main/readme/NOTICE
@@ -94,9 +94,9 @@ SOFTWARE.
 
 ============================================================================
 
-This product bundles data files from the Unicode Character Database (UCD)
-and the Unicode Security Mechanisms, version 17.0.0, published by Unicode,
-Inc. (https://www.unicode.org/Public/).
+This product bundles Unicode Character Database (UCD), Unicode Security
+Mechanisms and Unicode Emoji data in the versions listed below, published
+by Unicode, Inc. (https://www.unicode.org/Public/).
 
   * opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/tokenize/uax29/WordBreakProperty.txt
     is the upstream WordBreakProperty-17.0.0.txt, unmodified except for the
@@ -117,11 +117,16 @@ Inc. (https://www.unicode.org/Public/).
     filtered subset; the upstream file additionally carries the Emoji,
     Emoji_Presentation, Emoji_Modifier, Emoji_Modifier_Base, and
     Emoji_Component properties, which are not retained.
+  * opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
+    is a generated inventory of fully-qualified and minimally-qualified emoji
+    sequences from emoji-test.txt and Emoji_Component ranges from
+    emoji-data.txt, both Unicode Emoji version 17.0.
 
 The original Unicode copyright and license header is preserved verbatim at the
-top of each bundled file. These files are distributed under the Unicode License
-V3, the full text of which is reproduced in the LICENSE file accompanying this
-distribution.
+top of each copied or filtered data file. Generated inventories identify their
+Unicode sources and license in their headers. These files and derived values are
+distributed under the Unicode License V3, the full text of which is reproduced
+in the LICENSE file accompanying this distribution.
 
 The project-authored annotation table
 opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/emoji-annotations.txt
diff --git a/opennlp-docs/src/docbkx/langdetect.xml b/opennlp-docs/src/docbkx/langdetect.xml
index 0da0ae809..dbc295a33 100644
--- a/opennlp-docs/src/docbkx/langdetect.xml
+++ b/opennlp-docs/src/docbkx/langdetect.xml
@@ -48,7 +48,12 @@ under the License.
 					<tbody>
 						<row>
 							<entry>EmojiCharSequenceNormalizer</entry>
-							<entry>Replaces emojis by blank space</entry>
+							<entry>Replaces each run of complete emoji (single emoji, emoji with U+FE0F,
+								flags, keycaps, skin tone modifier sequences, ZWJ sequences and tag
+								sequences) with one space, so <code>go&#x1F600;&#x2764;&#xFE0F;now</code>
+								becomes <code>go now</code>. Text symbols, letters and ideographs from
+								other planes, and an emoji with a stray joiner, modifier or tag next to it
+								are kept as they are.</entry>
 						</row>
 						<row>
 							<entry>UrlCharSequenceNormalizer</entry>
@@ -76,6 +81,12 @@ under the License.
 				</tgroup>
 			</table>
 		</para>
+		<para>
+			Since 3.0.0, EmojiCharSequenceNormalizer removes complete emoji only. Models trained with an earlier
+			release saw every hyphen, every character from U+E000 to U+FFFF and nearly every supplementary
+			character removed, emoji or not. They get that output again under
+			<code>-Dopennlp.compat.mode=LEGACY</code> until they are retrained.
+		</para>
 	</section>
 	
 	<section xml:id="tools.langdetect.classifying.cmdline">
diff --git a/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java b/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java
deleted file mode 100644
index f63d2d1f9..000000000
--- a/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package opennlp.tools.util.normalizer;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-
-public class EmojiCharSequenceNormalizerTest {
-
-  public EmojiCharSequenceNormalizer normalizer = EmojiCharSequenceNormalizer.getInstance();
-
-  @Test
-  void normalizeEmoji() {
-
-    String s = new StringBuilder()
-        .append("Any funny text goes here ")
-        .appendCodePoint(0x1F606)
-        .appendCodePoint(0x1F606)
-        .appendCodePoint(0x1F606)
-        .append(" ")
-        .appendCodePoint(0x1F61B)
-        .toString();
-    Assertions.assertEquals(
-        "Any funny text goes here    ", normalizer.normalize(s));
-  }
-
-}
diff --git a/rat-excludes b/rat-excludes
index 0aa555c25..d3925e93b 100644
--- a/rat-excludes
+++ b/rat-excludes
@@ -69,6 +69,7 @@ src/main/resources/opennlp/tools/stopword/*.txt
 src/main/resources/opennlp/tools/tokenize/uax29/WordBreakProperty.txt
 src/main/resources/opennlp/tools/tokenize/uax29/ExtendedPictographic.txt
 src/main/resources/opennlp/tools/util/normalizer/confusables.txt
+src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
 src/test/resources/opennlp/tools/tokenize/uax29/WordBreakTest.txt
 
 <!-- opennlp-dl tiny ONNX test models (project-generated binaries, see the gen_tiny_*_model.py scripts committed next to them) -->
diff --git a/src/license/NOTICE.template b/src/license/NOTICE.template
index da75e2a6a..b4809bb49 100644
--- a/src/license/NOTICE.template
+++ b/src/license/NOTICE.template
@@ -94,9 +94,9 @@ SOFTWARE.
 
 ============================================================================
 
-This product bundles data files from the Unicode Character Database (UCD)
-and the Unicode Security Mechanisms, version 17.0.0, published by Unicode,
-Inc. (https://www.unicode.org/Public/).
+This product bundles Unicode Character Database (UCD), Unicode Security
+Mechanisms and Unicode Emoji data in the versions listed below, published
+by Unicode, Inc. (https://www.unicode.org/Public/).
 
   * opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/tokenize/uax29/WordBreakProperty.txt
     is the upstream WordBreakProperty-17.0.0.txt, unmodified except for the
@@ -117,11 +117,16 @@ Inc. (https://www.unicode.org/Public/).
     filtered subset; the upstream file additionally carries the Emoji,
     Emoji_Presentation, Emoji_Modifier, Emoji_Modifier_Base, and
     Emoji_Component properties, which are not retained.
+  * opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/EmojiSequences.txt
+    is a generated inventory of fully-qualified and minimally-qualified emoji
+    sequences from emoji-test.txt and Emoji_Component ranges from
+    emoji-data.txt, both Unicode Emoji version 17.0.
 
 The original Unicode copyright and license header is preserved verbatim at the
-top of each bundled file. These files are distributed under the Unicode License
-V3, the full text of which is reproduced in the LICENSE file accompanying this
-distribution.
+top of each copied or filtered data file. Generated inventories identify their
+Unicode sources and license in their headers. These files and derived values are
+distributed under the Unicode License V3, the full text of which is reproduced
+in the LICENSE file accompanying this distribution.
 
 The project-authored annotation table
 opennlp-core/opennlp-runtime/src/main/resources/opennlp/tools/util/normalizer/emoji-annotations.txt
@@ -134,4 +139,4 @@ third-party sentiment data set is included.
 
 Copyright (c) 1991-2025 Unicode, Inc. All rights reserved.
 
-============================================================================
\ No newline at end of file
+============================================================================