From 71e6b63158639807bd752408a3a6d11bc38389a3 Mon Sep 17 00:00:00 2001 From: Naveen Date: Sat, 30 Jul 2022 21:28:01 +0530 Subject: [PATCH 01/18] Add emoji key --- .../keyboard/helpers/MyKeyboard.kt | 6 +- .../res/xml/keys_letters_english_dvorak.xml | 7 +- .../res/xml/keys_letters_english_qwerty.xml | 7 +- .../res/xml/keys_letters_english_qwertz.xml | 7 +- app/src/main/res/xml/keys_letters_french.xml | 7 +- app/src/main/res/xml/keys_letters_german.xml | 7 +- .../main/res/xml/keys_letters_romanian.xml | 7 +- app/src/main/res/xml/keys_letters_russian.xml | 7 +- .../main/res/xml/keys_letters_slovenian.xml | 7 +- .../res/xml/keys_letters_spanish_qwerty.xml | 73 ++++++++++--------- 10 files changed, 90 insertions(+), 45 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index 42cfb9e..777d35f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -12,7 +12,6 @@ import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo.IME_ACTION_NONE import androidx.annotation.XmlRes import com.simplemobiletools.keyboard.R -import java.util.* /** * Loads an XML description of a keyboard and stores the attributes of the keys. A keyboard consists of rows of keys. @@ -61,6 +60,7 @@ class MyKeyboard { const val KEYCODE_ENTER = -4 const val KEYCODE_DELETE = -5 const val KEYCODE_SPACE = 32 + const val KEYCODE_EMOJI = -6 fun getDimensionOrFraction(a: TypedArray, index: Int, base: Int, defValue: Int): Int { val value = a.peekValue(index) ?: return defValue @@ -203,7 +203,7 @@ class MyKeyboard { topSmallNumber = a.getString(R.styleable.MyKeyboard_Key_topSmallNumber) ?: "" if (label.isNotEmpty() && code != KEYCODE_MODE_CHANGE && code != KEYCODE_SHIFT) { - code = label[0].toInt() + code = label[0].code } a.recycle() } @@ -281,7 +281,7 @@ class MyKeyboard { key.x = x key.y = y key.label = character.toString() - key.code = character.toInt() + key.code = character.code column++ x += key.width + key.gap mKeys!!.add(key) diff --git a/app/src/main/res/xml/keys_letters_english_dvorak.xml b/app/src/main/res/xml/keys_letters_english_dvorak.xml index 3da740e..f23a93f 100644 --- a/app/src/main/res/xml/keys_letters_english_dvorak.xml +++ b/app/src/main/res/xml/keys_letters_english_dvorak.xml @@ -122,10 +122,15 @@ + + app:keyWidth="40%p" /> + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_english_qwertz.xml b/app/src/main/res/xml/keys_letters_english_qwertz.xml index 60cc165..c1ea8f4 100644 --- a/app/src/main/res/xml/keys_letters_english_qwertz.xml +++ b/app/src/main/res/xml/keys_letters_english_qwertz.xml @@ -121,10 +121,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_french.xml b/app/src/main/res/xml/keys_letters_french.xml index 94fc391..9f532f3 100644 --- a/app/src/main/res/xml/keys_letters_french.xml +++ b/app/src/main/res/xml/keys_letters_french.xml @@ -102,10 +102,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_german.xml b/app/src/main/res/xml/keys_letters_german.xml index a55ec3f..0c1cd9c 100644 --- a/app/src/main/res/xml/keys_letters_german.xml +++ b/app/src/main/res/xml/keys_letters_german.xml @@ -121,10 +121,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_romanian.xml b/app/src/main/res/xml/keys_letters_romanian.xml index cfb7e81..5a27c75 100644 --- a/app/src/main/res/xml/keys_letters_romanian.xml +++ b/app/src/main/res/xml/keys_letters_romanian.xml @@ -105,10 +105,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_russian.xml b/app/src/main/res/xml/keys_letters_russian.xml index 55514b3..ea8c795 100644 --- a/app/src/main/res/xml/keys_letters_russian.xml +++ b/app/src/main/res/xml/keys_letters_russian.xml @@ -155,10 +155,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_slovenian.xml b/app/src/main/res/xml/keys_letters_slovenian.xml index 6bc4da3..0f4a798 100644 --- a/app/src/main/res/xml/keys_letters_slovenian.xml +++ b/app/src/main/res/xml/keys_letters_slovenian.xml @@ -108,10 +108,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_spanish_qwerty.xml b/app/src/main/res/xml/keys_letters_spanish_qwerty.xml index b4148b8..f839cad 100644 --- a/app/src/main/res/xml/keys_letters_spanish_qwerty.xml +++ b/app/src/main/res/xml/keys_letters_spanish_qwerty.xml @@ -6,130 +6,135 @@ app:keyLabel="q" app:popupCharacters="1" app:popupKeyboard="@xml/keyboard_popup_template" - app:topSmallNumber="1"/> + app:topSmallNumber="1" /> + app:topSmallNumber="2" /> + app:topSmallNumber="3" /> + app:topSmallNumber="4" /> + app:topSmallNumber="5" /> + app:topSmallNumber="6" /> + app:topSmallNumber="7" /> + app:topSmallNumber="8" /> + app:topSmallNumber="9" /> + app:topSmallNumber="0" /> + app:popupKeyboard="@xml/keyboard_popup_template" /> + app:popupKeyboard="@xml/keyboard_popup_template" /> - - - - - + app:popupKeyboard="@xml/keyboard_popup_template" /> + + + + + + app:popupKeyboard="@xml/keyboard_popup_template" /> + app:keyLabel="ñ" /> + app:keyWidth="15%p" /> - + app:popupKeyboard="@xml/keyboard_popup_template" /> + - - + app:popupKeyboard="@xml/keyboard_popup_template" /> + + - + app:popupKeyboard="@xml/keyboard_popup_template" /> + + app:keyWidth="15%p" /> + app:keyWidth="15%p" /> + app:keyWidth="10%p" /> + + app:keyWidth="40%p" /> + app:keyWidth="10%p" /> + app:keyWidth="15%p" /> From 45e41471e27fdb7365276113180ff9f7e4924690 Mon Sep 17 00:00:00 2001 From: Naveen Date: Sat, 30 Jul 2022 21:29:18 +0530 Subject: [PATCH 02/18] Add emoji palette --- app/src/main/assets/media/emoji_spec.txt | 3642 +++++++++++++++++ .../keyboard/adapters/EmojisAdapter.kt | 50 + .../keyboard/extensions/View.kt | 19 + .../keyboard/helpers/Constants.kt | 3 + .../keyboard/media/emoji/Emoji.kt | 8 + .../keyboard/media/emoji/EmojiData.kt | 63 + .../keyboard/services/SimpleKeyboardIME.kt | 7 +- .../keyboard/views/AutoGridLayoutManager.kt | 36 + .../keyboard/views/MyKeyboardView.kt | 112 +- .../res/drawable/ic_clear_outline_vector.xml | 10 + .../ic_emoji_emotions_outline_vector.xml | 18 + .../drawable/ripple_all_corners_medium.xml | 10 + app/src/main/res/layout/item_emoji.xml | 11 + .../res/layout/keyboard_view_keyboard.xml | 94 + app/src/main/res/values-ar/strings.xml | 5 +- app/src/main/res/values-az/strings.xml | 3 + app/src/main/res/values-be/strings.xml | 3 + app/src/main/res/values-bg/strings.xml | 5 +- app/src/main/res/values-ca/strings.xml | 3 + app/src/main/res/values-cs/strings.xml | 5 +- app/src/main/res/values-da/strings.xml | 3 + app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values-el/strings.xml | 5 +- app/src/main/res/values-eo/strings.xml | 3 + app/src/main/res/values-es/strings.xml | 3 + app/src/main/res/values-et/strings.xml | 3 + app/src/main/res/values-fi/strings.xml | 3 + app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-gl/strings.xml | 3 + app/src/main/res/values-hr/strings.xml | 3 + app/src/main/res/values-hu/strings.xml | 3 + app/src/main/res/values-in/strings.xml | 3 + app/src/main/res/values-it/strings.xml | 3 + app/src/main/res/values-iw/strings.xml | 3 + app/src/main/res/values-ja/strings.xml | 3 + app/src/main/res/values-lt/strings.xml | 3 + app/src/main/res/values-nb-rNO/strings.xml | 3 + app/src/main/res/values-nl/strings.xml | 3 + app/src/main/res/values-pl/strings.xml | 3 + app/src/main/res/values-pt-rBR/strings.xml | 3 + app/src/main/res/values-pt/strings.xml | 3 + app/src/main/res/values-ro/strings.xml | 5 +- app/src/main/res/values-ru/strings.xml | 3 + app/src/main/res/values-sk/strings.xml | 3 + app/src/main/res/values-sv/strings.xml | 3 + app/src/main/res/values-th/strings.xml | 3 + app/src/main/res/values-tr/strings.xml | 3 + app/src/main/res/values-uk/strings.xml | 3 + app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values-zh-rTW/strings.xml | 3 + app/src/main/res/values/dimens.xml | 3 + app/src/main/res/values/strings.xml | 3 + 52 files changed, 4193 insertions(+), 14 deletions(-) create mode 100644 app/src/main/assets/media/emoji_spec.txt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt create mode 100644 app/src/main/res/drawable/ic_clear_outline_vector.xml create mode 100644 app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml create mode 100644 app/src/main/res/drawable/ripple_all_corners_medium.xml create mode 100644 app/src/main/res/layout/item_emoji.xml diff --git a/app/src/main/assets/media/emoji_spec.txt b/app/src/main/assets/media/emoji_spec.txt new file mode 100644 index 0000000..80200c8 --- /dev/null +++ b/app/src/main/assets/media/emoji_spec.txt @@ -0,0 +1,3642 @@ +[smileys_emotion] +😀;; +😃;; +😄;; +😁;; +😆;; +😅;; +🤣;; +😂;; +🙂;; +🙃;; +🫠;; +😉;; +😊;; +😇;; +🥰;; +😍;; +🤩;; +😘;; +😗;; +☺️;; +😚;; +😙;; +🥲;; +😋;; +😛;; +😜;; +🤪;; +😝;; +🤑;; +🤗;; +🤭;; +🫢;; +🫣;; +🤫;; +🤔;; +🫡;; +🤐;; +🤨;; +😐;; +😑;; +😶;; +🫥;; +😶‍🌫️;; +😏;; +😒;; +🙄;; +😬;; +😮‍💨;; +🤥;; +😌;; +😔;; +😪;; +🤤;; +😴;; +😷;; +🤒;; +🤕;; +🤢;; +🤮;; +🤧;; +🥵;; +🥶;; +🥴;; +😵;; +😵‍💫;; +🤯;; +🤠;; +🥳;; +🥸;; +😎;; +🤓;; +🧐;; +😕;; +🫤;; +😟;; +🙁;; +☹️;; +😮;; +😯;; +😲;; +😳;; +🥺;; +🥹;; +😦;; +😧;; +😨;; +😰;; +😥;; +😢;; +😭;; +😱;; +😖;; +😣;; +😞;; +😓;; +😩;; +😫;; +🥱;; +😤;; +😡;; +😠;; +🤬;; +😈;; +👿;; +💀;; +☠️;; +💩;; +🤡;; +👹;; +👺;; +👻;; +👽;; +👾;; +🤖;; +😺;; +😸;; +😹;; +😻;; +😼;; +😽;; +🙀;; +😿;; +😾;; +🙈;; +🙉;; +🙊;; +💋;; +💌;; +💘;; +💝;; +💖;; +💗;; +💓;; +💞;; +💕;; +💟;; +❣️;; +💔;; +❤️‍🔥;; +❤️‍🩹;; +❤️;; +🧡;; +💛;; +💚;; +💙;; +💜;; +🤎;; +🖤;; +🤍;; +💯;; +💢;; +💥;; +💫;; +💦;; +💨;; +🕳️;; +💣;; +💬;; +👁️‍🗨️;; +🗨️;; +🗯️;; +💭;; +💤;; + +[people_body] +👋;; + 👋🏻;; + 👋🏼;; + 👋🏽;; + 👋🏾;; + 👋🏿;; +🤚;; + 🤚🏻;; + 🤚🏼;; + 🤚🏽;; + 🤚🏾;; + 🤚🏿;; +🖐️;; + 🖐🏻;; + 🖐🏼;; + 🖐🏽;; + 🖐🏾;; + 🖐🏿;; +✋;; + ✋🏻;; + ✋🏼;; + ✋🏽;; + ✋🏾;; + ✋🏿;; +🖖;; + 🖖🏻;; + 🖖🏼;; + 🖖🏽;; + 🖖🏾;; + 🖖🏿;; +🫱;; + 🫱🏻;; + 🫱🏼;; + 🫱🏽;; + 🫱🏾;; + 🫱🏿;; +🫲;; + 🫲🏻;; + 🫲🏼;; + 🫲🏽;; + 🫲🏾;; + 🫲🏿;; +🫳;; + 🫳🏻;; + 🫳🏼;; + 🫳🏽;; + 🫳🏾;; + 🫳🏿;; +🫴;; + 🫴🏻;; + 🫴🏼;; + 🫴🏽;; + 🫴🏾;; + 🫴🏿;; +👌;; + 👌🏻;; + 👌🏼;; + 👌🏽;; + 👌🏾;; + 👌🏿;; +🤌;; + 🤌🏻;; + 🤌🏼;; + 🤌🏽;; + 🤌🏾;; + 🤌🏿;; +🤏;; + 🤏🏻;; + 🤏🏼;; + 🤏🏽;; + 🤏🏾;; + 🤏🏿;; +✌️;; + ✌🏻;; + ✌🏼;; + ✌🏽;; + ✌🏾;; + ✌🏿;; +🤞;; + 🤞🏻;; + 🤞🏼;; + 🤞🏽;; + 🤞🏾;; + 🤞🏿;; +🫰;; + 🫰🏻;; + 🫰🏼;; + 🫰🏽;; + 🫰🏾;; + 🫰🏿;; +🤟;; + 🤟🏻;; + 🤟🏼;; + 🤟🏽;; + 🤟🏾;; + 🤟🏿;; +🤘;; + 🤘🏻;; + 🤘🏼;; + 🤘🏽;; + 🤘🏾;; + 🤘🏿;; +🤙;; + 🤙🏻;; + 🤙🏼;; + 🤙🏽;; + 🤙🏾;; + 🤙🏿;; +👈;; + 👈🏻;; + 👈🏼;; + 👈🏽;; + 👈🏾;; + 👈🏿;; +👉;; + 👉🏻;; + 👉🏼;; + 👉🏽;; + 👉🏾;; + 👉🏿;; +👆;; + 👆🏻;; + 👆🏼;; + 👆🏽;; + 👆🏾;; + 👆🏿;; +🖕;; + 🖕🏻;; + 🖕🏼;; + 🖕🏽;; + 🖕🏾;; + 🖕🏿;; +👇;; + 👇🏻;; + 👇🏼;; + 👇🏽;; + 👇🏾;; + 👇🏿;; +☝️;; + ☝🏻;; + ☝🏼;; + ☝🏽;; + ☝🏾;; + ☝🏿;; +🫵;; + 🫵🏻;; + 🫵🏼;; + 🫵🏽;; + 🫵🏾;; + 🫵🏿;; +👍;; + 👍🏻;; + 👍🏼;; + 👍🏽;; + 👍🏾;; + 👍🏿;; +👎;; + 👎🏻;; + 👎🏼;; + 👎🏽;; + 👎🏾;; + 👎🏿;; +✊;; + ✊🏻;; + ✊🏼;; + ✊🏽;; + ✊🏾;; + ✊🏿;; +👊;; + 👊🏻;; + 👊🏼;; + 👊🏽;; + 👊🏾;; + 👊🏿;; +🤛;; + 🤛🏻;; + 🤛🏼;; + 🤛🏽;; + 🤛🏾;; + 🤛🏿;; +🤜;; + 🤜🏻;; + 🤜🏼;; + 🤜🏽;; + 🤜🏾;; + 🤜🏿;; +👏;; + 👏🏻;; + 👏🏼;; + 👏🏽;; + 👏🏾;; + 👏🏿;; +🙌;; + 🙌🏻;; + 🙌🏼;; + 🙌🏽;; + 🙌🏾;; + 🙌🏿;; +🫶;; + 🫶🏻;; + 🫶🏼;; + 🫶🏽;; + 🫶🏾;; + 🫶🏿;; +👐;; + 👐🏻;; + 👐🏼;; + 👐🏽;; + 👐🏾;; + 👐🏿;; +🤲;; + 🤲🏻;; + 🤲🏼;; + 🤲🏽;; + 🤲🏾;; + 🤲🏿;; +🤝;; + 🤝🏻;; + 🤝🏼;; + 🤝🏽;; + 🤝🏾;; + 🤝🏿;; + 🫱🏻‍🫲🏼;; + 🫱🏻‍🫲🏽;; + 🫱🏻‍🫲🏾;; + 🫱🏻‍🫲🏿;; + 🫱🏼‍🫲🏻;; + 🫱🏼‍🫲🏽;; + 🫱🏼‍🫲🏾;; + 🫱🏼‍🫲🏿;; + 🫱🏽‍🫲🏻;; + 🫱🏽‍🫲🏼;; + 🫱🏽‍🫲🏾;; + 🫱🏽‍🫲🏿;; + 🫱🏾‍🫲🏻;; + 🫱🏾‍🫲🏼;; + 🫱🏾‍🫲🏽;; + 🫱🏾‍🫲🏿;; + 🫱🏿‍🫲🏻;; + 🫱🏿‍🫲🏼;; + 🫱🏿‍🫲🏽;; + 🫱🏿‍🫲🏾;; +🙏;; + 🙏🏻;; + 🙏🏼;; + 🙏🏽;; + 🙏🏾;; + 🙏🏿;; +✍️;; + ✍🏻;; + ✍🏼;; + ✍🏽;; + ✍🏾;; + ✍🏿;; +💅;; + 💅🏻;; + 💅🏼;; + 💅🏽;; + 💅🏾;; + 💅🏿;; +🤳;; + 🤳🏻;; + 🤳🏼;; + 🤳🏽;; + 🤳🏾;; + 🤳🏿;; +💪;; + 💪🏻;; + 💪🏼;; + 💪🏽;; + 💪🏾;; + 💪🏿;; +🦾;; +🦿;; +🦵;; + 🦵🏻;; + 🦵🏼;; + 🦵🏽;; + 🦵🏾;; + 🦵🏿;; +🦶;; + 🦶🏻;; + 🦶🏼;; + 🦶🏽;; + 🦶🏾;; + 🦶🏿;; +👂;; + 👂🏻;; + 👂🏼;; + 👂🏽;; + 👂🏾;; + 👂🏿;; +🦻;; + 🦻🏻;; + 🦻🏼;; + 🦻🏽;; + 🦻🏾;; + 🦻🏿;; +👃;; + 👃🏻;; + 👃🏼;; + 👃🏽;; + 👃🏾;; + 👃🏿;; +🧠;; +🫀;; +🫁;; +🦷;; +🦴;; +👀;; +👁️;; +👅;; +👄;; +🫦;; +👶;; + 👶🏻;; + 👶🏼;; + 👶🏽;; + 👶🏾;; + 👶🏿;; +🧒;; + 🧒🏻;; + 🧒🏼;; + 🧒🏽;; + 🧒🏾;; + 🧒🏿;; +👦;; + 👦🏻;; + 👦🏼;; + 👦🏽;; + 👦🏾;; + 👦🏿;; +👧;; + 👧🏻;; + 👧🏼;; + 👧🏽;; + 👧🏾;; + 👧🏿;; +🧑;; + 🧑🏻;; + 🧑🏼;; + 🧑🏽;; + 🧑🏾;; + 🧑🏿;; +👱;; + 👱🏻;; + 👱🏼;; + 👱🏽;; + 👱🏾;; + 👱🏿;; +👨;; + 👨🏻;; + 👨🏼;; + 👨🏽;; + 👨🏾;; + 👨🏿;; +🧔;; + 🧔🏻;; + 🧔🏼;; + 🧔🏽;; + 🧔🏾;; + 🧔🏿;; +🧔‍♂️;; + 🧔🏻‍♂️;; + 🧔🏼‍♂️;; + 🧔🏽‍♂️;; + 🧔🏾‍♂️;; + 🧔🏿‍♂️;; +🧔‍♀️;; + 🧔🏻‍♀️;; + 🧔🏼‍♀️;; + 🧔🏽‍♀️;; + 🧔🏾‍♀️;; + 🧔🏿‍♀️;; +👨‍🦰;; + 👨🏻‍🦰;; + 👨🏼‍🦰;; + 👨🏽‍🦰;; + 👨🏾‍🦰;; + 👨🏿‍🦰;; +👨‍🦱;; + 👨🏻‍🦱;; + 👨🏼‍🦱;; + 👨🏽‍🦱;; + 👨🏾‍🦱;; + 👨🏿‍🦱;; +👨‍🦳;; + 👨🏻‍🦳;; + 👨🏼‍🦳;; + 👨🏽‍🦳;; + 👨🏾‍🦳;; + 👨🏿‍🦳;; +👨‍🦲;; + 👨🏻‍🦲;; + 👨🏼‍🦲;; + 👨🏽‍🦲;; + 👨🏾‍🦲;; + 👨🏿‍🦲;; +👩;; + 👩🏻;; + 👩🏼;; + 👩🏽;; + 👩🏾;; + 👩🏿;; +👩‍🦰;; + 👩🏻‍🦰;; + 👩🏼‍🦰;; + 👩🏽‍🦰;; + 👩🏾‍🦰;; + 👩🏿‍🦰;; +🧑‍🦰;; + 🧑🏻‍🦰;; + 🧑🏼‍🦰;; + 🧑🏽‍🦰;; + 🧑🏾‍🦰;; + 🧑🏿‍🦰;; +👩‍🦱;; + 👩🏻‍🦱;; + 👩🏼‍🦱;; + 👩🏽‍🦱;; + 👩🏾‍🦱;; + 👩🏿‍🦱;; +🧑‍🦱;; + 🧑🏻‍🦱;; + 🧑🏼‍🦱;; + 🧑🏽‍🦱;; + 🧑🏾‍🦱;; + 🧑🏿‍🦱;; +👩‍🦳;; + 👩🏻‍🦳;; + 👩🏼‍🦳;; + 👩🏽‍🦳;; + 👩🏾‍🦳;; + 👩🏿‍🦳;; +🧑‍🦳;; + 🧑🏻‍🦳;; + 🧑🏼‍🦳;; + 🧑🏽‍🦳;; + 🧑🏾‍🦳;; + 🧑🏿‍🦳;; +👩‍🦲;; + 👩🏻‍🦲;; + 👩🏼‍🦲;; + 👩🏽‍🦲;; + 👩🏾‍🦲;; + 👩🏿‍🦲;; +🧑‍🦲;; + 🧑🏻‍🦲;; + 🧑🏼‍🦲;; + 🧑🏽‍🦲;; + 🧑🏾‍🦲;; + 🧑🏿‍🦲;; +👱‍♀️;; + 👱🏻‍♀️;; + 👱🏼‍♀️;; + 👱🏽‍♀️;; + 👱🏾‍♀️;; + 👱🏿‍♀️;; +👱‍♂️;; + 👱🏻‍♂️;; + 👱🏼‍♂️;; + 👱🏽‍♂️;; + 👱🏾‍♂️;; + 👱🏿‍♂️;; +🧓;; + 🧓🏻;; + 🧓🏼;; + 🧓🏽;; + 🧓🏾;; + 🧓🏿;; +👴;; + 👴🏻;; + 👴🏼;; + 👴🏽;; + 👴🏾;; + 👴🏿;; +👵;; + 👵🏻;; + 👵🏼;; + 👵🏽;; + 👵🏾;; + 👵🏿;; +🙍;; + 🙍🏻;; + 🙍🏼;; + 🙍🏽;; + 🙍🏾;; + 🙍🏿;; +🙍‍♂️;; + 🙍🏻‍♂️;; + 🙍🏼‍♂️;; + 🙍🏽‍♂️;; + 🙍🏾‍♂️;; + 🙍🏿‍♂️;; +🙍‍♀️;; + 🙍🏻‍♀️;; + 🙍🏼‍♀️;; + 🙍🏽‍♀️;; + 🙍🏾‍♀️;; + 🙍🏿‍♀️;; +🙎;; + 🙎🏻;; + 🙎🏼;; + 🙎🏽;; + 🙎🏾;; + 🙎🏿;; +🙎‍♂️;; + 🙎🏻‍♂️;; + 🙎🏼‍♂️;; + 🙎🏽‍♂️;; + 🙎🏾‍♂️;; + 🙎🏿‍♂️;; +🙎‍♀️;; + 🙎🏻‍♀️;; + 🙎🏼‍♀️;; + 🙎🏽‍♀️;; + 🙎🏾‍♀️;; + 🙎🏿‍♀️;; +🙅;; + 🙅🏻;; + 🙅🏼;; + 🙅🏽;; + 🙅🏾;; + 🙅🏿;; +🙅‍♂️;; + 🙅🏻‍♂️;; + 🙅🏼‍♂️;; + 🙅🏽‍♂️;; + 🙅🏾‍♂️;; + 🙅🏿‍♂️;; +🙅‍♀️;; + 🙅🏻‍♀️;; + 🙅🏼‍♀️;; + 🙅🏽‍♀️;; + 🙅🏾‍♀️;; + 🙅🏿‍♀️;; +🙆;; + 🙆🏻;; + 🙆🏼;; + 🙆🏽;; + 🙆🏾;; + 🙆🏿;; +🙆‍♂️;; + 🙆🏻‍♂️;; + 🙆🏼‍♂️;; + 🙆🏽‍♂️;; + 🙆🏾‍♂️;; + 🙆🏿‍♂️;; +🙆‍♀️;; + 🙆🏻‍♀️;; + 🙆🏼‍♀️;; + 🙆🏽‍♀️;; + 🙆🏾‍♀️;; + 🙆🏿‍♀️;; +💁;; + 💁🏻;; + 💁🏼;; + 💁🏽;; + 💁🏾;; + 💁🏿;; +💁‍♂️;; + 💁🏻‍♂️;; + 💁🏼‍♂️;; + 💁🏽‍♂️;; + 💁🏾‍♂️;; + 💁🏿‍♂️;; +💁‍♀️;; + 💁🏻‍♀️;; + 💁🏼‍♀️;; + 💁🏽‍♀️;; + 💁🏾‍♀️;; + 💁🏿‍♀️;; +🙋;; + 🙋🏻;; + 🙋🏼;; + 🙋🏽;; + 🙋🏾;; + 🙋🏿;; +🙋‍♂️;; + 🙋🏻‍♂️;; + 🙋🏼‍♂️;; + 🙋🏽‍♂️;; + 🙋🏾‍♂️;; + 🙋🏿‍♂️;; +🙋‍♀️;; + 🙋🏻‍♀️;; + 🙋🏼‍♀️;; + 🙋🏽‍♀️;; + 🙋🏾‍♀️;; + 🙋🏿‍♀️;; +🧏;; + 🧏🏻;; + 🧏🏼;; + 🧏🏽;; + 🧏🏾;; + 🧏🏿;; +🧏‍♂️;; + 🧏🏻‍♂️;; + 🧏🏼‍♂️;; + 🧏🏽‍♂️;; + 🧏🏾‍♂️;; + 🧏🏿‍♂️;; +🧏‍♀️;; + 🧏🏻‍♀️;; + 🧏🏼‍♀️;; + 🧏🏽‍♀️;; + 🧏🏾‍♀️;; + 🧏🏿‍♀️;; +🙇;; + 🙇🏻;; + 🙇🏼;; + 🙇🏽;; + 🙇🏾;; + 🙇🏿;; +🙇‍♂️;; + 🙇🏻‍♂️;; + 🙇🏼‍♂️;; + 🙇🏽‍♂️;; + 🙇🏾‍♂️;; + 🙇🏿‍♂️;; +🙇‍♀️;; + 🙇🏻‍♀️;; + 🙇🏼‍♀️;; + 🙇🏽‍♀️;; + 🙇🏾‍♀️;; + 🙇🏿‍♀️;; +🤦;; + 🤦🏻;; + 🤦🏼;; + 🤦🏽;; + 🤦🏾;; + 🤦🏿;; +🤦‍♂️;; + 🤦🏻‍♂️;; + 🤦🏼‍♂️;; + 🤦🏽‍♂️;; + 🤦🏾‍♂️;; + 🤦🏿‍♂️;; +🤦‍♀️;; + 🤦🏻‍♀️;; + 🤦🏼‍♀️;; + 🤦🏽‍♀️;; + 🤦🏾‍♀️;; + 🤦🏿‍♀️;; +🤷;; + 🤷🏻;; + 🤷🏼;; + 🤷🏽;; + 🤷🏾;; + 🤷🏿;; +🤷‍♂️;; + 🤷🏻‍♂️;; + 🤷🏼‍♂️;; + 🤷🏽‍♂️;; + 🤷🏾‍♂️;; + 🤷🏿‍♂️;; +🤷‍♀️;; + 🤷🏻‍♀️;; + 🤷🏼‍♀️;; + 🤷🏽‍♀️;; + 🤷🏾‍♀️;; + 🤷🏿‍♀️;; +🧑‍⚕️;; + 🧑🏻‍⚕️;; + 🧑🏼‍⚕️;; + 🧑🏽‍⚕️;; + 🧑🏾‍⚕️;; + 🧑🏿‍⚕️;; +👨‍⚕️;; + 👨🏻‍⚕️;; + 👨🏼‍⚕️;; + 👨🏽‍⚕️;; + 👨🏾‍⚕️;; + 👨🏿‍⚕️;; +👩‍⚕️;; + 👩🏻‍⚕️;; + 👩🏼‍⚕️;; + 👩🏽‍⚕️;; + 👩🏾‍⚕️;; + 👩🏿‍⚕️;; +🧑‍🎓;; + 🧑🏻‍🎓;; + 🧑🏼‍🎓;; + 🧑🏽‍🎓;; + 🧑🏾‍🎓;; + 🧑🏿‍🎓;; +👨‍🎓;; + 👨🏻‍🎓;; + 👨🏼‍🎓;; + 👨🏽‍🎓;; + 👨🏾‍🎓;; + 👨🏿‍🎓;; +👩‍🎓;; + 👩🏻‍🎓;; + 👩🏼‍🎓;; + 👩🏽‍🎓;; + 👩🏾‍🎓;; + 👩🏿‍🎓;; +🧑‍🏫;; + 🧑🏻‍🏫;; + 🧑🏼‍🏫;; + 🧑🏽‍🏫;; + 🧑🏾‍🏫;; + 🧑🏿‍🏫;; +👨‍🏫;; + 👨🏻‍🏫;; + 👨🏼‍🏫;; + 👨🏽‍🏫;; + 👨🏾‍🏫;; + 👨🏿‍🏫;; +👩‍🏫;; + 👩🏻‍🏫;; + 👩🏼‍🏫;; + 👩🏽‍🏫;; + 👩🏾‍🏫;; + 👩🏿‍🏫;; +🧑‍⚖️;; + 🧑🏻‍⚖️;; + 🧑🏼‍⚖️;; + 🧑🏽‍⚖️;; + 🧑🏾‍⚖️;; + 🧑🏿‍⚖️;; +👨‍⚖️;; + 👨🏻‍⚖️;; + 👨🏼‍⚖️;; + 👨🏽‍⚖️;; + 👨🏾‍⚖️;; + 👨🏿‍⚖️;; +👩‍⚖️;; + 👩🏻‍⚖️;; + 👩🏼‍⚖️;; + 👩🏽‍⚖️;; + 👩🏾‍⚖️;; + 👩🏿‍⚖️;; +🧑‍🌾;; + 🧑🏻‍🌾;; + 🧑🏼‍🌾;; + 🧑🏽‍🌾;; + 🧑🏾‍🌾;; + 🧑🏿‍🌾;; +👨‍🌾;; + 👨🏻‍🌾;; + 👨🏼‍🌾;; + 👨🏽‍🌾;; + 👨🏾‍🌾;; + 👨🏿‍🌾;; +👩‍🌾;; + 👩🏻‍🌾;; + 👩🏼‍🌾;; + 👩🏽‍🌾;; + 👩🏾‍🌾;; + 👩🏿‍🌾;; +🧑‍🍳;; + 🧑🏻‍🍳;; + 🧑🏼‍🍳;; + 🧑🏽‍🍳;; + 🧑🏾‍🍳;; + 🧑🏿‍🍳;; +👨‍🍳;; + 👨🏻‍🍳;; + 👨🏼‍🍳;; + 👨🏽‍🍳;; + 👨🏾‍🍳;; + 👨🏿‍🍳;; +👩‍🍳;; + 👩🏻‍🍳;; + 👩🏼‍🍳;; + 👩🏽‍🍳;; + 👩🏾‍🍳;; + 👩🏿‍🍳;; +🧑‍🔧;; + 🧑🏻‍🔧;; + 🧑🏼‍🔧;; + 🧑🏽‍🔧;; + 🧑🏾‍🔧;; + 🧑🏿‍🔧;; +👨‍🔧;; + 👨🏻‍🔧;; + 👨🏼‍🔧;; + 👨🏽‍🔧;; + 👨🏾‍🔧;; + 👨🏿‍🔧;; +👩‍🔧;; + 👩🏻‍🔧;; + 👩🏼‍🔧;; + 👩🏽‍🔧;; + 👩🏾‍🔧;; + 👩🏿‍🔧;; +🧑‍🏭;; + 🧑🏻‍🏭;; + 🧑🏼‍🏭;; + 🧑🏽‍🏭;; + 🧑🏾‍🏭;; + 🧑🏿‍🏭;; +👨‍🏭;; + 👨🏻‍🏭;; + 👨🏼‍🏭;; + 👨🏽‍🏭;; + 👨🏾‍🏭;; + 👨🏿‍🏭;; +👩‍🏭;; + 👩🏻‍🏭;; + 👩🏼‍🏭;; + 👩🏽‍🏭;; + 👩🏾‍🏭;; + 👩🏿‍🏭;; +🧑‍💼;; + 🧑🏻‍💼;; + 🧑🏼‍💼;; + 🧑🏽‍💼;; + 🧑🏾‍💼;; + 🧑🏿‍💼;; +👨‍💼;; + 👨🏻‍💼;; + 👨🏼‍💼;; + 👨🏽‍💼;; + 👨🏾‍💼;; + 👨🏿‍💼;; +👩‍💼;; + 👩🏻‍💼;; + 👩🏼‍💼;; + 👩🏽‍💼;; + 👩🏾‍💼;; + 👩🏿‍💼;; +🧑‍🔬;; + 🧑🏻‍🔬;; + 🧑🏼‍🔬;; + 🧑🏽‍🔬;; + 🧑🏾‍🔬;; + 🧑🏿‍🔬;; +👨‍🔬;; + 👨🏻‍🔬;; + 👨🏼‍🔬;; + 👨🏽‍🔬;; + 👨🏾‍🔬;; + 👨🏿‍🔬;; +👩‍🔬;; + 👩🏻‍🔬;; + 👩🏼‍🔬;; + 👩🏽‍🔬;; + 👩🏾‍🔬;; + 👩🏿‍🔬;; +🧑‍💻;; + 🧑🏻‍💻;; + 🧑🏼‍💻;; + 🧑🏽‍💻;; + 🧑🏾‍💻;; + 🧑🏿‍💻;; +👨‍💻;; + 👨🏻‍💻;; + 👨🏼‍💻;; + 👨🏽‍💻;; + 👨🏾‍💻;; + 👨🏿‍💻;; +👩‍💻;; + 👩🏻‍💻;; + 👩🏼‍💻;; + 👩🏽‍💻;; + 👩🏾‍💻;; + 👩🏿‍💻;; +🧑‍🎤;; + 🧑🏻‍🎤;; + 🧑🏼‍🎤;; + 🧑🏽‍🎤;; + 🧑🏾‍🎤;; + 🧑🏿‍🎤;; +👨‍🎤;; + 👨🏻‍🎤;; + 👨🏼‍🎤;; + 👨🏽‍🎤;; + 👨🏾‍🎤;; + 👨🏿‍🎤;; +👩‍🎤;; + 👩🏻‍🎤;; + 👩🏼‍🎤;; + 👩🏽‍🎤;; + 👩🏾‍🎤;; + 👩🏿‍🎤;; +🧑‍🎨;; + 🧑🏻‍🎨;; + 🧑🏼‍🎨;; + 🧑🏽‍🎨;; + 🧑🏾‍🎨;; + 🧑🏿‍🎨;; +👨‍🎨;; + 👨🏻‍🎨;; + 👨🏼‍🎨;; + 👨🏽‍🎨;; + 👨🏾‍🎨;; + 👨🏿‍🎨;; +👩‍🎨;; + 👩🏻‍🎨;; + 👩🏼‍🎨;; + 👩🏽‍🎨;; + 👩🏾‍🎨;; + 👩🏿‍🎨;; +🧑‍✈️;; + 🧑🏻‍✈️;; + 🧑🏼‍✈️;; + 🧑🏽‍✈️;; + 🧑🏾‍✈️;; + 🧑🏿‍✈️;; +👨‍✈️;; + 👨🏻‍✈️;; + 👨🏼‍✈️;; + 👨🏽‍✈️;; + 👨🏾‍✈️;; + 👨🏿‍✈️;; +👩‍✈️;; + 👩🏻‍✈️;; + 👩🏼‍✈️;; + 👩🏽‍✈️;; + 👩🏾‍✈️;; + 👩🏿‍✈️;; +🧑‍🚀;; + 🧑🏻‍🚀;; + 🧑🏼‍🚀;; + 🧑🏽‍🚀;; + 🧑🏾‍🚀;; + 🧑🏿‍🚀;; +👨‍🚀;; + 👨🏻‍🚀;; + 👨🏼‍🚀;; + 👨🏽‍🚀;; + 👨🏾‍🚀;; + 👨🏿‍🚀;; +👩‍🚀;; + 👩🏻‍🚀;; + 👩🏼‍🚀;; + 👩🏽‍🚀;; + 👩🏾‍🚀;; + 👩🏿‍🚀;; +🧑‍🚒;; + 🧑🏻‍🚒;; + 🧑🏼‍🚒;; + 🧑🏽‍🚒;; + 🧑🏾‍🚒;; + 🧑🏿‍🚒;; +👨‍🚒;; + 👨🏻‍🚒;; + 👨🏼‍🚒;; + 👨🏽‍🚒;; + 👨🏾‍🚒;; + 👨🏿‍🚒;; +👩‍🚒;; + 👩🏻‍🚒;; + 👩🏼‍🚒;; + 👩🏽‍🚒;; + 👩🏾‍🚒;; + 👩🏿‍🚒;; +👮;; + 👮🏻;; + 👮🏼;; + 👮🏽;; + 👮🏾;; + 👮🏿;; +👮‍♂️;; + 👮🏻‍♂️;; + 👮🏼‍♂️;; + 👮🏽‍♂️;; + 👮🏾‍♂️;; + 👮🏿‍♂️;; +👮‍♀️;; + 👮🏻‍♀️;; + 👮🏼‍♀️;; + 👮🏽‍♀️;; + 👮🏾‍♀️;; + 👮🏿‍♀️;; +🕵️;; + 🕵🏻;; + 🕵🏼;; + 🕵🏽;; + 🕵🏾;; + 🕵🏿;; +🕵️‍♂️;; + 🕵🏻‍♂️;; + 🕵🏼‍♂️;; + 🕵🏽‍♂️;; + 🕵🏾‍♂️;; + 🕵🏿‍♂️;; +🕵️‍♀️;; + 🕵🏻‍♀️;; + 🕵🏼‍♀️;; + 🕵🏽‍♀️;; + 🕵🏾‍♀️;; + 🕵🏿‍♀️;; +💂;; + 💂🏻;; + 💂🏼;; + 💂🏽;; + 💂🏾;; + 💂🏿;; +💂‍♂️;; + 💂🏻‍♂️;; + 💂🏼‍♂️;; + 💂🏽‍♂️;; + 💂🏾‍♂️;; + 💂🏿‍♂️;; +💂‍♀️;; + 💂🏻‍♀️;; + 💂🏼‍♀️;; + 💂🏽‍♀️;; + 💂🏾‍♀️;; + 💂🏿‍♀️;; +🥷;; + 🥷🏻;; + 🥷🏼;; + 🥷🏽;; + 🥷🏾;; + 🥷🏿;; +👷;; + 👷🏻;; + 👷🏼;; + 👷🏽;; + 👷🏾;; + 👷🏿;; +👷‍♂️;; + 👷🏻‍♂️;; + 👷🏼‍♂️;; + 👷🏽‍♂️;; + 👷🏾‍♂️;; + 👷🏿‍♂️;; +👷‍♀️;; + 👷🏻‍♀️;; + 👷🏼‍♀️;; + 👷🏽‍♀️;; + 👷🏾‍♀️;; + 👷🏿‍♀️;; +🫅;; + 🫅🏻;; + 🫅🏼;; + 🫅🏽;; + 🫅🏾;; + 🫅🏿;; +🤴;; + 🤴🏻;; + 🤴🏼;; + 🤴🏽;; + 🤴🏾;; + 🤴🏿;; +👸;; + 👸🏻;; + 👸🏼;; + 👸🏽;; + 👸🏾;; + 👸🏿;; +👳;; + 👳🏻;; + 👳🏼;; + 👳🏽;; + 👳🏾;; + 👳🏿;; +👳‍♂️;; + 👳🏻‍♂️;; + 👳🏼‍♂️;; + 👳🏽‍♂️;; + 👳🏾‍♂️;; + 👳🏿‍♂️;; +👳‍♀️;; + 👳🏻‍♀️;; + 👳🏼‍♀️;; + 👳🏽‍♀️;; + 👳🏾‍♀️;; + 👳🏿‍♀️;; +👲;; + 👲🏻;; + 👲🏼;; + 👲🏽;; + 👲🏾;; + 👲🏿;; +🧕;; + 🧕🏻;; + 🧕🏼;; + 🧕🏽;; + 🧕🏾;; + 🧕🏿;; +🤵;; + 🤵🏻;; + 🤵🏼;; + 🤵🏽;; + 🤵🏾;; + 🤵🏿;; +🤵‍♂️;; + 🤵🏻‍♂️;; + 🤵🏼‍♂️;; + 🤵🏽‍♂️;; + 🤵🏾‍♂️;; + 🤵🏿‍♂️;; +🤵‍♀️;; + 🤵🏻‍♀️;; + 🤵🏼‍♀️;; + 🤵🏽‍♀️;; + 🤵🏾‍♀️;; + 🤵🏿‍♀️;; +👰;; + 👰🏻;; + 👰🏼;; + 👰🏽;; + 👰🏾;; + 👰🏿;; +👰‍♂️;; + 👰🏻‍♂️;; + 👰🏼‍♂️;; + 👰🏽‍♂️;; + 👰🏾‍♂️;; + 👰🏿‍♂️;; +👰‍♀️;; + 👰🏻‍♀️;; + 👰🏼‍♀️;; + 👰🏽‍♀️;; + 👰🏾‍♀️;; + 👰🏿‍♀️;; +🤰;; + 🤰🏻;; + 🤰🏼;; + 🤰🏽;; + 🤰🏾;; + 🤰🏿;; +🫃;; + 🫃🏻;; + 🫃🏼;; + 🫃🏽;; + 🫃🏾;; + 🫃🏿;; +🫄;; + 🫄🏻;; + 🫄🏼;; + 🫄🏽;; + 🫄🏾;; + 🫄🏿;; +🤱;; + 🤱🏻;; + 🤱🏼;; + 🤱🏽;; + 🤱🏾;; + 🤱🏿;; +👩‍🍼;; + 👩🏻‍🍼;; + 👩🏼‍🍼;; + 👩🏽‍🍼;; + 👩🏾‍🍼;; + 👩🏿‍🍼;; +👨‍🍼;; + 👨🏻‍🍼;; + 👨🏼‍🍼;; + 👨🏽‍🍼;; + 👨🏾‍🍼;; + 👨🏿‍🍼;; +🧑‍🍼;; + 🧑🏻‍🍼;; + 🧑🏼‍🍼;; + 🧑🏽‍🍼;; + 🧑🏾‍🍼;; + 🧑🏿‍🍼;; +👼;; + 👼🏻;; + 👼🏼;; + 👼🏽;; + 👼🏾;; + 👼🏿;; +🎅;; + 🎅🏻;; + 🎅🏼;; + 🎅🏽;; + 🎅🏾;; + 🎅🏿;; +🤶;; + 🤶🏻;; + 🤶🏼;; + 🤶🏽;; + 🤶🏾;; + 🤶🏿;; +🧑‍🎄;; + 🧑🏻‍🎄;; + 🧑🏼‍🎄;; + 🧑🏽‍🎄;; + 🧑🏾‍🎄;; + 🧑🏿‍🎄;; +🦸;; + 🦸🏻;; + 🦸🏼;; + 🦸🏽;; + 🦸🏾;; + 🦸🏿;; +🦸‍♂️;; + 🦸🏻‍♂️;; + 🦸🏼‍♂️;; + 🦸🏽‍♂️;; + 🦸🏾‍♂️;; + 🦸🏿‍♂️;; +🦸‍♀️;; + 🦸🏻‍♀️;; + 🦸🏼‍♀️;; + 🦸🏽‍♀️;; + 🦸🏾‍♀️;; + 🦸🏿‍♀️;; +🦹;; + 🦹🏻;; + 🦹🏼;; + 🦹🏽;; + 🦹🏾;; + 🦹🏿;; +🦹‍♂️;; + 🦹🏻‍♂️;; + 🦹🏼‍♂️;; + 🦹🏽‍♂️;; + 🦹🏾‍♂️;; + 🦹🏿‍♂️;; +🦹‍♀️;; + 🦹🏻‍♀️;; + 🦹🏼‍♀️;; + 🦹🏽‍♀️;; + 🦹🏾‍♀️;; + 🦹🏿‍♀️;; +🧙;; + 🧙🏻;; + 🧙🏼;; + 🧙🏽;; + 🧙🏾;; + 🧙🏿;; +🧙‍♂️;; + 🧙🏻‍♂️;; + 🧙🏼‍♂️;; + 🧙🏽‍♂️;; + 🧙🏾‍♂️;; + 🧙🏿‍♂️;; +🧙‍♀️;; + 🧙🏻‍♀️;; + 🧙🏼‍♀️;; + 🧙🏽‍♀️;; + 🧙🏾‍♀️;; + 🧙🏿‍♀️;; +🧚;; + 🧚🏻;; + 🧚🏼;; + 🧚🏽;; + 🧚🏾;; + 🧚🏿;; +🧚‍♂️;; + 🧚🏻‍♂️;; + 🧚🏼‍♂️;; + 🧚🏽‍♂️;; + 🧚🏾‍♂️;; + 🧚🏿‍♂️;; +🧚‍♀️;; + 🧚🏻‍♀️;; + 🧚🏼‍♀️;; + 🧚🏽‍♀️;; + 🧚🏾‍♀️;; + 🧚🏿‍♀️;; +🧛;; + 🧛🏻;; + 🧛🏼;; + 🧛🏽;; + 🧛🏾;; + 🧛🏿;; +🧛‍♂️;; + 🧛🏻‍♂️;; + 🧛🏼‍♂️;; + 🧛🏽‍♂️;; + 🧛🏾‍♂️;; + 🧛🏿‍♂️;; +🧛‍♀️;; + 🧛🏻‍♀️;; + 🧛🏼‍♀️;; + 🧛🏽‍♀️;; + 🧛🏾‍♀️;; + 🧛🏿‍♀️;; +🧜;; + 🧜🏻;; + 🧜🏼;; + 🧜🏽;; + 🧜🏾;; + 🧜🏿;; +🧜‍♂️;; + 🧜🏻‍♂️;; + 🧜🏼‍♂️;; + 🧜🏽‍♂️;; + 🧜🏾‍♂️;; + 🧜🏿‍♂️;; +🧜‍♀️;; + 🧜🏻‍♀️;; + 🧜🏼‍♀️;; + 🧜🏽‍♀️;; + 🧜🏾‍♀️;; + 🧜🏿‍♀️;; +🧝;; + 🧝🏻;; + 🧝🏼;; + 🧝🏽;; + 🧝🏾;; + 🧝🏿;; +🧝‍♂️;; + 🧝🏻‍♂️;; + 🧝🏼‍♂️;; + 🧝🏽‍♂️;; + 🧝🏾‍♂️;; + 🧝🏿‍♂️;; +🧝‍♀️;; + 🧝🏻‍♀️;; + 🧝🏼‍♀️;; + 🧝🏽‍♀️;; + 🧝🏾‍♀️;; + 🧝🏿‍♀️;; +🧞;; +🧞‍♂️;; +🧞‍♀️;; +🧟;; +🧟‍♂️;; +🧟‍♀️;; +🧌;; +💆;; + 💆🏻;; + 💆🏼;; + 💆🏽;; + 💆🏾;; + 💆🏿;; +💆‍♂️;; + 💆🏻‍♂️;; + 💆🏼‍♂️;; + 💆🏽‍♂️;; + 💆🏾‍♂️;; + 💆🏿‍♂️;; +💆‍♀️;; + 💆🏻‍♀️;; + 💆🏼‍♀️;; + 💆🏽‍♀️;; + 💆🏾‍♀️;; + 💆🏿‍♀️;; +💇;; + 💇🏻;; + 💇🏼;; + 💇🏽;; + 💇🏾;; + 💇🏿;; +💇‍♂️;; + 💇🏻‍♂️;; + 💇🏼‍♂️;; + 💇🏽‍♂️;; + 💇🏾‍♂️;; + 💇🏿‍♂️;; +💇‍♀️;; + 💇🏻‍♀️;; + 💇🏼‍♀️;; + 💇🏽‍♀️;; + 💇🏾‍♀️;; + 💇🏿‍♀️;; +🚶;; + 🚶🏻;; + 🚶🏼;; + 🚶🏽;; + 🚶🏾;; + 🚶🏿;; +🚶‍♂️;; + 🚶🏻‍♂️;; + 🚶🏼‍♂️;; + 🚶🏽‍♂️;; + 🚶🏾‍♂️;; + 🚶🏿‍♂️;; +🚶‍♀️;; + 🚶🏻‍♀️;; + 🚶🏼‍♀️;; + 🚶🏽‍♀️;; + 🚶🏾‍♀️;; + 🚶🏿‍♀️;; +🧍;; + 🧍🏻;; + 🧍🏼;; + 🧍🏽;; + 🧍🏾;; + 🧍🏿;; +🧍‍♂️;; + 🧍🏻‍♂️;; + 🧍🏼‍♂️;; + 🧍🏽‍♂️;; + 🧍🏾‍♂️;; + 🧍🏿‍♂️;; +🧍‍♀️;; + 🧍🏻‍♀️;; + 🧍🏼‍♀️;; + 🧍🏽‍♀️;; + 🧍🏾‍♀️;; + 🧍🏿‍♀️;; +🧎;; + 🧎🏻;; + 🧎🏼;; + 🧎🏽;; + 🧎🏾;; + 🧎🏿;; +🧎‍♂️;; + 🧎🏻‍♂️;; + 🧎🏼‍♂️;; + 🧎🏽‍♂️;; + 🧎🏾‍♂️;; + 🧎🏿‍♂️;; +🧎‍♀️;; + 🧎🏻‍♀️;; + 🧎🏼‍♀️;; + 🧎🏽‍♀️;; + 🧎🏾‍♀️;; + 🧎🏿‍♀️;; +🧑‍🦯;; + 🧑🏻‍🦯;; + 🧑🏼‍🦯;; + 🧑🏽‍🦯;; + 🧑🏾‍🦯;; + 🧑🏿‍🦯;; +👨‍🦯;; + 👨🏻‍🦯;; + 👨🏼‍🦯;; + 👨🏽‍🦯;; + 👨🏾‍🦯;; + 👨🏿‍🦯;; +👩‍🦯;; + 👩🏻‍🦯;; + 👩🏼‍🦯;; + 👩🏽‍🦯;; + 👩🏾‍🦯;; + 👩🏿‍🦯;; +🧑‍🦼;; + 🧑🏻‍🦼;; + 🧑🏼‍🦼;; + 🧑🏽‍🦼;; + 🧑🏾‍🦼;; + 🧑🏿‍🦼;; +👨‍🦼;; + 👨🏻‍🦼;; + 👨🏼‍🦼;; + 👨🏽‍🦼;; + 👨🏾‍🦼;; + 👨🏿‍🦼;; +👩‍🦼;; + 👩🏻‍🦼;; + 👩🏼‍🦼;; + 👩🏽‍🦼;; + 👩🏾‍🦼;; + 👩🏿‍🦼;; +🧑‍🦽;; + 🧑🏻‍🦽;; + 🧑🏼‍🦽;; + 🧑🏽‍🦽;; + 🧑🏾‍🦽;; + 🧑🏿‍🦽;; +👨‍🦽;; + 👨🏻‍🦽;; + 👨🏼‍🦽;; + 👨🏽‍🦽;; + 👨🏾‍🦽;; + 👨🏿‍🦽;; +👩‍🦽;; + 👩🏻‍🦽;; + 👩🏼‍🦽;; + 👩🏽‍🦽;; + 👩🏾‍🦽;; + 👩🏿‍🦽;; +🏃;; + 🏃🏻;; + 🏃🏼;; + 🏃🏽;; + 🏃🏾;; + 🏃🏿;; +🏃‍♂️;; + 🏃🏻‍♂️;; + 🏃🏼‍♂️;; + 🏃🏽‍♂️;; + 🏃🏾‍♂️;; + 🏃🏿‍♂️;; +🏃‍♀️;; + 🏃🏻‍♀️;; + 🏃🏼‍♀️;; + 🏃🏽‍♀️;; + 🏃🏾‍♀️;; + 🏃🏿‍♀️;; +💃;; + 💃🏻;; + 💃🏼;; + 💃🏽;; + 💃🏾;; + 💃🏿;; +🕺;; + 🕺🏻;; + 🕺🏼;; + 🕺🏽;; + 🕺🏾;; + 🕺🏿;; +🕴️;; + 🕴🏻;; + 🕴🏼;; + 🕴🏽;; + 🕴🏾;; + 🕴🏿;; +👯;; +👯‍♂️;; +👯‍♀️;; +🧖;; + 🧖🏻;; + 🧖🏼;; + 🧖🏽;; + 🧖🏾;; + 🧖🏿;; +🧖‍♂️;; + 🧖🏻‍♂️;; + 🧖🏼‍♂️;; + 🧖🏽‍♂️;; + 🧖🏾‍♂️;; + 🧖🏿‍♂️;; +🧖‍♀️;; + 🧖🏻‍♀️;; + 🧖🏼‍♀️;; + 🧖🏽‍♀️;; + 🧖🏾‍♀️;; + 🧖🏿‍♀️;; +🧗;; + 🧗🏻;; + 🧗🏼;; + 🧗🏽;; + 🧗🏾;; + 🧗🏿;; +🧗‍♂️;; + 🧗🏻‍♂️;; + 🧗🏼‍♂️;; + 🧗🏽‍♂️;; + 🧗🏾‍♂️;; + 🧗🏿‍♂️;; +🧗‍♀️;; + 🧗🏻‍♀️;; + 🧗🏼‍♀️;; + 🧗🏽‍♀️;; + 🧗🏾‍♀️;; + 🧗🏿‍♀️;; +🤺;; +🏇;; + 🏇🏻;; + 🏇🏼;; + 🏇🏽;; + 🏇🏾;; + 🏇🏿;; +⛷️;; +🏂;; + 🏂🏻;; + 🏂🏼;; + 🏂🏽;; + 🏂🏾;; + 🏂🏿;; +🏌️;; + 🏌🏻;; + 🏌🏼;; + 🏌🏽;; + 🏌🏾;; + 🏌🏿;; +🏌️‍♂️;; + 🏌🏻‍♂️;; + 🏌🏼‍♂️;; + 🏌🏽‍♂️;; + 🏌🏾‍♂️;; + 🏌🏿‍♂️;; +🏌️‍♀️;; + 🏌🏻‍♀️;; + 🏌🏼‍♀️;; + 🏌🏽‍♀️;; + 🏌🏾‍♀️;; + 🏌🏿‍♀️;; +🏄;; + 🏄🏻;; + 🏄🏼;; + 🏄🏽;; + 🏄🏾;; + 🏄🏿;; +🏄‍♂️;; + 🏄🏻‍♂️;; + 🏄🏼‍♂️;; + 🏄🏽‍♂️;; + 🏄🏾‍♂️;; + 🏄🏿‍♂️;; +🏄‍♀️;; + 🏄🏻‍♀️;; + 🏄🏼‍♀️;; + 🏄🏽‍♀️;; + 🏄🏾‍♀️;; + 🏄🏿‍♀️;; +🚣;; + 🚣🏻;; + 🚣🏼;; + 🚣🏽;; + 🚣🏾;; + 🚣🏿;; +🚣‍♂️;; + 🚣🏻‍♂️;; + 🚣🏼‍♂️;; + 🚣🏽‍♂️;; + 🚣🏾‍♂️;; + 🚣🏿‍♂️;; +🚣‍♀️;; + 🚣🏻‍♀️;; + 🚣🏼‍♀️;; + 🚣🏽‍♀️;; + 🚣🏾‍♀️;; + 🚣🏿‍♀️;; +🏊;; + 🏊🏻;; + 🏊🏼;; + 🏊🏽;; + 🏊🏾;; + 🏊🏿;; +🏊‍♂️;; + 🏊🏻‍♂️;; + 🏊🏼‍♂️;; + 🏊🏽‍♂️;; + 🏊🏾‍♂️;; + 🏊🏿‍♂️;; +🏊‍♀️;; + 🏊🏻‍♀️;; + 🏊🏼‍♀️;; + 🏊🏽‍♀️;; + 🏊🏾‍♀️;; + 🏊🏿‍♀️;; +⛹️;; + ⛹🏻;; + ⛹🏼;; + ⛹🏽;; + ⛹🏾;; + ⛹🏿;; +⛹️‍♂️;; + ⛹🏻‍♂️;; + ⛹🏼‍♂️;; + ⛹🏽‍♂️;; + ⛹🏾‍♂️;; + ⛹🏿‍♂️;; +⛹️‍♀️;; + ⛹🏻‍♀️;; + ⛹🏼‍♀️;; + ⛹🏽‍♀️;; + ⛹🏾‍♀️;; + ⛹🏿‍♀️;; +🏋️;; + 🏋🏻;; + 🏋🏼;; + 🏋🏽;; + 🏋🏾;; + 🏋🏿;; +🏋️‍♂️;; + 🏋🏻‍♂️;; + 🏋🏼‍♂️;; + 🏋🏽‍♂️;; + 🏋🏾‍♂️;; + 🏋🏿‍♂️;; +🏋️‍♀️;; + 🏋🏻‍♀️;; + 🏋🏼‍♀️;; + 🏋🏽‍♀️;; + 🏋🏾‍♀️;; + 🏋🏿‍♀️;; +🚴;; + 🚴🏻;; + 🚴🏼;; + 🚴🏽;; + 🚴🏾;; + 🚴🏿;; +🚴‍♂️;; + 🚴🏻‍♂️;; + 🚴🏼‍♂️;; + 🚴🏽‍♂️;; + 🚴🏾‍♂️;; + 🚴🏿‍♂️;; +🚴‍♀️;; + 🚴🏻‍♀️;; + 🚴🏼‍♀️;; + 🚴🏽‍♀️;; + 🚴🏾‍♀️;; + 🚴🏿‍♀️;; +🚵;; + 🚵🏻;; + 🚵🏼;; + 🚵🏽;; + 🚵🏾;; + 🚵🏿;; +🚵‍♂️;; + 🚵🏻‍♂️;; + 🚵🏼‍♂️;; + 🚵🏽‍♂️;; + 🚵🏾‍♂️;; + 🚵🏿‍♂️;; +🚵‍♀️;; + 🚵🏻‍♀️;; + 🚵🏼‍♀️;; + 🚵🏽‍♀️;; + 🚵🏾‍♀️;; + 🚵🏿‍♀️;; +🤸;; + 🤸🏻;; + 🤸🏼;; + 🤸🏽;; + 🤸🏾;; + 🤸🏿;; +🤸‍♂️;; + 🤸🏻‍♂️;; + 🤸🏼‍♂️;; + 🤸🏽‍♂️;; + 🤸🏾‍♂️;; + 🤸🏿‍♂️;; +🤸‍♀️;; + 🤸🏻‍♀️;; + 🤸🏼‍♀️;; + 🤸🏽‍♀️;; + 🤸🏾‍♀️;; + 🤸🏿‍♀️;; +🤼;; +🤼‍♂️;; +🤼‍♀️;; +🤽;; + 🤽🏻;; + 🤽🏼;; + 🤽🏽;; + 🤽🏾;; + 🤽🏿;; +🤽‍♂️;; + 🤽🏻‍♂️;; + 🤽🏼‍♂️;; + 🤽🏽‍♂️;; + 🤽🏾‍♂️;; + 🤽🏿‍♂️;; +🤽‍♀️;; + 🤽🏻‍♀️;; + 🤽🏼‍♀️;; + 🤽🏽‍♀️;; + 🤽🏾‍♀️;; + 🤽🏿‍♀️;; +🤾;; + 🤾🏻;; + 🤾🏼;; + 🤾🏽;; + 🤾🏾;; + 🤾🏿;; +🤾‍♂️;; + 🤾🏻‍♂️;; + 🤾🏼‍♂️;; + 🤾🏽‍♂️;; + 🤾🏾‍♂️;; + 🤾🏿‍♂️;; +🤾‍♀️;; + 🤾🏻‍♀️;; + 🤾🏼‍♀️;; + 🤾🏽‍♀️;; + 🤾🏾‍♀️;; + 🤾🏿‍♀️;; +🤹;; + 🤹🏻;; + 🤹🏼;; + 🤹🏽;; + 🤹🏾;; + 🤹🏿;; +🤹‍♂️;; + 🤹🏻‍♂️;; + 🤹🏼‍♂️;; + 🤹🏽‍♂️;; + 🤹🏾‍♂️;; + 🤹🏿‍♂️;; +🤹‍♀️;; + 🤹🏻‍♀️;; + 🤹🏼‍♀️;; + 🤹🏽‍♀️;; + 🤹🏾‍♀️;; + 🤹🏿‍♀️;; +🧘;; + 🧘🏻;; + 🧘🏼;; + 🧘🏽;; + 🧘🏾;; + 🧘🏿;; +🧘‍♂️;; + 🧘🏻‍♂️;; + 🧘🏼‍♂️;; + 🧘🏽‍♂️;; + 🧘🏾‍♂️;; + 🧘🏿‍♂️;; +🧘‍♀️;; + 🧘🏻‍♀️;; + 🧘🏼‍♀️;; + 🧘🏽‍♀️;; + 🧘🏾‍♀️;; + 🧘🏿‍♀️;; +🛀;; + 🛀🏻;; + 🛀🏼;; + 🛀🏽;; + 🛀🏾;; + 🛀🏿;; +🛌;; + 🛌🏻;; + 🛌🏼;; + 🛌🏽;; + 🛌🏾;; + 🛌🏿;; +🧑‍🤝‍🧑;; + 🧑🏻‍🤝‍🧑🏻;; + 🧑🏻‍🤝‍🧑🏼;; + 🧑🏻‍🤝‍🧑🏽;; + 🧑🏻‍🤝‍🧑🏾;; + 🧑🏻‍🤝‍🧑🏿;; + 🧑🏼‍🤝‍🧑🏻;; + 🧑🏼‍🤝‍🧑🏼;; + 🧑🏼‍🤝‍🧑🏽;; + 🧑🏼‍🤝‍🧑🏾;; + 🧑🏼‍🤝‍🧑🏿;; + 🧑🏽‍🤝‍🧑🏻;; + 🧑🏽‍🤝‍🧑🏼;; + 🧑🏽‍🤝‍🧑🏽;; + 🧑🏽‍🤝‍🧑🏾;; + 🧑🏽‍🤝‍🧑🏿;; + 🧑🏾‍🤝‍🧑🏻;; + 🧑🏾‍🤝‍🧑🏼;; + 🧑🏾‍🤝‍🧑🏽;; + 🧑🏾‍🤝‍🧑🏾;; + 🧑🏾‍🤝‍🧑🏿;; + 🧑🏿‍🤝‍🧑🏻;; + 🧑🏿‍🤝‍🧑🏼;; + 🧑🏿‍🤝‍🧑🏽;; + 🧑🏿‍🤝‍🧑🏾;; + 🧑🏿‍🤝‍🧑🏿;; +👭;; + 👭🏻;; + 👩🏻‍🤝‍👩🏼;; + 👩🏻‍🤝‍👩🏽;; + 👩🏻‍🤝‍👩🏾;; + 👩🏻‍🤝‍👩🏿;; + 👩🏼‍🤝‍👩🏻;; + 👭🏼;; + 👩🏼‍🤝‍👩🏽;; + 👩🏼‍🤝‍👩🏾;; + 👩🏼‍🤝‍👩🏿;; + 👩🏽‍🤝‍👩🏻;; + 👩🏽‍🤝‍👩🏼;; + 👭🏽;; + 👩🏽‍🤝‍👩🏾;; + 👩🏽‍🤝‍👩🏿;; + 👩🏾‍🤝‍👩🏻;; + 👩🏾‍🤝‍👩🏼;; + 👩🏾‍🤝‍👩🏽;; + 👭🏾;; + 👩🏾‍🤝‍👩🏿;; + 👩🏿‍🤝‍👩🏻;; + 👩🏿‍🤝‍👩🏼;; + 👩🏿‍🤝‍👩🏽;; + 👩🏿‍🤝‍👩🏾;; + 👭🏿;; +👫;; + 👫🏻;; + 👩🏻‍🤝‍👨🏼;; + 👩🏻‍🤝‍👨🏽;; + 👩🏻‍🤝‍👨🏾;; + 👩🏻‍🤝‍👨🏿;; + 👩🏼‍🤝‍👨🏻;; + 👫🏼;; + 👩🏼‍🤝‍👨🏽;; + 👩🏼‍🤝‍👨🏾;; + 👩🏼‍🤝‍👨🏿;; + 👩🏽‍🤝‍👨🏻;; + 👩🏽‍🤝‍👨🏼;; + 👫🏽;; + 👩🏽‍🤝‍👨🏾;; + 👩🏽‍🤝‍👨🏿;; + 👩🏾‍🤝‍👨🏻;; + 👩🏾‍🤝‍👨🏼;; + 👩🏾‍🤝‍👨🏽;; + 👫🏾;; + 👩🏾‍🤝‍👨🏿;; + 👩🏿‍🤝‍👨🏻;; + 👩🏿‍🤝‍👨🏼;; + 👩🏿‍🤝‍👨🏽;; + 👩🏿‍🤝‍👨🏾;; + 👫🏿;; +👬;; + 👬🏻;; + 👨🏻‍🤝‍👨🏼;; + 👨🏻‍🤝‍👨🏽;; + 👨🏻‍🤝‍👨🏾;; + 👨🏻‍🤝‍👨🏿;; + 👨🏼‍🤝‍👨🏻;; + 👬🏼;; + 👨🏼‍🤝‍👨🏽;; + 👨🏼‍🤝‍👨🏾;; + 👨🏼‍🤝‍👨🏿;; + 👨🏽‍🤝‍👨🏻;; + 👨🏽‍🤝‍👨🏼;; + 👬🏽;; + 👨🏽‍🤝‍👨🏾;; + 👨🏽‍🤝‍👨🏿;; + 👨🏾‍🤝‍👨🏻;; + 👨🏾‍🤝‍👨🏼;; + 👨🏾‍🤝‍👨🏽;; + 👬🏾;; + 👨🏾‍🤝‍👨🏿;; + 👨🏿‍🤝‍👨🏻;; + 👨🏿‍🤝‍👨🏼;; + 👨🏿‍🤝‍👨🏽;; + 👨🏿‍🤝‍👨🏾;; + 👬🏿;; +💏;; + 💏🏻;; + 💏🏼;; + 💏🏽;; + 💏🏾;; + 💏🏿;; + 🧑🏻‍❤️‍💋‍🧑🏼;; + 🧑🏻‍❤️‍💋‍🧑🏽;; + 🧑🏻‍❤️‍💋‍🧑🏾;; + 🧑🏻‍❤️‍💋‍🧑🏿;; + 🧑🏼‍❤️‍💋‍🧑🏻;; + 🧑🏼‍❤️‍💋‍🧑🏽;; + 🧑🏼‍❤️‍💋‍🧑🏾;; + 🧑🏼‍❤️‍💋‍🧑🏿;; + 🧑🏽‍❤️‍💋‍🧑🏻;; + 🧑🏽‍❤️‍💋‍🧑🏼;; + 🧑🏽‍❤️‍💋‍🧑🏾;; + 🧑🏽‍❤️‍💋‍🧑🏿;; + 🧑🏾‍❤️‍💋‍🧑🏻;; + 🧑🏾‍❤️‍💋‍🧑🏼;; + 🧑🏾‍❤️‍💋‍🧑🏽;; + 🧑🏾‍❤️‍💋‍🧑🏿;; + 🧑🏿‍❤️‍💋‍🧑🏻;; + 🧑🏿‍❤️‍💋‍🧑🏼;; + 🧑🏿‍❤️‍💋‍🧑🏽;; + 🧑🏿‍❤️‍💋‍🧑🏾;; +👩‍❤️‍💋‍👨;; + 👩🏻‍❤️‍💋‍👨🏻;; + 👩🏻‍❤️‍💋‍👨🏼;; + 👩🏻‍❤️‍💋‍👨🏽;; + 👩🏻‍❤️‍💋‍👨🏾;; + 👩🏻‍❤️‍💋‍👨🏿;; + 👩🏼‍❤️‍💋‍👨🏻;; + 👩🏼‍❤️‍💋‍👨🏼;; + 👩🏼‍❤️‍💋‍👨🏽;; + 👩🏼‍❤️‍💋‍👨🏾;; + 👩🏼‍❤️‍💋‍👨🏿;; + 👩🏽‍❤️‍💋‍👨🏻;; + 👩🏽‍❤️‍💋‍👨🏼;; + 👩🏽‍❤️‍💋‍👨🏽;; + 👩🏽‍❤️‍💋‍👨🏾;; + 👩🏽‍❤️‍💋‍👨🏿;; + 👩🏾‍❤️‍💋‍👨🏻;; + 👩🏾‍❤️‍💋‍👨🏼;; + 👩🏾‍❤️‍💋‍👨🏽;; + 👩🏾‍❤️‍💋‍👨🏾;; + 👩🏾‍❤️‍💋‍👨🏿;; + 👩🏿‍❤️‍💋‍👨🏻;; + 👩🏿‍❤️‍💋‍👨🏼;; + 👩🏿‍❤️‍💋‍👨🏽;; + 👩🏿‍❤️‍💋‍👨🏾;; + 👩🏿‍❤️‍💋‍👨🏿;; +👨‍❤️‍💋‍👨;; + 👨🏻‍❤️‍💋‍👨🏻;; + 👨🏻‍❤️‍💋‍👨🏼;; + 👨🏻‍❤️‍💋‍👨🏽;; + 👨🏻‍❤️‍💋‍👨🏾;; + 👨🏻‍❤️‍💋‍👨🏿;; + 👨🏼‍❤️‍💋‍👨🏻;; + 👨🏼‍❤️‍💋‍👨🏼;; + 👨🏼‍❤️‍💋‍👨🏽;; + 👨🏼‍❤️‍💋‍👨🏾;; + 👨🏼‍❤️‍💋‍👨🏿;; + 👨🏽‍❤️‍💋‍👨🏻;; + 👨🏽‍❤️‍💋‍👨🏼;; + 👨🏽‍❤️‍💋‍👨🏽;; + 👨🏽‍❤️‍💋‍👨🏾;; + 👨🏽‍❤️‍💋‍👨🏿;; + 👨🏾‍❤️‍💋‍👨🏻;; + 👨🏾‍❤️‍💋‍👨🏼;; + 👨🏾‍❤️‍💋‍👨🏽;; + 👨🏾‍❤️‍💋‍👨🏾;; + 👨🏾‍❤️‍💋‍👨🏿;; + 👨🏿‍❤️‍💋‍👨🏻;; + 👨🏿‍❤️‍💋‍👨🏼;; + 👨🏿‍❤️‍💋‍👨🏽;; + 👨🏿‍❤️‍💋‍👨🏾;; + 👨🏿‍❤️‍💋‍👨🏿;; +👩‍❤️‍💋‍👩;; + 👩🏻‍❤️‍💋‍👩🏻;; + 👩🏻‍❤️‍💋‍👩🏼;; + 👩🏻‍❤️‍💋‍👩🏽;; + 👩🏻‍❤️‍💋‍👩🏾;; + 👩🏻‍❤️‍💋‍👩🏿;; + 👩🏼‍❤️‍💋‍👩🏻;; + 👩🏼‍❤️‍💋‍👩🏼;; + 👩🏼‍❤️‍💋‍👩🏽;; + 👩🏼‍❤️‍💋‍👩🏾;; + 👩🏼‍❤️‍💋‍👩🏿;; + 👩🏽‍❤️‍💋‍👩🏻;; + 👩🏽‍❤️‍💋‍👩🏼;; + 👩🏽‍❤️‍💋‍👩🏽;; + 👩🏽‍❤️‍💋‍👩🏾;; + 👩🏽‍❤️‍💋‍👩🏿;; + 👩🏾‍❤️‍💋‍👩🏻;; + 👩🏾‍❤️‍💋‍👩🏼;; + 👩🏾‍❤️‍💋‍👩🏽;; + 👩🏾‍❤️‍💋‍👩🏾;; + 👩🏾‍❤️‍💋‍👩🏿;; + 👩🏿‍❤️‍💋‍👩🏻;; + 👩🏿‍❤️‍💋‍👩🏼;; + 👩🏿‍❤️‍💋‍👩🏽;; + 👩🏿‍❤️‍💋‍👩🏾;; + 👩🏿‍❤️‍💋‍👩🏿;; +💑;; + 💑🏻;; + 💑🏼;; + 💑🏽;; + 💑🏾;; + 💑🏿;; + 🧑🏻‍❤️‍🧑🏼;; + 🧑🏻‍❤️‍🧑🏽;; + 🧑🏻‍❤️‍🧑🏾;; + 🧑🏻‍❤️‍🧑🏿;; + 🧑🏼‍❤️‍🧑🏻;; + 🧑🏼‍❤️‍🧑🏽;; + 🧑🏼‍❤️‍🧑🏾;; + 🧑🏼‍❤️‍🧑🏿;; + 🧑🏽‍❤️‍🧑🏻;; + 🧑🏽‍❤️‍🧑🏼;; + 🧑🏽‍❤️‍🧑🏾;; + 🧑🏽‍❤️‍🧑🏿;; + 🧑🏾‍❤️‍🧑🏻;; + 🧑🏾‍❤️‍🧑🏼;; + 🧑🏾‍❤️‍🧑🏽;; + 🧑🏾‍❤️‍🧑🏿;; + 🧑🏿‍❤️‍🧑🏻;; + 🧑🏿‍❤️‍🧑🏼;; + 🧑🏿‍❤️‍🧑🏽;; + 🧑🏿‍❤️‍🧑🏾;; +👩‍❤️‍👨;; + 👩🏻‍❤️‍👨🏻;; + 👩🏻‍❤️‍👨🏼;; + 👩🏻‍❤️‍👨🏽;; + 👩🏻‍❤️‍👨🏾;; + 👩🏻‍❤️‍👨🏿;; + 👩🏼‍❤️‍👨🏻;; + 👩🏼‍❤️‍👨🏼;; + 👩🏼‍❤️‍👨🏽;; + 👩🏼‍❤️‍👨🏾;; + 👩🏼‍❤️‍👨🏿;; + 👩🏽‍❤️‍👨🏻;; + 👩🏽‍❤️‍👨🏼;; + 👩🏽‍❤️‍👨🏽;; + 👩🏽‍❤️‍👨🏾;; + 👩🏽‍❤️‍👨🏿;; + 👩🏾‍❤️‍👨🏻;; + 👩🏾‍❤️‍👨🏼;; + 👩🏾‍❤️‍👨🏽;; + 👩🏾‍❤️‍👨🏾;; + 👩🏾‍❤️‍👨🏿;; + 👩🏿‍❤️‍👨🏻;; + 👩🏿‍❤️‍👨🏼;; + 👩🏿‍❤️‍👨🏽;; + 👩🏿‍❤️‍👨🏾;; + 👩🏿‍❤️‍👨🏿;; +👨‍❤️‍👨;; + 👨🏻‍❤️‍👨🏻;; + 👨🏻‍❤️‍👨🏼;; + 👨🏻‍❤️‍👨🏽;; + 👨🏻‍❤️‍👨🏾;; + 👨🏻‍❤️‍👨🏿;; + 👨🏼‍❤️‍👨🏻;; + 👨🏼‍❤️‍👨🏼;; + 👨🏼‍❤️‍👨🏽;; + 👨🏼‍❤️‍👨🏾;; + 👨🏼‍❤️‍👨🏿;; + 👨🏽‍❤️‍👨🏻;; + 👨🏽‍❤️‍👨🏼;; + 👨🏽‍❤️‍👨🏽;; + 👨🏽‍❤️‍👨🏾;; + 👨🏽‍❤️‍👨🏿;; + 👨🏾‍❤️‍👨🏻;; + 👨🏾‍❤️‍👨🏼;; + 👨🏾‍❤️‍👨🏽;; + 👨🏾‍❤️‍👨🏾;; + 👨🏾‍❤️‍👨🏿;; + 👨🏿‍❤️‍👨🏻;; + 👨🏿‍❤️‍👨🏼;; + 👨🏿‍❤️‍👨🏽;; + 👨🏿‍❤️‍👨🏾;; + 👨🏿‍❤️‍👨🏿;; +👩‍❤️‍👩;; + 👩🏻‍❤️‍👩🏻;; + 👩🏻‍❤️‍👩🏼;; + 👩🏻‍❤️‍👩🏽;; + 👩🏻‍❤️‍👩🏾;; + 👩🏻‍❤️‍👩🏿;; + 👩🏼‍❤️‍👩🏻;; + 👩🏼‍❤️‍👩🏼;; + 👩🏼‍❤️‍👩🏽;; + 👩🏼‍❤️‍👩🏾;; + 👩🏼‍❤️‍👩🏿;; + 👩🏽‍❤️‍👩🏻;; + 👩🏽‍❤️‍👩🏼;; + 👩🏽‍❤️‍👩🏽;; + 👩🏽‍❤️‍👩🏾;; + 👩🏽‍❤️‍👩🏿;; + 👩🏾‍❤️‍👩🏻;; + 👩🏾‍❤️‍👩🏼;; + 👩🏾‍❤️‍👩🏽;; + 👩🏾‍❤️‍👩🏾;; + 👩🏾‍❤️‍👩🏿;; + 👩🏿‍❤️‍👩🏻;; + 👩🏿‍❤️‍👩🏼;; + 👩🏿‍❤️‍👩🏽;; + 👩🏿‍❤️‍👩🏾;; + 👩🏿‍❤️‍👩🏿;; +👪;; +👨‍👩‍👦;; +👨‍👩‍👧;; +👨‍👩‍👧‍👦;; +👨‍👩‍👦‍👦;; +👨‍👩‍👧‍👧;; +👨‍👨‍👦;; +👨‍👨‍👧;; +👨‍👨‍👧‍👦;; +👨‍👨‍👦‍👦;; +👨‍👨‍👧‍👧;; +👩‍👩‍👦;; +👩‍👩‍👧;; +👩‍👩‍👧‍👦;; +👩‍👩‍👦‍👦;; +👩‍👩‍👧‍👧;; +👨‍👦;; +👨‍👦‍👦;; +👨‍👧;; +👨‍👧‍👦;; +👨‍👧‍👧;; +👩‍👦;; +👩‍👦‍👦;; +👩‍👧;; +👩‍👧‍👦;; +👩‍👧‍👧;; +🗣️;; +👤;; +👥;; +🫂;; +👣;; + +[animals_nature] +🐵;; +🐒;; +🦍;; +🦧;; +🐶;; +🐕;; +🦮;; +🐕‍🦺;; +🐩;; +🐺;; +🦊;; +🦝;; +🐱;; +🐈;; +🐈‍⬛;; +🦁;; +🐯;; +🐅;; +🐆;; +🐴;; +🐎;; +🦄;; +🦓;; +🦌;; +🦬;; +🐮;; +🐂;; +🐃;; +🐄;; +🐷;; +🐖;; +🐗;; +🐽;; +🐏;; +🐑;; +🐐;; +🐪;; +🐫;; +🦙;; +🦒;; +🐘;; +🦣;; +🦏;; +🦛;; +🐭;; +🐁;; +🐀;; +🐹;; +🐰;; +🐇;; +🐿️;; +🦫;; +🦔;; +🦇;; +🐻;; +🐻‍❄️;; +🐨;; +🐼;; +🦥;; +🦦;; +🦨;; +🦘;; +🦡;; +🐾;; +🦃;; +🐔;; +🐓;; +🐣;; +🐤;; +🐥;; +🐦;; +🐧;; +🕊️;; +🦅;; +🦆;; +🦢;; +🦉;; +🦤;; +🪶;; +🦩;; +🦚;; +🦜;; +🐸;; +🐊;; +🐢;; +🦎;; +🐍;; +🐲;; +🐉;; +🦕;; +🦖;; +🐳;; +🐋;; +🐬;; +🦭;; +🐟;; +🐠;; +🐡;; +🦈;; +🐙;; +🐚;; +🪸;; +🐌;; +🦋;; +🐛;; +🐜;; +🐝;; +🪲;; +🐞;; +🦗;; +🪳;; +🕷️;; +🕸️;; +🦂;; +🦟;; +🪰;; +🪱;; +🦠;; +💐;; +🌸;; +💮;; +🪷;; +🏵️;; +🌹;; +🥀;; +🌺;; +🌻;; +🌼;; +🌷;; +🌱;; +🪴;; +🌲;; +🌳;; +🌴;; +🌵;; +🌾;; +🌿;; +☘️;; +🍀;; +🍁;; +🍂;; +🍃;; +🪹;; +🪺;; + +[food_drink] +🍇;; +🍈;; +🍉;; +🍊;; +🍋;; +🍌;; +🍍;; +🥭;; +🍎;; +🍏;; +🍐;; +🍑;; +🍒;; +🍓;; +🫐;; +🥝;; +🍅;; +🫒;; +🥥;; +🥑;; +🍆;; +🥔;; +🥕;; +🌽;; +🌶️;; +🫑;; +🥒;; +🥬;; +🥦;; +🧄;; +🧅;; +🍄;; +🥜;; +🫘;; +🌰;; +🍞;; +🥐;; +🥖;; +🫓;; +🥨;; +🥯;; +🥞;; +🧇;; +🧀;; +🍖;; +🍗;; +🥩;; +🥓;; +🍔;; +🍟;; +🍕;; +🌭;; +🥪;; +🌮;; +🌯;; +🫔;; +🥙;; +🧆;; +🥚;; +🍳;; +🥘;; +🍲;; +🫕;; +🥣;; +🥗;; +🍿;; +🧈;; +🧂;; +🥫;; +🍱;; +🍘;; +🍙;; +🍚;; +🍛;; +🍜;; +🍝;; +🍠;; +🍢;; +🍣;; +🍤;; +🍥;; +🥮;; +🍡;; +🥟;; +🥠;; +🥡;; +🦀;; +🦞;; +🦐;; +🦑;; +🦪;; +🍦;; +🍧;; +🍨;; +🍩;; +🍪;; +🎂;; +🍰;; +🧁;; +🥧;; +🍫;; +🍬;; +🍭;; +🍮;; +🍯;; +🍼;; +🥛;; +☕;; +🫖;; +🍵;; +🍶;; +🍾;; +🍷;; +🍸;; +🍹;; +🍺;; +🍻;; +🥂;; +🥃;; +🫗;; +🥤;; +🧋;; +🧃;; +🧉;; +🧊;; +🥢;; +🍽️;; +🍴;; +🥄;; +🔪;; +🫙;; +🏺;; + +[travel_places] +🌍;; +🌎;; +🌏;; +🌐;; +🗺️;; +🗾;; +🧭;; +🏔️;; +⛰️;; +🌋;; +🗻;; +🏕️;; +🏖️;; +🏜️;; +🏝️;; +🏞️;; +🏟️;; +🏛️;; +🏗️;; +🧱;; +🪨;; +🪵;; +🛖;; +🏘️;; +🏚️;; +🏠;; +🏡;; +🏢;; +🏣;; +🏤;; +🏥;; +🏦;; +🏨;; +🏩;; +🏪;; +🏫;; +🏬;; +🏭;; +🏯;; +🏰;; +💒;; +🗼;; +🗽;; +⛪;; +🕌;; +🛕;; +🕍;; +⛩️;; +🕋;; +⛲;; +⛺;; +🌁;; +🌃;; +🏙️;; +🌄;; +🌅;; +🌆;; +🌇;; +🌉;; +♨️;; +🎠;; +🛝;; +🎡;; +🎢;; +💈;; +🎪;; +🚂;; +🚃;; +🚄;; +🚅;; +🚆;; +🚇;; +🚈;; +🚉;; +🚊;; +🚝;; +🚞;; +🚋;; +🚌;; +🚍;; +🚎;; +🚐;; +🚑;; +🚒;; +🚓;; +🚔;; +🚕;; +🚖;; +🚗;; +🚘;; +🚙;; +🛻;; +🚚;; +🚛;; +🚜;; +🏎️;; +🏍️;; +🛵;; +🦽;; +🦼;; +🛺;; +🚲;; +🛴;; +🛹;; +🛼;; +🚏;; +🛣️;; +🛤️;; +🛢️;; +⛽;; +🛞;; +🚨;; +🚥;; +🚦;; +🛑;; +🚧;; +⚓;; +🛟;; +⛵;; +🛶;; +🚤;; +🛳️;; +⛴️;; +🛥️;; +🚢;; +✈️;; +🛩️;; +🛫;; +🛬;; +🪂;; +💺;; +🚁;; +🚟;; +🚠;; +🚡;; +🛰️;; +🚀;; +🛸;; +🛎️;; +🧳;; +⌛;; +⏳;; +⌚;; +⏰;; +⏱️;; +⏲️;; +🕰️;; +🕛;; +🕧;; +🕐;; +🕜;; +🕑;; +🕝;; +🕒;; +🕞;; +🕓;; +🕟;; +🕔;; +🕠;; +🕕;; +🕡;; +🕖;; +🕢;; +🕗;; +🕣;; +🕘;; +🕤;; +🕙;; +🕥;; +🕚;; +🕦;; +🌑;; +🌒;; +🌓;; +🌔;; +🌕;; +🌖;; +🌗;; +🌘;; +🌙;; +🌚;; +🌛;; +🌜;; +🌡️;; +☀️;; +🌝;; +🌞;; +🪐;; +⭐;; +🌟;; +🌠;; +🌌;; +☁️;; +⛅;; +⛈️;; +🌤️;; +🌥️;; +🌦️;; +🌧️;; +🌨️;; +🌩️;; +🌪️;; +🌫️;; +🌬️;; +🌀;; +🌈;; +🌂;; +☂️;; +☔;; +⛱️;; +⚡;; +❄️;; +☃️;; +⛄;; +☄️;; +🔥;; +💧;; +🌊;; + +[activities] +🎃;; +🎄;; +🎆;; +🎇;; +🧨;; +✨;; +🎈;; +🎉;; +🎊;; +🎋;; +🎍;; +🎎;; +🎏;; +🎐;; +🎑;; +🧧;; +🎀;; +🎁;; +🎗️;; +🎟️;; +🎫;; +🎖️;; +🏆;; +🏅;; +🥇;; +🥈;; +🥉;; +⚽;; +⚾;; +🥎;; +🏀;; +🏐;; +🏈;; +🏉;; +🎾;; +🥏;; +🎳;; +🏏;; +🏑;; +🏒;; +🥍;; +🏓;; +🏸;; +🥊;; +🥋;; +🥅;; +⛳;; +⛸️;; +🎣;; +🤿;; +🎽;; +🎿;; +🛷;; +🥌;; +🎯;; +🪀;; +🪁;; +🎱;; +🔮;; +🪄;; +🧿;; +🪬;; +🎮;; +🕹️;; +🎰;; +🎲;; +🧩;; +🧸;; +🪅;; +🪩;; +🪆;; +♠️;; +♥️;; +♦️;; +♣️;; +♟️;; +🃏;; +🀄;; +🎴;; +🎭;; +🖼️;; +🎨;; +🧵;; +🪡;; +🧶;; +🪢;; + +[objects] +👓;; +🕶️;; +🥽;; +🥼;; +🦺;; +👔;; +👕;; +👖;; +🧣;; +🧤;; +🧥;; +🧦;; +👗;; +👘;; +🥻;; +🩱;; +🩲;; +🩳;; +👙;; +👚;; +👛;; +👜;; +👝;; +🛍️;; +🎒;; +🩴;; +👞;; +👟;; +🥾;; +🥿;; +👠;; +👡;; +🩰;; +👢;; +👑;; +👒;; +🎩;; +🎓;; +🧢;; +🪖;; +⛑️;; +📿;; +💄;; +💍;; +💎;; +🔇;; +🔈;; +🔉;; +🔊;; +📢;; +📣;; +📯;; +🔔;; +🔕;; +🎼;; +🎵;; +🎶;; +🎙️;; +🎚️;; +🎛️;; +🎤;; +🎧;; +📻;; +🎷;; +🪗;; +🎸;; +🎹;; +🎺;; +🎻;; +🪕;; +🥁;; +🪘;; +📱;; +📲;; +☎️;; +📞;; +📟;; +📠;; +🔋;; +🪫;; +🔌;; +💻;; +🖥️;; +🖨️;; +⌨️;; +🖱️;; +🖲️;; +💽;; +💾;; +💿;; +📀;; +🧮;; +🎥;; +🎞️;; +📽️;; +🎬;; +📺;; +📷;; +📸;; +📹;; +📼;; +🔍;; +🔎;; +🕯️;; +💡;; +🔦;; +🏮;; +🪔;; +📔;; +📕;; +📖;; +📗;; +📘;; +📙;; +📚;; +📓;; +📒;; +📃;; +📜;; +📄;; +📰;; +🗞️;; +📑;; +🔖;; +🏷️;; +💰;; +🪙;; +💴;; +💵;; +💶;; +💷;; +💸;; +💳;; +🧾;; +💹;; +✉️;; +📧;; +📨;; +📩;; +📤;; +📥;; +📦;; +📫;; +📪;; +📬;; +📭;; +📮;; +🗳️;; +✏️;; +✒️;; +🖋️;; +🖊️;; +🖌️;; +🖍️;; +📝;; +💼;; +📁;; +📂;; +🗂️;; +📅;; +📆;; +🗒️;; +🗓️;; +📇;; +📈;; +📉;; +📊;; +📋;; +📌;; +📍;; +📎;; +🖇️;; +📏;; +📐;; +✂️;; +🗃️;; +🗄️;; +🗑️;; +🔒;; +🔓;; +🔏;; +🔐;; +🔑;; +🗝️;; +🔨;; +🪓;; +⛏️;; +⚒️;; +🛠️;; +🗡️;; +⚔️;; +🔫;; +🪃;; +🏹;; +🛡️;; +🪚;; +🔧;; +🪛;; +🔩;; +⚙️;; +🗜️;; +⚖️;; +🦯;; +🔗;; +⛓️;; +🪝;; +🧰;; +🧲;; +🪜;; +⚗️;; +🧪;; +🧫;; +🧬;; +🔬;; +🔭;; +📡;; +💉;; +🩸;; +💊;; +🩹;; +🩼;; +🩺;; +🩻;; +🚪;; +🛗;; +🪞;; +🪟;; +🛏️;; +🛋️;; +🪑;; +🚽;; +🪠;; +🚿;; +🛁;; +🪤;; +🪒;; +🧴;; +🧷;; +🧹;; +🧺;; +🧻;; +🪣;; +🧼;; +🫧;; +🪥;; +🧽;; +🧯;; +🛒;; +🚬;; +⚰️;; +🪦;; +⚱️;; +🗿;; +🪧;; +🪪;; + +[symbols] +🏧;; +🚮;; +🚰;; +♿;; +🚹;; +🚺;; +🚻;; +🚼;; +🚾;; +🛂;; +🛃;; +🛄;; +🛅;; +⚠️;; +🚸;; +⛔;; +🚫;; +🚳;; +🚭;; +🚯;; +🚱;; +🚷;; +📵;; +🔞;; +☢️;; +☣️;; +⬆️;; +↗️;; +➡️;; +↘️;; +⬇️;; +↙️;; +⬅️;; +↖️;; +↕️;; +↔️;; +↩️;; +↪️;; +⤴️;; +⤵️;; +🔃;; +🔄;; +🔙;; +🔚;; +🔛;; +🔜;; +🔝;; +🛐;; +⚛️;; +🕉️;; +✡️;; +☸️;; +☯️;; +✝️;; +☦️;; +☪️;; +☮️;; +🕎;; +🔯;; +♈;; +♉;; +♊;; +♋;; +♌;; +♍;; +♎;; +♏;; +♐;; +♑;; +♒;; +♓;; +⛎;; +🔀;; +🔁;; +🔂;; +▶️;; +⏩;; +⏭️;; +⏯️;; +◀️;; +⏪;; +⏮️;; +🔼;; +⏫;; +🔽;; +⏬;; +⏸️;; +⏹️;; +⏺️;; +⏏️;; +🎦;; +🔅;; +🔆;; +📶;; +📳;; +📴;; +♀️;; +♂️;; +⚧️;; +✖️;; +➕;; +➖;; +➗;; +🟰;; +♾️;; +‼️;; +⁉️;; +❓;; +❔;; +❕;; +❗;; +〰️;; +💱;; +💲;; +⚕️;; +♻️;; +⚜️;; +🔱;; +📛;; +🔰;; +⭕;; +✅;; +☑️;; +✔️;; +❌;; +❎;; +➰;; +➿;; +〽️;; +✳️;; +✴️;; +❇️;; +©️;; +®️;; +™️;; +#️⃣;; +*️⃣;; +0️⃣;; +1️⃣;; +2️⃣;; +3️⃣;; +4️⃣;; +5️⃣;; +6️⃣;; +7️⃣;; +8️⃣;; +9️⃣;; +🔟;; +🔠;; +🔡;; +🔢;; +🔣;; +🔤;; +🅰️;; +🆎;; +🅱️;; +🆑;; +🆒;; +🆓;; +ℹ️;; +🆔;; +Ⓜ️;; +🆕;; +🆖;; +🅾️;; +🆗;; +🅿️;; +🆘;; +🆙;; +🆚;; +🈁;; +🈂️;; +🈷️;; +🈶;; +🈯;; +🉐;; +🈹;; +🈚;; +🈲;; +🉑;; +🈸;; +🈴;; +🈳;; +㊗️;; +㊙️;; +🈺;; +🈵;; +🔴;; +🟠;; +🟡;; +🟢;; +🔵;; +🟣;; +🟤;; +⚫;; +⚪;; +🟥;; +🟧;; +🟨;; +🟩;; +🟦;; +🟪;; +🟫;; +⬛;; +⬜;; +◼️;; +◻️;; +◾;; +◽;; +▪️;; +▫️;; +🔶;; +🔷;; +🔸;; +🔹;; +🔺;; +🔻;; +💠;; +🔘;; +🔳;; +🔲;; + +[flags] +🏁;; +🚩;; +🎌;; +🏴;; +🏳️;; +🏳️‍🌈;; +🏳️‍⚧️;; +🏴‍☠️;; +🇦🇨;; +🇦🇩;; +🇦🇪;; +🇦🇫;; +🇦🇬;; +🇦🇮;; +🇦🇱;; +🇦🇲;; +🇦🇴;; +🇦🇶;; +🇦🇷;; +🇦🇸;; +🇦🇹;; +🇦🇺;; +🇦🇼;; +🇦🇽;; +🇦🇿;; +🇧🇦;; +🇧🇧;; +🇧🇩;; +🇧🇪;; +🇧🇫;; +🇧🇬;; +🇧🇭;; +🇧🇮;; +🇧🇯;; +🇧🇱;; +🇧🇲;; +🇧🇳;; +🇧🇴;; +🇧🇶;; +🇧🇷;; +🇧🇸;; +🇧🇹;; +🇧🇻;; +🇧🇼;; +🇧🇾;; +🇧🇿;; +🇨🇦;; +🇨🇨;; +🇨🇩;; +🇨🇫;; +🇨🇬;; +🇨🇭;; +🇨🇮;; +🇨🇰;; +🇨🇱;; +🇨🇲;; +🇨🇳;; +🇨🇴;; +🇨🇵;; +🇨🇷;; +🇨🇺;; +🇨🇻;; +🇨🇼;; +🇨🇽;; +🇨🇾;; +🇨🇿;; +🇩🇪;; +🇩🇬;; +🇩🇯;; +🇩🇰;; +🇩🇲;; +🇩🇴;; +🇩🇿;; +🇪🇦;; +🇪🇨;; +🇪🇪;; +🇪🇬;; +🇪🇭;; +🇪🇷;; +🇪🇸;; +🇪🇹;; +🇪🇺;; +🇫🇮;; +🇫🇯;; +🇫🇰;; +🇫🇲;; +🇫🇴;; +🇫🇷;; +🇬🇦;; +🇬🇧;; +🇬🇩;; +🇬🇪;; +🇬🇫;; +🇬🇬;; +🇬🇭;; +🇬🇮;; +🇬🇱;; +🇬🇲;; +🇬🇳;; +🇬🇵;; +🇬🇶;; +🇬🇷;; +🇬🇸;; +🇬🇹;; +🇬🇺;; +🇬🇼;; +🇬🇾;; +🇭🇰;; +🇭🇲;; +🇭🇳;; +🇭🇷;; +🇭🇹;; +🇭🇺;; +🇮🇨;; +🇮🇩;; +🇮🇪;; +🇮🇱;; +🇮🇲;; +🇮🇳;; +🇮🇴;; +🇮🇶;; +🇮🇷;; +🇮🇸;; +🇮🇹;; +🇯🇪;; +🇯🇲;; +🇯🇴;; +🇯🇵;; +🇰🇪;; +🇰🇬;; +🇰🇭;; +🇰🇮;; +🇰🇲;; +🇰🇳;; +🇰🇵;; +🇰🇷;; +🇰🇼;; +🇰🇾;; +🇰🇿;; +🇱🇦;; +🇱🇧;; +🇱🇨;; +🇱🇮;; +🇱🇰;; +🇱🇷;; +🇱🇸;; +🇱🇹;; +🇱🇺;; +🇱🇻;; +🇱🇾;; +🇲🇦;; +🇲🇨;; +🇲🇩;; +🇲🇪;; +🇲🇫;; +🇲🇬;; +🇲🇭;; +🇲🇰;; +🇲🇱;; +🇲🇲;; +🇲🇳;; +🇲🇴;; +🇲🇵;; +🇲🇶;; +🇲🇷;; +🇲🇸;; +🇲🇹;; +🇲🇺;; +🇲🇻;; +🇲🇼;; +🇲🇽;; +🇲🇾;; +🇲🇿;; +🇳🇦;; +🇳🇨;; +🇳🇪;; +🇳🇫;; +🇳🇬;; +🇳🇮;; +🇳🇱;; +🇳🇴;; +🇳🇵;; +🇳🇷;; +🇳🇺;; +🇳🇿;; +🇴🇲;; +🇵🇦;; +🇵🇪;; +🇵🇫;; +🇵🇬;; +🇵🇭;; +🇵🇰;; +🇵🇱;; +🇵🇲;; +🇵🇳;; +🇵🇷;; +🇵🇸;; +🇵🇹;; +🇵🇼;; +🇵🇾;; +🇶🇦;; +🇷🇪;; +🇷🇴;; +🇷🇸;; +🇷🇺;; +🇷🇼;; +🇸🇦;; +🇸🇧;; +🇸🇨;; +🇸🇩;; +🇸🇪;; +🇸🇬;; +🇸🇭;; +🇸🇮;; +🇸🇯;; +🇸🇰;; +🇸🇱;; +🇸🇲;; +🇸🇳;; +🇸🇴;; +🇸🇷;; +🇸🇸;; +🇸🇹;; +🇸🇻;; +🇸🇽;; +🇸🇾;; +🇸🇿;; +🇹🇦;; +🇹🇨;; +🇹🇩;; +🇹🇫;; +🇹🇬;; +🇹🇭;; +🇹🇯;; +🇹🇰;; +🇹🇱;; +🇹🇲;; +🇹🇳;; +🇹🇴;; +🇹🇷;; +🇹🇹;; +🇹🇻;; +🇹🇼;; +🇹🇿;; +🇺🇦;; +🇺🇬;; +🇺🇲;; +🇺🇳;; +🇺🇸;; +🇺🇾;; +🇺🇿;; +🇻🇦;; +🇻🇨;; +🇻🇪;; +🇻🇬;; +🇻🇮;; +🇻🇳;; +🇻🇺;; +🇼🇫;; +🇼🇸;; +🇽🇰;; +🇾🇪;; +🇾🇹;; +🇿🇦;; +🇿🇲;; +🇿🇼;; +🏴󠁧󠁢󠁥󠁮󠁧󠁿;; +🏴󠁧󠁢󠁳󠁣󠁴󠁿;; +🏴󠁧󠁢󠁷󠁬󠁳󠁿;; + diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt new file mode 100644 index 0000000..72bfe06 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt @@ -0,0 +1,50 @@ +package com.simplemobiletools.keyboard.adapters + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.keyboard.R +import com.simplemobiletools.keyboard.media.emoji.Emoji +import kotlinx.android.synthetic.main.item_emoji.view.* + +class EmojisAdapter( + val context: Context, var items: List, val itemClick: (emoji: Emoji) -> Unit +) : RecyclerView.Adapter() { + + private val layoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EmojisAdapter.ViewHolder { + val layoutId = R.layout.item_emoji + val view = layoutInflater.inflate(layoutId, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: EmojisAdapter.ViewHolder, position: Int) { + val item = items[position] + holder.bindView(item) { itemView -> + setupEmoji(itemView, item) + } + } + + override fun getItemCount(): Int { + return items.size + } + + private fun setupEmoji(view: View, emoji: Emoji) { + view.emoji_value.text = emoji.value + } + + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bindView(any: Emoji, callback: (itemView: View) -> Unit): View { + return itemView.apply { + callback(this) + + setOnClickListener { + itemClick.invoke(any) + } + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt new file mode 100644 index 0000000..3be5154 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt @@ -0,0 +1,19 @@ +package com.simplemobiletools.keyboard.extensions + +import androidx.recyclerview.widget.RecyclerView + +/** + * Calls the [scroll] callback when the receiving RecyclerView's scroll position is changed. + */ +fun RecyclerView.onScroll(scroll: (Int) -> Unit) { + addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled( + recyclerView: RecyclerView, + dx: Int, + dy: Int, + ) { + super.onScrolled(recyclerView, dx, dy) + scroll(computeVerticalScrollOffset()) + } + }) +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt index acbd2ab..b3bec15 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt @@ -26,3 +26,6 @@ const val LANGUAGE_GERMAN = 5 const val LANGUAGE_ENGLISH_DVORAK = 6 const val LANGUAGE_ROMANIAN = 7 const val LANGUAGE_SLOVENIAN = 8 + + +const val EMOJI_SPEC_FILE_PATH = "media/emoji_spec.txt" diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt new file mode 100644 index 0000000..4799583 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt @@ -0,0 +1,8 @@ +package com.simplemobiletools.keyboard.media.emoji + + +data class Emoji(val value: String, val name: String, val keywords: List) { + override fun toString(): String { + return "Emoji { value=$value, name=$name, keywords=$keywords }" + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt new file mode 100644 index 0000000..094d36e --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt @@ -0,0 +1,63 @@ +package com.simplemobiletools.keyboard.media.emoji + +import android.content.Context + +private var cachedEmojiData: MutableList? = null + +/** + * Reads the emoji list at the given [path] and returns an parsed [MutableList]. If the + * given file path does not exist, an empty [MutableList] is returned. + * + * @param context The initiating view's context. + * @param path The path to the asset file. + */ +fun parseRawEmojiSpecsFile( + context: Context, path: String +): MutableList { + cachedEmojiData?.let { return it } + val emojis = mutableListOf() + var emojiEditorList: MutableList? = null + + fun commitEmojiEditorList() { + emojiEditorList?.let { + // add only the base emoji for now, ignore the variations + emojis.add(it.first()) + } + emojiEditorList = null + } + + context.assets.open(path).bufferedReader().useLines { lines -> + for (line in lines) { + if (line.startsWith("#")) { + // Comment line + } else if (line.startsWith("[")) { + commitEmojiEditorList() + } else if (line.trim().isEmpty()) { + // Empty line + continue + } else { + if (!line.startsWith("\t")) { + commitEmojiEditorList() + } + // Assume it is a data line + val data = line.split(";") + if (data.size == 3) { + val emoji = Emoji( + value = data[0].trim(), + name = data[1].trim(), + keywords = data[2].split("|").map { it.trim() } + ) + if (emojiEditorList != null) { + emojiEditorList!!.add(emoji) + } else { + emojiEditorList = mutableListOf(emoji) + } + } + } + } + commitEmojiEditorList() + } + + cachedEmojiData = emojis + return emojis +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt index 7679c14..a092447 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt @@ -106,7 +106,8 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL val selectedText = inputConnection.getSelectedText(0) if (TextUtils.isEmpty(selectedText)) { - inputConnection.deleteSurroundingText(1, 0) + inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) + inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)) } else { inputConnection.commitText("", 1) } @@ -155,6 +156,10 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL keyboard = MyKeyboard(this, keyboardXml, enterKeyType) keyboardView!!.setKeyboard(keyboard!!) } + MyKeyboard.KEYCODE_EMOJI -> { + keyboardView?.vibrateIfNeeded() + keyboardView?.openEmojiChooser() + } else -> { var codeChar = code.toChar() if (Character.isLetter(codeChar) && keyboard!!.mShiftState > SHIFT_OFF) { diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt new file mode 100644 index 0000000..4601f4b --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt @@ -0,0 +1,36 @@ +package com.simplemobiletools.keyboard.views + +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import kotlin.math.max + +/** + * RecyclerView GridLayoutManager but with automatic spanCount calculation. + * + * @param context The initiating view's context. + * @param itemWidth: Grid item width in pixels. Will be used to calculate span count. + */ +class AutoGridLayoutManager( + context: Context, + private var itemWidth: Int +) : GridLayoutManager(context, 1) { + + init { + require(itemWidth >= 0) { "itemWidth must be >= 0" } + } + + override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) { + val width = width + val height = height + if (itemWidth > 0 && width > 0 && height > 0) { + val totalSpace = if (orientation == VERTICAL) { + width - paddingRight - paddingLeft + } else { + height - paddingTop - paddingBottom + } + spanCount = max(1, totalSpace / itemWidth) + } + super.onLayoutChildren(recycler, state) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index e632fa7..0840570 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -33,17 +33,18 @@ import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.activities.ManageClipboardItemsActivity import com.simplemobiletools.keyboard.activities.SettingsActivity import com.simplemobiletools.keyboard.adapters.ClipsKeyboardAdapter -import com.simplemobiletools.keyboard.extensions.clipsDB -import com.simplemobiletools.keyboard.extensions.config -import com.simplemobiletools.keyboard.extensions.getCurrentClip -import com.simplemobiletools.keyboard.extensions.getStrokeColor +import com.simplemobiletools.keyboard.adapters.EmojisAdapter +import com.simplemobiletools.keyboard.extensions.* import com.simplemobiletools.keyboard.helpers.* import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_DELETE +import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_EMOJI import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_ENTER import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_MODE_CHANGE import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SHIFT import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SPACE import com.simplemobiletools.keyboard.interfaces.RefreshClipsListener +import com.simplemobiletools.keyboard.media.emoji.Emoji +import com.simplemobiletools.keyboard.media.emoji.parseRawEmojiSpecsFile import com.simplemobiletools.keyboard.models.Clip import com.simplemobiletools.keyboard.models.ClipsSectionLabel import com.simplemobiletools.keyboard.models.ListItem @@ -51,7 +52,7 @@ import kotlinx.android.synthetic.main.keyboard_popup_keyboard.view.* import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.* import java.util.* -@SuppressLint("UseCompatLoadingForDrawables") +@SuppressLint("UseCompatLoadingForDrawables", "ClickableViewAccessibility") class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int = 0) : View(context, attrs, defStyleRes) { @@ -153,6 +154,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private var mToolbarHolder: View? = null private var mClipboardManagerHolder: View? = null + private var mEmojiPaletteHolder: View? = null // For multi-tap private var mLastTapTime = 0L @@ -331,6 +333,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut clipboard_content_placeholder_2.setTextColor(mTextColor) } + setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor) setupStoredClips() } } @@ -364,6 +367,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut fun setKeyboardHolder(keyboardHolder: View) { mToolbarHolder = keyboardHolder.toolbar_holder mClipboardManagerHolder = keyboardHolder.clipboard_manager_holder + mEmojiPaletteHolder = keyboardHolder.emoji_palette_holder mToolbarHolder!!.apply { settings_cog.setOnLongClickListener { context.toast(R.string.settings); true; } @@ -412,6 +416,12 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } } } + mEmojiPaletteHolder!!.apply { + emoji_palette_close.setOnClickListener { + vibrateIfNeeded() + closeEmojiChooser() + } + } } fun vibrateIfNeeded() { @@ -436,7 +446,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut * @return true if the shift is in a pressed state, false otherwise */ private fun isShifted(): Boolean { - return mKeyboard?.mShiftState ?: SHIFT_OFF > SHIFT_OFF + return (mKeyboard?.mShiftState ?: SHIFT_OFF) > SHIFT_OFF } private fun setPopupOffset(x: Int, y: Int) { @@ -450,7 +460,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private fun adjustCase(label: CharSequence): CharSequence? { var newLabel: CharSequence? = label if (newLabel != null && newLabel.isNotEmpty() && mKeyboard!!.mShiftState > SHIFT_OFF && newLabel.length < 3 && Character.isLowerCase(newLabel[0])) { - newLabel = newLabel.toString().toUpperCase() + newLabel = newLabel.toString().uppercase(Locale.getDefault()) } return newLabel } @@ -607,7 +617,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut if (code == KEYCODE_ENTER) { key.icon!!.applyColorFilter(mPrimaryColor.getContrastColor()) - } else if (code == KEYCODE_DELETE || code == KEYCODE_SHIFT) { + } else if (code == KEYCODE_DELETE || code == KEYCODE_SHIFT || code == KEYCODE_EMOJI) { key.icon!!.applyColorFilter(mTextColor) } @@ -1372,6 +1382,92 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mClipboardManagerHolder?.clips_list?.adapter = adapter } + private fun setupEmojiPalette(toolbarColor: Int, backgroundColor: Int, textColor: Int) { + mEmojiPaletteHolder?.apply { + emoji_palette_top_bar.background = ColorDrawable(toolbarColor) + emoji_palette_holder.background = ColorDrawable(backgroundColor) + emoji_palette_close.applyColorFilter(textColor) + emoji_palette_label.setTextColor(textColor) + + emoji_palette_bottom_bar.background = ColorDrawable(backgroundColor) + val bottomTextColor = textColor.darkenColor() + emoji_palette_mode_change.apply { + setTextColor(bottomTextColor) + setOnClickListener { + closeEmojiChooser() + } + } + emoji_palette_backspace.apply { + applyColorFilter(bottomTextColor) + setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + isPressed = true + mRepeatKeyIndex = mKeys.indexOfFirst { it.code == KEYCODE_DELETE } + mCurrentKey = mRepeatKeyIndex + mOnKeyboardActionListener!!.onKey(KEYCODE_DELETE) + // setup repeating backspace + val msg = mHandler!!.obtainMessage(MSG_REPEAT) + mHandler!!.sendMessageDelayed(msg, REPEAT_START_DELAY.toLong()) + true + } + MotionEvent.ACTION_UP -> { + mHandler!!.removeMessages(MSG_REPEAT) + mRepeatKeyIndex = NOT_A_KEY + isPressed = false + false + } + else -> false + } + } + } + } + setupEmojis() + } + + fun openEmojiChooser() { + mEmojiPaletteHolder!!.emoji_palette_holder.beVisible() + setupEmojis() + } + + private fun closeEmojiChooser() { + mEmojiPaletteHolder?.apply { + emoji_palette_holder?.beGone() + mEmojiPaletteHolder?.emojis_list?.scrollToPosition(0) + } + } + + private fun setupEmojis() { + ensureBackgroundThread { + val fullEmojiList = parseRawEmojiSpecsFile(context, EMOJI_SPEC_FILE_PATH) + val systemFontPaint = Paint().apply { + typeface = Typeface.DEFAULT + } + val emojis = fullEmojiList.filter { emoji -> + systemFontPaint.hasGlyph(emoji.value) + } + Handler(Looper.getMainLooper()).post { + setupEmojiAdapter(emojis) + } + } + } + + private fun setupEmojiAdapter(emojis: List) { + val emojiItemWidth = context.resources.getDimensionPixelSize(R.dimen.emoji_item_size) + val emojiTopBarElevation = context.resources.getDimensionPixelSize(R.dimen.emoji_top_bar_elevation).toFloat() + + mEmojiPaletteHolder!!.emojis_list.apply { + layoutManager = AutoGridLayoutManager(context, emojiItemWidth) + adapter = EmojisAdapter(context = context, items = emojis) { emoji -> + mOnKeyboardActionListener!!.onText(emoji.value) + vibrateIfNeeded() + } + onScroll { + mEmojiPaletteHolder!!.emoji_palette_top_bar.elevation = if (it > 4) emojiTopBarElevation else 0f + } + } + } + private fun closing() { if (mPreviewPopup.isShowing) { mPreviewPopup.dismiss() diff --git a/app/src/main/res/drawable/ic_clear_outline_vector.xml b/app/src/main/res/drawable/ic_clear_outline_vector.xml new file mode 100644 index 0000000..cc9da59 --- /dev/null +++ b/app/src/main/res/drawable/ic_clear_outline_vector.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml b/app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml new file mode 100644 index 0000000..241c1a7 --- /dev/null +++ b/app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ripple_all_corners_medium.xml b/app/src/main/res/drawable/ripple_all_corners_medium.xml new file mode 100644 index 0000000..4264e74 --- /dev/null +++ b/app/src/main/res/drawable/ripple_all_corners_medium.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/item_emoji.xml b/app/src/main/res/layout/item_emoji.xml new file mode 100644 index 0000000..62cf0bb --- /dev/null +++ b/app/src/main/res/layout/item_emoji.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/layout/keyboard_view_keyboard.xml b/app/src/main/res/layout/keyboard_view_keyboard.xml index dc33429..7e8f0ae 100644 --- a/app/src/main/res/layout/keyboard_view_keyboard.xml +++ b/app/src/main/res/layout/keyboard_view_keyboard.xml @@ -105,6 +105,100 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + إظهار نافذة منبثقة عند الضغط على المفاتيح يهتز عند ضغط الزر لغة لوحة المفاتيح + + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 4226e91..e54e82a 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -31,6 +31,9 @@ Show a popup on keypress Vibrate on keypress Keyboard language + + Emojis + ABC + Emojis + ABC + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index b951ae3..a0a73f8 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -31,6 +31,9 @@ Mostra una finestra emergent en prémer les tecles Vibra en prémer les tecles Idioma del teclat + + Emojis + ABC + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 97602ee..e5f2ece 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -31,6 +31,9 @@ Vis en popup ved tastetryk Vibrér ved tastetryk Tastatursprog + + Emojis + ABC + Emojis + ABC + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 4226e91..e54e82a 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -31,6 +31,9 @@ Show a popup on keypress Vibrate on keypress Keyboard language + + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Gestionați elementele din clipboard Clipboard-ul dvs. este gol. Odată ce ați copiat un text, acesta va apărea aici. De asemenea, puteți fixa clipuri pentru ca acestea să nu dispară mai târziu. @@ -31,6 +31,9 @@ Afișați o fereastră pop-up la apăsarea unei taste Vibrează la apăsarea tastelor Limba tastaturii + + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + 28sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4226e91..e54e82a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,9 @@ Show a popup on keypress Vibrate on keypress Keyboard language + + Emojis + ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC